1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-05 21:57:51 +03:00

fix bug 397: use a variant of alloc_sub_basic() for string lists.

This commit is contained in:
Gerald Carter -
parent 7021cf63a4
commit 62d5611df0
2 changed files with 34 additions and 1 deletions

View File

@ -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++;
}

View File

@ -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);
}
}