mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
Move reg_create_path() and reg_delete_path() to reg_api.c
Michael
(This used to be commit 4d82cc586c
)
This commit is contained in:
parent
00f3df3c13
commit
99b195a6aa
@ -794,3 +794,98 @@ WERROR reg_deletesubkeys_recursive(TALLOC_CTX *ctx,
|
|||||||
{
|
{
|
||||||
return reg_deletekey_recursive_internal(ctx, parent, path, false);
|
return reg_deletekey_recursive_internal(ctx, parent, path, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 nt_user_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) ?
|
||||||
|
SEC_RIGHTS_ENUM_SUBKEYS : SEC_RIGHTS_CREATE_SUBKEY,
|
||||||
|
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 nt_user_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) ?
|
||||||
|
SEC_RIGHTS_ENUM_SUBKEYS : SEC_RIGHTS_CREATE_SUBKEY,
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
@ -105,98 +105,3 @@ WERROR regkey_open_internal( TALLOC_CTX *ctx, REGISTRY_KEY **regkey,
|
|||||||
TALLOC_FREE(key);
|
TALLOC_FREE(key);
|
||||||
return WERR_OK;
|
return WERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* 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 nt_user_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) ?
|
|
||||||
SEC_RIGHTS_ENUM_SUBKEYS : SEC_RIGHTS_CREATE_SUBKEY,
|
|
||||||
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 nt_user_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) ?
|
|
||||||
SEC_RIGHTS_ENUM_SUBKEYS : SEC_RIGHTS_CREATE_SUBKEY,
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user