aboutsummaryrefslogtreecommitdiff
path: root/src/feature/control/control.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-01-09 09:49:25 -0500
committerNick Mathewson <nickm@torproject.org>2019-01-09 09:49:25 -0500
commit578a93bbbc9ecb6fa67aead760bfeb40e7977d39 (patch)
tree1ccb007a99d4835bd6f94be62dc8c5af2075fb20 /src/feature/control/control.c
parent0ed966fde111a892e3d0010cea3fd165b0c7972f (diff)
parent4bc3983f64ab2a60a79127f47573836373ddf587 (diff)
downloadtor-578a93bbbc9ecb6fa67aead760bfeb40e7977d39.tar.gz
tor-578a93bbbc9ecb6fa67aead760bfeb40e7977d39.zip
Merge branch 'ticket28843'
Diffstat (limited to 'src/feature/control/control.c')
-rw-r--r--src/feature/control/control.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/feature/control/control.c b/src/feature/control/control.c
index da62c94981..6f10e0956f 100644
--- a/src/feature/control/control.c
+++ b/src/feature/control/control.c
@@ -1743,6 +1743,26 @@ handle_control_takeownership(control_connection_t *conn, uint32_t len,
return 0;
}
+/** Called when we get a DROPOWNERSHIP command. Mark this connection
+ * as a non-owning connection, so that we will not exit if the connection
+ * closes. */
+static int
+handle_control_dropownership(control_connection_t *conn, uint32_t len,
+ const char *body)
+{
+ (void)len;
+ (void)body;
+
+ conn->is_owning_control_connection = 0;
+
+ log_info(LD_CONTROL, "Control connection %d has dropped ownership of this "
+ "Tor instance.",
+ (int)(conn->base_.s));
+
+ send_control_done(conn);
+ return 0;
+}
+
/** Return true iff <b>addr</b> is unusable as a mapaddress target because of
* containing funny characters. */
static int
@@ -5550,6 +5570,9 @@ connection_control_process_inbuf(control_connection_t *conn)
} else if (!strcasecmp(conn->incoming_cmd, "TAKEOWNERSHIP")) {
if (handle_control_takeownership(conn, cmd_data_len, args))
return -1;
+ } else if (!strcasecmp(conn->incoming_cmd, "DROPOWNERSHIP")) {
+ if (handle_control_dropownership(conn, cmd_data_len, args))
+ return -1;
} else if (!strcasecmp(conn->incoming_cmd, "MAPADDRESS")) {
if (handle_control_mapaddress(conn, cmd_data_len, args))
return -1;