[tor-commits] [tor/master] Fix issues found by nickm.

nickm at torproject.org nickm at torproject.org
Fri May 11 15:57:21 UTC 2012


commit 6d2898607bd831944c6c15b6e15200a426149811
Author: George Kadianakis <desnacked at riseup.net>
Date:   Thu Apr 12 22:42:37 2012 +0200

    Fix issues found by nickm.
    
    * Document fmt_addr_impl() and friends.
    * Parenthesize macro arguments.
    * Rename get_first_listener_addrport_for_pt() to
      get_first_listener_addrport_string().
    * Handle port_cfg_t with no_listen.
    * Handle failure of router_get_active_listener_port_by_type().
    * Add an XXX to router_get_active_listener_port_by_type().
---
 src/common/address.c |   13 +++++++++----
 src/common/address.h |    9 +++++++--
 src/or/config.c      |   14 ++++++++++----
 src/or/config.h      |    2 +-
 src/or/router.c      |    2 ++
 src/or/transports.c  |    2 +-
 6 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/src/common/address.c b/src/common/address.c
index 62cf16c..7f78d1e 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -986,10 +986,15 @@ tor_dup_addr(const tor_addr_t *addr)
   }
 }
 
-/** Return a string representing the address <b>addr</b>.  This string is
- * statically allocated, and must not be freed.  Each call to
- * <b>fmt_addr</b> invalidates the last result of the function.  This
- * function is not thread-safe. */
+/** Return a string representing the address <b>addr</b>.  This string
+ * is statically allocated, and must not be freed.  Each call to
+ * <b>fmt_addr_impl</b> invalidates the last result of the function.
+ * This function is not thread-safe. If <b>decorate</b> is set, add
+ * brackets to IPv6 addresses.
+ *
+ * It's better to use the wrapper macros of this function:
+ * <b>fmt_addr()</b> and <b>fmt_and_decorate_addr()</b>.
+ */
 const char *
 fmt_addr_impl(const tor_addr_t *addr, int decorate)
 {
diff --git a/src/common/address.h b/src/common/address.h
index bdb14eb..761eed6 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -135,8 +135,13 @@ tor_addr_eq_ipv4h(const tor_addr_t *a, uint32_t u)
 
 int tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr_out);
 char *tor_dup_addr(const tor_addr_t *addr) ATTR_MALLOC;
-#define fmt_addr(a) fmt_addr_impl(a, 0)
-#define fmt_and_decorate_addr(a) fmt_addr_impl(a, 1)
+
+/** Wrapper function of fmt_addr_impl(). It does not decorate IPv6
+ *  addresses. */
+#define fmt_addr(a) fmt_addr_impl((a), 0)
+/** Wrapper function of fmt_addr_impl(). It decorates IPv6
+ *  addresses. */
+#define fmt_and_decorate_addr(a) fmt_addr_impl((a), 1)
 const char *fmt_addr_impl(const tor_addr_t *addr, int decorate);
 const char * fmt_addr32(uint32_t addr);
 int get_interface_address6(int severity, sa_family_t family, tor_addr_t *addr);
diff --git a/src/or/config.c b/src/or/config.c
index 5ea1f5e..3fc543c 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -6033,9 +6033,10 @@ get_configured_ports(void)
  *  caller to free it after use.
  *
  *  This function is meant to be used by the pluggable transport proxy
- *  spawning code. */
+ *  spawning code, please make sure that it fits your purposes before
+ *  using it. */
 char *
-get_first_listener_addrport_for_pt(int listener_type)
+get_first_listener_addrport_string(int listener_type)
 {
   static const char *ipv4_localhost = "127.0.0.1";
   static const char *ipv6_localhost = "[::1]";
@@ -6047,6 +6048,8 @@ get_first_listener_addrport_for_pt(int listener_type)
     return NULL;
 
   SMARTLIST_FOREACH_BEGIN(configured_ports, const port_cfg_t *, cfg) {
+    if (cfg->no_listen)
+      continue;
 
     if (cfg->type == listener_type &&
         tor_addr_family(&cfg->addr) != AF_UNSPEC) {
@@ -6064,10 +6067,13 @@ get_first_listener_addrport_for_pt(int listener_type)
       /* If a listener is configured with port 'auto', we are forced
          to iterate all listener connections and find out in which
          port it ended up listening: */
-      if (cfg->port == CFG_AUTO_PORT)
+      if (cfg->port == CFG_AUTO_PORT) {
         port = router_get_active_listener_port_by_type(listener_type);
-      else
+        if (!port)
+          return NULL;
+      } else {
         port = cfg->port;
+      }
 
       tor_asprintf(&string, "%s:%u", address, port);
 
diff --git a/src/or/config.h b/src/or/config.h
index fd84d9b..0495186 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -72,7 +72,7 @@ int get_first_advertised_port_by_type_af(int listener_type,
 #define get_primary_dir_port() \
   (get_first_advertised_port_by_type_af(CONN_TYPE_DIR_LISTENER, AF_INET))
 
-char *get_first_listener_addrport_for_pt(int listener_type);
+char *get_first_listener_addrport_string(int listener_type);
 
 int options_need_geoip_info(const or_options_t *options,
                             const char **reason_out);
diff --git a/src/or/router.c b/src/or/router.c
index 67d26e1..3b97d28 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1218,6 +1218,8 @@ consider_publishable_server(int force)
 
 /** Return the port of the first active listener of type
  *  <b>listener_type</b>. */
+/** XXX not a very good interface. it's not reliable when there are
+    multiple listeners. */
 uint16_t
 router_get_active_listener_port_by_type(int listener_type)
 {
diff --git a/src/or/transports.c b/src/or/transports.c
index 1f21493..8976450 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -992,7 +992,7 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
 
   if (mp->is_server) {
     {
-      char *orport_tmp = get_first_listener_addrport_for_pt(CONN_TYPE_OR_LISTENER);
+      char *orport_tmp = get_first_listener_addrport_string(CONN_TYPE_OR_LISTENER);
       smartlist_add_asprintf(envs, "TOR_PT_ORPORT=%s", orport_tmp);
       tor_free(orport_tmp);
     }





More information about the tor-commits mailing list