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_t 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_NOT_ENOUGH_MEMORY;
- }
-
- 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 recursively delete 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_NOT_ENOUGH_MEMORY;
- }
-
- p = strchr(path, '\\');
-
- if ((p == NULL) || (p[1] == '\0')) {
- SAFE_FREE(path);
- return WERR_INVALID_PARAMETER;
- }
-
- *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_recursive(hive, p+1);
- SAFE_FREE(path);
- TALLOC_FREE(hive);
- return err;
-}
-
-struct registry_value *registry_value_dw(TALLOC_CTX *mem_ctx, uint32_t dw)
-{
- struct registry_value *ret;
-
- ret = talloc_zero(mem_ctx, struct registry_value);
- if (ret == NULL) {
- return NULL;
- }
-
- ret->data = data_blob_talloc(ret, NULL, sizeof(uint32_t));
- if (ret->data.data == NULL) {
- talloc_free(ret);
- return NULL;
- }
-
- ret->type = REG_DWORD;
-
- SIVAL(ret->data.data, 0, dw);
-
- return ret;
-}
-
-struct registry_value *registry_value_sz(TALLOC_CTX *mem_ctx, const char *str)
-{
- struct registry_value *ret;
-
- ret = talloc_zero(mem_ctx, struct registry_value);
- if (ret == NULL) {
- return NULL;
- }
-
- if (!push_reg_sz(ret, &ret->data, str)) {
- talloc_free(ret);
- return NULL;
- }
-
- ret->type = REG_SZ;
-
- return ret;
-}
-
-struct registry_value *registry_value_multi_sz(TALLOC_CTX *mem_ctx, const char **str)
-{
- struct registry_value *ret;
-
- ret = talloc_zero(mem_ctx, struct registry_value);
- if (ret == NULL) {
- return NULL;
- }
-
- if (!push_reg_multi_sz(ret, &ret->data, str)) {
- talloc_free(ret);
- return NULL;
- }
-
- ret->type = REG_MULTI_SZ;
-
- return ret;
-}
-
int registry_value_cmp(const struct registry_value* v1, const struct registry_value* v2)
{
if (v1->type == v2->type) {
uint32_t desired_access, const struct security_token *token,
struct registry_key **pkey);
-WERROR reg_create_path(TALLOC_CTX *mem_ctx, const char *orig_path,
- uint32_t 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);
-
-struct registry_value *registry_value_dw(TALLOC_CTX *mem_ctx, uint32_t dw);
-struct registry_value *registry_value_sz(TALLOC_CTX *mem_ctx, const char *str);
-struct registry_value *registry_value_multi_sz(TALLOC_CTX *mem_ctx, const char **str);
-
int registry_value_cmp(const struct registry_value *v1, const struct registry_value *v2);
#endif /* _REG_API_UTIL_H */