Ensure we use correct length nstrings for workgroup and browser names.
authorJeremy Allison <jra@samba.org>
Wed, 27 Aug 2003 18:00:09 +0000 (18:00 +0000)
committerJeremy Allison <jra@samba.org>
Wed, 27 Aug 2003 18:00:09 +0000 (18:00 +0000)
Jeremy.
(This used to be commit be534c8adf6c3cb8921ce49dbb79991c632d501e)

source3/include/nameserv.h
source3/nmbd/nmbd_become_lmb.c
source3/nmbd/nmbd_browserdb.c
source3/nmbd/nmbd_browsesync.c
source3/nmbd/nmbd_elections.c
source3/nmbd/nmbd_serverlistdb.c
source3/nmbd/nmbd_synclists.c
source3/nmbd/nmbd_workgroupdb.c

index 10e1295fb6e951647e9c66da8671e357de99c7b0..1e867d620bc6975b52244950c206715335fb5559 100644 (file)
@@ -226,8 +226,8 @@ struct name_record {
 /* Browser cache for synchronising browse lists. */
 struct browse_cache_record {
        ubi_dlNode     node[1];
-       pstring        lmb_name;
-       pstring        work_group;
+       nstring        lmb_name;
+       nstring        work_group;
        struct in_addr ip;
        time_t         sync_time;
        time_t         death_time; /* The time the record must be removed. */
@@ -265,9 +265,9 @@ struct work_record {
        enum logon_state log_state;
 
        /* Work group info. */
-       fstring work_group;
+       nstring work_group;
        int     token;        /* Used when communicating with backup browsers. */
-       fstring local_master_browser_name;      /* Current local master browser. */
+       nstring local_master_browser_name;      /* Current local master browser. */
 
        /* Announce info. */
        time_t lastannounce_time;
index a6ae1ce42e74cff1c4ab9be7ef9d052115e28798..2370c7ba3668ff30f84e1a7076fe652717dba9f0 100644 (file)
@@ -590,5 +590,5 @@ local_master_browser_name for workgroup %s to workgroup name.\n",
   }
 #endif
 
-       fstrcpy(work->local_master_browser_name, newname);
+       nstrcpy(work->local_master_browser_name, newname);
 }
index 83dfba66e98033c31ccd1d8a14676bcbad085b02..443edf599d058eaa5d5486435e51aeb5a7ce2bab 100644 (file)
@@ -106,8 +106,8 @@ struct browse_cache_record *create_browser_in_lmb_cache( const char *work_name,
        /* Allow the new lmb to miss an announce period before we remove it. */
        browc->death_time = now + ( (CHECK_TIME_MST_ANNOUNCE + 2) * 60 );
 
-       pstrcpy(  browc->lmb_name, browser_name);
-       pstrcpy(  browc->work_group, work_name);
+       nstrcpy(  browc->lmb_name, browser_name);
+       nstrcpy(  browc->work_group, work_name);
        strupper_m( browc->lmb_name );
        strupper_m( browc->work_group );
   
index 95e542354ff917845d01b182c21a7d25ff1c8c5e..96e8fd1b8151b57e9e2f5c0a535dfd39ee3e9657 100644 (file)
@@ -460,7 +460,7 @@ static void get_domain_master_name_node_status_success(struct subnet_record *sub
                                                return;
 
                                        /* remember who the master is */
-                                       fstrcpy(work->local_master_browser_name, server_name);
+                                       nstrcpy(work->local_master_browser_name, server_name);
                                        make_nmb_name(&nmbname, server_name, 0x20);
                                        work->dmb_name = nmbname;
                                        work->dmb_addr = from_ip;
@@ -639,14 +639,14 @@ void sync_all_dmbs(time_t t)
      
        /* count how many syncs we might need to do */
        for (work=unicast_subnet->workgrouplist; work; work = work->next) {
-               if (strcmp(lp_workgroup(), work->work_group)) {
+               if (strncmp(lp_workgroup(), work->work_group, sizeof(nstring))) {
                        count++;
                }
        }
 
        /* sync with a probability of 1/count */
        for (work=unicast_subnet->workgrouplist; work; work = work->next) {
-               if (strcmp(lp_workgroup(), work->work_group)) {
+               if (strncmp(lp_workgroup(), work->work_group, sizeof(nstring))) {
                        nstring dmb_name;
 
                        if (((unsigned)sys_random()) % count != 0)
index d4d6da081a680076c55ba25e5a5f1c4f59fda70c..e341f6f7fb1ea7008fb1a082537921299f1bc0e2 100644 (file)
@@ -97,7 +97,7 @@ static void check_for_master_browser_fail( struct subnet_record *subrec,
                return;
        }
 
-       if (strequal(work->work_group, lp_workgroup())) {
+       if (strnequal(work->work_group, lp_workgroup(), sizeof(nstring))) {
 
                if (lp_local_master()) {
                        /* We have discovered that there is no local master
@@ -145,7 +145,7 @@ void check_master_browser_exists(time_t t)
                struct work_record *work;
 
                for (work = subrec->workgrouplist; work; work = work->next) {
-                       if (strequal(work->work_group, workgroup_name) && !AM_LOCAL_MASTER_BROWSER(work)) {
+                       if (strnequal(work->work_group, workgroup_name, sizeof(nstring)) && !AM_LOCAL_MASTER_BROWSER(work)) {
                                /* Do a name query for the local master browser on this net. */
                                query_name( subrec, work->work_group, 0x1d,
                                        check_for_master_browser_success,
@@ -284,7 +284,7 @@ void process_election(struct subnet_record *subrec, struct packet_struct *p, cha
                goto done;
        }
 
-       if (!strequal(work->work_group, lp_workgroup())) {
+       if (!strnequal(work->work_group, lp_workgroup(), sizeof(nstring))) {
                DEBUG(3,("process_election: ignoring election request for workgroup %s on subnet %s as this \
 is not my workgroup.\n", work->work_group, subrec->subnet_name ));
                goto done;
@@ -381,7 +381,7 @@ void nmbd_message_election(int msg_type, pid_t src, void *buf, size_t len)
        for (subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec)) {
                struct work_record *work;
                for (work = subrec->workgrouplist; work; work = work->next) {
-                       if (strequal(work->work_group, lp_workgroup())) {
+                       if (strnequal(work->work_group, lp_workgroup(), sizeof(nstring))) {
                                work->needelection = True;
                                work->ElectionCount=0;
                                work->mst_state = lp_local_master() ? MST_POTENTIAL : MST_NONE;
index b4c6e2902dee692d8a6cb538c22cd4377d9064da..ecde45cfb9afa22163e54c1c3de4d71962d7722a 100644 (file)
@@ -251,7 +251,7 @@ static uint32 write_this_workgroup_name( struct subnet_record *subrec,
 {
        struct subnet_record *ssub;
 
-       if(strequal(lp_workgroup(), work->work_group))
+       if(strnequal(lp_workgroup(), work->work_group, sizeof(nstring)))
                return 0;
 
        /* This is a workgroup we have seen on a broadcast subnet. All
index 337c2f94686480943bc2224d63411f8565e0a9d4..6a0576a5a439291fba2fb072eaadb9c8b1314381 100644 (file)
@@ -31,8 +31,8 @@
 
 struct sync_record {
        struct sync_record *next, *prev;
-       fstring workgroup;
-       fstring server;
+       nstring workgroup;
+       nstring server;
        pstring fname;
        struct in_addr ip;
        pid_t pid;
@@ -148,8 +148,8 @@ done:
 
        ZERO_STRUCTP(s);
        
-       fstrcpy(s->workgroup, work->work_group);
-       fstrcpy(s->server, name);
+       nstrcpy(s->workgroup, work->work_group);
+       nstrcpy(s->server, name);
        s->ip = ip;
 
        slprintf(s->fname, sizeof(pstring)-1,
@@ -206,8 +206,7 @@ static void complete_one(struct sync_record *s,
                                                          sname, lp_max_ttl());
                        if (work) {
                                /* remember who the master is */
-                               fstrcpy(work->local_master_browser_name, 
-                                       comment);
+                               nstrcpy(work->local_master_browser_name, comment);
                        }
                }
                return;
index 08d6fb2c6278ff5fcd50b5e1e3a7b376616fd1b4..c957b517cf7dec9606a5e8fb7667418dd8c1c979 100644 (file)
@@ -56,7 +56,7 @@ static struct work_record *create_workgroup(const char *name, int ttl)
        }
        memset((char *)work, '\0', sizeof(*work));
  
-       fstrcpy(work->work_group,name);
+       nstrcpy(work->work_group,name);
        work->serverlist = NULL;
   
        work->RunningElection = False;
@@ -76,7 +76,7 @@ static struct work_record *create_workgroup(const char *name, int ttl)
        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))
+                       if (strnequal(w->work_group, work->work_group, sizeof(nstring)))
                                t = w->token;
                }
        }
@@ -150,7 +150,7 @@ struct work_record *find_workgroup_on_subnet(struct subnet_record *subrec,
                name, subrec->subnet_name));
   
        for (ret = subrec->workgrouplist; ret; ret = ret->next) {
-               if (strequal(ret->work_group,name)) {
+               if (strnequal(ret->work_group,name,sizeof(nstring))) {
                        DEBUGADD(4, ("found.\n"));
                        return(ret);
                }
@@ -211,7 +211,7 @@ void initiate_myworkgroup_startup(struct subnet_record *subrec, struct work_reco
 {
        int i;
 
-       if(!strequal(lp_workgroup(), work->work_group))
+       if(!strnequal(lp_workgroup(), work->work_group,sizeof(nstring)))
                return;
 
        /* If this is a broadcast subnet then start elections on it if we are so configured. */