sbekman 01/08/08 00:02:41
Modified: src/modules/perl mod_perl.c modperl_cmd.c modperl_cmd.h
modperl_config.c modperl_config.h modperl_util.c
modperl_util.h
todo missing_old_features.txt
Log:
* implementing PerlModule and PerlRequire configuration
directives, for the main server and virtual hosts
* adding a todo item: .htaccess support for PerlModule and PerlRequire is
missing
Revision Changes Path
1.61 +16 -0 modperl-2.0/src/modules/perl/mod_perl.c
Index: mod_perl.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- mod_perl.c 2001/07/15 22:33:48 1.60
+++ mod_perl.c 2001/08/08 07:02:41 1.61
@@ -74,6 +74,13 @@
);
#endif
+ if (!modperl_config_apply_PerlModule(s, scfg, perl, p)){
+ exit(1);
+ }
+ if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)){
+ exit(1);
+ }
+
#ifndef USE_ITHREADS
cdata = modperl_cleanup_data_new(p, (void*)perl);
apr_pool_cleanup_register(p, cdata,
@@ -126,6 +133,13 @@
modperl_server_desc(s, p));
}
+ if (!modperl_config_apply_PerlModule(s, scfg, perl, p)){
+ exit(1);
+ }
+ if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)){
+ exit(1);
+ }
+
#ifdef USE_ITHREADS
if (!MpSrvENABLED(scfg)) {
@@ -355,6 +369,8 @@
static const command_rec modperl_cmds[] = {
MP_CMD_SRV_ITERATE("PerlSwitches", switches, "Perl Switches"),
+ MP_CMD_SRV_ITERATE("PerlModule", modules, "PerlModule"),
+ MP_CMD_SRV_ITERATE("PerlRequire", requires, "PerlRequire"),
MP_CMD_DIR_ITERATE("PerlOptions", options, "Perl Options"),
#ifdef MP_TRACE
MP_CMD_SRV_TAKE1("PerlTrace", trace, "Trace level"),
1.5 +19 -0 modperl-2.0/src/modules/perl/modperl_cmd.c
Index: modperl_cmd.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- modperl_cmd.c 2001/04/06 02:18:15 1.4
+++ modperl_cmd.c 2001/08/08 07:02:41 1.5
@@ -39,7 +39,26 @@
MP_CMD_SRV_DECLARE(switches)
{
MP_dSCFG(parms->server);
+ MP_TRACE_d(MP_FUNC, "arg = %s\n", arg);
modperl_config_srv_argv_push(arg);
+ return NULL;
+}
+
+MP_CMD_SRV_DECLARE(modules)
+{
+ MP_dSCFG(parms->server);
+
+ *(const char **)apr_array_push(scfg->PerlModule) = arg;
+ MP_TRACE_d(MP_FUNC, "arg = %s\n", arg);
+ return NULL;
+}
+
+MP_CMD_SRV_DECLARE(requires)
+{
+ MP_dSCFG(parms->server);
+
+ *(const char **)apr_array_push(scfg->PerlRequire) = arg;
+ MP_TRACE_d(MP_FUNC, "arg = %s\n", arg);
return NULL;
}
1.5 +2 -0 modperl-2.0/src/modules/perl/modperl_cmd.h
Index: modperl_cmd.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_cmd.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- modperl_cmd.h 2001/04/06 02:18:15 1.4
+++ modperl_cmd.h 2001/08/08 07:02:41 1.5
@@ -10,6 +10,8 @@
void *dummy, const char *arg)
MP_CMD_SRV_DECLARE(trace);
MP_CMD_SRV_DECLARE(switches);
+MP_CMD_SRV_DECLARE(modules);
+MP_CMD_SRV_DECLARE(requires);
MP_CMD_SRV_DECLARE(options);
#ifdef USE_ITHREADS
1.33 +51 -0 modperl-2.0/src/modules/perl/modperl_config.c
Index: modperl_config.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- modperl_config.c 2001/05/08 21:08:26 1.32
+++ modperl_config.c 2001/08/08 07:02:41 1.33
@@ -71,6 +71,9 @@
MpSrvENABLED_On(scfg); /* mod_perl enabled by default */
MpSrvHOOKS_ALL_On(scfg); /* all hooks enabled by default */
+ scfg->PerlModule = apr_array_make(p, 2, sizeof(char *));
+ scfg->PerlRequire = apr_array_make(p, 2, sizeof(char *));
+
scfg->argv = apr_array_make(p, 2, sizeof(char *));
modperl_config_srv_argv_push((char *)ap_server_argv0);
@@ -152,6 +155,9 @@
MP_TRACE_d(MP_FUNC, "basev==0x%lx, addv==0x%lx\n",
(unsigned long)basev, (unsigned long)addv);
+ merge_item(PerlModule);
+ merge_item(PerlRequire);
+
merge_item(threaded_mpm);
#ifdef USE_ITHREADS
@@ -183,3 +189,48 @@
return mrg;
}
+int modperl_config_apply_PerlModule(server_rec *s, modperl_config_srv_t *scfg,
PerlInterpreter *perl, apr_pool_t *p)
+{
+ char **entries;
+ int i;
+ dTHXa(perl);
+
+ entries = (char **)scfg->PerlModule->elts;
+ for (i = 0; i < scfg->PerlModule->nelts; i++){
+ if (modperl_require_module(aTHX_ entries[i], TRUE)){
+ MP_TRACE_d(MP_FUNC, "loaded Perl module %s for server %s\n",
+ entries[i], modperl_server_desc(s,p));
+ }
+ else {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
+ "Can't load Perl module %s for server %s, exiting...\n",
+ entries[i], modperl_server_desc(s,p));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+int modperl_config_apply_PerlRequire(server_rec *s, modperl_config_srv_t *scfg,
PerlInterpreter *perl, apr_pool_t *p)
+{
+ char **entries;
+ int i;
+ dTHXa(perl);
+
+ entries = (char **)scfg->PerlRequire->elts;
+ for (i = 0; i < scfg->PerlRequire->nelts; i++){
+ if (modperl_require_file(aTHX_ entries[i], TRUE)){
+ MP_TRACE_d(MP_FUNC, "loaded Perl file: %s for server %s\n",
+ entries[i], modperl_server_desc(s,p));
+ }
+ else {
+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
+ "Can't load Perl file: %s for server %s, exiting...\n",
+ entries[i], modperl_server_desc(s,p));
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
1.26 +3 -0 modperl-2.0/src/modules/perl/modperl_config.h
Index: modperl_config.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- modperl_config.h 2001/03/25 21:26:47 1.25
+++ modperl_config.h 2001/08/08 07:02:41 1.26
@@ -59,4 +59,7 @@
# define MP_dSCFG_dTHX dTHXa(scfg->perl)
#endif
+int modperl_config_apply_PerlModule(server_rec *s, modperl_config_srv_t *scfg,
PerlInterpreter *perl, apr_pool_t *p);
+int modperl_config_apply_PerlRequire(server_rec *s, modperl_config_srv_t *scfg,
PerlInterpreter *perl, apr_pool_t *p);
+
#endif /* MODPERL_CONFIG_H */
1.16 +26 -0 modperl-2.0/src/modules/perl/modperl_util.c
Index: modperl_util.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- modperl_util.c 2001/05/22 20:57:33 1.15
+++ modperl_util.c 2001/08/08 07:02:41 1.16
@@ -25,6 +25,32 @@
return TRUE;
}
+int modperl_require_file(pTHX_ const char *pv, int logfailure)
+{
+ SV *sv;
+
+ dSP;
+ PUSHSTACKi(PERLSI_REQUIRE);
+ PUTBACK;
+ sv = sv_newmortal();
+ sv_setpv(sv, "require \"");
+ sv_catpv(sv, pv);
+ sv_catpv(sv, "\"");
+ eval_sv(sv, G_DISCARD);
+ SPAGAIN;
+ POPSTACK;
+
+ if (SvTRUE(ERRSV)) {
+ if (logfailure) {
+ (void)modperl_errsv(aTHX_ HTTP_INTERNAL_SERVER_ERROR,
+ NULL, NULL);
+ }
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static SV *modperl_hv_request_find(pTHX_ SV *in, char *classname, CV *cv)
{
static char *r_keys[] = { "r", "_r", NULL };
1.16 +1 -0 modperl-2.0/src/modules/perl/modperl_util.h
Index: modperl_util.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_util.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- modperl_util.h 2001/05/22 20:57:34 1.15
+++ modperl_util.h 2001/08/08 07:02:41 1.16
@@ -36,6 +36,7 @@
int modperl_errsv(pTHX_ int status, request_rec *r, server_rec *s);
int modperl_require_module(pTHX_ const char *pv, int logfailure);
+int modperl_require_file(pTHX_ const char *pv, int logfailure);
char *modperl_server_desc(server_rec *s, apr_pool_t *p);
1.3 +1 -1 modperl-2.0/todo/missing_old_features.txt
Index: missing_old_features.txt
===================================================================
RCS file: /home/cvs/modperl-2.0/todo/missing_old_features.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- missing_old_features.txt 2001/05/08 22:25:59 1.2
+++ missing_old_features.txt 2001/08/08 07:02:41 1.3
@@ -12,7 +12,7 @@
- PerlSetEnv, PerlPassEnv
-- PerlModule, PerlRequire: not yet implemented
+- PerlModule, PerlRequire: missing support for .htaccess as 1.x does.
- pod directives (=pod,=back,=cut) and __END__