From 471a00ab702a1594656ed2b4c900271ac7eab08d Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Feb 27 2015 16:01:43 +0000 Subject: Handle "rejected" status from CA data requests --- diff --git a/src/cadata.c b/src/cadata.c index 274494f..0345fab 100644 --- a/src/cadata.c +++ b/src/cadata.c @@ -674,6 +674,19 @@ cm_cadata_modified(struct cm_cadata_state *state) } int +cm_cadata_rejected(struct cm_cadata_state *state) +{ + int status; + + status = cm_subproc_get_exitstatus(state->subproc); + if (WIFEXITED(status) && + (WEXITSTATUS(status) == CM_SUBMIT_STATUS_REJECTED)) { + return 0; + } + return -1; +} + +int cm_cadata_unsupported(struct cm_cadata_state *state) { int status; diff --git a/src/cadata.h b/src/cadata.h index 2da7f08..ffe28d5 100644 --- a/src/cadata.h +++ b/src/cadata.h @@ -52,6 +52,9 @@ int cm_cadata_unreachable(struct cm_cadata_state *state); /* Check if we're missing some configuration. */ int cm_cadata_unconfigured(struct cm_cadata_state *state); +/* Check if the server didn't support that. */ +int cm_cadata_rejected(struct cm_cadata_state *state); + /* Check if the helper didn't support that. */ int cm_cadata_unsupported(struct cm_cadata_state *state); diff --git a/src/iterate.c b/src/iterate.c index e2163e4..cb9478e 100644 --- a/src/iterate.c +++ b/src/iterate.c @@ -2336,6 +2336,16 @@ cm_iterate_ca(struct cm_store_ca *ca, cm_store_ca_phase_as_string(state->cm_phase)); ca->cm_ca_state[state->cm_phase] = CM_CA_NEED_TO_REFRESH; } else + if (cm_cadata_rejected(state->cm_task_state) == 0) { + cm_cadata_done(state->cm_task_state); + state->cm_task_state = NULL; + cm_log(3, "%s('%s').%s server doesn't support that\n", + ca->cm_busname, ca->cm_nickname, + cm_store_ca_phase_as_string(state->cm_phase)); + ca->cm_ca_state[state->cm_phase] = CM_CA_IDLE; + *when = cm_time_delay; + *delay = CM_DELAY_CA_POLL_MAXIMUM; + } else if (cm_cadata_unreachable(state->cm_task_state) == 0) { cm_cadata_done(state->cm_task_state); state->cm_task_state = NULL;