summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/lib/util_str.c30
-rw-r--r--source3/smbd/password.c5
2 files changed, 34 insertions, 1 deletions
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index 4556405b04..70567f88af 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -1470,6 +1470,35 @@ void str_list_free(char ***list)
SAFE_FREE(*list);
}
+/******************************************************************************
+ version of standard_sub_basic() for string lists; uses alloc_sub_basic()
+ for the work
+ *****************************************************************************/
+
+BOOL str_list_sub_basic( char **list, const char *smb_name )
+{
+ char *s, *tmpstr;
+
+ while ( *list ) {
+ s = *list;
+ tmpstr = alloc_sub_basic(smb_name, s);
+ if ( !tmpstr ) {
+ DEBUG(0,("str_list_sub_basic: alloc_sub_basic() return NULL!\n"));
+ return False;
+ }
+
+ *list = tmpstr;
+
+ list++;
+ }
+
+ return True;
+}
+
+/******************************************************************************
+ substritute a specific pattern in a string list
+ *****************************************************************************/
+
BOOL str_list_substitute(char **list, const char *pattern, const char *insert)
{
char *p, *s, *t;
@@ -1525,6 +1554,7 @@ BOOL str_list_substitute(char **list, const char *pattern, const char *insert)
}
}
+
list++;
}
diff --git a/source3/smbd/password.c b/source3/smbd/password.c
index b988f2ec74..32c24b3d67 100644
--- a/source3/smbd/password.c
+++ b/source3/smbd/password.c
@@ -28,6 +28,9 @@ static user_struct *validated_users;
static int next_vuid = VUID_OFFSET;
static int num_validated_vuids;
+extern userdom_struct current_user_info;
+
+
/****************************************************************************
Check if a uid has been validated, and return an pointer to the user_struct
if it has. NULL if not. vuid is biased by an offset. This allows us to
@@ -296,7 +299,7 @@ BOOL user_ok(const char *user,int snum, gid_t *groups, size_t n_groups)
if (ret && lp_valid_users(snum)) {
str_list_copy(&valid, lp_valid_users(snum));
- if (valid && str_list_substitute(valid, "%S", lp_servicename(snum))) {
+ if ( valid && str_list_sub_basic(valid, current_user_info.smb_name) ) {
ret = user_in_list(user, (const char **)valid, groups, n_groups);
}
}