summaryrefslogtreecommitdiff
path: root/source3/lib
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2008-03-18 23:29:11 +0100
committerMichael Adam <obnox@samba.org>2008-03-21 02:25:55 +0100
commit7621b4c3d80f411aac6e40ea5cce787cec108af5 (patch)
treea29f96067b1b90fa0428dfbfbac56334b9fc6438 /source3/lib
parent77dd53ad5c2568a2f06d4ecd524c971ae967b17b (diff)
downloadsamba-7621b4c3d80f411aac6e40ea5cce787cec108af5.tar.gz
samba-7621b4c3d80f411aac6e40ea5cce787cec108af5.tar.bz2
samba-7621b4c3d80f411aac6e40ea5cce787cec108af5.zip
libsmbconf: change smbconf_get_seqnum() to smbconf_changed().
The former seqnum is hidden inside a struct smbconf_csn. And the get_seqnum is united with a changed function that stores the seqnum inside the given csn. Michael (This used to be commit 5b6b90900a1a3eab24cb5612d78f9678a363cf73)
Diffstat (limited to 'source3/lib')
-rw-r--r--source3/lib/smbconf/smbconf.c38
-rw-r--r--source3/lib/smbconf/smbconf.h9
2 files changed, 37 insertions, 10 deletions
diff --git a/source3/lib/smbconf/smbconf.c b/source3/lib/smbconf/smbconf.c
index dc45a16c48..454056167e 100644
--- a/source3/lib/smbconf/smbconf.c
+++ b/source3/lib/smbconf/smbconf.c
@@ -417,6 +417,20 @@ static int smbconf_destroy_ctx(struct smbconf_ctx *ctx)
return regdb_close();
}
+/**
+ * Get the change sequence number of the given service/parameter.
+ * service and parameter strings may be NULL.
+ */
+static void smbconf_reg_get_csn(struct smbconf_ctx *ctx,
+ struct smbconf_csn *csn,
+ const char *service, const char *param)
+{
+ if (csn == NULL) {
+ return;
+ }
+ csn->csn = (uint64_t)regdb_get_seqnum();
+}
+
/**********************************************************************
*
* The actual net conf api functions, that are exported.
@@ -475,16 +489,24 @@ void smbconf_close(struct smbconf_ctx *ctx)
}
/**
- * Get the change sequence number of the given service/parameter.
- *
- * NOTE: Currently, for registry configuration, this is independent
- * of the service and parameter, it returns the registry-sequence
- * number.
+ * Detect changes in the configuration.
+ * The given csn struct is filled with the current csn.
+ * smbconf_changed() can also be used for initial retrieval
+ * of the csn.
*/
-uint64_t smbconf_get_seqnum(struct smbconf_ctx *ctx,
- const char *service, const char *param)
+bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
+ const char *service, const char *param)
{
- return (uint64_t)regdb_get_seqnum();
+ struct smbconf_csn old_csn;
+
+ if (csn == NULL) {
+ return false;
+ }
+
+ old_csn = *csn;
+
+ smbconf_reg_get_csn(ctx, csn, service, param);
+ return (csn->csn != old_csn.csn);
}
/**
diff --git a/source3/lib/smbconf/smbconf.h b/source3/lib/smbconf/smbconf.h
index d2e05045f7..134dc29c09 100644
--- a/source3/lib/smbconf/smbconf.h
+++ b/source3/lib/smbconf/smbconf.h
@@ -24,6 +24,11 @@ struct smbconf_ctx {
NT_USER_TOKEN *token;
};
+/* the change sequence number */
+struct smbconf_csn {
+ uint64_t csn;
+};
+
/*
* WARNING:
* Of this API, at least the open function is still subject to change.
@@ -32,8 +37,8 @@ struct smbconf_ctx {
WERROR smbconf_open(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx);
void smbconf_close(struct smbconf_ctx *ctx);
-uint64_t smbconf_get_seqnum(struct smbconf_ctx *ctx,
- const char *service, const char *param);
+bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
+ const char *service, const char *param);
WERROR smbconf_drop(struct smbconf_ctx *ctx);
WERROR smbconf_get_config(TALLOC_CTX *mem_ctx,
struct smbconf_ctx *ctx, uint32_t *num_shares,