summaryrefslogtreecommitdiff
path: root/source3/nmbd/nmbd_workgroupdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/nmbd/nmbd_workgroupdb.c')
-rw-r--r--source3/nmbd/nmbd_workgroupdb.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/source3/nmbd/nmbd_workgroupdb.c b/source3/nmbd/nmbd_workgroupdb.c
index b9fab4b278..bd2737ef97 100644
--- a/source3/nmbd/nmbd_workgroupdb.c
+++ b/source3/nmbd/nmbd_workgroupdb.c
@@ -48,6 +48,8 @@ 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) {
@@ -55,15 +57,18 @@ static struct work_record *create_workgroup(const char *name, int ttl)
return NULL;
}
memset((char *)work, '\0', sizeof(*work));
-
- if (strlen(name)+1 > sizeof(nstring)) {
- memcpy(work->work_group,name,sizeof(nstring)-1);
- work->work_group[sizeof(nstring)-1] = '\0';
- DEBUG(0,("create_workgroup: workgroup name %s is too long. Truncating to %s\n",
- name, work->work_group ));
- } else {
- nstrcpy(work->work_group,name);
- }
+
+ errno = 0;
+ push_ascii_nstring(nname, name);
+ if (errno == E2BIG) {
+ fstring tname;
+ pull_ascii_nstring(tname, sizeof(tname), nname);
+ fstrcpy(work->work_group,tname);
+ DEBUG(0,("create_workgroup: workgroup name %s is too long. Truncating to %s\n",
+ name, tname));
+ } else {
+ fstrcpy(work->work_group,name);
+ }
work->serverlist = NULL;
work->RunningElection = False;