summaryrefslogtreecommitdiff
path: root/source3/lib/smbconf
diff options
context:
space:
mode:
Diffstat (limited to 'source3/lib/smbconf')
-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,