From: Samba Release Account Date: Thu, 15 May 1997 23:47:34 +0000 (+0000) Subject: namedbname.c: Fixed *nasty* bug that caused nmbd to spin and eat memory X-Git-Url: http://git.samba.org/samba.git/?p=kai%2Fsamba.git;a=commitdiff_plain;h=5495a3446d769a2501ee558bda54146bef507e78;ds=sidebyside namedbname.c: Fixed *nasty* bug that caused nmbd to spin and eat memory and CPU whilst trying to become a master browser. Don't ask, you don't want to know :-). nameresp.c: Tidied formating of code. nameservresp.c: Added debug value of IP address that is rejecting our registration. jallison@whistle.com (This used to be commit c0bae276a99211c0c7149a5e4e801706870074fd) --- diff --git a/source3/namedbname.c b/source3/namedbname.c index 5c514c263ff..2e0afc1497b 100644 --- a/source3/namedbname.c +++ b/source3/namedbname.c @@ -421,6 +421,12 @@ struct name_record *add_netbios_entry(struct subnet_record *d, /* add the name to the WINS list if the name comes from a directed query */ search |= wins ? FIND_WINS : FIND_LOCAL; + + /* If it's a local search then we need to set the subnet + we are looking at. */ + if(search & FIND_LOCAL) + found_subnet = d; + /* search for SELF names only */ search |= self ? FIND_SELF : 0; diff --git a/source3/nameresp.c b/source3/nameresp.c index 3128b00ac58..f2b3ba167ae 100644 --- a/source3/nameresp.c +++ b/source3/nameresp.c @@ -210,33 +210,33 @@ void expire_netbios_response_entries(time_t t) for (n = d->responselist; n; n = nextn) { - nextn = n->next; + nextn = n->next; if (n->repeat_time <= t) - { - if (n->repeat_count > 0) - { - /* resend the entry */ - initiate_netbios_packet(&n->response_id, n->fd, n->quest_type, - n->name.name, n->name.name_type, - n->nb_flags, n->bcast, n->recurse, n->send_ip); - - n->repeat_time += n->repeat_interval; /* XXXX ms needed */ - n->repeat_count--; - - } - else - { - DEBUG(4,("timeout response %d for %s %s\n", - n->response_id, namestr(&n->name), - inet_ntoa(n->send_ip))); - - dead_netbios_entry (d,n); /* process the non-response */ - remove_response_record(d,n); /* remove the non-response */ - - continue; - } - } + { + if (n->repeat_count > 0) + { + /* resend the entry */ + initiate_netbios_packet(&n->response_id, n->fd, n->quest_type, + n->name.name, n->name.name_type, + n->nb_flags, n->bcast, n->recurse, n->send_ip); + + n->repeat_time += n->repeat_interval; /* XXXX ms needed */ + n->repeat_count--; + + } + else + { + DEBUG(4,("timeout response %d for %s %s\n", + n->response_id, namestr(&n->name), + inet_ntoa(n->send_ip))); + + dead_netbios_entry(d,n); /* process the non-response */ + remove_response_record(d,n); /* remove the non-response */ + + continue; + } + } } } } diff --git a/source3/nameservresp.c b/source3/nameservresp.c index 565a1565656..27356d95e60 100644 --- a/source3/nameservresp.c +++ b/source3/nameservresp.c @@ -113,7 +113,8 @@ static void response_name_reg(struct nmb_name *ans_name, } else { - DEBUG(2,("name registration for %s rejected!\n", namestr(ans_name))); + DEBUG(2,("name registration for %s rejected by ip %s!\n", + namestr(ans_name), inet_ntoa(p->ip))); /* oh dear. we have problems. possibly unbecome a master browser. */ name_unregister_work(d,name,type);