Commit | Line | Data |
---|---|---|
0301524b OS |
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. |