]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
New controller command "getinfo config-text"
authorRoger Dingledine <arma@torproject.org>
Mon, 14 Dec 2009 00:21:06 +0000 (19:21 -0500)
committerRoger Dingledine <arma@torproject.org>
Mon, 14 Dec 2009 00:21:06 +0000 (19:21 -0500)
It returns the contents that Tor would write if you send it a SAVECONF
command, so the controller can write the file to disk itself.

ChangeLog
doc/spec/control-spec.txt
src/or/config.c
src/or/control.c
src/or/networkstatus.c
src/or/or.h

index 77d6f16ec4da3e86e2118f2910b8a3c838787e3e..04b069882c047726f23f044106a1afa176ce74a7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,9 @@ Changes in version 0.2.2.7-alpha - 2009-??-??
       timeout schedule for how many seconds until we detach a stream from
       a circuit and try a new circuit. If your network is particularly
       slow, you might want to set this to a number like 60.
+    - New controller command "getinfo config-text". It returns the
+      contents that Tor would write if you send it a SAVECONF command,
+      so the controller can write the file to disk itself.
 
   o Minor bugfixes:
     - Fix compilation on OSX 10.3, which has a stub mlockall() but
index eb01641109aba17c3903186e9a9155e3575911cc..33d4658476c33c7a1bb8f21b1a754ff3617b3310 100644 (file)
   returns "250 OK" if successful, or "551 Unable to write configuration
   to disk" if it can't write the file or some other error occurs.
 
+  See also the "getinfo config-text" command, if the controller wants
+  to write the torrc file itself.
+
 3.7. SIGNAL
 
   Sent from the client to the server. The syntax is:
 
     "config-file" -- The location of Tor's configuration file ("torrc").
 
+    "config-text" -- The contents that Tor would write if you send it
+      a SAVECONF command, so the controller can write the file to
+      disk itself. [First implemented in 0.2.2.7-alpha.]
+
     ["exit-policy/prepend" -- The default exit policy lines that Tor will
       *prepend* to the ExitPolicy config option.
      -- Never implemented. Useful?]
index deeda163b6a6f770db12932574dbde0ccb22a6a7..bf897dfae850fedf9fe901d700c2d2363dbbc344 100644 (file)
@@ -2843,7 +2843,7 @@ config_dump(config_format_t *fmt, void *options, int minimal,
  * the configuration in <b>options</b>.  If <b>minimal</b> is true, do not
  * include options that are the same as Tor's defaults.
  */
-static char *
+char *
 options_dump(or_options_t *options, int minimal)
 {
   return config_dump(&options_format, options, minimal, 0);
index 3674b0f35a2e0ba09f145055c4ebfd90682d88f3..2152e18605ad358f1cb03a731aba74c944429fa4 100644 (file)
@@ -114,8 +114,6 @@ static int handle_control_setevents(control_connection_t *conn, uint32_t len,
 static int handle_control_authenticate(control_connection_t *conn,
                                        uint32_t len,
                                        const char *body);
-static int handle_control_saveconf(control_connection_t *conn, uint32_t len,
-                                   const char *body);
 static int handle_control_signal(control_connection_t *conn, uint32_t len,
                                  const char *body);
 static int handle_control_mapaddress(control_connection_t *conn, uint32_t len,
@@ -1301,6 +1299,8 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
     *answer = tor_strdup(get_version());
   } else if (!strcmp(question, "config-file")) {
     *answer = tor_strdup(get_torrc_fname());
+  } else if (!strcmp(question, "config-text")) {
+    *answer = options_dump(get_options(), 1);
   } else if (!strcmp(question, "info/names")) {
     *answer = list_getinfo_options();
   } else if (!strcmp(question, "events/names")) {
@@ -1802,6 +1802,8 @@ typedef struct getinfo_item_t {
 static const getinfo_item_t getinfo_items[] = {
   ITEM("version", misc, "The current version of Tor."),
   ITEM("config-file", misc, "Current location of the \"torrc\" file."),
+  ITEM("config-text", misc,
+       "Return the string that would be written by a saveconf command."),
   ITEM("accounting/bytes", accounting,
        "Number of bytes read/written so far in the accounting interval."),
   ITEM("accounting/bytes-left", accounting,
index f3925f1b89ae1c1827652baf728ac493b242824a..1b5aff282f512f0cff40b3c4f1f8e1f884ee28a5 100644 (file)
@@ -2084,7 +2084,7 @@ networkstatus_get_flavor_name(consensus_flavor_t flav)
 }
 
 /** Return the consensus_flavor_t value for the flavor called <b>flavname</b>,
- * or -1 if the flavor is not recongized. */
+ * or -1 if the flavor is not recognized. */
 int
 networkstatus_parse_flavor_name(const char *flavname)
 {
index 2e575f5ef93238af1857915caec3ac92281b5da9..f4b00683faa660199208c644a2c6795a70af6372 100644 (file)
@@ -3219,6 +3219,7 @@ int resolve_my_address(int warn_severity, or_options_t *options,
                        uint32_t *addr, char **hostname_out);
 int is_local_addr(const tor_addr_t *addr) ATTR_PURE;
 void options_init(or_options_t *options);
+char *options_dump(or_options_t *options, int minimal);
 int options_init_from_torrc(int argc, char **argv);
 setopt_err_t options_init_from_string(const char *cf,
                             int command, const char *command_arg, char **msg);