]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: libsmb: Remove one more ugly sockaddr cast in resolve_name_list() by converting...
authorJeremy Allison <jra@samba.org>
Wed, 26 Aug 2020 19:41:27 +0000 (12:41 -0700)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 27 Aug 2020 08:16:37 +0000 (08:16 +0000)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Thu Aug 27 08:16:37 UTC 2020 on sn-devel-184

source3/libsmb/namequery.c

index 57f2222b904c9b09ede515934db840972a99b0bc..57ef58ec12eee060b5c568bd515f6efb6e5763b2 100644 (file)
@@ -3521,8 +3521,17 @@ NTSTATUS resolve_name_list(TALLOC_CTX *ctx,
 
        /* only return valid addresses for TCP connections */
        for (i=0, num_entries = 0; i<count; i++) {
-               if (!is_zero_addr(&ss_list[i].ss) &&
-                   !is_broadcast_addr((struct sockaddr *)(void *)&ss_list[i].ss)) {
+               struct samba_sockaddr sa = {0};
+               bool ok;
+
+               ok = sockaddr_storage_to_samba_sockaddr(&sa,
+                                                       &ss_list[i].ss);
+               if (!ok) {
+                       status = NT_STATUS_INVALID_ADDRESS;
+                       goto done;
+               }
+               if (!is_zero_addr(&sa.u.ss) &&
+                   !is_broadcast_addr(&sa.u.sa)) {
                        num_entries++;
                }
        }
@@ -3540,8 +3549,17 @@ NTSTATUS resolve_name_list(TALLOC_CTX *ctx,
        }
 
        for (i=0, num_entries = 0; i<count; i++) {
-               if (!is_zero_addr(&ss_list[i].ss) &&
-                   !is_broadcast_addr((struct sockaddr *)(void *)&ss_list[i].ss)) {
+               struct samba_sockaddr sa = {0};
+               bool ok;
+
+               ok = sockaddr_storage_to_samba_sockaddr(&sa,
+                                                       &ss_list[i].ss);
+               if (!ok) {
+                       status = NT_STATUS_INVALID_ADDRESS;
+                       goto done;
+               }
+               if (!is_zero_addr(&sa.u.ss) &&
+                   !is_broadcast_addr(&sa.u.sa)) {
                        (*return_ss_arr)[num_entries++] = ss_list[i].ss;
                }
        }