diff options
-rw-r--r-- | Makefile | 2 | ||||
-rwxr-xr-x | configure | 19 | ||||
-rw-r--r-- | src/core.c | 21 | ||||
-rw-r--r-- | src/core.h | 24 | ||||
-rw-r--r-- | src/libproxychains.c | 4 |
5 files changed, 46 insertions, 24 deletions
@@ -18,7 +18,7 @@ OBJS = $(SRCS:.c=.o) LOBJS = src/core.o src/common.o src/libproxychains.o CCFLAGS = -Wall -O2 -g -std=c99 -D_GNU_SOURCE -pipe -DTHREAD_SAFE -Werror -LDFLAGS = -shared -fPIC -ldl -lpthread +LDFLAGS = -shared -fPIC -lpthread INC = PIC = -fPIC AR = $(CROSS_COMPILE)ar @@ -40,6 +40,14 @@ ismac() { uname -s | grep Darwin } +isbsd() { + uname -s | grep BSD +} + +islinux() { + uname -s | grep Linux +} + while true ; do case $1 in -*) parsearg "$1"; shift;; @@ -88,9 +96,18 @@ if ismac ; then echo LDSO_SUFFIX=dylib>>config.mak echo MAC_CFLAGS+=-DIS_MAC=1 -arch x86_64 -arch i386 >>config.mak echo MAC_LDFLAGS+=-arch x86_64 -arch i386 >>config.mak - echo LD_SET_SONAME=-Wl,-install_name,>>config.mak + echo LD_SET_SONAME=-ldl -Wl,-install_name,>>config.mak echo INSTALL_FLAGS=-m>>config.mak fi +if islinux ; then + echo LD_SET_SONAME=-ldl +fi + +if isbsd ; then + echo INSTALL_FLAGS=-m>>config.mak + echo LD_SET_SONAME=-Wl,-rpath,$libdir -install_name,>>config.mak +fi + echo done, now run make \&\& make install @@ -864,15 +864,18 @@ int proxy_getaddrinfo(const char *node, const char *service, const struct addrin // printf("proxy_getaddrinfo node %s service %s\n",node,service); space = calloc(1, sizeof(struct addrinfo_data)); - if(!space) goto err1; + if(!space) + return 1; if(node && !inet_aton(node, &((struct sockaddr_in *) &space->sockaddr_space)->sin_addr)) { hp = proxy_gethostbyname(node, &ghdata); - if(hp) + if(hp) { memcpy(&((struct sockaddr_in *) &space->sockaddr_space)->sin_addr, *(hp->h_addr_list), sizeof(in_addr_t)); - else - goto err2; + } else { + free(space); + return 1; + } } if(service) proxy_getservbyname(service, &se_buf, buf, sizeof(buf), &se); @@ -896,14 +899,12 @@ int proxy_getaddrinfo(const char *node, const char *service, const struct addrin p->ai_flags = hints->ai_flags; p->ai_protocol = hints->ai_protocol; } else { +#ifdef BSD p->ai_flags = (AI_V4MAPPED | AI_ADDRCONFIG); +#else + p->ai_flags = (AI_ADDRCONFIG); +#endif } - goto out; - err2: - free(space); - err1: - return 1; - out: return 0; } @@ -102,20 +102,23 @@ typedef struct { char pass[256]; } proxy_data; -int connect_proxy_chain (int sock, ip_type target_ip, unsigned short target_port, - proxy_data * pd, unsigned int proxy_count, chain_type ct, - unsigned int max_chain ); +int connect_proxy_chain (int, ip_type, unsigned short, proxy_data *, unsigned int, + chain_type, unsigned int); -void proxychains_write_log(char *str, ...); +void proxychains_write_log(char *, ...); typedef int (*connect_t)(int, const struct sockaddr *, socklen_t); typedef struct hostent* (*gethostbyname_t)(const char *); typedef int (*freeaddrinfo_t)(struct addrinfo *); + +#if (defined __linux__) || (defined __APPLE__) typedef struct hostent *(*gethostbyaddr_t) (const void *, socklen_t, int); +#else +typedef struct hostent *(*gethostbyaddr_t) (const char *, socklen_t, int); +#endif typedef int (*getaddrinfo_t)(const char *, const char *, const struct addrinfo *, struct addrinfo **); - typedef int (*getnameinfo_t) (const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, int); @@ -134,13 +137,10 @@ struct gethostbyname_data { char addr_name[1024 * 8]; }; -struct hostent* proxy_gethostbyname(const char *name, struct gethostbyname_data *data); -void proxy_getservbyname(const char * service, struct servent *se_buf, - char * buf, size_t buf_len, struct servent **se_result); - -int proxy_getaddrinfo(const char *node, const char *service, - const struct addrinfo *hints, struct addrinfo **res); -void proxy_freeaddrinfo(struct addrinfo *res); +struct hostent* proxy_gethostbyname(const char *, struct gethostbyname_data *); +void proxy_getservbyname(const char *, struct servent *, char *, size_t, struct servent **); +int proxy_getaddrinfo(const char *, const char *, const struct addrinfo *, struct addrinfo **); +void proxy_freeaddrinfo(struct addrinfo *); #ifdef DEBUG # define PDEBUG(fmt, args...) do { fprintf(stderr,"DEBUG:"fmt, ## args); fflush(stderr); } while(0) diff --git a/src/libproxychains.c b/src/libproxychains.c index 21032f4..a64f619 100644 --- a/src/libproxychains.c +++ b/src/libproxychains.c @@ -425,7 +425,11 @@ int getnameinfo(const struct sockaddr *sa, return ret; } +#if (defined __linux__) || (defined __APPLE__) struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type) { +#else +struct hostent *gethostbyaddr(const char *addr, socklen_t len, int type) { +#endif static char buf[16]; static char ipv4[4]; static char *list[2]; |