Move drop_smbconf_internal() to libnet_conf.c
[ira/wip.git] / source3 / libnet / libnet_conf.c
index 4c5a0829d6a947a16acbba0f5f0b547a931e87d4..e81b8b4111ee338e3f03907a9cf999c8323f2393 100644 (file)
@@ -243,6 +243,56 @@ done:
  *
  **********************************************************************/
 
+WERROR drop_smbconf_internal(TALLOC_CTX *ctx)
+{
+       char *path, *p;
+       WERROR werr = WERR_OK;
+       NT_USER_TOKEN *token;
+       struct registry_key *parent_key = NULL;
+       struct registry_key *new_key = NULL;
+       TALLOC_CTX* tmp_ctx = NULL;
+       enum winreg_CreateAction action;
+
+       tmp_ctx = talloc_new(ctx);
+       if (tmp_ctx == NULL) {
+               werr = WERR_NOMEM;
+               goto done;
+       }
+
+       if (!(token = registry_create_admin_token(tmp_ctx))) {
+               /* what is the appropriate error code here? */
+               werr = WERR_CAN_NOT_COMPLETE;
+               goto done;
+       }
+
+       path = talloc_strdup(tmp_ctx, KEY_SMBCONF);
+       if (path == NULL) {
+               d_fprintf(stderr, "ERROR: out of memory!\n");
+               werr = WERR_NOMEM;
+               goto done;
+       }
+       p = strrchr(path, '\\');
+       *p = '\0';
+       werr = reg_open_path(tmp_ctx, path, REG_KEY_WRITE, token, &parent_key);
+
+       if (!W_ERROR_IS_OK(werr)) {
+               goto done;
+       }
+
+       werr = reg_deletekey_recursive(tmp_ctx, parent_key, p+1);
+
+       if (!W_ERROR_IS_OK(werr)) {
+               goto done;
+       }
+
+       werr = reg_createkey(tmp_ctx, parent_key, p+1, REG_KEY_WRITE,
+                            &new_key, &action);
+
+done:
+       TALLOC_FREE(tmp_ctx);
+       return werr;
+}
+
 /**
  * delete a service from configuration
  */