From 0f1f0ceb9519368188f695e18e2341ccfd1b2d15 Mon Sep 17 00:00:00 2001 From: Samba Release Account Date: Thu, 8 May 1997 01:14:17 +0000 Subject: [PATCH] '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) --- source3/client/client.c | 2 +- source3/client/clientutil.c | 2 +- source3/include/byteorder.h | 2 +- source3/include/charset.h | 2 +- source3/include/includes.h | 2 +- source3/include/kanji.h | 2 +- source3/include/nameserv.h | 19 +++- source3/include/proto.h | 8 +- source3/include/smb.h | 2 +- source3/include/trans2.h | 2 +- source3/include/version.h | 2 +- source3/lib/charcnv.c | 2 +- source3/lib/charset.c | 2 +- source3/lib/fault.c | 2 +- source3/lib/interface.c | 2 +- source3/lib/kanji.c | 2 +- source3/lib/replace.c | 2 +- source3/lib/system.c | 2 +- source3/lib/time.c | 2 +- source3/lib/username.c | 2 +- source3/lib/util.c | 2 +- source3/libsmb/namequery.c | 2 +- source3/libsmb/nmblib.c | 2 +- source3/libsmb/smbencrypt.c | 2 +- source3/locking/locking.c | 2 +- source3/locking/shmem.c | 2 +- source3/nameannounce.c | 190 ++++++++++++++++++++++-------------- source3/namebrowse.c | 60 +++++------- source3/namedbname.c | 59 +++++------ source3/namedbresp.c | 4 +- source3/namedbserver.c | 4 +- source3/namedbsubnet.c | 62 ++++++------ source3/namedbwork.c | 55 +---------- source3/nameelect.c | 39 +++++--- source3/namelogon.c | 2 +- source3/namepacket.c | 2 +- source3/nameresp.c | 28 +++--- source3/nameserv.c | 77 +++++++-------- source3/nameservreply.c | 6 +- source3/nameservresp.c | 4 +- source3/namework.c | 26 ++--- source3/nmbd/nmbd.c | 10 +- source3/nmbsync.c | 10 +- source3/param/loadparm.c | 2 +- source3/param/params.c | 2 +- source3/printing/printing.c | 2 +- source3/smbd/dir.c | 2 +- source3/smbd/ipc.c | 2 +- source3/smbd/mangle.c | 2 +- source3/smbd/message.c | 2 +- source3/smbd/password.c | 2 +- source3/smbd/pipes.c | 2 +- source3/smbd/predict.c | 2 +- source3/smbd/quotas.c | 2 +- source3/smbd/reply.c | 2 +- source3/smbd/server.c | 2 +- source3/smbd/smbrun.c | 2 +- source3/smbd/trans2.c | 2 +- source3/smbd/uid.c | 2 +- source3/utils/nmblookup.c | 2 +- source3/utils/smbpasswd.c | 2 +- source3/utils/status.c | 2 +- source3/utils/testparm.c | 2 +- source3/utils/testprns.c | 2 +- 64 files changed, 392 insertions(+), 363 deletions(-) diff --git a/source3/client/client.c b/source3/client/client.c index ac6878786af..a9e81cfd64e 100644 --- a/source3/client/client.c +++ b/source3/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/source3/client/clientutil.c b/source3/client/clientutil.c index 3058f654741..d1407332ff0 100644 --- a/source3/client/clientutil.c +++ b/source3/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/source3/include/byteorder.h b/source3/include/byteorder.h index 51f368e61b5..a55789a4036 100644 --- a/source3/include/byteorder.h +++ b/source3/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/source3/include/charset.h b/source3/include/charset.h index 72a8810e424..5f5e2016ee1 100644 --- a/source3/include/charset.h +++ b/source3/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/source3/include/includes.h b/source3/include/includes.h index 249e4940a91..e1ed3a58168 100644 --- a/source3/include/includes.h +++ b/source3/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/source3/include/kanji.h b/source3/include/kanji.h index 6bc88b704db..ee3ba7e09a6 100644 --- a/source3/include/kanji.h +++ b/source3/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/source3/include/nameserv.h b/source3/include/nameserv.h index 42bfe83dcc3..12ddd033c8a 100644 --- a/source3/include/nameserv.h +++ b/source3/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/source3/include/proto.h b/source3/include/proto.h index 63f56228036..973b1a15f39 100644 --- a/source3/include/proto.h +++ b/source3/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/source3/include/smb.h b/source3/include/smb.h index fc9ac2048e5..a6be0f16d5b 100644 --- a/source3/include/smb.h +++ b/source3/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/source3/include/trans2.h b/source3/include/trans2.h index b99f1e6028d..70285358bc4 100644 --- a/source3/include/trans2.h +++ b/source3/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/source3/include/version.h b/source3/include/version.h index 16411094543..cc69bef5216 100644 --- a/source3/include/version.h +++ b/source3/include/version.h @@ -1 +1 @@ -#define VERSION "1.9.16p12alpha" +#define VERSION "1.9.17alpha1" diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c index 4654101a5c3..cf4ae4edb62 100644 --- a/source3/lib/charcnv.c +++ b/source3/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/source3/lib/charset.c b/source3/lib/charset.c index 65e0cc9a347..1c396db241d 100644 --- a/source3/lib/charset.c +++ b/source3/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/source3/lib/fault.c b/source3/lib/fault.c index 9bc2eca7e02..61715a4f225 100644 --- a/source3/lib/fault.c +++ b/source3/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/source3/lib/interface.c b/source3/lib/interface.c index 0e2a13e7b93..444d511426b 100644 --- a/source3/lib/interface.c +++ b/source3/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/source3/lib/kanji.c b/source3/lib/kanji.c index a77bdea73f0..479763fd406 100644 --- a/source3/lib/kanji.c +++ b/source3/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/source3/lib/replace.c b/source3/lib/replace.c index c7340bbadd2..67c18a15237 100644 --- a/source3/lib/replace.c +++ b/source3/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/source3/lib/system.c b/source3/lib/system.c index 86c4c28a593..521f5e304ce 100644 --- a/source3/lib/system.c +++ b/source3/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/source3/lib/time.c b/source3/lib/time.c index 215c28a2108..d16552b61e2 100644 --- a/source3/lib/time.c +++ b/source3/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/source3/lib/username.c b/source3/lib/username.c index 07987fafb30..b8d152c83fd 100644 --- a/source3/lib/username.c +++ b/source3/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/source3/lib/util.c b/source3/lib/util.c index 53b24173d51..3315f1a41a1 100644 --- a/source3/lib/util.c +++ b/source3/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/source3/libsmb/namequery.c b/source3/libsmb/namequery.c index fc02add5b50..55f70be1222 100644 --- a/source3/libsmb/namequery.c +++ b/source3/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/source3/libsmb/nmblib.c b/source3/libsmb/nmblib.c index a0f93331d95..89a5cf9534b 100644 --- a/source3/libsmb/nmblib.c +++ b/source3/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/source3/libsmb/smbencrypt.c b/source3/libsmb/smbencrypt.c index ee2b17ae5d1..8bb21cfed20 100644 --- a/source3/libsmb/smbencrypt.c +++ b/source3/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/source3/locking/locking.c b/source3/locking/locking.c index ce96aa01cf3..7c23e5b3cab 100644 --- a/source3/locking/locking.c +++ b/source3/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/source3/locking/shmem.c b/source3/locking/shmem.c index 9f7b985e67a..2c02982d04a 100644 --- a/source3/locking/shmem.c +++ b/source3/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/source3/nameannounce.c b/source3/nameannounce.c index 8f2005a73d7..b46436168c3 100644 --- a/source3/nameannounce.c +++ b/source3/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/source3/namebrowse.c b/source3/namebrowse.c index b891f51718e..1dd293d27be 100644 --- a/source3/namebrowse.c +++ b/source3/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/source3/namedbname.c b/source3/namedbname.c index d27bcf81586..5c514c263ff 100644 --- a/source3/namedbname.c +++ b/source3/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/source3/namedbresp.c b/source3/namedbresp.c index 6755de6534b..98f8ca774bc 100644 --- a/source3/namedbresp.c +++ b/source3/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/source3/namedbserver.c b/source3/namedbserver.c index afb1dc14315..9c7bb664ab2 100644 --- a/source3/namedbserver.c +++ b/source3/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/source3/namedbsubnet.c b/source3/namedbsubnet.c index 144729e1e17..25c369ab1c8 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) diff --git a/source3/namedbwork.c b/source3/namedbwork.c index 80a670fea84..8c249cc82cb 100644 --- a/source3/namedbwork.c +++ b/source3/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/source3/nameelect.c b/source3/nameelect.c index 4aacee55d41..02fda9f817b 100644 --- a/source3/nameelect.c +++ b/source3/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/source3/namelogon.c b/source3/namelogon.c index f3afd4273cb..1c118c85418 100644 --- a/source3/namelogon.c +++ b/source3/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/source3/namepacket.c b/source3/namepacket.c index 09ee5dd79e2..c9db43dcc5f 100644 --- a/source3/namepacket.c +++ b/source3/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/source3/nameresp.c b/source3/nameresp.c index fab16038ce0..3128b00ac58 100644 --- a/source3/nameresp.c +++ b/source3/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/source3/nameserv.c b/source3/nameserv.c index ac2dac1683c..022b5521a21 100644 --- a/source3/nameserv.c +++ b/source3/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/source3/nameservreply.c b/source3/nameservreply.c index 001695b3fbd..e1738007df1 100644 --- a/source3/nameservreply.c +++ b/source3/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/source3/nameservresp.c b/source3/nameservresp.c index 30541034b81..565a1565656 100644 --- a/source3/nameservresp.c +++ b/source3/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/source3/namework.c b/source3/namework.c index 1d3ff9e0ee3..218a7a349ef 100644 --- a/source3/namework.c +++ b/source3/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/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index eefb4162f79..550f3198f7c 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/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 = ' \ +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/source3/nmbsync.c b/source3/nmbsync.c index fa60b3ac35a..7c23c64a96a 100644 --- a/source3/nmbsync.c +++ b/source3/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/source3/param/loadparm.c b/source3/param/loadparm.c index 961aaa9c982..40611e4c3a3 100644 --- a/source3/param/loadparm.c +++ b/source3/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/source3/param/params.c b/source3/param/params.c index 8030e4ab583..0fdde0348ff 100644 --- a/source3/param/params.c +++ b/source3/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/source3/printing/printing.c b/source3/printing/printing.c index d2071ace594..c4dd9803ebe 100644 --- a/source3/printing/printing.c +++ b/source3/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/source3/smbd/dir.c b/source3/smbd/dir.c index f3c1ae020e1..2437b8b17e8 100644 --- a/source3/smbd/dir.c +++ b/source3/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/source3/smbd/ipc.c b/source3/smbd/ipc.c index 9a80a8d062d..1f1ac8600a0 100644 --- a/source3/smbd/ipc.c +++ b/source3/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/source3/smbd/mangle.c b/source3/smbd/mangle.c index 5fdf31b7a41..96e787b07fb 100644 --- a/source3/smbd/mangle.c +++ b/source3/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/source3/smbd/message.c b/source3/smbd/message.c index 2ef5b246c44..93a2d9d850a 100644 --- a/source3/smbd/message.c +++ b/source3/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/source3/smbd/password.c b/source3/smbd/password.c index 2c24913c86a..7885fd1bbc9 100644 --- a/source3/smbd/password.c +++ b/source3/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/source3/smbd/pipes.c b/source3/smbd/pipes.c index 06f3aeb0fb0..634d7af7f42 100644 --- a/source3/smbd/pipes.c +++ b/source3/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/source3/smbd/predict.c b/source3/smbd/predict.c index 7f1692931c9..691d8fbb4e0 100644 --- a/source3/smbd/predict.c +++ b/source3/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/source3/smbd/quotas.c b/source3/smbd/quotas.c index 05b40ada0f2..eba76d4c74b 100644 --- a/source3/smbd/quotas.c +++ b/source3/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/source3/smbd/reply.c b/source3/smbd/reply.c index f532d613b4a..bb75211deb5 100644 --- a/source3/smbd/reply.c +++ b/source3/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/source3/smbd/server.c b/source3/smbd/server.c index 57611553cc8..0f72efc4788 100644 --- a/source3/smbd/server.c +++ b/source3/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/source3/smbd/smbrun.c b/source3/smbd/smbrun.c index d547c796e07..42ce7f60ad0 100644 --- a/source3/smbd/smbrun.c +++ b/source3/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/source3/smbd/trans2.c b/source3/smbd/trans2.c index 2c0d5903e61..38c7031b665 100644 --- a/source3/smbd/trans2.c +++ b/source3/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/source3/smbd/uid.c b/source3/smbd/uid.c index 4fa0ed89da7..e2c5f590b7a 100644 --- a/source3/smbd/uid.c +++ b/source3/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/source3/utils/nmblookup.c b/source3/utils/nmblookup.c index c9692768385..582f4eb6db3 100644 --- a/source3/utils/nmblookup.c +++ b/source3/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/source3/utils/smbpasswd.c b/source3/utils/smbpasswd.c index c79aa15c807..c820ad673a0 100644 --- a/source3/utils/smbpasswd.c +++ b/source3/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/source3/utils/status.c b/source3/utils/status.c index 459349f5eb7..ba7c5f32105 100644 --- a/source3/utils/status.c +++ b/source3/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/source3/utils/testparm.c b/source3/utils/testparm.c index 7e05283625d..81e69cd76fb 100644 --- a/source3/utils/testparm.c +++ b/source3/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/source3/utils/testprns.c b/source3/utils/testprns.c index 4709eb06917..4a2ddb7c635 100644 --- a/source3/utils/testprns.c +++ b/source3/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 -- 2.34.1