summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/smbconf/smbconf_private.h2
-rw-r--r--source3/lib/smbconf/smbconf_reg.c26
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;
}