From 1d4563ac3155f24e478b4b4512466d81ff9eef1e Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 23 Nov 2015 12:32:20 -0800 Subject: [PATCH] A few very tiny bits of dead code removal, etc. --- netcon/Intercept.c | 50 +++++++++-------------------- netcon/libzerotierintercept.so.1.0 | Bin 0 -> 65422 bytes 2 files changed, 15 insertions(+), 35 deletions(-) create mode 100755 netcon/libzerotierintercept.so.1.0 diff --git a/netcon/Intercept.c b/netcon/Intercept.c index 35a4c1c85..4c47fa5c6 100755 --- a/netcon/Intercept.c +++ b/netcon/Intercept.c @@ -29,9 +29,6 @@ #define _GNU_SOURCE #endif -/* Name used in err msgs */ -char *progname = ""; - #include #include #include @@ -63,9 +60,6 @@ char *progname = ""; #endif /* Global Declarations */ -#ifdef USE_SOCKS_DNS -static int (*realresinit)(void); -#endif static int (*realconnect)(CONNECT_SIG); static int (*realselect)(SELECT_SIG); static int (*realbind)(BIND_SIG); @@ -100,11 +94,6 @@ int clone(CLONE_SIG); int dup2(DUP2_SIG); int dup3(DUP3_SIG); - -#ifdef USE_SOCKS_DNS - int res_init(void); -#endif - int connect_to_service(void); int init_service_connection(); void load_symbols(void); @@ -117,8 +106,8 @@ int checkpid(); ssize_t sock_fd_read(int sock, void *buf, ssize_t bufsize, int *fd); /* threading */ -pthread_mutex_t lock; -pthread_mutex_t loglock; +static pthread_mutex_t lock; +static pthread_mutex_t loglock; void handle_error(char *name, char *info, int err) { @@ -172,7 +161,7 @@ int send_command(int rpc_fd, char *cmd) #define IDX_COUNT IDX_TID + sizeof(pid_t) #define IDX_TIME IDX_COUNT + sizeof(int) #define IDX_CMD IDX_TIME + 20 // 20 being the length of the timestamp string - #define IDX_PAYLOAD IDX_TIME + sizeof(char) + #define IDX_PAYLOAD IDX_TIME + sizeof(char) */ /* [pid_t] [pid_t] [rpc_count] [int] [...] */ memset(metabuf, '\0', BUF_SZ); @@ -188,7 +177,7 @@ int send_command(int rpc_fd, char *cmd) memcpy(&metabuf[IDX_COUNT], &rpc_count, sizeof(rpc_count) ); /* rpc_count */ memcpy(&metabuf[IDX_TIME], ×tring, 20 ); /* timestamp */ #endif - /* Combine command flag+payload with RPC metadata */ + /* Combine command flag+payload with RPC metadata */ memcpy(&metabuf[IDX_PAYLOAD], cmd, PAYLOAD_SZ); int n_write = write(rpc_fd, &metabuf, BUF_SZ); if(n_write < 0){ @@ -328,13 +317,8 @@ void load_symbols(void) realclone = dlsym(RTLD_NEXT, "clone"); realclose = dlsym(RTLD_NEXT, "close"); realsyscall = dlsym(RTLD_NEXT, "syscall"); - /* realsyscall = dlsym(RTLD_NEXT, "poll"); */ realdup2 = dlsym(RTLD_NEXT, "dup2"); realdup3 = dlsym(RTLD_NEXT, "dup3"); -#ifdef USE_SOCKS_DNS - realresinit = dlsym(RTLD_NEXT, "res_init"); -#endif - #else lib = dlopen(LIBCONNECT, RTLD_LAZY); realconnect = dlsym(lib, "connect"); @@ -349,12 +333,8 @@ void load_symbols(void) realclone = dlsym(lib, "clone"); realclose = dlsym(lib, "close"); realsyscall = dlsym(lib, "syscall"); - /* realsyscall = dlsym(lib, "poll"); */ realdup2 = dlsym(RTLD_NEXT, "dup2"); realdup3 = dlsym(RTLD_NEXT, "dup3"); -#ifdef USE_SOCKS_DNS - realresinit = dlsym(lib, "res_init"); -#endif dlclose(lib); lib = dlopen(LIBC, RTLD_LAZY); dlclose(lib); @@ -531,7 +511,7 @@ int socket(SOCKET_SIG) cmd[0] = RPC_MAP; memcpy(&cmd[1], &newfd, sizeof(newfd)); - if(newfd > -1) { + if(newfd > -1) { send_command(fdret_sock, cmd); pthread_mutex_unlock(&lock); errno = ERR_OK; /* OK */ @@ -825,10 +805,10 @@ int accept(ACCEPT_SIG) handle_error("accept", "Unresolved symbol [accept]", -1); return -1; } - + // if(opt & O_NONBLOCK) fcntl(sockfd, F_SETFL, O_NONBLOCK); /* required by libuv in nodejs */ - + char c[1]; int new_conn_socket; @@ -865,16 +845,16 @@ int accept(ACCEPT_SIG) return -1; } } - - errno = EAGAIN; /* necessary? */ + + errno = EAGAIN; /* necessary? */ handle_error("accept", "EAGAIN - Error reading signal byte from service", -1); return -EAGAIN; /* Prevents libuv in nodejs from accepting properly (it looks for a -EAGAIN) */ -/* +/* errno = EBADF; handle_error("accept", "EBADF - Error reading signal byte from service", -1); - return -1; + return -1; */ } @@ -1031,10 +1011,10 @@ int dup3(DUP3_SIG) } dwr(MSG_DEBUG,"dup3(%d, %d, %d)\n", oldfd, newfd, flags); #ifdef DEBUG - /* Only do this check if we want to debug the intercept, otherwise, dont mess with + /* Only do this check if we want to debug the intercept, otherwise, dont mess with the client application's logging methods */ if(newfd == STDIN_FILENO || newfd == STDOUT_FILENO || newfd == STDERR_FILENO) - return newfd; /* FIXME: This is to prevent httpd from dup'ing over our stderr + return newfd; /* FIXME: This is to prevent httpd from dup'ing over our stderr and preventing us from debugging */ else #endif @@ -1079,9 +1059,9 @@ long syscall(SYSCALL_SIG){ int flags = d; int old_errno = errno; int err = accept4(sockfd, addr, addrlen, flags); - + errno = old_errno; - if(err == -EBADF) + if(err == -EBADF) err = -EAGAIN; return err; } diff --git a/netcon/libzerotierintercept.so.1.0 b/netcon/libzerotierintercept.so.1.0 new file mode 100755 index 0000000000000000000000000000000000000000..3e72687525283b539634aceda37bd7857f2715ef GIT binary patch literal 65422 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 literal 0 HcmV?d00001