diff --git a/Makefile b/Makefile index 763112d..4c485e7 100644 --- a/Makefile +++ b/Makefile @@ -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 -lpthread +LDFLAGS = -shared -Wl,--no-as-needed -fPIC -pthread -ldl INC = PIC = -fPIC AR = $(CROSS_COMPILE)ar diff --git a/src/core.c b/src/core.c index e41c715..c3a624d 100644 --- a/src/core.c +++ b/src/core.c @@ -722,6 +722,7 @@ int connect_proxy_chain(int sock, ip_type target_ip, static const ip_type local_host = { {127, 0, 0, 1} }; +char hostname[256]; // default maximum length of hostname in linux struct hostent *proxy_gethostbyname(const char *name, struct gethostbyname_data* data) { char buff[256]; uint32_t i, hash; @@ -743,6 +744,12 @@ struct hostent *proxy_gethostbyname(const char *name, struct gethostbyname_data* data->resolved_addr = inet_addr(buff); if(data->resolved_addr == (in_addr_t) (-1)) data->resolved_addr = (in_addr_t) (local_host.as_int); + + snprintf(hostname,sizeof hostname, "%s", name); + data->hostent_space.h_name = hostname; + data->hostent_space.h_length = sizeof (in_addr_t); + data->hostent_space.h_addrtype = AF_INET; + return &data->hostent_space; } @@ -809,6 +816,8 @@ struct hostent *proxy_gethostbyname(const char *name, struct gethostbyname_data* data->hostent_space.h_name = data->addr_name; data->hostent_space.h_length = sizeof(in_addr_t); + data->hostent_space.h_addrtype = AF_INET; + return &data->hostent_space; err_plus_unlock: