X-Git-Url: http://git.samba.org/?p=samba.git;a=blobdiff_plain;f=source3%2Fnmbd%2Fnmbd_elections.c;h=3aadd70b83ccdee828b5aa2d1520ff4471c00c21;hp=09ab9ee783537d44d073f55a53767db552c975b0;hb=caf8c6a76be051559ffcfe97084edca43e0a3cee;hpb=dac11b890b3e81f8849340e582b7f397a612baba diff --git a/source3/nmbd/nmbd_elections.c b/source3/nmbd/nmbd_elections.c index 09ab9ee7835..3aadd70b83c 100644 --- a/source3/nmbd/nmbd_elections.c +++ b/source3/nmbd/nmbd_elections.c @@ -34,7 +34,7 @@ static void send_election_dgram(struct subnet_record *subrec, const char *workgr uint32 criterion, int timeup,const char *server_name) { pstring outbuf; - fstring srv_name; + unstring srv_name; char *p; DEBUG(2,("send_election_dgram: Sending election packet for workgroup %s on subnet %s\n", @@ -49,8 +49,9 @@ static void send_election_dgram(struct subnet_record *subrec, const char *workgr SIVAL(p,1,criterion); SIVAL(p,5,timeup*1000); /* ms - Despite what the spec says. */ p += 13; - fstrcpy(srv_name, server_name); + unstrcpy(srv_name, server_name); strupper_m(srv_name); + /* The following call does UNIX -> DOS charset conversion. */ pstrcpy_base(p, srv_name, outbuf); p = skip_string(p,1); @@ -69,8 +70,8 @@ static void check_for_master_browser_success(struct subnet_record *subrec, struct nmb_name *answer_name, struct in_addr answer_ip, struct res_rec *rrec) { - nstring aname; - pull_ascii_nstring(aname, answer_name->name); + unstring aname; + pull_ascii_nstring(aname, sizeof(aname), answer_name->name); DEBUG(3,("check_for_master_browser_success: Local master browser for workgroup %s exists at \ IP %s (just checking).\n", aname, inet_ntoa(answer_ip) )); } @@ -84,10 +85,10 @@ static void check_for_master_browser_fail( struct subnet_record *subrec, struct nmb_name *question_name, int fail_code) { - nstring workgroup_name; + unstring workgroup_name; struct work_record *work; - pull_ascii_nstring(workgroup_name,question_name->name); + pull_ascii_nstring(workgroup_name,sizeof(workgroup_name),question_name->name); work = find_workgroup_on_subnet(subrec, workgroup_name); if(work == NULL) { @@ -165,13 +166,16 @@ void run_elections(time_t t) struct subnet_record *subrec; + START_PROFILE(run_elections); + /* Send election packets once every 2 seconds - note */ - if (lastime && (t - lastime < 2)) + if (lastime && (t - lastime < 2)) { + END_PROFILE(run_elections); return; + } lastime = t; - START_PROFILE(run_elections); for (subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) { struct work_record *work; @@ -246,7 +250,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(global_myname(), server_name) > 0) return(False); return(True); @@ -262,14 +266,15 @@ void process_election(struct subnet_record *subrec, struct packet_struct *p, cha int version = CVAL(buf,0); uint32 criterion = IVAL(buf,1); int timeup = IVAL(buf,5)/1000; - nstring server_name; + unstring server_name; struct work_record *work; - nstring workgroup_name; - - pull_ascii_nstring(server_name, buf+13); - pull_ascii_nstring(workgroup_name, dgram->dest_name.name); + unstring workgroup_name; START_PROFILE(election); + + pull_ascii_nstring(server_name, sizeof(server_name), buf+13); + pull_ascii_nstring(workgroup_name, sizeof(workgroup_name), dgram->dest_name.name); + server_name[15] = 0; DEBUG(3,("process_election: Election request from %s at IP %s on subnet %s for workgroup %s.\n", @@ -373,7 +378,8 @@ yet registered on subnet %s\n", nmb_namestr(&nmbname), subrec->subnet_name )); Process a internal Samba message forcing an election. ***************************************************************************/ -void nmbd_message_election(int msg_type, pid_t src, void *buf, size_t len) +void nmbd_message_election(int msg_type, struct process_id src, + void *buf, size_t len, void *private_data) { struct subnet_record *subrec;