s3: Filter out duplicates in name_query()
authorVolker Lendecke <vl@samba.org>
Tue, 3 May 2011 19:28:37 +0000 (21:28 +0200)
committerVolker Lendecke <vlendec@samba.org>
Tue, 3 May 2011 22:03:47 +0000 (00:03 +0200)
Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Wed May  4 00:03:47 CEST 2011 on sn-devel-104

source3/libsmb/namequery.c

index 4ce56e684e238b899fa981f1b3c19518117cf328..8d52ff140c0a3a4dc59e10f07727b574472a54ee 100644 (file)
@@ -1330,14 +1330,30 @@ static bool name_query_validator(struct packet_struct *p, void *private_data)
        for (i=0; i<nmb->answers->rdlength/6; i++) {
                uint16_t flags;
                struct in_addr ip;
+               struct sockaddr_storage addr;
+               int j;
 
                flags = RSVAL(&nmb->answers->rdata[i*6], 0);
                got_unique_netbios_name |= ((flags & 0x8000) == 0);
 
                putip((char *)&ip,&nmb->answers->rdata[2+i*6]);
-               in_addr_to_sockaddr_storage(
-                       &state->addrs[state->num_addrs], ip);
+               in_addr_to_sockaddr_storage(&addr, ip);
+
+               for (j=0; j<state->num_addrs; j++) {
+                       if (sockaddr_equal(
+                                   (struct sockaddr *)&addr,
+                                   (struct sockaddr *)&state->addrs[j])) {
+                               break;
+                       }
+               }
+               if (j < state->num_addrs) {
+                       /* Already got it */
+                       continue;
+               }
+
                DEBUGADD(2,("%s ",inet_ntoa(ip)));
+
+               state->addrs[state->num_addrs] = addr;
                state->num_addrs += 1;
        }
        DEBUGADD(2,(")\n"));