mirror of
https://github.com/samba-team/samba.git
synced 2025-12-11 08:23:49 +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 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 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
|
For example to map from the name "admin" or "administrator" to the UNIX
|
||||||
name "root" you would use
|
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
|
would map the windows username "Andrew Tridgell" to the unix username
|
||||||
tridge.
|
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
|
Note that the remapping is applied to all occurrences of
|
||||||
usernames. Thus if you connect to "\e\eserver\efred" and "fred" is
|
usernames. Thus if you connect to "\e\eserver\efred" and "fred" is
|
||||||
remapped to "mary" then you will actually be connecting to
|
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)) {
|
for (; (s=fgets_slash(NULL,80,f)); free(s)) {
|
||||||
char *unixname = s;
|
char *unixname = s;
|
||||||
char *dosname = strchr(unixname,'=');
|
char *dosname = strchr(unixname,'=');
|
||||||
|
BOOL break_if_mapped = False;
|
||||||
|
|
||||||
if (!dosname) continue;
|
if (!dosname) continue;
|
||||||
*dosname++ = 0;
|
*dosname++ = 0;
|
||||||
|
|
||||||
while (isspace(*unixname)) unixname++;
|
while (isspace(*unixname)) unixname++;
|
||||||
|
if ('!' == *unixname)
|
||||||
|
{
|
||||||
|
break_if_mapped = True;
|
||||||
|
unixname++;
|
||||||
|
while (*unixname && isspace(*unixname)) unixname++;
|
||||||
|
}
|
||||||
|
|
||||||
if (!*unixname || strchr("#;",*unixname)) continue;
|
if (!*unixname || strchr("#;",*unixname)) continue;
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -102,6 +110,10 @@ void map_username(char *user)
|
|||||||
StrnCpy(last_from,user,sizeof(last_from)-1);
|
StrnCpy(last_from,user,sizeof(last_from)-1);
|
||||||
sscanf(unixname,"%s",user);
|
sscanf(unixname,"%s",user);
|
||||||
StrnCpy(last_to,user,sizeof(last_to)-1);
|
StrnCpy(last_to,user,sizeof(last_to)-1);
|
||||||
|
if(break_if_mapped) {
|
||||||
|
free(s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user