diff options
author | Pavel Březina <pbrezina@redhat.com> | 2013-05-14 15:00:05 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2013-06-10 20:30:57 +0200 |
commit | 7b5e7e539ae9312ab55d75aa94feaad549b2a708 (patch) | |
tree | 139a057c8e0a57e57360a7dd060cad8d42339859 /src/providers/dp_refresh.c | |
parent | 0cf0e2d758d09e9b314ba72ce6638df10b258462 (diff) | |
download | sssd-7b5e7e539ae9312ab55d75aa94feaad549b2a708.tar.gz sssd-7b5e7e539ae9312ab55d75aa94feaad549b2a708.tar.xz sssd-7b5e7e539ae9312ab55d75aa94feaad549b2a708.zip |
providers: refresh expired netgroups
https://fedorahosted.org/sssd/ticket/1713
Diffstat (limited to 'src/providers/dp_refresh.c')
-rw-r--r-- | src/providers/dp_refresh.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/providers/dp_refresh.c b/src/providers/dp_refresh.c index 5b0a394a2..59d858549 100644 --- a/src/providers/dp_refresh.c +++ b/src/providers/dp_refresh.c @@ -31,6 +31,7 @@ static errno_t be_refresh_get_values(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain, + time_t period, const char *objectclass, struct ldb_dn *base_dn, const char *attr, @@ -52,7 +53,7 @@ static errno_t be_refresh_get_values(TALLOC_CTX *mem_ctx, } filter = talloc_asprintf(tmp_ctx, "(&(%s<=%lld))", - SYSDB_CACHE_EXPIRE, (long long) now); + SYSDB_CACHE_EXPIRE, (long long) now + period); if (filter == NULL) { ret = ENOMEM; goto done; @@ -90,6 +91,7 @@ done: static errno_t be_refresh_get_netgroups(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain, + time_t period, char ***_values) { struct ldb_dn *base_dn = NULL; @@ -100,7 +102,7 @@ static errno_t be_refresh_get_netgroups(TALLOC_CTX *mem_ctx, return ENOMEM; } - ret = be_refresh_get_values(mem_ctx, domain, SYSDB_NETGROUP_CLASS, + ret = be_refresh_get_values(mem_ctx, domain, period, SYSDB_NETGROUP_CLASS, base_dn, SYSDB_NAME, _values); talloc_free(base_dn); @@ -110,6 +112,7 @@ static errno_t be_refresh_get_netgroups(TALLOC_CTX *mem_ctx, typedef errno_t (*be_refresh_get_values_t)(TALLOC_CTX *mem_ctx, struct sss_domain_info *domain, + time_t period, char ***_values); @@ -169,6 +172,7 @@ struct be_refresh_state { struct be_refresh_ctx *ctx; struct be_refresh_cb *cb; enum be_refresh_type index; + time_t period; }; static errno_t be_refresh_step(struct tevent_req *req); @@ -193,6 +197,7 @@ struct tevent_req *be_refresh_send(TALLOC_CTX *mem_ctx, state->ev = ev; state->be_ctx = be_ctx; + state->period = be_ptask_get_period(be_ptask); state->ctx = talloc_get_type(pvt, struct be_refresh_ctx); if (state->ctx == NULL) { ret = EINVAL; @@ -247,7 +252,8 @@ static errno_t be_refresh_step(struct tevent_req *req) goto done; } - ret = state->cb->get_values(state, state->be_ctx->domain, &values); + ret = state->cb->get_values(state, state->be_ctx->domain, state->period, + &values); if (ret != EOK) { DEBUG(SSSDBG_CRIT_FAILURE, ("Unable to obtain DN list [%d]: %s\n", ret, sss_strerror(ret))); |