From: Jeremy Allison Date: Tue, 28 Jul 2020 18:28:19 +0000 (-0700) Subject: s3: libsmb: Add utility function sockaddr_storage_to_samba_sockaddr(). X-Git-Tag: talloc-2.3.2~890 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3b13d4d65a92f988891f7c237e39b6c2d2d0c3f5;p=thirdparty%2Fsamba.git s3: libsmb: Add utility function sockaddr_storage_to_samba_sockaddr(). As requested by Andreas and Metze, ensure new code uses struct samba_sockaddr. This is part of changing dns_lookup_list_async() and callers to use struct samba_sockaddr. Currently putting this into namequery.c even though it's used inside dsgetdcname.c as I have future patches that heavily make use of this to convert sockaddr_storage -> samba_sockaddr. I'm not committed to putting it here, it may fit better in lib/util/util_net.[ch]. It just needs to be somewhere other functions inside source/libsmb/*.c can get to it, and currently namequery.h exports the most stuff. Not yet used. Signed-off-by: Jeremy Allison Reviewed-by: Andreas Schneider --- diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index 73e0f172d58..317c5dd0262 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -32,10 +32,37 @@ #include "libads/kerberos_proto.h" #include "lib/gencache.h" #include "librpc/gen_ndr/dns.h" +#include "lib/util/util_net.h" /* nmbd.c sets this to True. */ bool global_in_nmbd = False; +/* + * Utility function that copes only with AF_INET and AF_INET6 + * as that's all we're going to get out of DNS / NetBIOS / WINS + * name resolution functions. + */ + +bool sockaddr_storage_to_samba_sockaddr(struct samba_sockaddr *sa, + const struct sockaddr_storage *ss) +{ + sa->u.ss = *ss; + + switch (ss->ss_family) { + case AF_INET: + sa->sa_socklen = sizeof(struct sockaddr_in); + break; +#ifdef HAVE_IPV6 + case AF_INET6: + sa->sa_socklen = sizeof(struct sockaddr_in6); + break; +#endif + default: + return false; + } + return true; +} + /**************************** * SERVER AFFINITY ROUTINES * ****************************/ diff --git a/source3/libsmb/namequery.h b/source3/libsmb/namequery.h index d6f5d216733..b1b138b1f3e 100644 --- a/source3/libsmb/namequery.h +++ b/source3/libsmb/namequery.h @@ -23,7 +23,8 @@ #include /* The following definitions come from libsmb/namequery.c */ - +bool sockaddr_storage_to_samba_sockaddr(struct samba_sockaddr *sa, + const struct sockaddr_storage *ss); bool saf_store( const char *domain, const char *servername ); bool saf_join_store( const char *domain, const char *servername ); bool saf_delete( const char *domain );