Port Proxychains to NetBSD.

This commit is contained in:
Adam Hamsik 2012-08-09 22:36:29 +00:00
parent 361889a2d2
commit f69f65f999
5 changed files with 46 additions and 24 deletions

View File

@ -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

19
configure vendored
View File

@ -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

View File

@ -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;
}

View File

@ -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)

View File

@ -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];