Browse Source

Disable the SETROUTERPURPOSE controller command: it is now obsolete.

svn:r11891
Roger Dingledine 18 years ago
parent
commit
ad8757fbeb
4 changed files with 25 additions and 38 deletions
  1. 3 1
      ChangeLog
  2. 1 1
      doc/TODO
  3. 4 0
      doc/spec/control-spec.txt
  4. 17 36
      src/or/control.c

+ 3 - 1
ChangeLog

@@ -7,6 +7,8 @@ Changes in version 0.2.0.8-alpha - 2007-10-12
     - Use annotations to record the time we received each descriptor.
     - Use annotations to record the time we received each descriptor.
     - Use annotations to record the source for each descriptor.
     - Use annotations to record the source for each descriptor.
     - Use annotations to record the purpose of each descriptor.
     - Use annotations to record the purpose of each descriptor.
+    - Disable the SETROUTERPURPOSE controller command: it is now
+      obsolete.
     - Bridge authorities now write bridge descriptors to disk, meaning
     - Bridge authorities now write bridge descriptors to disk, meaning
       we can export them to other programs and begin distributing them
       we can export them to other programs and begin distributing them
       to blocked users.
       to blocked users.
@@ -113,7 +115,7 @@ Changes in version 0.2.0.8-alpha - 2007-10-12
       Bugfix in 0.2.0.7-alpha.
       Bugfix in 0.2.0.7-alpha.
     - Fix a minor memory leak whenever we parse guards from our state
     - Fix a minor memory leak whenever we parse guards from our state
       file. Bugfix on 0.2.0.7-alpha.
       file. Bugfix on 0.2.0.7-alpha.
-    - Fix a minor memory leak whenever we wrote out a file. Bugfix on
+    - Fix a minor memory leak whenever we write out a file. Bugfix on
       0.2.0.7-alpha.
       0.2.0.7-alpha.
     - Fix a minor memory leak whenever a controller sends the PROTOCOLINFO
     - Fix a minor memory leak whenever a controller sends the PROTOCOLINFO
       command. Bugfix on 0.2.0.5-alpha.
       command. Bugfix on 0.2.0.5-alpha.

+ 1 - 1
doc/TODO

@@ -172,7 +172,7 @@ N     . Cache for bridge descriptors
           o Set annotations based on purpose
           o Set annotations based on purpose
           o Preserve routers with unrecognized purpose.
           o Preserve routers with unrecognized purpose.
 R       - Stop setting the do-not-cache flag based on purpose.
 R       - Stop setting the do-not-cache flag based on purpose.
-        - Disable and mark as obsolete the setrouterpurpose controller
+        o Disable and mark as obsolete the setrouterpurpose controller
           command.
           command.
     - Bridges operators (rudimentary version)
     - Bridges operators (rudimentary version)
       - Ability to act as dir cache without a dir port.
       - Ability to act as dir cache without a dir port.

+ 4 - 0
doc/spec/control-spec.txt

@@ -590,6 +590,10 @@ $Id$
   This changes the descriptor's purpose. See +POSTDESCRIPTOR below
   This changes the descriptor's purpose. See +POSTDESCRIPTOR below
   for details.
   for details.
 
 
+  NOTE: This command was disabled and made obsolete as of Tor
+  0.2.0.8-alpha. It doesn't exist anymore, and is listed here only for
+  historical interest.
+
 3.13. ATTACHSTREAM
 3.13. ATTACHSTREAM
 
 
   Sent from the client to the server.  The syntax is:
   Sent from the client to the server.  The syntax is:

+ 17 - 36
src/or/control.c

@@ -116,9 +116,8 @@ static int handle_control_getinfo(control_connection_t *conn, uint32_t len,
 static int handle_control_extendcircuit(control_connection_t *conn,
 static int handle_control_extendcircuit(control_connection_t *conn,
                                         uint32_t len,
                                         uint32_t len,
                                         const char *body);
                                         const char *body);
-static int handle_control_setpurpose(control_connection_t *conn,
-                                     int for_circuits,
-                                     uint32_t len, const char *body);
+static int handle_control_setcircuitpurpose(control_connection_t *conn,
+                                            uint32_t len, const char *body);
 static int handle_control_attachstream(control_connection_t *conn,
 static int handle_control_attachstream(control_connection_t *conn,
                                        uint32_t len,
                                        uint32_t len,
                                         const char *body);
                                         const char *body);
@@ -262,7 +261,7 @@ control_event_is_interesting(int event)
 }
 }
 
 
 /** Append a NUL-terminated string <b>s</b> to the end of
 /** Append a NUL-terminated string <b>s</b> to the end of
- * <b>conn</b>-\>outbuf
+ * <b>conn</b>-\>outbuf.
  */
  */
 static INLINE void
 static INLINE void
 connection_write_str_to_buf(const char *s, control_connection_t *conn)
 connection_write_str_to_buf(const char *s, control_connection_t *conn)
