summaryrefslogtreecommitdiff
path: root/source3/namedbsubnet.c
diff options
context:
space:
mode:
authorSamba Release Account <samba-bugs@samba.org>1997-05-08 01:14:17 +0000
committerSamba Release Account <samba-bugs@samba.org>1997-05-08 01:14:17 +0000
commit0f1f0ceb9519368188f695e18e2341ccfd1b2d15 (patch)
tree7a69aa1d7bde1abd7cfe7e93c79ce8776846ed63 /source3/namedbsubnet.c
parent3377ecb35e808ff30f5c8b001df758a9f5bcae17 (diff)
downloadsamba-0f1f0ceb9519368188f695e18e2341ccfd1b2d15.tar.gz
samba-0f1f0ceb9519368188f695e18e2341ccfd1b2d15.tar.bz2
samba-0f1f0ceb9519368188f695e18e2341ccfd1b2d15.zip
'The mother of all checkins' :-). Jeremy Allison (jallison@whistle.com)
Wed May 7 1997: Update for 1.9.17alpha1 release - 'browsefix release' designed to make browsing across subnets work. byteorder.h: Updated copyright to 1997. charcnv.c: Updated copyright to 1997. charset.c Updated copyright to 1997. charset.h Updated copyright to 1997. client.c Updated copyright to 1997. clientutil.c Updated copyright to 1997. dir.c Updated copyright to 1997. fault.c Updated copyright to 1997. includes.h Updated copyright to 1997. interface.c Updated copyright to 1997. ipc.c Updated copyright to 1997. kanji.c Updated copyright to 1997. kanji.h Updated copyright to 1997. loadparm.c Updated copyright to 1997. locking.c Updated copyright to 1997. mangle.c Updated copyright to 1997. message.c Updated copyright to 1997. nameannounce.c Made use of WINS subnet explicit. Added reset_announce_timer() so announcement can be made immediately when we become a master. Expanded code to do sync with dmb. namebrowse.c Removed redundent checks for AM_MASTER in sync code. Made use of WINS subnet explicit. namedbname.c Made use of WINS subnet explicit. namedbresp.c Made use of WINS subnet explicit. namedbserver.c Made use of WINS subnet explicit. namedbsubnet.c Explicitly add workgroup to WINS subnet when we become a dmb. Made use of WINS subnet explicit. namedbwork.c Made use of WINS subnet explicit. Removed redundent check_work_servertype() function. nameelect.c Explicitly add workgroup to WINS subnet when we become a master browser. Made use of WINS subnet explicit. namelogon.c Updated copyright to 1997. namepacket.c Updated copyright to 1997. namequery.c Updated copyright to 1997. nameresp.c Made use of WINS subnet explicit. Made nmbd fail if configured as master browser and one exists already. nameserv.c Made use of WINS subnet explicit. Remove redundent logon server and domain master code. nameserv.h Add emumerate subnet macros. nameservreply.c Made use of WINS subnet explicit. nameservresp.c Updated copyright to 1997. namework.c Made use of WINS subnet explicit. Updated code to add sync browser entries to add subnet parameter. nmbd.c Added sanity check for misconfigured nmbd. nmblib.c Updated copyright to 1997. nmblookup.c Updated copyright to 1997. nmbsync.c Removed redundent AM_ANY_MASTER check. params.c Updated copyright to 1997. password.c Updated copyright to 1997. pipes.c Updated copyright to 1997. predict.c Updated copyright to 1997. printing.c Updated copyright to 1997. proto.h Changed protos for new nmbd code. quotas.c Updated copyright to 1997. replace.c Updated copyright to 1997. reply.c Updated copyright to 1997. server.c Updated copyright to 1997. shmem.c Updated copyright to 1997. smb.h Updated copyright to 1997. smbencrypt.c Updated copyright to 1997. smbpasswd.c Updated copyright to 1997. smbrun.c Updated copyright to 1997. status.c Updated copyright to 1997. system.c Updated copyright to 1997. testparm.c Updated copyright to 1997. testprns.c Updated copyright to 1997. time.c Updated copyright to 1997. trans2.c Updated copyright to 1997. trans2.h Updated copyright to 1997. uid.c Updated copyright to 1997. username.c Updated copyright to 1997. util.c Updated copyright to 1997. version.h Changed to 1.9.17alpha1. (This used to be commit cf23a155a1315f50d488794a2caf88402bf3e3e6)
Diffstat (limited to 'source3/namedbsubnet.c')
-rw-r--r--source3/namedbsubnet.c62
1 files changed, 33 insertions, 29 deletions
diff --git a/source3/namedbsubnet.c b/source3/namedbsubnet.c
index 144729e1e1..25c369ab1c 100644
--- a/source3/namedbsubnet.c
+++ b/source3/namedbsubnet.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
@@ -50,6 +50,10 @@ extern struct interface *local_interfaces;
/* this is our domain/workgroup/server database */
struct subnet_record *subnetlist = NULL;
+/* WINS subnet - keep this separate so enumeration code doesn't
+ run onto it by mistake. */
+struct subnet_record *wins_subnet = 0;
+
extern uint16 nb_type; /* samba's NetBIOS name type */
/* Forward references. */
@@ -81,32 +85,19 @@ static void add_subnet(struct subnet_record *d)
/****************************************************************************
- find a subnet in the subnetlist
+ find a subnet in the subnetlist - not including WINS.
**************************************************************************/
struct subnet_record *find_subnet(struct in_addr bcast_ip)
{
struct subnet_record *d;
/* search through subnet list for broadcast/netmask that matches
- the source ip address. a subnet 255.255.255.255 represents the
- WINS list. */
+ the source ip address. */
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_EXCLUDING_WINS(d))
{
- if (ip_equal(bcast_ip, wins_ip))
- {
- if (ip_equal(bcast_ip, d->bcast_ip))
- {
- return d;
- }
- }
- else if (same_net(bcast_ip, d->bcast_ip, d->mask_ip))
- {
- if (!ip_equal(d->bcast_ip, wins_ip))
- {
- return d;
- }
- }
+ if (same_net(bcast_ip, d->bcast_ip, d->mask_ip))
+ return d;
}
return (NULL);
@@ -125,8 +116,8 @@ struct subnet_record *find_req_subnet(struct in_addr ip, BOOL bcast)
/* identify the subnet the broadcast request came from */
return find_subnet(*iface_bcast(ip));
}
- /* find the subnet under the pseudo-ip of 255.255.255.255 */
- return find_subnet(wins_ip);
+ /* Return the subnet with the pseudo-ip of 255.255.255.255 */
+ return wins_subnet;
}
/****************************************************************************
@@ -137,13 +128,13 @@ struct subnet_record *find_subnet_all(struct in_addr bcast_ip)
{
struct subnet_record *d = find_subnet(bcast_ip);
if(!d)
- return find_subnet( wins_ip);
+ return wins_subnet;
}
/****************************************************************************
create a domain entry
****************************************************************************/
-static struct subnet_record *make_subnet(struct in_addr bcast_ip, struct in_addr mask_ip)
+static struct subnet_record *make_subnet(struct in_addr bcast_ip, struct in_addr mask_ip, BOOL add)
{
struct subnet_record *d;
d = (struct subnet_record *)malloc(sizeof(*d));
@@ -159,7 +150,8 @@ static struct subnet_record *make_subnet(struct in_addr bcast_ip, struct in_addr
d->mask_ip = mask_ip;
d->workgrouplist = NULL;
- add_subnet(d);
+ if(add)
+ add_subnet(d);
return d;
}
@@ -179,7 +171,7 @@ void add_subnet_interfaces(void)
/* add the interface into our subnet database */
if (!find_subnet(i->bcast))
{
- make_subnet(i->bcast,i->nmask);
+ make_subnet(i->bcast,i->nmask, True);
}
}
@@ -188,14 +180,14 @@ void add_subnet_interfaces(void)
{
struct in_addr wins_bcast = wins_ip;
struct in_addr wins_nmask = ipzero;
- make_subnet(wins_bcast, wins_nmask);
+ wins_subnet = make_subnet(wins_bcast, wins_nmask, False);
}
}
/****************************************************************************
- add the default workgroup into my domain
+ add the default workgroup into the subnet lists.
**************************************************************************/
void add_my_subnets(char *group)
{
@@ -212,6 +204,18 @@ void add_my_subnets(char *group)
{
add_subnet_entry(i->bcast,i->nmask,group, True, False);
}
+
+ /* If we are setup as a domain master browser, and are using
+ WINS, then we must add the workgroup to the WINS subnet. This
+ is used as a place to keep collated server lists. */
+
+ if(lp_domain_master() && (lp_wins_support() || lp_wins_server()))
+ if(find_workgroupstruct(wins_subnet, group, True) == 0)
+ DEBUG(0, ("add_my_subnets: Failed to add workgroup %s to \
+WINS subnet.\n", group));
+ else
+ DEBUG(3,("add_my_subnets: Added workgroup %s to WINS subnet.\n",
+ group));
}
@@ -240,7 +244,7 @@ static struct subnet_record *add_subnet_entry(struct in_addr bcast_ip,
/* Note that we never add into the WINS subnet as add_subnet_entry
is only called to add our local interfaces. */
if ((d = find_subnet(bcast_ip)) ||
- (d = make_subnet(bcast_ip, mask_ip)))
+ (d = make_subnet(bcast_ip, mask_ip, True)))
{
struct work_record *w = find_workgroupstruct(d, name, add);
@@ -304,7 +308,7 @@ void write_browse_list(time_t t)
return;
}
- for (d = subnetlist; d ; d = d->next)
+ for (d = FIRST_SUBNET; d ; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
struct work_record *work;
for (work = d->workgrouplist; work ; work = work->next)