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
This commit is contained in:
Nick Mathewson 2008-02-24 22:11:00 +00:00
parent e0de72dd87
commit dde81de3dd
2 changed files with 5 additions and 5 deletions

View File

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

View File

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