Kaynağa Gözat

r14419@tombo: nickm | 2008-02-24 16:55:11 -0500
Patch from tup: use sizeof sockaddr_un as the size of a unix sockaddr. Fixes unix controlsocket binding on openbsd.


svn:r13697

Nick Mathewson 17 yıl önce
ebeveyn
işleme
dde81de3dd
2 değiştirilmiş dosya ile 5 ekleme ve 5 silme
  1. 2 0
      ChangeLog
  2. 3 5
      src/or/connection.c

+ 2 - 0
ChangeLog

@@ -102,6 +102,8 @@ Changes in version 0.2.0.20-?? - 2008-02-??
       the TLS shutdown handshake is hardly unexpected.
     - Send NAMESERVER_STATUS messages for a single failed nameserver
       correctly.
+    - Make Unix controlsockets work correctly on OpenBSD.  Patch from
+      tup. Bugfix on 0.2.0.3-alpha.
 
   o Code simplifications and refactoring:
     - Remove the tor_strpartition function: its logic was confused,

+ 3 - 5
src/or/connection.c

@@ -746,8 +746,9 @@ create_unix_sockaddr(const char *listenaddress, char **readable_address)
  */
 static connection_t *
 connection_create_listener(struct sockaddr *listensockaddr, int type,
-  char* address)
+                           char* address)
 {
+  /*XXXX021 this function should take a socklen too. */
   connection_t *conn;
   int s; /* the socket we're going to make */
   uint16_t usePort = 0;
@@ -814,7 +815,6 @@ connection_create_listener(struct sockaddr *listensockaddr, int type,
     }
 #ifdef HAVE_SYS_UN_H
   } else if (listensockaddr->sa_family == AF_UNIX) {
-    size_t len;
     start_reading = 1;
 
     /* For now only control ports can be unix domain sockets
@@ -835,9 +835,7 @@ connection_create_listener(struct sockaddr *listensockaddr, int type,
       goto err;
     }
 
-    len = strlen(((struct sockaddr_un *)listensockaddr)->sun_path) +
-          sizeof(((struct sockaddr_un *)listensockaddr)->sun_family);
-    if (bind(s, listensockaddr, (socklen_t)len) == -1) {
+    if (bind(s, listensockaddr, (socklen_t)sizeof(struct sockaddr_un)) == -1) {
       log_warn(LD_NET,"Bind to %s failed: %s.", address,
                tor_socket_strerror(tor_socket_errno(s)));
       goto err;