static int net_registry_deletekey_internal(struct net_context *c, int argc, const char **argv, bool recursive) { WERROR werr; char *subkeyname; struct registry_key *hivekey = NULL; TALLOC_CTX *ctx = talloc_stackframe(); int ret = -1; if (argc != 1 || c->display_usage) { d_printf("%s\n%s", _("Usage:"), _("net registry deletekey <path>\n")); d_printf("%s\n%s", _("Example:"), _("net registry deletekey " "'HKLM\\Software\\Samba\\smbconf.127.0.0.1'\n")); goto done; } if (strlen(argv[0]) == 0) { d_fprintf(stderr, _("error: zero length key name given\n")); goto done; } werr = open_hive(ctx, argv[0], REG_KEY_WRITE, &hivekey, &subkeyname); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, "open_hive %s: %s\n", _("failed"), win_errstr(werr)); goto done; } if (recursive) { werr = reg_deletekey_recursive(hivekey, subkeyname); } else { werr = reg_deletekey(hivekey, subkeyname); } if (!W_ERROR_IS_OK(werr) && !(c->opt_force && W_ERROR_EQUAL(werr, WERR_BADFILE))) { d_fprintf(stderr, "reg_deletekey %s: %s\n", _("failed"), win_errstr(werr)); goto done; } ret = 0; done: TALLOC_FREE(ctx); return ret; }
static int net_registry_deletekey(struct net_context *c, int argc, const char **argv) { WERROR werr; char *subkeyname; struct registry_key *hivekey = NULL; TALLOC_CTX *ctx = talloc_stackframe(); int ret = -1; if (argc != 1 || c->display_usage) { d_printf("Usage: net registry deletekey <path>\n"); d_printf("Example: net registry deletekey " "'HKLM\\Software\\Samba\\smbconf.127.0.0.1'\n"); goto done; } if (strlen(argv[0]) == 0) { d_fprintf(stderr, "error: zero length key name given\n"); goto done; } werr = open_hive(ctx, argv[0], REG_KEY_WRITE, &hivekey, &subkeyname); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, "open_hive failed: %s\n", win_errstr(werr)); goto done; } werr = reg_deletekey(hivekey, subkeyname); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, "reg_deletekey failed: %s\n", win_errstr(werr)); goto done; } ret = 0; done: TALLOC_FREE(ctx); return ret; }