summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/client/client.c2
-rw-r--r--source/client/clientutil.c2
-rw-r--r--source/include/byteorder.h2
-rw-r--r--source/include/charset.h2
-rw-r--r--source/include/includes.h2
-rw-r--r--source/include/kanji.h2
-rw-r--r--source/include/nameserv.h19
-rw-r--r--source/include/proto.h8
-rw-r--r--source/include/smb.h2
-rw-r--r--source/include/trans2.h2
-rw-r--r--source/include/version.h2
-rw-r--r--source/lib/charcnv.c2
-rw-r--r--source/lib/charset.c2
-rw-r--r--source/lib/fault.c2
-rw-r--r--source/lib/interface.c2
-rw-r--r--source/lib/kanji.c2
-rw-r--r--source/lib/replace.c2
-rw-r--r--source/lib/system.c2
-rw-r--r--source/lib/time.c2
-rw-r--r--source/lib/username.c2
-rw-r--r--source/lib/util.c2
-rw-r--r--source/libsmb/namequery.c2
-rw-r--r--source/libsmb/nmblib.c2
-rw-r--r--source/libsmb/smbencrypt.c2
-rw-r--r--source/locking/locking.c2
-rw-r--r--source/locking/shmem.c2
-rw-r--r--source/nameannounce.c190
-rw-r--r--source/namebrowse.c60
-rw-r--r--source/namedbname.c59
-rw-r--r--source/namedbresp.c4
-rw-r--r--source/namedbserver.c4
-rw-r--r--source/namedbsubnet.c62
-rw-r--r--source/namedbwork.c55
-rw-r--r--source/nameelect.c39
-rw-r--r--source/namelogon.c2
-rw-r--r--source/namepacket.c2
-rw-r--r--source/nameresp.c28
-rw-r--r--source/nameserv.c77
-rw-r--r--source/nameservreply.c6
-rw-r--r--source/nameservresp.c4
-rw-r--r--source/namework.c26
-rw-r--r--source/nmbd/nmbd.c10
-rw-r--r--source/nmbsync.c10
-rw-r--r--source/param/loadparm.c2
-rw-r--r--source/param/params.c2
-rw-r--r--source/printing/printing.c2
-rw-r--r--source/smbd/dir.c2
-rw-r--r--source/smbd/ipc.c2
-rw-r--r--source/smbd/mangle.c2
-rw-r--r--source/smbd/message.c2
-rw-r--r--source/smbd/password.c2
-rw-r--r--source/smbd/pipes.c2
-rw-r--r--source/smbd/predict.c2
-rw-r--r--source/smbd/quotas.c2
-rw-r--r--source/smbd/reply.c2
-rw-r--r--source/smbd/server.c2
-rw-r--r--source/smbd/smbrun.c2
-rw-r--r--source/smbd/trans2.c2
-rw-r--r--source/smbd/uid.c2
-rw-r--r--source/utils/nmblookup.c2
-rw-r--r--source/utils/smbpasswd.c2
-rw-r--r--source/utils/status.c2
-rw-r--r--source/utils/testparm.c2
-rw-r--r--source/utils/testprns.c2
64 files changed, 392 insertions, 363 deletions
diff --git a/source/client/client.c b/source/client/client.c
index ac6878786af..a9e81cfd64e 100644
--- a/source/client/client.c
+++ b/source/client/client.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB client
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/client/clientutil.c b/source/client/clientutil.c
index 3058f654741..d1407332ff0 100644
--- a/source/client/clientutil.c
+++ b/source/client/clientutil.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB client
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/include/byteorder.h b/source/include/byteorder.h
index 51f368e61b5..a55789a4036 100644
--- a/source/include/byteorder.h
+++ b/source/include/byteorder.h
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB Byte handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/include/charset.h b/source/include/charset.h
index 72a8810e424..5f5e2016ee1 100644
--- a/source/include/charset.h
+++ b/source/include/charset.h
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Character set handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/include/includes.h b/source/include/includes.h
index 249e4940a91..e1ed3a58168 100644
--- a/source/include/includes.h
+++ b/source/include/includes.h
@@ -4,7 +4,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Machine customisation and include handling
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/include/kanji.h b/source/include/kanji.h
index 6bc88b704db..ee3ba7e09a6 100644
--- a/source/include/kanji.h
+++ b/source/include/kanji.h
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Kanji Extensions
- Copyright (C) Andrew Tridgell 1992-1994
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/include/nameserv.h b/source/include/nameserv.h
index 42bfe83dcc3..12ddd033c8a 100644
--- a/source/include/nameserv.h
+++ b/source/include/nameserv.h
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios header - version 2
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
@@ -75,8 +75,6 @@
#define AM_BACKUP(work) (work->ServerType & SV_TYPE_BACKUP_BROWSER)
#define AM_DOMMST(work) (work->ServerType & SV_TYPE_DOMAIN_MASTER)
#define AM_DOMMEM(work) (work->ServerType & SV_TYPE_DOMAIN_MEMBER)
-#define AM_ANY_MASTER(work) (check_work_servertype(work->work_group, \
-SV_TYPE_MASTER_BROWSER|SV_TYPE_DOMAIN_MASTER))
/* microsoft browser NetBIOS name */
#define MSBROWSE "\001\002__MSBROWSE__\002"
@@ -160,6 +158,8 @@ struct name_record
time_t refresh_time; /* time record should be refreshed */
};
+struct subnet_record;
+
/* browse and backup server cache for synchronising browse list */
struct browse_cache_record
{
@@ -173,6 +173,7 @@ struct browse_cache_record
time_t sync_time;
BOOL synced;
BOOL local;
+ struct subnet_record *subnet;
};
/* this is used to hold the list of servers in my domain, and is */
@@ -413,3 +414,15 @@ struct packet_struct
SV_TYPE_PRINTQ_SERVER | SV_TYPE_SERVER_NT | \
SV_TYPE_NT )
+/* Macro's to enumerate subnets either with or without
+ the WINS subnet. */
+
+extern struct subnet_record *subnetlist;
+extern struct subnet_record *wins_subnet;
+
+#define FIRST_SUBNET subnetlist
+#define NEXT_SUBNET_EXCLUDING_WINS(x) ((x)->next)
+#define NEXT_SUBNET_INCLUDING_WINS(x) ( ((x) == wins_subnet) ? 0 : \
+ (((x)->next == 0) ? wins_subnet : \
+ (x)->next))
+
diff --git a/source/include/proto.h b/source/include/proto.h
index 63f56228036..973b1a15f39 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -295,12 +295,14 @@ int reply_sendend(char *inbuf,char *outbuf);
/*The following definitions come from nameannounce.c */
+void reset_announce_timer();
void announce_request(struct work_record *work, struct in_addr ip);
void do_announce_request(char *info, char *to_name, int announce_type,
int from,
int to, struct in_addr dest_ip);
void sync_server(enum state_type state, char *serv_name, char *work_name,
int name_type,
+ struct subnet_record *d,
struct in_addr ip);
void do_announce_host(int command,
char *from_name, int from_type, struct in_addr from_ip,
@@ -318,7 +320,9 @@ void announce_remote(time_t t);
void expire_browse_cache(time_t t);
struct browse_cache_record *add_browser_entry(char *name, int type, char *wg,
- time_t ttl, struct in_addr ip, BOOL local);
+ time_t ttl,
+ struct subnet_record *d,
+ struct in_addr ip, BOOL local);
void do_browser_lists(time_t t);
/*The following definitions come from nameconf.c */
@@ -460,7 +464,7 @@ BOOL name_query(int fd,char *name,int name_type,
/*The following definitions come from nameresp.c */
void expire_netbios_response_entries(time_t t);
-struct response_record *queue_netbios_pkt_wins(struct subnet_record *d,
+struct response_record *queue_netbios_pkt_wins(
int fd,int quest_type,enum state_type state,
char *name,int name_type,int nb_flags, time_t ttl,
int server_type, char *my_name, char *my_comment,
diff --git a/source/include/smb.h b/source/include/smb.h
index fc9ac2048e5..a6be0f16d5b 100644
--- a/source/include/smb.h
+++ b/source/include/smb.h
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB parameters and setup
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/include/trans2.h b/source/include/trans2.h
index b99f1e6028d..70285358bc4 100644
--- a/source/include/trans2.h
+++ b/source/include/trans2.h
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB transaction2 handling
- Copyright (C) Jeremy Allison 1994
+ Copyright (C) Jeremy Allison 1994-1997
Extensively modified by Andrew Tridgell, 1995
diff --git a/source/include/version.h b/source/include/version.h
index 16411094543..cc69bef5216 100644
--- a/source/include/version.h
+++ b/source/include/version.h
@@ -1 +1 @@
-#define VERSION "1.9.16p12alpha"
+#define VERSION "1.9.17alpha1"
diff --git a/source/lib/charcnv.c b/source/lib/charcnv.c
index 4654101a5c3..cf4ae4edb62 100644
--- a/source/lib/charcnv.c
+++ b/source/lib/charcnv.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Character set conversion Extensions
- Copyright (C) Andrew Tridgell 1992-1994
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/charset.c b/source/lib/charset.c
index 65e0cc9a347..1c396db241d 100644
--- a/source/lib/charset.c
+++ b/source/lib/charset.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Character set handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/fault.c b/source/lib/fault.c
index 9bc2eca7e02..61715a4f225 100644
--- a/source/lib/fault.c
+++ b/source/lib/fault.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Critical Fault handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/interface.c b/source/lib/interface.c
index 0e2a13e7b93..444d511426b 100644
--- a/source/lib/interface.c
+++ b/source/lib/interface.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
multiple interface handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/kanji.c b/source/lib/kanji.c
index a77bdea73f0..479763fd406 100644
--- a/source/lib/kanji.c
+++ b/source/lib/kanji.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Kanji Extensions
- Copyright (C) Andrew Tridgell 1992-1994
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/replace.c b/source/lib/replace.c
index c7340bbadd2..67c18a15237 100644
--- a/source/lib/replace.c
+++ b/source/lib/replace.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
replacement routines for broken systems
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/system.c b/source/lib/system.c
index 86c4c28a593..521f5e304ce 100644
--- a/source/lib/system.c
+++ b/source/lib/system.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Samba system utilities
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/time.c b/source/lib/time.c
index 215c28a2108..d16552b61e2 100644
--- a/source/lib/time.c
+++ b/source/lib/time.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
time handling functions
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/username.c b/source/lib/username.c
index 07987fafb30..b8d152c83fd 100644
--- a/source/lib/username.c
+++ b/source/lib/username.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Username handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/lib/util.c b/source/lib/util.c
index 53b24173d51..3315f1a41a1 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Samba utility functions
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/libsmb/namequery.c b/source/libsmb/namequery.c
index fc02add5b50..55f70be1222 100644
--- a/source/libsmb/namequery.c
+++ b/source/libsmb/namequery.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
name query routines
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/libsmb/nmblib.c b/source/libsmb/nmblib.c
index a0f93331d95..89a5cf9534b 100644
--- a/source/libsmb/nmblib.c
+++ b/source/libsmb/nmblib.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios library routines
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/libsmb/smbencrypt.c b/source/libsmb/smbencrypt.c
index ee2b17ae5d1..8bb21cfed20 100644
--- a/source/libsmb/smbencrypt.c
+++ b/source/libsmb/smbencrypt.c
@@ -3,7 +3,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB parameters and setup
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-1997
Modified by Jeremy Allison 1995.
This program is free software; you can redistribute it and/or modify
diff --git a/source/locking/locking.c b/source/locking/locking.c
index ce96aa01cf3..7c23e5b3cab 100644
--- a/source/locking/locking.c
+++ b/source/locking/locking.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Locking functions
- Copyright (C) Andrew Tridgell 1992-1996
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/locking/shmem.c b/source/locking/shmem.c
index 9f7b985e67a..2c02982d04a 100644
--- a/source/locking/shmem.c
+++ b/source/locking/shmem.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Shared memory functions
- Copyright (C) Erik Devriendt 1996
+ Copyright (C) Erik Devriendt 1996-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
diff --git a/source/nameannounce.c b/source/nameannounce.c
index 8f2005a73d7..b46436168c3 100644
--- a/source/nameannounce.c
+++ b/source/nameannounce.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
@@ -47,7 +47,7 @@ extern int workgroup_count;
extern struct in_addr wins_ip;
-
+extern pstring scope;
/****************************************************************************
send a announce request to the local net
@@ -119,12 +119,13 @@ void do_announce_request(char *info, char *to_name, int announce_type,
**************************************************************************/
void sync_server(enum state_type state, char *serv_name, char *work_name,
int name_type,
+ struct subnet_record *d,
struct in_addr ip)
{
/* with a domain master we can get the whole list (not local only list) */
BOOL local_only = (state != NAME_STATUS_DOM_SRV_CHK);
- add_browser_entry(serv_name, name_type, work_name, 0, ip, local_only);
+ add_browser_entry(serv_name, name_type, work_name, 0, d, ip, local_only);
if (state == NAME_STATUS_DOM_SRV_CHK)
{
@@ -189,7 +190,7 @@ void do_announce_host(int command,
void remove_my_servers(void)
{
struct subnet_record *d;
- 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)
@@ -228,7 +229,7 @@ void announce_server(struct subnet_record *d, struct work_record *work,
if (!lp_wins_support() && *lp_wins_server())
{
/* look up the domain master with the WINS server */
- queue_netbios_pkt_wins(d,ClientNMB,NMB_QUERY,
+ queue_netbios_pkt_wins(ClientNMB,NMB_QUERY,
NAME_QUERY_ANNOUNCE_HOST,
work->work_group,0x1b,0,ttl*1000,
server_type,name,comment,
@@ -305,12 +306,10 @@ void announce_host(time_t t)
my_name = *myname ? myname : "NoName";
- 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)) continue;
-
for (work = d->workgrouplist; work; work = work->next)
{
uint32 stype = work->ServerType;
@@ -362,6 +361,19 @@ void announce_host(time_t t)
}
}
+/* Announce timer. Moved into global static so it can be reset
+ when a machine becomes a master browser. */
+static time_t announce_timer_last=0;
+
+/****************************************************************************
+ Reset the announce_timer so that a master browser announce will be done
+ immediately.
+ ****************************************************************************/
+
+void reset_announce_timer()
+{
+ announce_timer_last = 0;
+}
/****************************************************************************
announce myself as a master to all other domain master browsers.
@@ -373,16 +385,26 @@ void announce_host(time_t t)
void announce_master(time_t t)
{
struct subnet_record *d;
- static time_t last=0;
+ struct work_record *work;
BOOL am_master = False; /* are we a master of some sort? :-) */
- if (!last) last = t;
- if (t-last < CHECK_TIME_MST_ANNOUNCE * 60)
- return;
+ if (!announce_timer_last) announce_timer_last = t;
+ if (t-announce_timer_last < CHECK_TIME_MST_ANNOUNCE * 60)
+ {
+ DEBUG(10,("announce_master: t (%d) - last(%d) < %d\n",
+ t, announce_timer_last, CHECK_TIME_MST_ANNOUNCE * 60 ));
+ return;
+ }
+
+ if(wins_subnet == 0)
+ {
+ DEBUG(10,("announce_master: no wins subnet, ignoring.\n"));
+ return;
+ }
- last = t;
+ announce_timer_last = t;
- 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)
@@ -398,69 +420,95 @@ void announce_master(time_t t)
if (!am_master) return; /* only proceed if we are a master browser */
- /* Note that we don't do this if we are domain master browser. */
+ /* Note that we don't do this if we are domain master browser
+ and that we *only* do this on the WINS subnet. */
+
+ /* Try and find our workgroup on the WINS subnet */
+ work = find_workgroupstruct(wins_subnet, lp_workgroup(), False);
- for (d = subnetlist; d; d = d->next)
+ if (work)
{
- /* Try and find our workgroup on this subnet */
- struct work_record *work = find_workgroupstruct(d, lp_workgroup(), False);
+ char *name;
+ int type;
- if (work)
+ if (*lp_domain_controller())
{
- char *name;
- int type;
-
- if (*lp_domain_controller())
- {
- /* the domain controller option is used to manually specify
- the domain master browser to sync with
- */
-
- /* XXXX i'm not sure we should be using the domain controller
- option for this purpose.
- */
-
- name = lp_domain_controller();
- type = 0x20;
- }
- else
- {
- /* assume that the domain master browser we want to sync
- with is our own domain.
- */
- name = work->work_group;
- type = 0x1b;
- }
-
- /* check the existence of a dmb for this workgroup, and if
- one exists at the specified ip, sync with it and announce
- ourselves as a master browser to it
+ /* the domain controller option is used to manually specify
+ the domain master browser to sync with
*/
- if (!lp_wins_support() && *lp_wins_server() &&
- ip_equal(d->bcast_ip, wins_ip))
- {
- DEBUG(4, ("Local Announce: find %s<%02x> from WINS server %s\n",
- name, type, lp_wins_server()));
-
- queue_netbios_pkt_wins(d,ClientNMB,
- NMB_QUERY,NAME_QUERY_DOM_SRV_CHK,
- name, type, 0,0,0,
- work->work_group,NULL,
- False, False, ipzero, ipzero);
- }
- else
- {
- DEBUG(4, ("Local Announce: find %s<%02x> on %s\n",
- name, type, inet_ntoa(d->bcast_ip)));
-
- queue_netbios_packet(d,ClientNMB,
- NMB_QUERY,NAME_QUERY_DOM_SRV_CHK,
- name, type, 0,0,0,
- work->work_group,NULL,
- True, False, d->bcast_ip, d->bcast_ip);
- }
- }
+ /* XXXX i'm not sure we should be using the domain controller
+ option for this purpose.
+ */
+
+ name = lp_domain_controller();
+ type = 0x20;
+ }
+ else
+ {
+ /* assume that the domain master browser we want to sync
+ with is our own domain.
+ */
+ name = work->work_group;
+ type = 0x1b;
+ }
+
+ /* check the existence of a dmb for this workgroup, and if
+ one exists at the specified ip, sync with it and announce
+ ourselves as a master browser to it
+ */
+
+ if (!lp_wins_support() && *lp_wins_server() )
+ {
+ DEBUG(4, ("Local Announce: find %s<%02x> from WINS server %s\n",
+ name, type, lp_wins_server()));
+
+ queue_netbios_pkt_wins(ClientNMB,
+ NMB_QUERY,NAME_QUERY_DOM_SRV_CHK,
+ name, type, 0,0,0,
+ work->work_group,NULL,
+ False, False, ipzero, ipzero);
+ }
+ else if(lp_wins_support())
+ {
+ /* We are the WINS server - query ourselves for the dmb name. */
+
+ struct nmb_name netb_name;
+ struct subnet_record *d = 0;
+ struct name_record *nr = 0;
+
+ make_nmb_name(&netb_name, name, type, scope);
+
+ if ((nr = find_name_search(&d, &netb_name, FIND_WINS, ipzero)) == 0)
+ {
+ DEBUG(0, ("announce_master: unable to find domain master browser for workgroup %s \
+in our own WINS database.\n", work->work_group));
+ return;
+ }
+
+ /* Check that this isn't one of our addresses (ie. we are not domain master
+ ourselves) */
+ if(ismyip(nr->ip_flgs[0].ip))
+ {
+ DEBUG(4, ("announce_master: domain master ip found (%s) for workgroup %s \
+is one of our interfaces.\n", work->work_group, inet_ntoa(nr->ip_flgs[0].ip) ));
+ return;
+ }
+
+ /* Issue a NAME_STATUS_DOM_SRV_CHK immediately - short circuit the
+ NAME_QUERY_DOM_SRV_CHK which is done only if we are talking to a
+ remote WINS server. */
+
+ DEBUG(4, ("announce_master: doing name status for %s<%02x> to domain master ip %s \
+for workgroup %s\n", name, type, inet_ntoa(nr->ip_flgs[0].ip), work->work_group ));
+
+ queue_netbios_packet(wins_subnet, ClientNMB,
+ NMB_QUERY,NAME_STATUS_DOM_SRV_CHK,
+ name, type, 0,0,0,
+ work->work_group,NULL,
+ False, False, nr->ip_flgs[0].ip, nr->ip_flgs[0].ip);
+ }
+
}
}
diff --git a/source/namebrowse.c b/source/namebrowse.c
index b891f51718e..1dd293d27be 100644
--- a/source/namebrowse.c
+++ b/source/namebrowse.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
@@ -95,7 +95,8 @@ void expire_browse_cache(time_t t)
add a browser entry
****************************************************************************/
struct browse_cache_record *add_browser_entry(char *name, int type, char *wg,
- time_t ttl, struct in_addr ip, BOOL local)
+ time_t ttl, struct subnet_record *d,
+ struct in_addr ip, BOOL local)
{
BOOL newentry=False;
@@ -137,7 +138,8 @@ struct browse_cache_record *add_browser_entry(char *name, int type, char *wg,
b->ip = ip;
b->type = type;
b->local = local; /* local server list sync or complete sync required */
-
+ b->subnet = d;
+
if (newentry || ttl < b->sync_time)
b->sync_time = ttl;
@@ -164,20 +166,14 @@ find a server responsible for a workgroup, and sync browse lists
**************************************************************************/
static void start_sync_browse_entry(struct browse_cache_record *b)
{
- struct subnet_record *d;
+ struct subnet_record *d = b->subnet;
struct work_record *work;
- /* Look for the workgroup first on the local subnet. If this
- fails try WINS - we may need to sync with the domain master,
- or we may be the domain master and need to sync with subnet
- masters.
- */
-
- if (!(d = find_subnet_all(b->ip))) {
- DEBUG(0, ("start_sync_browse_entry: failed to get a \
-subnet for a browse cache entry workgroup %s, server %s\n",
- b->group, b->name));
- return;
+ /* Check panic conditions - these should not be true. */
+ if(b->subnet != wins_subnet) {
+ DEBUG(0,
+ ("start_sync_browse_entry: ERROR sync requested on non-WINS subnet.\n"));
+ return;
}
if (!(work = find_workgroupstruct(d, b->group, False))) {
@@ -187,29 +183,23 @@ workgroup for a browse cache entry workgroup %s, server %s\n",
return;
}
- /* only sync if we are a subnet master or domain master - but
- we sync if we are a master for this workgroup on *any*
- of our interfaces. */
- if (AM_MASTER(work) || AM_DOMMST(work) || AM_ANY_MASTER(work)) {
-
- DEBUG(4, ("start_sync_browse_entry: Initiating %s sync with %s<0x20>, \
+ DEBUG(4, ("start_sync_browse_entry: Initiating %s sync with %s<0x20>, \
workgroup %s\n",
- b->local ? "local" : "remote", b->name, b->group));
+ b->local ? "local" : "remote", b->name, b->group));
- /* first check whether the server we intend to sync with exists. if it
- doesn't, the server must have died. o dear. */
+ /* first check whether the server we intend to sync with exists. if it
+ doesn't, the server must have died. o dear. */
- /* see response_netbios_packet() or expire_netbios_response_entries() */
- /* We cheat here by using the my_comment field of the response_record
- struct as the workgroup name we are going to do the sync for.
- This is because the reply packet doesn't include the workgroup, but
- we need it when the reply comes back.
- */
- queue_netbios_packet(d,ClientNMB,NMB_QUERY,
- b->local?NAME_QUERY_SYNC_LOCAL:NAME_QUERY_SYNC_REMOTE,
- b->name,0x20,0,0,0,NULL,b->group,
- False,False,b->ip,b->ip);
- }
+ /* see response_netbios_packet() or expire_netbios_response_entries() */
+ /* We cheat here by using the my_comment field of the response_record
+ struct as the workgroup name we are going to do the sync for.
+ This is because the reply packet doesn't include the workgroup, but
+ we need it when the reply comes back.
+ */
+ queue_netbios_packet(d,ClientNMB,NMB_QUERY,
+ b->local?NAME_QUERY_SYNC_LOCAL:NAME_QUERY_SYNC_REMOTE,
+ b->name,0x20,0,0,0,NULL,b->group,
+ False,False,b->ip,b->ip);
b->synced = True;
}
diff --git a/source/namedbname.c b/source/namedbname.c
index d27bcf81586..5c514c263ff 100644
--- a/source/namedbname.c
+++ b/source/namedbname.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
@@ -187,7 +187,7 @@ struct name_record *find_name_search(struct subnet_record **d,
if (!(search & FIND_WINS)) return NULL;
/* find WINS subnet record. */
- *d = find_subnet(wins_ip);
+ *d = wins_subnet;
if (*d == NULL) return NULL;
@@ -203,12 +203,14 @@ struct name_record *find_name_search(struct subnet_record **d,
void dump_names(void)
{
struct name_record *n;
- struct subnet_record *d;
fstring fname, fnamenew;
time_t t = time(NULL);
FILE *f;
-
+
+ if(lp_wins_support() == False || wins_subnet == 0)
+ return;
+
strcpy(fname,lp_lockdir());
trim_string(fname,NULL,"/");
strcat(fname,"/");
@@ -224,29 +226,28 @@ void dump_names(void)
return;
}
- DEBUG(4,("Dump of local name table:\n"));
+ DEBUG(4,("Dump of WINS name table:\n"));
- for (d = subnetlist; d; d = d->next)
- for (n = d->namelist; n; n = n->next)
- {
- int i;
+ for (n = wins_subnet->namelist; n; n = n->next)
+ {
+ int i;
- DEBUG(4,("%15s ", inet_ntoa(d->bcast_ip)));
- DEBUG(4,("%15s ", inet_ntoa(d->mask_ip)));
- DEBUG(4,("%-19s TTL=%ld ",
+ DEBUG(4,("%15s ", inet_ntoa(wins_subnet->bcast_ip)));
+ DEBUG(4,("%15s ", inet_ntoa(wins_subnet->mask_ip)));
+ DEBUG(4,("%-19s TTL=%ld ",
namestr(&n->name),
n->death_time?n->death_time-t:0));
- for (i = 0; i < n->num_ips; i++)
- {
- DEBUG(4,("%15s NB=%2x source=%d",
- inet_ntoa(n->ip_flgs[i].ip),
+ for (i = 0; i < n->num_ips; i++)
+ {
+ DEBUG(4,("%15s NB=%2x source=%d",
+ inet_ntoa(n->ip_flgs[i].ip),
n->ip_flgs[i].nb_flags,n->source));
- }
- DEBUG(4,("\n"));
+ }
+ DEBUG(4,("\n"));
- if (f && ip_equal(d->bcast_ip, wins_ip) && n->source == REGISTER)
+ if (f && n->source == REGISTER)
{
/* XXXX i have little imagination as to how to output nb_flags as
anything other than as a hexadecimal number :-) */
@@ -264,7 +265,7 @@ void dump_names(void)
fprintf(f, "\n");
}
- }
+ }
fclose(f);
unlink(fname);
@@ -282,7 +283,7 @@ void dump_names(void)
****************************************************************************/
void load_netbios_names(void)
{
- struct subnet_record *d = find_subnet(wins_ip);
+ struct subnet_record *d = wins_subnet;
fstring fname;
FILE *f;
@@ -414,6 +415,7 @@ struct name_record *add_netbios_entry(struct subnet_record *d,
{
struct name_record *n;
struct name_record *n2=NULL;
+ struct subnet_record *found_subnet = 0;
int search = 0;
BOOL self = source == SELF;
@@ -447,12 +449,13 @@ struct name_record *add_netbios_entry(struct subnet_record *d,
make_nmb_name(&n->name,name,type,scope);
- if ((n2 = find_name_search(&d, &n->name, search, new_only?ipzero:ip)))
+ if ((n2 = find_name_search(&found_subnet, &n->name, search, new_only?ipzero:ip)))
{
free(n->ip_flgs);
free(n);
if (new_only || (n2->source==SELF && source!=SELF)) return n2;
n = n2;
+ d = found_subnet;
}
if (ttl)
@@ -469,7 +472,7 @@ struct name_record *add_netbios_entry(struct subnet_record *d,
DEBUG(3,("Added netbios name %s at %s ttl=%d nb_flags=%2x to interface %s\n",
namestr(&n->name),inet_ntoa(ip),ttl,nb_flags,
- ip_equal(d->bcast_ip, wins_ip) ? "WINS" : inet_ntoa(d->bcast_ip)));
+ ip_equal(d->bcast_ip, wins_ip) ? "WINS" : (char *)inet_ntoa(d->bcast_ip)));
return(n);
}
@@ -485,7 +488,7 @@ void expire_names(time_t t)
struct subnet_record *d;
/* expire old names */
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
for (n = d->namelist; n; n = next)
{
@@ -522,9 +525,9 @@ struct name_record *dns_name_search(struct nmb_name *question, int Time)
char *r;
BOOL dns_type = (name_type == 0x20 || name_type == 0);
struct in_addr dns_ip;
- struct subnet_record *d = find_subnet(wins_ip);
- if (d == NULL) return NULL;
+ if (wins_subnet == NULL)
+ return NULL;
DEBUG(3,("Search for %s - ", namestr(question)));
@@ -543,7 +546,7 @@ struct name_record *dns_name_search(struct nmb_name *question, int Time)
/* no luck with DNS. We could possibly recurse here XXXX */
DEBUG(3,("not found. no recursion.\n"));
/* add the fail to WINS cache of names. give it 1 hour in the cache */
- add_netbios_entry(d,qname,name_type,NB_ACTIVE,60*60,DNSFAIL,dns_ip,
+ add_netbios_entry(wins_subnet,qname,name_type,NB_ACTIVE,60*60,DNSFAIL,dns_ip,
True, True);
return NULL;
}
@@ -551,6 +554,6 @@ struct name_record *dns_name_search(struct nmb_name *question, int Time)
DEBUG(3,("found with DNS: %s\n", inet_ntoa(dns_ip)));
/* add it to our WINS cache of names. give it 2 hours in the cache */
- return add_netbios_entry(d,qname,name_type,NB_ACTIVE,2*60*60,DNS,dns_ip,
+ return add_netbios_entry(wins_subnet,qname,name_type,NB_ACTIVE,2*60*60,DNS,dns_ip,
True,True);
}
diff --git a/source/namedbresp.c b/source/namedbresp.c
index 6755de6534b..98f8ca774bc 100644
--- a/source/namedbresp.c
+++ b/source/namedbresp.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios library routines
- 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
@@ -144,7 +144,7 @@ struct response_record *find_response_record(struct subnet_record **d,
if (!d) return NULL;
- for ((*d) = subnetlist; (*d); (*d) = (*d)->next)
+ for ((*d) = FIRST_SUBNET; (*d); (*d) = NEXT_SUBNET_INCLUDING_WINS(*d))
{
for (n = (*d)->responselist; n; n = n->next)
{
diff --git a/source/namedbserver.c b/source/namedbserver.c
index afb1dc14315..9c7bb664ab2 100644
--- a/source/namedbserver.c
+++ b/source/namedbserver.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
@@ -208,7 +208,7 @@ void expire_servers(time_t t)
{
struct subnet_record *d;
- for (d = subnetlist ; d ; d = d->next)
+ for (d = FIRST_SUBNET; d ; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
struct work_record *work;
diff --git a/source/namedbsubnet.c b/source/namedbsubnet.c
index 144729e1e17..25c369ab1c8 100644
--- a/source/namedbsubnet.c
+++ b/source/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)
diff --git a/source/namedbwork.c b/source/namedbwork.c
index 80a670fea84..8c249cc82cb 100644
--- a/source/namedbwork.c
+++ b/source/namedbwork.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
@@ -97,7 +97,7 @@ static struct work_record *make_workgroup(char *name)
/* make sure all token representations of workgroups are unique */
- for (d = subnetlist; d && t == -1; d = d->next)
+ for (d = FIRST_SUBNET; d && t == -1; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
struct work_record *w;
for (w = d->workgrouplist; w && t == -1; w = w->next)
@@ -175,16 +175,6 @@ struct work_record *find_workgroupstruct(struct subnet_record *d,
DEBUG(4, ("workgroup search for %s: ", name));
- if (strequal(name, "*"))
- {
- DEBUG(2,("add any workgroups: initiating browser search on %s\n",
- inet_ntoa(d->bcast_ip)));
- queue_netbios_pkt_wins(d,ClientNMB,NMB_QUERY, NAME_QUERY_FIND_MST,
- MSBROWSE,0x1,0,0,0,NULL,NULL,
- True,False, d->bcast_ip, d->bcast_ip);
- return NULL;
- }
-
for (ret = d->workgrouplist; ret; ret = ret->next) {
if (!strcmp(ret->work_group,name)) {
DEBUG(4, ("found\n"));
@@ -223,7 +213,7 @@ void dump_workgroups(void)
{
struct subnet_record *d;
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
if (d->workgrouplist)
{
@@ -248,42 +238,3 @@ void dump_workgroups(void)
}
}
}
-
-/****************************************************************************
- check to see if a ServerType bit is set in any workgroup on any interface
- except WINS. Used to determine if a nmbd is a master browser or domain
- master browser in a particular workgroup on any subnet.
- **************************************************************************/
-int check_work_servertype(const char *work_name, int type_mask)
-{
- struct subnet_record *d;
-
- for (d = subnetlist; d; d = d->next)
- {
- if(ip_equal(d->bcast_ip, wins_ip))
- {
- /* WINS ip */
- DEBUG(10,("check_work_servertype: ignoring WINS subnet\n"));
- continue;
- }
- if (d->workgrouplist)
- {
- struct work_record *work;
-
- for (work = d->workgrouplist; work; work = work->next)
- {
- if(strequal(work->work_group, (char *)work_name) &&
- (type_mask & work->ServerType) != 0)
- {
- DEBUG(10, ("check_work_servertype: Workgroup %s has \
-ServerType %x - match for type_mask %x\n", work_name, work->ServerType,
- type_mask));
- return 1;
- }
- }
- }
- }
- DEBUG(10, ("check_work_servertype: Workgroup %s has no match for \
-type mask %x\n", work_name, type_mask));
- return 0;
-}
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)
diff --git a/source/namelogon.c b/source/namelogon.c
index f3afd4273cb..1c118c85418 100644
--- a/source/namelogon.c
+++ b/source/namelogon.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/namepacket.c b/source/namepacket.c
index 09ee5dd79e2..c9db43dcc5f 100644
--- a/source/namepacket.c
+++ b/source/namepacket.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/nameresp.c b/source/nameresp.c
index fab16038ce0..3128b00ac58 100644
--- a/source/nameresp.c
+++ b/source/nameresp.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios library routines
- 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
@@ -62,7 +62,7 @@ static void dead_netbios_entry(struct subnet_record *d,
if ((!NAME_GROUP(n->nb_flags)))
{
- struct subnet_record *d1 = find_subnet(wins_ip);
+ struct subnet_record *d1 = wins_subnet;
if (d1)
{
/* remove the name that had been registered with us,
@@ -162,18 +162,11 @@ static void dead_netbios_entry(struct subnet_record *d,
case NAME_QUERY_DOMAIN:
{
- /* if no response received, there is no domain controller on
- this local subnet. it's ok for us to register
+ /* if no response was received, there is no domain controller for
+ this DOMAIN registered within WINS. it's ok for us to register
+ the DOMAIN<1b> name.
*/
- if (!n->bcast)
- {
- DEBUG(0,("NAME_QUERY_DOMAIN incorrectly used - contact samba-bugs!\n"));
- /* XXXX whoops. someone's using this to unicast a packet. this state
- should only be used for broadcast checks
- */
- break;
- }
if (n->num_msgs == 0)
{
struct work_record *work = find_workgroupstruct(d,n->name.name,False);
@@ -182,6 +175,11 @@ static void dead_netbios_entry(struct subnet_record *d,
become_domain_master(d,work);
}
}
+ else
+ {
+ DEBUG(0, ("ERROR: nmbd configured as domain master and one already exitsts !!!\n"));
+ exit(1);
+ }
break;
}
@@ -206,7 +204,7 @@ void expire_netbios_response_entries(time_t t)
{
struct subnet_record *d;
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
struct response_record *n, *nextn;
@@ -249,7 +247,7 @@ void expire_netbios_response_entries(time_t t)
name server instead, if it exists. if wins is false, and there has been no
WINS server specified, the packet will NOT be sent.
****************************************************************************/
-struct response_record *queue_netbios_pkt_wins(struct subnet_record *d,
+struct response_record *queue_netbios_pkt_wins(
int fd,int quest_type,enum state_type state,
char *name,int name_type,int nb_flags, time_t ttl,
int server_type, char *my_name, char *my_comment,
@@ -283,7 +281,7 @@ struct response_record *queue_netbios_pkt_wins(struct subnet_record *d,
if (zero_ip(send_ip)) return NULL;
- return queue_netbios_packet(d,fd, quest_type, state,
+ return queue_netbios_packet(wins_subnet,fd, quest_type, state,
name, name_type, nb_flags, ttl,
server_type,my_name,my_comment,
bcast, recurse, send_ip, reply_to_ip);
diff --git a/source/nameserv.c b/source/nameserv.c
index ac2dac1683c..022b5521a21 100644
--- a/source/nameserv.c
+++ b/source/nameserv.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
@@ -85,7 +85,7 @@ void remove_name_entry(struct subnet_record *d, char *name,int type)
if (!lp_wins_support())
{
/* not a WINS server: we have to release them on the network */
- queue_netbios_pkt_wins(d,ClientNMB,NMB_REL,NAME_RELEASE,
+ queue_netbios_pkt_wins(ClientNMB,NMB_REL,NAME_RELEASE,
name, type, 0, 0,0,NULL,NULL,
False, True, ipzero, ipzero);
}
@@ -142,7 +142,7 @@ void add_my_name_entry(struct subnet_record *d,char *name,int type,int nb_flags)
else
{
/* a time-to-live allows us to refresh this name with the WINS server. */
- queue_netbios_pkt_wins(d,ClientNMB,
+ queue_netbios_pkt_wins(ClientNMB,
re_reg ? NMB_REG_REFRESH : NMB_REG, NAME_REGISTER,
name, type, nb_flags, GET_TTL(0),0,NULL,NULL,
False, True, ipzero, ipzero);
@@ -171,15 +171,15 @@ void add_domain_names(time_t t)
{
static time_t lastrun = 0;
struct subnet_record *d;
+ struct work_record *work;
+ struct nmb_name n;
if (lastrun != 0 && t < lastrun + CHECK_TIME_ADD_DOM_NAMES * 60) return;
lastrun = t;
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
- struct work_record *work = find_workgroupstruct(d, lp_workgroup(), False);
- struct nmb_name n;
-
+ work = find_workgroupstruct(d, lp_workgroup(), False);
if (lp_domain_logons() && work && work->log_state == LOGON_NONE)
{
make_nmb_name(&n,lp_workgroup(),0x1c,scope);
@@ -191,52 +191,52 @@ void add_domain_names(time_t t)
become_logon_server(d, work);
}
}
+ }
- if (lp_domain_master() && work && work->dom_state == DOMAIN_NONE)
+ if(wins_subnet != 0)
+ work = find_workgroupstruct(wins_subnet, lp_workgroup(), False);
+
+ if (lp_domain_master() && work && work->dom_state == DOMAIN_NONE)
{
DEBUG(0,("add_domain_names:Checking for domain master on workgroup %s\n", lp_workgroup()));
make_nmb_name(&n,lp_workgroup(),0x1b,scope);
- if (!find_name(d->namelist, &n, FIND_SELF))
+ if (!find_name(wins_subnet->namelist, &n, FIND_SELF))
{
- DEBUG(0,("add_domain_names: attempting to become domain master browser on workgroup %s, bcast %s\n",
- lp_workgroup(), inet_ntoa(d->bcast_ip)));
+ DEBUG(0,("add_domain_names: attempting to become domain master browser on workgroup %s\n",
+ lp_workgroup()));
- if (ip_equal(d->bcast_ip,wins_ip))
+ if (lp_wins_support())
{
- if (lp_wins_support())
- {
- /* use the wins server's capabilities (indirectly). if
- someone has already register the domain<1b> name with
- the WINS server, then the WINS server's job is to _check_
- that the owner still wants it, before giving it away.
- */
+ /* use the wins server's capabilities (indirectly). if
+ someone has already registered the domain<1b> name with
+ the WINS server, then the WINS server's job is to _check_
+ that the owner still wants it, before giving it away.
+ */
- DEBUG(1,("%s initiating becoming logon server for %s %s\n",
- timestring(), lp_workgroup(), inet_ntoa(d->bcast_ip)));
- become_domain_master(d, work);
- }
+ DEBUG(1,("%s initiating becoming domain master for %s\n",
+ timestring(), lp_workgroup()));
+ become_domain_master(wins_subnet, work);
}
else
{
/* send out a query to establish whether there's a
- domain controller on the local subnet. if not,
- we can become a domain controller on that subnet.
+ domain controller on the WINS subnet. if not,
+ we can become a domain controller.
it's only polite that we check, before claiming the
NetBIOS name 0x1b.
*/
- DEBUG(0,("add_domain_names:querying for domain master on workgroup %s\n", lp_workgroup()));
+ DEBUG(0,("add_domain_names:querying WINS for domain master on workgroup %s\n", lp_workgroup()));
- queue_netbios_packet(d,ClientNMB,NMB_QUERY,NAME_QUERY_DOMAIN,
+ queue_netbios_pkt_wins(ClientNMB,NMB_QUERY,NAME_QUERY_DOMAIN,
lp_workgroup(), 0x1b,
0, 0,0,NULL,NULL,
- True, True, d->bcast_ip, d->bcast_ip);
+ False, False, ipzero, ipzero);
}
}
}
- }
}
@@ -252,9 +252,9 @@ void add_my_names(void)
there would be yet _another_ for-loop, this time on the transport type
*/
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
- BOOL wins = lp_wins_support() && ip_equal(d->bcast_ip,wins_ip);
+ BOOL wins = (lp_wins_support() && (d == wins_subnet));
struct work_record *work = find_workgroupstruct(d, lp_workgroup(), False);
add_my_name_entry(d, myname,0x20,nb_type|NB_ACTIVE);
@@ -268,15 +268,6 @@ void add_my_names(void)
add_netbios_entry(d,"*",0x20,nb_type|NB_ACTIVE,0,SELF,d->myip,False,wins);
add_netbios_entry(d,"__SAMBA__",0x20,nb_type|NB_ACTIVE,0,SELF,d->myip,False,wins);
add_netbios_entry(d,"__SAMBA__",0x00,nb_type|NB_ACTIVE,0,SELF,d->myip,False,wins);
-
- if (lp_domain_logons() && work && work->log_state == LOGON_NONE)
- {
- become_logon_server(d, work);
- }
- if (lp_domain_master() && work && work->dom_state == DOMAIN_NONE)
- {
- become_domain_master(d, work);
- }
}
}
@@ -288,7 +279,7 @@ void remove_my_names()
{
struct subnet_record *d;
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
struct name_record *n, *next;
@@ -314,7 +305,7 @@ void refresh_my_names(time_t t)
{
struct subnet_record *d;
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
struct name_record *n;
@@ -347,7 +338,7 @@ void refresh_my_names(time_t t)
void query_refresh_names(time_t t)
{
struct name_record *n;
- struct subnet_record *d = find_subnet(wins_ip);
+ struct subnet_record *d = wins_subnet;
static time_t lasttime = 0;
diff --git a/source/nameservreply.c b/source/nameservreply.c
index 001695b3fbd..e1738007df1 100644
--- a/source/nameservreply.c
+++ b/source/nameservreply.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
@@ -433,7 +433,7 @@ void reply_name_status(struct packet_struct *p)
/* end of this name list: add wins names too? */
struct subnet_record *w_d;
- if (!(w_d = find_subnet(wins_ip))) break;
+ if (!(w_d = wins_subnet)) break;
if (w_d != d)
{
@@ -520,7 +520,7 @@ void reply_name_query(struct packet_struct *p)
}
else
{
- if (!(d = find_subnet(wins_ip)))
+ if (!(d = wins_subnet))
{
DEBUG(3,("name query: wins search %s not known\n",
inet_ntoa(p->ip)));
diff --git a/source/nameservresp.c b/source/nameservresp.c
index 30541034b81..565a1565656 100644
--- a/source/nameservresp.c
+++ b/source/nameservresp.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
@@ -320,7 +320,7 @@ static void response_name_status_check(struct in_addr ip,
workgroup name to sync with. See
response_server_check() */
sync_server(n->state,serv_name,
- n->my_name,name.name_type, n->send_ip);
+ n->my_name,name.name_type, d, n->send_ip);
}
}
else
diff --git a/source/namework.c b/source/namework.c
index 1d3ff9e0ee3..218a7a349ef 100644
--- a/source/namework.c
+++ b/source/namework.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
@@ -96,7 +96,7 @@ void tell_become_backup(void)
*/
struct subnet_record *d;
- 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)
@@ -263,6 +263,7 @@ static void process_localnet_announce(struct packet_struct *p,uint16 command,cha
tell_become_backup();
#endif
+#if 0 /* JRA TEST - I Think this code should not be here */
/* get the local_only browse list from the local master and add it
to ours. */
if (command == ANN_LocalMasterAnnouncement)
@@ -270,15 +271,18 @@ static void process_localnet_announce(struct packet_struct *p,uint16 command,cha
add_browser_entry(serv_name,dgram->dest_name.name_type,
work->work_group,30,p->ip,True);
}
+#endif /* END JRA TEST */
}
/*******************************************************************
process a master announcement frame
+ Domain master browsers recieve these from local masters. The Domain
+ master should then issue a sync with the local master, asking for
+ that machines local server list.
******************************************************************/
static void process_master_announce(struct packet_struct *p,char *buf)
{
struct dgram_packet *dgram = &p->packet.dgram;
- struct subnet_record *d = find_subnet_all(p->ip); /* Explicitly include WINS */
char *name = buf;
struct work_record *work;
name[15] = 0;
@@ -287,9 +291,9 @@ static void process_master_announce(struct packet_struct *p,char *buf)
if (same_context(dgram)) return;
- if (!d)
+ if (!wins_subnet)
{
- DEBUG(3,("process_master_announce: Cannot find interface\n"));
+ DEBUG(3,("process_master_announce: No wins subnet !\n"));
return;
}
@@ -299,12 +303,12 @@ static void process_master_announce(struct packet_struct *p,char *buf)
return;
}
- for (work = d->workgrouplist; work; work = work->next)
+ for (work = wins_subnet->workgrouplist; work; work = work->next)
{
- if (AM_MASTER(work) || AM_DOMMST(work) || AM_ANY_MASTER(work))
+ if (AM_MASTER(work) || AM_DOMMST(work))
{
/* merge browse lists with them */
- add_browser_entry(name,0x1d, work->work_group,30,p->ip,True);
+ add_browser_entry(name,0x1d, work->work_group,30,wins_subnet,p->ip,True);
}
}
}
@@ -434,7 +438,7 @@ static void send_backup_list(char *work_name, struct nmb_name *src_name,
#if 0
- for (d = subnetlist; d; d = d->next)
+ for (d = FIRST_SUBNET; d; d = NEXT_SUBNET_INCLUDING_WINS(d))
{
struct work_record *work;
@@ -573,7 +577,7 @@ static void process_reset_browser(struct packet_struct *p,char *buf)
if (state & 0x1)
{
struct subnet_record *d;
- 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)
@@ -594,7 +598,7 @@ static void process_reset_browser(struct packet_struct *p,char *buf)
if (state & 0x2)
{
struct subnet_record *d;
- 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=remove_workgroup(d,work,True));
diff --git a/source/nmbd/nmbd.c b/source/nmbd/nmbd.c
index eefb4162f79..550f3198f7c 100644
--- a/source/nmbd/nmbd.c
+++ b/source/nmbd/nmbd.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
@@ -206,6 +206,13 @@ BOOL reload_services(BOOL test)
load_interfaces();
add_subnet_interfaces();
+ /* Do a sanity check for a misconfigured nmbd */
+ if(lp_wins_support() && *lp_wins_server()) {
+ DEBUG(0,("ERROR: both 'wins support = true' and 'wins server = <server>' \
+cannot be set in the smb.conf file. nmbd aborting.\n"));
+ exit(10);
+ }
+
return(ret);
}
@@ -546,6 +553,7 @@ static void usage(char *pname)
if (strequal(lp_workgroup(),"*")) {
DEBUG(0,("ERROR: a workgroup name of * is no longer supported\n"));
+ exit(1);
}
add_my_subnets(lp_workgroup());
diff --git a/source/nmbsync.c b/source/nmbsync.c
index fa60b3ac35a..7c23c64a96a 100644
--- a/source/nmbsync.c
+++ b/source/nmbsync.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines to synchronise browse lists
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
@@ -140,7 +140,13 @@ void sync_browse_lists(struct subnet_record *d, struct work_record *work,
{
uint32 local_type = local ? SV_TYPE_LOCAL_LIST_ONLY : 0;
- if (!d || !work || !AM_ANY_MASTER(work)) return;
+ if (!d || !work ) return;
+
+ if(d != wins_subnet) {
+ DEBUG(0,
+ ("sync_browse_lists: ERROR sync requested on non-WINS subnet.\n"));
+ return;
+ }
pid = getpid();
uid = getuid();
diff --git a/source/param/loadparm.c b/source/param/loadparm.c
index 961aaa9c982..40611e4c3a3 100644
--- a/source/param/loadparm.c
+++ b/source/param/loadparm.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Parameter loading functions
- Copyright (C) Karl Auer 1993,1994
+ Copyright (C) Karl Auer 1993,1997
Largely re-written by Andrew Tridgell, September 1994
diff --git a/source/param/params.c b/source/param/params.c
index 8030e4ab583..0fdde0348ff 100644
--- a/source/param/params.c
+++ b/source/param/params.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Parameter loading utlities
- Copyright (C) Karl Auer 1993,1994
+ Copyright (C) Karl Auer 1993,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
diff --git a/source/printing/printing.c b/source/printing/printing.c
index d2071ace594..c4dd9803ebe 100644
--- a/source/printing/printing.c
+++ b/source/printing/printing.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
printing routines
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/dir.c b/source/smbd/dir.c
index f3c1ae020e1..2437b8b17e8 100644
--- a/source/smbd/dir.c
+++ b/source/smbd/dir.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Directory handling routines
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/ipc.c b/source/smbd/ipc.c
index 9a80a8d062d..1f1ac8600a0 100644
--- a/source/smbd/ipc.c
+++ b/source/smbd/ipc.c
@@ -3,7 +3,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Inter-process communication and named pipe handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/mangle.c b/source/smbd/mangle.c
index 5fdf31b7a41..96e787b07fb 100644
--- a/source/smbd/mangle.c
+++ b/source/smbd/mangle.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Name mangling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/message.c b/source/smbd/message.c
index 2ef5b246c44..93a2d9d850a 100644
--- a/source/smbd/message.c
+++ b/source/smbd/message.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB messaging
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/password.c b/source/smbd/password.c
index 2c24913c86a..7885fd1bbc9 100644
--- a/source/smbd/password.c
+++ b/source/smbd/password.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Password and authentication handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/pipes.c b/source/smbd/pipes.c
index 06f3aeb0fb0..634d7af7f42 100644
--- a/source/smbd/pipes.c
+++ b/source/smbd/pipes.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Pipe SMB reply routines
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/predict.c b/source/smbd/predict.c
index 7f1692931c9..691d8fbb4e0 100644
--- a/source/smbd/predict.c
+++ b/source/smbd/predict.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
file read prediction routines
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/quotas.c b/source/smbd/quotas.c
index 05b40ada0f2..eba76d4c74b 100644
--- a/source/smbd/quotas.c
+++ b/source/smbd/quotas.c
@@ -3,7 +3,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
support for quotas
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/reply.c b/source/smbd/reply.c
index f532d613b4a..bb75211deb5 100644
--- a/source/smbd/reply.c
+++ b/source/smbd/reply.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Main SMB reply routines
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/server.c b/source/smbd/server.c
index 57611553cc8..0f72efc4788 100644
--- a/source/smbd/server.c
+++ b/source/smbd/server.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Main SMB server routines
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/smbrun.c b/source/smbd/smbrun.c
index d547c796e07..42ce7f60ad0 100644
--- a/source/smbd/smbrun.c
+++ b/source/smbd/smbrun.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
external program running routine
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/smbd/trans2.c b/source/smbd/trans2.c
index 2c0d5903e61..38c7031b665 100644
--- a/source/smbd/trans2.c
+++ b/source/smbd/trans2.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
SMB transaction2 handling
- Copyright (C) Jeremy Allison 1994
+ Copyright (C) Jeremy Allison 1994-1997
Extensively modified by Andrew Tridgell, 1995
diff --git a/source/smbd/uid.c b/source/smbd/uid.c
index 4fa0ed89da7..e2c5f590b7a 100644
--- a/source/smbd/uid.c
+++ b/source/smbd/uid.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
uid/user handling
- Copyright (C) Andrew Tridgell 1992-1995
+ Copyright (C) Andrew Tridgell 1992-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
diff --git a/source/utils/nmblookup.c b/source/utils/nmblookup.c
index c9692768385..582f4eb6db3 100644
--- a/source/utils/nmblookup.c
+++ b/source/utils/nmblookup.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
NBT client - used to lookup netbios names
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/utils/smbpasswd.c b/source/utils/smbpasswd.c
index c79aa15c807..c820ad673a0 100644
--- a/source/utils/smbpasswd.c
+++ b/source/utils/smbpasswd.c
@@ -2,7 +2,7 @@
/*
* Unix SMB/Netbios implementation. Version 1.9. smbpasswd module. Copyright
- * (C) Jeremy Allison 1995.
+ * (C) Jeremy Allison 1995-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 the Free
diff --git a/source/utils/status.c b/source/utils/status.c
index 459349f5eb7..ba7c5f32105 100644
--- a/source/utils/status.c
+++ b/source/utils/status.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
status reporting
- Copyright (C) Andrew Tridgell 1994-1995
+ 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
diff --git a/source/utils/testparm.c b/source/utils/testparm.c
index 7e05283625d..81e69cd76fb 100644
--- a/source/utils/testparm.c
+++ b/source/utils/testparm.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
Test validity of smb.conf
- Copyright (C) Karl Auer 1993, 1994
+ Copyright (C) Karl Auer 1993, 1994-1997
Extensively modified by Andrew Tridgell, 1995
diff --git a/source/utils/testprns.c b/source/utils/testprns.c
index 4709eb06917..4a2ddb7c635 100644
--- a/source/utils/testprns.c
+++ b/source/utils/testprns.c
@@ -2,7 +2,7 @@
Unix SMB/Netbios implementation.
Version 1.9.
test printer setup
- Copyright (C) Karl Auer 1993, 1994
+ Copyright (C) Karl Auer 1993, 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