File: setupenv2.pm

package info (click to toggle)
libapache2-mod-perl2 2.0.13-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 12,016 kB
  • sloc: perl: 97,771; ansic: 14,493; makefile: 51; sh: 18
file content (135 lines) | stat: -rw-r--r-- 3,284 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
package TestModperl::setupenv2;

# Test the mixing of PerlSetEnv in httpd.conf and %ENV of the same
# key in PerlRequire, PerlConfigRequire, PerlPostConfigRequire and
# <Perl> sections

use strict;
use warnings FATAL => 'all';

use Apache2::Const -compile => qw(OK OR_ALL NO_ARGS);

use Apache2::CmdParms ();
use Apache2::Module ();
use Apache2::RequestIO ();
use Apache2::RequestRec ();

my @directives = (
    {
     name         => 'MyEnvRegister',
     func         => __PACKAGE__ . '::MyEnvRegister',
     req_override => Apache2::Const::OR_ALL,
     args_how     => Apache2::Const::NO_ARGS,
     errmsg       => 'cannot fail :)',
    },
);

Apache2::Module::add(__PACKAGE__, \@directives);

# testing PerlLoadModule
$ENV{EnvChangeMixedTest} = 'loadmodule';
$ENV{EnvChangePerlTest}  = 'loadmodule';

sub MyEnvRegister {
    register_mixed();
}

sub register_mixed {
    push @TestModperl::setupenv2::EnvChangeMixedTest,
        $ENV{EnvChangeMixedTest} || 'notset';
}

sub register_perl {
    push @TestModperl::setupenv2::EnvChangePerlTest,
        $ENV{EnvChangePerlTest}  || 'notset';
}

sub get_config {
    my ($self, $s) = (shift, shift);
    Apache2::Module::get_config($self, $s, @_);
}

sub handler {
    my ($r) = @_;

    my $args = $r->args || '';

    $r->content_type('text/plain');

    if ($args eq 'mixed') {
        my @vals = (@TestModperl::setupenv2::EnvChangeMixedTest,
            $ENV{EnvChangeMixedTest}); # what's the latest env value
        $r->print(join " ", @vals);
    }
    elsif ($args eq 'perl') {
        my @vals = (@TestModperl::setupenv2::EnvChangePerlTest,
            $ENV{EnvChangePerlTest}); # what's the latest env value
        $r->print(join " ", @vals);
    }
    else {
        die "no such case";
    }

    return Apache2::Const::OK;
}

1;
__END__

# APACHE_TEST_CONFIG_ORDER 950

<NoAutoConfig>
PerlLoadModule TestModperl::setupenv2
MyEnvRegister

PerlSetEnv EnvChangeMixedTest "conf1"

<Perl >
TestModperl::setupenv2::register_mixed();
TestModperl::setupenv2::register_perl();
$ENV{EnvChangeMixedTest} = "<perl>";
$ENV{EnvChangePerlTest}  = "<perl>";
</Perl>
MyEnvRegister

PerlSetEnv EnvChangeMixedTest "conf2"

PerlRequire           "@documentroot@/modperl/setupenv2/require.pl"
MyEnvRegister

PerlSetEnv EnvChangeMixedTest "conf3"

PerlConfigRequire     "@documentroot@/modperl/setupenv2/config_require.pl"
MyEnvRegister

PerlSetEnv EnvChangeMixedTest "conf4"

PerlModule htdocs::modperl::setupenv2::module
MyEnvRegister

PerlSetEnv EnvChangeMixedTest "conf5"
MyEnvRegister

PerlPostConfigRequire "@documentroot@/modperl/setupenv2/post_config_require.pl"
MyEnvRegister

PerlSetEnv EnvChangeMixedTest "conf6"
MyEnvRegister

PerlSetEnv EnvChangeMixedTest "conf7"
MyEnvRegister

<Location /TestModperl__setupenv2>
    SetHandler modperl
    PerlResponseHandler TestModperl::setupenv2
</Location>

PerlSetEnv EnvChangeMixedTest "conf8"

# Since PerlPostConfigRequire runs in the post-config phase it will
# see 'conf8'. And when it sets that value to 'post_config_require' at
# request time $ENV{EnvChangeMixedTest} will see the value set by
# PerlPostConfigRequire.

</NoAutoConfig>