From 8b8b824e0b549c1ff8a2aea65f3f0621efd1a10a Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sun, 22 Apr 2012 21:26:01 +0200 Subject: [PATCH 01/22] fix compile with httpd trunk and AP_DEBUG some palloc debugging feature doesn't work within XS --- src/modules/perl/modperl_apache_includes.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h index c93decc..dd39bf6 100644 --- a/src/modules/perl/modperl_apache_includes.h +++ b/src/modules/perl/modperl_apache_includes.h @@ -23,6 +23,10 @@ #define CORE_PRIVATE #endif +#ifdef MP_IN_XS +#define AP_DEBUG_NO_ALLOC_POISON +#endif + #include "ap_mmn.h" #include "httpd.h" #include "http_config.h" -- 1.7.10.2 From c79300b3da6889231a39f7b8d1c5a453c08d3034 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sun, 22 Apr 2012 21:48:57 +0200 Subject: [PATCH 02/22] per-module loglevel config tell httpd that we are logging for mod_perl --- src/modules/perl/modperl_apache_includes.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h index dd39bf6..a4209c5 100644 --- a/src/modules/perl/modperl_apache_includes.h +++ b/src/modules/perl/modperl_apache_includes.h @@ -43,4 +43,8 @@ #include "util_script.h" +#ifndef MP_IN_XS +APLOG_USE_MODULE(perl); +#endif + #endif /* MODPERL_APACHE_INCLUDES_H */ -- 1.7.10.2 From 301f912a993802feac2fb167f6cca1ed050e6213 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sun, 22 Apr 2012 21:57:28 +0200 Subject: [PATCH 03/22] adjust test to new error log format --- t/response/TestAPI/aplog.pm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/t/response/TestAPI/aplog.pm b/t/response/TestAPI/aplog.pm index f2a4e19..1357311 100644 --- a/t/response/TestAPI/aplog.pm +++ b/t/response/TestAPI/aplog.pm @@ -93,7 +93,7 @@ sub handler { APR::Const::ENOTIME, "log_rerror test"); # can't match against the error string, since a locale may kick in ok t_cmp $logdiff->diff, - qr/\[crit\] .*?: log_rerror test/, + qr/\[\w*:crit\] \[pid[^]]+\] .*?: \[[^]]+\] log_rerror test/, '$r->log_rerror(LOG_MARK, LOG_CRIT, APR::Const::ENOTIME...)'; # log_error @@ -101,13 +101,13 @@ sub handler { t_server_log_error_is_expected(); $r->log_error('$r->log_error test'); ok t_cmp $logdiff->diff, - qr/\[error\] \$r->log_error test/, + qr/\[\w*:error\] \[pid[^]]+\] \$r->log_error test/, '$r->log_error(...)'; t_server_log_error_is_expected(); $s->log_error('$s->log_error test'); ok t_cmp $logdiff->diff, - qr/\[error\] \$s->log_error test/, + qr/\[\w*:error\] \[pid[^]]+\] \$s->log_error test/, '$s->log_error(...)'; } @@ -116,13 +116,13 @@ sub handler { t_server_log_error_is_expected(); $r->log_reason('$r->log_reason test'); ok t_cmp $logdiff->diff, - qr/\[error\] access to.*failed.*reason: \$r->log_reason test/, + qr/\[\w*:error\] \[pid[^]]+\] access to.*failed.*reason: \$r->log_reason test/, '$r->log_reason(msg)'; t_server_log_error_is_expected(); $r->log_reason('$r->log_reason filename test','filename'); ok t_cmp $logdiff->diff, - qr/\[error\] access to filename failed.*\$r->log_reason filename test/, + qr/\[\w*:error\] \[pid[^]]+\] access to filename failed.*\$r->log_reason filename test/, '$r->log_reason(msg, filename)'; } @@ -177,7 +177,7 @@ sub handler { t_server_log_warn_is_expected(); $s->warn('$s->warn test'); ok t_cmp $logdiff->diff, - qr/\[warn\] \$s->warn test/, + qr/\[\w*:warn\] \[pid[^]]+\] \$s->warn test/, '$s->warn()'; { @@ -185,7 +185,7 @@ sub handler { # this uses global server to get $s internally Apache2::ServerRec::warn("Apache2::ServerRec::warn test"); ok t_cmp $logdiff->diff, - qr/\[warn\] Apache2::ServerRec::warn test/, + qr/\[\w*:warn\] \[pid[^]]+\] Apache2::ServerRec::warn test/, 'Apache2::ServerRec::warn() w/o Apache2::RequestUtil->request '; Apache2::RequestUtil->request($r); @@ -193,14 +193,14 @@ sub handler { # this uses the global $r to get $s internally Apache2::ServerRec::warn("Apache2::ServerRec::warn test"); ok t_cmp $logdiff->diff, - qr/\[warn\] Apache2::ServerRec::warn test/, + qr/\[\w*:warn\] \[pid[^]]+\] Apache2::ServerRec::warn test/, 'Apache2::ServerRec::warn() w/ Apache2::RequestUtil->request '; } t_server_log_warn_is_expected(); warn "warn test"; ok t_cmp $logdiff->diff, - qr/\[warn\] warn test/, + qr/\[\w*:warn\] \[pid[^]]+\] warn test/, 'overriden via export warn()'; Apache2::Const::OK; -- 1.7.10.2 From 94befe6a4f247988181993010374ee9d5565f6db Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Tue, 24 Apr 2012 22:28:57 +0200 Subject: [PATCH 04/22] ignore some new stuff from httpd 2.4 and trunk, and newer aprs these confuse "make source_scan" --- lib/Apache2/ParseSource.pm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Apache2/ParseSource.pm b/lib/Apache2/ParseSource.pm index 8027548..f35c2a8 100644 --- a/lib/Apache2/ParseSource.pm +++ b/lib/Apache2/ParseSource.pm @@ -139,7 +139,8 @@ sub find_includes { apr_optional mod_include mod_cgi mod_proxy mod_ssl ssl_ apr_anylock apr_rmm ap_config mod_log_config - mod_perl modperl_ apreq); + mod_perl modperl_ apreq mod_cache + mod_serf mod_dav); $unwanted = qr|^$unwanted|; my $wanted = ''; @@ -280,6 +281,9 @@ my %enums_wanted = ( my $defines_unwanted = join '|', qw{ HTTP_VERSION APR_EOL_STR APLOG_MARK APLOG_NOERRNO APR_SO_TIMEOUT +APR_HOOK_PROBES_ENABLED APR_HOOK_INT_DCL_UD +APLOG_MAX_LOGLEVEL +APR_BEGIN_DECLS APR_END_DECLS }; sub get_constants { -- 1.7.10.2 From fa4c3ba115a8a34fcc9067330d6e0a9442ba9970 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Tue, 24 Apr 2012 22:31:18 +0200 Subject: [PATCH 05/22] workaround CScan choking on glibc's headers CScan gets rather confused if cpp's line number markers appear in the middle of a function declaration --- lib/ModPerl/CScan.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ModPerl/CScan.pm b/lib/ModPerl/CScan.pm index 6789af3..a7314c9 100644 --- a/lib/ModPerl/CScan.pm +++ b/lib/ModPerl/CScan.pm @@ -943,7 +943,7 @@ sub new { my ($sym) = gensym; my $cmd = WIN32 ? "$Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $filename |" : - "echo '\#include \"$filename\"' | $Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $Cpp->{cppminus} |"; + "echo '\#include \"$filename\"' | $Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $Cpp->{cppminus} | grep -v '^#' |"; #my $cmd = "echo '\#include <$filename>' | $Cpp->{cppstdin} $Defines $addincludes $Cpp->{cppflags} $Cpp->{cppminus} |"; (open($sym, $cmd) or die "Cannot open pipe from `$cmd': $!") -- 1.7.10.2 From fcb18aaa4eb48c8e213e2d23eb9e7b41f3d01e7d Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sun, 22 Apr 2012 22:39:33 +0200 Subject: [PATCH 06/22] Add U16 type to make 'make xs_generate' happy --- xs/maps/modperl_types.map | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xs/maps/modperl_types.map b/xs/maps/modperl_types.map index 3b02f02..8c6d541 100644 --- a/xs/maps/modperl_types.map +++ b/xs/maps/modperl_types.map @@ -7,6 +7,8 @@ struct modperl_filter_t | Apache2::OutputFilter SV * | SV I32 | IV I32 * | IV +U16 | UV +U16 * | UV U32 | UV U32 * | UV -- 1.7.10.2 From 670cf74e6949630b9fef02d9e0b0c10d00728521 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sun, 22 Apr 2012 22:48:31 +0200 Subject: [PATCH 07/22] add new constant CRLF_ASCII --- lib/ModPerl/Code.pm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ModPerl/Code.pm b/lib/ModPerl/Code.pm index e43f77c..98b037d 100644 --- a/lib/ModPerl/Code.pm +++ b/lib/ModPerl/Code.pm @@ -889,7 +889,8 @@ EOF if ($name eq 'DECLINE_CMD' || $name eq 'DIR_MAGIC_TYPE' || - $name eq 'CRLF') { + $name eq 'CRLF' || + $name eq 'CRLF_ASCII') { print $c_fh < Date: Sun, 22 Apr 2012 22:58:48 +0200 Subject: [PATCH 08/22] workaround APR_ENOKEY not found there should be a better solution... --- src/modules/perl/modperl_apache_includes.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h index a4209c5..c2fb6de 100644 --- a/src/modules/perl/modperl_apache_includes.h +++ b/src/modules/perl/modperl_apache_includes.h @@ -38,6 +38,7 @@ #include "http_core.h" #include "http_vhost.h" #include "ap_mpm.h" +#include "apu_errno.h" #include "util_filter.h" -- 1.7.10.2 From 434a596733eaf6c099e782c4969cb8a985200b78 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 4 Jun 2012 12:54:53 +0200 Subject: [PATCH 09/22] Fix WrapXS parameters --- lib/ModPerl/WrapXS.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ModPerl/WrapXS.pm b/lib/ModPerl/WrapXS.pm index 9114fc6..10a3efe 100644 --- a/lib/ModPerl/WrapXS.pm +++ b/lib/ModPerl/WrapXS.pm @@ -140,7 +140,7 @@ EOF else { if ($orig_args and @$orig_args == @$args) { #args were reordered - $parms = join ', ', @$orig_args; + $parms = $xs_parms; } $dispatch = $func->{name}; -- 1.7.10.2 From 813a8c0e9cc99c61372effc37891717af182d286 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 4 Jun 2012 12:57:18 +0200 Subject: [PATCH 10/22] Remove OPT_INCNOEXEC --- src/modules/perl/modperl_apache_compat.h | 1 - t/response/TestAPI/add_config.pm | 1 - 2 files changed, 2 deletions(-) diff --git a/src/modules/perl/modperl_apache_compat.h b/src/modules/perl/modperl_apache_compat.h index 78a9cb3..072ae79 100644 --- a/src/modules/perl/modperl_apache_compat.h +++ b/src/modules/perl/modperl_apache_compat.h @@ -68,7 +68,6 @@ AP_DECLARE(const char *) ap_get_server_version(void); #define MP_HTTPD_OVERRIDE_OPTS_UNSET (-1) #define MP_HTTPD_OVERRIDE_OPTS_DEFAULT (OPT_UNSET | \ OPT_ALL | \ - OPT_INCNOEXEC | \ OPT_SYM_OWNER | \ OPT_MULTI) diff --git a/t/response/TestAPI/add_config.pm b/t/response/TestAPI/add_config.pm index ff52cbc..c5f2d37 100644 --- a/t/response/TestAPI/add_config.pm +++ b/t/response/TestAPI/add_config.pm @@ -100,7 +100,6 @@ sub handler : method { my $expect = Apache2::Const::OPT_ALL | Apache2::Const::OPT_UNSET | - Apache2::Const::OPT_INCNOEXEC | Apache2::Const::OPT_MULTI | Apache2::Const::OPT_SYM_OWNER; -- 1.7.10.2 From ea359ac8f17a9df49807499d70c66f67245bc466 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Wed, 6 Jun 2012 08:47:21 +0200 Subject: [PATCH 11/22] Fixed logleve --- xs/Apache2/Log/Apache2__Log.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/xs/Apache2/Log/Apache2__Log.h b/xs/Apache2/Log/Apache2__Log.h index 1866315..4a3bb4d 100644 --- a/xs/Apache2/Log/Apache2__Log.h +++ b/xs/Apache2/Log/Apache2__Log.h @@ -36,6 +36,7 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) int lmask = level & APLOG_LEVELMASK; server_rec *s; request_rec *r = NULL; + int loglevel = 0; if (SvROK(sv) && sv_isa(sv, "Apache2::Log::Request")) { r = INT2PTR(request_rec *, SvObjIV(sv)); @@ -48,13 +49,19 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) s = modperl_global_get_server_rec(); } - if ((lmask == APLOG_DEBUG) && (s->loglevel >= APLOG_DEBUG)) { +#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 + loglevel = s->log.level; +#else + loglevel = s->loglevel; +#endif + + if ((lmask == APLOG_DEBUG) && (loglevel >= APLOG_DEBUG)) { COP *cop = PL_curcop; file = CopFILE(cop); /* (caller)[1] */ line = CopLINE(cop); /* (caller)[2] */ } - if ((s->loglevel >= lmask) && + if ((loglevel >= lmask) && SvROK(msg) && (SvTYPE(SvRV(msg)) == SVt_PVCV)) { dSP; ENTER;SAVETMPS; -- 1.7.10.2 From 171af3b2747e95f2d670a34ae2cbf4899e92f941 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 4 Jun 2012 13:12:40 +0200 Subject: [PATCH 12/22] Use module name in ap_add_loaded_module --- src/modules/perl/modperl_module.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/perl/modperl_module.c b/src/modules/perl/modperl_module.c index da148ca..aa1a851 100644 --- a/src/modules/perl/modperl_module.c +++ b/src/modules/perl/modperl_module.c @@ -832,7 +832,11 @@ const char *modperl_module_add(apr_pool_t *p, server_rec *s, modperl_module_insert(modp); +#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 + ap_add_loaded_module(modp, p, modp->name); +#else ap_add_loaded_module(modp, p); +#endif apr_pool_cleanup_register(p, modp, modperl_module_remove, apr_pool_cleanup_null); -- 1.7.10.2 From 963dd2b75feff278eda95de353d5d1975304ad13 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 4 Jun 2012 13:14:52 +0200 Subject: [PATCH 13/22] unixd_config renamed to ap_unixd_config --- xs/Apache2/ServerUtil/Apache2__ServerUtil.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h index e222c1b..f000502 100644 --- a/xs/Apache2/ServerUtil/Apache2__ServerUtil.h +++ b/xs/Apache2/ServerUtil/Apache2__ServerUtil.h @@ -162,8 +162,13 @@ SV *mpxs_Apache2__ServerRec_get_handlers(pTHX_ server_rec *s, #define mpxs_Apache2__ServerUtil_server(classname) modperl_global_get_server_rec() #if !defined(OS2) && !defined(WIN32) && !defined(BEOS) && !defined(NETWARE) +#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 +#define mpxs_Apache2__ServerUtil_user_id(classname) ap_unixd_config.user_id +#define mpxs_Apache2__ServerUtil_group_id(classname) ap_unixd_config.group_id +#else #define mpxs_Apache2__ServerUtil_user_id(classname) unixd_config.user_id #define mpxs_Apache2__ServerUtil_group_id(classname) unixd_config.group_id +#endif #else #define mpxs_Apache2__ServerUtil_user_id(classname) 0 #define mpxs_Apache2__ServerUtil_group_id(classname) 0 -- 1.7.10.2 From 888e80fec78ec7a030b98239858dc6052253eb07 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 4 Jun 2012 13:17:03 +0200 Subject: [PATCH 14/22] remote_ip renamed to client_ip --- src/modules/perl/modperl_interp.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/modules/perl/modperl_interp.c b/src/modules/perl/modperl_interp.c index dfff32e..6ec9b56 100644 --- a/src/modules/perl/modperl_interp.c +++ b/src/modules/perl/modperl_interp.c @@ -496,11 +496,19 @@ modperl_interp_t *modperl_interp_select(request_rec *r, conn_rec *c, set_interp(p); +#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 + MP_TRACE_i(MP_FUNC, + "set interp 0x%lx in %s 0x%lx (%s request for %s)\n", + (unsigned long)interp, desc, (unsigned long)p, + (r ? (is_subrequest ? "sub" : "main") : "conn"), + (r ? r->uri : c->client_ip)); +#else MP_TRACE_i(MP_FUNC, "set interp 0x%lx in %s 0x%lx (%s request for %s)\n", (unsigned long)interp, desc, (unsigned long)p, (r ? (is_subrequest ? "sub" : "main") : "conn"), (r ? r->uri : c->remote_ip)); +#endif } /* set context (THX) for this thread */ -- 1.7.10.2 From 6bc12830447343c70bf4e2bd10c2eb8b80c0f38c Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 4 Jun 2012 13:20:07 +0200 Subject: [PATCH 15/22] remove apu_error.h include --- src/modules/perl/modperl_apache_includes.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/perl/modperl_apache_includes.h b/src/modules/perl/modperl_apache_includes.h index c2fb6de..6f7bd8b 100644 --- a/src/modules/perl/modperl_apache_includes.h +++ b/src/modules/perl/modperl_apache_includes.h @@ -38,7 +38,9 @@ #include "http_core.h" #include "http_vhost.h" #include "ap_mpm.h" +#if !(AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4) #include "apu_errno.h" +#endif #include "util_filter.h" -- 1.7.10.2 From ad6b98f6e768032c5ac20bf4d89e8bb895d788fa Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 4 Jun 2012 13:21:14 +0200 Subject: [PATCH 16/22] Declare modperl::Global methods, otherwise they are not parsed and included in the final build --- xs/ModPerl/Global/ModPerl__Global.h | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/xs/ModPerl/Global/ModPerl__Global.h b/xs/ModPerl/Global/ModPerl__Global.h index 2ece589..1b38683 100644 --- a/xs/ModPerl/Global/ModPerl__Global.h +++ b/xs/ModPerl/Global/ModPerl__Global.h @@ -17,7 +17,11 @@ typedef void (*mpxs_special_list_do_t)(pTHX_ modperl_modglobal_key_t *, const char *, I32); -static int mpxs_special_list_do(pTHX_ const char *name, +int mpxs_special_list_do(pTHX_ const char *name, + SV *package, + mpxs_special_list_do_t func); + +int mpxs_special_list_do(pTHX_ const char *name, SV *package, mpxs_special_list_do_t func) { @@ -36,7 +40,9 @@ static int mpxs_special_list_do(pTHX_ const char *name, return TRUE; } -static +int mpxs_ModPerl__Global_special_list_call(pTHX_ const char *name, + SV *package); + MP_INLINE int mpxs_ModPerl__Global_special_list_call(pTHX_ const char *name, SV *package) { @@ -44,7 +50,11 @@ MP_INLINE int mpxs_ModPerl__Global_special_list_call(pTHX_ const char *name, modperl_perl_global_avcv_call); } -static + +int mpxs_ModPerl__Global_special_list_clear(pTHX_ const char *name, + SV *package); + + MP_INLINE int mpxs_ModPerl__Global_special_list_clear(pTHX_ const char *name, SV *package) { @@ -52,7 +62,11 @@ MP_INLINE int mpxs_ModPerl__Global_special_list_clear(pTHX_ const char *name, modperl_perl_global_avcv_clear); } -static +int mpxs_ModPerl__Global_special_list_register(pTHX_ + const char *name, + SV *package); + + MP_INLINE int mpxs_ModPerl__Global_special_list_register(pTHX_ const char *name, SV *package) -- 1.7.10.2 From 6036d0e2f19f2ff5c851b24d40e36f396d7c24da Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 7 Jun 2012 12:24:06 +0200 Subject: [PATCH 17/22] Fix ap_log_error and ap_log_rerror calls --- xs/Apache2/Log/Apache2__Log.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/xs/Apache2/Log/Apache2__Log.h b/xs/Apache2/Log/Apache2__Log.h index 4a3bb4d..deb589f 100644 --- a/xs/Apache2/Log/Apache2__Log.h +++ b/xs/Apache2/Log/Apache2__Log.h @@ -77,13 +77,21 @@ static void mpxs_ap_log_error(pTHX_ int level, SV *sv, SV *msg) else { str = SvPV(msg,n_a); } - +#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 + if (r) { + ap_log_rerror(file, line, APLOG_MODULE_INDEX, level, 0, r, "%s", str); + } + else { + ap_log_error(file, line, APLOG_MODULE_INDEX, level, 0, s, "%s", str); + } +#else if (r) { ap_log_rerror(file, line, level, 0, r, "%s", str); } else { ap_log_error(file, line, level, 0, s, "%s", str); } +#endif if (svstr) { SvREFCNT_dec(svstr); @@ -264,12 +272,21 @@ MP_STATIC XS(MPXS_Apache2__Log_log_xerror) msgstr = SvPV(msgsv, n_a); +#if AP_SERVER_MAJORVERSION_NUMBER >= 2 && AP_SERVER_MINORVERSION_NUMBER >= 4 + if (r) { + ap_log_rerror(file, line, APLOG_MODULE_INDEX, level, status, r, "%s", msgstr); + } + else { + ap_log_error(file, line, APLOG_MODULE_INDEX, level, status, s, "%s", msgstr); + } +#else if (r) { ap_log_rerror(file, line, level, status, r, "%s", msgstr); } else { ap_log_error(file, line, level, status, s, "%s", msgstr); } +#endif SvREFCNT_dec(msgsv); -- 1.7.10.2 From 3d927e6284d239a3a9b4876752b974d1155b3517 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 7 Jun 2012 12:25:37 +0200 Subject: [PATCH 18/22] Fix svav_getstr to return apr_status_t --- src/modules/perl/modperl_config.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/perl/modperl_config.c b/src/modules/perl/modperl_config.c index c4ef81f..e182f2d 100644 --- a/src/modules/perl/modperl_config.c +++ b/src/modules/perl/modperl_config.c @@ -479,7 +479,7 @@ typedef struct { PerlInterpreter *perl; } svav_param_t; -static void *svav_getstr(void *buf, size_t bufsiz, void *param) +static apr_status_t svav_getstr(void *buf, size_t bufsiz, void *param) { svav_param_t *svav_param = (svav_param_t *)param; dTHXa(svav_param->perl); @@ -488,7 +488,7 @@ static void *svav_getstr(void *buf, size_t bufsiz, void *param) STRLEN n_a; if (svav_param->ix > AvFILL(av)) { - return NULL; + return APR_EOF; } sv = AvARRAY(av)[svav_param->ix++]; @@ -496,7 +496,7 @@ static void *svav_getstr(void *buf, size_t bufsiz, void *param) apr_cpystrn(buf, SvPVX(sv), bufsiz); - return buf; + return APR_SUCCESS; } const char *modperl_config_insert(pTHX_ server_rec *s, -- 1.7.10.2 From 302d524a184c19936005df9d237a194829e6bfb1 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 7 Jun 2012 12:59:08 +0200 Subject: [PATCH 19/22] Fix undefined reference to perl_module --- xs/ModPerl/Const/Const.xs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/xs/ModPerl/Const/Const.xs b/xs/ModPerl/Const/Const.xs index 33a4c0c..15fa36d 100644 --- a/xs/ModPerl/Const/Const.xs +++ b/xs/ModPerl/Const/Const.xs @@ -17,6 +17,17 @@ #include "mod_perl.h" #include "modperl_const.h" +/* To define extern perl_module to something so Const.so can be loaded later */ +module AP_MODULE_DECLARE_DATA perl_module = { + STANDARD20_MODULE_STUFF, + NULL, /* dir config creater */ + NULL, /* dir merger --- default is to override */ + NULL, /* server config */ + NULL, /* merge server config */ + NULL, /* table of config file commands */ + NULL, /* register hooks */ +}; + MODULE = ModPerl::Const PACKAGE = ModPerl::Const PROTOTYPES: disable -- 1.7.10.2 From b16f7c43d01db3f4f6123a15d369d5070fcc8ac0 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 7 Jun 2012 13:31:57 +0200 Subject: [PATCH 20/22] Find for headers also in APR_INCLUDEDIR --- lib/Apache2/ParseSource.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Apache2/ParseSource.pm b/lib/Apache2/ParseSource.pm index f35c2a8..2f68fa7 100644 --- a/lib/Apache2/ParseSource.pm +++ b/lib/Apache2/ParseSource.pm @@ -116,6 +116,7 @@ sub scan { sub include_dirs { my $self = shift; ($self->config->apxs('-q' => 'INCLUDEDIR'), + $self->config->apxs('-q' => 'APR_INCLUDEDIR'), $self->config->mp_include_dir); } -- 1.7.10.2 From c87aca396f11277c1ef90b13cbd3d583dda86512 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 7 Jun 2012 13:35:46 +0200 Subject: [PATCH 21/22] Include apu_errno --- src/modules/perl/modperl_apr_includes.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/perl/modperl_apr_includes.h b/src/modules/perl/modperl_apr_includes.h index f5ae341..8e69776 100644 --- a/src/modules/perl/modperl_apr_includes.h +++ b/src/modules/perl/modperl_apr_includes.h @@ -35,5 +35,6 @@ #include "apr_general.h" #include "apr_uuid.h" #include "apr_env.h" +#include "apu_errno.h" #endif /* MODPERL_APR_INCLUDES_H */ -- 1.7.10.2 From 454581a726fe637f3d71376b47104edce6cbb195 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Thu, 7 Jun 2012 13:43:40 +0200 Subject: [PATCH 22/22] Add PROXYREQ define --- lib/Apache2/ParseSource.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Apache2/ParseSource.pm b/lib/Apache2/ParseSource.pm index 2f68fa7..2fda9e2 100644 --- a/lib/Apache2/ParseSource.pm +++ b/lib/Apache2/ParseSource.pm @@ -231,7 +231,7 @@ sub generate_cscan_file { my %defines_wanted = ( 'Apache2::Const' => { - common => [qw{OK DECLINED DONE}], + common => [qw{OK DECLINED DONE PROXYREQ PROXYREQ_REVERSE}], config => [qw{DECLINE_CMD}], context => [qw(NOT_IN_ GLOBAL_ONLY)], http => [qw{HTTP_}], -- 1.7.10.2