home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / xampp / xampp-perl-addon-1.4.9-installer.exe / ServerUtil.pm < prev    next >
Encoding:
Perl POD Document  |  2004-09-23  |  17.9 KB  |  801 lines

  1. # /*
  2. #  * *********** WARNING **************
  3. #  * This file generated by ModPerl::WrapXS/0.01
  4. #  * Any changes made here will be lost
  5. #  * ***********************************
  6. #  * 01: lib/ModPerl/Code.pm:701
  7. #  * 02: O:\147xampp\sources\mod_perl-1.99_16\blib\lib/ModPerl/WrapXS.pm:584
  8. #  * 03: O:\147xampp\sources\mod_perl-1.99_16\blib\lib/ModPerl/WrapXS.pm:1100
  9. #  * 04: Makefile.PL:335
  10. #  * 05: Makefile.PL:283
  11. #  * 06: Makefile.PL:51
  12. #  */
  13.  
  14.  
  15. package Apache::ServerUtil;
  16.  
  17. use strict;
  18. use warnings FATAL => 'all';
  19.  
  20.  
  21.  
  22. use Apache::XSLoader ();
  23. our $VERSION = '0.01';
  24. Apache::XSLoader::load __PACKAGE__;
  25.  
  26.  
  27.  
  28. 1;
  29. __END__
  30.  
  31. =head1 NAME
  32.  
  33. Apache::ServerUtil - Perl API for Apache server record utils
  34.  
  35.  
  36.  
  37.  
  38. =head1 Synopsis
  39.  
  40.   use Apache::ServerUtil ();
  41.   $s = Apache->server;
  42.   
  43.   # push config
  44.   $s->add_config(['ServerTokens off']);
  45.   
  46.   # add components to the Server signature
  47.   $s->add_version_component("MyModule/1.234");
  48.   
  49.   # access PerlSetVar/PerlAddVar values
  50.   my $srv_cfg = $s->dir_config;
  51.   
  52.   # check command line defines
  53.   print "this is mp2"
  54.       if Apache::ServerUtil::exists_config_define('MODPERL2');
  55.   
  56.   # get PerlChildExitHandler configured handlers
  57.   @handlers = @{ $s->get_handlers('PerlChildExitHandler') || []};
  58.   
  59.   # server build and version info:
  60.   $when_built = Apache::ServerUtil::get_server_built();
  61.   $version = Apache::ServerUtil::get_server_version();
  62.   
  63.   # ServerRoot value
  64.   $server_root = Apache::ServerUtil::server_root();
  65.   
  66.   # get 'conf/' dir path (avoid using this function!)
  67.   my $dir = Apache::ServerUtil::server_root_relative($r->pool, 'conf');
  68.   
  69.   # set child_exit handlers
  70.   $r->set_handlers(PerlChildExitHandler => \&handler);
  71.   
  72.   # server level PerlOptions flags lookup
  73.   $s->push_handlers(ChildExit => \&child_exit)
  74.       if $s->is_perl_option_enabled('ChildExit');
  75.   
  76.   # extend HTTP to support a new method
  77.   $s->method_register('NEWGET');
  78.  
  79.  
  80.  
  81.  
  82.  
  83. =head1 Description
  84.  
  85. C<Apache::ServerUtil> provides the L<Apache server
  86. object|docs::2.0::api::Apache::ServerRec> utilities API.
  87.  
  88.  
  89.  
  90.  
  91. =head1 Methods API
  92.  
  93. C<Apache::ServerUtil> provides the following functions and/or methods:
  94.  
  95.  
  96.  
  97.  
  98.  
  99. =head2 C<add_config>
  100.  
  101. Dynamically add Apache configuration:
  102.  
  103.   $s->add_config($lines);
  104.  
  105. =over 4
  106.  
  107. =item obj: C<$s>
  108. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  109.  
  110. =item arg1: C<$lines> ( ARRAY ref )
  111.  
  112. An ARRAY reference containing configuration lines per element, without
  113. the new line terminators.
  114.  
  115. =item ret: no return value
  116.  
  117. =item since: 1.99_10
  118.  
  119. =back
  120.  
  121. See also:
  122. C<L<$r-E<gt>add_config|docs::2.0::api::Apache::RequestUtil/C_add_config_>>
  123.  
  124. For example:
  125.  
  126. Add a configuration section at the server startup (e.g. from
  127. I<startup.pl>):
  128.  
  129.   use Apache::ServerUtil ();
  130.   my $conf = <<'EOC';
  131.   PerlModule Apache::MyExample
  132.   <Location /perl>
  133.     SetHandler perl-script
  134.     PerlResponseHandler Apache::MyExample
  135.   </Location>
  136.   EOC
  137.   Apache->server->add_config([split /\n/, $conf]);
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145. =head2 C<add_version_component>
  146.  
  147. Add a component to the version string
  148.  
  149.   $s->add_version_component($component);
  150.  
  151. =over 4
  152.  
  153. =item obj: C<$s>
  154. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  155.  
  156. =item arg1: C<$component> ( string )
  157.  
  158. The string componennt to add
  159.  
  160. =item ret: no return value
  161.  
  162. =item since: 1.99_15
  163.  
  164. =back
  165.  
  166. This function is usually used by modules to advertise themselves to
  167. the world. It's picked up by such statistics collectors, like
  168. netcraft.com, which accomplish that by connecting to various servers
  169. and grabbing the server version response header (C<Server>). Some
  170. servers choose to fully or partially conceal that header.
  171.  
  172. This method should be invoked in the
  173. C<L<PerlPostConfigHandler|docs::2.0::user::handlers::server/C_PerlPostConfigHandler_>>
  174. phase, which will ensure that the Apache core version number will
  175. appear first.
  176.  
  177. For example let's add a component I<"Hikers, Inc/0.99999"> to the
  178. server string at the server startup:
  179.  
  180.   use Apache::ServerUtil ();
  181.   use Apache::Const -compile => 'OK';
  182.   
  183.   Apache->server->push_handlers(
  184.       PerlPostConfigHandler => \&add_my_version);
  185.   
  186.   sub add_my_version {
  187.       my($conf_pool, $log_pool, $temp_pool, $s) = @_;
  188.       $s->add_version_component("Hikers, Inc/0.99999");
  189.       return Apache::OK;
  190.   }
  191.  
  192. or of course you could register the
  193. C<L<PerlPostConfigHandler|docs::2.0::user::handlers::server/C_PerlPostConfigHandler_>>
  194. handler directly in F<httpd.conf>
  195.  
  196. Now when the server starts, you will something like:
  197.  
  198.   [Thu Jul 15 12:15:28 2004] [notice] Apache/2.0.51-dev (Unix)
  199.   mod_perl/1.99_15-dev Perl/v5.8.5 Hikers, Inc/0.99999
  200.   configured -- resuming normal operations
  201.  
  202. Also remember that the C<ServerTokens> directive value controls
  203. whether the component information is displayed or not.
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212. =head2 C<dir_config>
  213.  
  214. C<$s-E<gt>dir_config()> provides an interface for the per-server
  215. variables specified by the C<PerlSetVar> and C<PerlAddVar> directives,
  216. and also can be manipulated via the
  217. C<L<APR::Table|docs::2.0::api::APR::Table>> methods.
  218.  
  219.   $table  = $s->dir_config();
  220.   $value  = $s->dir_config($key);
  221.   @values = $s->dir_config($key);
  222.   $s->dir_config($key, $val);
  223.  
  224. =over 4
  225.  
  226. =item obj: C<$s>
  227. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  228.  
  229. =item opt arg2: C<$key> ( string )
  230.  
  231. Key string
  232.  
  233. =item opt arg3: C<$val> ( string )
  234.  
  235. Value string
  236.  
  237. =item ret: ...
  238.  
  239. Depends on the passed arguments, see further discussion
  240.  
  241. =item since: 1.99_10
  242.  
  243. =back
  244.  
  245. The keys are case-insensitive.
  246.  
  247.   $t = $s->dir_config();
  248.  
  249. dir_config() called in a scalar context without the C<$key> argument
  250. returns a I<HASH> reference blessed into the I<APR::Table> class. This
  251. object can be manipulated via the I<APR::Table> methods. For available
  252. methods see I<APR::Table>.
  253.  
  254.   @values = $s->dir_config($key);
  255.  
  256. If the C<$key> argument is passed in the list context a list of all
  257. matching values will be returned. This method is ineffective for big
  258. tables, as it does a linear search of the table. Thefore avoid using
  259. this way of calling dir_config() unless you know that there could be
  260. more than one value for the wanted key and all the values are wanted.
  261.  
  262.   $value = $s->dir_config($key);
  263.  
  264. If the C<$key> argument is passed in the scalar context only a single
  265. value will be returned. Since the table preserves the insertion order,
  266. if there is more than one value for the same key, the oldest value
  267. assosiated with the desired key is returned. Calling in the scalar
  268. context is also much faster, as it'll stop searching the table as soon
  269. as the first match happens.
  270.  
  271.   $s->dir_config($key => $val);
  272.  
  273. If the C<$key> and the C<$val> arguments are used, the set() operation
  274. will happen: all existing values associated with the key C<$key> (and
  275. the key itself) will be deleted and C<$value> will be placed instead.
  276.  
  277.   $s->dir_config($key => undef);
  278.  
  279. If C<$val> is I<undef> the unset() operation will happen: all existing
  280. values associated with the key C<$key> (and the key itself) will be
  281. deleted.
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289. =head2 C<exists_config_define>
  290.  
  291. Check for a definition from the server startup command line
  292. (e.g. C<-DMODPERL2>)
  293.  
  294.   $result = Apache::ServerUtil::exists_config_define($name);
  295.  
  296. =over 4
  297.  
  298. =item arg1: C<$name> ( string )
  299.  
  300. The define string to check for
  301.  
  302. =item ret: C<$result> ( boolean )
  303.  
  304. true if defined, false otherwise
  305.  
  306. =item since: 1.99_15
  307.  
  308. =back
  309.  
  310. For example:
  311.  
  312.   print "this is mp2"
  313.       if Apache::ServerUtil::exists_config_define('MODPERL2');
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322. =head2 C<get_handlers>
  323.  
  324. Returns a reference to a list of handlers enabled for
  325. a given phase.
  326.  
  327.   $handlers_list = $s->get_handlers($hook_name);
  328.  
  329. =over 4
  330.  
  331. =item obj: C<$s>
  332. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  333.  
  334. =item arg1: C<$hook_name> ( string )
  335.  
  336. a string representing the phase to handle.
  337.  
  338. =item ret: C<$handlers_list> (ref to an ARRAY of CODE refs)
  339.  
  340. a list of references to the handler subroutines
  341.  
  342. =item since: 1.99_10
  343.  
  344. =back
  345.  
  346. See also:
  347. C<L<$r-E<gt>add_config|docs::2.0::api::Apache::RequestUtil/C_get_handlers_>>
  348.  
  349. For example:
  350.  
  351. A list of handlers configured to run at the I<child_exit> phase:
  352.  
  353.   @handlers = @{ $s->get_handlers('PerlChildExitHandler') || []};
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361. =head2 C<get_server_built>
  362.  
  363. Get the date and time that the server was built
  364.  
  365.   $when_built = Apache::ServerUtil::get_server_built();
  366.  
  367. =over 4
  368.  
  369. =item ret: C<$when_built> ( string )
  370.  
  371. The server build time string
  372.  
  373. =item since: 1.99_15
  374.  
  375. =back
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383. =head2 C<get_server_version>
  384.  
  385. Get the server version string
  386.  
  387.   $version = Apache::ServerUtil::get_server_version();
  388.  
  389. =over 4
  390.  
  391. =item ret: C<$version> ( string )
  392.  
  393. The server version string
  394.  
  395. =item since: 1.99_15
  396.  
  397. =back
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405. =head2 C<is_perl_option_enabled>
  406.  
  407. check whether a server level C<PerlOptions> flag is enabled or not.
  408.  
  409.   $result = $s->is_perl_option_enabled($flag);
  410.  
  411. =over 4
  412.  
  413. =item obj: C<$s>
  414. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  415.  
  416. =item arg1: C<$flag> ( string )
  417.  
  418. =item ret: C<$result> ( boolean )
  419.  
  420. =item since: 1.99_10
  421.  
  422. =back
  423.  
  424. For example to check whether the C<ChildExit> hook is enabled (which
  425. can be disabled with C<PerlOptions -ChildExit>) and configure some
  426. handlers to run if enabled:
  427.  
  428.   $s->push_handlers(ChildExit => \&child_exit)
  429.       if $s->is_perl_option_enabled('ChildExit');
  430.  
  431. See also:
  432. L<PerlOptions|docs::2.0::user::config::config/C_PerlOptions_> and
  433. L<the equivalent function for directory level PerlOptions
  434. flags|docs::2.0::api::Apache::RequestUtil/C_is_perl_option_enabled_>.
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444. =head2 C<method_register>
  445.  
  446. Register a new request method, and return the offset that will be
  447. associated with that method.
  448.  
  449.   $offset = $s->method_register($methname);
  450.  
  451. =over 4
  452.  
  453. =item obj: C<$s>
  454. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  455.  
  456. =item arg1: C<$methname> ( string )
  457.  
  458. The name of the new method to register (in addition to the already
  459. supported C<GET>, C<HEAD>, etc.)
  460.  
  461. =item ret: C<$offset> ( integer )
  462.  
  463. An int value representing an offset into a bitmask. You can probably
  464. ignore it.
  465.  
  466. =item since: 1.99_15
  467.  
  468. =back
  469.  
  470. This method allows you to extend the HTTP protocol to support new
  471. methods, which fit the HTTP paradigm.  Of course you will need to
  472. write a client that understands that protocol extension.  For a good
  473. example, refer to the C<MyApache::SendEmail> example presented in
  474. C<L<the PerlHeaderParserHandler
  475. section|docs::2.0::user::handlers::http/PerlHeaderParserHandler>>,
  476. which demonstrates how a new method C<EMAIL> is registered and used.
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484. =head2 C<push_handlers>
  485.  
  486. Add one or more handlers to a list of handlers to be called for a
  487. given phase.
  488.  
  489.   $ok = $s->push_handlers($hook_name => \&handler);
  490.   $ok = $s->push_handlers($hook_name => [\&handler, \&handler2]);
  491.  
  492. =over 4
  493.  
  494. =item obj: C<$s>
  495. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  496.  
  497. =item arg1: C<$hook_name> ( string )
  498.  
  499. the phase to add the handlers to
  500.  
  501. =item arg2: C<$handlers> ( CODE ref or SUB name or an ARRAY ref )
  502.  
  503. a single handler CODE reference or just a name of the subroutine
  504. (fully qualified unless defined in the current package).
  505.  
  506. if more than one passed, use a reference to an array of CODE refs
  507. and/or subroutine names.
  508.  
  509. =item ret: C<$ok> ( boolean )
  510.  
  511. returns a true value on success, otherwise a false value
  512.  
  513. =item since: 1.99_10
  514.  
  515. =back
  516.  
  517. See also:
  518. C<L<$r-E<gt>add_config|docs::2.0::api::Apache::RequestUtil/C_push_handlers_>>
  519.  
  520. Examples:
  521.  
  522. A single handler:
  523.  
  524.   $s->push_handlers(PerlChildExitHandler => \&handler);
  525.  
  526. Multiple handlers:
  527.  
  528.   $s->push_handlers(PerlChildExitHandler => ['Foo::Bar::handler', \&handler2]);
  529.  
  530. Anonymous functions:
  531.  
  532.   $s->push_handlers(PerlLogHandler => sub { return Apache::OK });
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540. =head2 C<server>
  541.  
  542. Get the main server's object
  543.  
  544.   $main_s = Apache->server();
  545.  
  546. =over 4
  547.  
  548. =item obj: C<Apache> (class name)
  549.  
  550. =item ret: C<$main_s>
  551. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  552.  
  553. =item since: 1.99_10
  554.  
  555. =back
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563. =head2 C<server_root>
  564.  
  565. returns the value set by the top-level C<ServerRoot> directive.
  566.  
  567.   $server_root = Apache::ServerUtil::server_root();
  568.  
  569. =over 4
  570.  
  571. =item ret: C<$server_root> ( string )
  572.  
  573. =item since: 1.99_15
  574.  
  575. =back
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584. =head2 C<server_root_relative>
  585.  
  586. Returns the canonical form of the filename made absolute to
  587. C<ServerRoot>:
  588.  
  589.   $path = Apache::ServerUtil::server_root_relative($pool, $fname);
  590.  
  591. =over 4
  592.  
  593. =item arg1: C<$pool>
  594. ( C<L<APR::Pool object|docs::2.0::api::APR::Pool>> )
  595.  
  596. Make sure that you read the following explanation and understand well
  597. which pool object you need to pass before using this function.
  598.  
  599. =item opt arg2: C<$fname> ( string )
  600.  
  601. =item ret: C<$path> ( string )
  602.  
  603. The concatenation of C<ServerRoot> and the C<$fname>.
  604.  
  605. If C<$fname> is not specified, the value of C<ServerRoot> is returned
  606. with a trailing C</>. (it's the same as using C<''> as C<$fname>'s
  607. value).
  608.  
  609. =item since: 1.99_15
  610.  
  611. =back
  612.  
  613. C<$fname> is appended to the value of C<ServerRoot> and returned. For
  614. example:
  615.  
  616.   my $dir = Apache::ServerUtil::server_root_relative($r->pool, 'logs');
  617.  
  618. You must be extra-careful when using this function. If you aren't sure
  619. what you are doing don't use it.
  620.  
  621. It's much safer to build the path by yourself using use
  622. C<L<Apache::ServerUtil::server_root()|/C_Apache__server_root_>>, For
  623. example:
  624.  
  625.   use File::Spec::Functions qw(catfile);
  626.   my $path = catfile Apache::ServerUtil::server_root, qw(t logs);
  627.  
  628. In this example, no memory allocation happens on the Apache-side and
  629. you aren't risking to get a memory leak.
  630.  
  631. The problem with C<server_root_relative> is that Apache allocates
  632. memory to concatenate the path string. The memory is allocated from
  633. the pool object. If you call this method on the server pool object
  634. it'll allocate the memory from it.  If you do that at the server
  635. startup, it's perfectly right, since you will do that only
  636. once. However if you do that from within a request or a connection
  637. handler, you create a memory leak every time it is called -- as the
  638. memory gets allocated from the server pool, it will be freed only when
  639. the server is shutdown. Therefore if you need to build a relative to
  640. the root server path for the duration of the request, use the request
  641. pool:
  642.  
  643.   use Apache::RequestRec ();
  644.   Apache::ServerUtil::server_root_relative($r->pool, $fname);
  645.  
  646. If you need to have the path for the duration of a connection
  647. (e.g. inside a protocol handler), you should use:
  648.  
  649.   use Apache::Connection ();
  650.   Apache::ServerUtil::server_root_relative($c->pool, $fname);
  651.  
  652. And if you want it for the scope of the server file:
  653.  
  654.   use Apache::Process ();
  655.   use Apache::ServerUtil ();
  656.   Apache::ServerUtil::server_root_relative($s->process->pool, $fname);
  657.  
  658. Moreover, you could have encountered the opposite problem, where you
  659. have used a short-lived pool object to construct the path, but tried
  660. to use the resulting path variable, when that pool has been destructed
  661. already. In order to avoid mysterious segmentation faults, mod_perl
  662. does a wasteful copy of the path string when returning it to you --
  663. another reason to avoid using this function.
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672. =head2 C<set_handlers>
  673.  
  674. Set a list of handlers to be called for a given phase. Any previously
  675. set handlers are forgotten.
  676.  
  677.   $ok = $s->set_handlers($hook_name => \&handler);
  678.   $ok = $s->set_handlers($hook_name => [\&handler, \&handler2]);
  679.   $ok = $s->set_handlers($hook_name => []);
  680.   $ok = $s->set_handlers($hook_name => undef);
  681.  
  682. =over 4
  683.  
  684. =item obj: C<$s>
  685. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  686.  
  687. =item arg1: C<$hook_name> ( string )
  688.  
  689. the phase to set the handlers in
  690.  
  691. =item arg2: C<$handlers> ( CODE ref or SUB name or an ARRAY ref )
  692.  
  693. a reference to a single handler CODE reference or just a name of the
  694. subroutine (fully qualified unless defined in the current package).
  695.  
  696. if more than one passed, use a reference to an array of CODE refs
  697. and/or subroutine names.
  698.  
  699. if the argument is C<undef> or C<[]> the list of handlers is reset to
  700. zero.
  701.  
  702. =item ret: C<$ok> ( boolean )
  703.  
  704. returns a true value on success, otherwise a false value
  705.  
  706. =item since: 1.99_10
  707.  
  708. =back
  709.  
  710. See also:
  711. C<L<$r-E<gt>add_config|docs::2.0::api::Apache::RequestUtil/C_set_handlers_>>
  712.  
  713. Examples:
  714.  
  715. A single handler:
  716.  
  717.   $r->set_handlers(PerlChildExitHandler => \&handler);
  718.  
  719. Multiple handlers:
  720.  
  721.   $r->set_handlers(PerlFixupHandler => ['Foo::Bar::handler', \&handler2]);
  722.  
  723. Anonymous functions:
  724.  
  725.   $r->set_handlers(PerlLogHandler => sub { return Apache::OK });
  726.  
  727. Reset any previously set handlers:
  728.  
  729.   $r->set_handlers(PerlCleanupHandler => []);
  730.  
  731. or
  732.  
  733.   $r->set_handlers(PerlCleanupHandler => undef);
  734.  
  735.  
  736.  
  737.  
  738. =head1 Unsupported API
  739.  
  740. C<Apache::ServerUtil> also provides auto-generated Perl interface for
  741. a few other methods which aren't tested at the moment and therefore
  742. their API is a subject to change. These methods will be finalized
  743. later as a need arises. If you want to rely on any of the following
  744. methods please contact the L<the mod_perl development mailing
  745. list|maillist::dev> so we can help each other take the steps necessary
  746. to shift the method to an officially supported API.
  747.  
  748.  
  749. =head2 C<error_log2stderr>
  750.  
  751. Start sending STDERR to the error_log file
  752.  
  753.   $s->error_log2stderr();
  754.  
  755. =over 4
  756.  
  757. =item obj: C<$s>
  758. ( C<L<Apache::ServerRec object|docs::2.0::api::Apache::ServerRec>> )
  759.  
  760. The current server
  761.  
  762. =item ret: no return value
  763.  
  764. =item since: 1.99_10
  765.  
  766. =back
  767.  
  768. This method may prove useful if you want to start redirecting STDERR
  769. to the error_log file before Apache does that on the startup.
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777. =head1 See Also
  778.  
  779. L<mod_perl 2.0 documentation|docs::2.0::index>.
  780.  
  781.  
  782.  
  783.  
  784. =head1 Copyright
  785.  
  786. mod_perl 2.0 and its core modules are copyrighted under
  787. The Apache Software License, Version 2.0.
  788.  
  789.  
  790.  
  791.  
  792. =head1 Authors
  793.  
  794. L<The mod_perl development team and numerous
  795. contributors|about::contributors::people>.
  796.  
  797. =cut
  798.  
  799.