[tor-commits] [tor/master] Add a DROPOWNERSHIP controller command to undo TAKEOWNERSHIP.

nickm at torproject.org nickm at torproject.org
Wed Jan 9 14:49:35 UTC 2019


commit 4bc3983f64ab2a60a79127f47573836373ddf587
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Dec 13 19:35:02 2018 -0500

    Add a DROPOWNERSHIP controller command to undo TAKEOWNERSHIP.
    
    Closes ticket 28843.
---
 changes/ticket28843           |  3 +++
 src/feature/control/control.c | 23 +++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/changes/ticket28843 b/changes/ticket28843
new file mode 100644
index 000000000..00905293c
--- /dev/null
+++ b/changes/ticket28843
@@ -0,0 +1,3 @@
+  o Minor features (controller):
+    - Add a DROPOWNERSHIP command to undo the effects of TAKEOWNERSHIP.
+      Implements ticket 28843.
diff --git a/src/feature/control/control.c b/src/feature/control/control.c
index c2da7fe48..50f43c0f4 100644
--- a/src/feature/control/control.c
+++ b/src/feature/control/control.c
@@ -1741,6 +1741,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
@@ -5548,6 +5568,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;





More information about the tor-commits mailing list