diff options
author | James Peach <jpeach@samba.org> | 2007-12-09 13:28:00 -0800 |
---|---|---|
committer | James Peach <jpeach@samba.org> | 2007-12-09 13:28:00 -0800 |
commit | daba3f8b54b04fe8623db3bab90c3aba15d4c379 (patch) | |
tree | 4730b9a87d7fa87b6f7b677c2053dd5dc72e8ee8 /source3/lib/system.c | |
parent | 2ecdbea0cb8089e09bf6e2ba4c12da09b15036a4 (diff) | |
download | samba-daba3f8b54b04fe8623db3bab90c3aba15d4c379.tar.gz samba-daba3f8b54b04fe8623db3bab90c3aba15d4c379.tar.xz samba-daba3f8b54b04fe8623db3bab90c3aba15d4c379.zip |
Fix connect(2) callers to use correct sockaddr size.
Some systems (eg Mac OSX 10.5) require the length passed to match
the socket address family. This introduces sys_connect() that does
the right thing, and replaces all uses oc connect(2) with sys_connect().
Note that there are some LGPL callers that still call connect(2)
directly.
(This used to be commit e1bfdc17c49da582cdf907e260301ab1946b2ed3)
Diffstat (limited to 'source3/lib/system.c')
-rw-r--r-- | source3/lib/system.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source3/lib/system.c b/source3/lib/system.c index 86f3a8c4b8b..eb6dcae6fb1 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -2472,3 +2472,21 @@ int sys_getnameinfo(const struct sockaddr *psa, } return getnameinfo(psa, salen, host, hostlen, service, servlen, flags); } + +int sys_connect(int fd, const struct sockaddr * addr) +{ + socklen_t salen = -1; + + if (addr->sa_family == AF_INET) { + salen = sizeof(struct sockaddr_in); + } else if (addr->sa_family == AF_UNIX) { + salen = sizeof(struct sockaddr_un); + } +#if defined(HAVE_IPV6) + else if (addr->sa_family == AF_INET6) { + salen = sizeof(struct sockaddr_in6); + } +#endif + + return connect(fd, addr, salen); +} |