diff options
Diffstat (limited to 'modules/ssl/ssl_engine_pphrase.c')
-rw-r--r-- | modules/ssl/ssl_engine_pphrase.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/modules/ssl/ssl_engine_pphrase.c b/modules/ssl/ssl_engine_pphrase.c index df81d121..a1f8734c 100644 --- a/modules/ssl/ssl_engine_pphrase.c +++ b/modules/ssl/ssl_engine_pphrase.c @@ -43,6 +43,12 @@ typedef struct { const char *pkey_file; } pphrase_cb_arg_t; +#ifdef HAVE_ECC +static const char *key_types[] = {"RSA", "DSA", "ECC"}; +#else +static const char *key_types[] = {"RSA", "DSA"}; +#endif + /* * Return true if the named file exists and is readable */ @@ -576,16 +582,29 @@ int ssl_pphrase_Handle_CB(char *buf, int bufsize, int verify, void *srv) */ else if (sc->server->pphrase_dialog_type == SSL_PPTYPE_FILTER) { const char *cmd = sc->server->pphrase_dialog_path; - const char **argv = apr_palloc(ppcb_arg->p, sizeof(char *) * 3); + const char **argv = apr_palloc(ppcb_arg->p, sizeof(char *) * 4); + const char *idx = ap_strrchr_c(ppcb_arg->key_id, ':') + 1; char *result; + int i; ap_log_error(APLOG_MARK, APLOG_INFO, 0, ppcb_arg->s, APLOGNO(01969) "Init: Requesting pass phrase from dialog filter " "program (%s)", cmd); argv[0] = cmd; - argv[1] = ppcb_arg->key_id; - argv[2] = NULL; + argv[1] = apr_pstrndup(ppcb_arg->p, ppcb_arg->key_id, + idx-1 - ppcb_arg->key_id); + if ((i = atoi(idx)) < CERTKEYS_IDX_MAX+1) { + /* + * For compatibility with existing 2.4.x configurations, use + * "RSA", "DSA" and "ECC" strings for the first two/three keys + */ + argv[2] = key_types[i]; + } else { + /* Four and above: use the integer index */ + argv[2] = apr_pstrdup(ppcb_arg->p, idx); + } + argv[3] = NULL; result = ssl_util_readfilter(ppcb_arg->s, ppcb_arg->p, cmd, argv); apr_cpystrn(buf, result, bufsize); |