diff options
| author | fengweihao <[email protected]> | 2020-11-27 19:21:49 +0800 |
|---|---|---|
| committer | fengweihao <[email protected]> | 2020-11-27 19:21:49 +0800 |
| commit | f2e9ba7d6f6f8810b9b4e60e31a6964eca62f9f7 (patch) | |
| tree | 0c4fd72cfcf443cb54c5e208362e130d559eabc5 /program | |
| parent | 67fecb2eb060885e0277125c64036b1345ae67c0 (diff) | |
修复签发证书失败异常分支处理出错v2.1.6-20201215
Diffstat (limited to 'program')
| -rw-r--r-- | program/src/cert_session.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/program/src/cert_session.cpp b/program/src/cert_session.cpp index 1b01dec..f7c999f 100644 --- a/program/src/cert_session.cpp +++ b/program/src/cert_session.cpp @@ -691,7 +691,6 @@ X509 *ssl_x509_forge(X509 *cacrt, EVP_PKEY *cakey, X509 *origcrt, char *pkey, in if(!ssl_key_gen(&key, pkey, public_algo)){ goto err; } - //subjectname,issuername subject = X509_get_subject_name(origcrt); issuer = X509_get_subject_name(cacrt); @@ -728,6 +727,8 @@ X509 *ssl_x509_forge(X509 *cacrt, EVP_PKEY *cakey, X509 *origcrt, char *pkey, in } EVP_PKEY_free(key); + key=NULL; + //extensions X509V3_CTX ctx; X509V3_set_ctx(&ctx, cacrt, crt, NULL, NULL, 0); @@ -876,7 +877,8 @@ X509 *ssl_x509_forge(X509 *cacrt, EVP_PKEY *cakey, X509 *origcrt, char *pkey, in return crt; errout: X509_free(crt); - EVP_PKEY_free(key); + if(key) + EVP_PKEY_free(key); err: return NULL; } @@ -1373,8 +1375,11 @@ redis_clnt_pdu_send(struct tfe_http_request *request) char *sign = NULL, pkey[SG_DATA_SIZE] = {0}; uint64_t expire_time = x509_online_append(&thread->def, request, &sign, pkey, &stack_ca); - if (sign == NULL && pkey[0] == '\0') + if (sign == NULL || pkey[0] == '\0') { + if (request->origin) + X509_free(request->origin); + request_destroy(request); mesa_runtime_log(RLOG_LV_FATAL, MODULE_NAME, "Failed to sign certificate"); evhttp_socket_send_error(request->evh_req, HTTP_NOTFOUND); return xret; @@ -1739,6 +1744,7 @@ void http_get_cb(struct evhttp_request *evh_req, void *arg) { if (xret == -2) { + request_destroy(request); evhttp_send_reply(evh_req, 200, "OK", NULL); goto finish; } |
