aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-02-24 22:11:00 +0000
committerNick Mathewson <nickm@torproject.org>2008-02-24 22:11:00 +0000
commitdde81de3dd45910eb54ef3e8c12c2963847af85c (patch)
treecd6c39896f0ca524501239c26b47ee07753e06ef
parente0de72dd8720b750c5a9228e6a0b1cf10b34ebec (diff)
downloadtor-dde81de3dd45910eb54ef3e8c12c2963847af85c.tar.gz
tor-dde81de3dd45910eb54ef3e8c12c2963847af85c.zip
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
-rw-r--r--ChangeLog2
-rw-r--r--src/or/connection.c8
2 files changed, 5 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 66376ce338..f2e5ebb0bf 100644
--- a/ChangeLog
+++ b/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,
diff --git a/src/or/connection.c b/src/or/connection.c
index 41eee7d8b4..76b943964c 100644
--- a/src/or/connection.c
+++ b/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;