From ac31f0bd330f2a78d1ed819f35149e24a59dc759 Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Feb 06 2015 23:57:36 +0000 Subject: Restart any waiting scepgen tasks with new certs --- diff --git a/src/cm.c b/src/cm.c index 8e33c6f..98bb3de 100644 --- a/src/cm.c +++ b/src/cm.c @@ -937,6 +937,23 @@ cm_restart_entry(struct cm_context *context, const char *nickname) cm_start_entry(context, nickname); } +dbus_bool_t +cm_restart_entries_by_ca(struct cm_context *context, const char *nickname) +{ + struct cm_store_entry *entry; + dbus_bool_t status = FALSE, this; + int i, n = 0; + + for (i = 0; i < context->n_entries; i++) { + entry = context->entries[i]; + if (strcmp(entry->cm_ca_nickname, nickname) == 0) { + this = cm_restart_entry(context, entry->cm_nickname); + status = n++ ? this && status : this; + } + } + return status; +} + struct cm_store_entry * cm_get_entry_by_busname(struct cm_context *context, const char *name) { diff --git a/src/cm.h b/src/cm.h index 1edaa8b..1d4162e 100644 --- a/src/cm.h +++ b/src/cm.h @@ -48,6 +48,7 @@ struct cm_store_ca *cm_get_ca_by_busname(struct cm_context *c, int cm_add_ca(struct cm_context *context, struct cm_store_ca *new_ca); int cm_remove_ca(struct cm_context *context, const char *nickname); dbus_bool_t cm_restart_entry(struct cm_context *c, const char *nickname); +dbus_bool_t cm_restart_entries_by_ca(struct cm_context *c, const char *nickname); dbus_bool_t cm_stop_entry(struct cm_context *c, const char *nickname); dbus_bool_t cm_start_entry(struct cm_context *c, const char *nickname); dbus_bool_t cm_restart_ca(struct cm_context *c, const char *nickname, diff --git a/src/iterate.c b/src/iterate.c index f7d617e..be771aa 100644 --- a/src/iterate.c +++ b/src/iterate.c @@ -2509,7 +2509,11 @@ cm_iterate_ca(struct cm_store_ca *ca, case cm_ca_phase_enroll_reqs: case cm_ca_phase_renew_reqs: case cm_ca_phase_capabilities: + ca->cm_ca_state[state->cm_phase] = CM_CA_IDLE; + *when = cm_time_now; + break; case cm_ca_phase_encryption_certs: + cm_restart_entries_by_ca(context, ca->cm_nickname); ca->cm_ca_state[state->cm_phase] = CM_CA_IDLE; *when = cm_time_now; break;