On Sun, Mar 29, 2015 at 07:27:44AM -0700, Kent Fritz wrote:
> Running March 26 snapshot, amd64, and built-from-source for getting
> backtrace.  Simple httpd.conf.  Note that tls config is before non-tls --
> it works fine the other way:
> http_ip="192.168.1.131"
> 
> server "default" {
>         listen on $http_ip tls port 443
>         listen on $http_ip port 80
>         root "/var/www/htdocs"
> }
> 
> 
> # httpd -d -vvvvvvv
> startup
> server_tls_load_keypair: using certificate /etc/ssl/server.crt
> server_tls_load_keypair: using private key /etc/ssl/private/server.key
> server_privinit: adding server default
> server_privinit: adding server default
> socket_rlimit: max open files 1024
> socket_rlimit: max open files 1024
> socket_rlimit: max open files 1024
> logger exiting, pid 8995
> Segmentation fault (core dumped)
> # server exiting, pid 12675
> server exiting, pid 259
> server exiting, pid 6301

Thanks for the report.  The problem is config_setserver() using
tls_cert/tls_key when they are NULL but tls_cert_len/tls_key_len
have values.  The parser will inherit paths and lengths but
NULL the pointer to the loaded values.

server_tls_load_keypair() will always set the tls len values
we don't need to inherit them at all.

Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/parse.y,v
retrieving revision 1.66
diff -u -p -r1.66 parse.y
--- parse.y     9 Mar 2015 15:46:45 -0000       1.66
+++ parse.y     30 Mar 2015 07:06:08 -0000
@@ -1907,6 +1907,8 @@ server_inherit(struct server *src, const
                fatal("out of memory");
        dst->srv_conf.tls_cert = NULL;
        dst->srv_conf.tls_key = NULL;
+       dst->srv_conf.tls_cert_len = 0;
+       dst->srv_conf.tls_key_len = 0;
 
        if (src->srv_conf.return_uri != NULL &&
            (dst->srv_conf.return_uri =

Reply via email to