diff options
author | Pavel Březina <pbrezina@redhat.com> | 2017-11-01 14:57:17 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2017-11-02 12:47:27 +0100 |
commit | fb0431b13a9fcd8ac31e622503acbd10d2b73ac9 (patch) | |
tree | 8adcd73084bc8e392c7f775f4686b4d60158b524 | |
parent | e16539779668dacff868999bd59dbf33e3eab872 (diff) | |
download | sssd-fb0431b13a9fcd8ac31e622503acbd10d2b73ac9.tar.gz sssd-fb0431b13a9fcd8ac31e622503acbd10d2b73ac9.tar.xz sssd-fb0431b13a9fcd8ac31e622503acbd10d2b73ac9.zip |
AD: Remember last site discovered in sysdb
This can speed up sssd startup.
Resolves:
https://pagure.io/SSSD/sssd/issue/3265
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
-rw-r--r-- | src/db/sysdb_subdomains.c | 2 | ||||
-rw-r--r-- | src/providers/ad/ad_init.c | 2 | ||||
-rw-r--r-- | src/providers/ad/ad_srv.c | 21 | ||||
-rw-r--r-- | src/providers/ad/ad_srv.h | 1 | ||||
-rw-r--r-- | src/providers/ad/ad_subdomains.c | 2 | ||||
-rw-r--r-- | src/providers/ipa/ipa_subdomains_server.c | 2 |
6 files changed, 26 insertions, 4 deletions
diff --git a/src/db/sysdb_subdomains.c b/src/db/sysdb_subdomains.c index cb5de1afe..353561765 100644 --- a/src/db/sysdb_subdomains.c +++ b/src/db/sysdb_subdomains.c @@ -1291,7 +1291,7 @@ sysdb_get_site(TALLOC_CTX *mem_ctx, const char **_site) { TALLOC_CTX *tmp_ctx; - struct ldb_res *res; + struct ldb_result *res; struct ldb_dn *dn; const char *attrs[] = { SYSDB_SITE, NULL }; errno_t ret; diff --git a/src/providers/ad/ad_init.c b/src/providers/ad/ad_init.c index 131e960d4..e62025d4a 100644 --- a/src/providers/ad/ad_init.c +++ b/src/providers/ad/ad_init.c @@ -199,7 +199,7 @@ static errno_t ad_init_srv_plugin(struct be_ctx *be_ctx, return EOK; } - srv_ctx = ad_srv_plugin_ctx_init(be_ctx, be_ctx->be_res, + srv_ctx = ad_srv_plugin_ctx_init(be_ctx, be_ctx, be_ctx->be_res, default_host_dbs, ad_options->id, hostname, ad_domain, ad_site_override); diff --git a/src/providers/ad/ad_srv.c b/src/providers/ad/ad_srv.c index be1ba0f23..4fa166860 100644 --- a/src/providers/ad/ad_srv.c +++ b/src/providers/ad/ad_srv.c @@ -34,6 +34,7 @@ #include "providers/fail_over_srv.h" #include "providers/ldap/sdap.h" #include "providers/ldap/sdap_async.h" +#include "db/sysdb.h" #define AD_SITE_DOMAIN_FMT "%s._sites.%s" @@ -475,6 +476,7 @@ int ad_get_client_site_recv(TALLOC_CTX *mem_ctx, } struct ad_srv_plugin_ctx { + struct be_ctx *be_ctx; struct be_resolv_ctx *be_res; enum host_database *host_dbs; struct sdap_options *opts; @@ -486,6 +488,7 @@ struct ad_srv_plugin_ctx { struct ad_srv_plugin_ctx * ad_srv_plugin_ctx_init(TALLOC_CTX *mem_ctx, + struct be_ctx *be_ctx, struct be_resolv_ctx *be_res, enum host_database *host_dbs, struct sdap_options *opts, @@ -494,12 +497,14 @@ ad_srv_plugin_ctx_init(TALLOC_CTX *mem_ctx, const char *ad_site_override) { struct ad_srv_plugin_ctx *ctx = NULL; + errno_t ret; ctx = talloc_zero(mem_ctx, struct ad_srv_plugin_ctx); if (ctx == NULL) { return NULL; } + ctx->be_ctx = be_ctx; ctx->be_res = be_res; ctx->host_dbs = host_dbs; ctx->opts = opts; @@ -524,6 +529,15 @@ ad_srv_plugin_ctx_init(TALLOC_CTX *mem_ctx, if (ctx->current_site == NULL) { goto fail; } + } else { + ret = sysdb_get_site(ctx, be_ctx->domain, &ctx->current_site); + if (ret != EOK) { + /* Not fatal. */ + DEBUG(SSSDBG_MINOR_FAILURE, + "Unable to get current site from cache [%d]: %s\n", + ret, sss_strerror(ret)); + ctx->current_site = NULL; + } } return ctx; @@ -556,6 +570,13 @@ ad_srv_plugin_ctx_switch_site(struct ad_srv_plugin_ctx *ctx, talloc_zfree(ctx->current_site); ctx->current_site = site; + ret = sysdb_set_site(ctx->be_ctx->domain, ctx->current_site); + if (ret != EOK) { + /* Not fatal. */ + DEBUG(SSSDBG_MINOR_FAILURE, "Unable to store site information " + "[%d]: %s\n", ret, sss_strerror(ret)); + } + return EOK; } diff --git a/src/providers/ad/ad_srv.h b/src/providers/ad/ad_srv.h index ae5efe447..fddef6867 100644 --- a/src/providers/ad/ad_srv.h +++ b/src/providers/ad/ad_srv.h @@ -25,6 +25,7 @@ struct ad_srv_plugin_ctx; struct ad_srv_plugin_ctx * ad_srv_plugin_ctx_init(TALLOC_CTX *mem_ctx, + struct be_ctx *be_ctx, struct be_resolv_ctx *be_res, enum host_database *host_dbs, struct sdap_options *opts, diff --git a/src/providers/ad/ad_subdomains.c b/src/providers/ad/ad_subdomains.c index 280aa54c2..3fb9b950f 100644 --- a/src/providers/ad/ad_subdomains.c +++ b/src/providers/ad/ad_subdomains.c @@ -245,7 +245,7 @@ ad_subdom_ad_ctx_new(struct be_ctx *be_ctx, ad_options->id_ctx = ad_id_ctx; /* use AD plugin */ - srv_ctx = ad_srv_plugin_ctx_init(be_ctx, be_ctx->be_res, + srv_ctx = ad_srv_plugin_ctx_init(be_ctx, be_ctx, be_ctx->be_res, default_host_dbs, ad_id_ctx->ad_options->id, hostname, diff --git a/src/providers/ipa/ipa_subdomains_server.c b/src/providers/ipa/ipa_subdomains_server.c index 10166d162..d670a156b 100644 --- a/src/providers/ipa/ipa_subdomains_server.c +++ b/src/providers/ipa/ipa_subdomains_server.c @@ -305,7 +305,7 @@ ipa_ad_ctx_new(struct be_ctx *be_ctx, ad_site_override = dp_opt_get_string(ad_options->basic, AD_SITE); /* use AD plugin */ - srv_ctx = ad_srv_plugin_ctx_init(be_ctx, be_ctx->be_res, + srv_ctx = ad_srv_plugin_ctx_init(be_ctx, be_ctx, be_ctx->be_res, default_host_dbs, ad_id_ctx->ad_options->id, id_ctx->server_mode->hostname, |