diff options
author | Stefan Metzmacher <metze@samba.org> | 2006-09-12 14:44:44 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:18:27 -0500 |
commit | 894a64521a2a2f4e9e3685dab6695f81937e25bd (patch) | |
tree | aac35b7b373a87786a14665a94ef38fe399255d3 /source4/lib/socket_wrapper | |
parent | ee67387d322cd08ae77ef11716331be7a850c5e9 (diff) | |
download | samba-894a64521a2a2f4e9e3685dab6695f81937e25bd.tar.gz samba-894a64521a2a2f4e9e3685dab6695f81937e25bd.tar.bz2 samba-894a64521a2a2f4e9e3685dab6695f81937e25bd.zip |
r18424: there's no need to allocate a wrapped socket for unix sockets,
also this makes sure the socket file isn't unlinked if using socket
wrapper.
metze
(This used to be commit 7670e9ae6e8e64ddb3c7d99b3d44048519629225)
Diffstat (limited to 'source4/lib/socket_wrapper')
-rw-r--r-- | source4/lib/socket_wrapper/socket_wrapper.c | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/source4/lib/socket_wrapper/socket_wrapper.c b/source4/lib/socket_wrapper/socket_wrapper.c index cedc2ecf9f..230c40a72f 100644 --- a/source4/lib/socket_wrapper/socket_wrapper.c +++ b/source4/lib/socket_wrapper/socket_wrapper.c @@ -361,9 +361,6 @@ static int sockaddr_convert_to_un(struct socket_info *si, const struct sockaddr } else { return convert_in_un_remote(si, (const struct sockaddr_in *)in_addr, out_addr, bcast); } - case AF_UNIX: - memcpy(out_addr, in_addr, sizeof(*out_addr)); - return 0; default: break; } @@ -405,10 +402,6 @@ static int sockaddr_convert_from_un(const struct socket_info *si, return -1; } return convert_un_in(in_addr, (struct sockaddr_in *)out_addr, _out_addrlen); - case AF_UNIX: - memcpy(out_addr, in_addr, out_addrlen); - *_out_addrlen = out_addrlen; - return 0; default: break; } @@ -445,6 +438,16 @@ _PUBLIC_ int swrap_socket(int domain, int type, int protocol) if (!socket_wrapper_dir()) { return real_socket(domain, type, protocol); } + + switch (domain) { + case AF_INET: + break; + case AF_UNIX: + return real_socket(domain, type, protocol); + default: + errno = EAFNOSUPPORT; + return -1; + } fd = real_socket(AF_UNIX, type, 0); @@ -588,7 +591,7 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad return real_connect(s, serv_addr, addrlen); } - if (si->bound == 0 && si->domain != AF_UNIX) { + if (si->bound == 0) { ret = swrap_auto_bind(si); if (ret == -1) return -1; } @@ -600,10 +603,8 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad sizeof(struct sockaddr_un)); /* to give better errors */ - if (serv_addr->sa_family == AF_INET) { - if (ret == -1 && errno == ENOENT) { - errno = EHOSTUNREACH; - } + if (ret == -1 && errno == ENOENT) { + errno = EHOSTUNREACH; } if (ret == 0) { @@ -691,8 +692,6 @@ _PUBLIC_ int swrap_getsockopt(int s, int level, int optname, void *optval, sockl } switch (si->domain) { - case AF_UNIX: - return real_getsockopt(s, level, optname, optval, optlen); default: errno = ENOPROTOOPT; return -1; @@ -712,8 +711,6 @@ _PUBLIC_ int swrap_setsockopt(int s, int level, int optname, const void *o } switch (si->domain) { - case AF_UNIX: - return real_setsockopt(s, level, optname, optval, optlen); case AF_INET: return 0; default: @@ -761,7 +758,7 @@ _PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, con return real_sendto(s, buf, len, flags, to, tolen); } - if (si->bound == 0 && si->domain != AF_UNIX) { + if (si->bound == 0) { ret = swrap_auto_bind(si); if (ret == -1) return -1; } @@ -794,10 +791,8 @@ _PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, con ret = real_sendto(s, buf, len, flags, (struct sockaddr *)&un_addr, sizeof(un_addr)); /* to give better errors */ - if (to->sa_family == AF_INET) { - if (ret == -1 && errno == ENOENT) { - errno = EHOSTUNREACH; - } + if (ret == -1 && errno == ENOENT) { + errno = EHOSTUNREACH; } swrap_dump_packet(si, to, SWRAP_SENDTO, buf, len, ret); |