@@ -448,7 +447,7 @@ connection_printf_to_buf(control_connection_t *conn, const char *format, ...)
   connection_write_to_buf(buf, len, TO_CONN(conn));
   connection_write_to_buf(buf, len, TO_CONN(conn));
 }
 }
 
 
-/** Send a "DONE" message down the control connection <b>conn</b> */
+/** Send a "DONE" message down the control connection <b>conn</b>. */
 static void
 static void
 send_control_done(control_connection_t *conn)
 send_control_done(control_connection_t *conn)
 {
 {
@@ -2039,53 +2038,36 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len,
   return 0;
   return 0;
 }
 }
 
 
-/** Called when we get a SETCIRCUITPURPOSE (if <b>for_circuits</b>
- * is 1) or SETROUTERPURPOSE message. If we can find
- * the circuit/router and it's a valid purpose, change it. */
+/** Called when we get a SETCIRCUITPURPOSE message. If we can find the
+ * circuit and it's a valid purpose, change it. */
 static int
 static int
-handle_control_setpurpose(control_connection_t *conn, int for_circuits,
-                          uint32_t len, const char *body)
+handle_control_setcircuitpurpose(control_connection_t *conn,
+                                 uint32_t len, const char *body)
 {
 {
-  /* XXXX020 this should maybe be two functions; almost no code is acutally
-     shared. */
   origin_circuit_t *circ = NULL;
   origin_circuit_t *circ = NULL;
-  routerinfo_t *ri = NULL;
   uint8_t new_purpose;
   uint8_t new_purpose;
   smartlist_t *args;
   smartlist_t *args;
-  const char *command =
-    for_circuits ? "SETCIRCUITPURPOSE" : "SETROUTERPURPOSE";
   (void) len; /* body is nul-terminated, so it's safe to ignore the length. */
   (void) len; /* body is nul-terminated, so it's safe to ignore the length. */
 
 
-  args = getargs_helper(command, conn, body, 2, -1);
+  args = getargs_helper("SETCIRCUITPURPOSE", conn, body, 2, -1);
   if (!args)
   if (!args)
     goto done;
     goto done;
 
 
-  if (for_circuits) {
-    if (!(circ = get_circ(smartlist_get(args,0)))) {
-      connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n",
-                               (char*)smartlist_get(args, 0));
-      goto done;
-    }
-  } else {
-    if (!(ri = router_get_by_nickname(smartlist_get(args,0), 0))) {
-      connection_printf_to_buf(conn, "552 Unknown router \"%s\"\r\n",
-                               (char*)smartlist_get(args, 0));
-      goto done;
-    }
+  if (!(circ = get_circ(smartlist_get(args,0)))) {
+    connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n",
+                             (char*)smartlist_get(args, 0));
+    goto done;
   }
   }
 
 
   {
   {
     char *purp = smartlist_get(args,1);
     char *purp = smartlist_get(args,1);
-    if (get_purpose(&purp, for_circuits, &new_purpose) < 0) {
+    if (get_purpose(&purp, 1, &new_purpose) < 0) {
       connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp);
       connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp);
       goto done;
       goto done;
     }
     }
   }
   }
 
 
-  if (for_circuits)
-    circ->_base.purpose = new_purpose;
-  else
-    ri->purpose = new_purpose;
+  circ->_base.purpose = new_purpose;
   connection_write_str_to_buf("250 OK\r\n", conn);
   connection_write_str_to_buf("250 OK\r\n", conn);
 
 
 done:
 done:
@@ -2695,11 +2677,10 @@ connection_control_process_inbuf(control_connection_t *conn)
     if (handle_control_extendcircuit(conn, data_len, args))
     if (handle_control_extendcircuit(conn, data_len, args))
       return -1;
       return -1;
   } else if (!strcasecmp(conn->incoming_cmd, "SETCIRCUITPURPOSE")) {
   } else if (!strcasecmp(conn->incoming_cmd, "SETCIRCUITPURPOSE")) {
-    if (handle_control_setpurpose(conn, 1, data_len, args))
+    if (handle_control_setcircuitpurpose(conn, data_len, args))
       return -1;
       return -1;
   } else if (!strcasecmp(conn->incoming_cmd, "SETROUTERPURPOSE")) {
   } else if (!strcasecmp(conn->incoming_cmd, "SETROUTERPURPOSE")) {
-    if (handle_control_setpurpose(conn, 0, data_len, args))
-      return -1;
+    connection_write_str_to_buf("511 SETROUTERPURPOSE is obsolete.\r\n", conn);
   } else if (!strcasecmp(conn->incoming_cmd, "ATTACHSTREAM")) {
   } else if (!strcasecmp(conn->incoming_cmd, "ATTACHSTREAM")) {
     if (handle_control_attachstream(conn, data_len, args))
     if (handle_control_attachstream(conn, data_len, args))
       return -1;
       return -1;