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:
parent
7021cf63a4
commit
62d5611df0
@ -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++;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user