diff options
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/username.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source3/lib/username.c b/source3/lib/username.c index a9f6425991..a7241d309f 100644 --- a/source3/lib/username.c +++ b/source3/lib/username.c @@ -82,11 +82,19 @@ void map_username(char *user) for (; (s=fgets_slash(NULL,80,f)); free(s)) { char *unixname = s; char *dosname = strchr(unixname,'='); + BOOL break_if_mapped = False; if (!dosname) continue; *dosname++ = 0; while (isspace(*unixname)) unixname++; + if ('!' == *unixname) + { + break_if_mapped = True; + unixname++; + while (*unixname && isspace(*unixname)) unixname++; + } + if (!*unixname || strchr("#;",*unixname)) continue; { @@ -102,6 +110,10 @@ void map_username(char *user) StrnCpy(last_from,user,sizeof(last_from)-1); sscanf(unixname,"%s",user); StrnCpy(last_to,user,sizeof(last_to)-1); + if(break_if_mapped) { + free(s); + break; + } } } |