r2363: Fix to make find_workgroup use the same truncation as
authorJeremy Allison <jra@samba.org>
Thu, 16 Sep 2004 00:25:04 +0000 (00:25 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:52:40 +0000 (10:52 -0500)
create_workgroup (refactor to a common function).
Patch from Paul Szabo - psz@maths.usyd.edu.au.
Jeremy.

source/nmbd/nmbd_workgroupdb.c

index 8880cb58bb407bcb4a53369a157ac36aacbd19ce..8f3ae36b65d015e4b74a1fda68525f4367c3a984 100644 (file)
@@ -40,6 +40,27 @@ static void add_workgroup(struct subnet_record *subrec, struct work_record *work
        subrec->work_changed = True;
 }
 
+/****************************************************************************
+ Copy name to unstring. Used by create_workgroup() and find_workgroup_on_subnet().
+**************************************************************************/
+
+static void name_to_unstring(unstring unname, const char *name)
+{
+        nstring nname;
+
+       errno = 0;
+       push_ascii_nstring(nname, name);
+       if (errno == E2BIG) {
+               unstring tname;
+               pull_ascii_nstring(tname, sizeof(tname), nname);
+               unstrcpy(unname, tname);
+               DEBUG(0,("name_to_nstring: workgroup name %s is too long. Truncating to %s\n",
+                       name, tname));
+       } else {
+               unstrcpy(unname, name);
+       }
+}
+               
 /****************************************************************************
   Create an empty workgroup.
 **************************************************************************/
@@ -48,8 +69,6 @@ static struct work_record *create_workgroup(const char *name, int ttl)
 {
        struct work_record *work;
        struct subnet_record *subrec;
-        nstring nname;
-                                                                                                                         
        int t = -1;
   
        if((work = (struct work_record *)malloc(sizeof(*work))) == NULL) {
@@ -58,17 +77,8 @@ static struct work_record *create_workgroup(const char *name, int ttl)
        }
        memset((char *)work, '\0', sizeof(*work));
 
-        errno = 0;
-        push_ascii_nstring(nname, name);
-        if (errno == E2BIG) {
-               unstring tname;
-                pull_ascii_nstring(tname, sizeof(tname), nname);
-               unstrcpy(work->work_group,tname);
-                DEBUG(0,("create_workgroup: workgroup name %s is too long. Truncating to %s\n",
-                       name, tname));
-        } else {
-               unstrcpy(work->work_group,name);
-        }
+       name_to_unstring(work->work_group, name);
+
        work->serverlist = NULL;
   
        work->RunningElection = False;
@@ -157,12 +167,15 @@ struct work_record *find_workgroup_on_subnet(struct subnet_record *subrec,
                                              const char *name)
 {
        struct work_record *ret;
-  
+       unstring un_name;
        DEBUG(4, ("find_workgroup_on_subnet: workgroup search for %s on subnet %s: ",
                name, subrec->subnet_name));
   
+       name_to_unstring(un_name, name);
+
        for (ret = subrec->workgrouplist; ret; ret = ret->next) {
-               if (strequal(ret->work_group,name)) {
+               if (strequal(ret->work_group,un_name)) {
                        DEBUGADD(4, ("found.\n"));
                        return(ret);
                }