Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/rofl0r/proxychains-ng.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrofl0r <retnyg@gmx.net>2018-01-10 20:23:36 +0300
committerrofl0r <retnyg@gmx.net>2018-01-10 20:36:39 +0300
commit1a62ec60af623c126152bff74338721aeea8cdb1 (patch)
treeb76e7e05550284f581b4fd4be039a48c69025ac9
parent35a674bdbc294730429a1007c9e7ce01e65b49b5 (diff)
support solaris X/Open connect call too
solaris curiously defines connect to point to __xnet_connect when _XOPEN_SOURCE is defined 600. that means some programs use the real connect symbol, while others use __xnet_connect. thanks to @Low-power for testing. https://github.com/nxmirrors/onnv/blob/master/usr/src/lib/libsocket/socket/socket.c https://github.com/nxmirrors/onnv/blob/master/usr/src/uts/common/sys/socket.h#L486
-rw-r--r--src/libproxychains.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/libproxychains.c b/src/libproxychains.c
index c3d31e0..9a036d3 100644
--- a/src/libproxychains.c
+++ b/src/libproxychains.c
@@ -45,6 +45,12 @@
#define SOCKFAMILY(x) (satosin(x)->sin_family)
#define MAX_CHAIN 512
+#ifdef IS_SOLARIS
+#undef connect
+int __xnet_connect(int sock, const struct sockaddr *addr, unsigned int len);
+connect_t true___xnet_connect;
+#endif
+
close_t true_close;
connect_t true_connect;
gethostbyname_t true_gethostbyname;
@@ -108,6 +114,9 @@ static void setup_hooks(void) {
SETUP_SYM(gethostbyaddr);
SETUP_SYM(getnameinfo);
SETUP_SYM(close);
+#ifdef IS_SOLARIS
+ SETUP_SYM(__xnet_connect);
+#endif
}
static int close_fds[16];
@@ -399,6 +408,12 @@ int connect(int sock, const struct sockaddr *addr, unsigned int len) {
return ret;
}
+#ifdef IS_SOLARIS
+int __xnet_connect(int sock, const struct sockaddr *addr, unsigned int len) {
+ return connect(sock, addr, len);
+}
+#endif
+
static struct gethostbyname_data ghbndata;
struct hostent *gethostbyname(const char *name) {
INIT();