mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
bugfix: if you gave tor an odd number of command-line arguments,
we were silently ignoring the last one. now we complain and fail. svn:r4988
This commit is contained in:
+18
-8
@@ -592,16 +592,18 @@ expand_abbrev(config_format_t *fmt, const char *option, int command_line)
|
||||
return option;
|
||||
}
|
||||
|
||||
/** Helper: Read a list of configuration options from the command line. */
|
||||
static config_line_t *
|
||||
config_get_commandlines(int argc, char **argv)
|
||||
/** Helper: Read a list of configuration options from the command line.
|
||||
* If successful, put them in *<b>result</b> and return 0, and return
|
||||
* -1 and leave *<b>result</b> alone. */
|
||||
static int
|
||||
config_get_commandlines(int argc, char **argv, config_line_t **result)
|
||||
{
|
||||
config_line_t *front = NULL;
|
||||
config_line_t **new = &front;
|
||||
char *s;
|
||||
int i = 1;
|
||||
|
||||
while (i < argc-1) {
|
||||
while (i < argc) {
|
||||
if (!strcmp(argv[i],"-f") ||
|
||||
!strcmp(argv[i],"--hash-password")) {
|
||||
i += 2; /* command-line option with argument. ignore them. */
|
||||
@@ -613,6 +615,12 @@ config_get_commandlines(int argc, char **argv)
|
||||
i += 1;
|
||||
continue;
|
||||
}
|
||||
if (i == argc-1) {
|
||||
log_fn(LOG_WARN,"Command-line option '%s' with no value. Failing.",
|
||||
argv[i]);
|
||||
config_free_lines(front);
|
||||
return -1;
|
||||
}
|
||||
|
||||
*new = tor_malloc_zero(sizeof(config_line_t));
|
||||
s = argv[i];
|
||||
@@ -629,7 +637,8 @@ config_get_commandlines(int argc, char **argv)
|
||||
new = &((*new)->next);
|
||||
i += 2;
|
||||
}
|
||||
return front;
|
||||
*result = front;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Helper: allocate a new configuration option mapping 'key' to 'val',
|
||||
@@ -2225,7 +2234,7 @@ options_init_from_torrc(int argc, char **argv)
|
||||
newoptions->_magic = OR_OPTIONS_MAGIC;
|
||||
options_init(newoptions);
|
||||
|
||||
/* learn config file name, get config lines, assign them */
|
||||
/* learn config file name */
|
||||
fname = NULL;
|
||||
using_default_torrc = 1;
|
||||
newoptions->command = CMD_RUN_TOR;
|
||||
@@ -2248,7 +2257,6 @@ options_init_from_torrc(int argc, char **argv)
|
||||
newoptions->command = CMD_VERIFY_CONFIG;
|
||||
}
|
||||
}
|
||||
|
||||
if (using_default_torrc) {
|
||||
/* didn't find one, try CONFDIR */
|
||||
const char *dflt = get_default_conf_file();
|
||||
@@ -2272,6 +2280,7 @@ options_init_from_torrc(int argc, char **argv)
|
||||
tor_assert(fname);
|
||||
log(LOG_DEBUG, "Opening config file \"%s\"", fname);
|
||||
|
||||
/* get config lines, assign them */
|
||||
if (file_status(fname) != FN_FILE ||
|
||||
!(cf = read_file_to_str(fname,0))) {
|
||||
if (using_default_torrc == 1) {
|
||||
@@ -2295,7 +2304,8 @@ options_init_from_torrc(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* Go through command-line variables too */
|
||||
cl = config_get_commandlines(argc, argv);
|
||||
if (config_get_commandlines(argc, argv, &cl) < 0)
|
||||
goto err;
|
||||
retval = config_assign(&options_format, newoptions, cl, 0);
|
||||
config_free_lines(cl);
|
||||
if (retval < 0)
|
||||
|
||||
Reference in New Issue
Block a user