diff options
-rw-r--r-- | source3/lib/smbconf/smbconf_private.h | 2 | ||||
-rw-r--r-- | source3/lib/smbconf/smbconf_reg.c | 26 |
2 files changed, 20 insertions, 8 deletions
diff --git a/source3/lib/smbconf/smbconf_private.h b/source3/lib/smbconf/smbconf_private.h index 6250dc7339..e08a2b186a 100644 --- a/source3/lib/smbconf/smbconf_private.h +++ b/source3/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/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c index beb1c20de6..aaa03e21e8 100644 --- a/source3/lib/smbconf/smbconf_reg.c +++ b/source3/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; } |