git.samba.org
/
samba.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r21064: The core of this patch is
[samba.git]
/
source3
/
nmbd
/
nmbd_elections.c
diff --git
a/source3/nmbd/nmbd_elections.c
b/source3/nmbd/nmbd_elections.c
index 09ab9ee783537d44d073f55a53767db552c975b0..3aadd70b83ccdee828b5aa2d1520ff4471c00c21 100644
(file)
--- 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;
uint32 criterion, int timeup,const char *server_name)
{
pstring outbuf;
-
f
string srv_name;
+
un
string srv_name;
char *p;
DEBUG(2,("send_election_dgram: Sending election packet for workgroup %s on subnet %s\n",
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;
SIVAL(p,1,criterion);
SIVAL(p,5,timeup*1000); /* ms - Despite what the spec says. */
p += 13;
-
f
strcpy(srv_name, server_name);
+
un
strcpy(srv_name, server_name);
strupper_m(srv_name);
strupper_m(srv_name);
+ /* The following call does UNIX -> DOS charset conversion. */
pstrcpy_base(p, srv_name, outbuf);
p = skip_string(p,1);
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)
{
struct nmb_name *answer_name,
struct in_addr answer_ip, struct res_rec *rrec)
{
- nstring aname;
- pull_ascii_nstring(aname, answer_name->name);
+
u
nstring 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) ));
}
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)
{
struct nmb_name *question_name,
int fail_code)
{
- nstring workgroup_name;
+
u
nstring workgroup_name;
struct work_record *work;
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) {
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;
struct subnet_record *subrec;
+ START_PROFILE(run_elections);
+
/* Send election packets once every 2 seconds - note */
/* Send election packets once every 2 seconds - note */
- if (lastime && (t - lastime < 2))
+ if (lastime && (t - lastime < 2)) {
+ END_PROFILE(run_elections);
return;
return;
+ }
lastime = t;
lastime = t;
- START_PROFILE(run_elections);
for (subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
struct work_record *work;
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 (timeup < mytimeup)
return(True);
- if (
strcasec
mp(global_myname(), server_name) > 0)
+ if (
StrCaseC
mp(global_myname(), server_name) > 0)
return(False);
return(True);
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;
int version = CVAL(buf,0);
uint32 criterion = IVAL(buf,1);
int timeup = IVAL(buf,5)/1000;
- nstring server_name;
+
u
nstring server_name;
struct work_record *work;
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);
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",
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.
***************************************************************************/
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;
{
struct subnet_record *subrec;