[tor-commits] [tor/master] fixup! Refactor the use of ifdef HAVE_SYS_UN_H

nickm at torproject.org nickm at torproject.org
Wed Jan 28 19:33:30 UTC 2015


commit fb523b543a95e6eeb85ee93dcad24e1aeb79328f
Author: David Goulet <dgoulet at ev0ke.net>
Date:   Wed Jan 28 13:11:21 2015 -0500

    fixup! Refactor the use of ifdef HAVE_SYS_UN_H
    
    Signed-off-by: David Goulet <dgoulet at ev0ke.net>
---
 src/or/rendservice.c |   99 ++++++++++++++++++++++++++++++++++----------------
 1 file changed, 68 insertions(+), 31 deletions(-)

diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 920a8cf..9f58bb1 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -3471,6 +3471,56 @@ rend_service_dump_stats(int severity)
   }
 }
 
+#ifdef HAVE_SYS_UN_H
+
+/** Given <b>ports</b>, a smarlist containing rend_service_port_config_t,
+ * add the given <b>p</b>, a AF_UNIX port to the list. Return 0 on success
+ * else return -ENOSYS if AF_UNIX is not supported (see function in the
+ * #else statement below). */
+static int
+add_unix_port(smartlist_t *ports, rend_service_port_config_t *p)
+{
+  tor_assert(ports);
+  tor_assert(p);
+  tor_assert(p->is_unix_addr);
+
+  smartlist_add(ports, p);
+  return 0;
+}
+
+/** Given <b>conn</b> set it to use the given port <b>p</b> values. Return 0
+ * on success else return -ENOSYS if AF_UNIX is not supported (see function
+ * in the #else statement below). */
+static int
+set_unix_port(edge_connection_t *conn, rend_service_port_config_t *p)
+{
+  tor_assert(conn);
+  tor_assert(p);
+  tor_assert(p->is_unix_addr);
+
+  conn->base_.socket_family = AF_UNIX;
+  tor_addr_make_unspec(&conn->base_.addr);
+  conn->base_.port = 1;
+  conn->base_.address = tor_strdup(p->unix_addr);
+  return 0;
+}
+
+#else /* defined(HAVE_SYS_UN_H) */
+
+static int
+set_unix_port(edge_connection_t *conn, rend_service_port_config_t *p)
+{
+  return -ENOSYS;
+}
+
+static int
+add_unix_port(smartlist_t *ports, rend_service_port_config_t *p)
+{
+  return -ENOSYS;
+}
+
+#endif /* HAVE_SYS_UN_H */
+
 /** Given <b>conn</b>, a rendezvous exit stream, look up the hidden service for
  * 'circ', and look up the port and address based on conn-\>port.
  * Assign the actual conn-\>addr and conn-\>port. Return -2 on failure
@@ -3485,9 +3535,7 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
   char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
   smartlist_t *matching_ports;
   rend_service_port_config_t *chosen_port;
-#ifndef HAVE_SYS_UN_H
-  int unix_addrs_rejected;
-#endif /* !defined(HAVE_SYS_UN_H) */
+  unsigned int warn_once = 0;
 
   tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_S_REND_JOINED);
   tor_assert(circ->rend_data);
@@ -3503,51 +3551,40 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
     return -2;
   }
   matching_ports = smartlist_new();
-#ifndef HAVE_SYS_UN_H
-  unix_addrs_rejected = 0;
-#endif /* !defined(HAVE_SYS_UN_H) */
   SMARTLIST_FOREACH(service->ports, rend_service_port_config_t *, p,
   {
-    if (conn->base_.port == p->virtual_port) {
-#ifdef HAVE_SYS_UN_H
+    if (conn->base_.port != p->virtual_port) {
+      continue;
+    }
+    if (!(p->is_unix_addr)) {
       smartlist_add(matching_ports, p);
-#else
-      if (!(p->is_unix_addr)) {
-        smartlist_add(matching_ports, p);
-      } else {
-        if (unix_addrs_rejected == 0) {
-          /* If we have no support, bitch about it for just the first one */
+    } else {
+      if (add_unix_port(matching_ports, p)) {
+        if (!warn_once) {
+         /* Unix port not supported so warn only once. */
           log_warn(LD_REND,
-                   "Saw AF_UNIX virtual port mapping for port %d on service "
-                   "%s, which is unsupported on this platform.  Ignoring it.",
-                   conn->base_.port, serviceid);
+              "Saw AF_UNIX virtual port mapping for port %d on service "
+              "%s, which is unsupported on this platform. Ignoring it.",
+              conn->base_.port, serviceid);
         }
-        ++unix_addrs_rejected;
+        warn_once++;
       }
-#endif /* defined(HAVE_SYS_UN_H) */
     }
   });
   chosen_port = smartlist_choose(matching_ports);
   smartlist_free(matching_ports);
   if (chosen_port) {
-#ifdef HAVE_SYS_UN_H
     if (!(chosen_port->is_unix_addr)) {
-#else
-    {
-#endif /* defined(HAVE_SYS_UN_H) */
       /* Get a non-AF_UNIX connection ready for connection_exit_connect() */
       tor_addr_copy(&conn->base_.addr, &chosen_port->real_addr);
       conn->base_.port = chosen_port->real_port;
-#ifdef HAVE_SYS_UN_H
     } else {
-      /* Get an AF_UNIX connection ready for connection_exit_connect() */
-      conn->base_.socket_family = AF_UNIX;
-      tor_addr_make_unspec(&conn->base_.addr);
-      conn->base_.port = 1;
-      conn->base_.address = tor_strdup(chosen_port->unix_addr);
-#endif /* defined(HAVE_SYS_UN_H) */
+      if (set_unix_port(conn, chosen_port)) {
+        /* Simply impossible to end up here else we were able to add a Unix
+         * port without AF_UNIX support... ? */
+        tor_assert(0);
+      }
     }
-
     return 0;
   }
 





More information about the tor-commits mailing list