commit b1832a4a236c61da0c70170d7b4a8f11cc4494a3 Author: Zack Weinberg zackw@panix.com Date: Sun Jul 24 14:37:22 2011 -0700
dummy option parsing needs to take two addresses when not in socks mode --- src/protocols/dummy.c | 27 +++++++++++++++++++-------- src/test/unittest_dummy.c | 19 +++++++++++-------- 2 files changed, 30 insertions(+), 16 deletions(-)
diff --git a/src/protocols/dummy.c b/src/protocols/dummy.c index ae45d9c..8646889 100644 --- a/src/protocols/dummy.c +++ b/src/protocols/dummy.c @@ -49,7 +49,7 @@ parse_and_set_options(int n_options, const char *const *options, { const char* defport;
- if (n_options != 2) + if (n_options < 1) return -1;
if (!strcmp(options[0], "client")) { @@ -64,10 +64,19 @@ parse_and_set_options(int n_options, const char *const *options, } else return -1;
+ if (n_options != (params->mode == LSN_SOCKS_CLIENT ? 2 : 3)) + return -1; + params->listen_addr = resolve_address_port(options[1], 1, 1, defport); if (!params->listen_addr) return -1;
+ if (params->mode != LSN_SOCKS_CLIENT) { + params->target_addr = resolve_address_port(options[2], 1, 0, NULL); + if (!params->target_addr) + return -1; + } + params->vtable = &dummy_vtable; return 0; } @@ -78,14 +87,16 @@ parse_and_set_options(int n_options, const char *const *options, static void usage(void) { - log_warn("Great... You can't even form a dummy protocol line:\n" - "dummy syntax:\n" - "\tdummy dummy_opts\n" - "\t'dummy_opts':\n" + log_warn("dummy syntax:\n" + "\tdummy <mode> <listen_address> [<target_address>]\n" "\t\tmode ~ server|client|socks\n" - "\t\tlisten address ~ host:port\n" - "Example:\n" - "\tobfsproxy dummy socks 127.0.0.1:5000"); + "\t\tlisten_address, target_address ~ host:port\n" + "\ttarget_address is required for server and client mode,\n" + "\tand forbidden for socks mode.\n" + "Examples:\n" + "\tobfsproxy dummy socks 127.0.0.1:5000\n" + "\tobfsproxy dummy client 127.0.0.1:5000 192.168.1.99:11253\n" + "\tobfsproxy dummy server 192.168.1.99:11253 127.0.0.1:9005"); }
static void diff --git a/src/test/unittest_dummy.c b/src/test/unittest_dummy.c index 1739e1f..4a2316d 100644 --- a/src/test/unittest_dummy.c +++ b/src/test/unittest_dummy.c @@ -21,17 +21,20 @@ test_dummy_option_parsing(void *unused) /* wrong number of options */ { 0, 0, 1, {"dummy"} }, { 0, 0, 2, {"dummy", "client"} }, - { 0, 0, 4, {"dummy", "client", "127.0.0.1:5552", "oops"} }, - { 0, 0, 4, {"dummy", "--frobozz", "client", "127.0.0.1:5552"} }, + { 0, 0, 3, {"dummy", "client", "127.0.0.1:5552"} }, + { 0, 0, 3, {"dummy", "server", "127.0.0.1:5552"} }, + { 0, 0, 4, {"dummy", "socks", "127.0.0.1:5552", "192.168.1.99:11253"} }, /* unrecognized mode */ { 0, 0, 3, {"dummy", "floodcontrol", "127.0.0.1:5552" } }, + { 0, 0, 4, {"dummy", "--frobozz", "client", "127.0.0.1:5552"} }, + { 0, 0, 4, {"dummy", "client", "--frobozz", "127.0.0.1:5552"} }, /* bad address */ - { 0, 0, 3, {"dummy", "client", "@:5552"} }, - { 0, 0, 3, {"dummy", "client", "127.0.0.1:notanumber"} }, + { 0, 0, 3, {"dummy", "socks", "@:5552"} }, + { 0, 0, 3, {"dummy", "socks", "127.0.0.1:notanumber"} }, /* should succeed */ - { 0, 1, 3, {"dummy", "client", "127.0.0.1:5552" } }, - { 0, 1, 3, {"dummy", "client", "127.0.0.1" } }, - { 0, 1, 3, {"dummy", "server", "127.0.0.1:5552" } }, + { 0, 1, 4, {"dummy", "client", "127.0.0.1:5552", "192.168.1.99:11253" } }, + { 0, 1, 4, {"dummy", "client", "127.0.0.1", "192.168.1.99:11253" } }, + { 0, 1, 4, {"dummy", "server", "127.0.0.1:5552", "192.168.1.99:11253" } }, { 0, 1, 3, {"dummy", "socks", "127.0.0.1:5552" } },
{ 0, 0, 0, {0} } @@ -99,7 +102,7 @@ static const char *const options_client[] = {"dummy", "socks", "127.0.0.1:1800"};
static const char *const options_server[] = - {"dummy", "server", "127.0.0.1:1800"}; + {"dummy", "server", "127.0.0.1:1800", "127.0.0.1:1801"};
static void * setup_dummy_state(const struct testcase_t *unused)