tsocks: Add package (#1550)
[termux-packages] / packages / tsocks / 06_fallback.patch
1 #! /bin/sh /usr/share/dpatch/dpatch-run
2 ## 06_fallback.dpatch by Tamas SZERB <toma@rulez.org>
3 ##
4 ## All lines beginning with `## DP:' are a description of the patch.
5 ## DP: Establish direct connection instead of sockified if
6 ## DP: there is no default server specified and the
7 ## DP: fallback = yes.
8
9 --- a/parser.h
10 +++ b/parser.h
11 @@ -33,6 +33,7 @@ struct parsedfile {
12 struct netent *localnets;
13 struct serverent defaultserver;
14 struct serverent *paths;
15 + int fallback;
16 };
17
18 /* Functions provided by parser module */
19 --- a/parser.c
20 +++ b/parser.c
21 @@ -35,6 +35,7 @@ static int handle_local(struct parsedfil
22 static int handle_defuser(struct parsedfile *, int, char *);
23 static int handle_defpass(struct parsedfile *, int, char *);
24 static int make_netent(char *value, struct netent **ent);
25 +static int handle_fallback(struct parsedfile *, int, char *);
26
27 char __attribute__ ((visibility ("hidden")))
28 *find_config(char *line) {
29 @@ -181,6 +182,8 @@ static int handle_line(struct parsedfile
30 handle_defpass(config, lineno, words[2]);
31 } else if (!strcmp(words[0], "local")) {
32 handle_local(config, lineno, words[2]);
33 + } else if (!strcmp(words[0], "fallback")) {
34 + handle_fallback(config, lineno, words[2]);
35 } else {
36 show_msg(MSGERR, "Invalid pair type (%s) specified "
37 "on line %d in configuration file, "
38 @@ -512,6 +515,19 @@ static int handle_local(struct parsedfil
39 return(0);
40 }
41
42 +static int handle_fallback(struct parsedfile *config, int lineno, char *value) {
43 + char *v = strsplit(NULL, &value, " ");
44 + if (config->fallback !=0) {
45 + show_msg(MSGERR, "Fallback may only be specified "
46 + "once in configuration file.\n",
47 + lineno, currentcontext->lineno);
48 + } else {
49 + if(!strcmp(v, "yes")) config->fallback = 1;
50 + if(!strcmp(v, "no")) config->fallback = 0;
51 + }
52 + return(0);
53 +}
54 +
55 /* Construct a netent given a string like */
56 /* "198.126.0.1[:portno[-portno]]/255.255.255.0" */
57 int make_netent(char *value, struct netent **ent) {
58 --- a/tsocks.c
59 +++ b/tsocks.c
60 @@ -294,11 +294,20 @@ int connect(CONNECT_SIGNATURE) {
61 (path->address ? path->address : "(Not Provided)"));
62 if (path->address == NULL) {
63 if (path == &(config->defaultserver)) {
64 - show_msg(MSGERR, "Connection needs to be made "
65 - "via default server but "
66 - "the default server has not "
67 - "been specified. Falling back to direct connection.\n");
68 - return(realconnect(__fd, __addr, __len));
69 + if (config->fallback) {
70 + show_msg(MSGERR, "Connection needs to be made "
71 + "via default server but "
72 + "the default server has not "
73 + "been specified. Fallback is 'yes' so "
74 + "Falling back to direct connection.\n");
75 + return(realconnect(__fd, __addr, __len));
76 + } else {
77 + show_msg(MSGERR, "Connection needs to be made "
78 + "via default server but "
79 + "the default server has not "
80 + "been specified. Fallback is 'no' so "
81 + "coudln't establish the connection.\n");
82 + }
83 }
84 else
85 show_msg(MSGERR, "Connection needs to be made "
86 --- a/tsocks.conf.5
87 +++ b/tsocks.conf.5
88 @@ -135,6 +135,15 @@ tsocks gives an error message and aborts
89 This parameter protects the user against accidentally establishing
90 unwanted unsockified (ie. direct) connection.
91
92 +.TP
93 +.I fallback
94 +This directive allows to fall back to direct connection if no default
95 +server present in the configuration and fallback = yes.
96 +If fallback = no or not specified and there is no default server, the
97 +tsocks gives an error message and aborts.
98 +This parameter protects the user against accidentally establishing
99 +unwanted unsockified (ie. direct) connection.
100 +
101 .SH UTILITIES
102 tsocks comes with two utilities that can be useful in creating and verifying
103 the tsocks configuration file.