cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
stas2002/12/12 03:45:26 Modified:src/modules/perl modperl_cmd.c Log: handle correctly the switches, when the server starts early. e.g., a sample config at the base server's level: PerlLoadModule Foo PerlSwitches -Iwhatever When PerlLoadModule returns, mod_perl is started already, so the next command's switches are lost. This has nothing to do with checking whether vhost is running, since in this case PerlSwitches apply to the top level. PR: Obtained from: Submitted by: Revision ChangesPath 1.34 +4 -2 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.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- modperl_cmd.c 7 Oct 2002 15:45:52 - 1.33 +++ modperl_cmd.c 12 Dec 2002 11:45:26 - 1.34 @@ -8,7 +8,7 @@ static char *modperl_cmd_too_late(cmd_parms *parms) { -return apr_pstrcat(parms->pool, "mod_perl already running, " +return apr_pstrcat(parms->pool, "mod_perl is already running, " "too late for ", parms->cmd->name, NULL); } @@ -69,7 +69,9 @@ { server_rec *s = parms->server; MP_dSCFG(s); -if (modperl_is_running() && modperl_vhost_is_running(s)) { +if (s->is_virtual +? modperl_vhost_is_running(s) +: modperl_is_running() ) { return modperl_cmd_too_late(parms); } MP_TRACE_d(MP_FUNC, "arg = %s\n", arg);
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c modperl_handler.c
dougm 2002/10/07 08:45:52 Modified:lib/Apache PerlSection.pm src/modules/perl modperl_cmd.c modperl_handler.c Log: Submitted by: gozer Reviewed by: dougm support APR::Table tie in modperl_handler_make_args Revision ChangesPath 1.3 +1 -2 modperl-2.0/lib/Apache/PerlSection.pm Index: PerlSection.pm === RCS file: /home/cvs/modperl-2.0/lib/Apache/PerlSection.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- PerlSection.pm7 Oct 2002 05:01:44 - 1.2 +++ PerlSection.pm7 Oct 2002 15:45:52 - 1.3 @@ -5,7 +5,6 @@ our $VERSION = '0.01'; - use Apache::CmdParms (); use Apache::Directive (); @@ -18,7 +17,7 @@ sub server { return shift->{'parms'}->server() } sub directives { return shift->{'directives'} ||= [] } -sub package{ return shift->{'args'}->get('package') } +sub package{ return shift->{'args'}->{'package'} } sub handler : method { my($self, $parms, $args) = @_; 1.33 +0 -1 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.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- modperl_cmd.c 7 Oct 2002 02:35:18 - 1.32 +++ modperl_cmd.c 7 Oct 2002 15:45:52 - 1.33 @@ -371,7 +371,6 @@ } if (handler) { -/*XXX: This will return a blessed APR::Table, but not a tied one ;-( */ modperl_handler_make_args(aTHX_ &args, "Apache::CmdParms", parms, "APR::Table", options, 1.13 +5 -0 modperl-2.0/src/modules/perl/modperl_handler.c Index: modperl_handler.c === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_handler.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- modperl_handler.c 24 Aug 2002 16:03:27 - 1.12 +++ modperl_handler.c 7 Oct 2002 15:45:52 - 1.13 @@ -143,6 +143,11 @@ ptr = va_arg(args, void *); switch (*classname) { + case 'A': +if (strEQ(classname, "APR::Table")) { +sv = modperl_hash_tie(aTHX_ classname, Nullsv, ptr); +break; +} case 'I': if (strEQ(classname, "IV")) { sv = ptr ? newSViv((IV)ptr) : &PL_sv_undef;
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
dougm 2002/09/04 20:31:45 Modified:src/modules/perl modperl_cmd.c Log: need to free args in modperl_cmd_perl Revision ChangesPath 1.28 +2 -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.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- modperl_cmd.c 28 Aug 2002 03:12:46 - 1.27 +++ modperl_cmd.c 5 Sep 2002 03:31:45 - 1.28 @@ -288,6 +288,8 @@ status = modperl_callback(aTHX_ handler, p, NULL, s, args); +SvREFCNT_dec((SV*)args); + if (status != OK) { return SvTRUE(ERRSV) ? SvPVX(ERRSV) : apr_psprintf(p, " handler %s failed with status=%d",
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
dougm 2002/08/27 20:12:46 Modified:src/modules/perl modperl_cmd.c Log: use ap_strstr_c instead of strstr to avoid a warning Revision ChangesPath 1.27 +1 -1 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.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- modperl_cmd.c 27 Aug 2002 04:26:54 - 1.26 +++ modperl_cmd.c 28 Aug 2002 03:12:46 - 1.27 @@ -308,7 +308,7 @@ server_rec *s = parms->server; const char *errmsg; -if (!strstr(arg, "::")) { +if (!ap_strstr_c(arg, "::")) { return DECLINE_CMD; /* let mod_so handle it */ }
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c modperl_cmd.h mod_perl.c mod_perl.h
dougm 2002/08/26 21:26:54 Modified:src/modules/perl modperl_cmd.c modperl_cmd.h mod_perl.c mod_perl.h Log: add LoadModule directive to support directive handlers Revision ChangesPath 1.26 +27 -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.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- modperl_cmd.c 25 Aug 2002 23:04:55 - 1.25 +++ modperl_cmd.c 27 Aug 2002 04:26:54 - 1.26 @@ -297,6 +297,33 @@ return NULL; } +/* + * XXX: the name of this directive may or may not stay. + * need a way to note that a module has config directives. + * don't want to start mod_perl when we see a non-special PerlModule. + */ +MP_CMD_SRV_DECLARE(load_module) +{ +apr_pool_t *p = parms->pool; +server_rec *s = parms->server; +const char *errmsg; + +if (!strstr(arg, "::")) { +return DECLINE_CMD; /* let mod_so handle it */ +} + +MP_TRACE_d(MP_FUNC, "LoadModule %s\n", arg); + +/* we must init earlier than normal */ +modperl_run(p, s); + +if ((errmsg = modperl_cmd_modules(parms, mconfig, arg))) { +return errmsg; +} + +return modperl_module_add(p, s, arg); +} + #ifdef MP_COMPAT_1X MP_CMD_SRV_DECLARE_FLAG(taint_check) 1.18 +1 -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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- modperl_cmd.h 19 Nov 2001 00:07:28 - 1.17 +++ modperl_cmd.h 27 Aug 2002 04:26:54 - 1.18 @@ -27,6 +27,7 @@ MP_CMD_SRV_DECLARE(options); MP_CMD_SRV_DECLARE(init_handlers); MP_CMD_SRV_DECLARE(perl); +MP_CMD_SRV_DECLARE(load_module); #ifdef MP_COMPAT_1X 1.134 +1 -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.133 retrieving revision 1.134 diff -u -r1.133 -r1.134 --- mod_perl.c24 Aug 2002 18:03:03 - 1.133 +++ mod_perl.c27 Aug 2002 04:26:54 - 1.134 @@ -583,6 +583,7 @@ MP_CMD_DIR_TAKE2("PerlSetEnv", set_env, "PerlSetEnv"), MP_CMD_SRV_TAKE1("PerlPassEnv", pass_env, "PerlPassEnv"), MP_CMD_SRV_RAW_ARGS("
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
dougm 2002/08/25 16:04:55 Modified:src/modules/perl modperl_cmd.c Log: need to use scfg->mip->parent->perl rather than modperl_interp_select() to handle Perl{Require,Module} and when mod_perl is already running. Revision ChangesPath 1.25 +11 -6 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.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- modperl_cmd.c 24 Aug 2002 18:43:47 - 1.24 +++ modperl_cmd.c 25 Aug 2002 23:04:55 - 1.25 @@ -64,8 +64,10 @@ MP_dSCFG(parms->server); if (modperl_is_running()) { -MP_dINTERP_SELECT(NULL, NULL, parms->server); - +#ifdef USE_ITHREADS +/* XXX: .htaccess support cannot use this perl with threaded MPMs */ +dTHXa(scfg->mip->parent->perl); +#endif MP_TRACE_d(MP_FUNC, "load PerlModule %s\n", arg); if (!modperl_require_module(aTHX_ arg, FALSE)) { @@ -85,7 +87,10 @@ MP_dSCFG(parms->server); if (modperl_is_running()) { -MP_dINTERP_SELECT(NULL, NULL, parms->server); +#ifdef USE_ITHREADS +/* XXX: .htaccess support cannot use this perl with threaded MPMs */ +dTHXa(scfg->mip->parent->perl); +#endif MP_TRACE_d(MP_FUNC, "load PerlRequire %s\n", arg); @@ -247,8 +252,8 @@ SV **handler_name; int status = OK; #ifdef USE_ITHREADS +MP_dSCFG(s); pTHX; -modperl_interp_t *interp; #endif if (endp == NULL) { @@ -259,8 +264,8 @@ modperl_run(p, s); #ifdef USE_ITHREADS -interp = modperl_interp_select(NULL, NULL, s); -aTHX = interp->perl; +/* XXX: .htaccess support cannot use this perl with threaded MPMs */ +aTHX = scfg->mip->parent->perl; #endif arg = apr_pstrndup(p, arg, endp - arg);
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
dougm 02/05/18 19:31:16 Modified:src/modules/perl modperl_cmd.c Log: use apr_table_{set,add}n to avoid extra copy in modperl_cmd_{set,add}_var Revision ChangesPath 1.21 +2 -1 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.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- modperl_cmd.c 19 May 2002 02:26:11 - 1.20 +++ modperl_cmd.c 19 May 2002 02:31:16 - 1.21 @@ -67,7 +67,7 @@ const char *name = parms->cmd->name; modperl_table_modify_t func = -strEQ(name, "PerlSetVar") ? apr_table_set : apr_table_add; +strEQ(name, "PerlSetVar") ? apr_table_setn : apr_table_addn; func(dcfg->vars, arg1, arg2); @@ -77,6 +77,7 @@ /* make available via Apache->server->dir_config */ if (!parms->path) { func(scfg->vars, arg1, arg2); + MP_TRACE_d(MP_FUNC, "%s SRV: arg1 = %s, arg2 = %s\n", name, arg1, arg2); }
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c modperl_config.c modperl_types.h modperl_util.c
dougm 02/05/18 19:10:13 Modified:src/modules/perl modperl_cmd.c modperl_config.c modperl_types.h modperl_util.c Log: not sure why the 1.x [sd]cfg->vars name was renamed to SetVar, but it shouldn't have been. Revision ChangesPath 1.19 +4 -4 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.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- modperl_cmd.c 19 May 2002 01:57:58 - 1.18 +++ modperl_cmd.c 19 May 2002 02:10:13 - 1.19 @@ -65,12 +65,12 @@ MP_dSCFG(parms->server); modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig; -apr_table_set(dcfg->SetVar, arg1, arg2); +apr_table_set(dcfg->vars, arg1, arg2); MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2); /* make available via Apache->server->dir_config */ if (!parms->path) { -apr_table_set(scfg->SetVar, arg1, arg2); +apr_table_set(scfg->vars, arg1, arg2); MP_TRACE_d(MP_FUNC, "SRV: arg1 = %s, arg2 = %s\n", arg1, arg2); } @@ -82,12 +82,12 @@ MP_dSCFG(parms->server); modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig; -apr_table_add(dcfg->SetVar, arg1, arg2); +apr_table_add(dcfg->vars, arg1, arg2); MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2); /* make available via Apache->server->dir_config */ if (!parms->path) { -apr_table_add(scfg->SetVar, arg1, arg2); +apr_table_add(scfg->vars, arg1, arg2); MP_TRACE_d(MP_FUNC, "SRV: arg1 = %s, arg2 = %s\n", arg1, arg2); } 1.54 +4 -4 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.53 retrieving revision 1.54 diff -u -r1.53 -r1.54 --- modperl_config.c 12 May 2002 23:01:32 - 1.53 +++ modperl_config.c 19 May 2002 02:10:13 - 1.54 @@ -71,7 +71,7 @@ merge_item(location); -merge_table_overlap_item(SetVar); +merge_table_overlap_item(vars); merge_table_overlap_item(SetEnv); @@ -107,7 +107,7 @@ scfg->argv = apr_array_make(p, 2, sizeof(char *)); -scfg->SetVar = apr_table_make(p, 2); +scfg->vars = apr_table_make(p, 2); scfg->PassEnv = apr_table_make(p, 2); scfg->SetEnv = apr_table_make(p, 2); @@ -126,7 +126,7 @@ dcfg->flags = modperl_options_new(p, MpDirType); -dcfg->SetVar = apr_table_make(p, 2); +dcfg->vars = apr_table_make(p, 2); dcfg->SetEnv = apr_table_make(p, 2); @@ -198,7 +198,7 @@ merge_item(PerlModule); merge_item(PerlRequire); -merge_table_overlap_item(SetVar); +merge_table_overlap_item(vars); merge_table_overlap_item(SetEnv); merge_table_overlap_item(PassEnv); 1.57 +2 -2 modperl-2.0/src/modules/perl/modperl_types.h Index: modperl_types.h === RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- modperl_types.h 21 Feb 2002 01:45:34 - 1.56 +++ modperl_types.h 19 May 2002 02:10:13 - 1.57 @@ -112,7 +112,7 @@ } modperl_interp_scope_e; typedef struct { -MpHV *SetVar; +MpHV *vars; MpHV *SetEnv; MpHV *PassEnv; MpAV *PerlRequire, *PerlModule; @@ -141,7 +141,7 @@ char *PerlDispatchHandler; MpAV *handlers_per_dir[MP_HANDLER_NUM_PER_DIR]; MpHV *SetEnv; -MpHV *SetVar; +MpHV *vars; modperl_options_t *flags; #ifdef USE_ITHREADS modperl_interp_scope_e interp_scope; 1.41 +2 -2 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.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- modperl_util.c13 May 2002 03:17:54 - 1.40 +++ modperl_util.c19 May 2002 02:10:13 - 1.41 @@ -536,7 +536,7 @@ if (r && r->per_dir_config) { MP_dDCFG; -retval = modperl_table_get_set(aTHX_ dcfg->SetVar, +retval = modperl_table_get_set(aTHX_ dcfg->vars, key, sv_val, FALSE); } @@ -544,7 +544,7 @@ if (s && s->module_config) { MP_dS
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
dougm 02/05/18 18:57:58 Modified:src/modules/perl modperl_cmd.c Log: fix $r->dir_config; per-dir values are *always* set, per-server is only set if parms->path == NULL Revision ChangesPath 1.18 +12 -10modperl-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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- modperl_cmd.c 13 May 2002 03:20:09 - 1.17 +++ modperl_cmd.c 19 May 2002 01:57:58 - 1.18 @@ -65,14 +65,15 @@ MP_dSCFG(parms->server); modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig; -if (parms->path) { -apr_table_set(dcfg->SetVar, arg1, arg2); -MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2); -} -else { +apr_table_set(dcfg->SetVar, arg1, arg2); +MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2); + +/* make available via Apache->server->dir_config */ +if (!parms->path) { apr_table_set(scfg->SetVar, arg1, arg2); MP_TRACE_d(MP_FUNC, "SRV: arg1 = %s, arg2 = %s\n", arg1, arg2); } + return NULL; } @@ -81,14 +82,15 @@ MP_dSCFG(parms->server); modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig; -if (parms->path) { -apr_table_add(dcfg->SetVar, arg1, arg2); -MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2); -} -else { +apr_table_add(dcfg->SetVar, arg1, arg2); +MP_TRACE_d(MP_FUNC, "DIR: arg1 = %s, arg2 = %s\n", arg1, arg2); + +/* make available via Apache->server->dir_config */ +if (!parms->path) { apr_table_add(scfg->SetVar, arg1, arg2); MP_TRACE_d(MP_FUNC, "SRV: arg1 = %s, arg2 = %s\n", arg1, arg2); } + return NULL; }
cvs commit: modperl-2.0/src/modules/perl modperl_cmd.c
dougm 02/05/12 20:20:09 Modified:src/modules/perl modperl_cmd.c Log: fix PerlSetEnv on win32 when keys have lowercase characters Revision ChangesPath 1.17 +8 -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.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- modperl_cmd.c 12 May 2002 23:01:32 - 1.16 +++ modperl_cmd.c 13 May 2002 03:20:09 - 1.17 @@ -97,6 +97,14 @@ MP_dSCFG(parms->server); modperl_config_dir_t *dcfg = (modperl_config_dir_t *)mconfig; +#ifdef ENV_IS_CASELESS /* i.e. WIN32 */ +/* we turn off env magic during hv_store later, so do this now, + * else lookups on keys with lowercase characters will fails + * because Perl will uppercase them prior to lookup. + */ +modperl_str_toupper((char *)arg1); +#endif + MP_TRACE_d(MP_FUNC, "arg1 = %s, arg2 = %s\n", arg1, arg2); if (!parms->path) {