#3899: mutt_ssl's interactive_check_cert() has several issues
-----------------------+----------------------
Reporter: kevin8t8 | Owner: mutt-dev
Type: defect | Status: closed
Priority: major | Milestone:
Component: crypto | Version:
Resolution: fixed | Keywords:
-----------------------+----------------------
Comment (by derekmartin):
The struct version would look something like this:
{{{
static int get_cert_check_parts(X509_NAME *n, mutt_cert_check_parts *cp)
{
buf[STRING];
/* if this can fail, return FAIL? */
cp->common_name = x509_get_part(n, NID_commonName);
cp->email_addr = x509_get_part(n, NID_pkcs9_emailAddress);
cp->org_name = x509_get_part(n, NID_organizationName);
cp->org_unit_name = x509_get_part(n, NID_organizationalUnitName);
cp->locality = x509_get_part(n, NID_localityName);
cp->state_prov = x509_get_part(n, NID_stateOrProvince);
cp->country = x509_get_part(n, NID_countryName);
return SUCCESS;
}
/* optionally could take int *row here... */
static void sprintf_cert_menu(MUTTMENU *menu, mutt_cert_check_parts *cp)
{
int row = 0;
snprintf(menu->dialog[row++], SHORT_STRING, " %s", cp->common_name);
snprintf(menu->dialog[row++], SHORT_STRING, " %s", cp->email_addr);
snprintf(menu->dialog[row++], SHORT_STRING, " %s", cp->org_name);
snprintf(menu->dialog[row++], SHORT_STRING, " %s",
cp->org_unit_name);
snprintf(menu->dialog[row++], SHORT_STRING, " %s", cp->locality);
snprintf(menu->dialog[row++], SHORT_STRING, " %s", cp->state_prov);
snprintf(menu->dialog[row++], SHORT_STRING, " %s", cp->country);
}
static int interactive_cert_check(...)
{
X509_NAME *issuer;
X509_NAME *subject;
mutt_cert_check_parts issuer_parts;
mutt_cert_check_parts subject_parts;
[...]
issuer = X509_get_issuer_name(cert);
/* handle error if appropriate */
get_cert_check_parts(issuer, &issuer_parts);
sprintf_cert_menu(menu, &issuer_parts);
subject = X509_get_subject_name(cert);
/* handle error if appropriate */
get_cert_check_parts(subject, &issuer_parts);
sprintf_cert_menu(menu, &subject_parts);
[...]
}
--
Ticket URL: <https://dev.mutt.org/trac/ticket/3899#comment:11>
Mutt <http://www.mutt.org/>
The Mutt mail user agent