The branch, master has been updated via 2c9cb11 s3:registry: move prototypes of unused hilvl functions to ret_api_util.h and comment them out via 8eb487c s3:registry: move (commented out) hilvl util functions to reg_api_util.c via 0f7e503 s3:registry: move higher level function reg_open_path to new module reg_api_util from c9e17ed s3-waf: add net.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 2c9cb11f53cb6454c0941028f6c4339244f2af93 Author: Michael Adam <ob...@samba.org> Date: Mon Sep 20 19:32:28 2010 +0200 s3:registry: move prototypes of unused hilvl functions to ret_api_util.h and comment them out commit 8eb487cabac003911a49a4b5d3a9346fcb639430 Author: Michael Adam <ob...@samba.org> Date: Mon Sep 20 19:30:58 2010 +0200 s3:registry: move (commented out) hilvl util functions to reg_api_util.c commit 0f7e503d21562a8c8aee3de609bdcade790bc7a0 Author: Michael Adam <ob...@samba.org> Date: Mon Sep 20 02:42:10 2010 +0200 s3:registry: move higher level function reg_open_path to new module reg_api_util The reg_api.c code should just export functions that direclty relate to winreg api calls. ----------------------------------------------------------------------- Summary of changes: source3/Makefile.in | 1 + source3/include/registry.h | 10 -- source3/lib/smbconf/smbconf_reg.c | 1 + source3/libgpo/gpo_reg.c | 1 + source3/registry/reg_api.c | 154 ----------------------------- source3/registry/reg_api_util.c | 181 ++++++++++++++++++++++++++++++++++ source3/registry/reg_api_util.h | 46 +++++++++ source3/registry/reg_util_legacy.c | 1 + source3/rpc_server/srv_eventlog_nt.c | 1 + 9 files changed, 232 insertions(+), 164 deletions(-) create mode 100644 source3/registry/reg_api_util.c create mode 100644 source3/registry/reg_api_util.h Changeset truncated at 500 lines: diff --git a/source3/Makefile.in b/source3/Makefile.in index 8da8d6e..ce8c865 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -648,6 +648,7 @@ REG_BASE_OBJ = registry/reg_api.o \ REG_SMBCONF_OBJ = $(REG_BASE_OBJ) \ registry/reg_util_token.o \ + registry/reg_api_util.o \ $(REG_BACKENDS_SMBCONF_OBJ) \ $(REG_INIT_SMBCONF_OBJ) diff --git a/source3/include/registry.h b/source3/include/registry.h index 8aa02b9..600fffe 100644 --- a/source3/include/registry.h +++ b/source3/include/registry.h @@ -170,22 +170,12 @@ WERROR reg_setkeysecurity(struct registry_key *key, struct security_descriptor *psecdesc); WERROR reg_getversion(uint32_t *version); WERROR reg_deleteallvalues(struct registry_key *key); -WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path, - uint32 desired_access, const struct security_token *token, - struct registry_key **pkey); WERROR reg_deletekey_recursive(TALLOC_CTX *ctx, struct registry_key *parent, const char *path); WERROR reg_deletesubkeys_recursive(TALLOC_CTX *ctx, struct registry_key *parent, const char *path); -WERROR reg_create_path(TALLOC_CTX *mem_ctx, const char *orig_path, - uint32 desired_access, - const struct security_token *token, - enum winreg_CreateAction *paction, - struct registry_key **pkey); -WERROR reg_delete_path(const struct security_token *token, - const char *orig_path); /* The following definitions come from registry/reg_api_regf.c */ diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c index ba27b48..cafa3bf 100644 --- a/source3/lib/smbconf/smbconf_reg.c +++ b/source3/lib/smbconf/smbconf_reg.c @@ -22,6 +22,7 @@ #include "registry.h" #include "registry/reg_backend_db.h" #include "registry/reg_util_token.h" +#include "registry/reg_api_util.h" #include "lib/smbconf/smbconf_init.h" #include "lib/smbconf/smbconf_reg.h" diff --git a/source3/libgpo/gpo_reg.c b/source3/libgpo/gpo_reg.c index f599435..8c05b2f 100644 --- a/source3/libgpo/gpo_reg.c +++ b/source3/libgpo/gpo_reg.c @@ -22,6 +22,7 @@ #include "libgpo/gpo_proto.h" #include "registry.h" #include "registry/reg_backend_db.h" +#include "registry/reg_api_util.h" /**************************************************************** diff --git a/source3/registry/reg_api.c b/source3/registry/reg_api.c index ab5d86c..1cbe466 100644 --- a/source3/registry/reg_api.c +++ b/source3/registry/reg_api.c @@ -779,62 +779,6 @@ WERROR reg_deleteallvalues(struct registry_key *key) } /* - * Utility function to open a complete registry path including the hive prefix. - */ - -WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path, - uint32 desired_access, const struct security_token *token, - struct registry_key **pkey) -{ - struct registry_key *hive, *key; - char *path, *p; - WERROR err; - - if (!(path = SMB_STRDUP(orig_path))) { - return WERR_NOMEM; - } - - p = strchr(path, '\\'); - - if ((p == NULL) || (p[1] == '\0')) { - /* - * No key behind the hive, just return the hive - */ - - err = reg_openhive(mem_ctx, path, desired_access, token, - &hive); - if (!W_ERROR_IS_OK(err)) { - SAFE_FREE(path); - return err; - } - SAFE_FREE(path); - *pkey = hive; - return WERR_OK; - } - - *p = '\0'; - - err = reg_openhive(mem_ctx, path, KEY_ENUMERATE_SUB_KEYS, token, - &hive); - if (!W_ERROR_IS_OK(err)) { - SAFE_FREE(path); - return err; - } - - err = reg_openkey(mem_ctx, hive, p+1, desired_access, &key); - - TALLOC_FREE(hive); - SAFE_FREE(path); - - if (!W_ERROR_IS_OK(err)) { - return err; - } - - *pkey = key; - return WERR_OK; -} - -/* * Utility function to delete a registry key with all its subkeys. * Note that reg_deletekey returns ACCESS_DENIED when called on a * key that has subkeys. @@ -940,101 +884,3 @@ WERROR reg_deletesubkeys_recursive(TALLOC_CTX *ctx, return reg_deletekey_recursive_trans(ctx, parent, path, false); } -#if 0 -/* these two functions are unused. */ - -/** - * Utility function to create a registry key without opening the hive - * before. Assumes the hive already exists. - */ - -WERROR reg_create_path(TALLOC_CTX *mem_ctx, const char *orig_path, - uint32 desired_access, - const struct security_token *token, - enum winreg_CreateAction *paction, - struct registry_key **pkey) -{ - struct registry_key *hive; - char *path, *p; - WERROR err; - - if (!(path = SMB_STRDUP(orig_path))) { - return WERR_NOMEM; - } - - p = strchr(path, '\\'); - - if ((p == NULL) || (p[1] == '\0')) { - /* - * No key behind the hive, just return the hive - */ - - err = reg_openhive(mem_ctx, path, desired_access, token, - &hive); - if (!W_ERROR_IS_OK(err)) { - SAFE_FREE(path); - return err; - } - SAFE_FREE(path); - *pkey = hive; - *paction = REG_OPENED_EXISTING_KEY; - return WERR_OK; - } - - *p = '\0'; - - err = reg_openhive(mem_ctx, path, - (strchr(p+1, '\\') != NULL) ? - KEY_ENUMERATE_SUB_KEYS : KEY_CREATE_SUB_KEY, - token, &hive); - if (!W_ERROR_IS_OK(err)) { - SAFE_FREE(path); - return err; - } - - err = reg_createkey(mem_ctx, hive, p+1, desired_access, pkey, paction); - SAFE_FREE(path); - TALLOC_FREE(hive); - return err; -} - -/* - * Utility function to create a registry key without opening the hive - * before. Will not delete a hive. - */ - -WERROR reg_delete_path(const struct security_token *token, - const char *orig_path) -{ - struct registry_key *hive; - char *path, *p; - WERROR err; - - if (!(path = SMB_STRDUP(orig_path))) { - return WERR_NOMEM; - } - - p = strchr(path, '\\'); - - if ((p == NULL) || (p[1] == '\0')) { - SAFE_FREE(path); - return WERR_INVALID_PARAM; - } - - *p = '\0'; - - err = reg_openhive(NULL, path, - (strchr(p+1, '\\') != NULL) ? - KEY_ENUMERATE_SUB_KEYS : KEY_CREATE_SUB_KEY, - token, &hive); - if (!W_ERROR_IS_OK(err)) { - SAFE_FREE(path); - return err; - } - - err = reg_deletekey(hive, p+1); - SAFE_FREE(path); - TALLOC_FREE(hive); - return err; -} -#endif /* #if 0 */ diff --git a/source3/registry/reg_api_util.c b/source3/registry/reg_api_util.c new file mode 100644 index 0000000..592b370 --- /dev/null +++ b/source3/registry/reg_api_util.c @@ -0,0 +1,181 @@ +/* + * Unix SMB/CIFS implementation. + * Virtual Windows Registry Layer + * Copyright (C) Volker Lendecke 2006 + * Copyright (C) Michael Adam 2007-2010 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +/* + * Higher level utility functions on top of reg_api.c + */ + +#include "includes.h" +#include "registry.h" +#include "reg_api_util.h" + +/** + * Utility function to open a complete registry path including the hive prefix. + */ +WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path, + uint32 desired_access, const struct security_token *token, + struct registry_key **pkey) +{ + struct registry_key *hive, *key; + char *path, *p; + WERROR err; + + if (!(path = SMB_STRDUP(orig_path))) { + return WERR_NOMEM; + } + + p = strchr(path, '\\'); + + if ((p == NULL) || (p[1] == '\0')) { + /* + * No key behind the hive, just return the hive + */ + + err = reg_openhive(mem_ctx, path, desired_access, token, + &hive); + if (!W_ERROR_IS_OK(err)) { + SAFE_FREE(path); + return err; + } + SAFE_FREE(path); + *pkey = hive; + return WERR_OK; + } + + *p = '\0'; + + err = reg_openhive(mem_ctx, path, KEY_ENUMERATE_SUB_KEYS, token, + &hive); + if (!W_ERROR_IS_OK(err)) { + SAFE_FREE(path); + return err; + } + + err = reg_openkey(mem_ctx, hive, p+1, desired_access, &key); + + TALLOC_FREE(hive); + SAFE_FREE(path); + + if (!W_ERROR_IS_OK(err)) { + return err; + } + + *pkey = key; + return WERR_OK; +} + +#if 0 +/* these two functions are unused. */ + +/** + * Utility function to create a registry key without opening the hive + * before. Assumes the hive already exists. + */ + +WERROR reg_create_path(TALLOC_CTX *mem_ctx, const char *orig_path, + uint32 desired_access, + const struct security_token *token, + enum winreg_CreateAction *paction, + struct registry_key **pkey) +{ + struct registry_key *hive; + char *path, *p; + WERROR err; + + if (!(path = SMB_STRDUP(orig_path))) { + return WERR_NOMEM; + } + + p = strchr(path, '\\'); + + if ((p == NULL) || (p[1] == '\0')) { + /* + * No key behind the hive, just return the hive + */ + + err = reg_openhive(mem_ctx, path, desired_access, token, + &hive); + if (!W_ERROR_IS_OK(err)) { + SAFE_FREE(path); + return err; + } + SAFE_FREE(path); + *pkey = hive; + *paction = REG_OPENED_EXISTING_KEY; + return WERR_OK; + } + + *p = '\0'; + + err = reg_openhive(mem_ctx, path, + (strchr(p+1, '\\') != NULL) ? + KEY_ENUMERATE_SUB_KEYS : KEY_CREATE_SUB_KEY, + token, &hive); + if (!W_ERROR_IS_OK(err)) { + SAFE_FREE(path); + return err; + } + + err = reg_createkey(mem_ctx, hive, p+1, desired_access, pkey, paction); + SAFE_FREE(path); + TALLOC_FREE(hive); + return err; +} + +/* + * Utility function to create a registry key without opening the hive + * before. Will not delete a hive. + */ + +WERROR reg_delete_path(const struct security_token *token, + const char *orig_path) +{ + struct registry_key *hive; + char *path, *p; + WERROR err; + + if (!(path = SMB_STRDUP(orig_path))) { + return WERR_NOMEM; + } + + p = strchr(path, '\\'); + + if ((p == NULL) || (p[1] == '\0')) { + SAFE_FREE(path); + return WERR_INVALID_PARAM; + } + + *p = '\0'; + + err = reg_openhive(NULL, path, + (strchr(p+1, '\\') != NULL) ? + KEY_ENUMERATE_SUB_KEYS : KEY_CREATE_SUB_KEY, + token, &hive); + if (!W_ERROR_IS_OK(err)) { + SAFE_FREE(path); + return err; + } + + err = reg_deletekey(hive, p+1); + SAFE_FREE(path); + TALLOC_FREE(hive); + return err; +} +#endif /* #if 0 */ diff --git a/source3/registry/reg_api_util.h b/source3/registry/reg_api_util.h new file mode 100644 index 0000000..d2d7894 --- /dev/null +++ b/source3/registry/reg_api_util.h @@ -0,0 +1,46 @@ +/* + * Unix SMB/CIFS implementation. + * Virtual Windows Registry Layer + * Copyright (C) Volker Lendecke 2006 + * Copyright (C) Michael Adam 2007-2010 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +/* + * Higher level utility functions on top of reg_api.c + */ + +#ifndef _REG_API_UTIL_H +#define _REG_API_UTIL_H + +/** + * Utility function to open a complete registry path including the hive prefix. + */ +WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path, + uint32 desired_access, const struct security_token *token, + struct registry_key **pkey); + +#if 0 +/* currently unused */ +WERROR reg_create_path(TALLOC_CTX *mem_ctx, const char *orig_path, + uint32 desired_access, + const struct security_token *token, + enum winreg_CreateAction *paction, + struct registry_key **pkey); +WERROR reg_delete_path(const struct security_token *token, + const char *orig_path); +#endif + +#endif /* _REG_API_UTIL_H */ diff --git a/source3/registry/reg_util_legacy.c b/source3/registry/reg_util_legacy.c index 3a3f020..29b0889 100644 --- a/source3/registry/reg_util_legacy.c +++ b/source3/registry/reg_util_legacy.c @@ -22,6 +22,7 @@ #include "includes.h" #include "registry.h" #include "reg_util_legacy.h" +#include "reg_api_util.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_REGISTRY diff --git a/source3/rpc_server/srv_eventlog_nt.c b/source3/rpc_server/srv_eventlog_nt.c index 96787a3..de3439e 100644 --- a/source3/rpc_server/srv_eventlog_nt.c +++ b/source3/rpc_server/srv_eventlog_nt.c @@ -24,6 +24,7 @@ #include "../librpc/gen_ndr/srv_eventlog.h" #include "lib/eventlog/eventlog.h" #include "registry.h" +#include "registry/reg_api_util.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_RPC_SRV -- Samba Shared Repository