You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2003/09/23 01:29:52 UTC
cvs commit: modperl-2.0/src/modules/perl modperl_env.c modperl_env.h
stas 2003/09/22 16:29:52
Modified: src/modules/perl modperl_env.c modperl_env.h
Log:
add modperl_env_request_unpopulate and supporting function, to be able to
delete entries from %ENV populated for the request due to
SetupEnv/perl-script.
Revision Changes Path
1.29 +52 -0 modperl-2.0/src/modules/perl/modperl_env.c
Index: modperl_env.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_env.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -u -r1.28 -r1.29
--- modperl_env.c 22 Sep 2003 23:25:54 -0000 1.28
+++ modperl_env.c 22 Sep 2003 23:29:52 -0000 1.29
@@ -32,6 +32,15 @@
SvTAINTED_on(*svp);
}
+static MP_INLINE
+void modperl_env_hv_delete(pTHX_ HV *hv, char *key)
+{
+ I32 klen = strlen(key);
+ if (hv_exists(hv, key, klen)) {
+ hv_delete(hv, key, strlen(key), G_DISCARD);
+ }
+}
+
typedef struct {
const char *key;
I32 klen;
@@ -102,6 +111,31 @@
modperl_env_tie(mg_flags);
}
+static void modperl_env_table_unpopulate(pTHX_ apr_table_t *table)
+{
+ HV *hv = ENVHV;
+ U32 mg_flags;
+ int i;
+ const apr_array_header_t *array;
+ apr_table_entry_t *elts;
+
+ modperl_env_untie(mg_flags);
+
+ array = apr_table_elts(table);
+ elts = (apr_table_entry_t *)array->elts;
+
+ for (i = 0; i < array->nelts; i++) {
+ if (!elts[i].key) {
+ continue;
+ }
+ modperl_env_hv_delete(aTHX_ hv, elts[i].key);
+
+ MP_TRACE_e(MP_FUNC, "delete $ENV{%s};", elts[i].key);
+ }
+
+ modperl_env_tie(mg_flags);
+}
+
/* list of environment variables to pass by default */
static const char *MP_env_pass_defaults[] = {
"PATH", "TZ", NULL
@@ -205,6 +239,24 @@
#endif
MpReqSETUP_ENV_On(rcfg);
+}
+
+void modperl_env_request_unpopulate(pTHX_ request_rec *r)
+{
+ MP_dRCFG;
+
+ /* unset only once */
+ if (!MpReqSETUP_ENV(rcfg)) {
+ return;
+ }
+
+ MP_TRACE_e(MP_FUNC,
+ "\n\t[%s/0x%lx/%s%s]\n\tdelete @ENV{keys r->subprocess_env};",
+ modperl_pid_tid(r->pool), modperl_interp_address(aTHX),
+ modperl_server_desc(r->server, r->pool), r->uri);
+ modperl_env_table_unpopulate(aTHX_ r->subprocess_env);
+
+ MpReqSETUP_ENV_Off(rcfg);
}
void modperl_env_request_tie(pTHX_ request_rec *r)
1.15 +2 -0 modperl-2.0/src/modules/perl/modperl_env.h
Index: modperl_env.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_env.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -u -r1.14 -r1.15
--- modperl_env.h 7 Jul 2003 03:06:14 -0000 1.14
+++ modperl_env.h 22 Sep 2003 23:29:52 -0000 1.15
@@ -26,6 +26,8 @@
void modperl_env_request_populate(pTHX_ request_rec *r);
+void modperl_env_request_unpopulate(pTHX_ request_rec *r);
+
void modperl_env_request_tie(pTHX_ request_rec *r);
void modperl_env_request_untie(pTHX_ request_rec *r);