diff --git a/apps/backend/backend_main.c b/apps/backend/backend_main.c index 25680a660..2bcc8d215 100644 --- a/apps/backend/backend_main.c +++ b/apps/backend/backend_main.c @@ -1029,13 +1029,13 @@ main(int argc, daemonized errors OK. Before this stage, errors are logged on stderr also */ if (foreground==0){ + clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, + logdst==CLICON_LOG_FILE?CLICON_LOG_FILE:CLICON_LOG_SYSLOG); /* Call plugin callbacks just before fork/daemonization */ if (clixon_plugin_pre_daemon_all(h) < 0) goto done; - clicon_log_init(__PROGRAM__, dbg?LOG_DEBUG:LOG_INFO, - logdst==CLICON_LOG_FILE?CLICON_LOG_FILE:CLICON_LOG_SYSLOG); if (daemon(0, 0) < 0){ - fprintf(stderr, "config: daemon"); + clicon_err(OE_UNIX, errno, "daemon"); exit(-1); } } diff --git a/apps/restconf/restconf_main_native.c b/apps/restconf/restconf_main_native.c index 588c4662e..ca6db46b2 100644 --- a/apps/restconf/restconf_main_native.c +++ b/apps/restconf/restconf_main_native.c @@ -669,7 +669,7 @@ restconf_clixon_backend(clicon_handle h, while (1){ if (clicon_hello_req(h, "cl:restconf", NULL, &id) < 0){ if (errno == ENOENT){ - fprintf(stderr, "waiting"); + clicon_err(OE_UNIX, errno, "waiting"); sleep(1); continue; } diff --git a/lib/src/clixon_proc.c b/lib/src/clixon_proc.c index 6bceeb11e..31369df3c 100644 --- a/lib/src/clixon_proc.c +++ b/lib/src/clixon_proc.c @@ -214,18 +214,18 @@ clixon_proc_socket(char **argv, close(sp[0]); close(0); if (dup2(sp[1], STDIN_FILENO) < 0){ - perror("dup2"); + clicon_err(OE_UNIX, errno, "dup2(STDIN)"); return -1; } close(1); if (dup2(sp[1], STDOUT_FILENO) < 0){ - perror("dup2"); + clicon_err(OE_UNIX, errno, "dup2(STDOUT)"); return -1; } close(sp[1]); if (execvp(argv[0], argv) < 0){ - perror("execvp"); + clicon_err(OE_UNIX, errno, "execvp '%s'", argv[0]); return -1; } exit(-1); /* Shouldnt reach here */ diff --git a/lib/src/clixon_uid.c b/lib/src/clixon_uid.c index 7d5a55419..acb30658e 100644 --- a/lib/src/clixon_uid.c +++ b/lib/src/clixon_uid.c @@ -173,6 +173,8 @@ drop_priv_temp(uid_t new_uid) #ifdef HAVE_GETRESUID int retval = -1; + clicon_debug(4, "%s uid:%u", __FUNCTION__, new_uid); + /* XXX: implicit declaration of function 'setresuid' on travis */ if (setresuid(-1, new_uid, geteuid()) < 0){ clicon_err(OE_UNIX, errno, "setresuid"); @@ -203,6 +205,8 @@ drop_priv_perm(uid_t new_uid) uid_t euid; uid_t suid; + clicon_debug(4, "%s uid:%u", __FUNCTION__, new_uid); + if (setresuid(new_uid, new_uid, new_uid) < 0){ clicon_err(OE_UNIX, errno, "setresuid"); goto done; @@ -236,6 +240,8 @@ restore_priv(void) uid_t euid; uid_t suid; + clicon_debug(4, "%s", __FUNCTION__); + if (getresuid(&ruid, &euid, &suid) < 0){ clicon_err(OE_UNIX, errno, "setresuid"); goto done; diff --git a/util/Makefile.in b/util/Makefile.in index 536a8a65e..4fc7cec79 100644 --- a/util/Makefile.in +++ b/util/Makefile.in @@ -164,6 +164,12 @@ clixon_util_validate: clixon_util_validate.c $(BELIBDEPS) $(LIBDEPS) clixon_util_dispatcher: clixon_util_dispatcher.c $(BELIBDEPS) $(LIBDEPS) $(CC) $(INCLUDES) $(CPPFLAGS) -D__PROGRAM__=\"$@\" $(CFLAGS) $(LDFLAGS) $^ -l clixon_backend -o $@ $(LIBS) $(BELIBS) +clixon_netconf_ssh_callhome: clixon_netconf_ssh_callhome.c $(LIBDEPS) + $(CC) $(INCLUDES) $(CPPFLAGS) -D__PROGRAM__=\"$@\" $(CFLAGS) $(LDFLAGS) $^ $(LIBS) -o $@ + +clixon_netconf_ssh_callhome_client: clixon_netconf_ssh_callhome_client.c $(LIBDEPS) + $(CC) $(INCLUDES) $(CPPFLAGS) -D__PROGRAM__=\"$@\" $(CFLAGS) $(LDFLAGS) $^ $(LIBS) -o $@ + ifdef with_restconf clixon_util_stream: clixon_util_stream.c $(LIBDEPS) $(CC) $(INCLUDES) $(CPPFLAGS) -D__PROGRAM__=\"$@\" $(CFLAGS) $(LDFLAGS) $^ $(LIBS) -lcurl -o $@ diff --git a/util/clixon_netconf_ssh_callhome.c b/util/clixon_netconf_ssh_callhome.c index 78cafb225..726ed8efa 100644 --- a/util/clixon_netconf_ssh_callhome.c +++ b/util/clixon_netconf_ssh_callhome.c @@ -78,6 +78,9 @@ sudo clixon_netconf_ssh_callhome -a 127.0.0.1 -c /var/tmp/./test_netconf_ssh_cal #include #include +#include +#include + #define NETCONF_CH_SSH 4334 #define SSHDBIN_DEFAULT "/usr/sbin/sshd" #define UTIL_OPTS "hD:f:a:p:s:c:C:" @@ -91,11 +94,11 @@ callhome_connect(struct sockaddr *sa, int s; if ((s = socket(sa->sa_family, SOCK_STREAM, 0)) < 0) { - perror("socket"); + clicon_err(OE_UNIX, errno, "socket"); goto done; } if (connect(s, sa, sa_len) < 0){ - perror("connect"); + clicon_err(OE_UNIX, errno, "connect"); close(s); goto done; } @@ -155,28 +158,27 @@ ssh_server_exec(int s, if (s < 0){ errno = EINVAL; - perror("socket s"); + clicon_err(OE_UNIX, errno, "socket s"); goto done; } if (sshdbin == NULL){ errno = EINVAL; - perror("sshdbin"); + clicon_err(OE_UNIX, errno, "sshdbin"); goto done; } if (sshdconfigfile == NULL){ errno = EINVAL; - perror("sshdconfigfile"); goto done; } if (clixonconfigfile == NULL){ errno = EINVAL; - perror("clixonconfigfile"); + clicon_err(OE_UNIX, errno, "clixonconfigfile"); goto done; } /* Construct subsystem string */ len = strlen(formatstr)+strlen(clixonconfigfile)+1; if ((optstr = malloc(len)) == NULL){ - perror("malloc"); + clicon_err(OE_UNIX, errno, "malloc"); goto done; } snprintf(optstr, len, formatstr, clixonconfigfile); @@ -185,7 +187,7 @@ ssh_server_exec(int s, if (dbg) nr++; if ((argv = calloc(nr, sizeof(char *))) == NULL){ - perror("calloc"); + clicon_err(OE_UNIX, errno, "calloc"); goto done; } @@ -204,21 +206,21 @@ ssh_server_exec(int s, argv[i++] = NULL; assert(i==nr); if (setreuid(0, 0) < 0){ - perror("setreuid"); + clicon_err(OE_UNIX, errno, "setreuid"); goto done; } close(0); close(1); if (dup2(s, STDIN_FILENO) < 0){ - perror("dup2"); + clicon_err(OE_UNIX, errno, "dup2(STDIN)"); return -1; } if (dup2(s, STDOUT_FILENO) < 0){ - perror("dup2"); + clicon_err(OE_UNIX, errno, "dup2(STDOUT)"); return -1; } if (execv(argv[0], argv) < 0) { - perror("execv"); + clicon_err(OE_UNIX, errno, "execv %s", argv[0]); exit(1); } /* Should reach here */ diff --git a/util/clixon_netconf_ssh_callhome_client.c b/util/clixon_netconf_ssh_callhome_client.c index a4b610e03..f3a6b6235 100644 --- a/util/clixon_netconf_ssh_callhome_client.c +++ b/util/clixon_netconf_ssh_callhome_client.c @@ -76,6 +76,9 @@ Example sshd-config (-c option):n #include #include +#include +#include + #define NETCONF_CH_SSH 4334 #define UTIL_OPTS "hD:f:a:p:" @@ -103,7 +106,8 @@ fdpass(int nfd) /* Avoid obvious stupidity */ if (isatty(STDOUT_FILENO)){ - perror("Cannot pass file descriptor to tty"); + errno = EINVAL; + clicon_err(OE_UNIX, errno, "isatty"); return -1; } memset(&mh, 0, sizeof(mh)); @@ -131,15 +135,15 @@ fdpass(int nfd) if (r == -1) { if (errno == EAGAIN || errno == EINTR) { if (poll(&pfd, 1, -1) == -1){ - perror("poll"); + clicon_err(OE_UNIX, errno, "poll"); return -1; } continue; } - perror("sendmsg"); + clicon_err(OE_UNIX, errno, "sendmsg"); return -1; } else if (r != 1){ - perror("sendmsg: unexpected return value"); + clicon_err(OE_UNIX, errno, "sendmsg: unexpected value"); return -1; } else @@ -167,34 +171,34 @@ callhome_bind(struct sockaddr *sa, if (sock == NULL){ errno = EINVAL; - perror("sock"); + clicon_err(OE_UNIX, errno, "sock"); goto done; } /* create inet socket */ if ((s = socket(sa->sa_family, SOCK_STREAM, 0)) < 0) { - perror("socket"); + clicon_err(OE_UNIX, errno, "socket"); goto done; } if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (void *)&on, sizeof(on)) == -1) { - perror("setsockopt SO_KEEPALIVE"); + clicon_err(OE_UNIX, errno, "setsockopt SO_KEEPALIVE"); goto done; } if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)) == -1) { - perror("setsockopt SO_REUSEADDR"); + clicon_err(OE_UNIX, errno, "setsockopt SO_REUSEADDR"); goto done; } /* only bind ipv6, otherwise it may bind to ipv4 as well which is strange but seems default */ if (sa->sa_family == AF_INET6 && setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) == -1) { - perror("setsockopt IPPROTO_IPV6"); + clicon_err(OE_UNIX, errno, "setsockopt IPPROTO_IPV6"); goto done; } if (bind(s, sa, sin_len) == -1) { - perror("bind"); + clicon_err(OE_UNIX, errno, "bind"); goto done; } if (listen(s, backlog) < 0){ - perror("listen"); + clicon_err(OE_UNIX, errno, "listen"); goto done; } if (sock) @@ -293,7 +297,7 @@ main(int argc, /* Wait until connect */ len = sizeof(from); if ((s = accept(ss, &from, &len)) < 0){ - perror("accept"); + clicon_err(OE_UNIX, errno, "accept"); goto done; } /* s Pass the first connected socket using sendmsg(2) to stdout and exit. */ @@ -304,4 +308,3 @@ main(int argc, return retval; } - diff --git a/util/clixon_restconf_callhome_client.c b/util/clixon_restconf_callhome_client.c index b40625227..25d719077 100644 --- a/util/clixon_restconf_callhome_client.c +++ b/util/clixon_restconf_callhome_client.c @@ -153,34 +153,34 @@ callhome_bind(struct sockaddr *sa, if (sock == NULL){ errno = EINVAL; - perror("sock"); + clicon_err(OE_UNIX, errno, "sock"); goto done; } /* create inet socket */ if ((s = socket(sa->sa_family, SOCK_STREAM, 0)) < 0) { - perror("socket"); + clicon_err(OE_UNIX, errno, "socket"); goto done; } if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (void *)&on, sizeof(on)) == -1) { - perror("setsockopt SO_KEEPALIVE"); + clicon_err(OE_UNIX, errno, "setsockopt SO_KEEPALIVE"); goto done; } if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void *)&on, sizeof(on)) == -1) { - perror("setsockopt SO_REUSEADDR"); + clicon_err(OE_UNIX, errno, "setsockopt SO_REUSEADDR"); goto done; } /* only bind ipv6, otherwise it may bind to ipv4 as well which is strange but seems default */ if (sa->sa_family == AF_INET6 && setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) == -1) { - perror("setsockopt IPPROTO_IPV6"); + clicon_err(OE_UNIX, errno, "setsockopt IPPROTO_IPV6"); goto done; } if (bind(s, sa, sin_len) == -1) { - perror("bind"); + clicon_err(OE_UNIX, errno, "bind"); goto done; } if (listen(s, backlog) < 0){ - perror("listen"); + clicon_err(OE_UNIX, errno, "listen"); goto done; } if (sock) @@ -363,7 +363,7 @@ tls_ssl_init_connect(SSL_CTX *ctx, /* create new SSL connection state */ if ((ssl = SSL_new(ctx)) == NULL){ - clicon_err(OE_SSL, 0, "SSL_new."); + clicon_err(OE_SSL, 0, "SSL_new"); goto done; } SSL_set_fd(ssl, s); /* attach the socket descriptor */ @@ -372,7 +372,7 @@ tls_ssl_init_connect(SSL_CTX *ctx, protos[0] = 8; strncpy((char*)&protos[1], "http/1.1", 9); if ((retval = SSL_set_alpn_protos(ssl, protos, 9)) != 0){ - clicon_err(OE_SSL, retval, "SSL_set_alpn_protos."); + clicon_err(OE_SSL, retval, "SSL_set_alpn_protos"); goto done; } #if 0 @@ -394,11 +394,9 @@ tls_ssl_init_connect(SSL_CTX *ctx, switch (sslerr){ case SSL_ERROR_SSL: /* 1 */ goto done; - break; default: clicon_err(OE_XML, errno, "SSL_connect"); goto done; - break; } } /* check certificate verification result */ @@ -407,7 +405,7 @@ tls_ssl_init_connect(SSL_CTX *ctx, case X509_V_OK: break; default: - clicon_err(OE_SSL, errno, "verify problems: %d", verify); + clicon_err(OE_SSL, errno, "SSL_get_verify_result: %d", verify); goto done; } *sslp = ssl; @@ -468,7 +466,7 @@ tls_server_accept_cb(int ss, clicon_debug(1, "%s", __FUNCTION__); len = sizeof(from); if ((s = accept(ss, &from, &len)) < 0){ - perror("accept"); + clicon_err(OE_UNIX, errno, "accept"); goto done; } clicon_debug(1, "accepted"); diff --git a/util/clixon_util_path.c b/util/clixon_util_path.c index fecf3d6a8..dcdf9670a 100644 --- a/util/clixon_util_path.c +++ b/util/clixon_util_path.c @@ -186,14 +186,14 @@ main(int argc, /* First read api-path from file */ len = 1024; /* any number is fine */ if ((buf = malloc(len)) == NULL){ - perror("pt_file malloc"); + clicon_err(OE_UNIX, errno, "malloc"); return -1; } memset(buf, 0, len); i = 0; while (1){ if ((ret = read(0, &c, 1)) < 0){ - perror("read"); + clicon_err(OE_UNIX, errno, "read"); goto done; } if (ret == 0) @@ -202,7 +202,7 @@ main(int argc, break; if (len==i){ if ((buf = realloc(buf, 2*len)) == NULL){ - fprintf(stderr, "%s: realloc: %s\n", __FUNCTION__, strerror(errno)); + clicon_err(OE_UNIX, errno, "realloc"); return -1; } memset(buf+len, 0, len); @@ -218,7 +218,7 @@ main(int argc, * XXX Note 0 above, stdin here */ if (clixon_xml_parse_file(fp, YB_NONE, NULL, &x, NULL) < 0){ - fprintf(stderr, "Error: parsing: %s\n", clicon_err_reason); + clicon_err(OE_XML, 0, "Error parsing: %s", clicon_err_reason); return -1; } @@ -228,13 +228,13 @@ main(int argc, if ((ret = xml_bind_yang(h, x, YB_MODULE, yspec, &xerr)) < 0) goto done; if (ret == 0){ - if ((cb = cbuf_new()) ==NULL){ + if ((cb = cbuf_new()) == NULL){ clicon_err(OE_XML, errno, "cbuf_new"); goto done; } if (netconf_err2cb(xerr, cb) < 0) goto done; - fprintf(stderr, "xml validation error: %s\n", cbuf_get(cb)); + clicon_err(OE_XML, 0, "xml validation error: %s", cbuf_get(cb)); goto done; } /* sort */ @@ -256,7 +256,7 @@ main(int argc, } if (netconf_err2cb(xerr, cb) < 0) goto done; - fprintf(stderr, "xml validation error: %s\n", cbuf_get(cb)); + clicon_err(OE_XML, 0, "xml validation error: %s", cbuf_get(cb)); goto done; } @@ -273,7 +273,7 @@ main(int argc, goto done; } if (ret == 0){ - fprintf(stderr, "Fail %d %s\n", clicon_errno, clicon_err_reason); + clicon_err(OE_XML, clicon_errno, "Failed: %s", clicon_err_reason); goto done; } } @@ -282,7 +282,7 @@ main(int argc, xc = xvec[i]; fprintf(stdout, "%d: ", i); clixon_xml2file(stdout, xc, 0, 0, NULL, fprintf, 0, 0); - fprintf(stdout, "\n"); + fputc('\n', stdout); fflush(stdout); } retval = 0;