[tor-commits] [tor/master] Log an error reply from tor-fw-helper correctly.

nickm at torproject.org nickm at torproject.org
Mon May 12 17:35:29 UTC 2014


commit b5e142cb1ba2dcdcf0c7586cdb3bd1efa2bd78b7
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue May 6 21:34:40 2014 -0400

    Log an error reply from tor-fw-helper correctly.
    
    Fix for bug 9781; bugfix on cd05f35d2cdf50 in 0.2.4.2-alpha.
---
 changes/bug9781   |    5 +++++
 src/common/util.c |   21 +++++++++++++++++----
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/changes/bug9781 b/changes/bug9781
new file mode 100644
index 0000000..0a3c557
--- /dev/null
+++ b/changes/bug9781
@@ -0,0 +1,5 @@
+  o Minor bugfixes (tor-fw-helper):
+
+    - Give a correct log message when tor-fw-helper fails to launch.
+      (Previously, we would say something like "tor-fw-helper sent us a
+      string we could not parse".) Fixes bug 9781; bugfix on 0.2.4.2-alpha.
diff --git a/src/common/util.c b/src/common/util.c
index d82677d..a27fe4b 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -4789,7 +4789,7 @@ get_string_from_pipe(FILE *stream, char *buf_out, size_t count)
 /** Parse a <b>line</b> from tor-fw-helper and issue an appropriate
  *  log message to our user. */
 static void
-handle_fw_helper_line(const char *line)
+handle_fw_helper_line(const char *executable, const char *line)
 {
   smartlist_t *tokens = smartlist_new();
   char *message = NULL;
@@ -4800,6 +4800,19 @@ handle_fw_helper_line(const char *line)
   int port = 0;
   int success = 0;
 
+  if (strcmpstart(line, SPAWN_ERROR_MESSAGE) == 0) {
+    /* We need to check for SPAWN_ERROR_MESSAGE again here, since it's
+     * possible that it got sent after we tried to read it in log_from_pipe.
+     *
+     * XXX Ideally, we should be using one of stdout/stderr for the real
+     * output, and one for the output of the startup code.  We used to do that
+     * before cd05f35d2c.
+     */
+    int child_status;
+    log_portfw_spawn_error_message(line, executable, &child_status);
+    goto done;
+  }
+
   smartlist_split_string(tokens, line, NULL,
                          SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
 
@@ -4879,7 +4892,7 @@ handle_fw_helper_line(const char *line)
 /** Read what tor-fw-helper has to say in its stdout and handle it
  *  appropriately */
 static int
-handle_fw_helper_output(process_handle_t *process_handle)
+handle_fw_helper_output(const char *executable, process_handle_t *process_handle)
 {
   smartlist_t *fw_helper_output = NULL;
   enum stream_status stream_status = 0;
@@ -4894,7 +4907,7 @@ handle_fw_helper_output(process_handle_t *process_handle)
 
   /* Handle the lines we got: */
   SMARTLIST_FOREACH_BEGIN(fw_helper_output, char *, line) {
-    handle_fw_helper_line(line);
+    handle_fw_helper_line(executable, line);
     tor_free(line);
   } SMARTLIST_FOREACH_END(line);
 
@@ -5009,7 +5022,7 @@ tor_check_port_forwarding(const char *filename,
     stderr_status = log_from_pipe(child_handle->stderr_handle,
                                   LOG_INFO, filename, &retval);
 #endif
-    if (handle_fw_helper_output(child_handle) < 0) {
+    if (handle_fw_helper_output(filename, child_handle) < 0) {
       log_warn(LD_GENERAL, "Failed to handle fw helper output.");
       stdout_status = -1;
       retval = -1;





More information about the tor-commits mailing list