aboutsummaryrefslogtreecommitdiff
path: root/src/feature/hs/hs_config.c
diff options
context:
space:
mode:
authorAlexander Færøy <ahf@torproject.org>2018-09-15 16:33:31 +0300
committerGeorge Kadianakis <desnacked@riseup.net>2018-09-15 16:52:36 +0300
commit9b511dc5d6a9e44bd8c8c644ad9445cab7cdafe2 (patch)
tree9bfd824f5f790295477178ebe45232213ce042d2 /src/feature/hs/hs_config.c
parent8f085841ef40f00bbc2bb146a2d555aba527738f (diff)
downloadtor-9b511dc5d6a9e44bd8c8c644ad9445cab7cdafe2.tar.gz
tor-9b511dc5d6a9e44bd8c8c644ad9445cab7cdafe2.zip
Change HiddenServiceExportCircuitID to take a string parameter: the protocol.
This patch changes HiddenServiceExportCircuitID so instead of being a boolean it takes a string, which is the protocol. Currently only the 'haproxy' protocol is defined. See: https://bugs.torproject.org/4700
Diffstat (limited to 'src/feature/hs/hs_config.c')
-rw-r--r--src/feature/hs/hs_config.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/feature/hs/hs_config.c b/src/feature/hs/hs_config.c
index 16bfe7c544..2378a4d3b2 100644
--- a/src/feature/hs/hs_config.c
+++ b/src/feature/hs/hs_config.c
@@ -145,6 +145,31 @@ helper_parse_uint64(const char *opt, const char *value, uint64_t min,
return ret;
}
+/** Helper function: Given a configuration option and its value, parse the
+ * value as a hs_circuit_id_protocol_t. On success, ok is set to 1 and ret is
+ * the parse value. On error, ok is set to 0 and the "none"
+ * hs_circuit_id_protocol_t is returned. This function logs on error. */
+static hs_circuit_id_protocol_t
+helper_parse_circuit_id_protocol(const char *key, const char *value, int *ok)
+{
+ tor_assert(value);
+ tor_assert(ok);
+
+ hs_circuit_id_protocol_t ret = HS_CIRCUIT_ID_PROTOCOL_NONE;
+ *ok = 0;
+
+ if (! strcasecmp(value, "haproxy")) {
+ *ok = 1;
+ ret = HS_CIRCUIT_ID_PROTOCOL_HAPROXY;
+ } else {
+ log_warn(LD_CONFIG, "%s must be 'haproxy'.", key);
+ goto err;
+ }
+
+ err:
+ return ret;
+}
+
/* Return the service version by trying to learn it from the key on disk if
* any. If nothing is found, the current service configured version is
* returned. */
@@ -295,8 +320,8 @@ config_service_v3(const config_line_t *line_,
continue;
}
if (!strcasecmp(line->key, "HiddenServiceExportCircuitID")) {
- config->export_circuit_id =
- (unsigned int) helper_parse_uint64(line->key, line->value, 0, 1, &ok);
+ config->circuit_id_protocol =
+ helper_parse_circuit_id_protocol(line->key, line->value, &ok);
if (!ok || export_circuit_id) {
if (export_circuit_id) {
dup_opt_seen = line->key;