summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/gencache.c38
-rw-r--r--source3/lib/gencache.h11
-rw-r--r--source3/lib/idmap_cache.c5
-rw-r--r--source3/lib/namemap_cache.c16
-rw-r--r--source3/lib/util.c6
-rw-r--r--source3/torture/torture.c4
-rw-r--r--source3/winbindd/wb_dsgetdcname.c6
7 files changed, 60 insertions, 26 deletions
diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c
index b4d374bf837..787ef981ec0 100644
--- a/source3/lib/gencache.c
+++ b/source3/lib/gencache.c
@@ -42,6 +42,14 @@ static struct tdb_wrap *cache_notrans;
*
**/
+struct gencache_timeout {
+ time_t timeout;
+};
+
+bool gencache_timeout_expired(const struct gencache_timeout *t)
+{
+ return t->timeout <= time(NULL);
+}
/**
* Cache initialisation function. Opens cache tdb file or creates
@@ -131,7 +139,8 @@ struct gencache_have_val_state {
bool gotit;
};
-static void gencache_have_val_parser(time_t old_timeout, DATA_BLOB data,
+static void gencache_have_val_parser(const struct gencache_timeout *old_timeout,
+ DATA_BLOB data,
void *private_data)
{
struct gencache_have_val_state *state =
@@ -146,7 +155,7 @@ static void gencache_have_val_parser(time_t old_timeout, DATA_BLOB data,
* value, just extending the remaining timeout by less than 10%.
*/
- cache_time_left = old_timeout - now;
+ cache_time_left = old_timeout->timeout - now;
if (cache_time_left <= 0) {
/*
* timed out, write new value
@@ -338,10 +347,11 @@ done:
return ret == 0;
}
-static void gencache_del_parser(time_t timeout, DATA_BLOB blob,
+static void gencache_del_parser(const struct gencache_timeout *t,
+ DATA_BLOB blob,
void *private_data)
{
- if (timeout != 0) {
+ if (t->timeout != 0) {
bool *exists = private_data;
*exists = true;
}
@@ -419,7 +429,9 @@ static bool gencache_pull_timeout(uint8_t *val, time_t *pres, char **payload)
}
struct gencache_parse_state {
- void (*parser)(time_t timeout, DATA_BLOB blob, void *private_data);
+ void (*parser)(const struct gencache_timeout *timeout,
+ DATA_BLOB blob,
+ void *private_data);
void *private_data;
bool copy_to_notrans;
};
@@ -428,21 +440,21 @@ static int gencache_parse_fn(TDB_DATA key, TDB_DATA data, void *private_data)
{
struct gencache_parse_state *state;
DATA_BLOB blob;
- time_t t;
+ struct gencache_timeout t;
char *payload;
bool ret;
if (data.dptr == NULL) {
return -1;
}
- ret = gencache_pull_timeout(data.dptr, &t, &payload);
+ ret = gencache_pull_timeout(data.dptr, &t.timeout, &payload);
if (!ret) {
return -1;
}
state = (struct gencache_parse_state *)private_data;
blob = data_blob_const(
payload, data.dsize - PTR_DIFF(payload, data.dptr));
- state->parser(t, blob, state->private_data);
+ state->parser(&t, blob, state->private_data);
if (state->copy_to_notrans) {
tdb_store(cache_notrans->tdb, key, data, 0);
@@ -452,7 +464,8 @@ static int gencache_parse_fn(TDB_DATA key, TDB_DATA data, void *private_data)
}
bool gencache_parse(const char *keystr,
- void (*parser)(time_t timeout, DATA_BLOB blob,
+ void (*parser)(const struct gencache_timeout *timeout,
+ DATA_BLOB blob,
void *private_data),
void *private_data)
{
@@ -511,17 +524,18 @@ struct gencache_get_data_blob_state {
bool result;
};
-static void gencache_get_data_blob_parser(time_t timeout, DATA_BLOB blob,
+static void gencache_get_data_blob_parser(const struct gencache_timeout *t,
+ DATA_BLOB blob,
void *private_data)
{
struct gencache_get_data_blob_state *state =
(struct gencache_get_data_blob_state *)private_data;
- if (timeout == 0) {
+ if (t->timeout == 0) {
state->result = false;
return;
}
- state->timeout = timeout;
+ state->timeout = t->timeout;
if (state->blob == NULL) {
state->result = true;
diff --git a/source3/lib/gencache.h b/source3/lib/gencache.h
index fa72a4aa466..3d8ebe53872 100644
--- a/source3/lib/gencache.h
+++ b/source3/lib/gencache.h
@@ -32,8 +32,17 @@ bool gencache_set(const char *keystr, const char *value, time_t timeout);
bool gencache_del(const char *keystr);
bool gencache_get(const char *keystr, TALLOC_CTX *mem_ctx, char **value,
time_t *ptimeout);
+
+/*
+ * This might look like overkill, but namemap_cache.c shows it's
+ * necessary :-)
+ */
+struct gencache_timeout;
+bool gencache_timeout_expired(const struct gencache_timeout *t);
+
bool gencache_parse(const char *keystr,
- void (*parser)(time_t timeout, DATA_BLOB blob,
+ void (*parser)(const struct gencache_timeout *timeout,
+ DATA_BLOB blob,
void *private_data),
void *private_data);
bool gencache_get_data_blob(const char *keystr, TALLOC_CTX *mem_ctx,
diff --git a/source3/lib/idmap_cache.c b/source3/lib/idmap_cache.c
index 1e8a1ebc607..187723689ad 100644
--- a/source3/lib/idmap_cache.c
+++ b/source3/lib/idmap_cache.c
@@ -194,7 +194,8 @@ struct idmap_cache_xid2sid_state {
bool ret;
};
-static void idmap_cache_xid2sid_parser(time_t timeout, DATA_BLOB blob,
+static void idmap_cache_xid2sid_parser(const struct gencache_timeout *timeout,
+ DATA_BLOB blob,
void *private_data)
{
struct idmap_cache_xid2sid_state *state =
@@ -217,7 +218,7 @@ static void idmap_cache_xid2sid_parser(time_t timeout, DATA_BLOB blob,
state->ret = string_to_sid(state->sid, value);
}
if (state->ret) {
- *state->expired = (timeout <= time(NULL));
+ *state->expired = gencache_timeout_expired(timeout);
}
}
diff --git a/source3/lib/namemap_cache.c b/source3/lib/namemap_cache.c
index f6e71cd6d16..c153aa608e2 100644
--- a/source3/lib/namemap_cache.c
+++ b/source3/lib/namemap_cache.c
@@ -94,8 +94,10 @@ struct namemap_cache_find_sid_state {
bool ok;
};
-static void namemap_cache_find_sid_parser(time_t timeout, DATA_BLOB blob,
- void *private_data)
+static void namemap_cache_find_sid_parser(
+ const struct gencache_timeout *timeout,
+ DATA_BLOB blob,
+ void *private_data)
{
struct namemap_cache_find_sid_state *state = private_data;
const char *strv = (const char *)blob.data;
@@ -132,7 +134,7 @@ static void namemap_cache_find_sid_parser(time_t timeout, DATA_BLOB blob,
state->fn(domain,
name,
(enum lsa_SidType)type,
- timeout <= time(NULL),
+ gencache_timeout_expired(timeout),
state->private_data);
state->ok = true;
@@ -241,8 +243,10 @@ struct namemap_cache_find_name_state {
bool ok;
};
-static void namemap_cache_find_name_parser(time_t timeout, DATA_BLOB blob,
- void *private_data)
+static void namemap_cache_find_name_parser(
+ const struct gencache_timeout *timeout,
+ DATA_BLOB blob,
+ void *private_data)
{
struct namemap_cache_find_name_state *state = private_data;
const char *strv = (const char *)blob.data;
@@ -284,7 +288,7 @@ static void namemap_cache_find_name_parser(time_t timeout, DATA_BLOB blob,
state->fn(&sid,
(enum lsa_SidType)type,
- timeout <= time(NULL),
+ gencache_timeout_expired(timeout),
state->private_data);
state->ok = true;
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 394fa5fd191..da8ec55fa61 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -1242,12 +1242,14 @@ struct ra_parser_state {
enum remote_arch_types ra;
};
-static void ra_parser(time_t timeout, DATA_BLOB blob, void *priv_data)
+static void ra_parser(const struct gencache_timeout *t,
+ DATA_BLOB blob,
+ void *priv_data)
{
struct ra_parser_state *state = (struct ra_parser_state *)priv_data;
const char *ra_str = NULL;
- if (timeout <= time(NULL)) {
+ if (gencache_timeout_expired(t)) {
return;
}
diff --git a/source3/torture/torture.c b/source3/torture/torture.c
index 098560968dd..3053596b439 100644
--- a/source3/torture/torture.c
+++ b/source3/torture/torture.c
@@ -10238,7 +10238,9 @@ static bool run_local_base64(int dummy)
return ret;
}
-static void parse_fn(time_t timeout, DATA_BLOB blob, void *private_data)
+static void parse_fn(const struct gencache_timeout *t,
+ DATA_BLOB blob,
+ void *private_data)
{
return;
}
diff --git a/source3/winbindd/wb_dsgetdcname.c b/source3/winbindd/wb_dsgetdcname.c
index 2f450c7a2b4..cbd2cf6fd78 100644
--- a/source3/winbindd/wb_dsgetdcname.c
+++ b/source3/winbindd/wb_dsgetdcname.c
@@ -171,12 +171,14 @@ struct dcinfo_parser_state {
struct netr_DsRGetDCNameInfo *dcinfo;
};
-static void dcinfo_parser(time_t timeout, DATA_BLOB blob, void *private_data)
+static void dcinfo_parser(const struct gencache_timeout *timeout,
+ DATA_BLOB blob,
+ void *private_data)
{
struct dcinfo_parser_state *state = private_data;
enum ndr_err_code ndr_err;
- if (timeout <= time(NULL)) {
+ if (gencache_timeout_expired(timeout)) {
return;
}