Annotation of embedaddon/lighttpd/tests/mod-fastcgi.t, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/env perl
                      2: BEGIN {
                      3:        # add current source dir to the include-path
                      4:        # we need this for make distcheck
                      5:        (my $srcdir = $0) =~ s,/[^/]+$,/,;
                      6:        unshift @INC, $srcdir;
                      7: }
                      8: 
                      9: use strict;
                     10: use Test::More tests => 58;
                     11: use LightyTest;
                     12: 
                     13: my $tf = LightyTest->new();
                     14: 
                     15: my $t;
                     16: my $php_child = -1;
                     17: 
                     18: my $phpbin = (defined $ENV{'PHP'} ? $ENV{'PHP'} : '/usr/bin/php-cgi');
                     19: $ENV{'PHP'} = $phpbin;
                     20: 
                     21: SKIP: {
                     22:        skip "PHP already running on port 1026", 1 if $tf->listening_on(1026);
                     23:        skip "no php binary found", 1 unless -x $phpbin;
                     24:        ok(-1 != ($php_child = $tf->spawnfcgi($phpbin, 1026)), "Spawning php");
                     25: }
                     26: 
                     27: SKIP: {
                     28:        skip "no PHP running on port 1026", 35 unless $tf->listening_on(1026);
                     29: 
                     30:        ok($tf->start_proc == 0, "Starting lighttpd") or goto cleanup;
                     31: 
                     32:        $t->{REQUEST} = ( <<EOF
                     33: GET /phpinfo.php HTTP/1.0
                     34: Host: www.example.org
                     35: EOF
                     36:  );
                     37:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
                     38:        ok($tf->handle_http($t) == 0, 'valid request');
                     39: 
                     40:        $t->{REQUEST}  = ( <<EOF
                     41: GET /phpinfofoobar.php HTTP/1.0
                     42: Host: www.example.org
                     43: EOF
                     44:  );
                     45:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
                     46:        ok($tf->handle_http($t) == 0, 'file not found');
                     47: 
                     48:        $t->{REQUEST}  = ( <<EOF
                     49: GET /go/ HTTP/1.0
                     50: Host: www.example.org
                     51: EOF
                     52:  );
                     53:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
                     54:        ok($tf->handle_http($t) == 0, 'index-file handling');
                     55: 
                     56:        $t->{REQUEST}  = ( <<EOF
                     57: GET /redirect.php HTTP/1.0
                     58: Host: www.example.org
                     59: EOF
                     60:  );
                     61:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Location' => 'http://www.example.org:2048/' } ];
                     62:        ok($tf->handle_http($t) == 0, 'Status + Location via FastCGI');
                     63: 
                     64:        $t->{REQUEST}  = ( <<EOF
                     65: GET /redirect.php/ HTTP/1.0
                     66: Host: www.example.org
                     67: EOF
                     68:  );
                     69:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Location' => 'http://www.example.org:2048/' } ];
                     70:        ok($tf->handle_http($t) == 0, 'Trailing slash as path-info (#1989: workaround broken operating systems)');
                     71: 
                     72:        $t->{REQUEST}  = ( <<EOF
                     73: GET /get-server-env.php?env=PHP_SELF HTTP/1.0
                     74: Host: www.example.org
                     75: EOF
                     76:  );
                     77:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
                     78:        ok($tf->handle_http($t) == 0, '$_SERVER["PHP_SELF"]');
                     79: 
                     80:        $t->{REQUEST}  = ( <<EOF
                     81: GET /get-server-env.php/foo?env=SCRIPT_NAME HTTP/1.0
                     82: Host: www.example.org
                     83: EOF
                     84:  );
                     85:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/get-server-env.php' } ];
                     86:        ok($tf->handle_http($t) == 0, '$_SERVER["SCRIPT_NAME"]');
                     87: 
                     88:        $t->{REQUEST}  = ( <<EOF
                     89: GET /get-server-env.php/foo?env=PATH_INFO HTTP/1.0
                     90: Host: www.example.org
                     91: EOF
                     92:  );
                     93:        $t->{RESPONSE}  = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/foo' } ];
                     94:        ok($tf->handle_http($t) == 0, '$_SERVER["PATH_INFO"]');
                     95: 
                     96:        $t->{REQUEST}  = ( <<EOF
                     97: GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
                     98: Host: www.example.org
                     99: EOF
                    100:  );
                    101:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
                    102:        ok($tf->handle_http($t) == 0, 'SERVER_NAME');
                    103: 
                    104:        $t->{REQUEST}  = ( <<EOF
                    105: GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
                    106: Host: foo.example.org
                    107: EOF
                    108:  );
                    109:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
                    110:        ok($tf->handle_http($t) == 0, 'SERVER_NAME');
                    111: 
                    112:        $t->{REQUEST}  = ( <<EOF
                    113: GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
                    114: Host: vvv.example.org
                    115: EOF
                    116:  );
                    117:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
                    118:        ok($tf->handle_http($t) == 0, 'SERVER_NAME');
                    119: 
                    120:        $t->{REQUEST}  = ( <<EOF
                    121: GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
                    122: Host: zzz.example.org
                    123: EOF
                    124:  );
                    125:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
                    126:        ok($tf->handle_http($t) == 0, 'SERVER_NAME');
                    127: 
                    128:        $t->{REQUEST}  = ( <<EOF
                    129: GET /cgi.php/abc HTTP/1.0
                    130: EOF
                    131:  );
                    132:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
                    133:        ok($tf->handle_http($t) == 0, 'PATHINFO');
                    134: 
                    135:        $t->{REQUEST}  = ( <<EOF
                    136: GET /cgi.php%20%20%20 HTTP/1.0
                    137: EOF
                    138:  );
                    139:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
                    140:        ok($tf->handle_http($t) == 0, 'No source retrieval');
                    141: 
                    142:        $t->{REQUEST}  = ( <<EOF
                    143: GET /www/abc/def HTTP/1.0
                    144: EOF
                    145:  );
                    146:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
                    147:        ok($tf->handle_http($t) == 0, 'PATHINFO on a directory');
                    148: 
                    149:        $t->{REQUEST}  = ( <<EOF
                    150: GET /indexfile/ HTTP/1.0
                    151: EOF
                    152:  );
                    153:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/indexfile/index.php' } ];
                    154:        ok($tf->handle_http($t) == 0, 'PHP_SELF + Indexfile, Bug #3');
                    155: 
                    156:        $t->{REQUEST}  = ( <<EOF
                    157: GET /prefix.fcgi?var=SCRIPT_NAME HTTP/1.0
                    158: EOF
                    159:  );
                    160:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/prefix.fcgi' } ];
                    161:        ok($tf->handle_http($t) == 0, 'PATH_INFO, check-local off');
                    162: 
                    163:        $t->{REQUEST}  = ( <<EOF
                    164: GET /prefix.fcgi/foo/bar?var=SCRIPT_NAME HTTP/1.0
                    165: EOF
                    166:  );
                    167:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/prefix.fcgi' } ];
                    168:        ok($tf->handle_http($t) == 0, 'PATH_INFO, check-local off');
                    169: 
                    170:        $t->{REQUEST}  = ( <<EOF
                    171: GET /prefix.fcgi/foo/bar?var=PATH_INFO HTTP/1.0
                    172: EOF
                    173:  );
                    174:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/foo/bar' } ];
                    175:        ok($tf->handle_http($t) == 0, 'PATH_INFO, check-local off');
                    176: 
                    177:        $t->{REQUEST}  = ( <<EOF
                    178: GET /sendfile.php?range=0- HTTP/1.0
                    179: EOF
                    180:  );
                    181:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Length' => 4348 } ];
                    182:        ok($tf->handle_http($t) == 0, 'X-Sendfile2');
                    183: 
                    184:        $t->{REQUEST}  = ( <<EOF
                    185: GET /sendfile.php?range=0-4&range2=5- HTTP/1.0
                    186: EOF
                    187:  );
                    188:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Length' => 4348 } ];
                    189:        ok($tf->handle_http($t) == 0, 'X-Sendfile2');
                    190: 
                    191:        $t->{REQUEST}  = ( <<EOF
                    192: GET /get-server-env.php?env=REMOTE_USER HTTP/1.0
                    193: Host: auth.example.org
                    194: Authorization: Basic ZGVzOmRlcw==
                    195: EOF
                    196:  );
                    197:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'des' } ];
                    198:        ok($tf->handle_http($t) == 0, '$_SERVER["REMOTE_USER"]');
                    199: 
                    200:        $t->{REQUEST}  = ( <<EOF
                    201: GET /get-server-env.php?env=AUTH_TYPE HTTP/1.0
                    202: Host: auth.example.org
                    203: Authorization: Basic ZGVzOmRlcw==
                    204: EOF
                    205:  );
                    206:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'Basic' } ];
                    207:        ok($tf->handle_http($t) == 0, '$_SERVER["AUTH_TYPE"]');
                    208: 
                    209: 
                    210:        ok($tf->stop_proc == 0, "Stopping lighttpd");
                    211: 
                    212: 
                    213:        $tf->{CONFIGFILE} = 'fastcgi-10.conf';
                    214:        ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or goto cleanup;
                    215:        $t->{REQUEST}  = ( <<EOF
                    216: GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
                    217: Host: zzz.example.org
                    218: EOF
                    219:  );
                    220:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'zzz.example.org' } ];
                    221:        ok($tf->handle_http($t) == 0, 'FastCGI + Host');
                    222: 
                    223:        $t->{REQUEST}  = ( <<EOF
                    224: GET http://zzz.example.org/get-server-env.php?env=SERVER_NAME HTTP/1.0
                    225: Host: aaa.example.org
                    226: EOF
                    227:  );
                    228:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'zzz.example.org' } ];
                    229:        ok($tf->handle_http($t) == 0, 'SERVER_NAME (absolute url in request line)');
                    230: 
                    231:        ok($tf->stop_proc == 0, "Stopping lighttpd");
                    232:        
                    233:        $tf->{CONFIGFILE} = 'bug-06.conf';
                    234:        ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or goto cleanup;
                    235:        $t->{REQUEST}  = ( <<EOF
                    236: GET /indexfile/ HTTP/1.0
                    237: Host: www.example.org
                    238: EOF
                    239:  );
                    240:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/indexfile/index.php' } ];
                    241:        ok($tf->handle_http($t) == 0, 'Bug #6');
                    242: 
                    243:        ok($tf->stop_proc == 0, "Stopping lighttpd");
                    244: 
                    245:        $tf->{CONFIGFILE} = 'bug-12.conf';
                    246:        ok($tf->start_proc == 0, "Starting lighttpd with bug-12.conf") or goto cleanup;
                    247:        $t->{REQUEST}  = ( <<EOF
                    248: POST /indexfile/abc HTTP/1.0
                    249: Host: www.example.org
                    250: Content-Length: 0
                    251: EOF
                    252:  );
                    253:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-Content' => '/indexfile/return-404.php' } ];
                    254:        ok($tf->handle_http($t) == 0, 'Bug #12');
                    255: 
                    256:        ok($tf->stop_proc == 0, "Stopping lighttpd");
                    257: }
                    258: 
                    259: SKIP: {
                    260:        skip "PHP not started, cannot stop it", 1 unless $php_child != -1;
                    261:        ok(0 == $tf->endspawnfcgi($php_child), "Stopping php");
                    262:        $php_child = -1;
                    263: }
                    264: 
                    265: SKIP: {
                    266:        skip "no fcgi-auth found", 5 unless -x $tf->{BASEDIR}."/tests/fcgi-auth" || -x $tf->{BASEDIR}."/tests/fcgi-auth.exe"; 
                    267: 
                    268:        $tf->{CONFIGFILE} = 'fastcgi-auth.conf';
                    269:        ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
                    270:        $t->{REQUEST}  = ( <<EOF
                    271: GET /index.html?ok HTTP/1.0
                    272: Host: www.example.org
                    273: EOF
                    274:  );
                    275:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
                    276:        ok($tf->handle_http($t) == 0, 'FastCGI - Auth');
                    277: 
                    278:        $t->{REQUEST}  = ( <<EOF
                    279: GET /index.html?fail HTTP/1.0
                    280: Host: www.example.org
                    281: EOF
                    282:  );
                    283:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
                    284:        ok($tf->handle_http($t) == 0, 'FastCGI - Auth');
                    285: 
                    286:        $t->{REQUEST}  = ( <<EOF
                    287: GET /expire/access.txt?ok HTTP/1.0
                    288: Host: www.example.org
                    289: EOF
                    290:  );
                    291:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
                    292:        ok($tf->handle_http($t) == 0, 'FastCGI - Auth in subdirectory');
                    293: 
                    294:        ok($tf->stop_proc == 0, "Stopping lighttpd");
                    295: }
                    296: 
                    297: SKIP: {
                    298:        skip "no php found", 5 unless -x $phpbin;
                    299:        $tf->{CONFIGFILE} = 'fastcgi-13.conf';
                    300:        ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
                    301:        $t->{REQUEST}  = ( <<EOF
                    302: GET /indexfile/index.php HTTP/1.0
                    303: Host: www.example.org
                    304: EOF
                    305:  );
                    306:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
                    307:        ok($tf->handle_http($t) == 0, 'FastCGI + local spawning');
                    308: 
                    309:        $t->{REQUEST} = ( <<EOF
                    310: HEAD /indexfile/index.php HTTP/1.0
                    311: Host: www.example.org
                    312: EOF
                    313:  );
                    314:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-Content-Length' => '0' } ];
                    315:        # Of course a valid content-length != 0 would be ok, but we assume for now that such one is not generated.
                    316:        ok($tf->handle_http($t) == 0, 'Check for buggy content length with HEAD');
                    317: 
                    318:        $t->{REQUEST}  = ( <<EOF
                    319: GET /get-env.php?env=MAIL HTTP/1.0
                    320: Host: www.example.org
                    321: EOF
                    322:  );
                    323:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 , 'HTTP-Content' => '' } ];
                    324:        ok($tf->handle_http($t) == 0, 'FastCGI + bin-copy-environment');
                    325: 
                    326: 
                    327: 
                    328:        ok($tf->stop_proc == 0, "Stopping lighttpd");
                    329: }
                    330: 
                    331: 
                    332: SKIP: {
                    333:        skip "no fcgi-responder found", 11 unless -x $tf->{BASEDIR}."/tests/fcgi-responder" || -x $tf->{BASEDIR}."/tests/fcgi-responder.exe";
                    334:        
                    335:        $tf->{CONFIGFILE} = 'fastcgi-responder.conf';
                    336:        ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
                    337:        $t->{REQUEST}  = ( <<EOF
                    338: GET /index.fcgi?lf HTTP/1.0
                    339: Host: www.example.org
                    340: EOF
                    341:  );
                    342:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
                    343:        ok($tf->handle_http($t) == 0, 'line-ending \n\n');
                    344: 
                    345:        $t->{REQUEST}  = ( <<EOF
                    346: GET /index.fcgi?crlf HTTP/1.0
                    347: Host: www.example.org
                    348: EOF
                    349:  );
                    350:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
                    351:        ok($tf->handle_http($t) == 0, 'line-ending \r\n\r\n');
                    352: 
                    353:        $t->{REQUEST}  = ( <<EOF
                    354: GET /index.fcgi?slow-lf HTTP/1.0
                    355: Host: www.example.org
                    356: EOF
                    357:  );
                    358:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
                    359:        ok($tf->handle_http($t) == 0, 'line-ending \n + \n');
                    360: 
                    361:        $t->{REQUEST}  = ( <<EOF
                    362: GET /index.fcgi?slow-crlf HTTP/1.0
                    363: Host: www.example.org
                    364: EOF
                    365:  );
                    366:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
                    367:        ok($tf->handle_http($t) == 0, 'line-ending \r\n + \r\n');
                    368: 
                    369:        $t->{REQUEST}  = ( <<EOF
                    370: GET /abc/def/ghi?path_info HTTP/1.0
                    371: Host: wsgi.example.org
                    372: EOF
                    373:  );
                    374:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/abc/def/ghi' } ];
                    375:        ok($tf->handle_http($t) == 0, 'PATH_INFO (wsgi)');
                    376: 
                    377:        $t->{REQUEST}  = ( <<EOF
                    378: GET /abc/def/ghi?script_name HTTP/1.0
                    379: Host: wsgi.example.org
                    380: EOF
                    381:  );
                    382:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '' } ];
                    383:        ok($tf->handle_http($t) == 0, 'SCRIPT_NAME (wsgi)');
                    384: 
                    385: 
                    386:        $t->{REQUEST}  = ( <<EOF
                    387: GET /index.fcgi?die-at-end HTTP/1.0
                    388: Host: www.example.org
                    389: EOF
                    390:  );
                    391:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
                    392:        ok($tf->handle_http($t) == 0, 'killing fastcgi and wait for restart');
                    393: 
                    394:        select(undef, undef, undef, .2);
                    395:        $t->{REQUEST}  = ( <<EOF
                    396: GET /index.fcgi?die-at-end HTTP/1.0
                    397: Host: www.example.org
                    398: EOF
                    399:  );
                    400:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
                    401:        ok($tf->handle_http($t) == 0, 'killing fastcgi and wait for restart');
                    402: 
                    403: 
                    404:        select(undef, undef, undef, .2);
                    405:        $t->{REQUEST}  = ( <<EOF
                    406: GET /index.fcgi?crlf HTTP/1.0
                    407: Host: www.example.org
                    408: EOF
                    409:  );
                    410:        $t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
                    411:        ok($tf->handle_http($t) == 0, 'regular response of after restart');
                    412: 
                    413: 
                    414:        ok($tf->stop_proc == 0, "Stopping lighttpd");
                    415: }
                    416: 
                    417: exit 0;
                    418: 
                    419: cleanup: ;
                    420: 
                    421: $tf->endspawnfcgi($php_child) if $php_child != -1;
                    422: 
                    423: die();

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>