diff options
author | Jeremy Allison <jra@samba.org> | 2007-10-24 14:16:54 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2007-10-24 14:16:54 -0700 |
commit | f88b7a076be74a29a3bf876b4e2705f4a1ecf42b (patch) | |
tree | 2d5167540fcbe1ad245fce697924b18216b2d142 /source3/nsswitch | |
parent | e01cbcb28e63abb0f681a5a168fc2445744eec93 (diff) | |
download | samba-f88b7a076be74a29a3bf876b4e2705f4a1ecf42b.tar.gz samba-f88b7a076be74a29a3bf876b4e2705f4a1ecf42b.tar.bz2 samba-f88b7a076be74a29a3bf876b4e2705f4a1ecf42b.zip |
This is a large patch (sorry). Migrate from struct in_addr
to struct sockaddr_storage in most places that matter (ie.
not the nmbd and NetBIOS lookups). This passes make test
on an IPv4 box, but I'll have to do more work/testing on
IPv6 enabled boxes. This should now give us a framework
for testing and finishing the IPv6 migration. It's at
the state where someone with a working IPv6 setup should
(theorecically) be able to type :
smbclient //ipv6-address/share
and have it work.
Jeremy.
(This used to be commit 98e154c3125d5732c37a72d74b0eb5cd7b6155fd)
Diffstat (limited to 'source3/nsswitch')
-rw-r--r-- | source3/nsswitch/winbind_krb5_locator.c | 4 | ||||
-rw-r--r-- | source3/nsswitch/wins.c | 16 |
2 files changed, 17 insertions, 3 deletions
diff --git a/source3/nsswitch/winbind_krb5_locator.c b/source3/nsswitch/winbind_krb5_locator.c index dc2664b67c..eef57ca2c0 100644 --- a/source3/nsswitch/winbind_krb5_locator.c +++ b/source3/nsswitch/winbind_krb5_locator.c @@ -90,8 +90,10 @@ static const char *family_name(int family) return "AF_UNSPEC"; case AF_INET: return "AF_INET"; +#if defined(HAVE_IPv6) case AF_INET6: return "AF_INET6"; +#endif default: break; } @@ -135,8 +137,10 @@ static int smb_krb5_locator_lookup_sanity_check(enum locate_service_type svc, case AF_UNSPEC: case AF_INET: break; +#if defined(HAVE_IPv6) case AF_INET6: /* not yet */ return KRB5_PLUGIN_NO_HANDLE; +#endif default: return EINVAL; } diff --git a/source3/nsswitch/wins.c b/source3/nsswitch/wins.c index 38bf3259f4..3401918f59 100644 --- a/source3/nsswitch/wins.c +++ b/source3/nsswitch/wins.c @@ -108,7 +108,11 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count) free( address ); return NULL; } - *ret = address[0].ip; + if (address[0].ss.ss_family != AF_INET) { + free(address); + return NULL; + } + *ret = ((struct sockaddr_in *)&address[0].ss)->sin_addr; free( address ); return ret; } @@ -121,11 +125,17 @@ static struct in_addr *lookup_byname_backend(const char *name, int *count) /* uggh, we have to broadcast to each interface in turn */ for (j=iface_count() - 1;j >= 0;j--) { const struct in_addr *bcast = iface_n_bcast_v4(j); + struct sockaddr_storage ss; + struct sockaddr_storage *pss; if (!bcast) { continue; } - ret = name_query(fd,name,0x00,True,True,*bcast,count, &flags, NULL); - if (ret) break; + in_addr_to_sockaddr_storage(&ss, *bcast); + pss = name_query(fd,name,0x00,True,True,&ss,count, &flags, NULL); + if (pss) { + *ret = ((struct sockaddr_in *)pss)->sin_addr; + break; + } } close(fd); |