From a02163356bdd0c17a25a45e9904f8bd1e1c4bee4 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Fri, 21 Mar 2008 22:52:27 +0100 Subject: [PATCH] libsmbconf: add private_data section to smbconf_ctx. This private data should be used by backends. The token for the registry backend is moved from the context to the private data section, since this is registry specific. Michael --- source/lib/smbconf/smbconf_private.h | 2 +- source/lib/smbconf/smbconf_reg.c | 26 +++++++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/source/lib/smbconf/smbconf_private.h b/source/lib/smbconf/smbconf_private.h index 6250dc73396..e08a2b186a1 100644 --- a/source/lib/smbconf/smbconf_private.h +++ b/source/lib/smbconf/smbconf_private.h @@ -54,9 +54,9 @@ struct smbconf_ops { }; struct smbconf_ctx { - NT_USER_TOKEN *token; const char *path; struct smbconf_ops *ops; + void *data; /* private data for use in backends */ }; WERROR smbconf_add_string_to_array(TALLOC_CTX *mem_ctx, diff --git a/source/lib/smbconf/smbconf_reg.c b/source/lib/smbconf/smbconf_reg.c index beb1c20de6e..aaa03e21e85 100644 --- a/source/lib/smbconf/smbconf_reg.c +++ b/source/lib/smbconf/smbconf_reg.c @@ -20,6 +20,9 @@ #include "includes.h" #include "smbconf_private.h" +struct reg_private_data { + NT_USER_TOKEN *token; +}; /********************************************************************** * @@ -27,6 +30,11 @@ * **********************************************************************/ +static struct reg_private_data *rpd(struct smbconf_ctx *ctx) +{ + return (struct reg_private_data *)(ctx->data); +} + /** * Open a registry key specified by "path" */ @@ -44,7 +52,7 @@ static WERROR smbconf_reg_open_path(TALLOC_CTX *mem_ctx, goto done; } - if (ctx->token == NULL) { + if (rpd(ctx)->token == NULL) { DEBUG(1, ("Error: token missing from smbconf_ctx. " "was smbconf_init() called?\n")); werr = WERR_INVALID_PARAM; @@ -57,7 +65,8 @@ static WERROR smbconf_reg_open_path(TALLOC_CTX *mem_ctx, goto done; } - werr = reg_open_path(mem_ctx, path, desired_access, ctx->token, key); + werr = reg_open_path(mem_ctx, path, desired_access, rpd(ctx)->token, + key); if (!W_ERROR_IS_OK(werr)) { DEBUG(1, ("Error opening registry path '%s': %s\n", @@ -385,18 +394,21 @@ static WERROR smbconf_reg_init(struct smbconf_ctx *ctx, const char *path) goto done; } - if (!registry_init_smbconf()) { - werr = WERR_REG_IO_FAILURE; - goto done; - } + ctx->data = TALLOC_ZERO_P(ctx, struct reg_private_data); werr = ntstatus_to_werror(registry_create_admin_token(ctx, - &(ctx->token))); + &(rpd(ctx)->token))); if (!W_ERROR_IS_OK(werr)) { DEBUG(1, ("Error creating admin token\n")); goto done; } + if (!registry_init_smbconf()) { + werr = WERR_REG_IO_FAILURE; + goto done; + } + + done: return werr; } -- 2.47.3