{
va_list ap;
char buf[HUGE_STRING_LEN];
- char *sname, *iname;
+ char *sname, *iname, *serial;
+ BIGNUM *bn;
if (c->base_server->loglevel < level) {
/* Bail early since the rest of this function is expensive. */
sname = X509_NAME_oneline(X509_get_subject_name(cert), NULL, 0);
iname = X509_NAME_oneline(X509_get_issuer_name(cert), NULL, 0);
+ bn = ASN1_INTEGER_to_BN(X509_get_serialNumber(cert), NULL);
+ serial = bn && !BN_is_zero(bn) ? BN_bn2hex(bn) : NULL;
va_start(ap, format);
apr_vsnprintf(buf, sizeof buf, format, ap);
va_end(ap);
ap_log_cerror(file, line, level, rv, c,
- "%s [peer subject: %s, issuer: %s]",
+ "%s [peer subject: %s, issuer: %s, serial: %s]",
buf,
sname ? sname : "-unknown-",
- iname ? iname : "-unknown-");
+ iname ? iname : "-unknown-",
+ serial ? serial : "-unknown-");
if (sname) {
modssl_free(sname);
if (iname) {
modssl_free(iname);
}
+
+ if (serial) {
+ modssl_free(serial);
+ }
+
+ if (bn) {
+ BN_free(bn);
+ }
}