mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
Revert "winbind: Remove wb_cache_lookup_usergroups"
This reverts commit f83863b4d1
.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=12612
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
This commit is contained in:
parent
52105ebaa8
commit
55321a39bb
@ -2379,6 +2379,77 @@ NTSTATUS wcache_lookup_usergroups(struct winbindd_domain *domain,
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Lookup groups a user is a member of. */
|
||||
NTSTATUS wb_cache_lookup_usergroups(struct winbindd_domain *domain,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
const struct dom_sid *user_sid,
|
||||
uint32_t *num_groups,
|
||||
struct dom_sid **user_gids)
|
||||
{
|
||||
struct cache_entry *centry = NULL;
|
||||
NTSTATUS status;
|
||||
unsigned int i;
|
||||
fstring sid_string;
|
||||
bool old_status;
|
||||
|
||||
old_status = domain->online;
|
||||
status = wcache_lookup_usergroups(domain, mem_ctx, user_sid,
|
||||
num_groups, user_gids);
|
||||
if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) {
|
||||
return status;
|
||||
}
|
||||
|
||||
(*num_groups) = 0;
|
||||
(*user_gids) = NULL;
|
||||
|
||||
/* Return status value returned by seq number check */
|
||||
|
||||
if (!NT_STATUS_IS_OK(domain->last_status))
|
||||
return domain->last_status;
|
||||
|
||||
DEBUG(10,("lookup_usergroups: [Cached] - doing backend query for info for domain %s\n",
|
||||
domain->name ));
|
||||
|
||||
status = domain->backend->lookup_usergroups(domain, mem_ctx, user_sid, num_groups, user_gids);
|
||||
|
||||
if (NT_STATUS_EQUAL(status, NT_STATUS_IO_TIMEOUT) ||
|
||||
NT_STATUS_EQUAL(status, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND)) {
|
||||
if (!domain->internal && old_status) {
|
||||
set_domain_offline(domain);
|
||||
}
|
||||
if (!domain->internal &&
|
||||
!domain->online &&
|
||||
old_status) {
|
||||
NTSTATUS cache_status;
|
||||
cache_status = wcache_lookup_usergroups(domain, mem_ctx, user_sid,
|
||||
num_groups, user_gids);
|
||||
return cache_status;
|
||||
}
|
||||
}
|
||||
if ( NT_STATUS_EQUAL(status, NT_STATUS_SYNCHRONIZATION_REQUIRED) )
|
||||
goto skip_save;
|
||||
|
||||
/* and save it */
|
||||
refresh_sequence_number(domain);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
return status;
|
||||
}
|
||||
centry = centry_start(domain, status);
|
||||
if (!centry)
|
||||
goto skip_save;
|
||||
|
||||
centry_put_uint32(centry, *num_groups);
|
||||
for (i=0; i<(*num_groups); i++) {
|
||||
centry_put_sid(centry, &(*user_gids)[i]);
|
||||
}
|
||||
|
||||
centry_end(centry, "UG/%s", sid_to_fstring(sid_string, user_sid));
|
||||
centry_free(centry);
|
||||
|
||||
skip_save:
|
||||
return status;
|
||||
}
|
||||
|
||||
static char *wcache_make_sidlist(TALLOC_CTX *mem_ctx, uint32_t num_sids,
|
||||
const struct dom_sid *sids)
|
||||
{
|
||||
|
@ -89,6 +89,11 @@ NTSTATUS wb_cache_rids_to_names(struct winbindd_domain *domain,
|
||||
char **domain_name,
|
||||
char ***names,
|
||||
enum lsa_SidType **types);
|
||||
NTSTATUS wb_cache_lookup_usergroups(struct winbindd_domain *domain,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
const struct dom_sid *user_sid,
|
||||
uint32_t *pnum_sids,
|
||||
struct dom_sid **psids);
|
||||
NTSTATUS wb_cache_lookup_useraliases(struct winbindd_domain *domain,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
uint32_t num_sids,
|
||||
|
Loading…
Reference in New Issue
Block a user