diff options
author | Andrew Bartlett <abartlet@samba.org> | 2011-06-24 16:26:23 +1000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2011-06-24 16:26:23 +1000 |
commit | 6da26870e0ae5acd6ff49a30ec2f6886b44d095e (patch) | |
tree | 850c71039563c16a5d563c47e7ba2ab645baf198 /source3/nmbd | |
parent | 6925a799d04c6fa59dd2ddef1f5510f9bb7d17d1 (diff) | |
parent | 2610c05b5b95cc7036b3d6dfb894c6cfbdb68483 (diff) | |
download | samba-6da26870e0ae5acd6ff49a30ec2f6886b44d095e.tar.gz samba-6da26870e0ae5acd6ff49a30ec2f6886b44d095e.tar.bz2 samba-6da26870e0ae5acd6ff49a30ec2f6886b44d095e.zip |
Merge 2610c05b5b95cc7036b3d6dfb894c6cfbdb68483 as Samba-4.0alpha16
Diffstat (limited to 'source3/nmbd')
-rw-r--r-- | source3/nmbd/nmbd.c | 6 | ||||
-rw-r--r-- | source3/nmbd/nmbd.h | 25 | ||||
-rw-r--r-- | source3/nmbd/nmbd_become_dmb.c | 12 | ||||
-rw-r--r-- | source3/nmbd/nmbd_become_lmb.c | 30 | ||||
-rw-r--r-- | source3/nmbd/nmbd_browsesync.c | 12 | ||||
-rw-r--r-- | source3/nmbd/nmbd_elections.c | 10 | ||||
-rw-r--r-- | source3/nmbd/nmbd_incomingdgrams.c | 36 | ||||
-rw-r--r-- | source3/nmbd/nmbd_incomingrequests.c | 10 | ||||
-rw-r--r-- | source3/nmbd/nmbd_logonnames.c | 8 | ||||
-rw-r--r-- | source3/nmbd/nmbd_packets.c | 39 | ||||
-rw-r--r-- | source3/nmbd/nmbd_processlogon.c | 31 | ||||
-rw-r--r-- | source3/nmbd/nmbd_proto.h | 47 | ||||
-rw-r--r-- | source3/nmbd/nmbd_sendannounce.c | 34 | ||||
-rw-r--r-- | source3/nmbd/nmbd_subnetdb.c | 2 | ||||
-rw-r--r-- | source3/nmbd/nmbd_synclists.c | 34 | ||||
-rw-r--r-- | source3/nmbd/nmbd_winsserver.c | 7 | ||||
-rw-r--r-- | source3/nmbd/nmbd_workgroupdb.c | 4 |
17 files changed, 193 insertions, 154 deletions
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index f8108d9d52..d8a4b17a07 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/nmbd/nmbd.c @@ -240,8 +240,8 @@ static void reload_interfaces(time_t t) continue; } - ip = ((struct sockaddr_in *)(void *)&iface->ip)->sin_addr; - nmask = ((struct sockaddr_in *)(void *) + ip = ((const struct sockaddr_in *)(const void *)&iface->ip)->sin_addr; + nmask = ((const struct sockaddr_in *)(const void *) &iface->netmask)->sin_addr; /* @@ -250,7 +250,7 @@ static void reload_interfaces(time_t t) * ignore it here. JRA. */ - if (is_loopback_addr((struct sockaddr *)(void *)&iface->ip)) { + if (is_loopback_addr((const struct sockaddr *)(const void *)&iface->ip)) { DEBUG(2,("reload_interfaces: Ignoring loopback " "interface %s\n", print_sockaddr(str, sizeof(str), &iface->ip) )); diff --git a/source3/nmbd/nmbd.h b/source3/nmbd/nmbd.h index e100e7d693..47940e1940 100644 --- a/source3/nmbd/nmbd.h +++ b/source3/nmbd/nmbd.h @@ -1,6 +1,31 @@ +/* + * Unix SMB/CIFS implementation. + * NBT netbios routines and daemon - version 2 + * + * Copyright (C) Guenther Deschner 2011 + * + * 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 Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _NMBD_NMBD_H_ +#define _NMBD_NMBD_H_ + #ifndef HAVE_PIPE #define SYNC_DNS 1 #endif #include "libsmb/nmblib.h" #include "nmbd/nmbd_proto.h" + +#endif /* _NMBD_NMBD_H_ */ diff --git a/source3/nmbd/nmbd_become_dmb.c b/source3/nmbd/nmbd_become_dmb.c index 160bcb3c33..276c381f6c 100644 --- a/source3/nmbd/nmbd_become_dmb.c +++ b/source3/nmbd/nmbd_become_dmb.c @@ -51,10 +51,10 @@ workgroup %s on subnet %s\n", failname, subrec->subnet_name)); /* Set the state back to DOMAIN_NONE. */ work->dom_state = DOMAIN_NONE; - if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) { + if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) { DEBUG(0,("become_domain_master_fail: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), work->work_group, subrec->subnet_name)); + lp_netbios_name(), work->work_group, subrec->subnet_name)); return; } @@ -92,10 +92,10 @@ workgroup %s on subnet %s\n", regname, subrec->subnet_name)); return; } - if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) { + if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) { DEBUG(0,("become_domain_master_stage2: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), regname, subrec->subnet_name)); + lp_netbios_name(), regname, subrec->subnet_name)); work->dom_state = DOMAIN_NONE; return; } @@ -110,7 +110,7 @@ in workgroup %s on subnet %s\n", subrec->work_changed = True; if( DEBUGLVL( 0 ) ) { - dbgtext( "*****\n\nSamba server %s ", global_myname() ); + dbgtext( "*****\n\nSamba server %s ", lp_netbios_name() ); dbgtext( "is now a domain master browser for " ); dbgtext( "workgroup %s ", work->work_group ); dbgtext( "on subnet %s\n\n*****\n", subrec->subnet_name ); @@ -126,7 +126,7 @@ in workgroup %s on subnet %s\n", will stop us syncing with ourself if we are also a local master browser. */ - make_nmb_name(&nmbname, global_myname(), 0x20); + make_nmb_name(&nmbname, lp_netbios_name(), 0x20); work->dmb_name = nmbname; diff --git a/source3/nmbd/nmbd_become_lmb.c b/source3/nmbd/nmbd_become_lmb.c index ffd92cf0d8..f94efd0371 100644 --- a/source3/nmbd/nmbd_become_lmb.c +++ b/source3/nmbd/nmbd_become_lmb.c @@ -85,10 +85,10 @@ subnet %s.\n", workgroup_name, subrec->subnet_name )); return; } - if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) { + if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) { DEBUG(0,("reset_workgroup_state: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), work->work_group, subrec->subnet_name)); + lp_netbios_name(), work->work_group, subrec->subnet_name)); work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE; return; } @@ -149,7 +149,7 @@ static void unbecome_local_master_success(struct subnet_record *subrec, if( DEBUGLVL( 0 ) ) { dbgtext( "*****\n\n" ); - dbgtext( "Samba name server %s ", global_myname() ); + dbgtext( "Samba name server %s ", lp_netbios_name() ); dbgtext( "has stopped being a local master browser " ); dbgtext( "for workgroup %s ", relname ); dbgtext( "on subnet %s\n\n*****\n", subrec->subnet_name ); @@ -185,7 +185,7 @@ Removing from namelist anyway.\n", nmb_namestr(fail_name))); if( DEBUGLVL( 0 ) ) { dbgtext( "*****\n\n" ); - dbgtext( "Samba name server %s ", global_myname() ); + dbgtext( "Samba name server %s ", lp_netbios_name() ); dbgtext( "has stopped being a local master browser " ); dbgtext( "for workgroup %s ", failname ); dbgtext( "on subnet %s\n\n*****\n", subrec->subnet_name ); @@ -280,10 +280,10 @@ void unbecome_local_master_browser(struct subnet_record *subrec, struct work_rec DEBUG(2,("unbecome_local_master_browser: unbecoming local master for workgroup %s \ on subnet %s\n",work->work_group, subrec->subnet_name)); - if(find_server_in_workgroup( work, global_myname()) == NULL) { + if(find_server_in_workgroup( work, lp_netbios_name()) == NULL) { DEBUG(0,("unbecome_local_master_browser: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), work->work_group, subrec->subnet_name)); + lp_netbios_name(), work->work_group, subrec->subnet_name)); work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE; return; } @@ -342,10 +342,10 @@ workgroup %s on subnet %s\n", regname, subrec->subnet_name)); return; } - if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) { + if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) { DEBUG(0,("become_local_master_stage2: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), regname, subrec->subnet_name)); + lp_netbios_name(), regname, subrec->subnet_name)); work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE; return; } @@ -363,7 +363,7 @@ on subnet %s\n", work->work_group, subrec->subnet_name)); subrec->work_changed = True; /* Add this name to the workgroup as local master browser. */ - set_workgroup_local_master_browser_name( work, global_myname()); + set_workgroup_local_master_browser_name( work, lp_netbios_name()); /* Count the number of servers we have on our list. If it's less than 10 (just a heuristic) request the servers @@ -396,7 +396,7 @@ on subnet %s\n", work->work_group, subrec->subnet_name)); if( DEBUGLVL( 0 ) ) { dbgtext( "*****\n\n" ); - dbgtext( "Samba name server %s ", global_myname() ); + dbgtext( "Samba name server %s ", lp_netbios_name() ); dbgtext( "is now a local master browser " ); dbgtext( "for workgroup %s ", work->work_group ); dbgtext( "on subnet %s\n\n*****\n", subrec->subnet_name ); @@ -487,10 +487,10 @@ workgroup %s on subnet %s\n", work_name, subrec->subnet_name)); return; } - if(find_server_in_workgroup(work, global_myname()) == NULL) { + if(find_server_in_workgroup(work, lp_netbios_name()) == NULL) { DEBUG(0,("become_local_master_fail1: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), work->work_group, subrec->subnet_name)); + lp_netbios_name(), work->work_group, subrec->subnet_name)); return; } @@ -527,10 +527,10 @@ void become_local_master_browser(struct subnet_record *subrec, struct work_recor return; } - if(find_server_in_workgroup( work, global_myname()) == NULL) { + if(find_server_in_workgroup( work, lp_netbios_name()) == NULL) { DEBUG(0,("become_local_master_browser: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), work->work_group, subrec->subnet_name)); + lp_netbios_name(), work->work_group, subrec->subnet_name)); return; } @@ -554,7 +554,7 @@ in workgroup %s on subnet %s\n", userdata->copy_fn = NULL; userdata->free_fn = NULL; userdata->userdata_len = strlen(work->work_group)+1; - overmalloc_safe_strcpy(userdata->data, work->work_group, size - sizeof(*userdata) - 1); + strlcpy(userdata->data, work->work_group, size - sizeof(*userdata)); /* Register the special browser group name. */ register_name(subrec, MSBROWSE, 0x01, samba_nb_type|NB_GROUP, diff --git a/source3/nmbd/nmbd_browsesync.c b/source3/nmbd/nmbd_browsesync.c index 3dc89b5026..c6ded584e5 100644 --- a/source3/nmbd/nmbd_browsesync.c +++ b/source3/nmbd/nmbd_browsesync.c @@ -119,7 +119,7 @@ static void announce_local_master_browser_to_domain_master_browser( struct work_ SCVAL(p,0,ANN_MasterAnnouncement); p++; - unstrcpy(myname, global_myname()); + unstrcpy(myname, lp_netbios_name()); strupper_m(myname); myname[15]='\0'; /* The call below does CH_UNIX -> CH_DOS conversion. JRA */ @@ -137,7 +137,7 @@ static void announce_local_master_browser_to_domain_master_browser( struct work_ /* Target name for send_mailslot must be in UNIX charset. */ pull_ascii_nstring(dmb_name, sizeof(dmb_name), work->dmb_name.name); send_mailslot(True, BROWSE_MAILSLOT, outbuf,PTR_DIFF(p,outbuf), - global_myname(), 0x0, dmb_name, 0x0, + lp_netbios_name(), 0x0, dmb_name, 0x0, work->dmb_addr, FIRST_SUBNET->myip, DGRAM_PORT); } @@ -330,7 +330,7 @@ static void find_domain_master_name_query_success(struct subnet_record *subrec, userdata->copy_fn = NULL; userdata->free_fn = NULL; userdata->userdata_len = strlen(work->work_group)+1; - overmalloc_safe_strcpy(userdata->data, work->work_group, size - sizeof(*userdata) - 1); + strlcpy(userdata->data, work->work_group, size - sizeof(*userdata)); node_status( subrec, &nmbname, answer_ip, domain_master_node_status_success, @@ -435,7 +435,7 @@ static void get_domain_master_name_node_status_success(struct subnet_record *sub if(!(nb_flags & NB_GROUP) && (name_type == 0x00) && server_name[0] == 0) { /* this is almost certainly the server netbios name */ - unstrcpy(server_name, qname); + strlcpy(server_name, qname, sizeof(server_name)); continue; } @@ -461,7 +461,9 @@ static void get_domain_master_name_node_status_success(struct subnet_record *sub return; /* remember who the master is */ - unstrcpy(work->local_master_browser_name, server_name); + strlcpy(work->local_master_browser_name, + server_name, + sizeof(work->local_master_browser_name)); make_nmb_name(&nmbname, server_name, 0x20); work->dmb_name = nmbname; work->dmb_addr = from_ip; diff --git a/source3/nmbd/nmbd_elections.c b/source3/nmbd/nmbd_elections.c index 899c273fe0..ac0d873512 100644 --- a/source3/nmbd/nmbd_elections.c +++ b/source3/nmbd/nmbd_elections.c @@ -57,7 +57,7 @@ static void send_election_dgram(struct subnet_record *subrec, const char *workgr p = skip_string(outbuf,sizeof(outbuf),p); send_mailslot(False, BROWSE_MAILSLOT, outbuf, PTR_DIFF(p,outbuf), - global_myname(), 0, + lp_netbios_name(), 0, workgroup_name, 0x1e, subrec->bcast_ip, subrec->myip, DGRAM_PORT); } @@ -194,7 +194,7 @@ yet registered on subnet %s\n", nmb_namestr(&nmbname), subrec->subnet_name )); } send_election_dgram(subrec, work->work_group, work->ElectionCriterion, - t - StartupTime, global_myname()); + t - StartupTime, lp_netbios_name()); if (work->ElectionCount++ >= 4) { /* Won election (4 packets were sent out uncontested. */ @@ -231,7 +231,7 @@ static bool win_election(struct work_record *work, int version, version, ELECTION_VERSION, criterion, mycriterion, timeup, mytimeup, - server_name, global_myname())); + server_name, lp_netbios_name())); if (version > ELECTION_VERSION) return(False); @@ -248,7 +248,7 @@ static bool win_election(struct work_record *work, int version, if (timeup < mytimeup) return(True); - if (StrCaseCmp(global_myname(), server_name) > 0) + if (strcasecmp_m(lp_netbios_name(), server_name) > 0) return(False); return(True); @@ -258,7 +258,7 @@ static bool win_election(struct work_record *work, int version, Process an incoming election datagram packet. ******************************************************************/ -void process_election(struct subnet_record *subrec, struct packet_struct *p, char *buf) +void process_election(struct subnet_record *subrec, struct packet_struct *p, const char *buf) { struct dgram_packet *dgram = &p->packet.dgram; int version = CVAL(buf,0); diff --git a/source3/nmbd/nmbd_incomingdgrams.c b/source3/nmbd/nmbd_incomingdgrams.c index 6993e18358..582848c1fc 100644 --- a/source3/nmbd/nmbd_incomingdgrams.c +++ b/source3/nmbd/nmbd_incomingdgrams.c @@ -95,7 +95,7 @@ void tell_become_backup(void) Process an incoming host announcement packet. *******************************************************************/ -void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf) +void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf) { struct dgram_packet *dgram = &p->packet.dgram; int ttl = IVAL(buf,1)/1000; @@ -144,7 +144,7 @@ void process_host_announce(struct subnet_record *subrec, struct packet_struct *p * to be our primary workgroup name. */ - if(strequal(work_name, global_myname())) + if(strequal(work_name, lp_netbios_name())) unstrcpy(work_name,lp_workgroup()); /* @@ -172,7 +172,7 @@ void process_host_announce(struct subnet_record *subrec, struct packet_struct *p /* Update the record. */ servrec->serv.type = servertype|SV_TYPE_LOCAL_LIST_ONLY; update_server_ttl( servrec, ttl); - fstrcpy(servrec->serv.comment,comment); + strlcpy(servrec->serv.comment,comment,sizeof(servrec->serv.comment)); } } else { /* @@ -195,7 +195,7 @@ done: Process an incoming WORKGROUP announcement packet. *******************************************************************/ -void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf) +void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf) { struct dgram_packet *dgram = &p->packet.dgram; int ttl = IVAL(buf,1)/1000; @@ -252,7 +252,7 @@ done: Process an incoming local master browser announcement packet. *******************************************************************/ -void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf) +void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf) { struct dgram_packet *dgram = &p->packet.dgram; int ttl = IVAL(buf,1)/1000; @@ -338,7 +338,7 @@ a local master browser for workgroup %s and we think we are master. Forcing elec /* Update the record. */ servrec->serv.type = servertype|SV_TYPE_LOCAL_LIST_ONLY; update_server_ttl(servrec, ttl); - fstrcpy(servrec->serv.comment,comment); + strlcpy(servrec->serv.comment,comment,sizeof(servrec->serv.comment)); } set_workgroup_local_master_browser_name( work, server_name ); @@ -367,7 +367,7 @@ done: ******************************************************************/ void process_master_browser_announce(struct subnet_record *subrec, - struct packet_struct *p,char *buf) + struct packet_struct *p,const char *buf) { unstring local_master_name; struct work_record *work; @@ -418,7 +418,7 @@ done: Process an incoming LanMan host announcement packet. *******************************************************************/ -void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len) +void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len) { struct dgram_packet *dgram = &p->packet.dgram; uint32 servertype = IVAL(buf,1); @@ -431,7 +431,7 @@ void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct unstring work_name; unstring source_name; fstring comment; - char *s = get_safe_str_ptr(buf,len,buf,9); + char *s = get_safe_str_ptr(buf,len,discard_const_p(char, buf),9); START_PROFILE(lm_host_announce); if (!s) { @@ -484,7 +484,7 @@ originate from OS/2 Warp client. Ignoring packet.\n")); * not needed in the LanMan announce code, but it won't hurt. */ - if(strequal(work_name, global_myname())) + if(strequal(work_name, lp_netbios_name())) unstrcpy(work_name,lp_workgroup()); /* @@ -512,7 +512,7 @@ originate from OS/2 Warp client. Ignoring packet.\n")); /* Update the record. */ servrec->serv.type = servertype|SV_TYPE_LOCAL_LIST_ONLY; update_server_ttl( servrec, ttl); - fstrcpy(servrec->serv.comment,comment); + strlcpy(servrec->serv.comment,comment,sizeof(servrec->serv.comment)); } } else { /* @@ -571,7 +571,7 @@ static void send_backup_list_response(struct subnet_record *subrec, /* We always return at least one name - our own. */ count = 1; - unstrcpy(myname, global_myname()); + unstrcpy(myname, lp_netbios_name()); strupper_m(myname); myname[15]='\0'; push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE); @@ -599,7 +599,7 @@ static void send_backup_list_response(struct subnet_record *subrec, if(count >= (unsigned int)max_number_requested) break; - if(strnequal(servrec->serv.name, global_myname(),15)) + if(strnequal(servrec->serv.name, lp_netbios_name(),15)) continue; if(!(servrec->serv.type & SV_TYPE_BACKUP_BROWSER)) @@ -625,7 +625,7 @@ static void send_backup_list_response(struct subnet_record *subrec, send_mailslot(True, BROWSE_MAILSLOT, outbuf,PTR_DIFF(p,outbuf), - global_myname(), 0, + lp_netbios_name(), 0, send_to_namestr,0, sendto_ip, subrec->myip, port); } @@ -641,7 +641,7 @@ static void send_backup_list_response(struct subnet_record *subrec, ********************************************************************/ void process_get_backup_list_request(struct subnet_record *subrec, - struct packet_struct *p,char *buf) + struct packet_struct *p,const char *buf) { struct dgram_packet *dgram = &p->packet.dgram; struct work_record *work; @@ -724,7 +724,7 @@ done: ******************************************************************/ void process_reset_browser(struct subnet_record *subrec, - struct packet_struct *p,char *buf) + struct packet_struct *p,const char *buf) { struct dgram_packet *dgram = &p->packet.dgram; int state = CVAL(buf,0); @@ -776,7 +776,7 @@ request from %s IP %s state=0x%X\n", announcement is needed soon. ******************************************************************/ -void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf) +void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf) { struct dgram_packet *dgram = &p->packet.dgram; struct work_record *work; @@ -817,7 +817,7 @@ done: through the "lm announce" parameter in smb.conf) ******************************************************************/ -void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len) +void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len) { struct dgram_packet *dgram = &p->packet.dgram; unstring workgroup_name; diff --git a/source3/nmbd/nmbd_incomingrequests.c b/source3/nmbd/nmbd_incomingrequests.c index d0138ddd4a..b2545f102f 100644 --- a/source3/nmbd/nmbd_incomingrequests.c +++ b/source3/nmbd/nmbd_incomingrequests.c @@ -290,14 +290,14 @@ static int status_compare(char *n1,char *n2) ; for (l2=0;l2<15 && n2[l2] && n2[l2] != ' ';l2++) ; - l3 = strlen(global_myname()); + l3 = strlen(lp_netbios_name()); - if ((l1==l3) && strncmp(n1,global_myname(),l3) == 0 && - (l2!=l3 || strncmp(n2,global_myname(),l3) != 0)) + if ((l1==l3) && strncmp(n1,lp_netbios_name(),l3) == 0 && + (l2!=l3 || strncmp(n2,lp_netbios_name(),l3) != 0)) return -1; - if ((l2==l3) && strncmp(n2,global_myname(),l3) == 0 && - (l1!=l3 || strncmp(n1,global_myname(),l3) != 0)) + if ((l2==l3) && strncmp(n2,lp_netbios_name(),l3) == 0 && + (l1!=l3 || strncmp(n1,lp_netbios_name(),l3) != 0)) return 1; return memcmp(n1,n2,sizeof(name1)); diff --git a/source3/nmbd/nmbd_logonnames.c b/source3/nmbd/nmbd_logonnames.c index f99092055b..9a05095bfd 100644 --- a/source3/nmbd/nmbd_logonnames.c +++ b/source3/nmbd/nmbd_logonnames.c @@ -46,10 +46,10 @@ workgroup %s on subnet %s\n", failname, subrec->subnet_name)); return; } - if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) { + if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) { DEBUG(0,("become_logon_server_fail: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), failname, subrec->subnet_name)); + lp_netbios_name(), failname, subrec->subnet_name)); work->log_state = LOGON_NONE; return; } @@ -87,10 +87,10 @@ workgroup %s on subnet %s\n", reg_name, subrec->subnet_name)); return; } - if((servrec = find_server_in_workgroup( work, global_myname())) == NULL) { + if((servrec = find_server_in_workgroup( work, lp_netbios_name())) == NULL) { DEBUG(0,("become_logon_server_success: Error - cannot find server %s \ in workgroup %s on subnet %s\n", - global_myname(), reg_name, subrec->subnet_name)); + lp_netbios_name(), reg_name, subrec->subnet_name)); work->log_state = LOGON_NONE; return; } diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c index 36dacfb6f3..a89f49c8fc 100644 --- a/source3/nmbd/nmbd_packets.c +++ b/source3/nmbd/nmbd_packets.c @@ -23,6 +23,7 @@ #include "nmbd/nmbd.h" #include "../lib/util/select.h" #include "system/select.h" +#include "libsmb/libsmb.h" extern int ClientNMB; extern int ClientDGRAM; @@ -108,7 +109,7 @@ void set_nb_flags(char *buf, uint16 nb_flags) Dumps out the browse packet data. **************************************************************************/ -static void debug_browse_data(char *outbuf, int len) +static void debug_browse_data(const char *outbuf, int len) { int i,j; @@ -1062,7 +1063,7 @@ static struct subnet_record *find_subnet_for_dgram_browse_packet(struct packet_s Dispatch a browse frame from port 138 to the correct processing function. ****************************************************************************/ -static void process_browse_packet(struct packet_struct *p, char *buf,int len) +static void process_browse_packet(struct packet_struct *p, const char *buf,int len) { struct dgram_packet *dgram = &p->packet.dgram; int command = CVAL(buf,0); @@ -1072,9 +1073,9 @@ static void process_browse_packet(struct packet_struct *p, char *buf,int len) /* Drop the packet if it's a different NetBIOS scope, or the source is from one of our names. */ pull_ascii(scope, dgram->dest_name.scope, 64, 64, STR_TERMINATE); - if (!strequal(scope, global_scope())) { + if (!strequal(scope, lp_netbios_scope())) { DEBUG(7,("process_browse_packet: Discarding datagram from IP %s. Scope (%s) \ -mismatch with our scope (%s).\n", inet_ntoa(p->ip), scope, global_scope())); +mismatch with our scope (%s).\n", inet_ntoa(p->ip), scope, lp_netbios_scope())); return; } @@ -1149,7 +1150,7 @@ command code %d from %s IP %s to %s\n", subrec->subnet_name, command, nmb_namest Dispatch a LanMan browse frame from port 138 to the correct processing function. ****************************************************************************/ -static void process_lanman_packet(struct packet_struct *p, char *buf,int len) +static void process_lanman_packet(struct packet_struct *p, const char *buf,int len) { struct dgram_packet *dgram = &p->packet.dgram; int command = SVAL(buf,0); @@ -1160,9 +1161,9 @@ static void process_lanman_packet(struct packet_struct *p, char *buf,int len) /* Drop the packet if it's a different NetBIOS scope, or the source is from one of our names. */ pull_ascii(scope, dgram->dest_name.scope, 64, 64, STR_TERMINATE); - if (!strequal(scope, global_scope())) { + if (!strequal(scope, lp_netbios_scope())) { DEBUG(7,("process_lanman_packet: Discarding datagram from IP %s. Scope (%s) \ -mismatch with our scope (%s).\n", inet_ntoa(p->ip), scope, global_scope())); +mismatch with our scope (%s).\n", inet_ntoa(p->ip), scope, lp_netbios_scope())); return; } @@ -1216,8 +1217,8 @@ static bool listening(struct packet_struct *p,struct nmb_name *nbname) static void process_dgram(struct packet_struct *p) { - char *buf; - char *buf2; + const char *buf; + const char *buf2; int len; struct dgram_packet *dgram = &p->packet.dgram; @@ -1290,28 +1291,28 @@ packet sent to name %s from IP %s\n", DEBUG(4,("process_dgram: datagram from %s to %s IP %s for %s of type %d len=%d\n", nmb_namestr(&dgram->source_name),nmb_namestr(&dgram->dest_name), - inet_ntoa(p->ip), smb_buf(buf),CVAL(buf2,0),len)); + inet_ntoa(p->ip), smb_buf_const(buf),CVAL(buf2,0),len)); /* Datagram packet received for the browser mailslot */ - if (strequal(smb_buf(buf),BROWSE_MAILSLOT)) { + if (strequal(smb_buf_const(buf),BROWSE_MAILSLOT)) { process_browse_packet(p,buf2,len); return; } /* Datagram packet received for the LAN Manager mailslot */ - if (strequal(smb_buf(buf),LANMAN_MAILSLOT)) { + if (strequal(smb_buf_const(buf),LANMAN_MAILSLOT)) { process_lanman_packet(p,buf2,len); return; } /* Datagram packet received for the domain logon mailslot */ - if (strequal(smb_buf(buf),NET_LOGON_MAILSLOT)) { + if (strequal(smb_buf_const(buf),NET_LOGON_MAILSLOT)) { process_logon_packet(p,buf2,len,NET_LOGON_MAILSLOT); return; } /* Datagram packet received for the NT domain logon mailslot */ - if (strequal(smb_buf(buf),NT_LOGON_MAILSLOT)) { + if (strequal(smb_buf_const(buf),NT_LOGON_MAILSLOT)) { process_logon_packet(p,buf2,len,NT_LOGON_MAILSLOT); return; } @@ -1706,14 +1707,14 @@ static bool create_listen_pollfds(struct pollfd **pfds, } } - fds = TALLOC_ZERO_ARRAY(NULL, struct pollfd, count); + fds = talloc_zero_array(NULL, struct pollfd, count); if (fds == NULL) { DEBUG(1, ("create_listen_pollfds: malloc fail for fds. " "size %d\n", count)); return true; } - attrs = TALLOC_ARRAY(NULL, struct socket_attributes, count); + attrs = talloc_array(NULL, struct socket_attributes, count); if (fds == NULL) { DEBUG(1, ("create_listen_pollfds: malloc fail for attrs. " "size %d\n", count)); @@ -1884,7 +1885,7 @@ bool listen_for_packets(bool run_election) * create_listen_pollfds. */ - fds = TALLOC_REALLOC_ARRAY(NULL, fds, struct pollfd, listen_number); + fds = talloc_realloc(NULL, fds, struct pollfd, listen_number); if (fds == NULL) { return true; } @@ -1893,7 +1894,7 @@ bool listen_for_packets(bool run_election) #ifndef SYNC_DNS dns_fd = asyncdns_fd(); if (dns_fd != -1) { - fds = TALLOC_REALLOC_ARRAY(NULL, fds, struct pollfd, num_sockets+1); + fds = talloc_realloc(NULL, fds, struct pollfd, num_sockets+1); if (fds == NULL) { return true; } @@ -2087,7 +2088,7 @@ bool send_mailslot(bool unique, const char *mailslot,char *buf, size_t len, SSVAL(ptr,smb_vwv15,1); SSVAL(ptr,smb_vwv16,2); p2 = smb_buf(ptr); - safe_strcpy_base(p2, mailslot, dgram->data, sizeof(dgram->data)); + strlcpy_base(p2, mailslot, dgram->data, sizeof(dgram->data)); p2 = skip_string(ptr,MAX_DGRAM_SIZE,p2); if (((p2+len) > dgram->data+sizeof(dgram->data)) || ((p2+len) < p2)) { diff --git a/source3/nmbd/nmbd_processlogon.c b/source3/nmbd/nmbd_processlogon.c index 7976817664..2adc81d76e 100644 --- a/source3/nmbd/nmbd_processlogon.c +++ b/source3/nmbd/nmbd_processlogon.c @@ -157,7 +157,7 @@ static void nmbd_proxy_logon_done(struct tevent_req *subreq); static void nmbd_proxy_logon(struct nmbd_proxy_logon_context *ctx, struct in_addr local_ip, struct packet_struct *p, - uint8_t *buf, + const uint8_t *buf, uint32_t len) { struct nmbd_proxy_logon_state *state; @@ -173,7 +173,7 @@ static void nmbd_proxy_logon(struct nmbd_proxy_logon_context *ctx, fstring source_name; struct dgram_packet *dgram = &p->packet.dgram; - state = TALLOC_ZERO_P(ctx, struct nmbd_proxy_logon_state); + state = talloc_zero(ctx, struct nmbd_proxy_logon_state); if (!state) { DEBUG(0,("failed to allocate nmbd_proxy_logon_state\n")); return; @@ -291,7 +291,7 @@ static void nmbd_proxy_logon_done(struct tevent_req *subreq) send_mailslot(true, state->remote_mailslot, (char *)response.data, response.length, - global_myname(), 0x0, + lp_netbios_name(), 0x0, state->remote_name, state->remote_name_type, state->p->ip, @@ -304,7 +304,7 @@ static void nmbd_proxy_logon_done(struct tevent_req *subreq) Process a domain logon packet **************************************************************************/ -void process_logon_packet(struct packet_struct *p, char *buf,int len, +void process_logon_packet(struct packet_struct *p, const char *buf,int len, const char *mailslot) { fstring source_name; @@ -328,7 +328,7 @@ void process_logon_packet(struct packet_struct *p, char *buf,int len, inet_ntoa(p->ip) )); return; } - ip = ((struct sockaddr_in *)pss)->sin_addr; + ip = ((const struct sockaddr_in *)pss)->sin_addr; if (!lp_domain_logons()) { DEBUG(5,("process_logon_packet: Logon packet received from IP %s and domain \ @@ -338,7 +338,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); pull_ascii_nstring(source_name, sizeof(source_name), dgram->source_name.name); - pdc_name = talloc_asprintf(talloc_tos(), "\\\\%s", global_myname()); + pdc_name = talloc_asprintf(talloc_tos(), "\\\\%s", lp_netbios_name()); if (!pdc_name) { return; } @@ -391,7 +391,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); send_mailslot(True, request.req.logon0.mailslot_name, (char *)blob_out.data, blob_out.length, - global_myname(), 0x0, + lp_netbios_name(), 0x0, source_name, dgram->source_name.name_type, p->ip, ip, p->port); @@ -411,7 +411,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); "reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n", request.req.pdc.computer_name, inet_ntoa(p->ip), - global_myname(), + lp_netbios_name(), lp_workgroup(), NETLOGON_RESPONSE_FROM_PDC, request.req.pdc.nt_version, @@ -419,9 +419,9 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); request.req.pdc.lm20_token)); get_pdc.command = NETLOGON_RESPONSE_FROM_PDC; - get_pdc.pdc_name = global_myname(); + get_pdc.pdc_name = lp_netbios_name(); get_pdc._pad = data_blob_null; - get_pdc.unicode_pdc_name = global_myname(); + get_pdc.unicode_pdc_name = lp_netbios_name(); get_pdc.domain_name = lp_workgroup(); get_pdc.nt_version = NETLOGON_NT_VERSION_1; get_pdc.lmnt_token = 0xffff; @@ -443,7 +443,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); send_mailslot(True, request.req.pdc.mailslot_name, (char *)blob_out.data, blob_out.length, - global_myname(), 0x0, + lp_netbios_name(), 0x0, source_name, dgram->source_name.name_type, p->ip, ip, p->port); @@ -459,7 +459,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); if (global_nmbd_proxy_logon) { nmbd_proxy_logon(global_nmbd_proxy_logon, - ip, p, (uint8_t *)buf, len); + ip, p, (const uint8_t *)buf, len); return; } @@ -553,7 +553,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); nt5_ex.dns_domain = domain; nt5_ex.pdc_dns_name = hostname; nt5_ex.domain_name = lp_workgroup(); - nt5_ex.pdc_name = global_myname(); + nt5_ex.pdc_name = lp_netbios_name(); nt5_ex.user_name = request.req.logon.user_name; nt5_ex.server_site = "Default-First-Site-Name"; nt5_ex.client_site = "Default-First-Site-Name"; @@ -604,8 +604,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); source_name, source_addr, lp_init_logon_delay())); - when = timeval_current_ofs(0, - lp_init_logon_delay() * 1000); + when = timeval_current_ofs_msec(lp_init_logon_delay()); p->locked = true; event_add_timed(nmbd_event_context(), NULL, @@ -622,7 +621,7 @@ logons are not enabled.\n", inet_ntoa(p->ip) )); send_mailslot(true, request.req.logon.mailslot_name, (char *)blob_out.data, blob_out.length, - global_myname(), 0x0, + lp_netbios_name(), 0x0, source_name, dgram->source_name.name_type, p->ip, ip, p->port); diff --git a/source3/nmbd/nmbd_proto.h b/source3/nmbd/nmbd_proto.h index b58ca41e5a..0258b4a478 100644 --- a/source3/nmbd/nmbd_proto.h +++ b/source3/nmbd/nmbd_proto.h @@ -1,3 +1,28 @@ +/* + * Unix SMB/CIFS implementation. + * NBT netbios routines and daemon - version 2 + * + * Copyright (C) Andrew Tridgell 1994-1998 + * Copyright (C) Jeremy Allison 1994-2005 + * Copyright (C) Luke Kenneth Casson Leighton 1994-1998 + * Copyright (C) John H Terpstra 1995-1998 + * Copyright (C) Christopher R. Hertel 1998 + * Copyright (C) Jim McDonough <jmcd@us.ibm.com> 2002 + * Copyright (C) Jelmer Vernooij 2002,2003 + * + * 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 Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ /* The following definitions come from nmbd/asyncdns.c */ @@ -48,7 +73,7 @@ void sync_all_dmbs(time_t t); void check_master_browser_exists(time_t t); void run_elections(time_t t); -void process_election(struct subnet_record *subrec, struct packet_struct *p, char *buf); +void process_election(struct subnet_record *subrec, struct packet_struct *p, const char *buf); bool check_elections(void); void nmbd_message_election(struct messaging_context *msg, void *private_data, @@ -59,18 +84,18 @@ void nmbd_message_election(struct messaging_context *msg, /* The following definitions come from nmbd/nmbd_incomingdgrams.c */ void tell_become_backup(void); -void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf); -void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf); -void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf); +void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf); +void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf); +void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf); void process_master_browser_announce(struct subnet_record *subrec, - struct packet_struct *p,char *buf); -void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len); + struct packet_struct *p,const char *buf); +void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len); void process_get_backup_list_request(struct subnet_record *subrec, - struct packet_struct *p,char *buf); + struct packet_struct *p,const char *buf); void process_reset_browser(struct subnet_record *subrec, - struct packet_struct *p,char *buf); -void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf); -void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len); + struct packet_struct *p,const char *buf); +void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf); +void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len); /* The following definitions come from nmbd/nmbd_incomingrequests.c */ @@ -250,7 +275,7 @@ bool send_mailslot(bool unique, const char *mailslot,char *buf, size_t len, bool initialize_nmbd_proxy_logon(void); -void process_logon_packet(struct packet_struct *p, char *buf,int len, +void process_logon_packet(struct packet_struct *p, const char *buf,int len, const char *mailslot); /* The following definitions come from nmbd/nmbd_responserecordsdb.c */ diff --git a/source3/nmbd/nmbd_sendannounce.c b/source3/nmbd/nmbd_sendannounce.c index e04e1f6fe3..39e63d29ab 100644 --- a/source3/nmbd/nmbd_sendannounce.c +++ b/source3/nmbd/nmbd_sendannounce.c @@ -50,7 +50,7 @@ void send_browser_reset(int reset_type, const char *to_name, int to_type, struct p++; send_mailslot(True, BROWSE_MAILSLOT, outbuf,PTR_DIFF(p,outbuf), - global_myname(), 0x0, to_name, to_type, to_ip, + lp_netbios_name(), 0x0, to_name, to_type, to_ip, FIRST_SUBNET->myip, DGRAM_PORT); } @@ -76,10 +76,10 @@ to subnet %s\n", work->work_group, subrec->subnet_name)); SCVAL(p,0,work->token); /* (local) Unique workgroup token id. */ p++; - p += push_string_check(p+1, global_myname(), 15, STR_ASCII|STR_UPPER|STR_TERMINATE); + p += push_string_check(p+1, lp_netbios_name(), 15, STR_ASCII|STR_UPPER|STR_TERMINATE); send_mailslot(False, BROWSE_MAILSLOT, outbuf,PTR_DIFF(p,outbuf), - global_myname(), 0x0, work->work_group,0x1e, subrec->bcast_ip, + lp_netbios_name(), 0x0, work->work_group,0x1e, subrec->bcast_ip, subrec->myip, DGRAM_PORT); } @@ -105,12 +105,12 @@ static void send_announcement(struct subnet_record *subrec, int announce_type, SCVAL(p,0,updatecount); SIVAL(p,1,announce_interval*1000); /* Milliseconds - despite the spec. */ - safe_strcpy(upper_server_name, server_name, sizeof(upper_server_name)-1); + strlcpy(upper_server_name, server_name ? server_name : "", sizeof(upper_server_name)); strupper_m(upper_server_name); push_string_check(p+5, upper_server_name, 16, STR_ASCII|STR_TERMINATE); - SCVAL(p,21,lp_major_announce_version()); /* Major version. */ - SCVAL(p,22,lp_minor_announce_version()); /* Minor version. */ + SCVAL(p,21,SAMBA_MAJOR_NBT_ANNOUNCE_VERSION); /* Major version. */ + SCVAL(p,22,SAMBA_MINOR_NBT_ANNOUNCE_VERSION); /* Minor version. */ SIVAL(p,23,server_type & ~SV_TYPE_LOCAL_LIST_ONLY); /* Browse version: got from NT/AS 4.00 - Value defined in smb.h (JHT). */ @@ -140,8 +140,8 @@ static void send_lm_announcement(struct subnet_record *subrec, int announce_type SSVAL(p,0,announce_type); SIVAL(p,2,server_type & ~SV_TYPE_LOCAL_LIST_ONLY); - SCVAL(p,6,lp_major_announce_version()); /* Major version. */ - SCVAL(p,7,lp_minor_announce_version()); /* Minor version. */ + SCVAL(p,6,SAMBA_MAJOR_NBT_ANNOUNCE_VERSION); /* Major version. */ + SCVAL(p,7,SAMBA_MINOR_NBT_ANNOUNCE_VERSION); /* Minor version. */ SSVAL(p,8,announce_interval); /* In seconds - according to spec. */ p += 10; @@ -164,14 +164,14 @@ static void send_local_master_announcement(struct subnet_record *subrec, struct uint32 type = servrec->serv.type & ~SV_TYPE_LOCAL_LIST_ONLY; DEBUG(3,("send_local_master_announcement: type %x for name %s on subnet %s for workgroup %s\n", - type, global_myname(), subrec->subnet_name, work->work_group)); + type, lp_netbios_name(), subrec->subnet_name, work->work_group)); send_announcement(subrec, ANN_LocalMasterAnnouncement, - global_myname(), /* From nbt name. */ + lp_netbios_name(), /* From nbt name. */ work->work_group, 0x1e, /* To nbt name. */ subrec->bcast_ip, /* To ip. */ work->announce_interval, /* Time until next announce. */ - global_myname(), /* Name to announce. */ + lp_netbios_name(), /* Name to announce. */ type, /* Type field. */ servrec->serv.comment); } @@ -186,13 +186,13 @@ static void send_workgroup_announcement(struct subnet_record *subrec, struct wor subrec->subnet_name, work->work_group)); send_announcement(subrec, ANN_DomainAnnouncement, - global_myname(), /* From nbt name. */ + lp_netbios_name(), /* From nbt name. */ MSBROWSE, 0x1, /* To nbt name. */ subrec->bcast_ip, /* To ip. */ work->announce_interval, /* Time until next announce. */ work->work_group, /* Name to announce. */ SV_TYPE_DOMAIN_ENUM|SV_TYPE_NT, /* workgroup announce flags. */ - global_myname()); /* From name as comment. */ + lp_netbios_name()); /* From name as comment. */ } /**************************************************************************** @@ -251,7 +251,7 @@ static void announce_server(struct subnet_record *subrec, struct work_record *wo /* Only do domain announcements if we are a master and it's our primary name we're being asked to announce. */ - if (AM_LOCAL_MASTER_BROWSER(work) && strequal(global_myname(),servrec->serv.name)) { + if (AM_LOCAL_MASTER_BROWSER(work) && strequal(lp_netbios_name(),servrec->serv.name)) { send_local_master_announcement(subrec, work, servrec); send_workgroup_announcement(subrec, work); } else { @@ -566,7 +566,7 @@ for workgroup %s on subnet %s.\n", lp_workgroup(), FIRST_SUBNET->subnet_name )); SCVAL(p,0,ANN_MasterAnnouncement); p++; - unstrcpy(myname, global_myname()); + unstrcpy(myname, lp_netbios_name()); strupper_m(myname); myname[15]='\0'; push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE); @@ -579,10 +579,10 @@ for workgroup %s on subnet %s.\n", lp_workgroup(), FIRST_SUBNET->subnet_name )); addr = interpret_addr2(s2); DEBUG(5,("announce_remote: Doing remote browse sync announce for server %s to IP %s.\n", - global_myname(), inet_ntoa(addr) )); + lp_netbios_name(), inet_ntoa(addr) )); send_mailslot(True, BROWSE_MAILSLOT, outbuf,PTR_DIFF(p,outbuf), - global_myname(), 0x0, "*", 0x0, addr, FIRST_SUBNET->myip, DGRAM_PORT); + lp_netbios_name(), 0x0, "*", 0x0, addr, FIRST_SUBNET->myip, DGRAM_PORT); } TALLOC_FREE(frame); } diff --git a/source3/nmbd/nmbd_subnetdb.c b/source3/nmbd/nmbd_subnetdb.c index 3a60038dcd..666679a90b 100644 --- a/source3/nmbd/nmbd_subnetdb.c +++ b/source3/nmbd/nmbd_subnetdb.c @@ -296,7 +296,7 @@ bool create_subnets(void) * ignore it here. JRA. */ - if (is_loopback_addr((struct sockaddr *)&iface->ip)) { + if (is_loopback_addr((const struct sockaddr *)&iface->ip)) { DEBUG(2,("create_subnets: Ignoring loopback interface.\n" )); continue; } diff --git a/source3/nmbd/nmbd_synclists.c b/source3/nmbd/nmbd_synclists.c index fc2b25edca..964975e1a5 100644 --- a/source3/nmbd/nmbd_synclists.c +++ b/source3/nmbd/nmbd_synclists.c @@ -4,20 +4,19 @@ 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 the Free Software Foundation; either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. - */ /* this file handles asynchronous browse synchronisation requests. The @@ -30,6 +29,7 @@ #include "system/filesys.h" #include "../librpc/gen_ndr/svcctl.h" #include "nmbd/nmbd.h" +#include "libsmb/libsmb.h" #include "libsmb/clirap.h" #include "smbprofile.h" @@ -72,7 +72,6 @@ static void sync_child(char *name, int nm_type, fstring unix_workgroup; struct cli_state *cli; uint32 local_type = local ? SV_TYPE_LOCAL_LIST_ONLY : 0; - struct nmb_name called, calling; struct sockaddr_storage ss; NTSTATUS status; @@ -80,25 +79,12 @@ static void sync_child(char *name, int nm_type, * Patch from Andy Levine andyl@epicrealm.com. */ - cli = cli_initialise(); - if (!cli) { - return; - } - - cli_set_port(cli, 139); - in_addr_to_sockaddr_storage(&ss, ip); - status = cli_connect(cli, name, &ss); - if (!NT_STATUS_IS_OK(status)) { - cli_shutdown(cli); - return; - } - - make_nmb_name(&calling, get_local_machine_name(), 0x0); - make_nmb_name(&called , name, nm_type); - if (!cli_session_request(cli, &calling, &called)) { - cli_shutdown(cli); + status = cli_connect_nb(name, &ss, 139, nm_type, + get_local_machine_name(), Undefined, + &cli); + if (!NT_STATUS_IS_OK(status)) { return; } @@ -126,7 +112,7 @@ static void sync_child(char *name, int nm_type, cli_NetServerEnum(cli, unix_workgroup, local_type|SV_TYPE_DOMAIN_ENUM, callback, NULL); - + /* Now fetch a server list. */ if (servers) { fstrcpy(unix_workgroup, workgroup); @@ -134,7 +120,7 @@ static void sync_child(char *name, int nm_type, local?SV_TYPE_LOCAL_LIST_ONLY:SV_TYPE_ALL, callback, NULL); } - + cli_shutdown(cli); } diff --git a/source3/nmbd/nmbd_winsserver.c b/source3/nmbd/nmbd_winsserver.c index 976b99023e..50cdc0acf9 100644 --- a/source3/nmbd/nmbd_winsserver.c +++ b/source3/nmbd/nmbd_winsserver.c @@ -23,6 +23,7 @@ #include "includes.h" #include "system/filesys.h" #include "nmbd/nmbd.h" +#include "util_tdb.h" #define WINS_LIST "wins.dat" #define WINS_VERSION 1 @@ -74,7 +75,7 @@ static void wins_delete_all_1b_in_memory_records(void) } /**************************************************************************** - Convert a wins.tdb record to a struct name_record. Add in our global_scope(). + Convert a wins.tdb record to a struct name_record. Add in our lp_netbios_scope(). *****************************************************************************/ static struct name_record *wins_record_to_name_record(TDB_DATA key, TDB_DATA data) @@ -127,7 +128,7 @@ static struct name_record *wins_record_to_name_record(TDB_DATA key, TDB_DATA dat push_ascii_nstring(namerec->name.name, (const char *)key.dptr); namerec->name.name_type = key.dptr[sizeof(unstring)]; /* Add the scope. */ - push_ascii(namerec->name.scope, global_scope(), 64, STR_TERMINATE); + push_ascii(namerec->name.scope, lp_netbios_scope(), 64, STR_TERMINATE); /* We're using a byte-by-byte compare, so we must be sure that * unused space doesn't have garbage in it. @@ -240,7 +241,7 @@ struct name_record *find_name_on_wins_subnet(const struct nmb_name *nmbname, boo } key = name_to_key(nmbname); - data = tdb_fetch(wins_tdb, key); + data = tdb_fetch_compat(wins_tdb, key); if (data.dsize == 0) { return NULL; diff --git a/source3/nmbd/nmbd_workgroupdb.c b/source3/nmbd/nmbd_workgroupdb.c index 5ce10e64d4..43a28aa669 100644 --- a/source3/nmbd/nmbd_workgroupdb.c +++ b/source3/nmbd/nmbd_workgroupdb.c @@ -52,7 +52,7 @@ static void name_to_unstring(unstring unname, const char *name) if (errno == E2BIG) { unstring tname; pull_ascii_nstring(tname, sizeof(tname), nname); - unstrcpy(unname, tname); + strlcpy(unname, tname, sizeof(nname)); DEBUG(0,("name_to_nstring: workgroup name %s is too long. Truncating to %s\n", name, tname)); } else { @@ -250,7 +250,7 @@ workgroup %s on subnet %s\n", work->work_group, subrec->subnet_name)); const char *name = my_netbios_names(i); int stype = lp_default_server_announce() | (lp_local_master() ? SV_TYPE_POTENTIAL_BROWSER : 0 ); - if(!strequal(global_myname(), name)) + if(!strequal(lp_netbios_name(), 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, |