diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-09-04 11:04:21 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-09-04 11:04:21 -0400 |
commit | 3507fead10ef4f990c0373f4405bd235c0f0b35c (patch) | |
tree | 2eda3631bd503be2731f320f8ca46d60d2b86a16 /src/app | |
parent | 94b04d6c64ec998a9117d65a156888fa3af188e5 (diff) | |
parent | 820aba70efcc6f50f23cf676832412852a01141a (diff) | |
download | tor-3507fead10ef4f990c0373f4405bd235c0f0b35c.tar.gz tor-3507fead10ef4f990c0373f4405bd235c0f0b35c.zip |
Merge branch 'tor_api_owning_control'
Diffstat (limited to 'src/app')
-rw-r--r-- | src/app/config/config.c | 15 | ||||
-rw-r--r-- | src/app/config/confparse.c | 15 | ||||
-rw-r--r-- | src/app/config/confparse.h | 2 | ||||
-rw-r--r-- | src/app/config/or_options_st.h | 2 |
4 files changed, 25 insertions, 9 deletions
diff --git a/src/app/config/config.c b/src/app/config/config.c index 339f8e2475..f8492f6cdc 100644 --- a/src/app/config/config.c +++ b/src/app/config/config.c @@ -259,6 +259,9 @@ DUMMY_TYPECHECK_INSTANCE(or_options_t); VAR(#member, LINELIST_S, member ## _lines, NULL), \ VAR("__" #member, LINELIST_S, member ## _lines, NULL) +/** UINT64_MAX as a decimal string */ +#define UINT64_MAX_STRING "18446744073709551615" + /** Array of configuration options. Until we disallow nonstandard * abbreviations, order is significant, since the first matching option will * be chosen first. @@ -646,7 +649,7 @@ static config_var_t option_vars_[] = { VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword, NULL), VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL), - VAR("__OwningControllerFD",INT,OwningControllerFD, "-1"), + VAR("__OwningControllerFD", UINT64, OwningControllerFD, UINT64_MAX_STRING), V(MinUptimeHidServDirectoryV2, INTERVAL, "96 hours"), V(TestingServerDownloadInitialDelay, CSV_INTERVAL, "0"), V(TestingClientDownloadInitialDelay, CSV_INTERVAL, "0"), @@ -1925,12 +1928,8 @@ options_act(const or_options_t *old_options) // LCOV_EXCL_STOP } - if (running_tor && !old_options && options->OwningControllerFD != -1) { -#ifdef _WIN32 - log_warn(LD_CONFIG, "OwningControllerFD is not supported on Windows. " - "If you need it, tell the Tor developers."); - return -1; -#else + if (running_tor && !old_options && + options->OwningControllerFD != UINT64_MAX) { const unsigned ctrl_flags = CC_LOCAL_FD_IS_OWNER | CC_LOCAL_FD_IS_AUTHENTICATED; @@ -1940,7 +1939,6 @@ options_act(const or_options_t *old_options) "given FD."); return -1; } -#endif /* defined(_WIN32) */ } /* Load state */ @@ -8115,6 +8113,7 @@ getinfo_helper_config(control_connection_t *conn, case CONFIG_TYPE_STRING: type = "String"; break; case CONFIG_TYPE_FILENAME: type = "Filename"; break; case CONFIG_TYPE_UINT: type = "Integer"; break; + case CONFIG_TYPE_UINT64: type = "Integer"; break; case CONFIG_TYPE_INT: type = "SignedInteger"; break; case CONFIG_TYPE_PORT: type = "Port"; break; case CONFIG_TYPE_INTERVAL: type = "TimeInterval"; break; diff --git a/src/app/config/confparse.c b/src/app/config/confparse.c index 6fa4fd1ea8..045cbc94fe 100644 --- a/src/app/config/confparse.c +++ b/src/app/config/confparse.c @@ -195,6 +195,19 @@ config_assign_value(const config_format_t *fmt, void *options, *(int *)lvalue = i; break; + case CONFIG_TYPE_UINT64: { + uint64_t u64 = tor_parse_uint64(c->value, 10, + 0, UINT64_MAX, &ok, NULL); + if (!ok) { + tor_asprintf(msg, + "uint64 keyword '%s %s' is malformed or out of bounds.", + c->key, c->value); + return -1; + } + *(uint64_t *)lvalue = u64; + break; + } + case CONFIG_TYPE_CSV_INTERVAL: { /* We used to have entire smartlists here. But now that all of our * download schedules use exponential backoff, only the first part @@ -574,6 +587,7 @@ config_get_assigned_option(const config_format_t *fmt, const void *options, tor_asprintf(&result->value, "%d", *(int*)value); escape_val = 0; /* Can't need escape. */ break; + case CONFIG_TYPE_UINT64: /* Fall through */ case CONFIG_TYPE_MEMUNIT: tor_asprintf(&result->value, "%"PRIu64, (*(uint64_t*)value)); @@ -781,6 +795,7 @@ config_clear(const config_format_t *fmt, void *options, case CONFIG_TYPE_AUTOBOOL: *(int*)lvalue = -1; break; + case CONFIG_TYPE_UINT64: case CONFIG_TYPE_MEMUNIT: *(uint64_t*)lvalue = 0; break; diff --git a/src/app/config/confparse.h b/src/app/config/confparse.h index 570428c904..aebd035c56 100644 --- a/src/app/config/confparse.h +++ b/src/app/config/confparse.h @@ -19,6 +19,7 @@ typedef enum config_type_t { CONFIG_TYPE_FILENAME, /**< A filename: some prefixes get expanded. */ CONFIG_TYPE_UINT, /**< A non-negative integer less than MAX_INT */ CONFIG_TYPE_INT, /**< Any integer. */ + CONFIG_TYPE_UINT64, /**< A value in range 0..UINT64_MAX */ CONFIG_TYPE_PORT, /**< A port from 1...65535, 0 for "not set", or * "auto". */ CONFIG_TYPE_INTERVAL, /**< A number of seconds, with optional units*/ @@ -60,6 +61,7 @@ typedef union { * "UINT", it still uses the C int type -- it just enforces that * the values are in range [0,INT_MAX]. */ + uint64_t *UINT64; int *INT; int *PORT; int *INTERVAL; diff --git a/src/app/config/or_options_st.h b/src/app/config/or_options_st.h index 8ef01f80e7..9876a41614 100644 --- a/src/app/config/or_options_st.h +++ b/src/app/config/or_options_st.h @@ -506,7 +506,7 @@ struct or_options_t { * instance. Tor will terminate if its owning controller does. */ char *OwningControllerProcess; /** FD specifier for a controller that owns this Tor instance. */ - int OwningControllerFD; + uint64_t OwningControllerFD; int ShutdownWaitLength; /**< When we get a SIGINT and we're a server, how * long do we wait before exiting? */ |