From 61ec916300e8dd10f1c154de25317cc5359f49be Mon Sep 17 00:00:00 2001 From: Robert Hogan Date: Wed, 7 Jul 2010 18:40:42 +0100 Subject: Iphone Support - Patch by Marco Bonetti Allow torsocks to compile on jailbroken iphones. --- src/tsocks.c | 50 +++++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/src/tsocks.c b/src/tsocks.c index 92bca5b..44f3d20 100644 --- a/src/tsocks.c +++ b/src/tsocks.c @@ -50,9 +50,16 @@ /* PreProcessor Defines */ #include +#if (defined(__APPLE__) || defined(__darwin__)) +#define _OSX +#if !defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) +#define _OSX_EXCEPT_IPHONE +#endif +#endif + /*Defining _NONSTD_SOURCE causes library and kernel calls to behave as closely to Mac OS X 10.3's library and kernel calls as possible.*/ -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX) /* From 'man compat' in OSX: 64-BIT COMPILATION @@ -60,7 +67,8 @@ From 'man compat' in OSX: is always on (the _DARWIN_FEATURE_UNIX_CONFORMANCE macro will also be defined to the SUS conformance level). Defining _NONSTD_SOURCE will cause a compilation error. */ -#if !defined(__LP64__) +/*Don't set _NONSTD_SOURCE when building for iPhoneOS*/ +#if !defined(__LP64__) && !defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) #define _NONSTD_SOURCE 1 #endif #include @@ -91,7 +99,7 @@ const char *progname = "libtorsocks"; /* Name used in err msgs */ #include #include #include -#if !defined(__APPLE__) && !defined(__darwin__) +#if !defined(_OSX) #include #endif #ifdef USE_TOR_DNS @@ -117,7 +125,7 @@ int (*realgetaddrinfo)(GETADDRINFO_SIGNATURE); static struct hostent *(*realgetipnodebyname)(GETIPNODEBYNAME_SIGNATURE); static ssize_t (*realsendto)(SENDTO_SIGNATURE); static ssize_t (*realsendmsg)(SENDMSG_SIGNATURE); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) static ssize_t (*realsendto_unix2003)(SENDTO_SIGNATURE); static ssize_t (*realsendto_nocancel)(SENDTO_SIGNATURE); static ssize_t (*realsendmsg_unix2003)(SENDMSG_SIGNATURE); @@ -129,7 +137,7 @@ static int (*realselect)(SELECT_SIGNATURE); static int (*realpoll)(POLL_SIGNATURE); int (*realclose)(CLOSE_SIGNATURE); static int (*realgetpeername)(GETPEERNAME_SIGNATURE); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) static int (*realconnect_unix2003)(CONNECT_SIGNATURE); static int (*realconnect_nocancel)(CONNECT_SIGNATURE); static int (*realselect_darwinextsn)(SELECT_SIGNATURE); @@ -156,7 +164,7 @@ int select(SELECT_SIGNATURE); int poll(POLL_SIGNATURE); int close(CLOSE_SIGNATURE); int getpeername(GETPEERNAME_SIGNATURE); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) int connect_unix2003(CONNECT_SIGNATURE) __asm("_connect$UNIX2003"); int connect_nocancel(CONNECT_SIGNATURE) __asm("_connect$NOCANCEL$UNIX2003"); int select_darwinextsn(SELECT_SIGNATURE) __asm("_select$DARWIN_EXTSN"); @@ -184,7 +192,7 @@ int getaddrinfo(GETADDRINFO_SIGNATURE); struct hostent *getipnodebyname(GETIPNODEBYNAME_SIGNATURE); ssize_t sendto(SENDTO_SIGNATURE); ssize_t sendmsg(SENDMSG_SIGNATURE); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) ssize_t sendto_unix2003(SENDTO_SIGNATURE) __asm("_sendto$UNIX2003"); ssize_t sendto_nocancel(SENDTO_SIGNATURE) __asm("_sendto$NOCANCEL$UNIX2003"); ssize_t sendmsg_unix2003(SENDMSG_SIGNATURE) __asm("_sendmsg$UNIX2003"); @@ -269,7 +277,7 @@ void tsocks_init(void) { #ifndef USE_OLD_DLSYM if ((realconnect = dlsym(RTLD_NEXT, "connect")) == NULL) LOAD_ERROR("connect", MSGERR); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) if ((realconnect_unix2003 = dlsym(RTLD_NEXT, "connect$UNIX2003")) == NULL) LOAD_ERROR("connect$UNIX2003", MSGERR); if ((realconnect_nocancel = dlsym(RTLD_NEXT, "connect$NOCANCEL$UNIX2003")) == NULL) @@ -278,7 +286,7 @@ void tsocks_init(void) { if ((realselect = dlsym(RTLD_NEXT, "select")) == NULL) LOAD_ERROR("select", MSGERR); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) if ((realselect_darwinextsn = dlsym(RTLD_NEXT, "select$DARWIN_EXTSN")) == NULL) LOAD_ERROR("select$DARWIN_EXTSN", MSGERR); if ((realselect_darwinextsn_nocancel = dlsym(RTLD_NEXT, "select$DARWIN_EXTSN$NOCANCEL")) == NULL) @@ -291,7 +299,7 @@ void tsocks_init(void) { if ((realpoll = dlsym(RTLD_NEXT, "poll")) == NULL) LOAD_ERROR("poll", MSGERR); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) if ((realpoll_unix2003 = dlsym(RTLD_NEXT, "poll$UNIX2003")) == NULL) LOAD_ERROR("poll$UNIX2003", MSGERR); if ((realpoll_nocancel = dlsym(RTLD_NEXT, "poll$NOCANCEL$UNIX2003")) == NULL) @@ -300,7 +308,7 @@ void tsocks_init(void) { if ((realclose = dlsym(RTLD_NEXT, "close")) == NULL) LOAD_ERROR("close", MSGERR); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) if ((realclose_unix2003 = dlsym(RTLD_NEXT, "close$UNIX2003")) == NULL) LOAD_ERROR("close$UNIX2003", MSGERR); if ((realclose_nocancel = dlsym(RTLD_NEXT, "close$NOCANCEL$UNIX2003")) == NULL) @@ -309,7 +317,7 @@ void tsocks_init(void) { if ((realgetpeername = dlsym(RTLD_NEXT, "getpeername")) == NULL) LOAD_ERROR("getpeername", MSGERR); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) if ((realgetpeername_unix2003 = dlsym(RTLD_NEXT, "getpeername$UNIX2003")) == NULL) LOAD_ERROR("getpeername$UNIX2003", MSGERR); #endif @@ -340,7 +348,7 @@ void tsocks_init(void) { if ((realsendto = dlsym(RTLD_NEXT, "sendto")) == NULL) LOAD_ERROR("sendto", MSGERR); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) if ((realsendto_unix2003 = dlsym(RTLD_NEXT, "sendto$UNIX2003")) == NULL) LOAD_ERROR("sendto$UNIX2003", MSGERR); if ((realsendto_nocancel = dlsym(RTLD_NEXT, "sendto$NOCANCEL$UNIX2003")) == NULL) @@ -349,7 +357,7 @@ void tsocks_init(void) { if ((realsendmsg = dlsym(RTLD_NEXT, "sendmsg")) == NULL) LOAD_ERROR("sendmsg", MSGERR); -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) if ((realsendmsg_unix2003 = dlsym(RTLD_NEXT, "sendmsg$UNIX2003")) == NULL) LOAD_ERROR("sendmsg$UNIX2003", MSGERR); if ((realsendmsg_nocancel = dlsym(RTLD_NEXT, "sendmsg$NOCANCEL$UNIX2003")) == NULL) @@ -453,7 +461,7 @@ static int get_config () { return tsocks_connect_guts(__fd, __addr, __len, real ## funcname); \ } PATCH_CONNECT(connect, "connect") -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) PATCH_CONNECT(connect_unix2003, "conncect$UNIX2003") PATCH_CONNECT(connect_nocancel, "conncect$NOCANCEL$UNIX2003") #endif @@ -468,7 +476,7 @@ PATCH_CONNECT(connect_nocancel, "conncect$NOCANCEL$UNIX2003") return tsocks_close_guts(fd, real ## funcname); \ } PATCH_CLOSE(close, "close") -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) PATCH_CLOSE(close_unix2003, "close$UNIX2003") PATCH_CLOSE(close_nocancel, "close$NOCANCEL$UNIX2003") #endif @@ -483,7 +491,7 @@ PATCH_CLOSE(close_nocancel, "close$NOCANCEL$UNIX2003") return tsocks_select_guts(n, readfds, writefds, exceptfds, timeout, real ## funcname); \ } PATCH_SELECT(select, "select") -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) PATCH_SELECT(select_darwinextsn, "select$DARWIN_EXTSN") PATCH_SELECT(select_darwinextsn_nocancel, "select$DARWIN_EXTSN$NOCANCEL") PATCH_SELECT(select_unix2003, "select$UNIX2003") @@ -500,7 +508,7 @@ PATCH_SELECT(select_nocancel, "select$NOCANCEL$UNIX2003") return tsocks_poll_guts(ufds, nfds, timeout, real ## funcname); \ } PATCH_POLL(poll, "poll") -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) PATCH_POLL(poll_unix2003, "poll$UNIX2003") PATCH_POLL(poll_nocancel, "poll$NOCANCEL$UNIX2003") #endif @@ -515,7 +523,7 @@ PATCH_POLL(poll_nocancel, "poll$NOCANCEL$UNIX2003") return tsocks_getpeername_guts(__fd, __name, __namelen, real ## funcname); \ } PATCH_GETPEERNAME(getpeername, "getpeername") -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) PATCH_GETPEERNAME(getpeername_unix2003, "getpeername$UNIX2003") #endif @@ -529,7 +537,7 @@ PATCH_GETPEERNAME(getpeername_unix2003, "getpeername$UNIX2003") return tsocks_sendto_guts(s, buf, len, flags, to, tolen, real ## funcname); \ } PATCH_SENDTO(sendto, "sendto") -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) PATCH_SENDTO(sendto_unix2003, "sendto$UNIX2003") PATCH_SENDTO(sendto_nocancel, "sendto$NOCANCEL$UNIX2003") #endif @@ -544,7 +552,7 @@ PATCH_SENDTO(sendto_nocancel, "sendto$NOCANCEL$UNIX2003") return tsocks_sendmsg_guts(s, msg, flags, real ## funcname); \ } PATCH_SENDMSG(sendmsg, "sendmsg") -#if defined(__APPLE__) || defined(__darwin__) +#if defined(_OSX_EXCEPT_IPHONE) PATCH_SENDMSG(sendmsg_unix2003, "sendmsg$UNIX2003") PATCH_SENDMSG(sendmsg_nocancel, "sendmsg$NOCANCEL$UNIX2003") #endif -- cgit v1.2.1