summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2008-03-21 22:52:27 +0100
committerMichael Adam <obnox@samba.org>2008-03-21 22:52:27 +0100
commitbe97af0edb085e1e33e3e8fbc97760249a720b52 (patch)
treeac4bc8316de5ca69969a5295ccd6e82ccb4dedd1 /source3
parent6f7cfeddd61f728e2452a7b89f5ee2ff36ca394f (diff)
downloadsamba-be97af0edb085e1e33e3e8fbc97760249a720b52.tar.gz
samba-be97af0edb085e1e33e3e8fbc97760249a720b52.tar.bz2
samba-be97af0edb085e1e33e3e8fbc97760249a720b52.zip
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 (This used to be commit a02163356bdd0c17a25a45e9904f8bd1e1c4bee4)
Diffstat (limited to 'source3')
-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;
}