mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-14 07:03:44 +01:00
Add kvline support to controller command parser.
This should let us handle all (or nearly all) of the remaining commands.
This commit is contained in:
parent
0841a69357
commit
9471391694
@ -95,7 +95,6 @@ string_array_contains_keyword(const char **array, const char *kwd)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper: parse the arguments to a command according to <b>syntax</b>. On
|
* Helper: parse the arguments to a command according to <b>syntax</b>. On
|
||||||
* success, set *<b>error_out</b> to NULL and return a newly allocated
|
* success, set *<b>error_out</b> to NULL and return a newly allocated
|
||||||
@ -169,6 +168,7 @@ control_cmd_parse_args(const char *command,
|
|||||||
line->key)) {
|
line->key)) {
|
||||||
tor_asprintf(error_out, "Unrecognized keyword argument %s",
|
tor_asprintf(error_out, "Unrecognized keyword argument %s",
|
||||||
escaped(line->key));
|
escaped(line->key));
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,6 +148,7 @@ static const control_cmd_syntax_t one_to_three_syntax = {
|
|||||||
static const parse_test_params_t parse_one_to_three_params =
|
static const parse_test_params_t parse_one_to_three_params =
|
||||||
TESTPARAMS( one_to_three_syntax, one_to_three_tests );
|
TESTPARAMS( one_to_three_syntax, one_to_three_tests );
|
||||||
|
|
||||||
|
// =
|
||||||
static const parser_testcase_t no_args_one_obj_tests[] = {
|
static const parser_testcase_t no_args_one_obj_tests[] = {
|
||||||
ERR("Hi there!\r\n.", "Cannot accept more than 0 argument(s)"),
|
ERR("Hi there!\r\n.", "Cannot accept more than 0 argument(s)"),
|
||||||
ERR("", "Empty body"),
|
ERR("", "Empty body"),
|
||||||
@ -166,6 +167,11 @@ static const parse_test_params_t parse_no_args_one_obj_params =
|
|||||||
|
|
||||||
static const parser_testcase_t no_args_kwargs_tests[] = {
|
static const parser_testcase_t no_args_kwargs_tests[] = {
|
||||||
OK("", "{ args=[] }"),
|
OK("", "{ args=[] }"),
|
||||||
|
OK(" ", "{ args=[] }"),
|
||||||
|
OK("hello there=world", "{ args=[], { hello=\"\", there=\"world\" } }"),
|
||||||
|
OK("hello there=world today",
|
||||||
|
"{ args=[], { hello=\"\", there=\"world\", today=\"\" } }"),
|
||||||
|
ERR("=Foo", "Cannot parse keyword argument(s)"),
|
||||||
};
|
};
|
||||||
static const control_cmd_syntax_t no_args_kwargs_syntax = {
|
static const control_cmd_syntax_t no_args_kwargs_syntax = {
|
||||||
.min_args=0, .max_args=0,
|
.min_args=0, .max_args=0,
|
||||||
@ -175,6 +181,26 @@ static const control_cmd_syntax_t no_args_kwargs_syntax = {
|
|||||||
static const parse_test_params_t parse_no_args_kwargs_params =
|
static const parse_test_params_t parse_no_args_kwargs_params =
|
||||||
TESTPARAMS( no_args_kwargs_syntax, no_args_kwargs_tests );
|
TESTPARAMS( no_args_kwargs_syntax, no_args_kwargs_tests );
|
||||||
|
|
||||||
|
static const char *one_arg_kwargs_allow_keywords[] = {
|
||||||
|
"Hello", "world", NULL
|
||||||
|
};
|
||||||
|
static const parser_testcase_t one_arg_kwargs_tests[] = {
|
||||||
|
ERR("", "Need at least 1 argument(s)"),
|
||||||
|
OK("Hi", "{ args=[ \"Hi\" ] }"),
|
||||||
|
ERR("hello there=world", "Unrecognized keyword argument \"there\""),
|
||||||
|
OK("Hi HELLO=foo", "{ args=[ \"Hi\" ], { HELLO=\"foo\" } }"),
|
||||||
|
OK("Hi world=\"bar baz\" hello ",
|
||||||
|
"{ args=[ \"Hi\" ], { world=\"bar baz\", hello=\"\" } }"),
|
||||||
|
};
|
||||||
|
static const control_cmd_syntax_t one_arg_kwargs_syntax = {
|
||||||
|
.min_args=1, .max_args=1,
|
||||||
|
.accept_keywords=true,
|
||||||
|
.allowed_keywords=one_arg_kwargs_allow_keywords,
|
||||||
|
.kvline_flags=KV_OMIT_VALS|KV_QUOTED,
|
||||||
|
};
|
||||||
|
static const parse_test_params_t parse_one_arg_kwargs_params =
|
||||||
|
TESTPARAMS( one_arg_kwargs_syntax, one_arg_kwargs_tests );
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_add_onion_helper_keyarg_v3(void *arg)
|
test_add_onion_helper_keyarg_v3(void *arg)
|
||||||
{
|
{
|
||||||
@ -1776,6 +1802,7 @@ struct testcase_t controller_tests[] = {
|
|||||||
PARSER_TEST(one_to_three),
|
PARSER_TEST(one_to_three),
|
||||||
PARSER_TEST(no_args_one_obj),
|
PARSER_TEST(no_args_one_obj),
|
||||||
PARSER_TEST(no_args_kwargs),
|
PARSER_TEST(no_args_kwargs),
|
||||||
|
PARSER_TEST(one_arg_kwargs),
|
||||||
{ "add_onion_helper_keyarg_v2", test_add_onion_helper_keyarg_v2, 0,
|
{ "add_onion_helper_keyarg_v2", test_add_onion_helper_keyarg_v2, 0,
|
||||||
NULL, NULL },
|
NULL, NULL },
|
||||||
{ "add_onion_helper_keyarg_v3", test_add_onion_helper_keyarg_v3, 0,
|
{ "add_onion_helper_keyarg_v3", test_add_onion_helper_keyarg_v3, 0,
|
||||||
|
Loading…
Reference in New Issue
Block a user