Hi,
The previous commit to libtls makes syslogd abort due to pledge if
certification verification is turned off. This happens in the
chrooted child process.
87878 syslogd CALL open(0x2d203ce4,0<O_RDONLY>)
87878 syslogd NAMI "/etc/ssl/cert.pem"
87878 syslogd PLDG open, "rpath", errno 1 Operation not permitted
87878 syslogd PSIG SIGABRT SIG_DFL code <-538976289>
We can either preload the cert in syslogd even if verification is
turned off.
Index: usr.sbin/syslogd/syslogd.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/syslogd/syslogd.c,v
retrieving revision 1.225
diff -u -p -r1.225 syslogd.c
--- usr.sbin/syslogd/syslogd.c 27 Dec 2016 19:16:24 -0000 1.225
+++ usr.sbin/syslogd/syslogd.c 29 Dec 2016 22:57:41 -0000
@@ -590,16 +590,14 @@ main(int argc, char *argv[])
if (NoVerify) {
tls_config_insecure_noverifycert(client_config);
tls_config_insecure_noverifyname(client_config);
- } else {
- if (tls_config_set_ca_file(client_config,
- CAfile) == -1) {
- logerrortlsconf("Load client TLS CA failed",
- client_config);
- /* avoid reading default certs in chroot */
- tls_config_set_ca_mem(client_config, "", 0);
- } else
- logdebug("CAfile %s\n", CAfile);
}
+ if (tls_config_set_ca_file(client_config, CAfile) == -1) {
+ logerrortlsconf("Load client TLS CA failed",
+ client_config);
+ /* avoid reading default certs in chroot */
+ tls_config_set_ca_mem(client_config, "", 0);
+ } else
+ logdebug("CAfile %s\n", CAfile);
if (ClientCertfile && ClientKeyfile) {
if (tls_config_set_cert_file(client_config,
ClientCertfile) == -1)
Or do not call tls_configure_ssl_verify() if verification is turned
off.
Index: lib/libtls/tls_client.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/lib/libtls/tls_client.c,v
retrieving revision 1.38
diff -u -p -r1.38 tls_client.c
--- lib/libtls/tls_client.c 26 Dec 2016 16:20:58 -0000 1.38
+++ lib/libtls/tls_client.c 29 Dec 2016 22:56:23 -0000
@@ -195,7 +195,9 @@ tls_connect_common(struct tls *ctx, cons
}
}
- if (tls_configure_ssl_verify(ctx, ctx->ssl_ctx, SSL_VERIFY_PEER) == -1)
+ if (ctx->config->verify_cert &&
+ (tls_configure_ssl_verify(ctx, ctx->ssl_ctx,
+ SSL_VERIFY_PEER) == -1))
goto err;
if (SSL_CTX_set_tlsext_status_cb(ctx->ssl_ctx, tls_ocsp_verify_cb) !=
1) {
I would prefer the fix in libtls as
- this problem may also affect other daemons
- avoid to do unnecsessary stuff
- syslogd could run on a system without cert.pem
comments? ok?
bluhm