1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

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)
This commit is contained in:
Michael Adam 2008-03-18 23:29:11 +01:00
parent 77dd53ad5c
commit 7621b4c3d8
3 changed files with 42 additions and 19 deletions

View File

@ -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);
}
/**

View File

@ -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,

View File

@ -71,7 +71,7 @@ extern userdom_struct current_user_info;
#endif
static bool in_client = False; /* Not in the client by default */
static uint64_t conf_last_seqnum = 0;
static struct smbconf_csn conf_last_csn;
static struct smbconf_ctx *conf_ctx = NULL;
#define CONFIG_BACKEND_FILE 0
@ -6524,7 +6524,8 @@ static bool process_registry_globals(bool (*pfunc)(const char *, const char *))
}
ret = pfunc("registry shares", "yes");
conf_last_seqnum = smbconf_get_seqnum(conf_ctx, NULL, NULL);
/* store the csn */
smbconf_changed(conf_ctx, &conf_last_csn, NULL, NULL);
done:
TALLOC_FREE(mem_ctx);
@ -6604,7 +6605,6 @@ bool lp_file_list_changed(void)
DEBUG(6, ("lp_file_list_changed()\n"));
if (lp_config_backend_is_registry()) {
uint64_t conf_cur_seqnum;
if (conf_ctx == NULL) {
WERROR werr;
werr = smbconf_open(NULL, &conf_ctx);
@ -6614,12 +6614,8 @@ bool lp_file_list_changed(void)
return false;
}
}
conf_cur_seqnum = smbconf_get_seqnum(conf_ctx, NULL, NULL);
if (conf_last_seqnum != conf_cur_seqnum) {
DEBUGADD(6, ("regdb seqnum changed: old = %llu, "
"new = %llu\n",
(unsigned long long)conf_last_seqnum,
(unsigned long long)conf_cur_seqnum));
if (smbconf_changed(conf_ctx, &conf_last_csn, NULL, NULL)) {
DEBUGADD(6, ("registry config changed\n"));
return true;
}
}