~ubuntu-branches/ubuntu/feisty/libapache2-mod-perl2/feisty-security

« back to all changes in this revision

Viewing changes to t/response/TestModperl/setupenv.pm

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2004-08-19 06:23:48 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20040819062348-jxl4koqbtvgm8v2t
Tags: 1.99.14-4
Remove the LFS CFLAGS, and build-dep against apache2-*-dev (>= 2.0.50-10)
as we're backing out of the apache2/apr ABI transition.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package TestModperl::setupenv;
 
2
 
 
3
use strict;
 
4
use warnings FATAL => 'all';
 
5
 
 
6
use Apache::RequestRec ();
 
7
use APR::Table ();
 
8
 
 
9
use Apache::Test;
 
10
use Apache::TestUtil;
 
11
 
 
12
use Apache::Const -compile => qw(OK DECLINED);
 
13
 
 
14
sub handler {
 
15
 
 
16
    my $r = shift;
 
17
 
 
18
    # how many different URIs will be hit?
 
19
    my $requests = $r->args;
 
20
 
 
21
    # $requests locations with 7 tests each
 
22
    plan $r, tests => $requests * 7;
 
23
 
 
24
    return Apache::OK;
 
25
}
 
26
 
 
27
sub env {
 
28
 
 
29
    my $r = shift;
 
30
 
 
31
    Apache::Test::init_test_pm($r);  # tie STDOUT
 
32
 
 
33
    (my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
 
34
 
 
35
    ok t_cmp(Apache::Test::vars('remote_addr'),
 
36
             $ENV{REMOTE_ADDR},
 
37
             'found REMOTE_ADDR in %ENV');
 
38
 
 
39
    ok t_cmp('server',
 
40
             $ENV{SRV_SUBPROCESS},
 
41
             'found subprocess_env table entry SRV_SUBPROCESS in %ENV');
 
42
 
 
43
    ok t_cmp($value,
 
44
             $ENV{DIR_SUBPROCESS},
 
45
             'found subprocess_env table entry DIR_SUBPROCESS in %ENV');
 
46
 
 
47
    ok t_cmp($value,
 
48
             $ENV{DIR_SETENV},
 
49
             'found per-directory SetEnv entry in %ENV');
 
50
 
 
51
    ok t_cmp('server',
 
52
             $ENV{SRV_SETENV},
 
53
             'found per-server SetEnv entry in %ENV');
 
54
 
 
55
    # PerlSetEnv always set
 
56
    ok t_cmp($value,
 
57
             $ENV{DIR_PERLSETENV},
 
58
             'found per-directory PerlSetEnv entry in %ENV');
 
59
 
 
60
    ok t_cmp('server',
 
61
             $ENV{SRV_PERLSETENV},
 
62
             'found per-server PerlSetEnv entry in %ENV');
 
63
 
 
64
    return Apache::OK;
 
65
}
 
66
 
 
67
sub noenv {
 
68
 
 
69
    my $r = shift;
 
70
 
 
71
    Apache::Test::init_test_pm($r);  # tie STDOUT
 
72
 
 
73
    (my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
 
74
 
 
75
    ok t_cmp(undef,
 
76
             $ENV{REMOTE_ADDR},
 
77
             'REMOTE_ADDR not found in %ENV');
 
78
 
 
79
    ok t_cmp(undef,
 
80
             $ENV{SRV_SUBPROCESS},
 
81
             'subprocess_env table entry SRV_SUBPROCESS not found in %ENV');
 
82
 
 
83
    ok t_cmp(undef,
 
84
             $ENV{DIR_SUBPROCESS},
 
85
             'subprocess_env table entry DIR_SUBPROCESS not found in %ENV');
 
86
 
 
87
    ok t_cmp(undef,
 
88
             $ENV{DIR_SETENV},
 
89
             'per-directory SetEnv entry not found in %ENV');
 
90
 
 
91
    ok t_cmp(undef,
 
92
             $ENV{SRV_SETENV},
 
93
             'per-server SetEnv entry not found in %ENV');
 
94
 
 
95
    # PerlSetEnv always set
 
96
    ok t_cmp($value,
 
97
             $ENV{DIR_PERLSETENV},
 
98
             'found per-directory PerlSetEnv entry in %ENV');
 
99
 
 
100
    ok t_cmp('server',
 
101
             $ENV{SRV_PERLSETENV},
 
102
             'found per-server PerlSetEnv entry in %ENV');
 
103
 
 
104
    return Apache::OK;
 
105
}
 
106
 
 
107
sub someenv {
 
108
 
 
109
    my $r = shift;
 
110
 
 
111
    Apache::Test::init_test_pm($r);  # tie STDOUT
 
112
 
 
113
    (my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
 
114
 
 
115
    ok t_cmp(Apache::Test::vars('remote_addr'),
 
116
             $ENV{REMOTE_ADDR},
 
117
             'found REMOTE_ADDR in %ENV');
 
118
 
 
119
    # set before void call
 
120
    ok t_cmp('server',
 
121
             $ENV{SRV_SUBPROCESS},
 
122
             'found subprocess_env table entry one in %ENV');
 
123
 
 
124
    ok t_cmp(undef,
 
125
             $ENV{DIR_SUBPROCESS},
 
126
             'subprocess_env table entry DIR_SUBPROCESS not found in %ENV');
 
127
 
 
128
    ok t_cmp(undef,
 
129
             $ENV{DIR_SETENV},
 
130
             'per-directory SetEnv entry not found in %ENV');
 
131
 
 
132
    ok t_cmp(undef,
 
133
             $ENV{SRV_SETENV},
 
134
             'per-server SetEnv entry not found in %ENV');
 
135
 
 
136
    # PerlSetEnv always set
 
137
    ok t_cmp($value,
 
138
             $ENV{DIR_PERLSETENV},
 
139
             'found per-directory PerlSetEnv entry in %ENV');
 
140
 
 
141
    ok t_cmp('server',
 
142
             $ENV{SRV_PERLSETENV},
 
143
             'found per-server PerlSetEnv entry in %ENV');
 
144
 
 
145
    return Apache::OK;
 
146
}
 
147
 
 
148
sub subenv_void {
 
149
 
 
150
    shift->subprocess_env;
 
151
 
 
152
    return Apache::OK;
 
153
}
 
154
 
 
155
sub subenv_one {
 
156
 
 
157
    shift->subprocess_env->set(SRV_SUBPROCESS => 'server');
 
158
 
 
159
    return Apache::OK;
 
160
}
 
161
 
 
162
sub subenv_two {
 
163
 
 
164
    my $r = shift;
 
165
 
 
166
    (my $value) = $r->uri =~ /TestModperl__setupenv_(\w+)/;
 
167
 
 
168
    $r->subprocess_env->set(DIR_SUBPROCESS => $value);
 
169
 
 
170
    return Apache::OK;
 
171
}
 
172
 
 
173
1;
 
174
__DATA__
 
175
# create a separate virtual host so we can use
 
176
# keepalives - a per-connection interpreter is
 
177
# the only way to make sure that we can plan in
 
178
# one request and test in subsequent tests
 
179
<NoAutoConfig>
 
180
<VirtualHost TestModperl::setupenv>
 
181
 
 
182
    KeepAlive On
 
183
 
 
184
    <IfDefine PERL_ITHREADS>
 
185
        PerlInterpScope connection
 
186
    </Ifdefine>
 
187
 
 
188
    PerlModule TestModperl::setupenv
 
189
 
 
190
    PerlPostReadRequestHandler TestModperl::setupenv::subenv_one
 
191
 
 
192
    # SetEnv is affected by +SetupEnv
 
193
    SetEnv SRV_SETENV server
 
194
 
 
195
    # PerlSetEnv is not affected by +SetupEnv or -SetupEnv
 
196
    # it is entirely separate and always set if configured
 
197
    PerlSetEnv SRV_PERLSETENV server
 
198
 
 
199
    # plan
 
200
    <Location /TestModperl__setupenv>
 
201
        SetHandler modperl
 
202
        PerlResponseHandler TestModperl::setupenv
 
203
    </Location>
 
204
 
 
205
    # default modperl handler
 
206
    # %ENV should not contain standard CGI variables
 
207
    # or entries from the subprocess_env table
 
208
    <Location /TestModperl__setupenv_mpdefault>
 
209
        SetHandler modperl
 
210
        PerlResponseHandler TestModperl::setupenv::noenv
 
211
 
 
212
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
213
 
 
214
        SetEnv DIR_SETENV mpdefault
 
215
        PerlSetEnv DIR_PERLSETENV mpdefault
 
216
    </Location>
 
217
 
 
218
    # modperl handler + SetupEnv
 
219
    # %ENV should contain CGI variables as well as
 
220
    # anything put into the subprocess_env table
 
221
    <Location /TestModperl__setupenv_mpsetup>
 
222
        SetHandler modperl
 
223
        PerlResponseHandler TestModperl::setupenv::env
 
224
 
 
225
        PerlOptions +SetupEnv
 
226
 
 
227
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
228
 
 
229
        SetEnv DIR_SETENV mpsetup
 
230
        PerlSetEnv DIR_PERLSETENV mpsetup
 
231
    </Location>
 
232
 
 
233
    # $r->subprocess_env in a void context with no args
 
234
    # should do the same as +SetupEnv wrt CGI variables
 
235
    # and entries already in the subprocess_env table
 
236
    # but subprocess_env entries that appear later will
 
237
    # not show up in %ENV
 
238
    <Location /TestModperl__setupenv_mpvoid>
 
239
        SetHandler modperl
 
240
        PerlResponseHandler TestModperl::setupenv::someenv
 
241
 
 
242
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
 
243
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
244
 
 
245
        SetEnv DIR_SETENV mpvoid
 
246
        PerlSetEnv DIR_PERLSETENV mpvoid
 
247
    </Location>
 
248
 
 
249
    # +SetupEnv should always populate %ENV fully prior
 
250
    # to running the content handler (regardless of when
 
251
    # $r->subprocess_env() was called) to ensure that
 
252
    # %ENV is an accurate representation of the
 
253
    # subprocess_env table
 
254
    <Location /TestModperl__setupenv_mpsetupvoid>
 
255
        SetHandler modperl
 
256
        PerlResponseHandler TestModperl::setupenv::env
 
257
 
 
258
        PerlOptions +SetupEnv
 
259
    
 
260
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
 
261
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
262
 
 
263
        SetEnv DIR_SETENV mpsetupvoid
 
264
        PerlSetEnv DIR_PERLSETENV mpsetupvoid
 
265
    </Location>
 
266
 
 
267
    # default perl-script handler is equivalent to +SetupEnv
 
268
    # CGI variables and subprocess_env entries will be in %ENV
 
269
    <Location /TestModperl__setupenv_psdefault>
 
270
        SetHandler perl-script
 
271
        PerlResponseHandler TestModperl::setupenv::env
 
272
 
 
273
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
274
 
 
275
        SetEnv DIR_SETENV psdefault
 
276
        PerlSetEnv DIR_PERLSETENV psdefault
 
277
    </Location>
 
278
 
 
279
    # -SetupEnv should not put CGI variables or subprocess_env
 
280
    # entries in %ENV
 
281
    <Location /TestModperl__setupenv_psnosetup>
 
282
        SetHandler perl-script
 
283
        PerlResponseHandler TestModperl::setupenv::noenv
 
284
 
 
285
        PerlOptions -SetupEnv
 
286
 
 
287
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
288
 
 
289
        SetEnv DIR_SETENV psnosetup
 
290
        PerlSetEnv DIR_PERLSETENV psnosetup
 
291
    </Location>
 
292
 
 
293
    # +SetupEnv should always populate %ENV fully prior
 
294
    # to running the content handler (regardless of when
 
295
    # $r->subprocess_env() was called) to ensure that
 
296
    # %ENV is an accurate representation of the
 
297
    # subprocess_env table
 
298
    <Location /TestModperl__setupenv_psvoid>
 
299
        SetHandler perl-script
 
300
        PerlResponseHandler TestModperl::setupenv::env
 
301
 
 
302
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
 
303
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
304
 
 
305
        SetEnv DIR_SETENV psvoid
 
306
        PerlSetEnv DIR_PERLSETENV psvoid
 
307
    </Location>
 
308
 
 
309
    # equivalent to modperl handler with $r->subprocess_env() - 
 
310
    # CGI variables are there, but not subprocess_env entries
 
311
    # that are populated after the void call
 
312
    <Location /TestModperl__setupenv_psnosetupvoid>
 
313
        SetHandler perl-script
 
314
        PerlResponseHandler TestModperl::setupenv::someenv
 
315
 
 
316
        PerlOptions -SetupEnv
 
317
 
 
318
        PerlHeaderParserHandler TestModperl::setupenv::subenv_void
 
319
        PerlFixupHandler TestModperl::setupenv::subenv_two
 
320
 
 
321
        SetEnv DIR_SETENV psnosetupvoid
 
322
        PerlSetEnv DIR_PERLSETENV psnosetupvoid
 
323
    </Location>
 
324
</VirtualHost>
 
325
</NoAutoConfig>