Use libnet_smbconf_reg_open_path() in libnet_smbconf_drop().
[ira/wip.git] / source3 / libnet / libnet_conf.c
index ea8361a873eb3d7974472a2a124f213b6759332f..ca5b0c408fb9addc1258adc17ea4fa9783da443c 100644 (file)
@@ -54,37 +54,64 @@ static WERROR libnet_smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
        return WERR_OK;
 }
 
-/*
+/**
  * Open a subkey of KEY_SMBCONF (i.e a service)
  */
-static WERROR libnet_smbconf_reg_open_path(TALLOC_CTX *ctx,
-                                          const char *subkeyname,
+static WERROR libnet_smbconf_reg_open_path(TALLOC_CTX *mem_ctx,
+                                          const char *path,
                                           uint32 desired_access,
                                           struct registry_key **key)
 {
        WERROR werr = WERR_OK;
-       char *path = NULL;
        NT_USER_TOKEN *token;
 
-       if (!(token = registry_create_admin_token(ctx))) {
-               DEBUG(1, ("Error creating admin token\n"));
+       if (path == NULL) {
+               DEBUG(1, ("Error: NULL path string given\n"));
+               werr = WERR_INVALID_PARAM;
                goto done;
        }
 
-       if (subkeyname == NULL) {
-               path = talloc_strdup(ctx, KEY_SMBCONF);
-       } else {
-               path = talloc_asprintf(ctx, "%s\\%s", KEY_SMBCONF, subkeyname);
+       token = registry_create_admin_token(mem_ctx);
+       if (token == NULL) {
+               DEBUG(1, ("Error creating admin token\n"));
+               /* what is the appropriate error code here? */
+               werr = WERR_CAN_NOT_COMPLETE;
+               goto done;
        }
 
-       werr = reg_open_path(ctx, path, desired_access,
-                            token, key);
+       werr = reg_open_path(mem_ctx, path, desired_access, token, key);
 
        if (!W_ERROR_IS_OK(werr)) {
                DEBUG(1, ("Error opening registry path '%s': %s\n",
                          path, dos_errstr(werr)));
        }
 
+done:
+       return werr;
+}
+
+/**
+ * Open a subkey of KEY_SMBCONF (i.e a service)
+ */
+static WERROR libnet_smbconf_reg_open_service_key(TALLOC_CTX *ctx,
+                                                 const char *servicename,
+                                                 uint32 desired_access,
+                                                 struct registry_key **key)
+{
+       WERROR werr = WERR_OK;
+       char *path = NULL;
+       NT_USER_TOKEN *token;
+
+       if (servicename == NULL) {
+               DEBUG(3, ("Error: NULL servicename given.\n"));
+               werr = WERR_INVALID_PARAM;
+               goto done;
+       }
+
+       path = talloc_asprintf(ctx, "%s\\%s", KEY_SMBCONF, servicename);
+
+       werr = libnet_smbconf_reg_open_path(ctx, path, desired_access, key);
+
 done:
        TALLOC_FREE(path);
        return werr;
@@ -97,7 +124,8 @@ static WERROR libnet_smbconf_reg_open_basekey(TALLOC_CTX *ctx,
                                              uint32 desired_access,
                                              struct registry_key **key)
 {
-       return libnet_smbconf_reg_open_path(ctx, NULL, desired_access, key);
+       return libnet_smbconf_reg_open_path(ctx, KEY_SMBCONF, desired_access,
+                                           key);
 }
 
 static bool libnet_smbconf_value_exists(struct registry_key *key,
@@ -367,12 +395,6 @@ WERROR libnet_smbconf_drop(void)
        TALLOC_CTX* mem_ctx = talloc_stackframe();
        enum winreg_CreateAction action;
 
-       if (!(token = registry_create_admin_token(mem_ctx))) {
-               /* what is the appropriate error code here? */
-               werr = WERR_CAN_NOT_COMPLETE;
-               goto done;
-       }
-
        path = talloc_strdup(mem_ctx, KEY_SMBCONF);
        if (path == NULL) {
                werr = WERR_NOMEM;
@@ -380,7 +402,8 @@ WERROR libnet_smbconf_drop(void)
        }
        p = strrchr(path, '\\');
        *p = '\0';
-       werr = reg_open_path(mem_ctx, path, REG_KEY_WRITE, token, &parent_key);
+       werr = libnet_smbconf_reg_open_path(mem_ctx, path, REG_KEY_WRITE,
+                                           &parent_key);
 
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
@@ -572,8 +595,8 @@ bool libnet_smbconf_share_exists(const char *servicename)
        TALLOC_CTX *mem_ctx = talloc_stackframe();
        struct registry_key *key = NULL;
 
-       werr = libnet_smbconf_reg_open_path(mem_ctx, servicename, REG_KEY_READ,
-                                           &key);
+       werr = libnet_smbconf_reg_open_service_key(mem_ctx, servicename,
+                                                  REG_KEY_READ, &key);
        if (W_ERROR_IS_OK(werr)) {
                ret = true;
        }
@@ -592,8 +615,8 @@ WERROR libnet_smbconf_getshare(TALLOC_CTX *mem_ctx, const char *servicename,
        WERROR werr = WERR_OK;
        struct registry_key *key = NULL;
 
-       werr = libnet_smbconf_reg_open_path(mem_ctx, servicename, REG_KEY_READ,
-                                           &key);
+       werr = libnet_smbconf_reg_open_service_key(mem_ctx, servicename,
+                                                  REG_KEY_READ, &key);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -642,8 +665,8 @@ WERROR libnet_smbconf_setparm(const char *service,
                werr = libnet_smbconf_reg_createkey_internal(mem_ctx, service,
                                                             &key);
        } else {
-               werr = libnet_smbconf_reg_open_path(mem_ctx, service,
-                                                   REG_KEY_WRITE, &key);
+               werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
+                                                          REG_KEY_WRITE, &key);
        }
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
@@ -678,8 +701,8 @@ WERROR libnet_smbconf_getparm(TALLOC_CTX *mem_ctx,
                goto done;
        }
 
-       werr = libnet_smbconf_reg_open_path(mem_ctx, service, REG_KEY_READ,
-                                           &key);
+       werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
+                                                  REG_KEY_READ, &key);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -720,7 +743,8 @@ WERROR libnet_smbconf_delparm(const char *service,
                return WERR_NO_SUCH_SERVICE;
        }
 
-       werr = libnet_smbconf_reg_open_path(mem_ctx, service, REG_KEY_ALL, &key);
+       werr = libnet_smbconf_reg_open_service_key(mem_ctx, service,
+                                                  REG_KEY_ALL, &key);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }