summaryrefslogtreecommitdiff
path: root/source/winbindd/winbindd_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/winbindd/winbindd_cache.c')
-rw-r--r--source/winbindd/winbindd_cache.c255
1 files changed, 6 insertions, 249 deletions
diff --git a/source/winbindd/winbindd_cache.c b/source/winbindd/winbindd_cache.c
index 360e915bc4..d3e47d0874 100644
--- a/source/winbindd/winbindd_cache.c
+++ b/source/winbindd/winbindd_cache.c
@@ -502,8 +502,14 @@ static void refresh_sequence_number(struct winbindd_domain *domain, bool force)
mode domain or not. And that we can contact it. */
if ( winbindd_can_contact_domain( domain ) ) {
+ struct winbindd_methods *orig_backend = domain->backend;
status = domain->backend->sequence_number(domain,
&domain->sequence_number);
+ if (domain->backend != orig_backend) {
+ /* Try again. */
+ status = domain->backend->sequence_number(domain,
+ &domain->sequence_number);
+ }
} else {
/* just use the current time */
status = NT_STATUS_OK;
@@ -934,8 +940,6 @@ static void wcache_save_lockout_policy(struct winbindd_domain *domain,
centry_free(centry);
}
-
-
static void wcache_save_password_policy(struct winbindd_domain *domain,
NTSTATUS status,
struct samr_DomInfo1 *policy)
@@ -959,209 +963,6 @@ static void wcache_save_password_policy(struct winbindd_domain *domain,
centry_free(centry);
}
-/***************************************************************************
- ***************************************************************************/
-
-static void wcache_save_username_alias(struct winbindd_domain *domain,
- NTSTATUS status,
- const char *name, const char *alias)
-{
- struct cache_entry *centry;
- fstring uname;
-
- if ( (centry = centry_start(domain, status)) == NULL )
- return;
-
- centry_put_string( centry, alias );
-
- fstrcpy(uname, name);
- strupper_m(uname);
- centry_end(centry, "NSS/NA/%s", uname);
-
- DEBUG(10,("wcache_save_username_alias: %s -> %s\n", name, alias ));
-
- centry_free(centry);
-}
-
-static void wcache_save_alias_username(struct winbindd_domain *domain,
- NTSTATUS status,
- const char *alias, const char *name)
-{
- struct cache_entry *centry;
- fstring uname;
-
- if ( (centry = centry_start(domain, status)) == NULL )
- return;
-
- centry_put_string( centry, name );
-
- fstrcpy(uname, alias);
- strupper_m(uname);
- centry_end(centry, "NSS/AN/%s", uname);
-
- DEBUG(10,("wcache_save_alias_username: %s -> %s\n", alias, name ));
-
- centry_free(centry);
-}
-
-/***************************************************************************
- ***************************************************************************/
-
-NTSTATUS resolve_username_to_alias( TALLOC_CTX *mem_ctx,
- struct winbindd_domain *domain,
- const char *name, char **alias )
-{
- struct winbind_cache *cache = get_cache(domain);
- struct cache_entry *centry = NULL;
- NTSTATUS status;
- char *upper_name;
-
- if ( domain->internal )
- return NT_STATUS_NOT_SUPPORTED;
-
- if (!cache->tdb)
- goto do_query;
-
- if ( (upper_name = SMB_STRDUP(name)) == NULL )
- return NT_STATUS_NO_MEMORY;
- strupper_m(upper_name);
-
- centry = wcache_fetch(cache, domain, "NSS/NA/%s", upper_name);
-
- SAFE_FREE( upper_name );
-
- if (!centry)
- goto do_query;
-
- status = centry->status;
-
- if (!NT_STATUS_IS_OK(status)) {
- centry_free(centry);
- return status;
- }
-
- *alias = centry_string( centry, mem_ctx );
-
- centry_free(centry);
-
- DEBUG(10,("resolve_username_to_alias: [Cached] - mapped %s to %s\n",
- name, *alias ? *alias : "(none)"));
-
- return (*alias) ? NT_STATUS_OK : NT_STATUS_OBJECT_NAME_NOT_FOUND;
-
-do_query:
-
- /* If its not in cache and we are offline, then fail */
-
- if ( get_global_winbindd_state_offline() || !domain->online ) {
- DEBUG(8,("resolve_username_to_alias: rejecting query "
- "in offline mode\n"));
- return NT_STATUS_NOT_FOUND;
- }
-
- status = nss_map_to_alias( mem_ctx, domain->name, name, alias );
-
- if ( NT_STATUS_IS_OK( status ) ) {
- wcache_save_username_alias(domain, status, name, *alias);
- }
-
- if ( NT_STATUS_EQUAL( status, NT_STATUS_NONE_MAPPED ) ) {
- wcache_save_username_alias(domain, status, name, "(NULL)");
- }
-
- DEBUG(5,("resolve_username_to_alias: backend query returned %s\n",
- nt_errstr(status)));
-
- if ( NT_STATUS_EQUAL(status, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND) ) {
- set_domain_offline( domain );
- }
-
- return status;
-}
-
-/***************************************************************************
- ***************************************************************************/
-
-NTSTATUS resolve_alias_to_username( TALLOC_CTX *mem_ctx,
- struct winbindd_domain *domain,
- const char *alias, char **name )
-{
- struct winbind_cache *cache = get_cache(domain);
- struct cache_entry *centry = NULL;
- NTSTATUS status;
- char *upper_name;
-
- if ( domain->internal )
- return NT_STATUS_NOT_SUPPORTED;
-
- if (!cache->tdb)
- goto do_query;
-
- if ( (upper_name = SMB_STRDUP(alias)) == NULL )
- return NT_STATUS_NO_MEMORY;
- strupper_m(upper_name);
-
- centry = wcache_fetch(cache, domain, "NSS/AN/%s", upper_name);
-
- SAFE_FREE( upper_name );
-
- if (!centry)
- goto do_query;
-
- status = centry->status;
-
- if (!NT_STATUS_IS_OK(status)) {
- centry_free(centry);
- return status;
- }
-
- *name = centry_string( centry, mem_ctx );
-
- centry_free(centry);
-
- DEBUG(10,("resolve_alias_to_username: [Cached] - mapped %s to %s\n",
- alias, *name ? *name : "(none)"));
-
- return (*name) ? NT_STATUS_OK : NT_STATUS_OBJECT_NAME_NOT_FOUND;
-
-do_query:
-
- /* If its not in cache and we are offline, then fail */
-
- if ( get_global_winbindd_state_offline() || !domain->online ) {
- DEBUG(8,("resolve_alias_to_username: rejecting query "
- "in offline mode\n"));
- return NT_STATUS_NOT_FOUND;
- }
-
- /* an alias cannot contain a domain prefix or '@' */
-
- if (strchr(alias, '\\') || strchr(alias, '@')) {
- DEBUG(10,("resolve_alias_to_username: skipping fully "
- "qualified name %s\n", alias));
- return NT_STATUS_OBJECT_NAME_INVALID;
- }
-
- status = nss_map_from_alias( mem_ctx, domain->name, alias, name );
-
- if ( NT_STATUS_IS_OK( status ) ) {
- wcache_save_alias_username( domain, status, alias, *name );
- }
-
- if (NT_STATUS_EQUAL(status, NT_STATUS_NONE_MAPPED)) {
- wcache_save_alias_username(domain, status, alias, "(NULL)");
- }
-
- DEBUG(5,("resolve_alias_to_username: backend query returned %s\n",
- nt_errstr(status)));
-
- if ( NT_STATUS_EQUAL(status, NT_STATUS_DOMAIN_CONTROLLER_NOT_FOUND) ) {
- set_domain_offline( domain );
- }
-
- return status;
-}
-
NTSTATUS wcache_cached_creds_exist(struct winbindd_domain *domain, const DOM_SID *sid)
{
struct winbind_cache *cache = get_cache(domain);
@@ -3462,48 +3263,6 @@ static int validate_pwinfo(TALLOC_CTX *mem_ctx, const char *keystr,
return 0;
}
-static int validate_nss_an(TALLOC_CTX *mem_ctx, const char *keystr,
- TDB_DATA dbuf,
- struct tdb_validation_status *state)
-{
- struct cache_entry *centry = create_centry_validate(keystr, dbuf, state);
-
- if (!centry) {
- return 1;
- }
-
- (void)centry_string( centry, mem_ctx );
-
- centry_free(centry);
-
- if (!(state->success)) {
- return 1;
- }
- DEBUG(10,("validate_pwinfo: %s ok\n", keystr));
- return 0;
-}
-
-static int validate_nss_na(TALLOC_CTX *mem_ctx, const char *keystr,
- TDB_DATA dbuf,
- struct tdb_validation_status *state)
-{
- struct cache_entry *centry = create_centry_validate(keystr, dbuf, state);
-
- if (!centry) {
- return 1;
- }
-
- (void)centry_string( centry, mem_ctx );
-
- centry_free(centry);
-
- if (!(state->success)) {
- return 1;
- }
- DEBUG(10,("validate_pwinfo: %s ok\n", keystr));
- return 0;
-}
-
static int validate_trustdoms(TALLOC_CTX *mem_ctx, const char *keystr, TDB_DATA dbuf,
struct tdb_validation_status *state)
{
@@ -3605,8 +3364,6 @@ struct key_val_struct {
{"NSS/PWINFO/", validate_pwinfo},
{"TRUSTDOMS/", validate_trustdoms},
{"TRUSTDOMCACHE/", validate_trustdomcache},
- {"NSS/NA/", validate_nss_na},
- {"NSS/AN/", validate_nss_an},
{"WINBINDD_OFFLINE", validate_offline},
{WINBINDD_CACHE_VERSION_KEYSTR, validate_cache_version},
{NULL, NULL}