diff options
author | Jeremy Allison <jra@samba.org> | 2007-11-02 10:25:34 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2007-11-02 10:25:34 -0700 |
commit | e075b3692bb2c9507231f0662010fc55c1b506c4 (patch) | |
tree | ece2f7f175588f838be4d403c461f7407fcf1bb4 /source3/lib/interfaces.c | |
parent | 78cdd6e7eca44346377346fa6d84a9b59a8f5624 (diff) | |
download | samba-e075b3692bb2c9507231f0662010fc55c1b506c4.tar.gz samba-e075b3692bb2c9507231f0662010fc55c1b506c4.tar.bz2 samba-e075b3692bb2c9507231f0662010fc55c1b506c4.zip |
Fix Solaris by ensuring we use the IPv4 or IPv6 length
in any getnameinfo calls.
Jeremy
(This used to be commit 4d7badb0c44f287034f58d9a412e662c0fbecdc9)
Diffstat (limited to 'source3/lib/interfaces.c')
-rw-r--r-- | source3/lib/interfaces.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/source3/lib/interfaces.c b/source3/lib/interfaces.c index 38abb9299b..01481c50e9 100644 --- a/source3/lib/interfaces.c +++ b/source3/lib/interfaces.c @@ -696,6 +696,16 @@ int get_interfaces(struct iface_struct *ifaces, int max_interfaces) #ifdef AUTOCONF_TEST /* this is the autoconf driver to test get_interfaces() */ +static socklen_t calc_sa_size(struct sockaddr *psa) +{ + socklen_t sl = sizeof(struct sockaddr_in); +#if defined(HAVE_IPV6) + if (psa->sa_family == AF_INET6) { + salen = sizeof(struct sockaddr_in6); + } +#endif +} + int main() { struct iface_struct ifaces[MAX_INTERFACES]; @@ -710,22 +720,23 @@ int get_interfaces(struct iface_struct *ifaces, int max_interfaces) for (i=0;i<total;i++) { char addr[INET6_ADDRSTRLEN]; int ret; + socklen_t sl; printf("%-10s ", ifaces[i].name); addr[0] = '\0'; ret = getnameinfo((struct sockaddr *)&ifaces[i].ip, - sizeof(ifaces[i].ip), + calc_sa_size(&ifaces[i].ip), addr, sizeof(addr), NULL, 0, NI_NUMERICHOST); printf("IP=%s ", addr); addr[0] = '\0'; ret = getnameinfo((struct sockaddr *)&ifaces[i].netmask, - sizeof(ifaces[i].netmask), + calc_sa_size(&ifaces[i].netmask), addr, sizeof(addr), NULL, 0, NI_NUMERICHOST); printf("NETMASK=%s ", addr); addr[0] = '\0'; ret = getnameinfo((struct sockaddr *)&ifaces[i].bcast, - sizeof(ifaces[i].bcast), + calc_sa_size(&ifaces[i].bcast), addr, sizeof(addr), NULL, 0, NI_NUMERICHOST); printf("BCAST=%s\n", addr); |