31#include "cmdhandler.h"
37#include "clientpipe.h"
38#include "longgetopt.h"
49static const char *module_str =
"zone_del_cmd";
56 " --zone <zone> | --all aka -z | -a \n"
65 "Delete one zone or all of them from the enforcer database.\n"
67 "zone|all name of the zone or all zones\n"
68 "xml update zonelist.xml and remove the contents for the deleted zone\n\n"
84 client_printf_err(sockfd,
"Unable to get key data for zone %s from database!\n",
zone_db_name(zone));
122run(cmdhandler_ctx_type* context,
int argc,
char* argv[])
124 int sockfd = context->sockfd;
125 struct longgetopt optctx;
126 const char *zone_name2 = NULL;
129 int long_index = 0, opt = 0;
134 char *signconf_del = NULL;
138 static struct option long_options[] = {
139 {
"zone", required_argument, 0,
'z'},
140 {
"all", no_argument, 0,
'a'},
141 {
"xml", no_argument, 0,
'u'},
145 for(opt = longgetopt(argc, argv,
"z:au", long_options, &long_index, &optctx); opt != -1;
146 opt = longgetopt(argc, argv, NULL, long_options, &long_index, &optctx)) {
149 zone_name2 = optctx.optarg;
158 client_printf_err(sockfd,
"unknown arguments\n");
159 ods_log_error(
"[%s] unknown arguments for zone delete command", module_str);
164 if (zone_name2 && !all) {
166 client_printf_err(sockfd,
"Unable to delete zone, zone %s not found!\n", zone_name2);
170 if (!delete_key_data(zone, dbconn, sockfd)) {
175 client_printf_err(sockfd,
"Unable to delete zone %s from database!\n", zone_name2);
180 strlen(
".ZONE_DELETED") + 1,
sizeof(char));
182 ods_log_error(
"[%s] malloc failed", module_str);
187 strncat(signconf_del,
".ZONE_DELETED", strlen(
".ZONE_DELETED"));
193 schedule_purge_owner(engine->
taskq, TASK_CLASS_ENFORCER, zone_name2);
195 ods_log_info(
"[%s] zone %s deleted", module_str, zone_name2);
196 client_printf(sockfd,
"Deleted zone %s successfully\n", zone_name2);
197 }
else if (!zone_name2 && all) {
199 client_printf_err(sockfd,
"Unable to get list of zones from database!\n");
203 if (!delete_key_data(zone, dbconn, sockfd)) {
207 client_printf_err(sockfd,
"Unable to delete zone %s from database!\n",
zone_db_name(zone));
212 strlen(
".ZONE_DELETED") + 1,
sizeof(char));
214 ods_log_error(
"[%s] malloc failed", module_str);
220 strncat(signconf_del,
".ZONE_DELETED", strlen(
".ZONE_DELETED"));
228 ods_log_info(
"[%s] zone %s deleted", module_str,
zone_db_name(zone));
229 client_printf(sockfd,
"Deleted zone %s successfully\n",
zone_db_name(zone));
233 client_printf(sockfd,
"All zones deleted successfully\n");
235 client_printf_err(sockfd,
"expected either --zone <zone> or --all\n");
262 if (snprintf(path,
sizeof(path),
"%s/%s", engine->
config->
working_dir, OPENDNSSEC_ENFORCER_ZONELIST) >= (
int)
sizeof(path)
265 ods_log_error(
"[%s] internal zonelist update failed", module_str);
266 client_printf_err(sockfd,
"Unable to update the internal zonelist %s, updates will not reach the Signer!\n", path);
269 ods_log_info(
"[%s] internal zonelist updated successfully", module_str);
272 if (snprintf(path,
sizeof(path),
"%s/%s", engine->
config->
working_dir, OPENDNSSEC_ENFORCER_ZONELIST) >= (
int)
sizeof(path)
275 ods_log_error(
"[%s] internal zonelist update failed", module_str);
276 client_printf_err(sockfd,
"Unable to update the internal zonelist %s, updates will not reach the Signer!\n", path);
279 ods_log_info(
"[%s] internal zonelist updated successfully", module_str);
288 "zone delete", &usage, &help, NULL, NULL, &run, NULL
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_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)
const char * key_data_role_text(const key_data_t *key_data)
void key_data_list_free(key_data_list_t *key_data_list)
key_data_list_t * key_data_list_new_get_by_zone_id(const db_connection_t *connection, const db_value_t *zone_id)
key_data_t * key_data_list_get_next(key_data_list_t *key_data_list)
const db_value_t * key_data_hsm_key_id(const key_data_t *key_data)
key_state_t * key_state_list_get_next(key_state_list_t *key_state_list)
int key_state_delete(const key_state_t *key_state)
void key_state_free(key_state_t *key_state)
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)
void key_state_list_free(key_state_list_t *key_state_list)
const char * key_state_type_text(const key_state_t *key_state)
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)
int zone_db_delete(zone_db_t *zone)
const char * zone_db_signconf_path(const zone_db_t *zone)
const char * zone_db_name(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)
zone_db_t * zone_db_new_get_by_name(const db_connection_t *connection, const char *name)
void zone_list_db_free(zone_list_db_t *zone_list)
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