static bool user_ok(const char *user, int snum) { char **valid, **invalid; bool ret; valid = invalid = NULL; ret = True; if (lp_invalid_users(snum)) { invalid = str_list_copy(talloc_tos(), lp_invalid_users(snum)); if (invalid && str_list_substitute(invalid, "%S", lp_servicename(snum))) { /* This is used in sec=share only, so no current user * around to pass to str_list_sub_basic() */ if ( invalid && str_list_sub_basic(invalid, "", "") ) { ret = !user_in_list(user, (const char **)invalid); } } } TALLOC_FREE(invalid); if (ret && lp_valid_users(snum)) { valid = str_list_copy(talloc_tos(), lp_valid_users(snum)); if ( valid && str_list_substitute(valid, "%S", lp_servicename(snum)) ) { /* This is used in sec=share only, so no current user * around to pass to str_list_sub_basic() */ if ( valid && str_list_sub_basic(valid, "", "") ) { ret = user_in_list(user, (const char **)valid); } } } TALLOC_FREE(valid); if (ret && lp_onlyuser(snum)) { char **user_list = str_list_make_v3( talloc_tos(), lp_username(snum), NULL); if (user_list && str_list_substitute(user_list, "%S", lp_servicename(snum))) { ret = user_in_list(user, (const char **)user_list); } TALLOC_FREE(user_list); } return(ret); }
static BOOL user_ok(const char *user, int snum) { char **valid, **invalid; BOOL ret; valid = invalid = NULL; ret = True; if (lp_invalid_users(snum)) { str_list_copy(&invalid, lp_invalid_users(snum)); if (invalid && str_list_substitute(invalid, "%S", lp_servicename(snum))) { if ( invalid && str_list_sub_basic(invalid, current_user_info.smb_name) ) { ret = !user_in_list(user, (const char **)invalid); } } } if (invalid) str_list_free (&invalid); 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); } } } if (valid) str_list_free (&valid); if (ret && lp_onlyuser(snum)) { char **user_list = str_list_make (lp_username(snum), NULL); if (user_list && str_list_substitute(user_list, "%S", lp_servicename(snum))) { ret = user_in_list(user, (const char **)user_list); } if (user_list) str_list_free (&user_list); } return(ret); }
bool user_ok_token(const char *username, const char *domain, const struct nt_user_token *token, int snum) { if (lp_invalid_users(snum) != NULL) { if (token_contains_name_in_list(username, domain, lp_servicename(snum), token, lp_invalid_users(snum))) { DEBUG(10, ("User %s in 'invalid users'\n", username)); return False; } } if (lp_valid_users(snum) != NULL) { if (!token_contains_name_in_list(username, domain, lp_servicename(snum), token, lp_valid_users(snum))) { DEBUG(10, ("User %s not in 'valid users'\n", username)); return False; } } if (lp_onlyuser(snum)) { const char *list[2]; list[0] = lp_username(snum); list[1] = NULL; if ((list[0] == NULL) || (*list[0] == '\0')) { DEBUG(0, ("'only user = yes' and no 'username ='******'username'\n", username)); return False; } } DEBUG(10, ("user_ok_token: share %s is ok for unix user %s\n", lp_servicename(snum), username)); return True; }
/**************************************************************************** check if a username is valid ****************************************************************************/ BOOL user_ok(char *user,int snum) { pstring valid, invalid; BOOL ret; StrnCpy(valid, lp_valid_users(snum), sizeof(pstring)); StrnCpy(invalid, lp_invalid_users(snum), sizeof(pstring)); string_sub(valid,"%S",lp_servicename(snum)); string_sub(invalid,"%S",lp_servicename(snum)); ret = !user_in_list(user,invalid); if (ret && valid && *valid) ret = user_in_list(user,valid); if (ret && lp_onlyuser(snum)) { char *user_list = lp_username(snum); string_sub(user_list,"%S",lp_servicename(snum)); ret = user_in_list(user,user_list); } return(ret); }