1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

r20016: Add two utility functions for easy opening/creating registry keys

(This used to be commit ad22a46718)
This commit is contained in:
Volker Lendecke 2006-12-03 16:19:15 +00:00 committed by Gerald (Jerry) Carter
parent fe34827ffd
commit 4a272ef0a8

View File

@ -522,8 +522,8 @@ WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
SAFE_FREE(path);
return err;
}
*pkey = hive;
SAFE_FREE(path);
*pkey = hive;
return WERR_OK;
}
@ -548,3 +548,97 @@ WERROR reg_open_path(TALLOC_CTX *mem_ctx, const char *orig_path,
*pkey = key;
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')) {
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;
}