@@ -97,14 +97,45 @@ static apr_status_t status_get_cert_json(md_json_t **pjson, const md_cert_t *cer
9797 return rv ;
9898}
9999
100+ static int md_job_json_seems_valid (md_json_t * json , md_store_t * store ,
101+ md_store_group_t group , const char * name ,
102+ apr_pool_t * p )
103+ {
104+
105+ if (!json ) return FALSE;
106+ if ((group == MD_SG_STAGING ) &&
107+ md_json_getb (json , MD_KEY_FINISHED , NULL ) &&
108+ md_json_getb (json , MD_KEY_NOTIFIED_RENEWED , NULL )) {
109+ md_t * md ;
110+ /* A finished job in the staging area needs to have produced results */
111+ if (!md_exists (store , group , name , p )) return FALSE;
112+
113+ if (APR_SUCCESS == md_load (store , MD_SG_DOMAINS , name , & md , p )) {
114+ int i ;
115+ for (i = 0 ; i < md_cert_count (md ); ++ i ) {
116+ md_pkey_spec_t * spec = md_pkeys_spec_get (md -> pks , i );
117+ if (md_pubcert_load (store , group , name , spec , NULL , p ) != APR_SUCCESS )
118+ return FALSE;
119+ }
120+ }
121+ }
122+ return TRUE;
123+ }
124+
100125static apr_status_t job_loadj (md_json_t * * pjson , md_store_group_t group , const char * name ,
101126 struct md_reg_t * reg , int with_log , apr_pool_t * p )
102127{
103128 apr_status_t rv ;
104129
105130 md_store_t * store = md_reg_store_get (reg );
106131 rv = md_store_load_json (store , group , name , MD_FN_JOB , pjson , p );
107- if (APR_SUCCESS == rv && !with_log ) md_json_del (* pjson , MD_KEY_LOG , NULL );
132+ if (APR_SUCCESS == rv ) {
133+ if (!md_job_json_seems_valid (* pjson , store , group , name , p )) {
134+ * pjson = NULL ;
135+ return APR_ENOENT ;
136+ }
137+ if (!with_log ) md_json_del (* pjson , MD_KEY_LOG , NULL );
138+ }
108139 return rv ;
109140}
110141
@@ -384,7 +415,8 @@ apr_status_t md_job_load(md_job_t *job)
384415 apr_status_t rv ;
385416
386417 rv = md_store_load_json (job -> store , job -> group , job -> mdomain , MD_FN_JOB , & jprops , job -> p );
387- if (APR_SUCCESS == rv ) {
418+ if ((APR_SUCCESS == rv ) &&
419+ md_job_json_seems_valid (jprops , job -> store , job -> group , job -> mdomain , job -> p )) {
388420 md_job_from_json (job , jprops , job -> p );
389421 }
390422 return rv ;
0 commit comments