mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-20 10:12:15 +01:00
Use commandline parser for other options
These were previously allowed only in the initial position: --help, -h , --version, --digests, --list-torrc-options
This commit is contained in:
parent
34ec954f8e
commit
a1096fe180
@ -1826,7 +1826,11 @@ config_parse_commandline(int argc, char **argv, int ignore_errors,
|
||||
!strcmp(argv[i],"--ignore-missing-torrc") ||
|
||||
!strcmp(argv[i],"--quiet") ||
|
||||
!strcmp(argv[i],"--hush") ||
|
||||
!strcmp(argv[1],"--version")) {
|
||||
!strcmp(argv[i],"--version") ||
|
||||
!strcmp(argv[i],"-h") ||
|
||||
!strcmp(argv[i],"--help") ||
|
||||
!strcmp(argv[i],"--list-torrc-options") ||
|
||||
!strcmp(argv[i],"--digests")) {
|
||||
is_cmdline = 1;
|
||||
want_arg = 0;
|
||||
} else if (!strcmp(argv[i],"--nt-service") ||
|
||||
@ -3830,26 +3834,6 @@ options_init_from_torrc(int argc, char **argv)
|
||||
argv = backup_argv;
|
||||
argc = backup_argc;
|
||||
}
|
||||
if (argc > 1 && (!strcmp(argv[1], "-h") || !strcmp(argv[1],"--help"))) {
|
||||
print_usage();
|
||||
exit(0);
|
||||
}
|
||||
if (argc > 1 && !strcmp(argv[1], "--list-torrc-options")) {
|
||||
/* For documenting validating whether we've documented everything. */
|
||||
list_torrc_options();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (argc > 1 && (!strcmp(argv[1],"--version"))) {
|
||||
printf("Tor version %s.\n",get_version());
|
||||
exit(0);
|
||||
}
|
||||
if (argc > 1 && (!strcmp(argv[1],"--digests"))) {
|
||||
printf("Tor version %s.\n",get_version());
|
||||
printf("%s", libor_get_digests());
|
||||
printf("%s", tor_get_digests());
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/* Go through command-line variables */
|
||||
if (!global_cmdline_options) {
|
||||
@ -3861,6 +3845,28 @@ options_init_from_torrc(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (config_line_find(cmdline_only_options, "-h") ||
|
||||
config_line_find(cmdline_only_options, "--help")) {
|
||||
print_usage();
|
||||
exit(0);
|
||||
}
|
||||
if (config_line_find(cmdline_only_options, "--list-torrc-options")) {
|
||||
/* For documenting validating whether we've documented everything. */
|
||||
list_torrc_options();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (config_line_find(cmdline_only_options, "--version")) {
|
||||
printf("Tor version %s.\n",get_version());
|
||||
exit(0);
|
||||
}
|
||||
if (config_line_find(cmdline_only_options, "--digests")) {
|
||||
printf("Tor version %s.\n",get_version());
|
||||
printf("%s", libor_get_digests());
|
||||
printf("%s", tor_get_digests());
|
||||
exit(0);
|
||||
}
|
||||
|
||||
command = CMD_RUN_TOR;
|
||||
for (p_index = cmdline_only_options; p_index; p_index = p_index->next) {
|
||||
if (!strcmp(p_index->key,"--list-fingerprint")) {
|
||||
|
@ -79,6 +79,21 @@ config_line_append(config_line_t **lst,
|
||||
(*lst) = newline;
|
||||
}
|
||||
|
||||
/** Return the line in <b>lines</b> whose key is exactly <b>key</b>, or NULL
|
||||
* if no such key exists. For handling commandline-only options only; other
|
||||
* options should be looked up in the appropriate data structure. */
|
||||
const config_line_t *
|
||||
config_line_find(const config_line_t *lines,
|
||||
const char *key)
|
||||
{
|
||||
const config_line_t *cl;
|
||||
for (cl = lines; cl; cl = cl->next) {
|
||||
if (!strcmp(cl->key, key))
|
||||
return cl;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** Helper: parse the config string and strdup into key/value
|
||||
* strings. Set *result to the list, or NULL if parsing the string
|
||||
* failed. Return 0 on success, -1 on failure. Warn and ignore any
|
||||
|
@ -103,6 +103,8 @@ void *config_new(const config_format_t *fmt);
|
||||
void config_line_append(config_line_t **lst,
|
||||
const char *key, const char *val);
|
||||
config_line_t *config_lines_dup(const config_line_t *inp);
|
||||
const config_line_t *config_line_find(const config_line_t *lines,
|
||||
const char *key);
|
||||
void config_free(const config_format_t *fmt, void *options);
|
||||
int config_lines_eq(config_line_t *a, config_line_t *b);
|
||||
int config_count_key(const config_line_t *a, const char *key);
|
||||
|
@ -2345,8 +2345,9 @@ tor_init(int argc, char *argv[])
|
||||
quiet = 1;
|
||||
if (!strcmp(cl->key, "--quiet"))
|
||||
quiet = 2;
|
||||
/* --version implies --quiet */
|
||||
if (!strcmp(cl->key, "--version"))
|
||||
/* --version and --help imply --quiet */
|
||||
if (!strcmp(cl->key, "--version") ||
|
||||
!strcmp(cl->key, "-h") || !strcmp(cl->key, "--help"))
|
||||
quiet = 2;
|
||||
}
|
||||
config_free_lines(opts);
|
||||
|
Loading…
Reference in New Issue
Block a user