summaryrefslogtreecommitdiffstats
path: root/server/db
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2009-10-24 13:36:34 -0400
committerStephen Gallagher <sgallagh@redhat.com>2009-10-27 10:42:12 -0400
commit3a21103f61bf9b60256cc2d0da54b757b634319f (patch)
treec958e19a991e8d6b9c6e3dbe0cc4f62e4ad425b2 /server/db
parentee633d9fe3b48a88387edab7978bb16422525d21 (diff)
downloadsssd-3a21103f61bf9b60256cc2d0da54b757b634319f.tar.gz
sssd-3a21103f61bf9b60256cc2d0da54b757b634319f.tar.xz
sssd-3a21103f61bf9b60256cc2d0da54b757b634319f.zip
Move responsibility for entry expiration timeout
The providers are now responsible for determining how long a cached entry is considered valid. The default is the same as before (600s)
Diffstat (limited to 'server/db')
-rw-r--r--server/db/sysdb.h20
-rw-r--r--server/db/sysdb_ops.c36
2 files changed, 43 insertions, 13 deletions
diff --git a/server/db/sysdb.h b/server/db/sysdb.h
index dfb53aaf3..e1cff8523 100644
--- a/server/db/sysdb.h
+++ b/server/db/sysdb.h
@@ -65,6 +65,7 @@
#define SYSDB_USERPIC "userPicture"
#define SYSDB_LAST_UPDATE "lastUpdate"
+#define SYSDB_CACHE_EXPIRE "dataExpireTimestamp"
#define SYSDB_CACHEDPWD "cachedPassword"
@@ -99,7 +100,7 @@
#define SYSDB_PW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
SYSDB_GIDNUM, SYSDB_GECOS, \
SYSDB_HOMEDIR, SYSDB_SHELL, \
- SYSDB_LAST_UPDATE, \
+ SYSDB_LAST_UPDATE, SYSDB_CACHE_EXPIRE, \
"objectClass", \
NULL}
#define SYSDB_USER_ATTRS {SYSDB_DEFAULTGROUP, \
@@ -112,23 +113,24 @@
SYSDB_SESSION, \
SYSDB_LAST_LOGIN, \
SYSDB_USERPIC, \
- SYSDB_LAST_UPDATE, \
+ SYSDB_LAST_UPDATE, SYSDB_CACHE_EXPIRE, \
NULL}
#define SYSDB_GRSRC_ATTRS {SYSDB_NAME, SYSDB_GIDNUM, \
- SYSDB_LAST_UPDATE, \
+ SYSDB_LAST_UPDATE, SYSDB_CACHE_EXPIRE, \
"objectClass", \
NULL}
#define SYSDB_GRPW_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, \
- SYSDB_LAST_UPDATE, \
+ SYSDB_LAST_UPDATE, SYSDB_CACHE_EXPIRE, \
"objectClass", \
NULL}
#define SYSDB_GRENT_ATTRS {SYSDB_NAME, SYSDB_UIDNUM, SYSDB_MEMBEROF, \
- SYSDB_LAST_UPDATE, \
+ SYSDB_LAST_UPDATE, SYSDB_CACHE_EXPIRE, \
"objectClass", \
NULL}
#define SYSDB_INITGR_ATTR SYSDB_MEMBEROF
-#define SYSDB_INITGR_ATTRS {SYSDB_GIDNUM, SYSDB_LAST_UPDATE, \
+#define SYSDB_INITGR_ATTRS {SYSDB_GIDNUM, \
+ SYSDB_LAST_UPDATE, SYSDB_CACHE_EXPIRE, \
"objectClass", \
NULL}
@@ -479,7 +481,8 @@ struct tevent_req *sysdb_store_user_send(TALLOC_CTX *mem_ctx,
const char *gecos,
const char *homedir,
const char *shell,
- struct sysdb_attrs *attrs);
+ struct sysdb_attrs *attrs,
+ uint64_t cache_timeout);
int sysdb_store_user_recv(struct tevent_req *req);
struct tevent_req *sysdb_store_group_send(TALLOC_CTX *mem_ctx,
@@ -490,7 +493,8 @@ struct tevent_req *sysdb_store_group_send(TALLOC_CTX *mem_ctx,
gid_t gid,
const char **member_users,
const char **member_groups,
- struct sysdb_attrs *attrs);
+ struct sysdb_attrs *attrs,
+ uint64_t cache_timeout);
int sysdb_store_group_recv(struct tevent_req *req);
struct tevent_req *sysdb_add_group_member_send(TALLOC_CTX *mem_ctx,
diff --git a/server/db/sysdb_ops.c b/server/db/sysdb_ops.c
index e045ad7ea..0bb77d175 100644
--- a/server/db/sysdb_ops.c
+++ b/server/db/sysdb_ops.c
@@ -2548,6 +2548,8 @@ struct sysdb_store_user_state {
const char *homedir;
const char *shell;
struct sysdb_attrs *attrs;
+
+ uint64_t cache_timeout;
};
static void sysdb_store_user_check(struct tevent_req *subreq);
@@ -2564,7 +2566,8 @@ struct tevent_req *sysdb_store_user_send(TALLOC_CTX *mem_ctx,
const char *gecos,
const char *homedir,
const char *shell,
- struct sysdb_attrs *attrs)
+ struct sysdb_attrs *attrs,
+ uint64_t cache_timeout)
{
struct tevent_req *req, *subreq;
struct sysdb_store_user_state *state;
@@ -2583,6 +2586,7 @@ struct tevent_req *sysdb_store_user_send(TALLOC_CTX *mem_ctx,
state->homedir = homedir;
state->shell = shell;
state->attrs = attrs;
+ state->cache_timeout = cache_timeout;
if (pwd && (domain->legacy_passwords || !*pwd)) {
ret = sysdb_attrs_add_string(state->attrs, SYSDB_PWD, pwd);
@@ -2612,6 +2616,7 @@ static void sysdb_store_user_check(struct tevent_req *subreq)
struct sysdb_store_user_state *state = tevent_req_data(req,
struct sysdb_store_user_state);
struct ldb_message *msg;
+ time_t now = time(NULL);
int ret;
ret = sysdb_search_user_recv(subreq, state, &msg);
@@ -2702,7 +2707,15 @@ static void sysdb_store_user_check(struct tevent_req *subreq)
}
}
- ret = sysdb_attrs_add_time_t(state->attrs, SYSDB_LAST_UPDATE, time(NULL));
+ ret = sysdb_attrs_add_time_t(state->attrs, SYSDB_LAST_UPDATE, now);
+ if (ret) {
+ DEBUG(6, ("Error: %d (%s)\n", ret, strerror(ret)));
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sysdb_attrs_add_time_t(state->attrs, SYSDB_CACHE_EXPIRE,
+ now + state->cache_timeout);
if (ret) {
DEBUG(6, ("Error: %d (%s)\n", ret, strerror(ret)));
tevent_req_error(req, ret);
@@ -2775,6 +2788,8 @@ struct sysdb_store_group_state {
const char **member_groups;
struct sysdb_attrs *attrs;
+
+ uint64_t cache_timeout;
};
static void sysdb_store_group_check(struct tevent_req *subreq);
@@ -2789,7 +2804,8 @@ struct tevent_req *sysdb_store_group_send(TALLOC_CTX *mem_ctx,
gid_t gid,
const char **member_users,
const char **member_groups,
- struct sysdb_attrs *attrs)
+ struct sysdb_attrs *attrs,
+ uint64_t cache_timeout)
{
struct tevent_req *req, *subreq;
struct sysdb_store_group_state *state;
@@ -2808,6 +2824,7 @@ struct tevent_req *sysdb_store_group_send(TALLOC_CTX *mem_ctx,
state->member_users = member_users;
state->member_groups = member_groups;
state->attrs = attrs;
+ state->cache_timeout = cache_timeout;
subreq = sysdb_search_group_by_name_send(state, ev, NULL, handle,
domain, name, src_attrs);
@@ -2832,6 +2849,7 @@ static void sysdb_store_group_check(struct tevent_req *subreq)
struct sysdb_store_group_state *state = tevent_req_data(req,
struct sysdb_store_group_state);
struct ldb_message *msg;
+ time_t now = time(NULL);
bool new_group = false;
int ret, i;
@@ -2906,7 +2924,7 @@ static void sysdb_store_group_check(struct tevent_req *subreq)
}
if (new_group) {
- /* groups doesn't exist, turn into adding a group */
+ /* group doesn't exist, turn into adding a group */
subreq = sysdb_add_group_send(state, state->ev, state->handle,
state->domain, state->name,
state->gid, state->attrs);
@@ -2940,7 +2958,15 @@ static void sysdb_store_group_check(struct tevent_req *subreq)
}
}
- ret = sysdb_attrs_add_time_t(state->attrs, SYSDB_LAST_UPDATE, time(NULL));
+ ret = sysdb_attrs_add_time_t(state->attrs, SYSDB_LAST_UPDATE, now);
+ if (ret) {
+ DEBUG(6, ("Error: %d (%s)\n", ret, strerror(ret)));
+ tevent_req_error(req, ret);
+ return;
+ }
+
+ ret = sysdb_attrs_add_time_t(state->attrs, SYSDB_CACHE_EXPIRE,
+ now + state->cache_timeout);
if (ret) {
DEBUG(6, ("Error: %d (%s)\n", ret, strerror(ret)));
tevent_req_error(req, ret);