33 #include "cmdhandler.h" 40 #include "clientpipe.h" 48 static const char *module_str =
"keystate_list_task";
51 #define HID KEY_STATE_STATE_HIDDEN 52 #define RUM KEY_STATE_STATE_RUMOURED 53 #define OMN KEY_STATE_STATE_OMNIPRESENT 54 #define UNR KEY_STATE_STATE_UNRETENTIVE 55 #define NAV KEY_STATE_STATE_NA 58 const char*
statenames[] = {
"generate",
"publish",
"ready",
59 "active",
"retire",
"unknown",
"mixed"};
144 return strdup(
"waiting for ds-submit");
146 return strdup(
"waiting for ds-seen");
148 return strdup(
"waiting for ds-retract");
150 return strdup(
"waiting for ds-gone");
157 return strdup(
"now");
160 localtime_r(&t, &srtm);
161 strftime(ct, 26,
"%Y-%m-%d %H:%M:%S", &srtm);
167 const char* zonename,
const char* keytype,
const char* keystate,
168 void (printheader)(
int sockfd),
178 client_printf_err(sockfd,
"Unable to get list of keys, memory " 179 "allocation or database error!\n");
184 (*printheader)(sockfd);
200 tchange = map_keytime(zone, key);
202 (*printkey)(sockfd, zone, key, tchange, hsmkey);
215 client_printf(sockfd,
217 " [--verbose] aka -v\n" 218 " [--debug] aka -d\n" 219 " [--parsable] aka -p\n" 220 " [--zone] aka -z \n" 221 " [--keystate | --all] aka -k | -a \n" 228 client_printf(sockfd,
229 "List the keys in the enforcer database.\n" 231 "verbose also show additional key parameters\n" 232 "debug print information about the keystate\n" 233 "parsable output machine parsable list\n" 234 "zone limit the output to the specific zone\n" 235 "keytype limit the output to the given type, can be ZSK, KSK, or CSK\n" 236 "keystate limit the output to the given state\n" 237 "all print keys in all states (including generate) \n\n");
241 printcompatheader(
int sockfd) {
242 client_printf(sockfd,
"Keys:\n");
243 client_printf(sockfd,
"%-31s %-8s %-9s %s\n",
"Zone:",
"Keytype:",
"State:",
244 "Date of next transition:");
250 client_printf(sockfd,
251 "%-31s %-8s %-9s %s\n",
259 printverboseheader(
int sockfd) {
260 client_printf(sockfd,
"Keys:\n");
261 client_printf(sockfd,
"%-31s %-8s %-9s %-24s %-5s %-10s %-32s %-11s %s\n",
"Zone:",
"Keytype:",
"State:",
262 "Date of next transition:",
"Size:",
"Algorithm:",
"CKA_ID:",
263 "Repository:",
"KeyTag:");
269 client_printf(sockfd,
270 "%-31s %-8s %-9s %-24s %-5d %-10d %-32s %-11s %d\n",
284 client_printf(sockfd,
285 "%s;%s;%s;%s;%d;%d;%s;%s;%d\n",
298 printdebugheader(
int sockfd) {
299 client_printf(sockfd,
300 "Keys:\nZone: Key role: " 301 "DS: DNSKEY: RRSIGDNSKEY: RRSIG: " 308 client_printf(sockfd,
309 "%-31s %-13s %-12s %-12s %-12s %-12s %d %4d %s\n",
324 client_printf(sockfd,
325 "%s;%s;%s;%s;%s;%s;%d;%d;%s\n",
338 run(
int sockfd, cmdhandler_ctx_type* context,
const char *cmd)
340 char buf[ODS_SE_MAXLINE];
342 const char *argv[
NARGV];
343 int success, argIndex;
344 int argc = 0, bVerbose = 0, bDebug = 0, bParsable = 0, bAll = 0;
345 int long_index = 0, opt = 0;
346 const char* keytype = NULL;
347 const char* keystate = NULL;
348 const char* zonename = NULL;
351 static struct option long_options[] = {
352 {
"verbose", no_argument, 0,
'v'},
353 {
"debug", no_argument, 0,
'd'},
354 {
"parsable", no_argument, 0,
'p'},
355 {
"zone", required_argument, 0,
'z'},
356 {
"keytype", required_argument, 0,
't'},
357 {
"keystate", required_argument, 0,
'e'},
358 {
"all", no_argument, 0,
'a'},
365 strncpy(buf, cmd,
sizeof (buf));
366 buf[
sizeof (buf) - 1] =
'\0';
369 argc = ods_str_explode(buf,
NARGV, argv);
371 ods_log_error(
"[%s] too many arguments for %s command",
373 client_printf_err(sockfd,
"too many arguments\n");
377 while ((opt = getopt_long(argc, (
char*
const*)argv,
"vdpz:t:e:a", long_options, &long_index) ) != -1) {
401 client_printf_err(sockfd,
"unknown arguments\n");
402 ods_log_error(
"[%s] unknown arguments for %s command",
408 if (keystate != NULL && bAll) {
409 client_printf(sockfd,
"Error: --keystate and --all option cannot be given together\n");
415 success = perform_keystate_list(sockfd, dbconn, zonename, keytype, keystate, NULL, &printdebugparsablekey);
417 success = perform_keystate_list(sockfd, dbconn, zonename, keytype, keystate, &printdebugheader, &printdebugkey);
419 }
else if (bVerbose) {
421 success = perform_keystate_list(sockfd, dbconn, zonename, keytype, keystate, NULL, &printverboseparsablekey);
423 success = perform_keystate_list(sockfd, dbconn, zonename, keytype, keystate, &printverboseheader, &printverbosekey);
427 client_printf_err(sockfd,
"-p option only available in combination with -v and -d.\n");
428 success = perform_keystate_list(sockfd, dbconn, zonename, keytype, keystate, &printcompatheader, &printcompatkey);
435 "key list", &usage, &help, NULL, &run
const char * key_data_role_text(const key_data_t *key_data)
const char * key_state_state_text(const key_state_t *key_state)
void zone_db_free(zone_db_t *zone)
hsm_key_t * key_data_get_hsm_key(const key_data_t *key_data)
unsigned int key_data_publish(const key_data_t *key_data)
unsigned int key_data_active_zsk(const key_data_t *key_data)
key_data_list_t * key_data_list_new_get(const db_connection_t *connection)
const db_value_t * key_data_zone_id(const key_data_t *key_data)
struct cmd_func_block key_list_funcblock
enum key_data_ds_at_parent key_data_ds_at_parent_t
unsigned int key_data_keytag(const key_data_t *key_data)
key_data_t * key_data_list_get_next(key_data_list_t *key_data_list)
const char * hsm_key_repository(const hsm_key_t *hsm_key)
unsigned int key_data_introducing(const key_data_t *key_data)
db_connection_t * getconnectioncontext(cmdhandler_ctx_type *context)
const key_state_t * key_data_cached_rrsigdnskey(key_data_t *key_data)
int db_value_cmp(const db_value_t *value_a, const db_value_t *value_b, int *result)
const char * statenames[]
int zone_db_next_change(const zone_db_t *zone)
int key_data_cache_key_states(key_data_t *key_data)
const char * zone_db_name(const zone_db_t *zone)
const char * hsm_key_locator(const hsm_key_t *hsm_key)
const char * map_keystate(key_data_t *key)
const key_state_t * key_data_cached_rrsig(key_data_t *key_data)
zone_db_t * key_data_get_zone(const key_data_t *key_data)
const key_state_t * key_data_cached_ds(key_data_t *key_data)
void key_data_list_free(key_data_list_t *key_data_list)
const key_state_t * key_data_cached_dnskey(key_data_t *key_data)
void key_data_free(key_data_t *key_data)
unsigned int hsm_key_algorithm(const hsm_key_t *hsm_key)
void hsm_key_free(hsm_key_t *hsm_key)
unsigned int key_data_active_ksk(const key_data_t *key_data)
const db_value_t * zone_db_id(const zone_db_t *zone)
unsigned int hsm_key_bits(const hsm_key_t *hsm_key)