static struct work_record *create_workgroup(const char *name, int ttl) { struct work_record *work; struct subnet_record *subrec; int t = -1; if((work = SMB_MALLOC_P(struct work_record)) == NULL) { DEBUG(0,("create_workgroup: malloc fail !\n")); return NULL; } memset((char *)work, '\0', sizeof(*work)); name_to_unstring(work->work_group, name); work->serverlist = NULL; work->RunningElection = False; work->ElectionCount = 0; work->announce_interval = 0; work->needelection = False; work->needannounce = True; work->lastannounce_time = time(NULL); work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE; work->dom_state = DOMAIN_NONE; work->log_state = LOGON_NONE; work->death_time = (ttl != PERMANENT_TTL) ? time(NULL)+(ttl*3) : PERMANENT_TTL; /* Make sure all token representations of workgroups are unique. */ for (subrec = FIRST_SUBNET; subrec && (t == -1); subrec = NEXT_SUBNET_INCLUDING_UNICAST(subrec)) { struct work_record *w; for (w = subrec->workgrouplist; w && t == -1; w = w->next) { if (strequal(w->work_group, work->work_group)) t = w->token; } } if (t == -1) work->token = ++workgroup_count; else work->token = t; /* No known local master browser as yet. */ *work->local_master_browser_name = '\0'; /* No known domain master browser as yet. */ *work->dmb_name.name = '\0'; zero_ip_v4(&work->dmb_addr); /* WfWg uses 01040b01 */ /* Win95 uses 01041501 */ /* NTAS uses ???????? */ work->ElectionCriterion = (MAINTAIN_LIST)|(BROWSER_ELECTION_VERSION<<8); work->ElectionCriterion |= (lp_os_level() << 24); if (lp_domain_master()) work->ElectionCriterion |= 0x80; return work; }
void process_master_browser_announce(struct subnet_record *subrec, struct packet_struct *p,char *buf) { char *local_master_name = buf; struct work_record *work; struct browse_cache_record *browrec; local_master_name[15] = 0; DEBUG(3,("process_master_browser_announce: Local master announce from %s IP %s.\n", local_master_name, inet_ntoa(p->ip))); if (!lp_domain_master()) { DEBUG(0,("process_master_browser_announce: Not configured as domain \ master - ignoring master announce.\n")); return; }
void process_master_browser_announce(struct subnet_record *subrec, struct packet_struct *p,char *buf) { unstring local_master_name; struct work_record *work; struct browse_cache_record *browrec; START_PROFILE(master_browser_announce); pull_ascii_nstring(local_master_name,sizeof(local_master_name),buf); DEBUG(3,("process_master_browser_announce: Local master announce from %s IP %s.\n", local_master_name, inet_ntoa(p->ip))); if (!lp_domain_master()) { DEBUG(0,("process_master_browser_announce: Not configured as domain \ master - ignoring master announce.\n")); goto done; }