mirror of
https://github.com/samba-team/samba.git
synced 2025-08-04 08:22:08 +03:00
change the "username map" option to allow the user to stop the
processing part way through the file if a match is found. If a line
starts with ! and a match is made by that line then processing
stops. This allows better wildcard handling.
(patch from Anselm.Kruis@Physik.Uni-Muenchen.DE)
(This used to be commit af57bc05fe
)
This commit is contained in:
@ -3524,6 +3524,11 @@ then continues with the next line.
|
||||
|
||||
If any line begins with a '#' or a ';' then it is ignored
|
||||
|
||||
If any line begins with an ! then the processing will stop after that
|
||||
line if a mapping was done by the line. Otherwise mapping continues
|
||||
with every line being processed. Using ! is most useful when you have
|
||||
a wildcard mapping line later in the file.
|
||||
|
||||
For example to map from the name "admin" or "administrator" to the UNIX
|
||||
name "root" you would use
|
||||
|
||||
@ -3544,6 +3549,14 @@ quotes around the name. For example:
|
||||
would map the windows username "Andrew Tridgell" to the unix username
|
||||
tridge.
|
||||
|
||||
The following example would map mary and fred to the unix user sys,
|
||||
and map the rest to guest. Note the use of the ! to tell Samba to stop
|
||||
processing if it gets a match on that line.
|
||||
|
||||
!sys = mary fred
|
||||
guest = *
|
||||
|
||||
|
||||
Note that the remapping is applied to all occurrences of
|
||||
usernames. Thus if you connect to "\e\eserver\efred" and "fred" is
|
||||
remapped to "mary" then you will actually be connecting to
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user