From: Michael Adam Date: Tue, 24 Feb 2009 09:52:30 +0000 (+0100) Subject: s3:libsmbconf: add transactions to the libsmbconf api X-Git-Tag: samba-3.4.0pre1~742 X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=commitdiff_plain;h=bd121b532cf5a6728b7605072f725cc9c6d47f48 s3:libsmbconf: add transactions to the libsmbconf api This is useful for wrapping higher level aggregate operations in transactions. The text backend implementations just return WERR_OK, the registry backend implementatoins use the regdb_transaction_start|commit|cancel routines just added. Michael --- diff --git a/lib/smbconf/smbconf.c b/lib/smbconf/smbconf.c index 595fd234214..f25ccae0d41 100644 --- a/lib/smbconf/smbconf.c +++ b/lib/smbconf/smbconf.c @@ -399,3 +399,18 @@ WERROR smbconf_delete_global_includes(struct smbconf_ctx *ctx) return werr; } + +WERROR smbconf_transaction_start(struct smbconf_ctx *ctx) +{ + return ctx->ops->transaction_start(ctx); +} + +WERROR smbconf_transaction_commit(struct smbconf_ctx *ctx) +{ + return ctx->ops->transaction_commit(ctx); +} + +WERROR smbconf_transaction_cancel(struct smbconf_ctx *ctx) +{ + return ctx->ops->transaction_cancel(ctx); +} diff --git a/lib/smbconf/smbconf.h b/lib/smbconf/smbconf.h index 106fae6431d..517302ac883 100644 --- a/lib/smbconf/smbconf.h +++ b/lib/smbconf/smbconf.h @@ -94,4 +94,8 @@ WERROR smbconf_set_global_includes(struct smbconf_ctx *ctx, WERROR smbconf_delete_includes(struct smbconf_ctx *ctx, const char *service); WERROR smbconf_delete_global_includes(struct smbconf_ctx *ctx); +WERROR smbconf_transaction_start(struct smbconf_ctx *ctx); +WERROR smbconf_transaction_commit(struct smbconf_ctx *ctx); +WERROR smbconf_transaction_cancel(struct smbconf_ctx *ctx); + #endif /* _LIBSMBCONF_H_ */ diff --git a/lib/smbconf/smbconf_private.h b/lib/smbconf/smbconf_private.h index c9e44181c6e..e6998ad6392 100644 --- a/lib/smbconf/smbconf_private.h +++ b/lib/smbconf/smbconf_private.h @@ -68,6 +68,9 @@ struct smbconf_ops { uint32_t num_includes, const char **includes); WERROR (*delete_includes)(struct smbconf_ctx *ctx, const char *service); + WERROR (*transaction_start)(struct smbconf_ctx *ctx); + WERROR (*transaction_commit)(struct smbconf_ctx *ctx); + WERROR (*transaction_cancel)(struct smbconf_ctx *ctx); }; struct smbconf_ctx { diff --git a/lib/smbconf/smbconf_txt.c b/lib/smbconf/smbconf_txt.c index 1df4a9fdb73..501382cc5fd 100644 --- a/lib/smbconf/smbconf_txt.c +++ b/lib/smbconf/smbconf_txt.c @@ -612,6 +612,20 @@ static WERROR smbconf_txt_delete_includes(struct smbconf_ctx *ctx, return WERR_NOT_SUPPORTED; } +static WERROR smbconf_txt_transaction_start(struct smbconf_ctx *ctx) +{ + return WERR_OK; +} + +static WERROR smbconf_txt_transaction_commit(struct smbconf_ctx *ctx) +{ + return WERR_OK; +} + +static WERROR smbconf_txt_transaction_cancel(struct smbconf_ctx *ctx) +{ + return WERR_OK; +} static struct smbconf_ops smbconf_ops_txt = { .init = smbconf_txt_init, @@ -633,6 +647,9 @@ static struct smbconf_ops smbconf_ops_txt = { .get_includes = smbconf_txt_get_includes, .set_includes = smbconf_txt_set_includes, .delete_includes = smbconf_txt_delete_includes, + .transaction_start = smbconf_txt_transaction_start, + .transaction_commit = smbconf_txt_transaction_commit, + .transaction_cancel = smbconf_txt_transaction_cancel, }; diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c index b1e34e51645..5a5c0ead654 100644 --- a/source3/lib/smbconf/smbconf_reg.c +++ b/source3/lib/smbconf/smbconf_reg.c @@ -1066,6 +1066,21 @@ done: return werr; } +static WERROR smbconf_reg_transaction_start(struct smbconf_ctx *ctx) +{ + return regdb_transaction_start(); +} + +static WERROR smbconf_reg_transaction_commit(struct smbconf_ctx *ctx) +{ + return regdb_transaction_commit(); +} + +static WERROR smbconf_reg_transaction_cancel(struct smbconf_ctx *ctx) +{ + return regdb_transaction_cancel(); +} + struct smbconf_ops smbconf_ops_reg = { .init = smbconf_reg_init, .shutdown = smbconf_reg_shutdown, @@ -1086,6 +1101,9 @@ struct smbconf_ops smbconf_ops_reg = { .get_includes = smbconf_reg_get_includes, .set_includes = smbconf_reg_set_includes, .delete_includes = smbconf_reg_delete_includes, + .transaction_start = smbconf_reg_transaction_start, + .transaction_commit = smbconf_reg_transaction_commit, + .transaction_cancel = smbconf_reg_transaction_cancel, };