From 7febcb5ffeb2d92f2a4f8abe2c0dac91f5c8a53e Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 3 May 2011 21:28:37 +0200 Subject: s3: Filter out duplicates in name_query() Autobuild-User: Volker Lendecke Autobuild-Date: Wed May 4 00:03:47 CEST 2011 on sn-devel-104 --- source3/libsmb/namequery.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'source3/libsmb') diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index 4ce56e684e..8d52ff140c 100644 --- a/source3/libsmb/namequery.c +++ b/source3/libsmb/namequery.c @@ -1330,14 +1330,30 @@ static bool name_query_validator(struct packet_struct *p, void *private_data) for (i=0; ianswers->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; jnum_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")); -- cgit