static WERROR open_key(TALLOC_CTX *ctx, const char *path, uint32 desired_access, struct registry_key **key) { WERROR werr; char *subkey_name = NULL; struct registry_key *hive = NULL; TALLOC_CTX *tmp_ctx = talloc_stackframe(); if ((path == NULL) || (key == NULL)) { return WERR_INVALID_PARAM; } werr = open_hive(tmp_ctx, path, desired_access, &hive, &subkey_name); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, _("open_hive failed: %s\n"), win_errstr(werr)); goto done; } werr = reg_openkey(ctx, hive, subkey_name, desired_access, key); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, _("reg_openkey failed: %s\n"), win_errstr(werr)); goto done; } werr = WERR_OK; done: TALLOC_FREE(tmp_ctx); return werr; }
static int net_registry_enumerate_recursive(struct net_context *c, int argc, const char **argv) { WERROR werr; struct registry_key *key = NULL; char* name = NULL; TALLOC_CTX *ctx = talloc_stackframe(); int ret = -1; if (argc != 1 || c->display_usage) { d_printf("%s\n%s", _("Usage:"), _("net registry enumerate <path>\n")); d_printf("%s\n%s", _("Example:"), _("net registry enumerate 'HKLM\\Software\\Samba'\n")); goto done; } werr = open_hive(ctx, argv[0], REG_KEY_READ, &key, &name); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, _("open_key failed: %s\n"), win_errstr(werr)); goto done; } werr = registry_enumkey(key, name, true); if (W_ERROR_IS_OK(werr)) { ret = 0; } done: TALLOC_FREE(ctx); return ret; }
static int net_registry_createkey(struct net_context *c, int argc, const char **argv) { WERROR werr; enum winreg_CreateAction action; char *subkeyname; struct registry_key *hivekey = NULL; struct registry_key *subkey = NULL; TALLOC_CTX *ctx = talloc_stackframe(); int ret = -1; if (argc != 1 || c->display_usage) { d_printf("%s\n%s", _("Usage:"), _("net registry createkey <path>\n")); d_printf("%s\n%s", _("Example:"), _("net registry createkey " "'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_createkey(ctx, hivekey, subkeyname, REG_KEY_WRITE, &subkey, &action); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, _("reg_createkey failed: %s\n"), win_errstr(werr)); goto done; } switch (action) { case REG_ACTION_NONE: d_printf(_("createkey did nothing -- huh?\n")); break; case REG_CREATED_NEW_KEY: d_printf(_("createkey created %s\n"), argv[0]); break; case REG_OPENED_EXISTING_KEY: d_printf(_("createkey opened existing %s\n"), argv[0]); break; } ret = 0; done: TALLOC_FREE(ctx); return ret; }
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; }