tsocks: Add package (#1550)
This commit is contained in:
parent
a7a3624cea
commit
ac01b02184
|
@ -0,0 +1,114 @@
|
||||||
|
Description: Debian has carried this patch since 1.8beta5-9.2 release,
|
||||||
|
I extracted it from upstream's source we distribute and keep it as patch
|
||||||
|
I claim no ownership
|
||||||
|
Last-update: 2016-11-07
|
||||||
|
Origin: vendor
|
||||||
|
|
||||||
|
diff --git a/parser.c b/parser.c
|
||||||
|
index 5b6d123..81245c8 100644
|
||||||
|
--- a/parser.c
|
||||||
|
+++ b/parser.c
|
||||||
|
@@ -6,10 +6,13 @@
|
||||||
|
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
+#include <sys/types.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
+#include <pwd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <config.h>
|
||||||
|
#include "common.h"
|
||||||
|
@@ -48,12 +51,11 @@ int read_config (char *filename, struct parsedfile *config) {
|
||||||
|
|
||||||
|
/* If a filename wasn't provided, use the default */
|
||||||
|
if (filename == NULL) {
|
||||||
|
- strncpy(line, CONF_FILE, sizeof(line) - 1);
|
||||||
|
- /* Insure null termination */
|
||||||
|
- line[sizeof(line) - 1] = (char) 0;
|
||||||
|
- filename = line;
|
||||||
|
+ filename = find_config(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ show_msg(MSGDEBUG, "using %s as configuration file\n", line);
|
||||||
|
+
|
||||||
|
/* Read the configuration file */
|
||||||
|
if ((conf = fopen(filename, "r")) == NULL) {
|
||||||
|
show_msg(MSGERR, "Could not open socks configuration file "
|
||||||
|
diff --git a/tsocks.8 b/tsocks.8
|
||||||
|
index e056460..9e46070 100644
|
||||||
|
--- a/tsocks.8
|
||||||
|
+++ b/tsocks.8
|
||||||
|
@@ -34,13 +34,13 @@ manual page.
|
||||||
|
|
||||||
|
.BR tsocks
|
||||||
|
is a library to allow transparent SOCKS proxying. It wraps the normal
|
||||||
|
-connect() function. When a connection is attempted, it consults the
|
||||||
|
-configuration file (which is defined at configure time but defaults to
|
||||||
|
-/etc/tsocks.conf) and determines if the IP address specified is local. If
|
||||||
|
-it is not, the library redirects the connection to a SOCKS server
|
||||||
|
-specified in the configuration file. It then negotiates that connection
|
||||||
|
-with the SOCKS server and passes the connection back to the calling
|
||||||
|
-program.
|
||||||
|
+connect() function. When a connection is attempted, it consults the
|
||||||
|
+configuration file (which is defined at configure time but defaults to
|
||||||
|
+~/.tsocks.conf and if that file cannot be accessed, to /etc/tsocks.conf)
|
||||||
|
+and determines if the IP address specified is local. If it is not, the
|
||||||
|
+library redirects the connection to a SOCKS server specified in the
|
||||||
|
+configuration file. It then negotiates that connection with the SOCKS
|
||||||
|
+server and passes the connection back to the calling program.
|
||||||
|
|
||||||
|
.BR tsocks
|
||||||
|
is designed for use in machines which are firewalled from then
|
||||||
|
@@ -59,7 +59,7 @@ Some configuration options can be specified at run time using environment
|
||||||
|
variables as follows:
|
||||||
|
|
||||||
|
.TP
|
||||||
|
-.I TSOCKS_CONFFILE
|
||||||
|
+.I TSOCKS_CONF_FILE
|
||||||
|
This environment variable overrides the default location of the tsocks
|
||||||
|
configuration file. This variable is not honored if the program tsocks
|
||||||
|
is embedded in is setuid. In addition this environment variable can
|
||||||
|
diff --git a/tsocks.c b/tsocks.c
|
||||||
|
index 9cfdfff..0a16712 100644
|
||||||
|
--- a/tsocks.c
|
||||||
|
+++ b/tsocks.c
|
||||||
|
@@ -289,11 +289,13 @@ int connect(CONNECT_SIGNATURE) {
|
||||||
|
show_msg(MSGDEBUG, "Picked server %s for connection\n",
|
||||||
|
(path->address ? path->address : "(Not Provided)"));
|
||||||
|
if (path->address == NULL) {
|
||||||
|
- if (path == &(config->defaultserver))
|
||||||
|
+ if (path == &(config->defaultserver)) {
|
||||||
|
show_msg(MSGERR, "Connection needs to be made "
|
||||||
|
"via default server but "
|
||||||
|
"the default server has not "
|
||||||
|
- "been specified\n");
|
||||||
|
+ "been specified. Falling back to direct connection.\n");
|
||||||
|
+ return(realconnect(__fd, __addr, __len));
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
show_msg(MSGERR, "Connection needs to be made "
|
||||||
|
"via path specified at line "
|
||||||
|
diff --git a/tsocks.conf.5 b/tsocks.conf.5
|
||||||
|
index ea7a3b3..a2a7959 100644
|
||||||
|
--- a/tsocks.conf.5
|
||||||
|
+++ b/tsocks.conf.5
|
||||||
|
@@ -126,6 +126,15 @@ specified in the current path block should be used to access any IPs in the
|
||||||
|
range 150.0.0.0 to 150.255.255.255 when the connection request is for ports
|
||||||
|
80-1024.
|
||||||
|
|
||||||
|
+.TP
|
||||||
|
+.I fallback
|
||||||
|
+This directive allows to fall back to direct connection if no default
|
||||||
|
+server present in the configuration and fallback = yes.
|
||||||
|
+If fallback = no or not specified and there is no default server, the
|
||||||
|
+tsocks gives an error message and aborts.
|
||||||
|
+This parameter protects the user against accidentally establishing
|
||||||
|
+unwanted unsockified (ie. direct) connection.
|
||||||
|
+
|
||||||
|
.SH UTILITIES
|
||||||
|
tsocks comes with two utilities that can be useful in creating and verifying
|
||||||
|
the tsocks configuration file.
|
|
@ -0,0 +1,80 @@
|
||||||
|
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||||
|
## 01_symbolexport.dpatch by Nico Golde <nion@debian.org>
|
||||||
|
##
|
||||||
|
## All lines beginning with `## DP:' are a description of the patch.
|
||||||
|
## DP: No description.
|
||||||
|
|
||||||
|
--- a/common.c
|
||||||
|
+++ b/common.c
|
||||||
|
@@ -25,7 +25,8 @@ char logfilename[256]; /* Name of fil
|
||||||
|
FILE *logfile = NULL; /* File to which messages should be logged */
|
||||||
|
int logstamp = 0; /* Timestamp (and pid stamp) messages */
|
||||||
|
|
||||||
|
-unsigned int resolve_ip(char *host, int showmsg, int allownames) {
|
||||||
|
+unsigned int __attribute__ ((visibility ("hidden")))
|
||||||
|
+resolve_ip(char *host, int showmsg, int allownames) {
|
||||||
|
struct hostent *new;
|
||||||
|
unsigned int hostaddr;
|
||||||
|
struct in_addr *ip;
|
||||||
|
@@ -64,7 +65,8 @@ unsigned int resolve_ip(char *host, int
|
||||||
|
/* be logged instead of to standard error */
|
||||||
|
/* timestamp - This indicates that messages should be prefixed */
|
||||||
|
/* with timestamps (and the process id) */
|
||||||
|
-void set_log_options(int level, char *filename, int timestamp) {
|
||||||
|
+void __attribute__ ((visibility ("hidden")))
|
||||||
|
+set_log_options(int level, char *filename, int timestamp) {
|
||||||
|
|
||||||
|
loglevel = level;
|
||||||
|
if (loglevel < MSGERR)
|
||||||
|
@@ -78,7 +80,8 @@ void set_log_options(int level, char *fi
|
||||||
|
logstamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
-void show_msg(int level, char *fmt, ...) {
|
||||||
|
+void __attribute__ ((visibility ("hidden")))
|
||||||
|
+show_msg(int level, char *fmt, ...) {
|
||||||
|
va_list ap;
|
||||||
|
int saveerr;
|
||||||
|
extern char *progname;
|
||||||
|
--- a/parser.c
|
||||||
|
+++ b/parser.c
|
||||||
|
@@ -36,7 +36,8 @@ static int handle_defuser(struct parsedf
|
||||||
|
static int handle_defpass(struct parsedfile *, int, char *);
|
||||||
|
static int make_netent(char *value, struct netent **ent);
|
||||||
|
|
||||||
|
-int read_config (char *filename, struct parsedfile *config) {
|
||||||
|
+int __attribute__ ((visibility ("hidden")))
|
||||||
|
+read_config (char *filename, struct parsedfile *config) {
|
||||||
|
FILE *conf;
|
||||||
|
char line[MAXLINE];
|
||||||
|
int rc = 0;
|
||||||
|
@@ -579,7 +580,8 @@ int make_netent(char *value, struct nete
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
-int is_local(struct parsedfile *config, struct in_addr *testip) {
|
||||||
|
+int __attribute__ ((visibility ("hidden")))
|
||||||
|
+is_local(struct parsedfile *config, struct in_addr *testip) {
|
||||||
|
struct netent *ent;
|
||||||
|
|
||||||
|
for (ent = (config->localnets); ent != NULL; ent = ent -> next) {
|
||||||
|
@@ -593,7 +595,8 @@ int is_local(struct parsedfile *config,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the appropriate server to reach an ip */
|
||||||
|
-int pick_server(struct parsedfile *config, struct serverent **ent,
|
||||||
|
+int __attribute__ ((visibility ("hidden")))
|
||||||
|
+pick_server(struct parsedfile *config, struct serverent **ent,
|
||||||
|
struct in_addr *ip, unsigned int port) {
|
||||||
|
struct netent *net;
|
||||||
|
char ipbuf[64];
|
||||||
|
@@ -637,7 +640,8 @@ int pick_server(struct parsedfile *confi
|
||||||
|
/* the start pointer is set to be NULL. The difference between */
|
||||||
|
/* standard strsep and this function is that this one will */
|
||||||
|
/* set *separator to the character separator found if it isn't null */
|
||||||
|
-char *strsplit(char *separator, char **text, const char *search) {
|
||||||
|
+char __attribute__ ((visibility ("hidden")))
|
||||||
|
+*strsplit(char *separator, char **text, const char *search) {
|
||||||
|
int len;
|
||||||
|
char *ret;
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||||
|
## 02_hyphenfix.dpatch by Nico Golde <nion@debian.org>
|
||||||
|
##
|
||||||
|
## All lines beginning with `## DP:' are a description of the patch.
|
||||||
|
## DP: No description.
|
||||||
|
|
||||||
|
--- a/tsocks.8
|
||||||
|
+++ b/tsocks.8
|
||||||
|
@@ -13,11 +13,11 @@ Set LD_PRELOAD to load the library then
|
||||||
|
The syntax to force preload of the library for different shells is
|
||||||
|
specified below:
|
||||||
|
|
||||||
|
-Bash, Ksh and Bourne shell -
|
||||||
|
+Bash, Ksh and Bourne shell \-
|
||||||
|
|
||||||
|
export LD_PRELOAD=/lib/libtsocks.so
|
||||||
|
|
||||||
|
-C Shell -
|
||||||
|
+C Shell \-
|
||||||
|
|
||||||
|
setenv LD_PRELOAD=/lib/libtsocks.so
|
||||||
|
|
||||||
|
@@ -52,7 +52,7 @@ the SOCKSified TCP/IP stacks seen on oth
|
||||||
|
Most arguments to
|
||||||
|
.BR tsocks
|
||||||
|
are provided in the configuration file (the location of which is defined
|
||||||
|
-at configure time by the --with-conf=<file> argument but defaults to
|
||||||
|
+at configure time by the \-\-with\-conf=<file> argument but defaults to
|
||||||
|
/etc/tsocks.conf). The structure of this file is documented in tsocks.conf(8)
|
||||||
|
|
||||||
|
Some configuration options can be specified at run time using environment
|
||||||
|
@@ -63,7 +63,7 @@ variables as follows:
|
||||||
|
This environment variable overrides the default location of the tsocks
|
||||||
|
configuration file. This variable is not honored if the program tsocks
|
||||||
|
is embedded in is setuid. In addition this environment variable can
|
||||||
|
-be compiled out of tsocks with the --disable-envconf argument to
|
||||||
|
+be compiled out of tsocks with the \-\-disable\-envconf argument to
|
||||||
|
configure at build time
|
||||||
|
|
||||||
|
.TP
|
||||||
|
@@ -73,10 +73,10 @@ generated by tsocks (debug output is gen
|
||||||
|
standard error). If this variable is not present by default the logging
|
||||||
|
level is set to 0 which indicates that only error messages should be output.
|
||||||
|
Setting it to higher values will cause tsocks to generate more messages
|
||||||
|
-describing what it is doing. If set to -1 tsocks will output absolutely no
|
||||||
|
+describing what it is doing. If set to \-1 tsocks will output absolutely no
|
||||||
|
error or debugging messages. This is only needed if tsocks output interferes
|
||||||
|
with a program it is embedded in. Message output can be permanently compiled
|
||||||
|
-out of tsocks by specifying the --disable-debug option to configure at
|
||||||
|
+out of tsocks by specifying the \-\-disable\-debug option to configure at
|
||||||
|
build time
|
||||||
|
|
||||||
|
.TP
|
||||||
|
@@ -85,7 +85,7 @@ This option can be used to redirect the
|
||||||
|
be sent to standard error) to a file. This variable is not honored if the
|
||||||
|
program tsocks is embedded in is setuid. For programs where tsocks output
|
||||||
|
interferes with normal operation this option is generally better than
|
||||||
|
-disabling messages (with TSOCKS_DEBUG = -1)
|
||||||
|
+disabling messages (with TSOCKS_DEBUG = \-1)
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.I TSOCKS_USERNAME
|
||||||
|
@@ -115,8 +115,8 @@ consult the INSTALL file for more inform
|
||||||
|
.BR tsocks
|
||||||
|
will generate error messages and print them to stderr when there are
|
||||||
|
problems with the configuration file or the SOCKS negotiation with the
|
||||||
|
-server if the TSOCKS_DEBUG environment variable is not set to -1 or and
|
||||||
|
---disable-debug was not specified at compile time. This output may cause
|
||||||
|
+server if the TSOCKS_DEBUG environment variable is not set to \-1 or and
|
||||||
|
+\-\-disable\-debug was not specified at compile time. This output may cause
|
||||||
|
some problems with programs that redirect standard error.
|
||||||
|
|
||||||
|
.SS CAVEATS
|
||||||
|
@@ -157,12 +157,12 @@ not. This introduces overhead and should
|
||||||
|
.BR tsocks
|
||||||
|
uses ELF dynamic loader features to intercept dynamic function calls from
|
||||||
|
programs in which it is embedded. As a result, it cannot trace the
|
||||||
|
-actions of statically linked executables, non-ELF executables, or
|
||||||
|
+actions of statically linked executables, non\-ELF executables, or
|
||||||
|
executables that make system calls directly with the system call trap or
|
||||||
|
through the syscall() routine.
|
||||||
|
|
||||||
|
.SH FILES
|
||||||
|
-/etc/tsocks.conf - default tsocks configuration file
|
||||||
|
+/etc/tsocks.conf \- default tsocks configuration file
|
||||||
|
|
||||||
|
.SH SEE ALSO
|
||||||
|
tsocks.conf(5)
|
||||||
|
--- a/tsocks.conf.5
|
||||||
|
+++ b/tsocks.conf.5
|
||||||
|
@@ -66,7 +66,7 @@ The following directives are used in the
|
||||||
|
.I server
|
||||||
|
The IP address of the SOCKS server (e.g "server = 10.1.4.253"). Only one
|
||||||
|
server may be specified per path block, or one outside a path
|
||||||
|
-block (to define the default server). Unless --disable-hostnames was
|
||||||
|
+block (to define the default server). Unless \-\-disable\-hostnames was
|
||||||
|
specified to configure at compile time the server can be specified as
|
||||||
|
a hostname (e.g "server = socks.nec.com")
|
||||||
|
|
||||||
|
@@ -118,13 +118,13 @@ local, otherwise tsocks would need a SOC
|
||||||
|
.TP
|
||||||
|
.I reaches
|
||||||
|
This directive is only valid inside a path block. Its parameter is formed
|
||||||
|
-as IP[:startport[-endport]]/Subnet and it specifies a network (and a range
|
||||||
|
+as IP[:startport[\-endport]]/Subnet and it specifies a network (and a range
|
||||||
|
of ports on that network) that can be accessed by the SOCKS server specified
|
||||||
|
in this path block. For example, in a path block "reaches =
|
||||||
|
-150.0.0.0:80-1024/255.0.0.0" indicates to tsocks that the SOCKS server
|
||||||
|
+150.0.0.0:80\-1024/255.0.0.0" indicates to tsocks that the SOCKS server
|
||||||
|
specified in the current path block should be used to access any IPs in the
|
||||||
|
range 150.0.0.0 to 150.255.255.255 when the connection request is for ports
|
||||||
|
-80-1024.
|
||||||
|
+80\-1024.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.I fallback
|
||||||
|
@@ -155,12 +155,12 @@ the configuration to the screen in a for
|
||||||
|
extremely useful in debugging problems.
|
||||||
|
|
||||||
|
validateconf can read a configuration file from a location other than the
|
||||||
|
-location specified at compile time with the -f <filename> command line
|
||||||
|
+location specified at compile time with the \-f <filename> command line
|
||||||
|
option.
|
||||||
|
|
||||||
|
Normally validateconf simply dumps the configuration read to the screen (in
|
||||||
|
a nicely readable format), however it also has a useful 'test' mode. When
|
||||||
|
-passed a hostname/ip on the command line like -t <hostname/ip>, validateconf
|
||||||
|
+passed a hostname/ip on the command line like \-t <hostname/ip>, validateconf
|
||||||
|
determines which of the SOCKS servers specified in the configuration file
|
||||||
|
would be used by tsocks to access the specified host.
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||||
|
## 03_fixloop.dpatch by Nico Golde <nion@debian.org>
|
||||||
|
##
|
||||||
|
## All lines beginning with `## DP:' are a description of the patch.
|
||||||
|
## DP: No description.
|
||||||
|
|
||||||
|
--- a/tsocks.c
|
||||||
|
+++ b/tsocks.c
|
||||||
|
@@ -990,6 +990,10 @@ static int recv_buffer(struct connreq *c
|
||||||
|
if (rc > 0) {
|
||||||
|
conn->datadone += rc;
|
||||||
|
rc = 0;
|
||||||
|
+ } else if (rc == 0) {
|
||||||
|
+ show_msg(MSGDEBUG, "Peer has shutdown but we only read %d of %d bytes.\n",
|
||||||
|
+ conn->datadone, conn->datalen);
|
||||||
|
+ rc = ENOTCONN; /* ENOTCONN seems like the most fitting error message */
|
||||||
|
} else {
|
||||||
|
if (errno != EWOULDBLOCK)
|
||||||
|
show_msg(MSGDEBUG, "Read failed, %s\n", strerror(errno));
|
|
@ -0,0 +1,268 @@
|
||||||
|
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||||
|
## 04_getpeername.dpatch by Nico Golde <nion@debian.org>
|
||||||
|
##
|
||||||
|
## All lines beginning with `## DP:' are a description of the patch.
|
||||||
|
## DP: No description.
|
||||||
|
|
||||||
|
--- a/acconfig.h
|
||||||
|
+++ b/acconfig.h
|
||||||
|
@@ -43,6 +43,9 @@ allows socksified DNS */
|
||||||
|
/* Prototype and function header for close function */
|
||||||
|
#undef CLOSE_SIGNATURE
|
||||||
|
|
||||||
|
+/* Prototype and function header for getpeername function */
|
||||||
|
+#undef GETPEERNAME_SIGNATURE
|
||||||
|
+
|
||||||
|
/* Work out which function we have for conversion from string IPs to
|
||||||
|
numerical ones */
|
||||||
|
#undef HAVE_INET_ADDR
|
||||||
|
--- a/config.h.in
|
||||||
|
+++ b/config.h.in
|
||||||
|
@@ -46,6 +46,9 @@ allows socksified DNS */
|
||||||
|
/* Prototype and function header for close function */
|
||||||
|
#undef CLOSE_SIGNATURE
|
||||||
|
|
||||||
|
+/* Prototype and function header for close function */
|
||||||
|
+#undef GETPEERNAME_SIGNATURE
|
||||||
|
+
|
||||||
|
/* Work out which function we have for conversion from string IPs to
|
||||||
|
numerical ones */
|
||||||
|
#undef HAVE_INET_ADDR
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -2225,14 +2225,60 @@ cat >> confdefs.h <<EOF
|
||||||
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
+
|
||||||
|
+echo $ac_n "checking for correct getpeername prototype""... $ac_c" 1>&6
|
||||||
|
+echo "configure:2231: checking for correct getpeername prototype" >&5
|
||||||
|
+PROTO=
|
||||||
|
+PROTO1='int __fd, const struct sockaddr * __name, int *__namelen'
|
||||||
|
+PROTO2='int __fd, const struct sockaddr_in * __name, socklen_t *__namelen'
|
||||||
|
+PROTO3='int __fd, struct sockaddr * __name, socklen_t *__namelen'
|
||||||
|
+PROTO4='int __fd, const struct sockaddr * __name, socklen_t *__namelen'
|
||||||
|
+for testproto in "${PROTO1}" \
|
||||||
|
+ "${PROTO2}" \
|
||||||
|
+ "${PROTO3}" \
|
||||||
|
+ "${PROTO4}"
|
||||||
|
+do
|
||||||
|
+ if test "${PROTO}" = ""; then
|
||||||
|
+ cat > conftest.$ac_ext <<EOF
|
||||||
|
+#line 2244 "configure"
|
||||||
|
+#include "confdefs.h"
|
||||||
|
+
|
||||||
|
+ #include <sys/socket.h>
|
||||||
|
+ int getpeername($testproto);
|
||||||
|
+
|
||||||
|
+int main() {
|
||||||
|
+
|
||||||
|
+; return 0; }
|
||||||
|
+EOF
|
||||||
|
+if { (eval echo configure:2254: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
|
+ rm -rf conftest*
|
||||||
|
+ PROTO="$testproto";
|
||||||
|
+else
|
||||||
|
+ echo "configure: failed program was:" >&5
|
||||||
|
+ cat conftest.$ac_ext >&5
|
||||||
|
+fi
|
||||||
|
+rm -f conftest*
|
||||||
|
+ fi
|
||||||
|
+done
|
||||||
|
+if test "${PROTO}" = ""; then
|
||||||
|
+ { echo "configure: error: "no match found!"" 1>&2; exit 1; }
|
||||||
|
+fi
|
||||||
|
+echo "$ac_t""getpeername(${PROTO})" 1>&6
|
||||||
|
+cat >> confdefs.h <<EOF
|
||||||
|
+#define GETPEERNAME_SIGNATURE ${PROTO}
|
||||||
|
+EOF
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
echo $ac_n "checking for correct poll prototype""... $ac_c" 1>&6
|
||||||
|
-echo "configure:2230: checking for correct poll prototype" >&5
|
||||||
|
+echo "configure:2276: checking for correct poll prototype" >&5
|
||||||
|
PROTO=
|
||||||
|
for testproto in 'struct pollfd *ufds, unsigned long nfds, int timeout'
|
||||||
|
do
|
||||||
|
if test "${PROTO}" = ""; then
|
||||||
|
cat > conftest.$ac_ext <<EOF
|
||||||
|
-#line 2236 "configure"
|
||||||
|
+#line 2282 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
#include <sys/poll.h>
|
||||||
|
@@ -2242,7 +2288,7 @@ int main() {
|
||||||
|
|
||||||
|
; return 0; }
|
||||||
|
EOF
|
||||||
|
-if { (eval echo configure:2246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
|
+if { (eval echo configure:2292: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
|
rm -rf conftest*
|
||||||
|
PROTO="$testproto";
|
||||||
|
else
|
||||||
|
--- a/configure.in
|
||||||
|
+++ b/configure.in
|
||||||
|
@@ -309,6 +309,34 @@ fi
|
||||||
|
AC_MSG_RESULT([close(${PROTO})])
|
||||||
|
AC_DEFINE_UNQUOTED(CLOSE_SIGNATURE, [${PROTO}])
|
||||||
|
|
||||||
|
+
|
||||||
|
+dnl Find the correct getpeername prototype on this machine
|
||||||
|
+AC_MSG_CHECKING(for correct getpeername prototype)
|
||||||
|
+PROTO=
|
||||||
|
+PROTO1='int __fd, const struct sockaddr * __name, int *__namelen'
|
||||||
|
+PROTO2='int __fd, const struct sockaddr_in * __name, socklen_t *__namelen'
|
||||||
|
+PROTO3='int __fd, struct sockaddr * __name, socklen_t *__namelen'
|
||||||
|
+PROTO4='int __fd, const struct sockaddr * __name, socklen_t *__namelen'
|
||||||
|
+for testproto in "${PROTO1}" \
|
||||||
|
+ "${PROTO2}" \
|
||||||
|
+ "${PROTO3}" \
|
||||||
|
+ "${PROTO4}"
|
||||||
|
+do
|
||||||
|
+ if test "${PROTO}" = ""; then
|
||||||
|
+ AC_TRY_COMPILE([
|
||||||
|
+ #include <sys/socket.h>
|
||||||
|
+ int getpeername($testproto);
|
||||||
|
+ ],,[PROTO="$testproto";],)
|
||||||
|
+ fi
|
||||||
|
+done
|
||||||
|
+if test "${PROTO}" = ""; then
|
||||||
|
+ AC_MSG_ERROR("no match found!")
|
||||||
|
+fi
|
||||||
|
+AC_MSG_RESULT([getpeername(${PROTO})])
|
||||||
|
+AC_DEFINE_UNQUOTED(GETPEERNAME_SIGNATURE, [${PROTO}])
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
dnl Find the correct poll prototype on this machine
|
||||||
|
AC_MSG_CHECKING(for correct poll prototype)
|
||||||
|
PROTO=
|
||||||
|
--- a/tsocks.c
|
||||||
|
+++ b/tsocks.c
|
||||||
|
@@ -62,6 +62,7 @@ static int (*realconnect)(CONNECT_SIGNAT
|
||||||
|
static int (*realselect)(SELECT_SIGNATURE);
|
||||||
|
static int (*realpoll)(POLL_SIGNATURE);
|
||||||
|
static int (*realclose)(CLOSE_SIGNATURE);
|
||||||
|
+static int (*realgetpeername)(GETPEERNAME_SIGNATURE);
|
||||||
|
static struct parsedfile *config;
|
||||||
|
static struct connreq *requests = NULL;
|
||||||
|
static int suid = 0;
|
||||||
|
@@ -73,6 +74,7 @@ int connect(CONNECT_SIGNATURE);
|
||||||
|
int select(SELECT_SIGNATURE);
|
||||||
|
int poll(POLL_SIGNATURE);
|
||||||
|
int close(CLOSE_SIGNATURE);
|
||||||
|
+int getpeername(GETPEERNAME_SIGNATURE);
|
||||||
|
#ifdef USE_SOCKS_DNS
|
||||||
|
int res_init(void);
|
||||||
|
#endif
|
||||||
|
@@ -109,14 +111,15 @@ void _init(void) {
|
||||||
|
/* most programs that are run won't use our services, so */
|
||||||
|
/* we do our general initialization on first call */
|
||||||
|
|
||||||
|
- /* Determine the logging level */
|
||||||
|
- suid = (getuid() != geteuid());
|
||||||
|
+ /* Determine the logging level */
|
||||||
|
+ suid = (getuid() != geteuid());
|
||||||
|
|
||||||
|
#ifndef USE_OLD_DLSYM
|
||||||
|
realconnect = dlsym(RTLD_NEXT, "connect");
|
||||||
|
realselect = dlsym(RTLD_NEXT, "select");
|
||||||
|
realpoll = dlsym(RTLD_NEXT, "poll");
|
||||||
|
realclose = dlsym(RTLD_NEXT, "close");
|
||||||
|
+ realgetpeername = dlsym(RTLD_NEXT, "getpeername");
|
||||||
|
#ifdef USE_SOCKS_DNS
|
||||||
|
realresinit = dlsym(RTLD_NEXT, "res_init");
|
||||||
|
#endif
|
||||||
|
@@ -125,14 +128,15 @@ void _init(void) {
|
||||||
|
realconnect = dlsym(lib, "connect");
|
||||||
|
realselect = dlsym(lib, "select");
|
||||||
|
realpoll = dlsym(lib, "poll");
|
||||||
|
+ realgetpeername = dlsym(lib, "getpeername");
|
||||||
|
#ifdef USE_SOCKS_DNS
|
||||||
|
realresinit = dlsym(lib, "res_init");
|
||||||
|
#endif
|
||||||
|
- dlclose(lib);
|
||||||
|
+ dlclose(lib);
|
||||||
|
|
||||||
|
lib = dlopen(LIBC, RTLD_LAZY);
|
||||||
|
- realclose = dlsym(lib, "close");
|
||||||
|
- dlclose(lib);
|
||||||
|
+ realclose = dlsym(lib, "close");
|
||||||
|
+ dlclose(lib);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -350,8 +354,10 @@ int select(SELECT_SIGNATURE) {
|
||||||
|
|
||||||
|
/* If we're not currently managing any requests we can just
|
||||||
|
* leave here */
|
||||||
|
- if (!requests)
|
||||||
|
+ if (!requests) {
|
||||||
|
+ show_msg(MSGDEBUG, "No requests waiting, calling real select\n");
|
||||||
|
return(realselect(n, readfds, writefds, exceptfds, timeout));
|
||||||
|
+ }
|
||||||
|
|
||||||
|
get_environment();
|
||||||
|
|
||||||
|
@@ -705,6 +711,50 @@ int close(CLOSE_SIGNATURE) {
|
||||||
|
return(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* If we are not done setting up the connection yet, return
|
||||||
|
+ * -1 and ENOTCONN, otherwise call getpeername
|
||||||
|
+ *
|
||||||
|
+ * This is necessary since some applications, when using non-blocking connect,
|
||||||
|
+ * (like ircII) use getpeername() to find out if they are connected already.
|
||||||
|
+ *
|
||||||
|
+ * This results in races sometimes, where the client sends data to the socket
|
||||||
|
+ * before we are done with the socks connection setup. Another solution would
|
||||||
|
+ * be to intercept send().
|
||||||
|
+ *
|
||||||
|
+ * This could be extended to actually set the peername to the peer the
|
||||||
|
+ * client application has requested, but not for now.
|
||||||
|
+ *
|
||||||
|
+ * PP, Sat, 27 Mar 2004 11:30:23 +0100
|
||||||
|
+ */
|
||||||
|
+int getpeername(GETPEERNAME_SIGNATURE) {
|
||||||
|
+ struct connreq *conn;
|
||||||
|
+ int rc;
|
||||||
|
+
|
||||||
|
+ if (realgetpeername == NULL) {
|
||||||
|
+ show_msg(MSGERR, "Unresolved symbol: getpeername\n");
|
||||||
|
+ return(-1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ show_msg(MSGDEBUG, "Call to getpeername for fd %d\n", __fd);
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ rc = realgetpeername(__fd, __name, __namelen);
|
||||||
|
+ if (rc == -1)
|
||||||
|
+ return rc;
|
||||||
|
+
|
||||||
|
+ /* Are we handling this connect? */
|
||||||
|
+ if ((conn = find_socks_request(__fd, 1))) {
|
||||||
|
+ /* While we are at it, we might was well try to do something useful */
|
||||||
|
+ handle_request(conn);
|
||||||
|
+
|
||||||
|
+ if (conn->state != DONE) {
|
||||||
|
+ errno = ENOTCONN;
|
||||||
|
+ return(-1);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return rc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static struct connreq *new_socks_request(int sockid, struct sockaddr_in *connaddr,
|
||||||
|
struct sockaddr_in *serveraddr,
|
||||||
|
struct serverent *path) {
|
||||||
|
@@ -854,7 +904,7 @@ static int connect_server(struct connreq
|
||||||
|
sizeof(conn->serveraddr));
|
||||||
|
|
||||||
|
show_msg(MSGDEBUG, "Connect returned %d, errno is %d\n", rc, errno);
|
||||||
|
- if (rc) {
|
||||||
|
+ if (rc) {
|
||||||
|
if (errno != EINPROGRESS) {
|
||||||
|
show_msg(MSGERR, "Error %d attempting to connect to SOCKS "
|
||||||
|
"server (%s)\n", errno, strerror(errno));
|
|
@ -0,0 +1,42 @@
|
||||||
|
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||||
|
## 05_config_in_home.dpatch by Reinhard Tartler <siretart@tauware.de>
|
||||||
|
##
|
||||||
|
## All lines beginning with `## DP:' are a description of the patch.
|
||||||
|
## DP: Additionally search for the configuration file in user home directory
|
||||||
|
|
||||||
|
diff -urNad tsocks-1.8beta5~/parser.c tsocks-1.8beta5/parser.c
|
||||||
|
--- tsocks-1.8beta5~/parser.c 2008-03-03 14:05:14.000000000 +0100
|
||||||
|
+++ tsocks-1.8beta5/parser.c 2008-03-03 14:05:36.000000000 +0100
|
||||||
|
@@ -36,6 +36,32 @@
|
||||||
|
static int handle_defpass(struct parsedfile *, int, char *);
|
||||||
|
static int make_netent(char *value, struct netent **ent);
|
||||||
|
|
||||||
|
+char __attribute__ ((visibility ("hidden")))
|
||||||
|
+*find_config(char *line) {
|
||||||
|
+ struct passwd* pw;
|
||||||
|
+
|
||||||
|
+ errno = 0;
|
||||||
|
+
|
||||||
|
+ pw = getpwuid(getuid());
|
||||||
|
+ if (errno) {
|
||||||
|
+ perror("getpwuid");
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* check for config in $HOME */
|
||||||
|
+ snprintf(line, MAXLINE - 1, "%s/.tsocks.conf", pw->pw_dir);
|
||||||
|
+
|
||||||
|
+ if (access(line, R_OK)) {
|
||||||
|
+ show_msg(MSGDEBUG, "Can't access %s, using " CONF_FILE " instead.\n", line);
|
||||||
|
+ strncpy(line, CONF_FILE, MAXLINE - 1);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Insure null termination */
|
||||||
|
+ line[MAXLINE - 1] = (char) 0;
|
||||||
|
+
|
||||||
|
+ return line;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int __attribute__ ((visibility ("hidden")))
|
||||||
|
read_config (char *filename, struct parsedfile *config) {
|
||||||
|
FILE *conf;
|
|
@ -0,0 +1,103 @@
|
||||||
|
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||||
|
## 06_fallback.dpatch by Tamas SZERB <toma@rulez.org>
|
||||||
|
##
|
||||||
|
## All lines beginning with `## DP:' are a description of the patch.
|
||||||
|
## DP: Establish direct connection instead of sockified if
|
||||||
|
## DP: there is no default server specified and the
|
||||||
|
## DP: fallback = yes.
|
||||||
|
|
||||||
|
--- a/parser.h
|
||||||
|
+++ b/parser.h
|
||||||
|
@@ -33,6 +33,7 @@ struct parsedfile {
|
||||||
|
struct netent *localnets;
|
||||||
|
struct serverent defaultserver;
|
||||||
|
struct serverent *paths;
|
||||||
|
+ int fallback;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Functions provided by parser module */
|
||||||
|
--- a/parser.c
|
||||||
|
+++ b/parser.c
|
||||||
|
@@ -35,6 +35,7 @@ static int handle_local(struct parsedfil
|
||||||
|
static int handle_defuser(struct parsedfile *, int, char *);
|
||||||
|
static int handle_defpass(struct parsedfile *, int, char *);
|
||||||
|
static int make_netent(char *value, struct netent **ent);
|
||||||
|
+static int handle_fallback(struct parsedfile *, int, char *);
|
||||||
|
|
||||||
|
char __attribute__ ((visibility ("hidden")))
|
||||||
|
*find_config(char *line) {
|
||||||
|
@@ -181,6 +182,8 @@ static int handle_line(struct parsedfile
|
||||||
|
handle_defpass(config, lineno, words[2]);
|
||||||
|
} else if (!strcmp(words[0], "local")) {
|
||||||
|
handle_local(config, lineno, words[2]);
|
||||||
|
+ } else if (!strcmp(words[0], "fallback")) {
|
||||||
|
+ handle_fallback(config, lineno, words[2]);
|
||||||
|
} else {
|
||||||
|
show_msg(MSGERR, "Invalid pair type (%s) specified "
|
||||||
|
"on line %d in configuration file, "
|
||||||
|
@@ -512,6 +515,19 @@ static int handle_local(struct parsedfil
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int handle_fallback(struct parsedfile *config, int lineno, char *value) {
|
||||||
|
+ char *v = strsplit(NULL, &value, " ");
|
||||||
|
+ if (config->fallback !=0) {
|
||||||
|
+ show_msg(MSGERR, "Fallback may only be specified "
|
||||||
|
+ "once in configuration file.\n",
|
||||||
|
+ lineno, currentcontext->lineno);
|
||||||
|
+ } else {
|
||||||
|
+ if(!strcmp(v, "yes")) config->fallback = 1;
|
||||||
|
+ if(!strcmp(v, "no")) config->fallback = 0;
|
||||||
|
+ }
|
||||||
|
+ return(0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Construct a netent given a string like */
|
||||||
|
/* "198.126.0.1[:portno[-portno]]/255.255.255.0" */
|
||||||
|
int make_netent(char *value, struct netent **ent) {
|
||||||
|
--- a/tsocks.c
|
||||||
|
+++ b/tsocks.c
|
||||||
|
@@ -294,11 +294,20 @@ int connect(CONNECT_SIGNATURE) {
|
||||||
|
(path->address ? path->address : "(Not Provided)"));
|
||||||
|
if (path->address == NULL) {
|
||||||
|
if (path == &(config->defaultserver)) {
|
||||||
|
- show_msg(MSGERR, "Connection needs to be made "
|
||||||
|
- "via default server but "
|
||||||
|
- "the default server has not "
|
||||||
|
- "been specified. Falling back to direct connection.\n");
|
||||||
|
- return(realconnect(__fd, __addr, __len));
|
||||||
|
+ if (config->fallback) {
|
||||||
|
+ show_msg(MSGERR, "Connection needs to be made "
|
||||||
|
+ "via default server but "
|
||||||
|
+ "the default server has not "
|
||||||
|
+ "been specified. Fallback is 'yes' so "
|
||||||
|
+ "Falling back to direct connection.\n");
|
||||||
|
+ return(realconnect(__fd, __addr, __len));
|
||||||
|
+ } else {
|
||||||
|
+ show_msg(MSGERR, "Connection needs to be made "
|
||||||
|
+ "via default server but "
|
||||||
|
+ "the default server has not "
|
||||||
|
+ "been specified. Fallback is 'no' so "
|
||||||
|
+ "coudln't establish the connection.\n");
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
else
|
||||||
|
show_msg(MSGERR, "Connection needs to be made "
|
||||||
|
--- a/tsocks.conf.5
|
||||||
|
+++ b/tsocks.conf.5
|
||||||
|
@@ -135,6 +135,15 @@ tsocks gives an error message and aborts
|
||||||
|
This parameter protects the user against accidentally establishing
|
||||||
|
unwanted unsockified (ie. direct) connection.
|
||||||
|
|
||||||
|
+.TP
|
||||||
|
+.I fallback
|
||||||
|
+This directive allows to fall back to direct connection if no default
|
||||||
|
+server present in the configuration and fallback = yes.
|
||||||
|
+If fallback = no or not specified and there is no default server, the
|
||||||
|
+tsocks gives an error message and aborts.
|
||||||
|
+This parameter protects the user against accidentally establishing
|
||||||
|
+unwanted unsockified (ie. direct) connection.
|
||||||
|
+
|
||||||
|
.SH UTILITIES
|
||||||
|
tsocks comes with two utilities that can be useful in creating and verifying
|
||||||
|
the tsocks configuration file.
|
|
@ -0,0 +1,24 @@
|
||||||
|
#! /bin/sh /usr/share/dpatch/dpatch-run
|
||||||
|
## 07_tsocks-1.8_beta5-hostname-config-fix.patch by https://sourceforge.net/u/phobosk/profile/
|
||||||
|
##
|
||||||
|
## All lines beginning with `## DP:' are a description of the patch.
|
||||||
|
## DP: Enable host name resolution on /etc/tsocks.conf at configure time,
|
||||||
|
## DP: this was intended to be enabled in previous releases, but a bug in the configure script
|
||||||
|
## DP: made it impossible
|
||||||
|
## DP: Poor's man DEP3 headers
|
||||||
|
## DP: Origin: https://sourceforge.net/p/tsocks/bugs/27/
|
||||||
|
## DP: Last-Update: 2016-10-28
|
||||||
|
|
||||||
|
--- tsocks-1.8.orig/configure.in
|
||||||
|
+++ tsocks-1.8/configure.in
|
||||||
|
@@ -171,8 +171,8 @@
|
||||||
|
AC_DEFINE(ALLOW_MSG_OUTPUT)
|
||||||
|
fi
|
||||||
|
|
||||||
|
-if test "x${enable_hostnames}" = "x"; then
|
||||||
|
- AC_DEFINE(HOSTNAMES)
|
||||||
|
+if test "${enable_hostnames}" = "yes"; then
|
||||||
|
+ AC_DEFINE(HOSTNAMES,1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "${enable_socksdns}" = "yes" -a \
|
|
@ -0,0 +1,42 @@
|
||||||
|
Description: this patch fixes spelling and formating fixes on tsocks.conf(5)
|
||||||
|
manpage
|
||||||
|
Last-update: 2016-11-07
|
||||||
|
Origin: vendor
|
||||||
|
Author: gustavo panizzo <gfa@zumbi.com.ar>
|
||||||
|
|
||||||
|
--- a/tsocks.conf.5
|
||||||
|
+++ b/tsocks.conf.5
|
||||||
|
@@ -22,7 +22,7 @@ Obviously if a connection is not to a lo
|
||||||
|
to be proxied over a SOCKS server. However, many installations have several
|
||||||
|
different SOCKS servers to be used to access different internal (and external)
|
||||||
|
networks. For this reason the configuration file allows the definition of
|
||||||
|
-'paths' as well as a default SOCKS server.
|
||||||
|
+\'paths\' as well as a default SOCKS server.
|
||||||
|
|
||||||
|
Paths are declared as blocks in the configuration file. That is, they begin
|
||||||
|
with a 'path {' line in the configuration file and end with a '}' line. Inside
|
||||||
|
@@ -128,21 +128,15 @@ range 150.0.0.0 to 150.255.255.255 when
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.I fallback
|
||||||
|
-This directive allows to fall back to direct connection if no default
|
||||||
|
+This directive allows one to fall back to direct connection if no default
|
||||||
|
server present in the configuration and fallback = yes.
|
||||||
|
If fallback = no or not specified and there is no default server, the
|
||||||
|
tsocks gives an error message and aborts.
|
||||||
|
This parameter protects the user against accidentally establishing
|
||||||
|
unwanted unsockified (ie. direct) connection.
|
||||||
|
|
||||||
|
-.TP
|
||||||
|
-.I fallback
|
||||||
|
-This directive allows to fall back to direct connection if no default
|
||||||
|
-server present in the configuration and fallback = yes.
|
||||||
|
-If fallback = no or not specified and there is no default server, the
|
||||||
|
-tsocks gives an error message and aborts.
|
||||||
|
-This parameter protects the user against accidentally establishing
|
||||||
|
-unwanted unsockified (ie. direct) connection.
|
||||||
|
+.SH CONFIGURATION FILE SEARCH ORDER
|
||||||
|
+tsocks will search first for $HOME/.tsocks.conf then /etc/tsocks.conf
|
||||||
|
|
||||||
|
.SH UTILITIES
|
||||||
|
tsocks comes with two utilities that can be useful in creating and verifying
|
|
@ -0,0 +1,48 @@
|
||||||
|
Description: this patch enabled hardened build
|
||||||
|
Last-update: 2016-11-07
|
||||||
|
Origin: vendor
|
||||||
|
Author: gustavo panizzo <gfa@zumbi.com.ar>
|
||||||
|
|
||||||
|
Index: tsocks-1.8beta5+ds1/Makefile.in
|
||||||
|
===================================================================
|
||||||
|
--- tsocks-1.8beta5+ds1.orig/Makefile.in
|
||||||
|
+++ tsocks-1.8beta5+ds1/Makefile.in
|
||||||
|
@@ -28,6 +28,8 @@
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
CFLAGS = @CFLAGS@
|
||||||
|
+CPPFAGS = @CPPFLAGS@
|
||||||
|
+LDFLAGS = @LDFLAGS@
|
||||||
|
INCLUDES = -I.
|
||||||
|
LIBS = @LIBS@
|
||||||
|
SPECIALLIBS = @SPECIALLIBS@
|
||||||
|
@@ -41,23 +43,23 @@
|
||||||
|
all: ${TARGETS}
|
||||||
|
|
||||||
|
${VALIDATECONF}: ${VALIDATECONF}.c ${COMMON}.o ${PARSER}.o
|
||||||
|
- ${SHCC} ${CFLAGS} ${INCLUDES} -o ${VALIDATECONF} ${VALIDATECONF}.c ${COMMON}.o ${PARSER}.o ${LIBS}
|
||||||
|
+ ${SHCC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${INCLUDES} -o ${VALIDATECONF} ${VALIDATECONF}.c ${COMMON}.o ${PARSER}.o ${LIBS}
|
||||||
|
|
||||||
|
${INSPECT}: ${INSPECT}.c ${COMMON}.o
|
||||||
|
- ${SHCC} ${CFLAGS} ${INCLUDES} -o ${INSPECT} ${INSPECT}.c ${COMMON}.o ${LIBS}
|
||||||
|
+ ${SHCC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${INCLUDES} -o ${INSPECT} ${INSPECT}.c ${COMMON}.o ${LIBS}
|
||||||
|
|
||||||
|
${SAVE}: ${SAVE}.c
|
||||||
|
- ${SHCC} ${CFLAGS} ${INCLUDES} -static -o ${SAVE} ${SAVE}.c
|
||||||
|
+ ${SHCC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${INCLUDES} -static -o ${SAVE} ${SAVE}.c
|
||||||
|
|
||||||
|
${SHLIB}: ${OBJS} ${COMMON}.o ${PARSER}.o
|
||||||
|
- ${SHCC} ${CFLAGS} ${INCLUDES} -nostdlib -shared -o ${SHLIB} ${OBJS} ${COMMON}.o ${PARSER}.o ${DYNLIB_FLAGS} ${SPECIALLIBS} ${LIBS}
|
||||||
|
+ ${SHCC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} ${INCLUDES} -Wl,-soname,libtsocks.so.1 -nostdlib -shared -o ${SHLIB} ${OBJS} ${COMMON}.o ${PARSER}.o ${DYNLIB_FLAGS} ${SPECIALLIBS} ${LIBS}
|
||||||
|
ln -sf ${SHLIB} ${LIB_NAME}.so
|
||||||
|
|
||||||
|
%.so: %.c
|
||||||
|
- ${SHCC} ${CFLAGS} ${INCLUDES} -c ${CC_SWITCHES} $< -o $@
|
||||||
|
+ ${SHCC} ${CFLAGS} ${CPPFLAGS} ${INCLUDES} -c ${CC_SWITCHES} $< -o $@
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
- ${SHCC} ${CFLAGS} ${INCLUDES} -c ${CC_SWITCHES} $< -o $@
|
||||||
|
+ ${SHCC} ${CFLAGS} ${CPPFLAGS} ${INCLUDES} -c ${CC_SWITCHES} $< -o $@
|
||||||
|
|
||||||
|
install: ${TARGETS} installscript installlib installman
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
TERMUX_PKG_HOMEPAGE=http://tsocks.sf.net
|
||||||
|
TERMUX_PKG_DESCRIPTION="transparent network access through a SOCKS 4 or 5 proxy"
|
||||||
|
TERMUX_PKG_VERSION=1.8beta5
|
||||||
|
TERMUX_PKG_MAINTAINER="Oliver Schmidhauser @Neo-Oli"
|
||||||
|
TERMUX_PKG_SRCURL=https://downloads.sourceforge.net/project/tsocks/tsocks/1.8%20beta%205/tsocks-${TERMUX_PKG_VERSION}.tar.gz
|
||||||
|
TERMUX_PKG_SHA256=849d7ef5af80d03e76cc05ed9fb8fa2bcc2b724b51ebfd1b6be11c7863f5b347
|
||||||
|
TERMUX_PKG_BUILD_IN_SRC=yes
|
||||||
|
TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" --with-conf=$TERMUX_PREFIX/etc/tsocks.conf"
|
||||||
|
|
||||||
|
termux_step_pre_configure() {
|
||||||
|
cp $TERMUX_PKG_SRCDIR/tsocks.conf.complex.example $TERMUX_PREFIX/etc/tsocks.conf
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index 78e120d..7de513b 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -53,11 +53,11 @@ datadir='${prefix}/share'
|
||||||
|
sysconfdir='${prefix}/etc'
|
||||||
|
sharedstatedir='${prefix}/com'
|
||||||
|
localstatedir='${prefix}/var'
|
||||||
|
-libdir='${exec_prefix}/lib'
|
||||||
|
+libdir='${prefix}/lib'
|
||||||
|
includedir='${prefix}/include'
|
||||||
|
oldincludedir='/usr/include'
|
||||||
|
infodir='${prefix}/info'
|
||||||
|
-mandir='${prefix}/man'
|
||||||
|
+mandir='${prefix}/share/man'
|
||||||
|
|
||||||
|
# Initialize some other variables.
|
||||||
|
subdirs=
|
||||||
|
@@ -2228,7 +2228,8 @@ EOF
|
||||||
|
echo $ac_n "checking for correct poll prototype""... $ac_c" 1>&6
|
||||||
|
echo "configure:2230: checking for correct poll prototype" >&5
|
||||||
|
PROTO=
|
||||||
|
-for testproto in 'struct pollfd *ufds, unsigned long nfds, int timeout'
|
||||||
|
+# https://sourceforge.net/p/tsocks/support-requests/6/
|
||||||
|
+for testproto in 'struct pollfd *ufds, nfds_t nfds, int timeout'
|
||||||
|
do
|
||||||
|
if test "${PROTO}" = ""; then
|
||||||
|
cat > conftest.$ac_ext <<EOF
|
|
@ -0,0 +1,16 @@
|
||||||
|
diff --git a/tsocks.c b/tsocks.c
|
||||||
|
index 9cfdfff..5518633 100644
|
||||||
|
--- a/tsocks.c
|
||||||
|
+++ b/tsocks.c
|
||||||
|
@@ -682,6 +682,11 @@ int close(CLOSE_SIGNATURE) {
|
||||||
|
int rc;
|
||||||
|
struct connreq *conn;
|
||||||
|
|
||||||
|
+ /*Sometimes this function seems to get called before _init has run*/
|
||||||
|
+ if (realclose == NULL) {
|
||||||
|
+ _init();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (realclose == NULL) {
|
||||||
|
show_msg(MSGERR, "Unresolved symbol: close\n");
|
||||||
|
return(-1);
|
|
@ -0,0 +1,43 @@
|
||||||
|
diff --git a/tsocks b/tsocks
|
||||||
|
index 8380d9c..7d1df7a 100755
|
||||||
|
--- a/tsocks
|
||||||
|
+++ b/tsocks
|
||||||
|
@@ -46,14 +46,14 @@ case "$1" in
|
||||||
|
on)
|
||||||
|
if [ -z "$LD_PRELOAD" ]
|
||||||
|
then
|
||||||
|
- export LD_PRELOAD="/usr/lib/libtsocks.so"
|
||||||
|
+ export LD_PRELOAD="$PREFIX/lib/libtsocks.so"
|
||||||
|
else
|
||||||
|
- echo $LD_PRELOAD | grep -q "/usr/lib/libtsocks\.so" || \
|
||||||
|
- export LD_PRELOAD="/usr/lib/libtsocks.so $LD_PRELOAD"
|
||||||
|
+ echo $LD_PRELOAD | grep -q "$PREFIX/lib/libtsocks\.so" || \
|
||||||
|
+ export LD_PRELOAD="$PREFIX/lib/libtsocks.so $LD_PRELOAD"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
off)
|
||||||
|
- export LD_PRELOAD=`echo -n $LD_PRELOAD | sed 's/\/usr\/lib\/libtsocks.so \?//'`
|
||||||
|
+ export LD_PRELOAD=`echo -n $LD_PRELOAD | sed "s:$PREFIX/lib/libtsocks.so \?::"`
|
||||||
|
if [ -z "$LD_PRELOAD" ]
|
||||||
|
then
|
||||||
|
unset LD_PRELOAD
|
||||||
|
@@ -68,15 +68,15 @@ case "$1" in
|
||||||
|
*)
|
||||||
|
if [ -z "$LD_PRELOAD" ]
|
||||||
|
then
|
||||||
|
- export LD_PRELOAD="/usr/lib/libtsocks.so"
|
||||||
|
+ export LD_PRELOAD="$PREFIX/lib/libtsocks.so"
|
||||||
|
else
|
||||||
|
- echo $LD_PRELOAD | grep -q "/usr/lib/libtsocks\.so" || \
|
||||||
|
- export LD_PRELOAD="/usr/lib/libtsocks.so $LD_PRELOAD"
|
||||||
|
+ echo $LD_PRELOAD | grep -q "$PREFIX/lib/libtsocks\.so" || \
|
||||||
|
+ export LD_PRELOAD="$PREFIX/lib/libtsocks.so $LD_PRELOAD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# = 0 ]
|
||||||
|
then
|
||||||
|
- ${SHELL:-/bin/sh}
|
||||||
|
+ ${SHELL:-$PREFIX/bin/sh}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# -gt 0 ]
|
Loading…
Reference in New Issue