From dde81de3dd45910eb54ef3e8c12c2963847af85c Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 24 Feb 2008 22:11:00 +0000 Subject: [PATCH] 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 --- ChangeLog | 2 ++ src/or/connection.c | 8 +++----- 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;