pCtx->pStateMachine=SSLStateMachine_new(pConfig->szCertificateFile,
pConfig->szKeyFile);
+ if (!pCtx->pStateMachine) {
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+
pCtx->pInputFilter=ap_add_input_filter(s_szTLSFilterName,pCtx,NULL,c);
pCtx->pOutputFilter=ap_add_output_filter(s_szTLSFilterName,pCtx,NULL,c);
pCtx->pbbInput=apr_brigade_create(c->pool);
n=SSL_CTX_use_certificate_file(pMachine->pCtx,szCertificateFile,
SSL_FILETYPE_PEM);
- die_unless(n > 0);
+ if (n <= 0) {
+ SSLStateMachine_print_error(pMachine,
+ "Error opening certificate file:");
+ SSLStateMachine_destroy(pMachine);
+ return NULL;
+ }
n=SSL_CTX_use_PrivateKey_file(pMachine->pCtx,szKeyFile,SSL_FILETYPE_PEM);
- die_unless(n > 0);
+
+ if (n <= 0) {
+ SSLStateMachine_print_error(pMachine,
+ "Error opening private key file:");
+ SSLStateMachine_destroy(pMachine);
+ return NULL;
+ }
pMachine->pSSL=SSL_new(pMachine->pCtx);
die_unless(pMachine->pSSL);
void SSLStateMachine_destroy(SSLStateMachine *pMachine)
{
- SSL_free(pMachine->pSSL);
+ if (pMachine->pCtx) {
+ SSL_CTX_free(pMachine->pCtx);
+ }
+ if (pMachine->pSSL) {
+ SSL_free(pMachine->pSSL);
+ }
free(pMachine);
}