-------------8<---------- Start Bug Report ------------8<----------
1. Problem Description:
Summary: mod_perl is making httpd segfault.
I'm developing a PerlAccessHandler that will check for a
cookie to see if the user has accepted a legal agreement before
allowing them to visit a page. If the cookie is not present, they'll
be redirected to a form where they read and perhaps accept the
agreement.
The way I'm implementing this may not be kosher (I'm just dipping
my toes in the mod_perl waters now), but I'd expect to get an
error, not a segfault.
Note: all tests passed when I built mod_perl.
>From error_log:
[Thu Nov 15 13:40:15 2007] [notice] child pid 21284 exit signal
Segmentation fault (11)
>From httpd.conf:
Alias /mp/ /data/software/www/mp/
PerlRequire /data/software/www/mp/startup.pl
<Location /mp>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
<Location /members>
SetHandler perl-script
PerlAccessHandler Calce::CheckCLA
</Location>
Entire startup.pl:
use lib qw(/data/software/www/mp/lib);
1;
Here's my handler (a work in progress):
#
# mod_perl handler to check whether user
# has accepted the Calce Legal Agreement.
#
# Author: David Eisner
# Date: November 2007
package Calce::CheckCLA;
use strict;
use warnings;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use APR::Table ();
use CGI::Cookie ();
use Apache2::Const -compile => qw(FORBIDDEN OK REDIRECT);
my $CLA_FORM = "/mp/legal?r=http://slashdot.org";
my $COOKIE = "ACCEPT_CLA";
my $COOKIE_YES = "Y";
sub handler {
my $r = shift;
my $cla_accepted = get_cookie_val($r);
if ($cla_accepted eq "Y") {
return Apache2::Const::OK;
}
else {
$r->headers_out->set(Location => $CLA_FORM);
$r->status(Apache2::Const::REDIRECT);
return Apache2::Const::REDIRECT;
}
# return Apache2::Const::OK;
# return Apache2::Const::FORBIDDEN;
}
sub get_cookie_val($) {
my $r = shift;
my $cla_accepted = 0;
$r->subprocess_env();
my %cookies = fetch CGI::Cookie;
if ($cookies{$COOKIE}) {
$cla_accepted = $cookies{$COOKIE}->value;
}
return $cla_accepted;
}
1;
2. Used Components and their Configuration:
*** mod_perl version 2.000003
*** using
/data/software/perl/perl-5.8.8/lib/site_perl/5.8.8/sun4-solaris/Apache2/BuildConfig.pm
*** Makefile.PL options:
MP_APR_LIB => aprext
MP_AP_PREFIX => /data/software/www/apache-2.0.61
MP_COMPAT_1X => 1
MP_DEBUG => 1
MP_GENERATE_XS => 1
MP_LIBNAME => mod_perl
MP_TRACE => 1
MP_USE_DSO => 1
*** The httpd binary was not found
*** (apr|apu)-config linking info
-L/data/software/www/apache-2.0.61/lib -laprutil-0 -lexpat
-L/data/software/www/apache-2.0.61/lib
-L/data/software/www/apache-2.0.61/lib -lapr-0 -lsendfile -lrt -lm
-lsocket -lnsl -lresolv -lpthread -ldl
*** /data/software/perl/perl-5.8.8/bin/perl -V
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
Platform:
osname=solaris, osvers=2.9, archname=sun4-solaris
uname='sunos cannes.umd.edu 5.9 generic_122300-08 sun4u sparc
sunw,ultra-30 '
config_args=''
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
use64bitint=undef use64bitall=undef uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='/opt/SUNWspro/bin/cc', ccflags =' -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64',
optimize='-O',
cppflags=''
ccversion='Sun C 5.8 Patch 121015-01 2006/01/26', gccversion='',
gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='/opt/SUNWspro/bin/cc', ldflags =' -L/usr/lib -L/usr/ccs/lib
-L/afs/glue.umd.edu/software/sunstudio/11/SUNWspro/prod/lib/v8plus
-L/afs/glue.umd.edu/software/sunstudio/11/SUNWspro/prod/lib -L/lib '
libpth=/usr/lib /usr/ccs/lib
/afs/glue.umd.edu/software/sunstudio/11/SUNWspro/prod/lib/v8plus
/afs/glue.umd.edu/software/sunstudio/11/SUNWspro/prod/lib /lib
libs=-lsocket -lnsl -ldl -lm -lc
perllibs=-lsocket -lnsl -ldl -lm -lc
libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
cccdlflags='-KPIC', lddlflags='-G -L/usr/lib -L/usr/ccs/lib
-L/afs/glue.umd.edu/software/sunstudio/11/SUNWspro/prod/lib/v8plus
-L/afs/glue.umd.edu/software/sunstudio/11/SUNWspro/prod/lib -L/lib'
Characteristics of this binary (from libperl):
Compile-time options: PERL_MALLOC_WRAP USE_LARGE_FILES USE_PERLIO
Built under solaris
Compiled at Nov 13 2007 15:43:13
%ENV:
PERL_LWP_USE_HTTP_10="1"
@INC:
/data/software/perl/perl-5.8.8/lib/5.8.8/sun4-solaris
/data/software/perl/perl-5.8.8/lib/5.8.8
/data/software/perl/perl-5.8.8/lib/site_perl/5.8.8/sun4-solaris
/data/software/perl/perl-5.8.8/lib/site_perl/5.8.8
/data/software/perl/perl-5.8.8/lib/site_perl
.
*** Packages of interest status:
Apache2 : -
Apache2::Request : -
CGI : 3.15
ExtUtils::MakeMaker: 6.36
LWP : 5.808
mod_perl : -
mod_perl2 : 2.000003
3. This is the core dump trace: (if you get a core dump):
[I attached gdb to the httpd process before it segfaulted.]
(gdb) c
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0xfec4368c in XS_Apache2__RequestRec_send_cgi_header (cv=0x24ed38) at
/export/data/software/www/build/mod_perl-2.0.3/WrapXS/Apache2/Response/Response.xs:149
149 mpxs_Apache2__RequestRec_send_cgi_header(r, buffer);
Current language: auto; currently minimal
(gdb) bt
#0 0xfec4368c in XS_Apache2__RequestRec_send_cgi_header (cv=0x24ed38)
at
/export/data/software/www/build/mod_perl-2.0.3/WrapXS/Apache2/Response/Response.xs:149
#1 0xfeddc0b8 in Perl_pp_entersub () from
/data/software/www/apache/modules/mod_perl.so
#2 0xfedd2944 in Perl_runops_standard () from
/data/software/www/apache/modules/mod_perl.so
#3 0xfed6f918 in Perl_call_sv () from
/data/software/www/apache/modules/mod_perl.so
#4 0xfed43320 in modperl_callback (handler=0x1f69d8, p=0x220008,
r=0x220040, s=0xefbb0, args=0x2c8d10) at modperl_callback.c:101
#5 0xfed43eec in modperl_callback_run_handlers (idx=6, type=4,
r=0x220040, c=0x0, s=0xefbb0, pconf=0x0, plog=0x0, ptemp=0x0,
run_mode=MP_HOOK_RUN_FIRST)
at modperl_callback.c:262
#6 0xfed445d0 in modperl_callback_per_dir (idx=6, r=0x220040,
run_mode=MP_HOOK_RUN_FIRST) at modperl_callback.c:371
#7 0xfed3cbb4 in modperl_response_handler_run (r=0x220040, finish=0)
at mod_perl.c:995
#8 0xfed3cf3c in modperl_response_handler_cgi (r=0x220040) at mod_perl.c:1090
#9 0x0007590c in ap_run_handler (r=0x220040) at config.c:153
#10 0x000765d4 in ap_invoke_handler (r=0x220040) at config.c:364
#11 0x0005442c in ap_process_request (r=0x220040) at http_request.c:249
#12 0x0004b594 in ap_process_http_connection (c=0x21a100) at http_core.c:253
#13 0x0008bb1c in ap_run_process_connection (c=0x21a100) at connection.c:43
#14 0x0008c138 in ap_process_connection (c=0x21a100, csd=0x21a028) at
connection.c:176
#15 0x000732ac in child_main (child_num_arg=0) at prefork.c:610
#16 0x000734d8 in make_child (s=0xefbb0, slot=0) at prefork.c:704
#17 0x000738c0 in perform_idle_server_maintenance (p=0xeb410) at prefork.c:839
#18 0x00073f48 in ap_mpm_run (_pconf=0xeb410, plog=0x1234f0,
s=0xefbb0) at prefork.c:1040
#19 0x0007f138 in main (argc=3, argv=0xffbff71c) at main.c:636
This report was generated by ./mp2bug on Thu Nov 15 18:50:55 2007 GMT.
-------------8<---------- End Bug Report --------------8<----------
Note: Complete the rest of the details and post this bug report to
modperl <at> perl.apache.org. To subscribe to the list send an empty
email to [EMAIL PROTECTED]