mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
Expose commandline parser so that we can use it for --quiet,etc.
Fix for bug 9578.
This commit is contained in:
parent
d98dfb3746
commit
34ec954f8e
@ -3,7 +3,8 @@
|
|||||||
- Use a single command-line parser for parsing torrc options on the
|
- Use a single command-line parser for parsing torrc options on the
|
||||||
command line and for finding special command-line options to avoid
|
command line and for finding special command-line options to avoid
|
||||||
inconsistent behavior for torrc option arguments that have the same
|
inconsistent behavior for torrc option arguments that have the same
|
||||||
names as command-line options. Fixes bugs 4647; bugfix on 0.0.9pre5.
|
names as command-line options. Fixes bugs 4647 and 9578; bugfix on
|
||||||
|
0.0.9pre5.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1792,12 +1792,14 @@ options_act(const or_options_t *old_options)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Helper: Read a list of configuration options from the command line. If
|
/** Helper: Read a list of configuration options from the command line. If
|
||||||
* successful, put them in *<b>result</b>, put the commandline-only options in
|
* successful, or if ignore_errors is set, put them in *<b>result</b>, put the
|
||||||
* *<b>cmdline_result</b>, and return 0; otherwise, return -1 and leave
|
* commandline-only options in *<b>cmdline_result</b>, and return 0;
|
||||||
* *<b>result</b> and <b>cmdline_result</b> alone. */
|
* otherwise, return -1 and leave *<b>result</b> and <b>cmdline_result</b>
|
||||||
static int
|
* alone. */
|
||||||
config_get_commandlines(int argc, char **argv, config_line_t **result,
|
int
|
||||||
config_line_t **cmdline_result)
|
config_parse_commandline(int argc, char **argv, int ignore_errors,
|
||||||
|
config_line_t **result,
|
||||||
|
config_line_t **cmdline_result)
|
||||||
{
|
{
|
||||||
config_line_t *param = NULL;
|
config_line_t *param = NULL;
|
||||||
|
|
||||||
@ -1823,7 +1825,8 @@ config_get_commandlines(int argc, char **argv, config_line_t **result,
|
|||||||
!strcmp(argv[i],"--verify-config") ||
|
!strcmp(argv[i],"--verify-config") ||
|
||||||
!strcmp(argv[i],"--ignore-missing-torrc") ||
|
!strcmp(argv[i],"--ignore-missing-torrc") ||
|
||||||
!strcmp(argv[i],"--quiet") ||
|
!strcmp(argv[i],"--quiet") ||
|
||||||
!strcmp(argv[i],"--hush")) {
|
!strcmp(argv[i],"--hush") ||
|
||||||
|
!strcmp(argv[1],"--version")) {
|
||||||
is_cmdline = 1;
|
is_cmdline = 1;
|
||||||
want_arg = 0;
|
want_arg = 0;
|
||||||
} else if (!strcmp(argv[i],"--nt-service") ||
|
} else if (!strcmp(argv[i],"--nt-service") ||
|
||||||
@ -1851,7 +1854,7 @@ config_get_commandlines(int argc, char **argv, config_line_t **result,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (want_arg && i == argc-1) {
|
if (want_arg && i == argc-1) {
|
||||||
if (!strcmp(argv[i],"--hash-password")) {
|
if (!strcmp(argv[i],"--hash-password") || ignore_errors) {
|
||||||
arg = strdup("");
|
arg = strdup("");
|
||||||
} else {
|
} else {
|
||||||
log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
|
log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
|
||||||
@ -3852,8 +3855,8 @@ options_init_from_torrc(int argc, char **argv)
|
|||||||
if (!global_cmdline_options) {
|
if (!global_cmdline_options) {
|
||||||
/* Or we could redo the list every time we pass this place.
|
/* Or we could redo the list every time we pass this place.
|
||||||
* It does not really matter */
|
* It does not really matter */
|
||||||
if (config_get_commandlines(argc, argv, &global_cmdline_options,
|
if (config_parse_commandline(argc, argv, 0, &global_cmdline_options,
|
||||||
&cmdline_only_options) < 0) {
|
&cmdline_only_options) < 0) {
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,6 +96,10 @@ int init_cookie_authentication(const char *fname, const char *header,
|
|||||||
|
|
||||||
or_options_t *options_new(void);
|
or_options_t *options_new(void);
|
||||||
|
|
||||||
|
int config_parse_commandline(int argc, char **argv, int ignore_errors,
|
||||||
|
config_line_t **result,
|
||||||
|
config_line_t **cmdline_result);
|
||||||
|
|
||||||
void config_register_addressmaps(const or_options_t *options);
|
void config_register_addressmaps(const or_options_t *options);
|
||||||
/* XXXX024 move to connection_edge.h */
|
/* XXXX024 move to connection_edge.h */
|
||||||
int addressmap_register_auto(const char *from, const char *to,
|
int addressmap_register_auto(const char *from, const char *to,
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "circuituse.h"
|
#include "circuituse.h"
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "confparse.h"
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
#include "connection_edge.h"
|
#include "connection_edge.h"
|
||||||
#include "connection_or.h"
|
#include "connection_or.h"
|
||||||
@ -2320,7 +2321,7 @@ int
|
|||||||
tor_init(int argc, char *argv[])
|
tor_init(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
int i, quiet = 0;
|
int quiet = 0;
|
||||||
time_of_process_start = time(NULL);
|
time_of_process_start = time(NULL);
|
||||||
init_connection_lists();
|
init_connection_lists();
|
||||||
/* Have the log set up with our application name. */
|
/* Have the log set up with our application name. */
|
||||||
@ -2333,17 +2334,25 @@ tor_init(int argc, char *argv[])
|
|||||||
addressmap_init(); /* Init the client dns cache. Do it always, since it's
|
addressmap_init(); /* Init the client dns cache. Do it always, since it's
|
||||||
* cheap. */
|
* cheap. */
|
||||||
|
|
||||||
|
{
|
||||||
/* We search for the "quiet" option first, since it decides whether we
|
/* We search for the "quiet" option first, since it decides whether we
|
||||||
* will log anything at all to the command line. */
|
* will log anything at all to the command line. */
|
||||||
for (i=1;i<argc;++i) {
|
config_line_t *opts = NULL, *cmdline_opts = NULL;
|
||||||
if (!strcmp(argv[i], "--hush"))
|
const config_line_t *cl;
|
||||||
quiet = 1;
|
(void) config_parse_commandline(argc, argv, 1, &opts, &cmdline_opts);
|
||||||
if (!strcmp(argv[i], "--quiet"))
|
for (cl = cmdline_opts; cl; cl = cl->next) {
|
||||||
quiet = 2;
|
if (!strcmp(cl->key, "--hush"))
|
||||||
/* --version implies --quiet */
|
quiet = 1;
|
||||||
if (!strcmp(argv[i], "--version"))
|
if (!strcmp(cl->key, "--quiet"))
|
||||||
quiet = 2;
|
quiet = 2;
|
||||||
|
/* --version implies --quiet */
|
||||||
|
if (!strcmp(cl->key, "--version"))
|
||||||
|
quiet = 2;
|
||||||
|
}
|
||||||
|
config_free_lines(opts);
|
||||||
|
config_free_lines(cmdline_opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* give it somewhere to log to initially */
|
/* give it somewhere to log to initially */
|
||||||
switch (quiet) {
|
switch (quiet) {
|
||||||
case 2:
|
case 2:
|
||||||
|
Loading…
Reference in New Issue
Block a user