diff options
Diffstat (limited to 'source3/lib/smbconf')
-rw-r--r-- | source3/lib/smbconf/smbconf.c | 38 | ||||
-rw-r--r-- | source3/lib/smbconf/smbconf.h | 9 |
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, |