31 #include "cmdhandler.h"
37 #include "clientpipe.h"
48 static const char *module_str =
"zone_del_cmd";
55 " --zone <zone> | --all aka -z | -a \n"
64 "Delete one zone or all of them from the enforcer database.\n"
66 "zone|all name of the zone or all zones\n"
67 "xml update zonelist.xml and remove the contents for the deleted zone\n\n"
83 client_printf_err(sockfd,
"Unable to get key data for zone %s from database!\n",
zone_db_name(zone));
121 run(
int sockfd, cmdhandler_ctx_type* context,
const char *cmd)
125 const char* argv[
NARGV];
127 const char *zone_name2 = NULL;
130 int long_index = 0, opt = 0;
135 char *signconf_del = NULL;
139 static struct option long_options[] = {
140 {
"zone", required_argument, 0,
'z'},
141 {
"all", no_argument, 0,
'a'},
142 {
"xml", no_argument, 0,
'u'},
148 if (!(buf = strdup(cmd))) {
149 client_printf_err(sockfd,
"memory error\n");
153 argc = ods_str_explode(buf,
NARGV, argv);
155 client_printf_err(sockfd,
"too many arguments\n");
156 ods_log_error(
"[%s] too many arguments for %s command",
163 while ((opt = getopt_long(argc, (
char*
const*)argv,
"z:au", long_options, &long_index)) != -1) {
175 client_printf_err(sockfd,
"unknown arguments\n");
176 ods_log_error(
"[%s] unknown arguments for %s command",
183 if (zone_name2 && !all) {
185 client_printf_err(sockfd,
"Unable to delete zone, zone %s not found!\n", zone_name2);
190 if (!delete_key_data(zone, dbconn, sockfd)) {
196 client_printf_err(sockfd,
"Unable to delete zone %s from database!\n", zone_name2);
202 strlen(
".ZONE_DELETED") + 1,
sizeof(char));
204 ods_log_error(
"[%s] malloc failed", module_str);
210 strncat(signconf_del,
".ZONE_DELETED", strlen(
".ZONE_DELETED"));
216 schedule_purge_owner(engine->
taskq, TASK_CLASS_ENFORCER, zone_name2);
218 ods_log_info(
"[%s] zone %s deleted", module_str, zone_name2);
219 client_printf(sockfd,
"Deleted zone %s successfully\n", zone_name2);
220 }
else if (!zone_name2 && all) {
222 client_printf_err(sockfd,
"Unable to get list of zones from database!\n");
227 if (!delete_key_data(zone, dbconn, sockfd)) {
231 client_printf_err(sockfd,
"Unable to delete zone %s from database!\n",
zone_db_name(zone));
236 strlen(
".ZONE_DELETED") + 1,
sizeof(char));
238 ods_log_error(
"[%s] malloc failed", module_str);
245 strncat(signconf_del,
".ZONE_DELETED", strlen(
".ZONE_DELETED"));
253 ods_log_info(
"[%s] zone %s deleted", module_str,
zone_db_name(zone));
254 client_printf(sockfd,
"Deleted zone %s successfully\n",
zone_db_name(zone));
258 client_printf(sockfd,
"All zones deleted successfully\n");
260 client_printf_err(sockfd,
"expected either --zone <zone> or --all\n");
289 if (snprintf(path,
sizeof(path),
"%s/%s", engine->
config->
working_dir, OPENDNSSEC_ENFORCER_ZONELIST) >= (
int)
sizeof(path)
292 ods_log_error(
"[%s] internal zonelist update failed", module_str);
293 client_printf_err(sockfd,
"Unable to update the internal zonelist %s, updates will not reach the Signer!\n", path);
296 ods_log_info(
"[%s] internal zonelist updated successfully", module_str);
299 if (snprintf(path,
sizeof(path),
"%s/%s", engine->
config->
working_dir, OPENDNSSEC_ENFORCER_ZONELIST) >= (
int)
sizeof(path)
302 ods_log_error(
"[%s] internal zonelist update failed", module_str);
303 client_printf_err(sockfd,
"Unable to update the internal zonelist %s, updates will not reach the Signer!\n", path);
306 ods_log_info(
"[%s] internal zonelist updated successfully", module_str);
315 "zone delete", &usage, &help, NULL, &run
db_connection_t * getconnectioncontext(cmdhandler_ctx_type *context)
engine_type * getglobalcontext(cmdhandler_ctx_type *context)
int hsm_key_factory_release_key_id(const db_value_t *hsm_key_id, const db_connection_t *connection)
const db_value_t * key_data_hsm_key_id(const key_data_t *key_data)
const db_value_t * key_data_id(const key_data_t *key_data)
int key_data_delete(key_data_t *key_data)
void key_data_free(key_data_t *key_data)
key_data_t * key_data_list_get_next(key_data_list_t *key_data_list)
const char * key_data_role_text(const key_data_t *key_data)
key_data_list_t * key_data_list_new_get_by_zone_id(const db_connection_t *connection, const db_value_t *zone_id)
void key_data_list_free(key_data_list_t *key_data_list)
key_state_list_t * key_state_list_new_get_by_key_data_id(const db_connection_t *connection, const db_value_t *key_data_id)
int key_state_delete(const key_state_t *key_state)
void key_state_free(key_state_t *key_state)
const char * key_state_type_text(const key_state_t *key_state)
void key_state_list_free(key_state_list_t *key_state_list)
key_state_t * key_state_list_get_next(key_state_list_t *key_state_list)
engineconfig_type * config
const char * zonelist_filename
zone_list_db_t * zone_list_db_new_get(const db_connection_t *connection)
void zone_db_free(zone_db_t *zone)
const char * zone_db_name(const zone_db_t *zone)
int zone_db_delete(zone_db_t *zone)
const char * zone_db_signconf_path(const zone_db_t *zone)
zone_db_t * zone_list_db_get_next(zone_list_db_t *zone_list)
const db_value_t * zone_db_id(const zone_db_t *zone)
void zone_list_db_free(zone_list_db_t *zone_list)
zone_db_t * zone_db_new_get_by_name(const db_connection_t *connection, const char *name)
struct cmd_func_block zone_del_funcblock
int zonelist_export(int sockfd, db_connection_t *connection, const char *filename, int comment)
#define ZONELIST_EXPORT_OK
int zonelist_update_delete(int sockfd, const char *filename, const zone_db_t *zone, int comment)
#define ZONELIST_UPDATE_OK