Unix SMB/Netbios implementation.
Version 1.9.
NBT netbios routines and daemon - version 2
- Copyright (C) Andrew Tridgell 1994-1997
- Copyright (C) Luke Kenneth Casson Leighton 1994-1997
- Copyright (C) Jeremy Allison 1994-1997
+ Copyright (C) Andrew Tridgell 1994-1998
+ Copyright (C) Luke Kenneth Casson Leighton 1994-1998
+ Copyright (C) Jeremy Allison 1994-1998
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
extern int ClientNMB;
-extern int DEBUGLEVEL;
-
-extern pstring myname;
-extern fstring myworkgroup;
+extern pstring global_myname;
+extern fstring global_myworkgroup;
extern char **my_netbios_names;
extern uint16 samba_nb_type;
extern struct in_addr ipzero;
static void add_workgroup(struct subnet_record *subrec, struct work_record *work)
{
- struct work_record *w2;
-
- work->subnet = subrec;
-
- if (!subrec->workgrouplist)
- {
- subrec->workgrouplist = work;
- work->prev = NULL;
- work->next = NULL;
- return;
- }
-
- for (w2 = subrec->workgrouplist; w2->next; w2 = w2->next)
- ;
-
- w2->next = work;
- work->next = NULL;
- work->prev = w2;
-
- subrec->work_changed = True;
+ work->subnet = subrec;
+ DLIST_ADD(subrec->workgrouplist, work);
+ subrec->work_changed = True;
}
/****************************************************************************
Create an empty workgroup.
**************************************************************************/
-static struct work_record *create_workgroup(char *name, int ttl)
+static struct work_record *create_workgroup(const char *name, int ttl)
{
struct work_record *work;
struct subnet_record *subrec;
DEBUG(0,("create_workgroup: malloc fail !\n"));
return NULL;
}
- bzero((char *)work, sizeof(*work));
+ memset((char *)work, '\0', sizeof(*work));
StrnCpy(work->work_group,name,sizeof(work->work_group)-1);
work->serverlist = NULL;
/* WfWg uses 01040b01 */
/* Win95 uses 01041501 */
/* NTAS uses ???????? */
- work->ElectionCriterion = (MAINTAIN_LIST)|(ELECTION_VERSION<<8);
+ work->ElectionCriterion = (MAINTAIN_LIST)|(BROWSER_ELECTION_VERSION<<8);
work->ElectionCriterion |= (lp_os_level() << 24);
if (lp_domain_master())
work->ElectionCriterion |= 0x80;
if (subrec->workgrouplist == work)
subrec->workgrouplist = work->next;
- free((char *)work);
+ ZERO_STRUCTP(work);
+ SAFE_FREE(work);
}
subrec->work_changed = True;
**************************************************************************/
struct work_record *find_workgroup_on_subnet(struct subnet_record *subrec,
- fstring name)
+ const char *name)
{
struct work_record *ret;
{
if (!strcmp(ret->work_group,name))
{
- DEBUG(4, ("found\n"));
+ DEBUGADD(4, ("found.\n"));
return(ret);
}
}
- DEBUG(4, ("not found\n"));
+ DEBUGADD(4, ("not found.\n"));
return NULL;
}
**************************************************************************/
struct work_record *create_workgroup_on_subnet(struct subnet_record *subrec,
- fstring name, int ttl)
+ const char *name, int ttl)
{
struct work_record *work = NULL;
struct nmb_name *nmbname)
{
DEBUG(0,("fail_register: Failed to register name %s on subnet %s.\n",
- namestr(nmbname), subrec->subnet_name));
+ nmb_namestr(nmbname), subrec->subnet_name));
}
/****************************************************************************
{
int i;
- if(!strequal(myworkgroup, work->work_group))
+ if(!strequal(global_myworkgroup, work->work_group))
return;
/* If this is a broadcast subnet then start elections on it
/* Register the WORKGROUP<0> and WORKGROUP<1e> names on the network. */
- register_name(subrec,myworkgroup,0x0,samba_nb_type|NB_GROUP,
+ register_name(subrec,global_myworkgroup,0x0,samba_nb_type|NB_GROUP,
NULL,
fail_register,NULL);
- register_name(subrec,myworkgroup,0x1e,samba_nb_type|NB_GROUP,
+ register_name(subrec,global_myworkgroup,0x1e,samba_nb_type|NB_GROUP,
NULL,
fail_register,NULL);
int stype = lp_default_server_announce() | (lp_local_master() ?
SV_TYPE_POTENTIAL_BROWSER : 0 );
- if(!strequal(myname, name))
+ if(!strequal(global_myname, name))
stype &= ~(SV_TYPE_MASTER_BROWSER|SV_TYPE_POTENTIAL_BROWSER|
SV_TYPE_DOMAIN_MASTER|SV_TYPE_DOMAIN_MEMBER);
create_server_on_workgroup(work,name,stype|SV_TYPE_LOCAL_LIST_ONLY,
- PERMANENT_TTL, lp_serverstring());
+ PERMANENT_TTL,
+ string_truncate(lp_serverstring(), MAX_SERVER_STRING_LENGTH));
DEBUG(3,("initiate_myworkgroup_startup: Added server name entry %s \
on subnet %s\n", name, subrec->subnet_name));
}
if (subrec->workgrouplist)
{
struct work_record *work;
-
- DEBUG(debuglevel,("dump_workgroups: dump workgroup on subnet %15s: ", subrec->subnet_name));
- DEBUG(debuglevel,(" netmask=%15s:\n", inet_ntoa(subrec->mask_ip)));
+
+ if( DEBUGLVL( debuglevel ) )
+ {
+ dbgtext( "dump_workgroups()\n " );
+ dbgtext( "dump workgroup on subnet %15s: ", subrec->subnet_name );
+ dbgtext( "netmask=%15s:\n", inet_ntoa(subrec->mask_ip) );
+ }
for (work = subrec->workgrouplist; work; work = work->next)
{
- DEBUG(debuglevel,("\t%s(%d) current master browser = %s\n", work->work_group,
- work->token,
- *work->local_master_browser_name ? work->local_master_browser_name : "UNKNOWN" ));
+ DEBUGADD( debuglevel, ( "\t%s(%d) current master browser = %s\n",
+ work->work_group,
+ work->token,
+ *work->local_master_browser_name
+ ? work->local_master_browser_name : "UNKNOWN" ) );
if (work->serverlist)
{
struct server_record *servrec;
for (servrec = work->serverlist; servrec; servrec = servrec->next)
{
- DEBUG(debuglevel,("\t\t%s %8x (%s)\n",
- servrec->serv.name, servrec->serv.type, servrec->serv.comment));
+ DEBUGADD( debuglevel, ( "\t\t%s %8x (%s)\n",
+ servrec->serv.name,
+ servrec->serv.type,
+ servrec->serv.comment ) );
}
}
}