summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamba Release Account <samba-bugs@samba.org>1997-05-15 23:47:34 +0000
committerSamba Release Account <samba-bugs@samba.org>1997-05-15 23:47:34 +0000
commitc0bae276a99211c0c7149a5e4e801706870074fd (patch)
treeb96e3cce0fd1784e581f83f5e6e65b03935bb2bb
parent5582e448c94a733a1fee479ed93984314cc42a25 (diff)
downloadsamba-c0bae276a99211c0c7149a5e4e801706870074fd.tar.gz
samba-c0bae276a99211c0c7149a5e4e801706870074fd.tar.xz
samba-c0bae276a99211c0c7149a5e4e801706870074fd.zip
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
-rw-r--r--source/namedbname.c6
-rw-r--r--source/nameresp.c50
-rw-r--r--source/nameservresp.c3
3 files changed, 33 insertions, 26 deletions
diff --git a/source/namedbname.c b/source/namedbname.c
index 5c514c263ff..2e0afc1497b 100644
--- a/source/namedbname.c
+++ b/source/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/source/nameresp.c b/source/nameresp.c
index 3128b00ac58..f2b3ba167ae 100644
--- a/source/nameresp.c
+++ b/source/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/source/nameservresp.c b/source/nameservresp.c
index 565a1565656..27356d95e60 100644
--- a/source/nameservresp.c
+++ b/source/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);