summaryrefslogtreecommitdiffstats
path: root/source/nameelect.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/nameelect.c')
-rw-r--r--source/nameelect.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/source/nameelect.c b/source/nameelect.c
index 4aacee55d41..02fda9f817b 100644
--- a/source/nameelect.c
+++ b/source/nameelect.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) Andrew Tridgell 1994-1996
+ Copyright (C) Andrew Tridgell 1994-1997
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -67,14 +67,10 @@ void check_master_browser(time_t t)
dump_workgroups();
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_EXCLUDING_WINS(d))
{
struct work_record *work;
- /* don't do election stuff on the WINS subnet */
- if (ip_equal(d->bcast_ip,wins_ip))
- continue;
-
for (work = d->workgrouplist; work; work = work->next)
{
if (strequal(work->work_group, lp_workgroup()) && !AM_MASTER(work))
@@ -365,7 +361,27 @@ void become_local_master(struct subnet_record *d, struct work_record *work)
/* XXXX OOPS! add_server_entry will always add one entry - our own. */
announce_request(work, d->bcast_ip);
}
+
+ /* If we have WINS support or are a WINS server we must add
+ the workgroup we just became master browser for to the
+ WINS subnet. This is needed so we have somewhere to save
+ server lists when we do browser synchronization. */
+ if(wins_subnet != 0)
+ {
+ if(find_workgroupstruct(wins_subnet, work->work_group, True) == 0)
+ DEBUG(0, ("become_local_master: \
+Failed to add workgroup %s to WINS subnet.\n",
+ work->work_group));
+ else
+ DEBUG(3, ("become_local_master: Added workgroup %s to WINS subnet.\n",
+ work->work_group));
+
+ /* Reset the announce master timer so that we do an announce as soon as possible
+ now we are a master. */
+ reset_announce_timer();
+ }
break;
+
}
case MST_BROWSER:
@@ -642,17 +658,10 @@ void run_elections(time_t t)
lastime = t;
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_EXCLUDING_WINS(d))
{
struct work_record *work;
- if(ip_equal(d->bcast_ip, wins_ip))
- {
- /* WINS ip */
- DEBUG(10,("run_elections: ignoring WINS subnet\n"));
- continue;
- }
-
for (work = d->workgrouplist; work; work = work->next)
{
if (work->RunningElection)
@@ -777,7 +786,7 @@ BOOL check_elections(void)
struct subnet_record *d;
BOOL run_any_election = False;
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_EXCLUDING_WINS(d))
{
struct work_record *work;
for (work = d->workgrouplist; work; work = work->next)