SCVAL(p,0,ANN_MasterAnnouncement);
p++;
- unstrcpy(myname, global_myname());
- strupper_m(myname);
+ unstrcpy(myname, lp_netbios_name());
+ if (!strupper_m(myname)) {
+ DEBUG(2,("strupper_m %s failed\n", myname));
+ return;
+ }
myname[15]='\0';
/* The call below does CH_UNIX -> CH_DOS conversion. JRA */
push_ascii(p, myname, sizeof(outbuf)-PTR_DIFF(p,outbuf)-1, STR_TERMINATE);
/* 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);
}
/* Go through the list of names found at answers->rdata and look for
the first SERVER<0x20> name. */
- if(answers->rdata != NULL) {
+ if (answers->rdlength > 0) {
char *p = answers->rdata;
int numnames = CVAL(p, 0);
while (numnames--) {
unstring qname;
- uint16 nb_flags;
+ uint16_t nb_flags;
int name_type;
pull_ascii_nstring(qname, sizeof(qname), p);
struct res_rec *answers,
struct in_addr from_ip)
{
- struct work_record *work;
unstring server_name;
server_name[0] = 0;
* the first WORKGROUP<0x1b> name.
*/
- if(answers->rdata != NULL) {
+ if (answers->rdlength > 0) {
char *p = answers->rdata;
int numnames = CVAL(p, 0);
while (numnames--) {
unstring qname;
- uint16 nb_flags;
+ uint16_t nb_flags;
int name_type;
pull_ascii_nstring(qname, sizeof(qname), p);
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;
}
if(!(nb_flags & NB_GROUP) && (name_type == 0x1b)) {
+ struct work_record *work;
+
if( DEBUGLVL( 5 ) ) {
dbgtext( "get_domain_master_name_node_status_success:\n" );
dbgtext( "%s(%s) ", server_name, inet_ntoa(from_ip) );
* to the workgroup list on the unicast_subnet.
*/
- if((work = find_workgroup_on_subnet( subrec, qname)) == NULL) {
+ work = find_workgroup_on_subnet( subrec, qname);
+ if (work == NULL) {
struct nmb_name nmbname;
/*
* Add it - with an hour in the cache.
*/
- if(!(work= create_workgroup_on_subnet(subrec, qname, 60*60)))
+ work = create_workgroup_on_subnet(subrec, qname, 60*60);
+ if (work == NULL) {
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;
break;
}
}
- } else if( DEBUGLVL( 0 ) ) {
+ } else if( DEBUGLVL( 1 ) ) {
dbgtext( "get_domain_master_name_node_status_success:\n" );
dbgtext( "Failed to find a WORKGROUP<0x1b> name in reply from IP " );
dbgtext( "%s.\n", inet_ntoa(from_ip) );
static void get_domain_master_name_node_status_fail(struct subnet_record *subrec,
struct response_record *rrec)
{
- if( DEBUGLVL( 0 ) ) {
+ if( DEBUGLVL( 2 ) ) {
dbgtext( "get_domain_master_name_node_status_fail:\n" );
dbgtext( "Doing a node status request to the domain master browser " );
dbgtext( "at IP %s failed.\n", inet_ntoa(rrec->packet->ip) );