summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1997-12-03 04:20:39 +0000
committerAndrew Tridgell <tridge@samba.org>1997-12-03 04:20:39 +0000
commit02bc90ea442f5d115df17de0ebd0bbfdf214c1a5 (patch)
tree861cf2d9342ff9baa938d979c4afeef8ac8fb42d
parent87df23458eac4e4a81673442db49467a65102b15 (diff)
downloadsamba-02bc90ea442f5d115df17de0ebd0bbfdf214c1a5.tar.gz
samba-02bc90ea442f5d115df17de0ebd0bbfdf214c1a5.tar.xz
samba-02bc90ea442f5d115df17de0ebd0bbfdf214c1a5.zip
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 af57bc05fe0f248aaef329358c583abcffe1657c)
-rw-r--r--docs/manpages/smb.conf.513
-rw-r--r--source3/lib/username.c12
2 files changed, 25 insertions, 0 deletions
diff --git a/docs/manpages/smb.conf.5 b/docs/manpages/smb.conf.5
index 1145de12637..147b3dce9f4 100644
--- a/docs/manpages/smb.conf.5
+++ b/docs/manpages/smb.conf.5
@@ -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
diff --git a/source3/lib/username.c b/source3/lib/username.c
index a9f64259916..a7241d309f4 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;
+ }
}
}