[tor-commits] [tor/master] Bug #8405: Report SOCKS username/password in CIRC status events

nickm at torproject.org nickm at torproject.org
Wed Jan 28 17:06:32 UTC 2015


commit cb714d896c4436f80bca9e82fc978a245d802eb3
Author: Arthur Edelstein <arthuredelstein at gmail.com>
Date:   Tue Jul 15 21:27:59 2014 -0700

    Bug #8405: Report SOCKS username/password in CIRC status events
    
    Introduces two new circuit status name-value parameters: SOCKS_USERNAME
    and SOCKS_PASSWORD. Values are enclosing in quotes and unusual characters
    are escaped.
    
    Example:
    
        650 CIRC 5 EXTENDED [...] SOCKS_USERNAME="my_username" SOCKS_PASSWORD="my_password"
---
 src/common/util.c |   14 ++++++++++++++
 src/common/util.h |    1 +
 src/or/control.c  |   14 ++++++++++++++
 3 files changed, 29 insertions(+)

diff --git a/src/common/util.c b/src/common/util.c
index be866a5..442d57a 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -1381,6 +1381,20 @@ esc_for_log(const char *s)
   return result;
 }
 
+/** Similar to esc_for_log. Allocate and return a new string representing
+ * the first n characters in <b>chars</b>, surround by quotes and using
+ * standard C escapes. If a NUL character is encountered in <b>chars</b>,
+ * the resulting string will be terminated there.
+ */
+char *
+esc_for_log_len(const char *chars, size_t n)
+{
+  char *string = tor_strndup(chars, n);
+  char *string_escaped = esc_for_log(string);
+  tor_free(string);
+  return string_escaped;
+}
+
 /** Allocate and return a new string representing the contents of <b>s</b>,
  * surrounded by quotes and using standard C escapes.
  *
diff --git a/src/common/util.h b/src/common/util.h
index 89c1400..175a078 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -239,6 +239,7 @@ int tor_mem_is_zero(const char *mem, size_t len);
 int tor_digest_is_zero(const char *digest);
 int tor_digest256_is_zero(const char *digest);
 char *esc_for_log(const char *string) ATTR_MALLOC;
+char *esc_for_log_len(const char *chars, size_t n) ATTR_MALLOC;
 const char *escaped(const char *string);
 
 char *tor_escape_str_for_pt_args(const char *string,
diff --git a/src/or/control.c b/src/or/control.c
index 00cb431..e963aea 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1882,6 +1882,20 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
     smartlist_add_asprintf(descparts, "TIME_CREATED=%s", tbuf);
   }
 
+  // Show username and/or password if available.
+  if (circ->socks_username_len > 0) {
+    char* socks_username_escaped = esc_for_log_len(circ->socks_username,
+                                     (size_t) circ->socks_username_len);
+    smartlist_add_asprintf(descparts, "SOCKS_USERNAME=%s", socks_username_escaped);
+    tor_free(socks_username_escaped);
+  }
+  if (circ->socks_password_len > 0) {
+    char* socks_password_escaped = esc_for_log_len(circ->socks_password,
+                                     (size_t) circ->socks_password_len);
+    smartlist_add_asprintf(descparts, "SOCKS_PASSWORD=%s", socks_password_escaped);
+    tor_free(socks_password_escaped);
+  }
+
   rv = smartlist_join_strings(descparts, " ", 0, NULL);
 
   SMARTLIST_FOREACH(descparts, char *, cp, tor_free(cp));





More information about the tor-commits mailing list