1. Problem Description:
If I declare a <Perl> section in httpd.conf, then define
a virtual host with "PerlOptions +Parent", httpd dies with
a segfault on subsequent PerlRequires. This works in 2.0.1.
Here's a minimal example, tacked on to the end of the
default httpd.conf:
--- httpd.conf ---
<Perl>
1;
</Perl>
<VirtualHost _default_:80>
ServerAdmin [EMAIL PROTECTED]
DocumentRoot /www/docs/dummy-host.example.com
ServerName dummy-host.example.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
PerlOptions +Parent
PerlRequire /etc/httpd/conf/startup.pl
</VirtualHost>
--- startup.pl ---
use strict;
1;
Is this just bad syntax on our part that luckily Just
Worked or is this broken behavior in 2.0.2? We've been
using it to dynamically pull in various virtual hosts
based on host and domain name, but we could accomplish
the same thing with a clunky set if IfDefines, if we
have to.
2. Used Components and their Configuration (2.0.2):
*** mod_perl version 2.000002
*** using /tmp/mod_perl-2.0.2/lib/Apache2/BuildConfig.pm
*** Makefile.PL options:
MP_APR_LIB => aprext
MP_APXS => /usr/sbin/apxs
MP_COMPAT_1X => 1
MP_DEBUG => 1
MP_GENERATE_XS => 1
MP_LIBNAME => mod_perl
MP_TRACE => 1
MP_USE_DSO => 1
*** /usr/sbin/httpd -V
Server version: Apache/2.0.52
Server built: Dec 15 2005 04:09:14
Server's Module Magic Number: 20020903:9
Architecture: 32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
*** /usr/bin/ldd /usr/sbin/httpd
libpcre.so.0 => /lib/libpcre.so.0 (0x00865000)
libpcreposix.so.0 => /usr/lib/libpcreposix.so.0 (0x003fa000)
libaprutil-0.so.0 => /usr/lib/libaprutil-0.so.0 (0x009c1000)
libldap-2.2.so.7 => /usr/lib/libldap-2.2.so.7 (0x004de000)
liblber-2.2.so.7 => /usr/lib/liblber-2.2.so.7 (0x00709000)
libdb-4.2.so => /lib/tls/i686/libdb-4.2.so (0x00252000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00d7e000)
libapr-0.so.0 => /usr/lib/libapr-0.so.0 (0x00e65000)
librt.so.1 => /lib/tls/librt.so.1 (0x00a75000)
libm.so.6 => /lib/tls/libm.so.6 (0x00ead000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00111000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x009e5000)
libdl.so.2 => /lib/libdl.so.2 (0x005f5000)
libc.so.6 => /lib/tls/libc.so.6 (0x00715000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00a2d000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x0013f000)
libssl.so.4 => /lib/libssl.so.4 (0x00153000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0x005f9000)
/lib/ld-linux.so.2 (0x00ac6000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00187000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00429000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x005ad000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00e1d000)
libz.so.1 => /usr/lib/libz.so.1 (0x00efb000)
*** (apr|apu)-config linking info
-laprutil-0 -lldap -llber -ldb-4.2 -lexpat
-lapr-0 -lrt -lm -lcrypt -lpthread -ldl
*** /usr/bin/perl -V
Summary of my perl5 (revision 5 version 8 subversion 5) configuration:
Platform:
osname=linux, osvers=2.6.9-22.18.bz155725.elsmp,
archname=i386-linux-thread-multi
uname='linux hs20-bc1-4.build.redhat.com 2.6.9-22.18.bz155725.elsmp #1
smp thu nov 17 15:34:08 est 2005 i686 i686 i386 gnulinux '
config_args='-des -Doptimize=-O2 -g -pipe -m32 -march=i386 -mtune=pentium4
-Dversion=5.8.5 -Dmyhostname=localhost [EMAIL PROTECTED] -Dcc=gcc
-Dcf_by=Red Hat,
Inc. -Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux -Dvendorprefix=/usr
-Dsiteprefix=/usr -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid
-Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm
-Duseperlio -Dinstallusrbinperl -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less
-isr -Dinc_version_list=5.8.4 5.8.3 5.8.2 5.8.1 5.8.0'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags
='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
optimize='-O2 -g -pipe -m32 -march=i386 -mtune=pentium4',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe
-I/usr/local/include -I/usr/include/gdbm'
ccversion='', gccversion='3.4.5 20051201 (Red Hat 3.4.5-1)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=/lib/libc-2.3.4.so, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.3.4'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef,
ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: DEBUGGING MULTIPLICITY USE_ITHREADS USE_LARGE_FILES
PERL_IMPLICIT_CONTEXT
Built under linux
Compiled at Dec 16 2005 14:06:35
%ENV:
PERL_LWP_USE_HTTP_10="1"
@INC:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/5.8.5
/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.5
/usr/lib/perl5/site_perl/5.8.4
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl/5.8.2
/usr/lib/perl5/site_perl/5.8.1
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.5
/usr/lib/perl5/vendor_perl/5.8.4
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl/5.8.2
/usr/lib/perl5/vendor_perl/5.8.1
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl
.
*** Packages of interest status:
Apache2 : -
Apache2::Request : -
CGI : 3.15
ExtUtils::MakeMaker: 6.17
LWP : 5.79, 5.805
mod_perl : -
mod_perl2 : 2.000002
3. This is the core dump trace: (if you get a core dump):
#0 0x00516f3f in modperl_config_srv_merge (p=0x859c0a8, basev=0x85e7650,
addv=0x871f570) at modperl_config.c:306
#1 0x00c3b6de in ap_fixup_virtual_hosts () from /usr/sbin/httpd
#2 0x00c3e144 in main () from /usr/sbin/httpd
4. Used Components and their Configuration (2.0.1):
*** mod_perl version 2.000001
*** using /tmp/mod_perl-2.0.1/lib/Apache2/BuildConfig.pm
*** Makefile.PL options:
MP_APR_LIB => aprext
MP_APXS => /usr/sbin/apxs
MP_COMPAT_1X => 1
MP_GENERATE_XS => 1
MP_LIBNAME => mod_perl
MP_USE_DSO => 1
*** /usr/sbin/httpd -V
Server version: Apache/2.0.52
Server built: Dec 15 2005 04:09:14
Server's Module Magic Number: 20020903:9
Architecture: 32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
*** /usr/bin/ldd /usr/sbin/httpd
libpcre.so.0 => /lib/libpcre.so.0 (0x00464000)
libpcreposix.so.0 => /usr/lib/libpcreposix.so.0 (0x00713000)
libaprutil-0.so.0 => /usr/lib/libaprutil-0.so.0 (0x00828000)
libldap-2.2.so.7 => /usr/lib/libldap-2.2.so.7 (0x005f9000)
liblber-2.2.so.7 => /usr/lib/liblber-2.2.so.7 (0x00f83000)
libdb-4.2.so => /lib/tls/i686/libdb-4.2.so (0x00db6000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00111000)
libapr-0.so.0 => /usr/lib/libapr-0.so.0 (0x00689000)
librt.so.1 => /lib/tls/librt.so.1 (0x00130000)
libm.so.6 => /lib/tls/libm.so.6 (0x005a8000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x00208000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00352000)
libdl.so.2 => /lib/libdl.so.2 (0x00421000)
libc.so.6 => /lib/tls/libc.so.6 (0x00474000)
libresolv.so.2 => /lib/libresolv.so.2 (0x00144000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x00157000)
libssl.so.4 => /lib/libssl.so.4 (0x0016b000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0x009a6000)
/lib/ld-linux.so.2 (0x00afb000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x0019f000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00236000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x00320000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x001b3000)
libz.so.1 => /usr/lib/libz.so.1 (0x001d4000)
*** (apr|apu)-config linking info
-laprutil-0 -lldap -llber -ldb-4.2 -lexpat
-lapr-0 -lrt -lm -lcrypt -lpthread -ldl
*** /usr/bin/perl -V
Summary of my perl5 (revision 5 version 8 subversion 5) configuration:
Platform:
osname=linux, osvers=2.6.9-22.18.bz155725.elsmp,
archname=i386-linux-thread-multi
uname='linux hs20-bc1-4.build.redhat.com 2.6.9-22.18.bz155725.elsmp #1
smp thu nov 17 15:34:08 est 2005 i686 i686 i386 gnulinux '
config_args='-des -Doptimize=-O2 -g -pipe -m32 -march=i386 -mtune=pentium4
-Dversion=5.8.5 -Dmyhostname=localhost [EMAIL PROTECTED] -Dcc=gcc
-Dcf_by=Red Hat,
Inc. -Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux -Dvendorprefix=/usr
-Dsiteprefix=/usr -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid
-Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm
-Duseperlio -Dinstallusrbinperl -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less
-isr -Dinc_version_list=5.8.4 5.8.3 5.8.2 5.8.1 5.8.0'
hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define
usemultiplicity=define
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags
='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
optimize='-O2 -g -pipe -m32 -march=i386 -mtune=pentium4',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBUGGING -fno-strict-aliasing -pipe
-I/usr/local/include -I/usr/include/gdbm'
ccversion='', gccversion='3.4.5 20051201 (Red Hat 3.4.5-1)',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='gcc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
libc=/lib/libc-2.3.4.so, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.3.4'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef,
ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.5/i386-linux-thread-multi/CORE'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: DEBUGGING MULTIPLICITY USE_ITHREADS USE_LARGE_FILES
PERL_IMPLICIT_CONTEXT
Built under linux
Compiled at Dec 16 2005 14:06:35
%ENV:
PERL_LWP_USE_HTTP_10="1"
@INC:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/5.8.5
/usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.5
/usr/lib/perl5/site_perl/5.8.4
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl/5.8.2
/usr/lib/perl5/site_perl/5.8.1
/usr/lib/perl5/site_perl/5.8.0
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.1/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.5
/usr/lib/perl5/vendor_perl/5.8.4
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl/5.8.2
/usr/lib/perl5/vendor_perl/5.8.1
/usr/lib/perl5/vendor_perl/5.8.0
/usr/lib/perl5/vendor_perl
.
*** Packages of interest status:
Apache2 : -
Apache2::Request : -
CGI : 3.15
ExtUtils::MakeMaker: 6.17
LWP : 5.79, 5.805
mod_perl : -
mod_perl2 : 2.000001
____________________________________________________________
Eamon Daly