diff options
author | Nick Mathewson <nickm@torproject.org> | 2019-01-09 09:49:25 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2019-01-09 09:49:25 -0500 |
commit | 578a93bbbc9ecb6fa67aead760bfeb40e7977d39 (patch) | |
tree | 1ccb007a99d4835bd6f94be62dc8c5af2075fb20 /src/feature/control/control.c | |
parent | 0ed966fde111a892e3d0010cea3fd165b0c7972f (diff) | |
parent | 4bc3983f64ab2a60a79127f47573836373ddf587 (diff) | |
download | tor-578a93bbbc9ecb6fa67aead760bfeb40e7977d39.tar.gz tor-578a93bbbc9ecb6fa67aead760bfeb40e7977d39.zip |
Merge branch 'ticket28843'
Diffstat (limited to 'src/feature/control/control.c')
-rw-r--r-- | src/feature/control/control.c | 23 |
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; |