int ssl_sock_load_ocsp_response(struct buffer *ocsp_response,
struct certificate_ocsp *ocsp,
- OCSP_CERTID *cid, char **err);
+ OCSP_CERTID *cid, int *status, char **err);
int ssl_sock_update_ocsp_response(struct buffer *ocsp_response, char **err);
void ssl_sock_ocsp_free_func(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp);
*/
int ssl_sock_load_ocsp_response(struct buffer *ocsp_response,
struct certificate_ocsp *ocsp,
- OCSP_CERTID *cid, char **err)
+ OCSP_CERTID *cid, int *status, char **err)
{
OCSP_RESPONSE *resp;
OCSP_BASICRESP *bs = NULL;
long expire = 0;
#endif
+ if (status)
+ *status = V_OCSP_CERTSTATUS_UNKNOWN;
+
resp = d2i_OCSP_RESPONSE(NULL, (const unsigned char **)&p,
ocsp_response->data);
if (!resp) {
id = (OCSP_CERTID*)OCSP_SINGLERESP_get0_id(sr);
rc = OCSP_single_get0_status(sr, &reason, &revtime, &thisupd, &nextupd);
+ if (status)
+ *status = rc;
if (rc != V_OCSP_CERTSTATUS_GOOD && rc != V_OCSP_CERTSTATUS_REVOKED) {
memprintf(err, "OCSP single response: certificate status is unknown");
goto out;
*/
int ssl_sock_update_ocsp_response(struct buffer *ocsp_response, char **err)
{
- return ssl_sock_load_ocsp_response(ocsp_response, NULL, NULL, err);
+ return ssl_sock_load_ocsp_response(ocsp_response, NULL, NULL, NULL, err);
}
ret = 0;
warn = NULL;
- if (data->ocsp_response && ssl_sock_load_ocsp_response(data->ocsp_response, iocsp, data->ocsp_cid, &warn)) {
+ if (data->ocsp_response && ssl_sock_load_ocsp_response(data->ocsp_response, iocsp, data->ocsp_cid, NULL, &warn)) {
memprintf(&warn, "Loading: %s. Content will be ignored", warn ? warn : "failure");
ha_warning("%s.\n", warn);
}