summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Fritsch <sf@sfritsch.de>2011-12-27 19:42:17 +0100
committerStefan Fritsch <sf@sfritsch.de>2011-12-27 19:42:17 +0100
commit9e615cb6aa4afcee97f8a1646e5a586261a7b81f (patch)
tree0e09fde2404555dc5daf167b38243b5f89c16549
parent1acac7a6b494db24f8f58e44dab7657b6de68742 (diff)
downloadapache2-9e615cb6aa4afcee97f8a1646e5a586261a7b81f.tar.gz
Upstream tarball 2.2.8upstream/2.2.8
-rw-r--r--Apache.dsw35
-rw-r--r--CHANGES242
-rw-r--r--Makefile.win156
-rw-r--r--build/apr_common.m416
-rw-r--r--build/find_apu.m412
-rw-r--r--build/installwinconf.awk236
-rw-r--r--build/mkconfNW.awk2
-rwxr-xr-xconfigure103
-rw-r--r--docs/conf/extra/httpd-mpm.conf.in9
-rw-r--r--docs/conf/extra/httpd-vhosts.conf.in14
-rw-r--r--docs/conf/httpd-win.conf484
-rw-r--r--docs/conf/httpd.conf.in15
-rw-r--r--docs/conf/mime.types31
-rw-r--r--docs/man/rotatelogs.857
-rw-r--r--docs/manual/bind.html.fr286
-rw-r--r--docs/manual/caching.html4
-rw-r--r--docs/manual/caching.html.en6
-rw-r--r--docs/manual/caching.html.fr741
-rw-r--r--docs/manual/configuring.html4
-rw-r--r--docs/manual/configuring.html.de2
-rw-r--r--docs/manual/configuring.html.en2
-rw-r--r--docs/manual/configuring.html.fr185
-rw-r--r--docs/manual/configuring.html.ja.euc-jp2
-rw-r--r--docs/manual/configuring.html.ko.euc-kr2
-rw-r--r--docs/manual/content-negotiation.html4
-rw-r--r--docs/manual/content-negotiation.html.en2
-rw-r--r--docs/manual/content-negotiation.html.fr705
-rw-r--r--docs/manual/content-negotiation.html.ja.euc-jp2
-rw-r--r--docs/manual/content-negotiation.html.ko.euc-kr2
-rw-r--r--docs/manual/convenience.map3
-rw-r--r--docs/manual/developer/API.html.en2
-rw-r--r--docs/manual/developer/documenting.html.en2
-rw-r--r--docs/manual/dso.html.en2
-rw-r--r--docs/manual/dso.html.ja.euc-jp4
-rw-r--r--docs/manual/dso.html.ko.euc-kr2
-rw-r--r--docs/manual/env.html.en2
-rw-r--r--docs/manual/glossary.html4
-rw-r--r--docs/manual/glossary.html.de2
-rw-r--r--docs/manual/glossary.html.en2
-rw-r--r--docs/manual/glossary.html.es2
-rw-r--r--docs/manual/glossary.html.fr551
-rw-r--r--docs/manual/glossary.html.ko.euc-kr2
-rw-r--r--docs/manual/howto/auth.html.en15
-rw-r--r--docs/manual/index.html.fr88
-rw-r--r--docs/manual/install.html.de3
-rw-r--r--docs/manual/install.html.en18
-rw-r--r--docs/manual/install.html.fr21
-rw-r--r--docs/manual/install.html.ja.euc-jp2
-rw-r--r--docs/manual/logs.html.en16
-rw-r--r--docs/manual/logs.html.ja.euc-jp2
-rw-r--r--docs/manual/misc/index.html.en7
-rw-r--r--docs/manual/misc/index.html.ko.euc-kr2
-rw-r--r--docs/manual/misc/password_encryptions.html3
-rw-r--r--docs/manual/misc/password_encryptions.html.en214
-rw-r--r--docs/manual/misc/perf-tuning.html.en22
-rw-r--r--docs/manual/misc/rewriteguide.html.en18
-rw-r--r--docs/manual/misc/security_tips.html.en8
-rw-r--r--docs/manual/mod/core.html.en34
-rw-r--r--docs/manual/mod/directives.html.de4
-rw-r--r--docs/manual/mod/directives.html.en4
-rw-r--r--docs/manual/mod/directives.html.es4
-rw-r--r--docs/manual/mod/directives.html.ja.euc-jp1
-rw-r--r--docs/manual/mod/directives.html.ko.euc-kr3
-rw-r--r--docs/manual/mod/directives.html.ru.koi8-r4
-rw-r--r--docs/manual/mod/index.html.de1
-rw-r--r--docs/manual/mod/index.html.en1
-rw-r--r--docs/manual/mod/index.html.es1
-rw-r--r--docs/manual/mod/index.html.ja.euc-jp1
-rw-r--r--docs/manual/mod/index.html.ko.euc-kr1
-rw-r--r--docs/manual/mod/mod_auth_digest.html.en11
-rw-r--r--docs/manual/mod/mod_authn_dbd.html.en26
-rw-r--r--docs/manual/mod/mod_authnz_ldap.html.en19
-rw-r--r--docs/manual/mod/mod_authz_dbm.html.en2
-rw-r--r--docs/manual/mod/mod_cache.html.en1
-rw-r--r--docs/manual/mod/mod_dbd.html.en3
-rw-r--r--docs/manual/mod/mod_include.html.en51
-rw-r--r--docs/manual/mod/mod_mime.html.en86
-rw-r--r--docs/manual/mod/mod_proxy.html.en60
-rw-r--r--docs/manual/mod/mod_proxy_ajp.html.en2
-rw-r--r--docs/manual/mod/mod_proxy_balancer.html.en2
-rw-r--r--docs/manual/mod/mod_proxy_http.html.en59
-rw-r--r--docs/manual/mod/mod_rewrite.html.en53
-rw-r--r--docs/manual/mod/mod_status.html.en30
-rw-r--r--docs/manual/mod/mod_status.html.ja.euc-jp2
-rw-r--r--docs/manual/mod/mod_status.html.ko.euc-kr2
-rw-r--r--docs/manual/mod/mod_substitute.html3
-rw-r--r--docs/manual/mod/mod_substitute.html.en99
-rw-r--r--docs/manual/mod/quickreference.html.de238
-rw-r--r--docs/manual/mod/quickreference.html.en240
-rw-r--r--docs/manual/mod/quickreference.html.es242
-rw-r--r--docs/manual/mod/quickreference.html.ja.euc-jp45
-rw-r--r--docs/manual/mod/quickreference.html.ko.euc-kr227
-rw-r--r--docs/manual/mod/quickreference.html.ru.koi8-r242
-rw-r--r--docs/manual/new_features_2_2.html.en3
-rw-r--r--docs/manual/new_features_2_2.html.fr11
-rw-r--r--docs/manual/platform/netware.html.en34
-rw-r--r--docs/manual/platform/windows.html.en4
-rw-r--r--docs/manual/programs/configure.html.en12
-rw-r--r--docs/manual/programs/rotatelogs.html.en103
-rw-r--r--docs/manual/programs/rotatelogs.html.ko.euc-kr2
-rw-r--r--docs/manual/rewrite/rewrite_intro.html.en2
-rw-r--r--docs/manual/sections.html4
-rw-r--r--docs/manual/sections.html.en2
-rw-r--r--docs/manual/sections.html.fr528
-rw-r--r--docs/manual/sections.html.ja.euc-jp2
-rw-r--r--docs/manual/sections.html.ko.euc-kr2
-rw-r--r--docs/manual/sitemap.html.de1
-rw-r--r--docs/manual/sitemap.html.en1
-rw-r--r--docs/manual/sitemap.html.es1
-rw-r--r--docs/manual/sitemap.html.ja.euc-jp1
-rw-r--r--docs/manual/sitemap.html.ko.euc-kr1
-rw-r--r--docs/manual/ssl/ssl_intro.html.en20
-rw-r--r--docs/manual/style/version.ent2
-rw-r--r--docs/manual/suexec.html.en4
-rw-r--r--docs/manual/suexec.html.ja.euc-jp2
-rw-r--r--docs/manual/upgrading.html4
-rw-r--r--docs/manual/upgrading.html.de2
-rw-r--r--docs/manual/upgrading.html.en4
-rw-r--r--docs/manual/upgrading.html.fr175
-rw-r--r--docs/manual/upgrading.html.ja.euc-jp2
-rw-r--r--docs/manual/upgrading.html.ko.euc-kr2
-rw-r--r--docs/manual/upgrading.html.pt-br2
-rw-r--r--docs/manual/upgrading.html.ru.koi8-r2
-rw-r--r--httpd.spec2
-rw-r--r--include/ap_mmn.h8
-rw-r--r--include/ap_release.h4
-rw-r--r--include/http_protocol.h7
-rw-r--r--include/httpd.h13
-rw-r--r--include/scoreboard.h1
-rw-r--r--include/util_ldap.h7
-rw-r--r--modules/NWGNUmakefile11
-rw-r--r--modules/aaa/mod_auth.h2
-rw-r--r--modules/aaa/mod_authn_dbd.c64
-rw-r--r--modules/aaa/mod_authnz_ldap.c11
-rw-r--r--modules/aaa/mod_authz_groupfile.c5
-rw-r--r--modules/cache/mod_disk_cache.c11
-rw-r--r--modules/dav/fs/lock.c9
-rw-r--r--modules/dav/fs/repos.c12
-rw-r--r--modules/dav/lock/locks.c9
-rw-r--r--modules/dav/main/mod_dav.c2
-rw-r--r--modules/dav/main/util.c59
-rw-r--r--modules/experimental/mod_case_filter.c11
-rw-r--r--modules/filters/NWGNUmakefile1
-rw-r--r--modules/filters/NWGNUsubstitute258
-rw-r--r--modules/filters/config.m41
-rw-r--r--modules/filters/mod_charset_lite.c151
-rw-r--r--modules/filters/mod_deflate.c26
-rw-r--r--modules/filters/mod_deflate.dsp4
-rw-r--r--modules/filters/mod_ext_filter.dsp4
-rw-r--r--modules/filters/mod_filter.c11
-rw-r--r--modules/filters/mod_filter.dsp4
-rw-r--r--modules/filters/mod_include.c68
-rw-r--r--modules/filters/mod_substitute.c584
-rw-r--r--modules/filters/mod_substitute.dsp111
-rw-r--r--modules/generators/mod_autoindex.c15
-rw-r--r--modules/generators/mod_info.c2
-rw-r--r--modules/generators/mod_status.c38
-rw-r--r--modules/http/byterange_filter.c21
-rw-r--r--modules/http/chunk_filter.c4
-rw-r--r--modules/http/http_core.c16
-rw-r--r--modules/http/http_etag.c27
-rw-r--r--modules/http/http_filters.c327
-rw-r--r--modules/http/http_protocol.c12
-rw-r--r--modules/http/mod_mime.c3
-rw-r--r--modules/ldap/util_ldap.c95
-rw-r--r--modules/mappers/mod_imagemap.c11
-rw-r--r--modules/mappers/mod_rewrite.c61
-rw-r--r--modules/proxy/ajp.h2
-rw-r--r--modules/proxy/ajp_header.c14
-rw-r--r--modules/proxy/mod_proxy.c106
-rw-r--r--modules/proxy/mod_proxy.h23
-rw-r--r--modules/proxy/mod_proxy_ajp.c18
-rw-r--r--modules/proxy/mod_proxy_balancer.c124
-rw-r--r--modules/proxy/mod_proxy_ftp.c16
-rw-r--r--modules/proxy/mod_proxy_http.c185
-rw-r--r--modules/proxy/proxy_util.c13
-rw-r--r--modules/ssl/mod_ssl.c2
-rw-r--r--modules/ssl/mod_ssl.dsp6
-rw-r--r--modules/ssl/ssl_engine_init.c2
-rw-r--r--modules/ssl/ssl_engine_io.c38
-rw-r--r--modules/ssl/ssl_engine_vars.c56
-rw-r--r--modules/ssl/ssl_expr_eval.c2
-rw-r--r--modules/ssl/ssl_private.h4
-rw-r--r--modules/ssl/ssl_scache_dbm.c3
-rw-r--r--modules/ssl/ssl_toolkit_compat.h6
-rw-r--r--os/netware/util_nw.c2
-rw-r--r--os/win32/BaseAddr.ref1
-rw-r--r--os/win32/os.h3
-rw-r--r--os/win32/util_win32.c39
-rw-r--r--server/core.c15
-rw-r--r--server/log.c38
-rw-r--r--server/mpm/experimental/event/event.c22
-rw-r--r--server/mpm/winnt/child.c93
-rw-r--r--server/mpm/winnt/mpm_winnt.c85
-rw-r--r--server/mpm/winnt/nt_eventlog.c30
-rw-r--r--server/mpm_common.c2
-rw-r--r--server/protocol.c45
-rw-r--r--server/scoreboard.c54
-rw-r--r--srclib/apr-util/CHANGES30
-rw-r--r--srclib/apr-util/INSTALL.MySQL14
-rw-r--r--srclib/apr-util/Makefile.win278
-rw-r--r--srclib/apr-util/README.MySQL3
-rw-r--r--srclib/apr-util/aprutil.dsp167
-rw-r--r--srclib/apr-util/aprutil.dsw45
-rw-r--r--srclib/apr-util/apu-config.in12
-rw-r--r--srclib/apr-util/buckets/apr_brigade.c36
-rw-r--r--srclib/apr-util/buckets/apr_buckets.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_alloc.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_eos.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_file.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_flush.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_heap.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_mmap.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_pipe.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_pool.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_refcount.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_simple.c12
-rw-r--r--srclib/apr-util/buckets/apr_buckets_socket.c12
-rw-r--r--srclib/apr-util/build-outputs.mk3
-rw-r--r--srclib/apr-util/build/apr_common.m416
-rw-r--r--srclib/apr-util/build/apu-conf.m433
-rw-r--r--srclib/apr-util/build/apu-hints.m412
-rw-r--r--srclib/apr-util/build/apu-iconv.m441
-rw-r--r--srclib/apr-util/build/dbd.m4138
-rw-r--r--srclib/apr-util/build/dbm.m412
-rw-r--r--srclib/apr-util/build/find_apu.m412
-rwxr-xr-xsrclib/apr-util/build/pkg/buildpkg.sh12
-rwxr-xr-xsrclib/apr-util/buildconf12
-rwxr-xr-xsrclib/apr-util/configure682
-rw-r--r--srclib/apr-util/configure.in10
-rw-r--r--srclib/apr-util/crypto/apr_md4.c12
-rw-r--r--srclib/apr-util/crypto/apr_md5.c14
-rw-r--r--srclib/apr-util/crypto/apr_sha1.c12
-rw-r--r--srclib/apr-util/crypto/getuuid.c12
-rw-r--r--srclib/apr-util/crypto/uuid.c12
-rw-r--r--srclib/apr-util/dbd/NWGNUdbdmysql8
-rw-r--r--srclib/apr-util/dbd/NWGNUdbdpgsql2
-rw-r--r--srclib/apr-util/dbd/NWGNUdbdsqli26
-rw-r--r--srclib/apr-util/dbd/NWGNUdbdsqli32
-rw-r--r--srclib/apr-util/dbd/apr_dbd.c12
-rw-r--r--srclib/apr-util/dbd/apr_dbd_mysql.c771
-rw-r--r--srclib/apr-util/dbd/apr_dbd_pgsql.c12
-rw-r--r--srclib/apr-util/dbd/apr_dbd_sqlite2.c12
-rw-r--r--srclib/apr-util/dbd/apr_dbd_sqlite3.c12
-rw-r--r--srclib/apr-util/dbm/apr_dbm.c12
-rw-r--r--srclib/apr-util/dbm/apr_dbm_berkeleydb.c12
-rw-r--r--srclib/apr-util/dbm/apr_dbm_gdbm.c14
-rw-r--r--srclib/apr-util/dbm/apr_dbm_ndbm.c12
-rw-r--r--srclib/apr-util/dbm/apr_dbm_sdbm.c18
-rw-r--r--srclib/apr-util/dbm/sdbm/sdbm.c12
-rw-r--r--srclib/apr-util/dbm/sdbm/sdbm_hash.c12
-rw-r--r--srclib/apr-util/dbm/sdbm/sdbm_lock.c12
-rw-r--r--srclib/apr-util/dbm/sdbm/sdbm_pair.c14
-rw-r--r--srclib/apr-util/dbm/sdbm/sdbm_pair.h12
-rw-r--r--srclib/apr-util/dbm/sdbm/sdbm_private.h12
-rw-r--r--srclib/apr-util/dbm/sdbm/sdbm_tune.h12
-rw-r--r--srclib/apr-util/encoding/apr_base64.c24
-rw-r--r--srclib/apr-util/hooks/apr_hooks.c12
-rw-r--r--srclib/apr-util/include/apr_anylock.h12
-rw-r--r--srclib/apr-util/include/apr_base64.h17
-rw-r--r--srclib/apr-util/include/apr_buckets.h12
-rw-r--r--srclib/apr-util/include/apr_date.h12
-rw-r--r--srclib/apr-util/include/apr_dbd.h28
-rw-r--r--srclib/apr-util/include/apr_dbm.h12
-rw-r--r--srclib/apr-util/include/apr_hooks.h12
-rw-r--r--srclib/apr-util/include/apr_ldap.h.in36
-rw-r--r--srclib/apr-util/include/apr_ldap.hnw12
-rw-r--r--srclib/apr-util/include/apr_ldap.hw19
-rw-r--r--srclib/apr-util/include/apr_ldap_init.h12
-rw-r--r--srclib/apr-util/include/apr_ldap_option.h12
-rw-r--r--srclib/apr-util/include/apr_ldap_url.h12
-rw-r--r--srclib/apr-util/include/apr_md4.h12
-rw-r--r--srclib/apr-util/include/apr_md5.h12
-rw-r--r--srclib/apr-util/include/apr_optional.h12
-rw-r--r--srclib/apr-util/include/apr_optional_hooks.h12
-rw-r--r--srclib/apr-util/include/apr_queue.h12
-rw-r--r--srclib/apr-util/include/apr_reslist.h12
-rw-r--r--srclib/apr-util/include/apr_rmm.h12
-rw-r--r--srclib/apr-util/include/apr_sdbm.h12
-rw-r--r--srclib/apr-util/include/apr_sha1.h12
-rw-r--r--srclib/apr-util/include/apr_strmatch.h12
-rw-r--r--srclib/apr-util/include/apr_uri.h12
-rw-r--r--srclib/apr-util/include/apr_uuid.h12
-rw-r--r--srclib/apr-util/include/apr_xlate.h12
-rw-r--r--srclib/apr-util/include/apr_xml.h12
-rw-r--r--srclib/apr-util/include/apu.h.in12
-rw-r--r--srclib/apr-util/include/apu.hnw33
-rw-r--r--srclib/apr-util/include/apu.hw34
-rw-r--r--srclib/apr-util/include/apu_version.h14
-rw-r--r--srclib/apr-util/include/apu_want.h.in12
-rw-r--r--srclib/apr-util/include/apu_want.hnw12
-rw-r--r--srclib/apr-util/include/apu_want.hw14
-rw-r--r--srclib/apr-util/include/private/apr_dbd_internal.h12
-rw-r--r--srclib/apr-util/include/private/apr_dbm_private.h12
-rw-r--r--srclib/apr-util/include/private/apu_config.h.in3
-rw-r--r--srclib/apr-util/include/private/apu_config.hnw50
-rw-r--r--srclib/apr-util/include/private/apu_config.hw12
-rw-r--r--srclib/apr-util/include/private/apu_select_dbm.h.in12
-rw-r--r--srclib/apr-util/include/private/apu_select_dbm.hnw28
-rw-r--r--srclib/apr-util/include/private/apu_select_dbm.hw24
-rw-r--r--srclib/apr-util/ldap/apr_ldap_init.c12
-rw-r--r--srclib/apr-util/ldap/apr_ldap_option.c12
-rw-r--r--srclib/apr-util/ldap/apr_ldap_url.c12
-rw-r--r--srclib/apr-util/libaprutil.dsp191
-rw-r--r--srclib/apr-util/misc/apr_date.c75
-rw-r--r--srclib/apr-util/misc/apr_queue.c12
-rw-r--r--srclib/apr-util/misc/apr_reslist.c13
-rw-r--r--srclib/apr-util/misc/apr_rmm.c12
-rw-r--r--srclib/apr-util/misc/apu_version.c12
-rw-r--r--srclib/apr-util/strmatch/apr_strmatch.c20
-rw-r--r--srclib/apr-util/test/Makefile.in110
-rw-r--r--srclib/apr-util/test/Makefile.win255
-rw-r--r--srclib/apr-util/test/abts.c3
-rw-r--r--srclib/apr-util/test/abts.h6
-rw-r--r--srclib/apr-util/test/abts_tests.h21
-rw-r--r--srclib/apr-util/test/dbd.c12
-rw-r--r--srclib/apr-util/test/test_apu.h12
-rw-r--r--srclib/apr-util/test/testall.dsw278
-rw-r--r--srclib/apr-util/test/testbuckets.c12
-rw-r--r--srclib/apr-util/test/testdate.c162
-rw-r--r--srclib/apr-util/test/testdbd.c12
-rw-r--r--srclib/apr-util/test/testdbm.c512
-rw-r--r--srclib/apr-util/test/testldap.c12
-rw-r--r--srclib/apr-util/test/testmd4.c14
-rw-r--r--srclib/apr-util/test/testmd5.c14
-rw-r--r--srclib/apr-util/test/testpass.c14
-rw-r--r--srclib/apr-util/test/testqueue.c307
-rw-r--r--srclib/apr-util/test/testreslist.c254
-rw-r--r--srclib/apr-util/test/testrmm.c224
-rw-r--r--srclib/apr-util/test/teststrmatch.c12
-rw-r--r--srclib/apr-util/test/testuri.c12
-rw-r--r--srclib/apr-util/test/testutil.c12
-rw-r--r--srclib/apr-util/test/testutil.h20
-rw-r--r--srclib/apr-util/test/testutildll.dsp266
-rw-r--r--srclib/apr-util/test/testutillib.dsp266
-rw-r--r--srclib/apr-util/test/testuuid.c12
-rw-r--r--srclib/apr-util/test/testxlate.c135
-rw-r--r--srclib/apr-util/test/testxml.c234
-rw-r--r--srclib/apr-util/uri/apr_uri.c12
-rw-r--r--srclib/apr-util/xlate/xlate.c24
-rw-r--r--srclib/apr-util/xml/apr_xml.c14
-rw-r--r--srclib/apr-util/xml/expat/lib/osd_ebcdic_df04_1.h12
-rw-r--r--srclib/apr-util/xml/expat/lib/xml.dsp105
-rw-r--r--srclib/apr/CHANGES65
-rw-r--r--srclib/apr/Makefile.win176
-rw-r--r--srclib/apr/apr.dsp168
-rw-r--r--srclib/apr/apr.dsw36
-rw-r--r--srclib/apr/atomic/os390/atomic.c24
-rw-r--r--srclib/apr/atomic/win32/apr_atomic.c2
-rw-r--r--srclib/apr/build/NWGNUmakefile8
-rw-r--r--srclib/apr/build/apr_app.dsp110
-rw-r--r--srclib/apr/build/apr_common.m416
-rw-r--r--srclib/apr/build/libapr_app.dsp110
-rwxr-xr-xsrclib/apr/configure2248
-rw-r--r--srclib/apr/configure.in82
-rw-r--r--srclib/apr/dso/os390/dso.c2
-rw-r--r--srclib/apr/file_io/netware/filestat.c17
-rw-r--r--srclib/apr/file_io/unix/filestat.c38
-rw-r--r--srclib/apr/file_io/win32/filedup.c116
-rw-r--r--srclib/apr/file_io/win32/open.c72
-rw-r--r--srclib/apr/file_io/win32/readwrite.c2
-rw-r--r--srclib/apr/file_io/win32/seek.c7
-rwxr-xr-xsrclib/apr/helpers/apr_rename.pl106
-rw-r--r--srclib/apr/include/apr.h.in8
-rw-r--r--srclib/apr/include/apr.hnw8
-rw-r--r--srclib/apr/include/apr.hw8
-rw-r--r--srclib/apr/include/apr_file_info.h14
-rw-r--r--srclib/apr/include/apr_file_io.h2
-rw-r--r--srclib/apr/include/apr_network_io.h6
-rw-r--r--srclib/apr/include/apr_shm.h10
-rw-r--r--srclib/apr/include/apr_version.h2
-rw-r--r--srclib/apr/include/arch/unix/apr_arch_file_io.h4
-rw-r--r--srclib/apr/include/arch/unix/apr_private.h.in33
-rw-r--r--srclib/apr/include/arch/win32/apr_arch_file_io.h9
-rw-r--r--srclib/apr/include/arch/win32/apr_arch_misc.h15
-rw-r--r--srclib/apr/libapr.dsp214
-rw-r--r--srclib/apr/memory/unix/apr_pools.c33
-rw-r--r--srclib/apr/misc/unix/rand.c5
-rw-r--r--srclib/apr/misc/win32/env.c5
-rw-r--r--srclib/apr/mmap/unix/common.c4
-rw-r--r--srclib/apr/network_io/unix/inet_pton.c4
-rw-r--r--srclib/apr/network_io/unix/multicast.c13
-rw-r--r--srclib/apr/network_io/unix/sendrecv.c5
-rw-r--r--srclib/apr/network_io/win32/sendrecv.c6
-rw-r--r--srclib/apr/random/unix/apr_random.c4
-rw-r--r--srclib/apr/renames_pending39
-rw-r--r--srclib/apr/shmem/win32/shm.c4
-rw-r--r--srclib/apr/strings/apr_snprintf.c142
-rw-r--r--srclib/apr/test/Makefile.in163
-rw-r--r--srclib/apr/test/Makefile.win284
-rw-r--r--srclib/apr/test/abts.c19
-rw-r--r--srclib/apr/test/abts.h9
-rw-r--r--srclib/apr/test/aprtest.def3
-rw-r--r--srclib/apr/test/aprtest.dsp195
-rw-r--r--srclib/apr/test/aprtest.win18
-rw-r--r--srclib/apr/test/internal/Makefile.win109
-rw-r--r--srclib/apr/test/internal/testucs.c133
-rw-r--r--srclib/apr/test/proc_child.c6
-rw-r--r--srclib/apr/test/sockchild.c4
-rw-r--r--srclib/apr/test/testall.dsw23
-rw-r--r--srclib/apr/test/testapp.dsp102
-rw-r--r--srclib/apr/test/testappnt.dsp113
-rw-r--r--srclib/apr/test/testatomic.c38
-rw-r--r--srclib/apr/test/testdll.dsp442
-rw-r--r--srclib/apr/test/testdso.c6
-rw-r--r--srclib/apr/test/testdup.c8
-rw-r--r--srclib/apr/test/testfile.c30
-rw-r--r--srclib/apr/test/testflock.c2
-rw-r--r--srclib/apr/test/testglobalmutex.c2
-rw-r--r--srclib/apr/test/testhash.c118
-rw-r--r--srclib/apr/test/testipsub.c6
-rw-r--r--srclib/apr/test/testlib.dsp (renamed from srclib/apr/test/testall.dsp)255
-rw-r--r--srclib/apr/test/testlockperf.c6
-rw-r--r--srclib/apr/test/testmmap.c18
-rw-r--r--srclib/apr/test/testmutexscope.c1
-rw-r--r--srclib/apr/test/testnames.c16
-rw-r--r--srclib/apr/test/testoc.c2
-rw-r--r--srclib/apr/test/testpipe.c8
-rw-r--r--srclib/apr/test/testpoll.c4
-rw-r--r--srclib/apr/test/testproc.c6
-rw-r--r--srclib/apr/test/testshm.c37
-rw-r--r--srclib/apr/test/testsock.c6
-rw-r--r--srclib/apr/test/testsockets.c65
-rw-r--r--srclib/apr/test/testutil.h12
-rw-r--r--srclib/apr/threadproc/win32/proc.c103
-rw-r--r--srclib/apr/threadproc/win32/thread.c2
-rw-r--r--support/ab.c2
-rw-r--r--support/ab.dsp8
-rw-r--r--support/abs.dsp8
-rw-r--r--support/htcacheclean.dsp8
-rw-r--r--support/htdbm.dsp8
-rw-r--r--support/htdigest.dsp8
-rw-r--r--support/htpasswd.dsp8
-rw-r--r--support/httxt2dbm.c2
-rw-r--r--support/httxt2dbm.dsp8
-rw-r--r--support/logresolve.dsp8
-rw-r--r--support/rotatelogs.c124
-rw-r--r--support/rotatelogs.dsp8
-rw-r--r--support/win32/ApacheMonitor.c13
-rw-r--r--support/win32/wintty.dsp8
440 files changed, 17385 insertions, 6685 deletions
diff --git a/Apache.dsw b/Apache.dsw
index c20902ae..988a9d87 100644
--- a/Apache.dsw
+++ b/Apache.dsw
@@ -87,10 +87,10 @@ Package=<4>
Project_Dep_Name ApacheMonitor
End Project Dependency
Begin Project Dependency
- Project_Dep_Name libapriconv_ccs_modules
+ Project_Dep_Name libapriconv_ces_modules
End Project Dependency
Begin Project Dependency
- Project_Dep_Name libapriconv_ces_modules
+ Project_Dep_Name libapriconv_ccs_modules
End Project Dependency
Begin Project Dependency
Project_Dep_Name mod_actions
@@ -255,6 +255,9 @@ Package=<4>
Project_Dep_Name mod_status
End Project Dependency
Begin Project Dependency
+ Project_Dep_Name mod_substitute
+ End Project Dependency
+ Begin Project Dependency
Project_Dep_Name mod_unique_id
End Project Dependency
Begin Project Dependency
@@ -551,6 +554,9 @@ Package=<4>
Begin Project Dependency
Project_Dep_Name libapriconv
End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv_ces_modules
+ End Project Dependency
}}}
###############################################################################
@@ -744,7 +750,7 @@ Package=<4>
###############################################################################
-Project: "mod_authn_anon"=.\modules\aaa\mod_authn_anon.dsp - Package Owner=<4>
+Project: "mod_authn_alias"=.\modules\aaa\mod_authn_alias.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -768,7 +774,7 @@ Package=<4>
###############################################################################
-Project: "mod_authn_alias"=.\modules\aaa\mod_authn_alias.dsp - Package Owner=<4>
+Project: "mod_authn_anon"=.\modules\aaa\mod_authn_anon.dsp - Package Owner=<4>
Package=<5>
{{{
@@ -2094,6 +2100,27 @@ Package=<4>
###############################################################################
+Project: "mod_substitute"=.\modules\filters\mod_substitute.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libaprutil
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libhttpd
+ End Project Dependency
+}}}
+
+###############################################################################
+
Project: "mod_unique_id"=.\modules\metadata\mod_unique_id.dsp - Package Owner=<4>
Package=<5>
diff --git a/CHANGES b/CHANGES
index bf04c9f8..80367cf7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,241 @@
- -*- coding: utf-8 -*-
+ -*- coding: utf-8 -*-
+Changes with Apache 2.2.8
+
+ *) core: Fix regression in 2.2.7 in chunk filtering with massively
+ chunked requests. [Ruediger Pluem, Nick Kew]
+
+ *) winnt_mpm: Resolve modperl issues by redirecting console mode stdout
+ to /Device/Nul as the server is starting up, mirroring unix MPM's.
+ PR: 43534 [Tom Donovan <Tom.Donovan acm.org>, William Rowe]
+
+ *) winnt_mpm: Restore Win32DisableAcceptEx On directive and Win9x platform
+ by recreating the bucket allocator each time the trans pool is cleared.
+ PR: 11427 #16 (follow-on) [Tom Donovan <Tom.Donovan acm.org>]
+
+ *) mod_dav: Fix evaluation of If-Match * and If-None-Match * conditionals.
+ PR 38034 [Paritosh Shah <shah.paritosh gmail.com>]
+
+Changes with Apache 2.2.7 (not released)
+
+ *) SECURITY: CVE-2007-6421 (cve.mitre.org)
+ mod_proxy_balancer: Correctly escape the worker route and the worker
+ redirect string in the HTML output of the balancer manager.
+ Reported by SecurityReason. [Ruediger Pluem]
+
+ *) SECURITY: CVE-2007-6422 (cve.mitre.org)
+ Prevent crash in balancer manager if invalid balancer name is passed
+ as parameter. Reported by SecurityReason. [Ruediger Pluem]
+
+ *) SECURITY: CVE-2007-6388 (cve.mitre.org)
+ mod_status: Ensure refresh parameter is numeric to prevent
+ a possible XSS attack caused by redirecting to other URLs.
+ Reported by SecurityReason. [Mark Cox, Joe Orton]
+
+ *) SECURITY: CVE-2007-5000 (cve.mitre.org)
+ mod_imagemap: Fix a cross-site scripting issue. Reported by JPCERT.
+ [Joe Orton]
+
+ *) SECURITY: CVE-2008-0005 (cve.mitre.org)
+ Introduce the ProxyFtpDirCharset directive, allowing the administrator
+ to identify a default, or specific servers or paths which list their
+ contents in other-than ISO-8859-1 charset (e.g. utf-8). [Ruediger Pluem]
+
+ *) mod_dav: Adjust etag generation to produce identical results on 32-bit
+ and 64-bit platforms and avoid a regression with conditional PUT's on lock
+ and etag. PR 44152.
+ [Michael Clark <michael metaparadigm.com>, Ruediger Pluem]
+
+ *) mod_ssl: Fix handling of the buffered request body during a per-location
+ renegotiation, when an internal redirect occurs. PR 43738.
+ [Joe Orton]
+
+ *) mod_ldap: Try to establish a new backend LDAP connection when the
+ Microsoft LDAP client library returns LDAP_UNAVAILABLE, e.g. after the
+ LDAP server has closed the connection due to a timeout.
+ PR 39095 [Eric Covener]
+
+ *) log.c: Ensure Win32 resurrects its lost robust logger processes.
+ [William Rowe]
+
+ *) mod_disk_cache: Delete temporary files if they cannot be renamed to their
+ final name. [Davi Arnaut <davi haxent.com.br>]
+
+ *) Add explicit charset to the output of various modules to work around
+ possible cross-site scripting flaws affecting web browsers that do not
+ derive the response character set as required by RFC2616. One of these
+ reported by SecurityReason [Joe Orton]
+
+ *) http_protocol: Escape request method in 405 error reporting.
+ This has no security impact since the browser cannot be tricked
+ into sending arbitrary method strings. [Jeff Trawick]
+
+ *) mod_ssl: Fix SSL client certificate extensions parsing bug. PR 44073.
+ [yl <yl bee-ware.net>]
+
+ *) mod_proxy_ajp: Use 64K as maximum AJP packet size. This is the maximum
+ length we can squeeze inside the AJP message packet.
+ [Mladen Turk]
+
+ *) core: Lower memory consumption of ap_r* functions by reusing the brigade
+ instead of recreating it during each filter pass.
+ [Stefan Fritsch <sf sfritsch.de>]
+
+ *) core: Lower memory consumption in case that flush buckets are passed thru
+ the chunk filter as last bucket of a brigade. PR 23567.
+ [Stefan Fritsch <sf sfritsch.de>]
+
+ *) core: Fix broken chunk filtering that causes all non blocking reads to be
+ converted into blocking reads. PR 19954, 41056.
+ [Jean-Frederic Clere, Jim Jagielski]
+
+ *) mod_rewrite: Add the novary flag to RewriteCond.
+ [Ruediger Pluem]
+
+ *) core: Change etag generation to produce identical results on
+ 32-bit and 64-bit platforms. PR 40064. [Joe Orton]
+
+ *) http_protocol: Escape request method in 413 error reporting.
+ Determined to be not generally exploitable, but a flaw in any case.
+ PR 44014 [Victor Stinner <victor.stinner inl.fr>]
+
+ *) mod_filter: Don't segfault on (unsupported) chained FilterProvider usage.
+ PR 43956 [Nick Kew, Ruediger Pluem]
+
+ *) core: Handle unrecognised transfer-encodings.
+ PR 43882 [Nick Kew, Jeff Trawick]
+
+ *) mod_include: Add an "if" directive syntax to test whether an URL
+ is accessible, and if so, conditionally display content. This
+ allows a webmaster to hide a link to a private page when the user
+ has no access to that page. [Graham Leggett]
+
+ *) Various code cleanups. PR 38699, 39518, 42005, 42006, 42007, 42008, 42009
+ [Christophe Jaillet <christophe.jaillet wanadoo.fr>]
+
+ *) mod_proxy_http: Correctly forward unexpected interim (HTTP 1xx)
+ responses from the backend according to RFC2616. But make it
+ configurable in case something breaks on it.
+ PR 16518 [Nick Kew]
+
+ *) mod_substitute: Added a new output filter, which performs
+ inline response content pattern matching (including regex)
+ and substitution. [Jim Jagielski, Ruediger Pluem]
+
+ *) rotatelogs: Change command-line parsing to report more types
+ of errors. Allow local timestamps to be used when rotating based
+ on file size. [Jeff Trawick]
+
+ *) mod_proxy: Canonicalisation improvements. Add "nocanon" keyword to
+ ProxyPass, to suppress URI-canonicalisation in a reverse proxy. Also,
+ don't escape/unescape forward-proxied URLs.
+ PR 41798, 42592 [Nick Kew, Ruediger Pluem, Roy Fielding, Jim Jagielski]
+
+ *) mod_status: Add SeeRequestTail directive, which determines if
+ ExtendedStatus displays the 1st 63 characters of the request
+ or the last 63. Useful for those requests with large string
+ lengths and which only vary with the last several characters.
+ [Jim Jagielski]
+
+ *) mod_ssl: Prevent memory corruption of version string.
+ PR 43865, 43334 [William Rowe, Joe Orton]
+
+ *) core: Avoid some unexpected connection closes by telling the client
+ that the connection is not persistent if the MPM process handling
+ the request is already exiting when the response header is built.
+ [Jeff Trawick]
+
+ *) mod_autoindex: Generate valid XHTML output by adding the xhtml
+ namespace. PR 43649 [Jose Kahan <jose w3.org>]
+
+ *) mod_ldap: Give callers a reference to data copied into the request
+ pool instead of references directly into the cache
+ PR 43786 [Eric Covener]
+
+ *) mod_ldap: Stop passing a reference to pconf around for
+ (limited) use during request processing, avoiding possible
+ memory corruption and crashes. [Eric Covener]
+
+ *) Event MPM: Add support for running under mod_ssl, by reverting to the
+ Worker MPM behaviors, when run under an input filter that buffers
+ its own data. [Paul Querna]
+
+ *) mod_charset_lite: Don't crash when the request has no associated
+ filename. [Jeff Trawick]
+
+ *) Core: fix possible crash at startup in case of nonexistent DocumentRoot.
+ PR 39722 [Adrian Buckley <adrian.buckley ntlworld.com>]
+
+ *) HTTP protocol: Add "DefaultType none" option.
+ PR 13986 and PR 16139 [Nick Kew]
+
+ *) mod_rewrite: Add option to suppress URL unescaping
+ PR 34602 [Guenther Gsenger <guenther.gsenger gmail.com>]
+
+ *) mpm_winnt: Eliminate wait_for_many_objects. Allows the clean
+ shutdown of the server when the MaxClients is higher then 257,
+ in a more responsive manner [Mladen Turk, William Rowe]
+
+ *) mod_proxy_http: Remove Warning headers with wrong date
+ PR 16138 [Nick Kew]
+
+ *) mod_proxy_http: Correctly parse all Connection headers in proxy.
+ PR 43509 [Nick Kew]
+
+ *) mod_proxy_http: add Via header correctly (if enabled) to
+ response, even where other Via headers exist.
+ PR 19439 [Nick Kew]
+
+ *) http_core: OPTIONS * no longer maps to local storage or URI
+ space. Note that unlike previous versions, OPTIONS * no
+ longer returns an Allow: header. PR 43519 [Jim Jagielski]
+
+ *) mod_proxy_http: strip hop-by-hop response headers
+ PR 43455 [Nick Kew]
+
+ *) mod_proxy: Don't by default violate RFC2616 by setting
+ Max-Forwards when the client didn't send it to us.
+ Leave that as a configuration option.
+ PR 16137 [Nick Kew]
+
+ *) scoreboard: improve error message on apr_shm_create failure
+ PR 40037 [Nick Kew]
+
+ *) proxy: Fix persistent backend connections.
+ PR 43472 [Ruediger Pluem]
+
+ *) mod_deflate: initialise inflate-out filter correctly when the
+ first brigade contains no data buckets.
+ PR 43512 [Nick Kew]
+
+ *) mod_proxy_ajp: Ignore any ajp13 flush packets received before
+ we send the response headers. See Tomcat PR 43478.
+ [Jim Jagielski]
+
+ *) mod_proxy_balancer: Do not reset lbstatus, lbfactor and lbset when
+ starting a new child.
+ PR 39907 [Vinicius Petrucci <vpetrucci gmail.com>, Ruediger Pluem]
+
+ *) mod_proxy_http: Propagate Proxy-Authorization header correctly.
+ PR 25947 [Nick Kew]
+
+ *) mod_proxy_ajp: Differentiate within AJP between GET and HEAD
+ requests. PR 43060 [Jim Jagielski]
+
+ *) Don't send spurious "100 Continue" response lines.
+ PR 38014 [Basant Kumar Kukreja <basant.kukreja sun.com>]
+
+ *) mod_proxy_ftp: Don't segfault on bad line in FTP listing
+ PR 40733 [Ulf Harnhammar <metaur telia.com>]
+
+ *) mod_proxy: escape error-notes correctly
+ PR 40952 [Thijs Kinkhorst <thijs debian.org>]
+
+ *) mod_proxy: check ProxyBlock for all blocked addresses
+ PR 36987 [Timo Viipuri <timo.viipuri f-secure.com>]
+
+ *) mod_proxy: Don't lose bytes when a response line arrives in small chunks.
+ PR 40894 [Andrew Rucker Jones <arjones simultan.dyndns.org>]
+
Changes with Apache 2.2.6
*) SECURITY: CVE-2007-3847 (cve.mitre.org)
@@ -323,7 +560,7 @@ Changes with Apache 2.2.4
*) mod_cgi and mod_cgid: Don't use apr_status_t error return
from input filters as HTTP return value from the handler.
- PR 31579. [Nick Kew]
+ PR 31759. [Nick Kew]
*) mod_cache: Eliminate a bogus error in the log when a filter returns
AP_FILTER_ERROR. [Niklas Edmundsson <nikke acc.umu.se>]
@@ -1579,7 +1816,6 @@ Changes with Apache 2.1.1
*) Rewrite of aaa modules to an authn/authz model.
[Dirk-Willem van Gulik, Justin Erenkrantz]
-
[Apache 2.1.0-dev includes those bug fixes and changes with the
Apache 2.0.xx tree as documented, and except as noted, below.]
diff --git a/Makefile.win b/Makefile.win
index 06fd6b60..986433d5 100644
--- a/Makefile.win
+++ b/Makefile.win
@@ -16,7 +16,9 @@
# INSTDIR \Apache22
# PORT 80
# SSLPORT 443
-# SERVERNAME localhost
+# DOMAINNAME example.com
+# SERVERNAME www.example.com
+# SERVERNAME admin@example.com
#
# ALL (unset) Includes additional modules for build testing
#
@@ -124,8 +126,14 @@ _tryzlib:
!IF "$(INSTDIR)" == ""
INSTDIR=\Apache22
!ENDIF
+!IF "$(DOMAINNAME)" == ""
+DOMAINNAME=example.com
+!ENDIF
!IF "$(SERVERNAME)" == ""
-SERVERNAME=localhost
+SERVERNAME=www.$(DOMAINNAME)
+!ENDIF
+!IF "$(SERVERADMIN)" == ""
+SERVERADMIN=admin@$(DOMAINNAME)
!ENDIF
!IF "$(PORT)" == ""
PORT=80
@@ -136,11 +144,13 @@ SSLPORT=443
!IF "$(LONG)" == ""
!MESSAGE
-!MESSAGE INSTDIR = $(INSTDIR)
-!MESSAGE SERVERNAME = $(SERVERNAME)
-!MESSAGE PORT = $(PORT)
+!MESSAGE INSTDIR = $(INSTDIR)
+!MESSAGE DOMAINNAME = $(DOMAINNAME)
+!MESSAGE SERVERNAME = $(SERVERNAME)
+!MESSAGE SERVERADMIN = $(SERVERADMIN)
+!MESSAGE PORT = $(PORT)
!IF EXIST("srclib\openssl")
-!MESSAGE SSLPORT = $(SSLPORT)
+!MESSAGE SSLPORT = $(SSLPORT)
!ENDIF
!MESSAGE
!MESSAGE To change these options use 'nmake -f Makefile.win [option=value]'
@@ -297,6 +307,7 @@ _build:
$(MAKE) $(MAKEOPT) -f mod_ext_filter.mak CFG="mod_ext_filter - Win32 $(LONG)" RECURSE=0 $(CTARGET)
$(MAKE) $(MAKEOPT) -f mod_filter.mak CFG="mod_filter - Win32 $(LONG)" RECURSE=0 $(CTARGET)
$(MAKE) $(MAKEOPT) -f mod_include.mak CFG="mod_include - Win32 $(LONG)" RECURSE=0 $(CTARGET)
+ $(MAKE) $(MAKEOPT) -f mod_substitute.mak CFG="mod_substitute - Win32 $(LONG)" RECURSE=0 $(CTARGET)
cd ..\..
cd modules\generators
$(MAKE) $(MAKEOPT) -f mod_asis.mak CFG="mod_asis - Win32 $(LONG)" RECURSE=0 $(CTARGET)
@@ -432,6 +443,9 @@ _copybin:
copy srclib\apr\$(LONG)\libapr-1.$(src_dll) "$(inst_dll)" <.y
copy srclib\apr-iconv\$(LONG)\libapriconv-1.$(src_dll) "$(inst_dll)" <.y
copy srclib\apr-util\$(LONG)\libaprutil-1.$(src_dll) "$(inst_dll)" <.y
+!IF EXIST("srclib\zlib\zlib1.$(src_dll)")
+ copy srclib\zlib\zlib1.$(src_dll) "$(inst_dll)" <.y
+!ENDIF
copy modules\aaa\$(LONG)\mod_auth_basic.$(src_so) "$(inst_so)" <.y
copy modules\aaa\$(LONG)\mod_auth_digest.$(src_so) "$(inst_so)" <.y
copy modules\aaa\$(LONG)\mod_authn_alias.$(src_so) "$(inst_so)" <.y
@@ -469,13 +483,11 @@ _copybin:
copy modules\filters\$(LONG)\mod_charset_lite.$(src_so) "$(inst_so)" <.y
!IF EXIST("srclib\zlib")
copy modules\filters\$(LONG)\mod_deflate.$(src_so) "$(inst_so)" <.y
-!IF EXIST("srclib\zlib\zlib1.$(src_dll)")
- copy srclib\zlib\zlib1.$(src_dll) "$(inst_dll)" <.y
-!ENDIF
!ENDIF
copy modules\filters\$(LONG)\mod_ext_filter.$(src_so) "$(inst_so)" <.y
copy modules\filters\$(LONG)\mod_filter.$(src_so) "$(inst_so)" <.y
copy modules\filters\$(LONG)\mod_include.$(src_so) "$(inst_so)" <.y
+ copy modules\filters\$(LONG)\mod_substitute.$(src_so) "$(inst_so)" <.y
copy modules\generators\$(LONG)\mod_asis.$(src_so) "$(inst_so)" <.y
copy modules\generators\$(LONG)\mod_autoindex.$(src_so) "$(inst_so)" <.y
copy modules\generators\$(LONG)\mod_cgi.$(src_so) "$(inst_so)" <.y
@@ -512,14 +524,13 @@ _copybin:
copy modules\proxy\$(LONG)\mod_proxy_ftp.$(src_so) "$(inst_so)" <.y
copy modules\proxy\$(LONG)\mod_proxy_http.$(src_so) "$(inst_so)" <.y
!IF EXIST("srclib\openssl")
- copy modules\ssl\$(LONG)\mod_ssl.$(src_so) "$(inst_so)" <.y
- $(quiet)copy srclib\openssl\$(SSLBIN)\openssl.$(src_exe) "$(inst_exe)" <.y
- $(quiet)copy srclib\openssl\$(SSLBIN)\libeay32.$(src_dll) "$(inst_dll)" <.y
- $(quiet)copy srclib\openssl\$(SSLBIN)\ssleay32.$(src_dll) "$(inst_dll)" <.y
- copy support\$(LONG)\abs.$(src_exe) "$(inst_exe)\ab.$(src_exe)" <.y
-!ELSE
- copy support\$(LONG)\ab.$(src_exe) "$(inst_exe)" <.y
+ copy modules\ssl\$(LONG)\mod_ssl.$(src_so) "$(inst_so)" <.y
+ -copy srclib\openssl\$(SSLBIN)\libeay32.$(src_dll) "$(inst_dll)" <.y
+ -copy srclib\openssl\$(SSLBIN)\ssleay32.$(src_dll) "$(inst_dll)" <.y
+ -copy srclib\openssl\$(SSLBIN)\openssl.$(src_exe) "$(inst_exe)" <.y
+ copy support\$(LONG)\abs.$(src_exe) "$(inst_exe)" <.y
!ENDIF
+ copy support\$(LONG)\ab.$(src_exe) "$(inst_exe)" <.y
copy support\$(LONG)\htcacheclean.$(src_exe) "$(inst_exe)" <.y
copy support\$(LONG)\htdbm.$(src_exe) "$(inst_exe)" <.y
copy support\$(LONG)\htdigest.$(src_exe) "$(inst_exe)" <.y
@@ -546,6 +557,8 @@ _install:
-mkdir "$(INSTDIR)\cgi-bin"
-mkdir "$(INSTDIR)\conf"
-mkdir "$(INSTDIR)\conf\extra"
+ -mkdir "$(INSTDIR)\conf\original"
+ -mkdir "$(INSTDIR)\conf\original\extra"
-mkdir "$(INSTDIR)\error"
-mkdir "$(INSTDIR)\htdocs"
-mkdir "$(INSTDIR)\manual"
@@ -554,7 +567,6 @@ _install:
-mkdir "$(INSTDIR)\lib"
-mkdir "$(INSTDIR)\logs"
-mkdir "$(INSTDIR)\modules"
- -mkdir "$(INSTDIR)\proxy"
-mkdir "$(INSTDIR)\symbols"
-mkdir "$(INSTDIR)\symbols\exe"
-mkdir "$(INSTDIR)\symbols\dll"
@@ -566,7 +578,7 @@ _install:
copy NOTICE "$(INSTDIR)\NOTICE.txt" <.y
copy README "$(INSTDIR)\README.txt" <.y
!IF EXIST("srclib\openssl")
- copy srclib\openssl\apps\openssl.cnf "$(INSTDIR)\conf\openssl.cnf" <.y
+ -copy srclib\openssl\apps\openssl.cnf "$(INSTDIR)\conf\openssl.cnf" <.y
type << >> "$(INSTDIR)\NOTICE.txt"
This binary distribution includes cryptographic software written by
@@ -577,14 +589,14 @@ _install:
-awk -f <<script.awk < "srclib\openssl\LICENSE" >> "$(INSTDIR)\LICENSE.txt"
BEGIN {
print "";
- print "For the libeay32.dll, ssleay32.dll and certtool.exe components:";
+ print "For the libeay32.dll, ssleay32.dll and openssl.exe components:";
print "";
while ( getline > 0 ) {
print $$0;
}
}
<<
- copy << + srclib\openssl\NEWS "$(INSTDIR)\OPENSSL-NEWS.txt" <.y
+ copy << "$(INSTDIR)\OPENSSL-NEWS.txt" <.y
Apache HTTP Server 2.2 Limited OpenSSL Distribution
@@ -599,15 +611,18 @@ BEGIN {
support for the patented encryption methods IDEA, MDC-2 or RC5.
--------------------------------------------------------------------------------
+
<<
- copy << + srclib\openssl\README "$(INSTDIR)\OPENSSL-README.txt" <.y
+ -copy "$(INSTDIR)\OPENSSL-NEWS.txt" \
+ + srclib\openssl\NEWS "$(INSTDIR)\OPENSSL-NEWS.txt"
+ copy << "$(INSTDIR)\OPENSSL-README.txt" <.y
Apache HTTP Server 2.2 Limited OpenSSL Distribution
This binary installation of OpenSSL is a limited distribution of the
files derived from the OpenSSL project:
- OPENSSL-LICENSE.txt
+ LICENSE.txt (includes openssl LICENSE)
OPENSSL-NEWS.txt
OPENSSL-README.txt
conf\openssl.cnf
@@ -634,6 +649,8 @@ BEGIN {
--------------------------------------------------------------------------------
<<
+ -copy "$(INSTDIR)\OPENSSL-README.txt" \
+ + srclib\openssl\README "$(INSTDIR)\OPENSSL-README.txt"
!ENDIF
!IF EXIST("srclib\zlib")
type << >> "$(INSTDIR)\NOTICE.txt"
@@ -664,7 +681,7 @@ BEGIN {
inst_dll="$(INSTDIR)\bin" \
inst_so="$(INSTDIR)\modules"
$(MAKE) $(MAKEOPT) -f Makefile.win SHORT=$(SHORT) LONG=$(LONG) \
- _copybin src_exe=pdb src_dll=pdb src_so=pdb quiet="-" \
+ _copybin src_exe=pdb src_dll=pdb src_so=pdb \
inst_exe="$(INSTDIR)\bin" \
inst_dll="$(INSTDIR)\bin" \
inst_so="$(INSTDIR)\modules"
@@ -691,16 +708,30 @@ BEGIN {
xcopy docs\docroot "$(INSTDIR)\htdocs" /d < .a
xcopy docs\icons "$(INSTDIR)\icons" /s /d < .a
xcopy docs\manual "$(INSTDIR)\manual" /s /d < .a
- xcopy srclib\apr-util\xml\expat\lib\expat.h "$(INSTDIR)\include" /d < .a
- xcopy srclib\apr\include\*.h "$(INSTDIR)\include" /d < .a
- xcopy srclib\apr-util\include\*.h "$(INSTDIR)\include" /d < .a
- xcopy include\*.h "$(INSTDIR)\include" /d < .a
- copy srclib\apr\Lib$(SHORT)\apr-1.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr\Lib$(SHORT)\apr_src.pdb "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\Lib$(SHORT)\aprutil-1.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\Lib$(SHORT)\aprutil_src.pdb "$(INSTDIR)\lib" <.y
+ for %f in ( \
+ srclib\apr-util\xml\expat\lib\expat.h \
+ srclib\apr\include\*.h \
+ srclib\apr-util\include\*.h \
+ include\*.h \
+ os\win32\os.h \
+ server\mpm\winnt\mpm*.h \
+ modules\aaa\mod_auth.h \
+ modules\database\mod_dbd.h \
+ modules\dav\main\mod_dav.h \
+ modules\filters\mod_include.h \
+ modules\generators\mod_cgi.h \
+ modules\generators\mod_status.h \
+ modules\loggers\mod_log_config.h \
+ modules\http\mod_core.h \
+ modules\proxy\mod_proxy.h \
+ modules\ssl\mod_ssl.h ) do \
+ @copy %f "$(INSTDIR)\include" < .y > nul
+ copy srclib\apr\Lib$(SHORT)\apr-1.lib "$(INSTDIR)\lib" <.y
+ copy srclib\apr\Lib$(SHORT)\apr-1.pdb "$(INSTDIR)\lib" <.y
+ copy srclib\apr-util\Lib$(SHORT)\aprutil-1.lib "$(INSTDIR)\lib" <.y
+ copy srclib\apr-util\Lib$(SHORT)\aprutil-1.pdb "$(INSTDIR)\lib" <.y
copy srclib\apr-util\xml\expat\lib\Lib$(SHORT)\xml.lib "$(INSTDIR)\lib" <.y
- copy srclib\apr-util\xml\expat\lib\Lib$(SHORT)\xml_src.pdb "$(INSTDIR)\lib" <.y
+ copy srclib\apr-util\xml\expat\lib\Lib$(SHORT)\xml.pdb "$(INSTDIR)\lib" <.y
copy srclib\apr\$(LONG)\libapr-1.lib "$(INSTDIR)\lib" <.y
copy srclib\apr\$(LONG)\libapr-1.exp "$(INSTDIR)\lib" <.y
copy srclib\apr-iconv\$(LONG)\libapriconv-1.lib "$(INSTDIR)\lib" <.y
@@ -711,65 +742,10 @@ BEGIN {
copy $(LONG)\libhttpd.lib "$(INSTDIR)\lib" <.y
copy modules\dav\main\$(LONG)\mod_dav.exp "$(INSTDIR)\lib" <.y
copy modules\dav\main\$(LONG)\mod_dav.lib "$(INSTDIR)\lib" <.y
- echo Y >.y
for %f in ( charset.conv magic mime.types ) do ( \
- copy docs\conf\%f "$(INSTDIR)\conf\%f.default" <.y && \
- if not exist "$(INSTDIR)\conf\%f" \
- copy "$(INSTDIR)\conf\%f.default" "$(INSTDIR)\conf\%f" \
- )
- copy docs\conf\httpd-win.conf "$(INSTDIR)\conf\httpd.conf.default" <.y
- -awk -f <<script.awk "docs/conf/httpd-win.conf" "$(INSTDIR)" > "$(INSTDIR)\conf\httpd.conf.default"
- BEGIN {
- serverroot = ARGV[2];
- delete ARGV[2];
- gsub( /\\/, "/", serverroot );
- "cd" | getline root;
- gsub( /^\//, substr( root, 1, 2 ) "/", serverroot );
- }
- {
- gsub( /@@ServerRoot@@/, serverroot );
- gsub( /@@ServerName@@/, "$(SERVERNAME)" );
- gsub( /@@Port@@/, "$(PORT)" );
- print $$0;
- }
-<<
- if not exist "$(INSTDIR)\conf\httpd.conf" \
- copy "$(INSTDIR)\conf\httpd.conf.default" "$(INSTDIR)\conf\httpd.conf"
- for %f in ( docs\conf\extra\*.in ) do ( \
- copy %f "$(INSTDIR)\conf\extra\%~nf.default" <.y && \
- awk -f <<script.awk "docs/conf/extra/%~nf.in" "$(INSTDIR)" > "$(INSTDIR)\conf\extra\%~nf.default" )
- BEGIN {
- serverroot = ARGV[2];
- delete ARGV[2];
- gsub( /\\/, "/", serverroot );
- "cd" | getline root;
- gsub( /^\//, substr( root, 1, 2 ) "/", serverroot );
- }
- {
- gsub( /SSLMutex file:@exp_runtimedir@\/ssl_mutex/, "SSLMutex default" );
- gsub( /@@ServerRoot@@/, serverroot );
- gsub( /@exp_cgidir@/, serverroot "/cgi-bin" );
- gsub( /@exp_sysconfdir@/, serverroot "/conf" );
- gsub( /@exp_errordir@/, serverroot "/error" );
- gsub( /@exp_htdocsdir@/, serverroot "/htdocs" );
- gsub( /@exp_iconsdir@/, serverroot "/icons" );
- gsub( /@exp_logfiledir@/, serverroot "/logs" );
- gsub( /@exp_runtimedir@/, serverroot "/logs" );
- gsub( /@exp_manualdir@/, serverroot "/manual" );
- gsub( /@rel_runtimedir@/, "logs" );
- gsub( /@rel_logfiledir@/, "logs" );
- gsub( /\/home\/\*\/public_html/, "\"C:/Documents and Settings/*/My Documents/My Website\"" );
- gsub( /UserDir public_html/, "UserDir \"My Documents/My Website\"" );
- gsub( /@@ServerName@@/, "$(SERVERNAME)" );
- gsub( /@@Port@@/, "$(PORT)" );
- gsub( /443/, "$(SSLPORT)" );
- print $$0;
- }
-<<
- for %f in ( docs\conf\extra\*.in ) do ( \
- if not exist "$(INSTDIR)\conf\extra\%~nf" \
- copy "$(INSTDIR)\conf\extra\%~nf.default" "$(INSTDIR)\conf\extra\%~nf" \
- )
+ copy docs\conf\%f "$(INSTDIR)\conf\original\%f" <.y )
+ awk -f build\installwinconf.awk $(DOMAINNAME) $(SERVERNAME) \
+ $(SERVERADMIN) $(PORT) $(SSLPORT) "$(INSTDIR) " docs/conf/
copy "support\dbmmanage.in" "$(INSTDIR)\bin\dbmmanage.pl"
-awk -f <<script.awk "support/dbmmanage.in" >"$(INSTDIR)\bin\dbmmanage.pl"
{ if ( $$0 ~ /^BEGIN \{ @AnyDBM_File::/ ) {
diff --git a/build/apr_common.m4 b/build/apr_common.m4
index 90793ee1..caae9bfa 100644
--- a/build/apr_common.m4
+++ b/build/apr_common.m4
@@ -959,3 +959,19 @@ fi
AC_SUBST(MKDEP)
])
+
+dnl
+dnl APR_CHECK_TYPES_COMPATIBLE(TYPE-1, TYPE-2, [ACTION-IF-TRUE])
+dnl
+dnl Try to determine whether two types are the same. Only works
+dnl for gcc and icc.
+dnl
+AC_DEFUN([APR_CHECK_TYPES_COMPATIBLE], [
+define([apr_cvname], apr_cv_typematch_[]translit([$1], [ ], [_])_[]translit([$2], [ ], [_]))
+AC_CACHE_CHECK([whether $1 and $2 are the same], apr_cvname, [
+AC_TRY_COMPILE(AC_INCLUDES_DEFAULT, [
+ int foo[0 - !__builtin_types_compatible_p($1, $2)];
+], [apr_cvname=yes
+$3], [apr_cvname=no])])
+])
+
diff --git a/build/find_apu.m4 b/build/find_apu.m4
index e2e27311..4ee01e68 100644
--- a/build/find_apu.m4
+++ b/build/find_apu.m4
@@ -1,10 +1,10 @@
dnl -------------------------------------------------------- -*- autoconf -*-
-dnl Copyright 2002-2005 The Apache Software Foundation or its licensors, as
-dnl applicable.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements. See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
diff --git a/build/installwinconf.awk b/build/installwinconf.awk
new file mode 100644
index 00000000..bc2540f5
--- /dev/null
+++ b/build/installwinconf.awk
@@ -0,0 +1,236 @@
+#
+# InstallConf.awk Apache HTTP 2.2 script to rewrite the @@ServerRoot@@
+# tags in httpd.conf.in to original\httpd.conf - then duplicate the
+# conf files to the 'live' configuration if they don't already exist.
+#
+# Note that we -don't- want the ARGV file list, so no additional {} blocks
+# are coded. Use explicit args (more reliable on Win32) and use the fact
+# that ARGV[] params are -not- '\' escaped to process the C:\Foo\Bar Win32
+# path format. Note that awk var=path would not succeed, since it -does-
+# escape backslashes in the assignment. Note also, a trailing space is
+# required for paths, or the trailing quote following the backslash is
+# escaped, rather than parsed.
+#
+BEGIN {
+ domainname = ARGV[1];
+ servername = ARGV[2];
+ serveradmin = ARGV[3];
+ serverport = ARGV[4];
+ serversslport = ARGV[5];
+ serverroot = ARGV[6];
+ sourceroot = ARGV[7];
+
+ delete ARGV[7];
+ delete ARGV[6];
+ delete ARGV[5];
+ delete ARGV[4];
+ delete ARGV[3];
+ delete ARGV[2];
+ delete ARGV[1];
+
+ gsub( /\\/, "/", serverroot );
+ gsub( /[ \/]+$/, "", serverroot );
+ tstfl = serverroot "/logs/install.log"
+ confroot = serverroot "/conf/";
+ confdefault = confroot "original/";
+
+ if ( sourceroot != "docs/conf/" ) {
+ sourceroot = serverroot "/" sourceroot;
+ }
+
+ usertree = ENVIRON["USERPROFILE"]
+ if ( usertree > "" ) {
+ gsub( /\\/, "/", usertree );
+ gsub( /\/[^\/]+$/, "", usertree );
+ } else {
+ usertree = "C:/Documents and Settings";
+ }
+
+ print "Installing Apache HTTP 2.0 server with" >tstfl;
+ print " DomainName = " domainname >tstfl;
+ print " ServerName = " servername >tstfl;
+ print " ServerAdmin = " serveradmin >tstfl;
+ print " ServerPort = " serverport >tstfl;
+ print " ServerSslPort = " serverport >tstfl;
+ print " ServerRoot = " serverroot >tstfl;
+
+ filelist["httpd.conf"] = "httpd.conf.in";
+ filelist["httpd-autoindex.conf"] = "httpd-autoindex.conf.in";
+ filelist["httpd-dav.conf"] = "httpd-dav.conf.in";
+ filelist["httpd-default.conf"] = "httpd-default.conf.in";
+ filelist["httpd-info.conf"] = "httpd-info.conf.in";
+ filelist["httpd-languages.conf"] = "httpd-languages.conf.in";
+ filelist["httpd-manual.conf"] = "httpd-manual.conf.in";
+ filelist["httpd-mpm.conf"] = "httpd-mpm.conf.in";
+ filelist["httpd-multilang-errordoc.conf"] = "httpd-multilang-errordoc.conf.in";
+ filelist["httpd-ssl.conf"] = "httpd-ssl.conf.in";
+ filelist["httpd-userdir.conf"] = "httpd-userdir.conf.in";
+ filelist["httpd-vhosts.conf"] = "httpd-vhosts.conf.in";
+
+ for ( conffile in filelist ) {
+
+ if ( conffile == "httpd.conf" ) {
+ srcfl = sourceroot filelist[conffile];
+ dstfl = confdefault conffile;
+ bswarning = 1;
+ } else {
+ srcfl = sourceroot "extra/" filelist[conffile];
+ dstfl = confdefault "extra/" conffile;
+ bswarning = 0;
+ }
+
+ while ( ( getline < srcfl ) > 0 ) {
+
+ if ( bswarning && /^$/ ) {
+ print "#" > dstfl;
+ print "# NOTE: Where filenames are specified, you must use forward slashes" > dstfl;
+ print "# instead of backslashes (e.g., \"c:/apache\" instead of \"c:\\apache\")." > dstfl;
+ print "# If a drive letter is omitted, the drive on which Apache.exe is located" > dstfl;
+ print "# will be used by default. It is recommended that you always supply" > dstfl;
+ print "# an explicit drive letter in absolute paths to avoid confusion." > dstfl;
+ bswarning = 0;
+ }
+ if ( /@@LoadModule@@/ ) {
+ print "LoadModule actions_module modules/mod_actions.so" > dstfl;
+ print "LoadModule alias_module modules/mod_alias.so" > dstfl;
+ print "LoadModule asis_module modules/mod_asis.so" > dstfl;
+ print "LoadModule auth_basic_module modules/mod_auth_basic.so" > dstfl;
+ print "#LoadModule auth_digest_module modules/mod_auth_digest.so" > dstfl;
+ print "#LoadModule authn_alias_module modules/mod_authn_alias.so" > dstfl;
+ print "#LoadModule authn_anon_module modules/mod_authn_anon.so" > dstfl;
+ print "#LoadModule authn_dbd_module modules/mod_authn_dbd.so" > dstfl;
+ print "#LoadModule authn_dbm_module modules/mod_authn_dbm.so" > dstfl;
+ print "LoadModule authn_default_module modules/mod_authn_default.so" > dstfl;
+ print "LoadModule authn_file_module modules/mod_authn_file.so" > dstfl;
+ print "#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so" > dstfl;
+ print "#LoadModule authz_dbm_module modules/mod_authz_dbm.so" > dstfl;
+ print "LoadModule authz_default_module modules/mod_authz_default.so" > dstfl;
+ print "LoadModule authz_groupfile_module modules/mod_authz_groupfile.so" > dstfl;
+ print "LoadModule authz_host_module modules/mod_authz_host.so" > dstfl;
+ print "#LoadModule authz_owner_module modules/mod_authz_owner.so" > dstfl;
+ print "LoadModule authz_user_module modules/mod_authz_user.so" > dstfl;
+ print "LoadModule autoindex_module modules/mod_autoindex.so" > dstfl;
+ print "#LoadModule cache_module modules/mod_cache.so" > dstfl;
+ print "#LoadModule cern_meta_module modules/mod_cern_meta.so" > dstfl;
+ print "LoadModule cgi_module modules/mod_cgi.so" > dstfl;
+ print "#LoadModule charset_lite_module modules/mod_charset_lite.so" > dstfl;
+ print "#LoadModule dav_module modules/mod_dav.so" > dstfl;
+ print "#LoadModule dav_fs_module modules/mod_dav_fs.so" > dstfl;
+ print "#LoadModule dav_lock_module modules/mod_dav_lock.so" > dstfl;
+ print "#LoadModule dbd_module modules/mod_dbd.so" > dstfl;
+ print "#LoadModule deflate_module modules/mod_deflate.so" > dstfl;
+ print "LoadModule dir_module modules/mod_dir.so" > dstfl;
+ print "#LoadModule disk_cache_module modules/mod_disk_cache.so" > dstfl;
+ print "#LoadModule dumpio_module modules/mod_dumpio.so" > dstfl;
+ print "LoadModule env_module modules/mod_env.so" > dstfl;
+ print "#LoadModule expires_module modules/mod_expires.so" > dstfl;
+ print "#LoadModule ext_filter_module modules/mod_ext_filter.so" > dstfl;
+ print "#LoadModule file_cache_module modules/mod_file_cache.so" > dstfl;
+ print "#LoadModule filter_module modules/mod_filter.so" > dstfl;
+ print "#LoadModule headers_module modules/mod_headers.so" > dstfl;
+ print "#LoadModule ident_module modules/mod_ident.so" > dstfl;
+ print "#LoadModule imagemap_module modules/mod_imagemap.so" > dstfl;
+ print "LoadModule include_module modules/mod_include.so" > dstfl;
+ print "#LoadModule info_module modules/mod_info.so" > dstfl;
+ print "LoadModule isapi_module modules/mod_isapi.so" > dstfl;
+ print "#LoadModule ldap_module modules/mod_ldap.so" > dstfl;
+ print "#LoadModule logio_module modules/mod_logio.so" > dstfl;
+ print "LoadModule log_config_module modules/mod_log_config.so" > dstfl;
+ print "#LoadModule log_forensic_module modules/mod_log_forensic.so" > dstfl;
+ print "#LoadModule mem_cache_module modules/mod_mem_cache.so" > dstfl;
+ print "LoadModule mime_module modules/mod_mime.so" > dstfl;
+ print "#LoadModule mime_magic_module modules/mod_mime_magic.so" > dstfl;
+ print "LoadModule negotiation_module modules/mod_negotiation.so" > dstfl;
+ print "#LoadModule proxy_module modules/mod_proxy.so" > dstfl;
+ print "#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so" > dstfl;
+ print "#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so" > dstfl;
+ print "#LoadModule proxy_connect_module modules/mod_proxy_connect.so" > dstfl;
+ print "#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so" > dstfl;
+ print "#LoadModule proxy_http_module modules/mod_proxy_http.so" > dstfl;
+ print "#LoadModule rewrite_module modules/mod_rewrite.so" > dstfl;
+ print "LoadModule setenvif_module modules/mod_setenvif.so" > dstfl;
+ print "#LoadModule speling_module modules/mod_speling.so" > dstfl;
+ print "#LoadModule ssl_module modules/mod_ssl.so" > dstfl;
+ print "#LoadModule status_module modules/mod_status.so" > dstfl;
+ print "#LoadModule substitute_module modules/mod_substitute.so" > dstfl;
+ print "#LoadModule unique_id_module modules/mod_unique_id.so" > dstfl;
+ print "#LoadModule userdir_module modules/mod_userdir.so" > dstfl;
+ print "#LoadModule usertrack_module modules/mod_usertrack.so" > dstfl;
+ print "#LoadModule version_module modules/mod_version.so" > dstfl;
+ print "#LoadModule vhost_alias_module modules/mod_vhost_alias.so" > dstfl;
+ continue;
+ }
+ gsub( /^SSLMutex.*/, "SSLMutex default" );
+ gsub( /@@ServerRoot@@/, serverroot );
+ gsub( /@exp_cgidir@/, serverroot "/cgi-bin" );
+ gsub( /@exp_sysconfdir@/, serverroot "/conf" );
+ gsub( /@exp_errordir@/, serverroot "/error" );
+ gsub( /@exp_htdocsdir@/, serverroot "/htdocs" );
+ gsub( /@exp_iconsdir@/, serverroot "/icons" );
+ gsub( /@exp_manualdir@/, serverroot "/manual" );
+ gsub( /@exp_runtimedir@/, serverroot "/logs" );
+ if ( gsub( /@exp_logfiledir@/, serverroot "/logs" ) ||
+ gsub( /@rel_logfiledir@/, "logs" ) ) {
+ gsub( /_log"/, ".log\"" )
+ }
+ gsub( /@rel_runtimedir@/, "logs" );
+ gsub( /@rel_sysconfdir@/, "conf" );
+ gsub( /\/home\/\*\/public_html/, \
+ usertree "/*/My Documents/My Website" );
+ gsub( /UserDir public_html/, "UserDir \"My Documents/My Website\"" );
+ gsub( /@@ServerName@@|www.example.com/, servername );
+ gsub( /@@ServerAdmin@@|you@example.com/, serveradmin );
+ gsub( /@@DomainName@@|example.com/, domainname );
+ gsub( /@@Port@@/, serverport );
+ gsub( /@@SSLPort@@|443/, serversslport );
+ print $0 > dstfl;
+ }
+ close(srcfl);
+
+ if ( close(dstfl) >= 0 ) {
+ print "Rewrote " srcfl "\n to " dstfl > tstfl;
+ gsub(/\//, "\\", srcfl);
+ if ( sourceroot != "docs/conf/" ) {
+ if (system("del \"" srcfl "\"")) {
+ print "Failed to remove " srcfl > tstfl;
+ } else {
+ print "Successfully removed " srcfl > tstfl;
+ }
+ }
+ } else {
+ print "Failed to rewrite " srcfl "\n to " dstfl > tstfl;
+ }
+ filelist[conffile] = "extra/";
+ }
+
+ filelist["httpd.conf"] = "";
+ filelist["charset.conv"] = "";
+ filelist["magic"] = "";
+ filelist["mime.types"] = "";
+
+ for ( conffile in filelist ) {
+ srcfl = confdefault filelist[conffile] conffile;
+ dstfl = confroot filelist[conffile] conffile;
+ if ( ( getline < dstfl ) < 0 ) {
+ while ( ( getline < srcfl ) > 0 ) {
+ print $0 > dstfl;
+ }
+ print "Duplicated " srcfl "\n to " dstfl > tstfl;
+ } else {
+ print "Existing file " dstfl " preserved" > tstfl;
+ }
+ close(srcfl);
+ close(dstfl);
+ }
+
+ if ( sourceroot != "docs/conf/" ) {
+ srcfl = confdefault "installwinconf.awk";
+ gsub(/\//, "\\", srcfl);
+ if (system("del \"" srcfl "\"")) {
+ print "Failed to remove " srcfl > tstfl;
+ } else {
+ print "Successfully removed " srcfl > tstfl;
+ }
+ }
+ close(tstfl);
+}
diff --git a/build/mkconfNW.awk b/build/mkconfNW.awk
index 57274ba7..20f3bb46 100644
--- a/build/mkconfNW.awk
+++ b/build/mkconfNW.awk
@@ -135,7 +135,7 @@ match ($0,/@nonssl_.*@/) {
END {
- if (!BSDSKT) {
+ if ((ARGV[1] ~ /httpd.conf.in/) && !BSDSKT) {
print ""
print "#"
print "# SecureListen: Allows you to securely bind Apache to specific IP addresses "
diff --git a/configure b/configure
index 599f37fe..6fd7654c 100755
--- a/configure
+++ b/configure
@@ -741,6 +741,7 @@ MOD_CASE_FILTER_IN_LDADD
MOD_EXT_FILTER_LDADD
MOD_INCLUDE_LDADD
MOD_FILTER_LDADD
+MOD_SUBSTITUTE_LDADD
MOD_CHARSET_LITE_LDADD
MOD_DEFLATE_LDADD
MOD_LDAP_LDADD
@@ -1499,6 +1500,7 @@ Optional Features:
--enable-ext-filter external filter module
--disable-include Server Side Includes
--disable-filter Smart Filtering
+ --enable-substitute response content rewrite-like filtering
--disable-charset-lite character set translation
--enable-charset-lite character set translation
--enable-deflate Deflate transfer encoding support
@@ -2187,6 +2189,9 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
# Check whether --enable-layout was given.
if test "${enable_layout+set}" = set; then
enableval=$enable_layout;
@@ -11167,6 +11172,99 @@ EOF
fi
+ { echo "$as_me:$LINENO: checking whether to enable mod_substitute" >&5
+echo $ECHO_N "checking whether to enable mod_substitute... $ECHO_C" >&6; }
+ # Check whether --enable-substitute was given.
+if test "${enable_substitute+set}" = set; then
+ enableval=$enable_substitute;
+else
+ enable_substitute=most
+fi
+
+ _apmod_extra_msg=""
+ if test "$module_selection" = "most" -a "$enable_substitute" = "most"; then
+ _apmod_error_fatal="no"
+ else
+ _apmod_error_fatal="yes"
+ fi
+ if test "$enable_substitute" = "static"; then
+ enable_substitute=yes
+ elif test "$enable_substitute" = "yes"; then
+ enable_substitute=$module_default
+ _apmod_extra_msg=" ($module_selection)"
+ elif test "$enable_substitute" = "most"; then
+ if test "$module_selection" = "most" -o "$module_selection" = "all"; then
+ enable_substitute=$module_default
+ _apmod_extra_msg=" ($module_selection)"
+ elif test "$enable_substitute" != "yes"; then
+ enable_substitute=no
+ fi
+ elif test "$enable_substitute" = "maybe-all"; then
+ if test "$module_selection" = "all"; then
+ enable_substitute=$module_default
+ _apmod_extra_msg=" (all)"
+ else
+ enable_substitute=no
+ fi
+ fi
+ if test "$enable_substitute" != "no"; then
+ :
+ fi
+ { echo "$as_me:$LINENO: result: $enable_substitute$_apmod_extra_msg" >&5
+echo "${ECHO_T}$enable_substitute$_apmod_extra_msg" >&6; }
+ if test "$enable_substitute" != "no"; then
+ case "$enable_substitute" in
+ shared*)
+ enable_substitute=`echo $enable_substitute|sed 's/shared,*//'`
+ sharedobjs=yes
+ shared=yes
+ DSO_MODULES="$DSO_MODULES substitute"
+ ;;
+ *)
+ MODLIST="$MODLIST substitute"
+ if test "substitute" = "so"; then
+ sharedobjs=yes
+ fi
+ shared="";;
+ esac
+
+
+ if test -z ""; then
+ objects="mod_substitute.lo"
+ else
+ objects=""
+ fi
+
+ if test -z "$module_standalone"; then
+ if test -z "$shared"; then
+ # The filename of a convenience library must have a "lib" prefix:
+ libname="libmod_substitute.la"
+ BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname"
+ modpath_static="$modpath_static $libname"
+ cat >>$modpath_current/modules.mk<<EOF
+$libname: $objects
+ \$(MOD_LINK) $objects \$(MOD_SUBSTITUTE_LDADD)
+EOF
+ else
+ apache_need_shared=yes
+ libname="mod_substitute.la"
+ shobjects=`echo $objects | sed 's/\.lo/.slo/g'`
+ modpath_shared="$modpath_shared $libname"
+ cat >>$modpath_current/modules.mk<<EOF
+$libname: $shobjects
+ \$(SH_LINK) -rpath \$(libexecdir) -module -avoid-version $objects \$(MOD_SUBSTITUTE_LDADD)
+EOF
+ fi
+ fi
+
+
+ APACHE_VAR_SUBST="$APACHE_VAR_SUBST MOD_SUBSTITUTE_LDADD"
+
+
+
+ fi
+
+
if test "$ac_cv_ebcdic" = "yes"; then
# mod_charset_lite can be very useful on an ebcdic system,
# so include it by default
@@ -23126,6 +23224,7 @@ MOD_CASE_FILTER_IN_LDADD!$MOD_CASE_FILTER_IN_LDADD$ac_delim
MOD_EXT_FILTER_LDADD!$MOD_EXT_FILTER_LDADD$ac_delim
MOD_INCLUDE_LDADD!$MOD_INCLUDE_LDADD$ac_delim
MOD_FILTER_LDADD!$MOD_FILTER_LDADD$ac_delim
+MOD_SUBSTITUTE_LDADD!$MOD_SUBSTITUTE_LDADD$ac_delim
MOD_CHARSET_LITE_LDADD!$MOD_CHARSET_LITE_LDADD$ac_delim
MOD_DEFLATE_LDADD!$MOD_DEFLATE_LDADD$ac_delim
MOD_LDAP_LDADD!$MOD_LDAP_LDADD$ac_delim
@@ -23177,7 +23276,6 @@ MOD_SUEXEC_LDADD!$MOD_SUEXEC_LDADD$ac_delim
MOD_CGID_LDADD!$MOD_CGID_LDADD$ac_delim
MOD_CGI_LDADD!$MOD_CGI_LDADD$ac_delim
MOD_DAV_FS_LDADD!$MOD_DAV_FS_LDADD$ac_delim
-MOD_DAV_LOCK_LDADD!$MOD_DAV_LOCK_LDADD$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -23219,6 +23317,7 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
+MOD_DAV_LOCK_LDADD!$MOD_DAV_LOCK_LDADD$ac_delim
MOD_VHOST_ALIAS_LDADD!$MOD_VHOST_ALIAS_LDADD$ac_delim
MOD_NEGOTIATION_LDADD!$MOD_NEGOTIATION_LDADD$ac_delim
MOD_DIR_LDADD!$MOD_DIR_LDADD$ac_delim
@@ -23302,7 +23401,7 @@ LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 81; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 82; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/docs/conf/extra/httpd-mpm.conf.in b/docs/conf/extra/httpd-mpm.conf.in
index 3436a52a..ab8408ad 100644
--- a/docs/conf/extra/httpd-mpm.conf.in
+++ b/docs/conf/extra/httpd-mpm.conf.in
@@ -99,3 +99,12 @@ LockFile "@rel_logfiledir@/accept.lock"
MaxSpareThreads 10
MaxRequestsPerChild 0
</IfModule>
+
+# WinNT MPM
+# ThreadsPerChild: constant number of worker threads in the server process
+# MaxRequestsPerChild: maximum number of requests a server process serves
+<IfModule mpm_winnt_module>
+ ThreadsPerChild 150
+ MaxRequestsPerChild 0
+</IfModule>
+
diff --git a/docs/conf/extra/httpd-vhosts.conf.in b/docs/conf/extra/httpd-vhosts.conf.in
index 10b31dd0..fb44a167 100644
--- a/docs/conf/extra/httpd-vhosts.conf.in
+++ b/docs/conf/extra/httpd-vhosts.conf.in
@@ -16,7 +16,7 @@
#
# Use name-based virtual hosting.
#
-NameVirtualHost *:80
+NameVirtualHost *:@@Port@@
#
# VirtualHost example:
@@ -24,21 +24,21 @@ NameVirtualHost *:80
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
-<VirtualHost *:80>
+<VirtualHost *:@@Port@@>
ServerAdmin webmaster@dummy-host.example.com
- DocumentRoot "/www/docs/dummy-host.example.com"
+ DocumentRoot "@@ServerRoot@@/docs/dummy-host.example.com"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
ErrorLog "@rel_logfiledir@/dummy-host.example.com-error_log"
- CustomLog "@rel_logfiledir@/dummy-host.example.com-access_log common"
+ CustomLog "@rel_logfiledir@/dummy-host.example.com-access_log" common
</VirtualHost>
-<VirtualHost *:80>
+<VirtualHost *:@@Port@@>
ServerAdmin webmaster@dummy-host2.example.com
- DocumentRoot "/www/docs/dummy-host2.example.com"
+ DocumentRoot "@@ServerRoot@@/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "@rel_logfiledir@/dummy-host2.example.com-error_log"
- CustomLog "@rel_logfiledir@/dummy-host2.example.com-access_log common"
+ CustomLog "@rel_logfiledir@/dummy-host2.example.com-access_log" common
</VirtualHost>
diff --git a/docs/conf/httpd-win.conf b/docs/conf/httpd-win.conf
deleted file mode 100644
index 13b826c4..00000000
--- a/docs/conf/httpd-win.conf
+++ /dev/null
@@ -1,484 +0,0 @@
-#
-# This is the main Apache HTTP server configuration file. It contains the
-# configuration directives that give the server its instructions.
-# See <URL:http://httpd.apache.org/docs/2.2/> for detailed information.
-# In particular, see
-# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
-# for a discussion of each configuration directive.
-#
-# Do NOT simply read the instructions in here without understanding
-# what they do. They're here only as hints or reminders. If you are unsure
-# consult the online docs. You have been warned.
-#
-# Configuration and logfile names: If the filenames you specify for many
-# of the server's control files begin with "/" (or "drive:/" for Win32), the
-# server will use that explicit path. If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
-# with ServerRoot set to "@@ServerRoot@@" will be interpreted by the
-# server as "@@ServerRoot@@/logs/foo.log".
-#
-# NOTE: Where filenames are specified, you must use forward slashes
-# instead of backslashes (e.g., "c:/apache" instead of "c:\apache").
-# If a drive letter is omitted, the drive on which Apache.exe is located
-# will be used by default. It is recommended that you always supply
-# an explicit drive letter in absolute paths, however, to avoid
-# confusion.
-#
-
-# ThreadsPerChild: constant number of worker threads in the server process
-# MaxRequestsPerChild: maximum number of requests a server process serves
-ThreadsPerChild 250
-MaxRequestsPerChild 0
-
-#
-# ServerRoot: The top of the directory tree under which the server's
-# configuration, error, and log files are kept.
-#
-# Do not add a slash at the end of the directory path. If you point
-# ServerRoot at a non-local disk, be sure to point the LockFile directive
-# at a local disk. If you wish to share the same ServerRoot for multiple
-# httpd daemons, you will need to change at least LockFile and PidFile.
-#
-ServerRoot "@@ServerRoot@@"
-
-#
-# Listen: Allows you to bind Apache to specific IP addresses and/or
-# ports, instead of the default. See also the <VirtualHost>
-# directive.
-#
-# Change this to Listen on specific IP addresses as shown below to
-# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
-#
-#Listen 12.34.56.78:80
-Listen @@Port@@
-
-#
-# Dynamic Shared Object (DSO) Support
-#
-# To be able to use the functionality of a module which was built as a DSO you
-# have to place corresponding `LoadModule' lines at this location so the
-# directives contained in it are actually available _before_ they are used.
-# Statically compiled modules (those listed by `httpd -l') do not need
-# to be loaded here.
-#
-# Example:
-# LoadModule foo_module modules/mod_foo.so
-#
-LoadModule actions_module modules/mod_actions.so
-LoadModule alias_module modules/mod_alias.so
-LoadModule asis_module modules/mod_asis.so
-LoadModule auth_basic_module modules/mod_auth_basic.so
-#LoadModule auth_digest_module modules/mod_auth_digest.so
-#LoadModule authn_anon_module modules/mod_authn_anon.so
-#LoadModule authn_dbm_module modules/mod_authn_dbm.so
-LoadModule authn_default_module modules/mod_authn_default.so
-LoadModule authn_file_module modules/mod_authn_file.so
-#LoadModule authz_dbm_module modules/mod_authz_dbm.so
-LoadModule authz_default_module modules/mod_authz_default.so
-LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
-LoadModule authz_host_module modules/mod_authz_host.so
-LoadModule authz_user_module modules/mod_authz_user.so
-LoadModule autoindex_module modules/mod_autoindex.so
-#LoadModule cern_meta_module modules/mod_cern_meta.so
-LoadModule cgi_module modules/mod_cgi.so
-#LoadModule dav_module modules/mod_dav.so
-#LoadModule dav_fs_module modules/mod_dav_fs.so
-#LoadModule deflate_module modules/mod_deflate.so
-LoadModule dir_module modules/mod_dir.so
-LoadModule env_module modules/mod_env.so
-#LoadModule expires_module modules/mod_expires.so
-#LoadModule file_cache_module modules/mod_file_cache.so
-#LoadModule headers_module modules/mod_headers.so
-LoadModule imagemap_module modules/mod_imagemap.so
-LoadModule include_module modules/mod_include.so
-#LoadModule info_module modules/mod_info.so
-LoadModule isapi_module modules/mod_isapi.so
-LoadModule log_config_module modules/mod_log_config.so
-LoadModule mime_module modules/mod_mime.so
-#LoadModule mime_magic_module modules/mod_mime_magic.so
-#LoadModule proxy_module modules/mod_proxy.so
-#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
-#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
-#LoadModule proxy_connect_module modules/mod_proxy_connect.so
-#LoadModule proxy_http_module modules/mod_proxy_http.so
-#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
-LoadModule negotiation_module modules/mod_negotiation.so
-#LoadModule rewrite_module modules/mod_rewrite.so
-LoadModule setenvif_module modules/mod_setenvif.so
-#LoadModule speling_module modules/mod_speling.so
-#LoadModule status_module modules/mod_status.so
-#LoadModule unique_id_module modules/mod_unique_id.so
-LoadModule userdir_module modules/mod_userdir.so
-#LoadModule usertrack_module modules/mod_usertrack.so
-#LoadModule vhost_alias_module modules/mod_vhost_alias.so
-#LoadModule ssl_module modules/mod_ssl.so
-
-# 'Main' server configuration
-#
-# The directives in this section set up the values used by the 'main'
-# server, which responds to any requests that aren't handled by a
-# <VirtualHost> definition. These values also provide defaults for
-# any <VirtualHost> containers you may define later in the file.
-#
-# All of these directives may appear inside <VirtualHost> containers,
-# in which case these default settings will be overridden for the
-# virtual host being defined.
-#
-
-#
-# ServerAdmin: Your address, where problems with the server should be
-# e-mailed. This address appears on some server-generated pages, such
-# as error documents. e.g. admin@your-domain.com
-#
-ServerAdmin @@ServerAdmin@@
-
-#
-# ServerName gives the name and port that the server uses to identify itself.
-# This can often be determined automatically, but we recommend you specify
-# it explicitly to prevent problems during startup.
-#
-# If your host doesn't have a registered DNS name, enter its IP address here.
-#
-ServerName @@ServerName@@:@@Port@@
-
-#
-# DocumentRoot: The directory out of which you will serve your
-# documents. By default, all requests are taken from this directory, but
-# symbolic links and aliases may be used to point to other locations.
-#
-DocumentRoot "@@ServerRoot@@/htdocs"
-
-#
-# Each directory to which Apache has access can be configured with respect
-# to which services and features are allowed and/or disabled in that
-# directory (and its subdirectories).
-#
-# First, we configure the "default" to be a very restrictive set of
-# features.
-#
-<Directory />
- Options FollowSymLinks
- AllowOverride None
- Order deny,allow
- Deny from all
- Satisfy all
-</Directory>
-
-#
-# Note that from this point forward you must specifically allow
-# particular features to be enabled - so if something's not working as
-# you might expect, make sure that you have specifically enabled it
-# below.
-#
-
-#
-# This should be changed to whatever you set DocumentRoot to.
-#
-<Directory "@@ServerRoot@@/htdocs">
- #
- # Possible values for the Options directive are "None", "All",
- # or any combination of:
- # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
- #
- # Note that "MultiViews" must be named *explicitly* --- "Options All"
- # doesn't give it to you.
- #
- # The Options directive is both complicated and important. Please see
- # http://httpd.apache.org/docs/2.2/mod/core.html#options
- # for more information.
- #
- Options Indexes FollowSymLinks
-
- #
- # AllowOverride controls what directives may be placed in .htaccess files.
- # It can be "All", "None", or any combination of the keywords:
- # Options FileInfo AuthConfig Limit
- #
- AllowOverride None
-
- #
- # Controls who can get stuff from this server.
- #
- Order allow,deny
- Allow from all
-
-</Directory>
-
-#
-# DirectoryIndex: sets the file that Apache will serve if a directory
-# is requested.
-#
-<IfModule dir_module>
- DirectoryIndex index.html
-</IfModule>
-
-#
-# The following lines prevent .htaccess and .htpasswd files from being
-# viewed by Web clients.
-#
-<FilesMatch "^\.ht">
- Order allow,deny
- Deny from all
-</FilesMatch>
-
-#
-# ErrorLog: The location of the error log file.
-# If you do not specify an ErrorLog directive within a <VirtualHost>
-# container, error messages relating to that virtual host will be
-# logged here. If you *do* define an error logfile for a <VirtualHost>
-# container, that host's errors will be logged there and not here.
-#
-ErrorLog logs/error.log
-
-#
-# LogLevel: Control the number of messages logged to the error_log.
-# Possible values include: debug, info, notice, warn, error, crit,
-# alert, emerg.
-#
-LogLevel warn
-
-<IfModule log_config_module>
- #
- # The following directives define some format nicknames for use with
- # a CustomLog directive (see below).
- #
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- LogFormat "%h %l %u %t \"%r\" %>s %b" common
-
- <IfModule logio_module>
- # You need to enable mod_logio.c to use %I and %O
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
- </IfModule>
-
- #
- # The location and format of the access logfile (Common Logfile Format).
- # If you do not define any access logfiles within a <VirtualHost>
- # container, they will be logged here. Contrariwise, if you *do*
- # define per-<VirtualHost> access logfiles, transactions will be
- # logged therein and *not* in this file.
- #
- CustomLog logs/access.log common
-
- #
- # If you prefer a logfile with access, agent, and referer information
- # (Combined Logfile Format) you can use the following directive.
- #
- #CustomLog logs/access.log combined
-</IfModule>
-
-<IfModule alias_module>
- #
- # Redirect: Allows you to tell clients about documents that used to
- # exist in your server's namespace, but do not anymore. The client
- # will make a new request for the document at its new location.
- # Example:
- # Redirect permanent /foo http://www.example.com/bar
-
- #
- # Alias: Maps web paths into filesystem paths and is used to
- # access content that does not live under the DocumentRoot.
- # Example:
- # Alias /webpath /full/filesystem/path
- #
- # If you include a trailing / on /webpath then the server will
- # require it to be present in the URL. You will also likely
- # need to provide a <Directory> section to allow access to
- # the filesystem path.
-
- #
- # ScriptAlias: This controls which directories contain server scripts.
- # ScriptAliases are essentially the same as Aliases, except that
- # documents in the target directory are treated as applications and
- # run by the server when requested rather than as documents sent to the
- # client. The same rules about trailing "/" apply to ScriptAlias
- # directives as to Alias.
- #
- ScriptAlias /cgi-bin/ "@@ServerRoot@@/cgi-bin/"
-
-</IfModule>
-
-#
-# "@@ServerRoot@@/cgi-bin" should be changed to whatever your ScriptAliased
-# CGI directory exists, if you have that configured.
-#
-<Directory "@@ServerRoot@@/cgi-bin">
- AllowOverride None
- Options None
- Order allow,deny
- Allow from all
-</Directory>
-
-#
-# Apache parses all CGI scripts for the shebang line by default.
-# This comment line, the first line of the script, consists of the symbols
-# pound (#) and exclamation (!) followed by the path of the program that
-# can execute this specific script. For a perl script, with perl.exe in
-# the C:\Program Files\Perl directory, the shebang line should be:
-
- #!c:/program files/perl/perl
-
-# Note you _must_not_ indent the actual shebang line, and it must be the
-# first line of the file. Of course, CGI processing must be enabled by
-# the appropriate ScriptAlias or Options ExecCGI directives for the files
-# or directory in question.
-#
-# However, Apache on Windows allows either the Unix behavior above, or can
-# use the Registry to match files by extention. The command to execute
-# a file of this type is retrieved from the registry by the same method as
-# the Windows Explorer would use to handle double-clicking on a file.
-# These script actions can be configured from the Windows Explorer View menu,
-# 'Folder Options', and reviewing the 'File Types' tab. Clicking the Edit
-# button allows you to modify the Actions, of which Apache 1.3 attempts to
-# perform the 'Open' Action, and failing that it will try the shebang line.
-# This behavior is subject to change in Apache release 2.0.
-#
-# Each mechanism has it's own specific security weaknesses, from the means
-# to run a program you didn't intend the website owner to invoke, and the
-# best method is a matter of great debate.
-#
-# To enable the this Windows specific behavior (and therefore -disable- the
-# equivilant Unix behavior), uncomment the following directive:
-#
-#ScriptInterpreterSource registry
-#
-# The directive above can be placed in individual <Directory> blocks or the
-# .htaccess file, with either the 'registry' (Windows behavior) or 'script'
-# (Unix behavior) option, and will override this server default option.
-#
-
-#
-# DefaultType: the default MIME type the server will use for a document
-# if it cannot otherwise determine one, such as from filename extensions.
-# If your server contains mostly text or HTML documents, "text/plain" is
-# a good value. If most of your content is binary, such as applications
-# or images, you may want to use "application/octet-stream" instead to
-# keep browsers from trying to display binary files as though they are
-# text.
-#
-DefaultType text/plain
-
-<IfModule mime_module>
- #
- # TypesConfig points to the file containing the list of mappings from
- # filename extension to MIME-type.
- #
- TypesConfig conf/mime.types
-
- #
- # AddType allows you to add to or override the MIME configuration
- # file specified in TypesConfig for specific file types.
- #
- #AddType application/x-gzip .tgz
- #
- # AddEncoding allows you to have certain browsers uncompress
- # information on the fly. Note: Not all browsers support this.
- #
- #AddEncoding x-compress .Z
- #AddEncoding x-gzip .gz .tgz
- #
- # If the AddEncoding directives above are commented-out, then you
- # probably should define those extensions to indicate media types:
- #
- AddType application/x-compress .Z
- AddType application/x-gzip .gz .tgz
-
- #
- # AddHandler allows you to map certain file extensions to "handlers":
- # actions unrelated to filetype. These can be either built into the server
- # or added with the Action directive (see below)
- #
- # To use CGI scripts outside of ScriptAliased directories:
- # (You will also need to add "ExecCGI" to the "Options" directive.)
- #
- #AddHandler cgi-script .cgi
-
- # For type maps (negotiated resources):
- #AddHandler type-map var
-
- #
- # Filters allow you to process content before it is sent to the client.
- #
- # To parse .shtml files for server-side includes (SSI):
- # (You will also need to add "Includes" to the "Options" directive.)
- #
- #AddType text/html .shtml
- #AddOutputFilter INCLUDES .shtml
-</IfModule>
-
-#
-# The mod_mime_magic module allows the server to use various hints from the
-# contents of the file itself to determine its type. The MIMEMagicFile
-# directive tells the module where the hint definitions are located.
-#
-#MIMEMagicFile conf/magic
-
-#
-# Customizable error responses come in three flavors:
-# 1) plain text 2) local redirects 3) external redirects
-#
-# Some examples:
-#ErrorDocument 500 "The server made a boo boo."
-#ErrorDocument 404 /missing.html
-#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
-#ErrorDocument 402 http://www.example.com/subscription_info.html
-#
-
-#
-# EnableMMAP and EnableSendfile: On systems that support it,
-# memory-mapping or the sendfile syscall is used to deliver
-# files. This usually improves server performance, but must
-# be turned off when serving from networked-mounted
-# filesystems or if support for these functions is otherwise
-# broken on your system.
-#
-#EnableMMAP off
-#EnableSendfile off
-
-# Supplemental configuration
-#
-# The configuration files in the conf/extra/ directory can be
-# included to add extra features or to modify the default configuration of
-# the server, or you may simply copy their contents here and change as
-# necessary.
-
-# Server-pool management (MPM specific)
-#Include conf/extra/httpd-mpm.conf
-
-# Multi-language error messages
-#Include conf/extra/httpd-multilang-errordoc.conf
-
-# Fancy directory listings
-#Include conf/extra/httpd-autoindex.conf
-
-# Language settings
-#Include conf/extra/httpd-languages.conf
-
-# User home directories
-#Include conf/extra/httpd-userdir.conf
-
-# Real-time info on requests and configuration
-#Include conf/extra/httpd-info.conf
-
-# Virtual hosts
-#Include conf/extra/httpd-vhosts.conf
-
-# Local access to the Apache HTTP Server Manual
-#Include conf/extra/httpd-manual.conf
-
-# Distributed authoring and versioning (WebDAV)
-#Include conf/extra/httpd-dav.conf
-
-# Various default settings
-#Include conf/extra/httpd-default.conf
-
-# Secure (SSL/TLS) connections
-#Include conf/extra/httpd-ssl.conf
-#
-# Note: The following must must be present to support
-# starting without SSL on platforms with no /dev/random equivalent
-# but a statically compiled-in mod_ssl.
-#
-<IfModule ssl_module>
-SSLRandomSeed startup builtin
-SSLRandomSeed connect builtin
-</IfModule>
diff --git a/docs/conf/httpd.conf.in b/docs/conf/httpd.conf.in
index a87d09e4..3719f9a6 100644
--- a/docs/conf/httpd.conf.in
+++ b/docs/conf/httpd.conf.in
@@ -13,9 +13,9 @@
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path. If the filenames do *not* begin
-# with "/", the value of ServerRoot is prepended -- so "@rel_logfiledir@/foo.log"
+# with "/", the value of ServerRoot is prepended -- so "@rel_logfiledir@/foo_log"
# with ServerRoot set to "@@ServerRoot@@" will be interpreted by the
-# server as "@@ServerRoot@@/@rel_logfiledir@/foo.log".
+# server as "@@ServerRoot@@/@rel_logfiledir@/foo_log".
#
# ServerRoot: The top of the directory tree under which the server's
@@ -54,6 +54,7 @@ Listen @@Port@@
@@LoadModule@@
<IfModule !mpm_netware_module>
+<IfModule !mpm_winnt_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
@@ -64,6 +65,8 @@ Listen @@Port@@
#
User daemon
Group daemon
+
+</IfModule>
</IfModule>
# 'Main' server configuration
@@ -92,7 +95,7 @@ ServerAdmin you@example.com
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
-#ServerName www.example.com:80
+#ServerName www.example.com:@@Port@@
#
# DocumentRoot: The directory out of which you will serve your
@@ -181,7 +184,7 @@ DocumentRoot "@exp_htdocsdir@"
# logged here. If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
-ErrorLog @rel_logfiledir@/error_log
+ErrorLog "@rel_logfiledir@/error_log"
#
# LogLevel: Control the number of messages logged to the error_log.
@@ -210,13 +213,13 @@ LogLevel warn
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
- CustomLog @rel_logfiledir@/access_log common
+ CustomLog "@rel_logfiledir@/access_log" common
#
# If you prefer a logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
- #CustomLog @rel_logfiledir@/access_log combined
+ #CustomLog "@rel_logfiledir@/access_log" combined
</IfModule>
<IfModule alias_module>
diff --git a/docs/conf/mime.types b/docs/conf/mime.types
index 34d5fc90..f1299bce 100644
--- a/docs/conf/mime.types
+++ b/docs/conf/mime.types
@@ -82,6 +82,10 @@ application/mbms-user-service-description+xml
application/mbox mbox
application/mediaservercontrol+xml mscml
application/mikey
+application/moss-keys
+application/moss-signature
+application/mosskey-data
+application/mosskey-request
application/mp4 mp4s
application/mpeg4-generic
application/mpeg4-iod
@@ -135,6 +139,10 @@ application/rtx
application/samlassertion+xml
application/samlmetadata+xml
application/sbml+xml sbml
+application/scvp-cv-request scq
+application/scvp-cv-response scs
+application/scvp-vp-request spq
+application/scvp-vp-response spp
application/sdp sdp
application/set-payment
application/set-payment-initiation setpay
@@ -152,6 +160,8 @@ application/smil
application/smil+xml smi smil
application/soap+fastinfoset
application/soap+xml
+application/sparql-query rq
+application/sparql-results+xml srx
application/spirits-event+xml
application/srgs gram
application/srgs+xml grxml
@@ -159,6 +169,7 @@ application/ssml+xml ssml
application/timestamp-query
application/timestamp-reply
application/tve-trigger
+application/ulpfec
application/vemmi
application/vividence.scriptfile
application/vnd.3gpp.bsf+xml
@@ -168,6 +179,7 @@ application/vnd.3gpp.pic-bw-var pvb
application/vnd.3gpp.sms
application/vnd.3gpp2.bcmcsinfo+xml
application/vnd.3gpp2.sms
+application/vnd.3gpp2.tcap tcap
application/vnd.3m.post-it-notes pwn
application/vnd.accpac.simply.aso aso
application/vnd.accpac.simply.imp imp
@@ -317,6 +329,7 @@ application/vnd.japannet-verification
application/vnd.japannet-verification-wakeup
application/vnd.jcp.javame.midlet-rms rms
application/vnd.jisp jisp
+application/vnd.joost.joda-archive joda
application/vnd.kahootz ktz ktr
application/vnd.kde.karbon karbon
application/vnd.kde.kchart chrt
@@ -393,9 +406,13 @@ application/vnd.ms-wpl wpl
application/vnd.ms-xpsdocument xps
application/vnd.mseq mseq
application/vnd.msign
+application/vnd.multiad.creator
+application/vnd.multiad.creator.cif
application/vnd.music-niff
application/vnd.musician mus
+application/vnd.muvee.style msty
application/vnd.ncd.control
+application/vnd.ncd.reference
application/vnd.nervana
application/vnd.netfpx
application/vnd.neurolanguage.nlu nlu
@@ -455,7 +472,10 @@ application/vnd.oma.bcast.sprov+xml
application/vnd.oma.dd2+xml dd2
application/vnd.oma.drm.risd+xml
application/vnd.oma.group-usage-list+xml
+application/vnd.oma.poc.detailed-progress-report+xml
+application/vnd.oma.poc.final-report+xml
application/vnd.oma.poc.groups+xml
+application/vnd.oma.poc.optimized-progress-report+xml
application/vnd.oma.xcap-directory+xml
application/vnd.omads-email+xml
application/vnd.omads-file+xml
@@ -495,6 +515,7 @@ application/vnd.renlearn.rlprint
application/vnd.rn-realmedia rm
application/vnd.ruckus.download
application/vnd.s3sms
+application/vnd.sbm.mid2
application/vnd.scribus
application/vnd.sealed.3df
application/vnd.sealed.csf
@@ -571,6 +592,7 @@ application/vnd.wap.wmlc wmlc
application/vnd.wap.wmlscriptc wmlsc
application/vnd.webturbo wtb
application/vnd.wfa.wsc
+application/vnd.wmc
application/vnd.wordperfect wpd
application/vnd.wqd wqd
application/vnd.wrq-hp3000-labelled
@@ -742,6 +764,7 @@ audio/t140c
audio/t38
audio/telephone-event
audio/tone
+audio/ulpfec
audio/vdvi
audio/vmr-wb
audio/vnd.3gpp.iufp
@@ -812,7 +835,7 @@ image/vnd.fst fst
image/vnd.fujixerox.edmics-mmr mmr
image/vnd.fujixerox.edmics-rlc rlc
image/vnd.globalgraphics.pgb
-image/vnd.microsoft.icon ico
+image/vnd.microsoft.icon
image/vnd.mix
image/vnd.ms-modi mdi
image/vnd.net-fpx npx
@@ -824,7 +847,7 @@ image/vnd.wap.wbmp wbmp
image/vnd.xiff xif
image/x-cmu-raster ras
image/x-cmx cmx
-image/x-icon
+image/x-icon ico
image/x-pcx pcx
image/x-pict pic pct
image/x-portable-anymap pnm
@@ -847,6 +870,7 @@ message/s-http
message/sip
message/sipfrag
message/tracking-status
+message/vnd.si.simp
model/iges igs iges
model/mesh msh mesh silo
model/vnd.dwf dwf
@@ -894,6 +918,7 @@ text/sgml sgml sgm
text/t140
text/tab-separated-values tsv
text/troff t tr roff man me ms
+text/ulpfec
text/uri-list uri uris urls
text/vnd.abc
text/vnd.curl
@@ -909,6 +934,7 @@ text/vnd.latex-z
text/vnd.motorola.reflex
text/vnd.ms-mediapackage
text/vnd.net2phone.commcenter.command
+text/vnd.si.uricatalogue
text/vnd.sun.j2me.app-descriptor jad
text/vnd.trolltech.linguist
text/vnd.wap.si
@@ -957,6 +983,7 @@ video/raw
video/rtp-enc-aescm128
video/rtx
video/smpte292m
+video/ulpfec
video/vc1
video/vnd.dlna.mpeg-tts
video/vnd.fvt fvt
diff --git a/docs/man/rotatelogs.8 b/docs/man/rotatelogs.8
index a8875f75..5b95a1fa 100644
--- a/docs/man/rotatelogs.8
+++ b/docs/man/rotatelogs.8
@@ -19,7 +19,7 @@
.el .ne 3
.IP "\\$1" \\$2
..
-.TH "ROTATELOGS" 8 "2004-06-20" "Apache HTTP Server" "rotatelogs"
+.TH "ROTATELOGS" 8 "2007-12-09" "Apache HTTP Server" "rotatelogs"
.SH NAME
rotatelogs \- Piped logging program to rotate Apache logs
@@ -27,13 +27,35 @@ rotatelogs \- Piped logging program to rotate Apache logs
.SH "SYNOPSIS"
.PP
-\fBrotatelogs\fR [ -\fBl\fR ] \fIlogfile\fR [ \fIrotationtime\fR [ \fIoffset\fR ]] | [ \fIfilesize\fRM ]
+\fBrotatelogs\fR [ -\fBl\fR ] \fIlogfile\fR \fIrotationtime\fR|\fIfilesize\fRM [ \fIoffset\fR ]
.SH "SUMMARY"
.PP
-rotatelogs is a simple program for use in conjunction with Apache's piped logfile feature\&. For example:
+rotatelogs is a simple program for use in conjunction with Apache's piped logfile feature\&. It supports rotation based on a time interval or maximum size of the log\&.
+
+
+.SH "OPTIONS"
+
+
+.TP
+-l
+Causes the use of local time rather than GMT as the base for the interval or for strftime(3) formatting with size-based rotation\&. Note that using -l in an environment which changes the GMT offset (such as for BST or DST) can lead to unpredictable results!
+.TP
+\fIlogfile\fR
+The path plus basename of the logfile\&. If \fIlogfile\fR includes any '%' characters, it is treated as a format string for strftime(3)\&. Otherwise, the suffix \fI\&.nnnnnnnnnn\fR is automatically added and is the time in seconds\&. Both formats compute the start time from the beginning of the current period\&. For example, if a rotation time of 86400 is specified, the hour, minute, and second fields created from the strftime(3) format will all be zero, referring to the beginning of the current 24-hour period (midnight)\&.
+.TP
+\fIrotationtime\fR
+The time between log file rotations in seconds\&. The rotation occurs at the beginning of this interval\&. For example, if the rotation time is 3600, the log file will be rotated at the beginning of every hour; if the rotation time is 86400, the log file will be rotated every night at midnight\&. (If no data is logged during an interval, no file will be created\&.)
+.TP
+\fIfilesize\fRM
+The maximum file size in megabytes followed by the letter M to specify size rather than time\&.
+.TP
+\fIoffset\fR
+The number of minutes offset from UTC\&. If omitted, zero is assumed and UTC is used\&. For example, to use local time in the zone UTC -5 hours, specify a value of -300 for this argument\&. In most cases, -l should be used instead of specifying an offset\&.
+
+.SH "EXAMPLES"
.nf
@@ -46,6 +68,15 @@ This creates the files /var/logs/logfile\&.nnnn where nnnn is the system time at
.nf
+ CustomLog "|bin/rotatelogs -l /var/logs/logfile\&.%Y\&.%m\&.%d 86400" common
+
+.fi
+
+.PP
+This creates the files /var/logs/logfile\&.yyyy\&.mm\&.dd where yyyy is the year, mm is the month, and dd is the day of the month\&. Logging will switch to a new file every day at midnight, local time\&.
+
+.nf
+
CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
.fi
@@ -62,26 +93,6 @@ This configuration will rotate the logfile whenever it reaches a size of 5 megab
.PP
This configuration will rotate the error logfile whenever it reaches a size of 5 megabytes, and the suffix to the logfile name will be created of the form errorlog\&.YYYY-mm-dd-HH_MM_SS\&.
-
-.SH "OPTIONS"
-
-
-.TP
--l
-Causes the use of local time rather than GMT as the base for the interval\&. Note that using -l in an environment which changes the GMT offset (such as for BST or DST) can lead to unpredictable results!
-.TP
-\fIlogfile\fR
-The path plus basename of the logfile\&. If \fIlogfile\fR includes any '%' characters, it is treated as a format string for strftime(3)\&. Otherwise, the suffix \fI\&.nnnnnnnnnn\fR is automatically added and is the time in seconds\&. Both formats compute the start time from the beginning of the current period\&.
-.TP
-\fIrotationtime\fR
-The time between log file rotations in seconds\&.
-.TP
-\fIoffset\fR
-The number of minutes offset from UTC\&. If omitted, zero is assumed and UTC is used\&. For example, to use local time in the zone UTC -5 hours, specify a value of -300 for this argument\&.
-.TP
-\fIfilesize\fRM
-The maximum file size in megabytes followed by the letter M to specify size rather than time\&. Use this parameter in place of both rotationtime and offset\&.
-
.SH "PORTABILITY"
.PP
diff --git a/docs/manual/bind.html.fr b/docs/manual/bind.html.fr
index 19b442c7..054b2eab 100644
--- a/docs/manual/bind.html.fr
+++ b/docs/manual/bind.html.fr
@@ -5,7 +5,7 @@
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
-<title>Liaison - Serveur Apache HTTP</title>
+<title>Adresse IP et port d'écoute - Serveur Apache HTTP</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
@@ -16,7 +16,7 @@
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
<div id="path">
-<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Liaison</h1>
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Adresse IP et port d'écoute</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
@@ -24,167 +24,137 @@
<a href="./ja/bind.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/bind.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Verifiez la version
- Anglaise pour les changements récents.</div>
-
- <p>Configuration des adresses et ports sur lesquels Apache écoute.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Informations générales</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ipv6">Considérations Spéciales avec IPv6</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Faire fonctionner tout ceci avec les Serveurs Virtuels</a></li>
-</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="vhosts/">Serveurs Virtuels</a></li><li><a href="dns-caveats.html">Problémes DNS</a></li></ul></div>
+
+ <p>Configuration d'Apache pour l'écoute sur un port et une adresse IP spécifiques.</p>
+ </div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#overview">Vue d'ensemble</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#ipv6">Remarques spécifiques à IPv6</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Comment tout ceci fonctionne-t-il avec les hôtes virtuels</a></li>
+</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="vhosts/">Hôtes virtuels</a></li><li><a href="dns-caveats.html">Problèmes liés à DNS</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
-<h2><a name="overview" id="overview">Informations générales</a></h2>
-
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mpm_common.html">mpm_common</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code></li></ul></td></tr></table>
-
-
- <p>Au moment de son démarrage, Apache se lie à un port et à une
- adresse IP sur la machine locale et se met en attente de requètes.
- Par défaut, Apache écoute sur toutes les adresses de la machine.
- Apache accepte d'écouter sur un ou plusieurs ports spécifiques,
- sur une seule ou plusieurs adresses, ou encore sur une combinaison port-adresse.
- Il est fréquent d'utiliser ces possibilités avec les fonctionnalités
- de Serveurs Virtuels, qui permettent de faire répondre le serveur de
- manière différente en fonction de l'adresse IP, du nom d'hôte ou
- du port.</p>
-
- <p>Le serveur interprète la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- en acceptant les requètes seulement sur le port ou la combinaison
- adresse IP + port passée en argument. Dans le cas où seul un port
- est spécifié avec la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
- le serveur se met à l'écoute sur le port spécifié, sur toutes
- les interfaces et adresses de la machine. Si une adresse IP est
- spécifiée en plus du port, le serveur n'écoute que sur l'adresse
- et le port spécifié. Il est possible de configurer plusieurs adresses
- et ports avec la directives
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- pour écoute par le serveur. Le serveur répond aux requètes faites
- à toutes les adresses et ports énumérés.</p>
-
-
- <p>Par exemple, pour que le serveur accepte les connexions sur
- les ports 80 et 8000, spécifiez :</p>
-
- <div class="example"><p><code>
- Listen 80<br />
- Listen 8000
- </code></p></div>
-
- <p>Pour qu'Apache accepte les connexions sur deux combinaisons
- adresses + ports, spécifiez :</p>
-
- <div class="example"><p><code>
- Listen 192.170.2.1:80<br />
- Listen 192.170.2.5:8000
- </code></p></div>
-
- <p>Les adresses IPv6 sont acceptées, pourvu qu'elles soient spécifiées
- entre crochets de la façon suivante :</p>
-
- <div class="example"><p><code>
- Listen [2001:db8::a00:20ff:fea7:ccea]:80
- </code></p></div>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<h2><a name="overview" id="overview">Vue d'ensemble</a></h2>
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mpm_common.html">mpm_common</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code></li></ul></td></tr></table>
+
+
+ <p>Au démarrage d'Apache, un port et une adresse lui sont associés sur
+ l'hôte local et le serveur se met en attente de l'arrivée d'une requête.
+ Par défaut, le serveur écoute toutes les adresses de l'hôte local.
+ Cependant, il faut lui préciser des ports spécifiques à écouter,
+ ou lui dire de n'écouter que certaines adresses,
+ ou une combinaison des deux.
+ Tout ceci est souvent associé avec la fonctionnalité des hôtes virtuels
+ qui détermine la manière dont Apache répond aux différents ports,
+ noms d'hôtes et adresses IP.</p>
+
+ <p>La directive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
+ enjoint le serveur de n'accepter des requêtes que sur le port spécifié ou
+ une combinaison adresse/port. Si seul un numéro de port est spécifié
+ dans la directive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
+ le serveur écoute ce port sur toutes les interfaces réseau.
+ Si une adresse IP est spécifiée en plus du port, le serveur va écouter
+ ce port sur l'interface réseau correspondante. On peut utiliser
+ de multiples directives
+ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> pour
+ spécifier plusieurs adresses et ports à écouter. Le serveur répondra alors
+ aux requêtes sur ces ports et adresses spécifiés.</p>
+
+ <p>Par exemple, pour faire en sorte que le serveur accepte des connexions
+ sur les ports 80 et 8000, utilisez :</p>
+
+ <div class="example"><p><code>
+ Listen 80<br />
+ Listen 8000
+ </code></p></div>
+
+ <p>Pour faire en sorte que le serveur accepte des connexions en provenance
+ de deux couples d'interfaces et ports, utilisez :</p>
+
+ <div class="example"><p><code>
+ Listen 192.170.2.1:80<br />
+ Listen 192.170.2.5:8000
+ </code></p></div>
+
+ <p>Les adresses IPv6 doivent être entre crochets, comme dans
+ l'exemple suivant :</p>
+
+ <div class="example"><p><code>
+ Listen [2001:db8::a00:20ff:fea7:ccea]:80
+ </code></p></div>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
-<h2><a name="ipv6" id="ipv6">Considérations Spéciales avec IPv6</a></h2>
-
-
- <p>De plus en plus de plate-formes implémentent IPv6. APR
- supporte IPv6 sur la plupart d'entre elles, si bien qu'Apache
- peut assigner des interfaces de connexions IPv6 et répondre aux
- requètes utilisant IPv6.</p>
-
- <p>Une complication possible pour les administrateurs Apache est de
- savoir si une interface de connexion IPv6 peut répondre aux deux types de
- connexions IPv4 et IPv6.
- Manipuler les connexions IPv4 avec une interface de connexion IPv6
- suppose l'utilisation d'adresses IPv6 mappées en IPv4, ce qui est
- le cas par defaut sur la plupart des plate-formes, à l'exeption de FreeBSD,
- NetBSD, et OpenBSD, cela en raison des politiques systèmes de ces plate-formes.
- Mème sur des systèmes où cette fonctionnalité n'est pas activée par
- défaut, une option de compilation permet de changer ce
- fonctionnement pour Apache.</p>
- <p>Pour qu'Apache puisse gérer à la fois les connexions IPv4 et IPv6
- avec un minimum d'interfaces de connexions, il faut permettre l'utilisation
- des adresses
- IPv6 mappées en IPv4, ce qui est possible en spécifiant l'option
-
- de compilation <code>--enable-v4-mapped</code> et en utilisant la
- directive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- comme suit:</p>
+<h2><a name="ipv6" id="ipv6">Remarques spécifiques à IPv6</a></h2>
- <div class="example"><p><code>
- Listen 80
- </code></p></div>
-
- <p>Si <code>--enable-v4-mapped</code> a été spécifié à la compilation,
- les directives <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- de la configuration par défaut sont de la forme ci-dessus.
- <code>--enable-v4-mapped</code> est l'option de compilation
- par défaut sur toutes les plate-formes, sauf FreeBSD, NetBSD, et
- OpenBSD.</p>
-
-
- <p>Pour qu'Apache ne manipule que les connexions IPv4, en ignorant l'éventuel
- support IPv6 de la plate-forme ou d'APR, une adresse IPv4 peut être
- spécifié pour toutes les directives
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>,
- comme dans les exemples suivantss:</p>
-
- <div class="example"><p><code>
- Listen 0.0.0.0:80<br />
- Listen 192.170.2.1:80
- </code></p></div>
-
- <p>Pour qu'Apache manipule les connexions IPv4 et IPv6 sur des interfaces
- différentes (c'est-à-dire, pour ne pas accepter les addresse IPv6 mappées
- en IPv4), spécifier l'option de compilation <code>--disable-v4-mapped</code>
- et utiliser des directives <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- spécifiques telles que:</p>
- <div class="example"><p><code>
- Listen [::]:80<br />
- Listen 0.0.0.0:80
- </code></p></div>
-
- <p>Avec <code>--disable-v4-mapped</code>, la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> à l'intérieur
- du fichier de configuration par défaut créé par Apache utilise la forme
- ci-dessus.
- <code>--disable-v4-mapped</code> est l'option de compilation par défaut sous
- FreeBSD, NetBSD, et OpenBSD.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+
+ <p>Un nombre croissant de plateformes implémentent IPv6, et
+ <a class="glossarylink" href="./glossary.html#apr" title="see glossary">APR</a> supporte IPv6 sur la plupart d'entre elles,
+ ce qui permet à Apache d'allouer des points de connexion (sockets) IPv6
+ et de traiter des requêtes qui ont été envoyées sur IPv6.</p>
+
+ <p>Les administrateurs d'Apache doivent se préoccuper de la possibilité
+ pour un point de connexion IPv6 de traiter à la fois des connexions IPv4
+ et des connexions IPv6.
+ Le traitement de connexions IPv4 avec un point de connexion IPv6 utilise
+ des adresses IPv6 traduites en IPv4, qui sont autorisées par défaut sur la
+ plupart des plateformes mais sont interdites par défaut sous FreeBSD, NetBSD,
+ et OpenBSD afin de respecter la politique de sécurité du système sur ces plateformes.
+ Mais même sur ces systèmes où ces adresses sont interdites par défaut, un
+ paramètre spécial du script <code class="program"><a href="./programs/configure.html">configure</a></code> permet de modifier
+ ce comportement pour Apache.</p>
+
+ <p>En revanche, sur certaines plateformes comme Linux et Tru64, la
+ <strong>seule</strong> manière de gérer à la fois IPv6 et IPv4 passe
+ par l'utilisation d'adresses traduites. Si vous voulez qu'Apache gère
+ des connexions IPv4 et IPv6 avec un minimum de points de connexion,
+ ce qui nécessite l'utilisation d'adresses IPv6 traduites en IPv4,
+ utilisez l'option <code>--enable-v4-mapped</code> du script <code class="program"><a href="./programs/configure.html">configure</a></code>.</p>
+
+ <p>L'option <code>--enable-v4-mapped</code> est utilisée par défaut sur
+ toutes les plateformes sauf FreeBSD, NetBSD, et OpenBSD;
+ votre Apache a donc probablement été construit avec cette option.</p>
+
+ <p>Si vous souhaitez qu'Apache ne gère que des connexions IPv4, sans se
+ soucier de ce que vos plateforme et APR supportent, spécifiez une adresse
+ IPv4 dans toutes les directives
+ <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>, comme dans l'exemple
+ suivant :</p>
+
+ <div class="example"><p><code>
+ Listen 0.0.0.0:80<br />
+ Listen 192.170.2.1:80
+ </code></p></div>
+
+ <p>Si votre plateforme le supporte et si vous souhaitez qu'Apache gère
+ des connexions IPv4 et IPv6 sur des points de connexion séparés
+ (c'est à dire désactiver la traduction des adresses IPv6 au format IPv4),
+ utilisez l'option <code>--disable-v4-mapped</code> du script
+ <code class="program"><a href="./programs/configure.html">configure</a></code>. <code>--disable-v4-mapped</code> est
+ utilisé par défaut sur FreeBSD, NetBSD, et OpenBSD.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
-<h2><a name="virtualhost" id="virtualhost">Faire fonctionner tout ceci avec les Serveurs Virtuels</a></h2>
-
-
- <p><code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- n'implémente aucun Serveur Virtuel. Cette directive sert simplement
- à informer le serveur principal sur quels addresses et ports écouter.
- Dans le cas où aucune section
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- n'est utilisée, le serveur répondra de la mème manière pour toutes
- les requètes qu'il acceptera. Cependant des sections
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- peuvent être utilisées pour qu'Apache réagisse de façon différente à
- une requète selon l'adresse ou le port. Avant d'implémenter
- un Serveur Virtuel au moyen de la directive
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>, la directive
- <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
- doit tre utilisée pour que le serveur écoute sur l'adresse
- ou le port spécifié. Une section
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- peut alors être utilisée pour définir la réaction du Serveur Virtuel pour une
- adresse et un port spécifique. À noter que si un Serveur Virtuel est
- positionné au moyen de la directive
- <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
- sur une adresse et un port sur lesquels le serveur n'est pas à l'écoute,
- le Serveur Virtuel ne sera pas accessible.</p>
- </div></div>
+<h2><a name="virtualhost" id="virtualhost">Comment tout ceci fonctionne-t-il avec les hôtes virtuels</a></h2>
+
+
+ <p> La directive <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code> n'implémente pas les hôtes virtuels.
+ Elle indique simplement au serveur principal sur quels adresses et ports
+ il doit écouter. Si aucune directive
+ <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
+ n'est présente, le serveur se comportera de la même façon pour toutes
+ les requêtes acceptées. En revanche, la directive
+ <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
+ peut être utilisée pour provoquer une réaction différente du serveur
+ pour un ou plusieurs adresses/ports. Pour implémenter un hôte virtuel,
+ on doit d'abord indiquer au serveur sur quels adresses et ports il doit écouter.
+ Ensuite, une section
+ <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
+ doit être créée pour chaque couple adresse+port spécifié afin de définir le
+ comportement de cet hôte virtuel. Notez que si la directive
+ <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
+ est définie pour une adresse et un port sur lesquels le serveur n'est pas censé
+ écouter, cet hôte virtuel ne sera pas accessible.</p>
+ </div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="./de/bind.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/bind.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
diff --git a/docs/manual/caching.html b/docs/manual/caching.html
index 8506655a..8dd58d1b 100644
--- a/docs/manual/caching.html
+++ b/docs/manual/caching.html
@@ -1,3 +1,7 @@
URI: caching.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+
+URI: caching.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/caching.html.en b/docs/manual/caching.html.en
index 5a0136f4..d4078027 100644
--- a/docs/manual/caching.html.en
+++ b/docs/manual/caching.html.en
@@ -18,7 +18,8 @@
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Caching Guide</h1>
<div class="toplang">
-<p><span>Available Languages: </span><a href="./en/caching.html" title="English">&nbsp;en&nbsp;</a></p>
+<p><span>Available Languages: </span><a href="./en/caching.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/caching.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
</div>
<p>This document supplements the <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>,
@@ -648,7 +649,8 @@ CacheDirLength 1</pre></div>
</div></div>
<div class="bottomlang">
-<p><span>Available Languages: </span><a href="./en/caching.html" title="English">&nbsp;en&nbsp;</a></p>
+<p><span>Available Languages: </span><a href="./en/caching.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/caching.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
diff --git a/docs/manual/caching.html.fr b/docs/manual/caching.html.fr
new file mode 100644
index 00000000..ae22f42c
--- /dev/null
+++ b/docs/manual/caching.html.fr
@@ -0,0 +1,741 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Guide de la mise en cache - Serveur Apache HTTP</title>
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.2</p>
+<img alt="" src="./images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Guide de la mise en cache</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="./en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/caching.html" title="Français">&nbsp;fr&nbsp;</a></p>
+</div>
+
+ <p>Ce document complète la documentation de référence des modules
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>,
+ <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>, <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code>,
+ <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> et du programme <a href="programs/htcacheclean.html">htcacheclean</a>.
+ Il décrit l'utilisation des fonctionnalités de mise en cache d'Apache
+ pour accélérer les services web et proxy, tout en évitant les problèmes
+ courants et les erreurs de configuration.</p>
+ </div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#introduction">Introduction</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#overview">Vue d'ensemble de la mise en cache</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#security">Considérations sur la sécurité</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#filehandle">Mise en cache de la gestion de fichier</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#inmemory">Mise en cache en mémoire</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#disk">Mise en cache sur disque</a></li>
+</ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="introduction" id="introduction">Introduction</a></h2>
+
+
+ <p>Depuis la version 2.2 du serveur HTTP Apache, les modules
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
+ et <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> ne sont plus jugés expérimentaux
+ et on considère qu'ils peuvent être utilisés en production. Ces
+ architectures de mise en cache constituent un puissant concept
+ d'accélération de la gestion HTTP, tant comme serveur web originel
+ que comme mandataire.</p>
+
+ <p>Le module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> et ses modules de soutien
+ <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code> et <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>
+ permettent une mise en cache intelligente du point de vue HTTP.
+ Le contenu proprement dit est stocké dans le cache,
+ et mod_cache tente d'honorer tous les en-têtes HTTP et les options
+ qui définissent la possibilité de mise en cache du contenu. Il gère non
+ seulement le contenu local, mais aussi le contenu mandaté.
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
+ est conçu pour des configurations de mise en cache simples ou complexes,
+ dans lesquels vous traitez de contenu mandaté, de contenu local dynamique
+ ou avez besoin d'accélérer l'accès à des fichiers locaux qui sont modifiés
+ au cours du temps.</p>
+
+ <p>Le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> quant à lui, constitue une
+ forme de mise en cache plus basique, mais quelques fois intéressante.
+ Plutôt que de gérer la complexité de s'assurer de manière active de la
+ possibilité de mise en cache d'URLs,
+ <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> fournit des méthodes pour la gestion
+ et l'édition de fichiers en mémoire afin de maintenir un cache de fichiers
+ dans l'état où ils étaient la dernière fois qu'Apache a démarré.
+ En tant que tel, <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> a été conçu pour améliorer
+ le temps d'accès à des fichiers locaux statiques qui ne sont modifiés
+ que rarement.</p>
+
+ <p>Etant donné que <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> constitue une
+ implémentation de mise en cache relativement simple, mises à part les
+ sections spécifiques sur les directives <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code> et <code class="directive"><a href="./mod/mod_file_cache.html#mmapstatic">MMapStatic</a></code>, les explications fournies
+ dans ce guide concernent l'architecture de mise en cache du
+ module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>.</p>
+
+ <p>Pour tirer parti efficacement de ce document, les bases de HTTP doivent
+ vous être familières, et vous devez avoir lu les sections
+ <a href="urlmapping.html">Mise en correspondance des
+ URLs avec le système de fichiers</a> et
+ <a href="content-negotiation.html">Négociation sur le contenu</a>
+ du guide de l'utilisateur.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="overview" id="overview">Vue d'ensemble de la mise en cache</a></h2>
+
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code></li><li><code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code></li><li><code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code></li><li><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code></li><li><code class="directive"><a href="./mod/mod_file_cache.html#mmapstatic">MMapStatic</a></code></li><li><code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code></li><li><code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code></li><li><code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code></li><li><code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code></li></ul></td></tr></table>
+
+ <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> peut faire intervenir deux phases
+ principales pendant la durée de vie d'une requête.
+ En premier lieu, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
+ est un module de mise en correspondance d'URLs, ce qui signifie que si
+ une URL a été mise en cache, et que la version du cache de cette URL n'est
+ pas arrivée à expiration, la requête sera traitée directement par
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>.</p>
+
+ <p>Ceci entraîne que toutes autres actions qui se dérouleraient normalement
+ au cours du processus de traitement d'une requête -- par exemple un
+ traitement effectué par <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>, ou
+ <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> --
+ ne seront pas effectuées. Mais c'est justement l'intérêt
+ de la mise en cache préalable du contenu.</p>
+
+ <p>Si l'URL ne se trouve pas dans le cache, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
+ va ajouter un <a href="filter.html">filtre</a> au traitement de la requête.
+ Une fois le contenu de la réponse HTTP trouvé par Apache de manière classique, le
+ filtre sera exécuté en même temps que le contenu sera transmis au client.
+ S'il est déterminé que le contenu peut être mis en cache,
+ il sera sauvegardé dans le cache pour une utilisation future.</p>
+
+ <p>Si l'URL se trouve dans le cache, mais est arrivée à expiration,
+ le filtre est quand-même ajouté, mais <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va créer
+ une requête conditionnelle en arrière-plan, pour déterminer si la version
+ du cache est encore à jour. Si la version du cache est encore à jour, ses
+ meta-informations seront mises à jour et la requête sera servie à partir du
+ cache. Si la version du contenu n'est plus à jour, elle sera supprimée et le
+ filtre va sauvegarder le contenu mis à jour dans le cache
+ au moment où il sera servi.</p>
+
+ <h3>Amélioration du taux de présence dans le cache</h3>
+
+
+ <p>Lors de la mise en cache de contenu généré localement, le
+ positionnement de la directive
+ <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> à
+ <code>On</code> peut améliorer de manière spectaculaire le taux de
+ présence dans le cache. Ceci est du au fait que le nom d'hôte de l'hôte
+ virtuel qui sert le contenu constitue une partie de la clé de cache.
+ Avec <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> positionnée
+ à <code>On</code>,
+ les hôtes virtuels possédant plusieurs noms de serveur ou alias ne
+ généreront pas d'entités de cache différentes, et le contenu sera mis en
+ cache en faisant référence au nom d'hôte canonique.</p>
+
+ <p>Les documents mis en cache ne seront servis qu'en réponse à des
+ requêtes de type URL, car la mise en cache est effectuée lors de la phase
+ de traduction de l'URL en nom de fichier.
+ En général, cela n'a que peu d'effet, à moins que vous n'utilisiez les
+ <a href="howto/ssi.html">Inclusions Côté Serveur (SSI)</a>;</p>
+
+ <div class="example"><pre>
+&lt;!-- L'inclusion suivante peut être mise en cache --&gt;
+&lt;!--#include virtual="/footer.html" --&gt;
+
+&lt;!-- L'inclusion suivante ne peut pas être mise en cache --&gt;
+&lt;!--#include file="/path/to/footer.html" --&gt;</pre></div>
+
+ <p>Si vous utilisez les SSI, et voulez bénéficier de la vitesse de
+ service depuis le cache, vous devez utiliser des inclusions de type
+ <code>virtual</code>.</p>
+
+
+ <h3>Périodes d'expiration</h3>
+
+
+ <p>La période d'expiration par défaut pour les entités du cache est
+ d'une heure; elle peut cependant être facilement modifiée à l'aide de
+ la directive <code class="directive"><a href="./mod/mod_cache.html#cachedefaultexpire">CacheDefaultExpire</a></code>. Cette valeur par
+ défaut n'est utilisée que lorsque la source originale du contenu ne
+ précise pas de période d'expiration ou d'heure de dernière
+ modification.</p>
+
+ <p>Si une réponse ne contient pas d'en-tête <code>Expires</code> mais
+ inclut un en-tête <code>Last-Modified</code>, <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>
+ peut déduire une période d'expiration en se basant sur la valeur de la
+ directive <code class="directive"><a href="./mod/mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></code>.</p>
+
+ <p>La période d'expiration des contenus locaux peut être ajustée finement
+ en utilisant le module <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code>.</p>
+
+ <p>On peut aussi contrôler la période d'expiration maximale en utilisant
+ la directive <code class="directive"><a href="./mod/mod_cache.html#cachemaxexpire">CacheMaxExpire</a></code>.</p>
+
+
+
+ <h3>Guide succinct des requêtes conditionnelles</h3>
+
+
+ <p>Lorsqu'un contenu est arrivé à expiration dans le cache et fait
+ l'objet d'une nouvelle demande d'accès, plutôt que traiter directement
+ la requête originale, Apache préfère utiliser une
+ requête conditionnelle.</p>
+
+ <p>HTTP propose toute une panoplie d'en-têtes qui permettent à un client,
+ ou au cache de distinguer les différentes versions d'un même contenu. Par
+ exemple, si une ressource a été servie avec un en-tête "Etag:", il est
+ possible de créer une requête conditionnelle contenant un en-tête
+ "If-None-Match:". Si une ressource a été servie avec un en-tête
+ "Last-Modified:", il est possible de créer une requête conditionnelle
+ contenant un en-tête "If-Modified-Since:", etc....</p>
+
+ <p>Lorsqu'une telle requête conditionnelle est créée, la reponse diffère
+ selon que le contenu satisfait ou non aux conditions. Si une requête est
+ créée avec un en-tête "If-Modified-Since:", et le contenu n'a pas été
+ modifié depuis le moment indiqué dans la requête, alors un laconique
+ "304 Not Modified" est retourné.</p>
+
+ <p>Si le contenu a été modifié, il est servi comme si la requête n'avait
+ pas été conditionnelle à l'origine.</p>
+
+ <p>Les bénéfices des requêtes conditionnelles pour ce qui concerne la
+ mise en cache sont de deux sortes. Premièrement, quand une telle requête
+ est envoyée au processus en arrière-plan, il sera aisé de déterminer
+ si le contenu que devra servir le processus en arrière-plan correspond
+ au contenu stocké dans le cache, sans être obligé de transmettre la
+ totalité de la ressource.</p>
+
+ <p>Deuxièmement, les requêtes conditionnelles sont en général moins
+ coûteuses en ressources pour le processus en arrière-plan.
+ Pour ce qui est des fichiers
+ statiques, l'action type est un appel à <code>stat()</code> ou un appel
+ système similaire, pour déterminer si la taille du fichier ou sa date de
+ modification ont changé. Ainsi, même si Apache met en cache le contenu
+ local, un contenu arrivé à expiration pourra être servi plus rapidement
+ depuis le cache s'il n'a pas été modifié, parce que la lecture depuis le
+ cache est plus rapide que la lecture depuis le processus en arrière-plan
+ (à comparer à la différence de vitesse entre la lecture depuis un cache en
+ mémoire et la lecture depuis un disque).</p>
+
+
+ <h3>Que peut-on mettre en cache ?</h3>
+
+
+ <p>Comme mentionné plus haut, les deux styles de mise en cache d'Apache
+ fonctionnent différemment; la mise en cache de
+ <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> conserve les contenus des fichiers
+ tels qu'ils étaient au démarrage d'Apache. Quand une requête pour un
+ fichier mis en cache par ce module est envoyée, elle est interceptée
+ et le fichier mis en cache est servi.</p>
+
+ <p>La mise en cache de <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, quant à elle, est
+ plus complexe. Lors du traitement d'une requête, le module de mise en
+ cache déterminera si le contenu peut être mis en cache, s'il ne l'a
+ pas déjà été auparavant. Les conditions qui permettent de déterminer
+ la possibilité de mise en cache d'une réponse sont :</p>
+
+ <ol>
+ <li>La mise en cache doit être activée pour cette URL. Voir les
+ directives <code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code> et <code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code>.</li>
+
+ <li>La reponse doit avoir un code de statut HTTP de 200, 203, 300, 301
+ ou 410.</li>
+
+ <li>La requête doit être de type HTTP GET.</li>
+
+ <li>Si la requête contient un en-tête "Authorization:", la réponse ne
+ sera pas mise en cache.</li>
+
+ <li>Si la réponse contient un en-tête "Authorization:", elle doit aussi
+ contenir une option "s-maxage", "must-revalidate" ou "public"
+ dans l'en-tête "Cache-Control:".</li>
+
+ <li>Si l'URL contenait une requête sous forme de chaîne de caractères
+ (provenant par exemple d'une méthode GET de formulaire HTML), elle ne
+ sera pas mise en cache à moins que la réponse ne contienne un en-tête
+ "Expires:", comme précisé dans la RFC2616 section 13.9.</li>
+
+ <li>Si la réponse a un statut de 200 (OK), elle doit aussi contenir
+ au moins un des en-têtes "Etag", "Last-Modified" ou
+ "Expires", à moins que la directive
+ <code class="directive"><a href="./mod/mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></code>
+ ne précise d'autres contraintes.</li>
+
+ <li>Si la réponse contient l'option "private" dans un en-tête
+ "Cache-Control:", elle ne sera pas mise en cache à moins que la
+ directive
+ <code class="directive"><a href="./mod/mod_cache.html#cachestoreprivate">CacheStorePrivate</a></code>
+ ne précise d'autres contraintes.</li>
+
+ <li>De même, si la réponse contient l'option "no-store" dans un en-tête
+ "Cache-Control:", elle ne sera pas mise en cache à moins que la
+ directive
+ <code class="directive"><a href="./mod/mod_cache.html#cachestorenostore">CacheStoreNoStore</a></code>
+ n'ait été utilisée.</li>
+
+ <li>Une réponse ne sera pas mise en cache si elle comporte un en-tête
+ "Vary:" contenant le caractère "*" qui correspond à toute
+ chaîne de caractères.</li>
+ </ol>
+
+
+ <h3>Qu'est ce qui ne doit pas être mis en cache ?</h3>
+
+
+ <p>En bref, tout contenu qui varie beaucoup avec le temps, ou en fonction
+ de particularités de la requête qui ne sont pas couvertes par la
+ négociation HTTP, ne doit pas être mis en cache.</p>
+
+ <p>Un contenu dynamique qui varie en fonction de l'adresse IP du
+ demandeur, ou qui est modifié toutes les 5 minutes, ne devra en général
+ pas être mis en cache.</p>
+
+ <p>Si par contre le contenu servi diffère en fonction de la valeur de
+ divers en-têtes HTTP, il se peut que l'on puisse le mettre en cache
+ intelligemment en utilisant un en-tête "Vary".</p>
+
+
+ <h3>Contenu variable et/ou négocié</h3>
+
+
+ <p>Si <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> reçoit une réponse contenant un en-tête
+ "Vary", lorsqu'un contenu a été demandé par un processus d'arrière-plan,
+ il va s'efforcer de la traiter intelligemment. Si possible,
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> va détecter les en-têtes attribués dans la
+ réponse "Vary" à l'occasion des futures demandes, et servir une réponse
+ correcte à partir du cache.</p>
+
+ <p>Si par exemple, une réponse est reçue avec l'en-tête Vary suivant,</p>
+
+ <div class="example"><p><code>
+Vary: negotiate,accept-language,accept-charset
+ </code></p></div>
+
+ <p><code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne servira aux demandeurs que le contenu
+ mis en cache qui correspond au contenu des en-têtes accept-language et
+ accept-charset de la requête originale.</p>
+
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="security" id="security">Considérations sur la sécurité</a></h2>
+
+
+ <h3>Autorisation et contrôle d'accès</h3>
+
+
+ <p>Utiliser <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> revient sensiblement à la même
+ chose qu'avoir un mandataire inverse intégré (reverse-proxy). Les requêtes
+ seront servies par le module de mise en cache sauf si ce dernier
+ détermine qu'un processus d'arrière-plan doit être appelé. La mise en
+ cache de ressources locales modifie considérablement le modèle de
+ sécurité d'Apache.</p>
+
+ <p>Comme le parcours de la hiérarchie d'un système de fichiers pour
+ examiner le contenu d'éventuels fichiers
+ <code>.htaccess</code> serait une opération très coûteuse en ressources,
+ annulant partiellement de ce fait l'intérêt de la mise en cache
+ (accélérer le traitement des requêtes),
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne se préoccupe pas de savoir s'il a
+ l'autorisation de servir une entité mise en cache. En d'autres termes,
+ si <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> a mis en cache un certain contenu, ce
+ dernier sera servi à partir du cache tant qu'il ne sera pas arrivé à
+ expiration.</p>
+
+ <p>Si par exemple, votre configuration autorise l'accès à une ressource
+ en fonction de l'adresse IP, vous devez vous assurer que ce contenu n'est
+ pas mis en cache. Ceci est possible en utilisant la directive
+ <code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code>, ou le module
+ <code class="module"><a href="./mod/mod_expires.html">mod_expires</a></code>. Livré à lui-même,
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> - pratiquement comme un mandataire inverse -
+ mettrait en cache le contenu lors de son service, et le servirait ensuite
+ à tout client, vers n'importe quelle adresse IP.</p>
+
+
+ <h3>Piratages locaux</h3>
+
+
+ <p>Etant donné que les requêtes des utilisateurs finaux peuvent être
+ servies depuis le cache, ce dernier est une cible potentielle pour ceux
+ qui veulent défigurer un contenu ou interférer avec lui. Il est important
+ de garder à l'esprit que l'utilisateur sous lequel tourne Apache doit
+ toujours avoir l'accès en écriture dans le cache. Ceci est en contraste
+ total avec la recommandation usuelle d'interdire à l'utilisateur sous
+ lequel tourne Apache
+ l'accès en écriture à tout contenu.</p>
+
+ <p>Si l'utilisateur sous lequel tourne Apache est compromis,
+ par exemple à cause d'une
+ faille de sécurité dans un processus CGI, il est possible que le cache
+ fasse l'objet d'une attaque. Il est relativement aisé d'insérer ou de
+ modifier une entité dans le cache en utilisant le module
+ <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>.</p>
+
+ <p>Cela représente un risque relativement élévé par rapport aux autres
+ types d'attaques qu'il est possible de mener sous l'utilisateur apache.
+ Si vous utilisez <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>, vous devez garder ceci
+ à l'esprit : effectuez toujours les mises à jour d'Apache quand des
+ correctifs de sécurité sont annoncés et exécutez les processus CGI sous
+ un utilisateur autre qu'apache en utilisant
+ <a href="suexec.html">suEXEC</a> dans la mesure du possible.</p>
+
+
+
+ <h3>Empoisonnement du cache (Cache Poisoning)</h3>
+
+
+ <p>Si vous utilisez Apache comme serveur mandataire avec mise en cache,
+ vous vous exposez aussi à un éventuel "Empoisonnement du
+ cache" (Cache poisoning). L'empoisonnement du cache est un terme général
+ pour désigner les attaques au cours desquelles l'attaquant fait en sorte
+ que le serveur mandataire renvoie un contenu incorrect (et souvent
+ indésirable) en provenance du serveur d'arrière plan.
+ </p>
+
+ <p>Par exemple, si les serveur DNS qu'utilise votre système où tourne
+ Apache sont vulnérables à l'empoisonnement du cache des DNS, un attaquant
+ pourra contrôler vers où Apache se connecte lorsqu'il demande un contenu
+ depuis le serveur d'origine.
+ Un autre exemple est constitué par les attaques ainsi nommées
+ "Dissimulation de requêtes HTTP" (HTTP request-smuggling).</p>
+
+ <p>Ce document n'est pas le bon endroit pour une discussion approfondie
+ à propos de la Dissimulation de requêtes HTTP (utilisez plutôt votre
+ moteur de recherche favori); il est cependant important de savoir qu'il
+ est possible d'élaborer une série de requêtes, et d'exploiter une
+ vulnérabilité d'un serveur web d'origine de telle façon que l'attaquant
+ puisse contrôler entièrement le contenu renvoyé par le mandataire.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="filehandle" id="filehandle">Mise en cache de la gestion de fichier</a></h2>
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></li><li><code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code></li><li><code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code></li></ul></td></tr></table>
+
+ <p>Le fait d'ouvrir un fichier peut en lui-même introduire un délai,
+ en particulier dans les systèmes de fichiers répartis sur le réseau. Apache
+ peut s'affranchir de ce délai en maintenant
+ un cache des descripteurs de fichiers
+ ouverts pour ce qui concerne les fichiers souvent accédés. Apache propose
+ actuellement deux implémentations différentes de mise en cache de la
+ gestion de fichier.</p>
+
+ <h3>Directive CacheFile</h3>
+
+
+ <p>La forme la plus élémentaire de mise en cache que propose Apache est
+ fournie par le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>.
+ Plutôt que de mettre en cache le contenu des fichiers, ce cache maintient
+ une table des descripteurs de fichiers ouverts. Les fichiers à mettre en
+ cache de cette manière sont spécifiés dans le fichier de configuration
+ en utilisant la directive
+ <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>.</p>
+
+ <p>La directive
+ <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code> demande à Apache
+ d'ouvrir le fichier lors de son démarrage et de réutiliser le descripteur
+ de fichier élaboré à cette occasion pour tous les
+ accès ultérieurs à ce fichier.</p>
+
+ <div class="example"><pre>CacheFile /usr/local/apache2/htdocs/index.html</pre></div>
+
+ <p>Si vous avez l'intention de mettre en cache un grand nombre de
+ fichiers de cette manière, vous devez vous assurer que le nombre maximum
+ de fichiers ouverts par votre système d'exploitation est correctement
+ défini.</p>
+
+ <p>Bien que l'utilisation de la directive
+ <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>
+ n'entraîne pas la mise en cache du contenu du fichier, cela ne signifie
+ pas qu'en cas de modification du fichier pendant l'exécution d'Apache,
+ ces changements seront pris en compte. Le fichier sera toujours servi
+ dans l'état où il était quand Apache a démarré.</p>
+
+ <p>Si le fichier est supprimé pendant l'exécution d'Apache, ce dernier
+ continuera à maintenir un descripteur de fichier ouvert et à servir le
+ fichier dans l'état où il était quand Apache a démarré. Cela signifie
+ aussi habituellement que malgré le fait que le fichier ait été supprimé,
+ et ne soit
+ plus accessible par le système de fichiers, l'espace libéré ne sera
+ restitué qu'à l'arrêt d'Apache quand le
+ descripteur de fichier sera fermé.</p>
+
+
+ <h3>Directive CacheEnable</h3>
+
+
+ <p>Le module <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code> propose aussi son propre
+ schéma de mise en cache de la gestion de fichier, qui peut être activé
+ à l'aide de la directive
+ <code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code>.</p>
+
+ <div class="example"><pre>CacheEnable fd /</pre></div>
+
+ <p>A l'instar de tout ce qui concerne le module
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, ce mode de mise en cache de la gestion de
+ fichier est intelligent, et les descripteurs ne seront plus maintenus
+ lorsque le contenu mis en cache sera arrivé à expiration.</p>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="inmemory" id="inmemory">Mise en cache en mémoire</a></h2>
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code></li><li><code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code></li><li><code class="directive"><a href="./mod/mod_file_cache.html#mmapstatic">MMapStatic</a></code></li></ul></td></tr></table>
+
+ <p>Servir un contenu directement depuis la mémoire système est
+ universellement reconnu comme la méthode la plus rapide. Lire des fichiers
+ depuis un contrôleur de disque ou pire, depuis un réseau distant est plus
+ lent de plusieurs ordres de grandeur. Les contrôleurs de disque réalisent
+ en général des opérations mécaniques, et l'accès au réseau est limité par la
+ bande passante dont vous disposez. Par contre, les temps d'accès à la
+ mémoire sont de l'ordre de la nano-seconde.</p>
+
+ <p>Cependant la mémoire système n'est pas bon marché; à capacité égale,
+ c'est de loin le type de stockage le plus coûteux et il est important de
+ s'assurer qu'elle est utilisée efficacement. Le fait de mettre en cache
+ des fichiers en mémoire diminue d'autant la quantité de mémoire système
+ disponible. Comme nous le verrons plus loin, ce n'est pas un problème en
+ soi dans le cas de la mise en cache par l'intermédiaire du système
+ d'exploitation, mais si l'on utilise la mise en cache en mémoire propre à
+ Apache, il faut prendre garde à ne pas allouer trop de mémoire au cache.
+ Sinon le système sera contraint d'utiliser le swap, ce qui dégradera
+ sensiblement les performances.</p>
+
+ <h3>Mise en cache par l'intermédiaire du système d'exploitation</h3>
+
+
+ <p>Dans la plupart des systèmes d'exploitation modernes, c'est le noyau
+ qui gère directement la mise en cache en mémoire des données relatives
+ aux fichiers. C'est une fonctionnalité puissante, et les systèmes
+ d'exploitation s'en acquittent fort bien pour la plus grande partie.
+ Considérons par exemple, dans le cas de Linux, la différence entre le
+ temps nécessaire à la première lecture d'un fichier et le temps
+ nécessaire à sa deuxième lecture;</p>
+
+ <div class="example"><pre>
+colm@coroebus:~$ time cat testfile &gt; /dev/null
+real 0m0.065s
+user 0m0.000s
+sys 0m0.001s
+colm@coroebus:~$ time cat testfile &gt; /dev/null
+real 0m0.003s
+user 0m0.003s
+sys 0m0.000s</pre></div>
+
+ <p>Même pour ce petit fichier, il y a une grande différence entre les
+ temps nécessaires pour lire le fichier. Ceci est du au fait que le
+ noyau a mis en cache le contenu du fichier en mémoire.</p>
+
+ <p>Du fait de toujours pouvoir disposer de mémoire système, vous pouvez
+ être assuré qu'il y aura de plus en plus de contenus de fichiers stockés
+ dans ce cache. Ceci peut s'avérer une méthode de mise en cache en mémoire
+ très efficace, et ne nécessite aucune configuration supplémentaire
+ d'Apache.</p>
+
+ <p>De plus, comme le système d'exploitation sait si des fichiers
+ ont été
+ supprimés ou modifiés, il peut effacer automatiquement des contenus de
+ fichiers du cache lorsque cela s'avère nécessaire. Ceci constitue un gros
+ avantage par rapport à la mise en cache en mémoire d'Apache qui n'a
+ aucune possibilité de savoir si un fichier a été modifié.</p>
+
+
+ <p>En dépit des performances et des avantages de la mise en cache
+ automatique par le système d'exploitation, la mise en cache en mémoire
+ peut être effectuée plus efficacement par Apache dans certaines
+ circonstances.</p>
+
+ <p>En premier lieu, un système d'exploitation ne peut mettre en cache que
+ les fichiers dont il a connaissance. Si vous exécutez Apache en tant que
+ serveur mandataire, les fichiers que vous mettez en cache ne sont pas
+ stockés en local mais sur un serveur distant. Si vous voulez tout de même
+ bénéficier de la vitesse incomparable procurée par la mise en cache en
+ mémoire, la mise en cache propre à Apache sera nécessaire.</p>
+
+ <h3>Mise en cache à l'aide de la directive MMapStatic</h3>
+
+
+ <p>La directive <code class="directive"><a href="./mod/mod_file_cache.html#mmapstatic">MMapStatic</a></code>
+ fournie par le module <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code> vous permet de
+ demander à Apache de charger un contenu de fichier statique en mémoire
+ lors de son démarrage (à l'aide de l'appel système mmap). Apache
+ utilisera le contenu chargé en mémoire pour satisfaire ultérieurement
+ toutes les demandes d'accès à ce fichier.</p>
+
+ <div class="example"><pre>MMapStatic /usr/local/apache2/htdocs/index.html</pre></div>
+
+ <p>Comme dans le cas de la directive
+ <code class="directive"><a href="./mod/mod_file_cache.html#cachefile">CacheFile</a></code>, toute
+ modification du fichier ne sera plus prise en compte par Apache une fois
+ ce dernier démarré.</p>
+
+ <p> La directive
+ <code class="directive"><a href="./mod/mod_file_cache.html#mmapstatic">MMapStatic</a></code> ne gardant
+ pas la trace de la quantité de mémoire qu'elle alloue, vous devez prendre
+ garde de ne pas en abuser. Chaque processus enfant d'Apache utilisant
+ sa propre réplique de la mémoire allouée, il est donc d'une importance
+ critique de s'assurer que les fichiers chargés ne sont pas d'une taille
+ trop importante afin d'épargner au système l'utilisation du swap.</p>
+
+
+ <h3>Mise en cache à l'aide du module mod_mem_cache</h3>
+
+
+ <p>Le module <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code> propose une mise en cache en
+ mémoire intelligente du point de vue du protocole HTTP. Il utilise aussi
+ directement le "tas" de la mémoire, ce qui signifie que même si
+ <var>MMap</var> n'est pas supporté par votre système,
+ <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code> pourra quand-même effectuer
+ la mise en cache.</p>
+
+ <p>La mise en cache selon cette méthode est activée comme suit :</p>
+
+ <div class="example"><pre>
+# Activation de la mise en cache en mémoire
+CacheEnable mem /
+
+# Limite la taille du cache à 1 Mégaoctet
+MCacheSize 1024</pre></div>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="disk" id="disk">Mise en cache sur disque</a></h2>
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_cache.html#cacheenable">CacheEnable</a></code></li><li><code class="directive"><a href="./mod/mod_cache.html#cachedisable">CacheDisable</a></code></li></ul></td></tr></table>
+
+ <p>Le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> fournit un mécanisme de mise
+ en cache sur disque au module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>. Comme dans le cas
+ du module <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code>, cette mise en cache est
+ intelligente et le contenu ne sera servi qu'à partir du cache tant qu'il
+ sera considéré comme valide.</p>
+
+ <p>Typiquement, le module sera configuré comme suit :</p>
+
+ <div class="example"><pre>
+CacheRoot /var/cache/apache/
+CacheEnable disk /
+CacheDirLevels 2
+CacheDirLength 1</pre></div>
+
+ <p>Il est important de savoir que, les fichiers mis en cache étant stockés
+ localement, la mise en cache par l'intermédiaire du système d'exploitation
+ sera en général aussi appliquée à leurs accès. Si bien que même si les
+ fichiers sont stockés sur disque, s'il font l'objet d'accès fréquents,
+ il est probable que le système d'exploitation s'appliquera à ce qu'ils
+ soient servis à partir de la mémoire.</p>
+
+ <h3>Comprendre le stockage dans le cache</h3>
+
+
+ <p>Pour stocker des entités dans le cache,
+ le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> crée une empreinte (hash) de 22
+ caractères de l'URL qui a fait l'objet d'une requête. Cette empreinte
+ comprend le nom d'hôte, le protocole, le port, le chemin et tout argument
+ de type CGI associé à l'URL, afin d'être sur que plusieurs URLs
+ n'interfèrent pas entre elles.</p>
+
+ <p>Chaque position de l'empreinte peut contenir un caractère
+ choisi parmi 64 caractères différents, il y a donc
+ 64^22 possibilités pour une empreinte. Par exemple, une URL peut posséder
+ l'empreinte <code>xyTGxSMO2b68mBCykqkp1w</code>. Cette empreinte est
+ utilisée pour préfixer les noms de fichiers spécifiques à cette URL à
+ l'intérieur du cache; cependant, elle est tout d'abord placée dans les
+ répertoires du cache selon les directives
+ <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code> et
+ <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>.</p>
+
+ <p>La directive
+ <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code>
+ définit le nombre de niveaux de sous-répertoires, et
+ <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>
+ le nombre de caractères composant le nom des sous-répertoires. Dans
+ l'exemple donné plus haut, l'empreinte se trouvera à :
+ <code>/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w</code>.</p>
+
+ <p>Cette technique a pour but principal de réduire le nombre de
+ sous-répertoires ou de fichiers contenus dans un répertoire particulier,
+ car le fonctionnement de la plupart des systèmes de fichiers est ralenti
+ quand ce nombre augmente. Avec la valeur "1" pour la directive
+ <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>,
+ il peut y avoir au plus 64 sous-répertoires à un niveau quelconque.
+ Avec la valeur "2", il peut y en avoir 64 * 64, etc...
+ A moins d'avoir une bonne raison pour ne pas le faire, l'utilisation de
+ la valeur "1" pour la directive
+ <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlength">CacheDirLength</a></code>
+ est recommandée.</p>
+
+ <p>Le paramétrage de la directive
+ <code class="directive"><a href="./mod/mod_disk_cache.html#cachedirlevels">CacheDirLevels</a></code>
+ dépend du nombre de fichiers que vous pensez stocker dans le cache.
+ Avec une valeur de "2" comme dans l'exemple donné plus haut,
+ 4096 sous-répertoires peuvent être créés au total. Avec 1 million de
+ fichiers dans le cache, cela équivaut à environ 245 URLs mises en cache
+ dans chaque répertoire.</p>
+
+ <p>Chaque URL nécessite au moins deux fichiers dans le cache. Ce sont en
+ général un fichier ".header", qui contient des meta-informations à propos
+ de l'URL, comme la date de son arrivée à expiration,
+ et un fichier ".data" qui est la copie exacte du contenu à servir.</p>
+
+ <p>Dans le cas d'un contenu négocié via l'en-tête "Vary", un répertoire
+ ".vary" sera créé pour l'URL en question. Ce répertoire contiendra de
+ multiples fichiers ".data" correspondant aux différents contenus
+ négociés.</p>
+
+
+ <h3>Maintenance du cache sur disque</h3>
+
+
+ <p>Bien que le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> supprime un contenu
+ du cache lorsqu'il est arrivé à expiration, il ne maintient aucune
+ information à propos de la taille totale du cache ou de l'espace restant
+ disponible.</p>
+
+ <p>Par contre l'utilitaire
+ <a href="programs/htcacheclean.html">htcacheclean</a> fourni avec Apache
+ vous permet, comme son nom l'indique, de nettoyer le cache périodiquement.
+ Déterminer la fréquence à laquelle lancer <a href="programs/htcacheclean.html">htcacheclean</a> et la taille souhaitée
+ pour le cache est une tâche relativement complexe et il vous faudra de
+ nombreux essais et erreurs pour arriver à sélectionner des valeurs
+ optimales.</p>
+
+ <p><a href="programs/htcacheclean.html">htcacheclean</a> opère selon deux
+ modes. Il peut s'exécuter comme démon résident, ou être lancé
+ périodiquement par cron. <a href="programs/htcacheclean.html">htcacheclean</a> peut mettre une heure
+ ou plus pour traiter de très grands caches (plusieurs dizaines de
+ Gigaoctets) et si vous l'exécutez à partir de cron, il vous est
+ conseillé de déterminer la durée typique d'un traitement, afin d'éviter
+ d'exécuter plusieurs instances à la fois.</p>
+
+ <p class="figure">
+ <img src="images/caching_fig1.gif" alt="" width="600" height="406" /><br />
+ <a id="figure1" name="figure1"><dfn>Figure 1</dfn></a>: Croissance
+ typique du cache / séquence de nettoyage.</p>
+
+ <p>Comme <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code> ne tient pas compte de l'espace
+ utilisé dans le cache, vous devez vous assurer que
+ <a href="programs/htcacheclean.html">htcacheclean</a> est configuré de
+ façon à laisser suffisamment d'"espace de croissance"
+ à la suite d'un nettoyage.</p>
+
+
+ </div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="./en/caching.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/caching.html" title="Français">&nbsp;fr&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/configuring.html b/docs/manual/configuring.html
index 3ec3186d..34ebcac1 100644
--- a/docs/manual/configuring.html
+++ b/docs/manual/configuring.html
@@ -6,6 +6,10 @@ URI: configuring.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+URI: configuring.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
+
URI: configuring.html.ja.euc-jp
Content-Language: ja
Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/configuring.html.de b/docs/manual/configuring.html.de
index 1d7d48d2..a279fd19 100644
--- a/docs/manual/configuring.html.de
+++ b/docs/manual/configuring.html.de
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>Verfügbare Sprachen: </span><a href="./de/configuring.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -175,6 +176,7 @@
<div class="bottomlang">
<p><span>Verfügbare Sprachen: </span><a href="./de/configuring.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/configuring.html.en b/docs/manual/configuring.html.en
index d4ebd2ca..61ace844 100644
--- a/docs/manual/configuring.html.en
+++ b/docs/manual/configuring.html.en
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>Available Languages: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -159,6 +160,7 @@ HTTP server.</p>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/configuring.html.fr b/docs/manual/configuring.html.fr
new file mode 100644
index 00000000..ae5400c7
--- /dev/null
+++ b/docs/manual/configuring.html.fr
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Fichiers de configuration - Serveur Apache HTTP</title>
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.2</p>
+<img alt="" src="./images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Fichiers de configuration</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+
+<p>Ce document décrit les fichiers utilisés pour configurer
+le Serveur HTTP Apache.</p>
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#main">Fichiers de configuration principaux</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#syntax">Syntaxe des fichiers de configuration</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#modules">Modules</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#scope">Portée des directives</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#htaccess">Fichiers .htaccess</a></li>
+</ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="main" id="main">Fichiers de configuration principaux</a></h2>
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#include">Include</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code></li></ul></td></tr></table>
+
+ <p>La configuration d'Apache est effectuée en plaçant des <a href="mod/directives.html">directives</a> dans des fichiers de
+ configuration au format texte. Le fichier de configuration principal se nomme
+ en général
+ <code>httpd.conf</code>. La localisation de ce fichier est définie
+ à la compilation, mais peut être redéfinie à l'aide de l'option
+ de ligne de commande <code>-f</code>. En outre, d'autres fichiers de
+ configuration peuvent être ajoutés à l'aide de la directive
+ <code class="directive"><a href="./mod/core.html#include">Include</a></code>, et des caractères de
+ remplacement
+ peuvent être utilisés pour inclure de nombreux fichiers de configuration.
+ Des directives de tous types peuvent être placées dans chacun de ces fichiers
+ de configuration. Les modifications dans les fichiers de configuration
+ principaux ne sont prises en compte par Apache que lorsque le serveur
+ est démarré ou redémarré.</p>
+
+ <p>Le serveur lit aussi un fichier contenant les types de document mime;
+ ce fichier est défini par la directive <code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code>,
+ et se nomme <code>mime.types</code> par défaut.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="syntax" id="syntax">Syntaxe des fichiers de configuration</a></h2>
+
+
+ <p>Les fichiers de configuration d'Apache contiennent une directive
+ par ligne.
+ On peut utiliser l'anti-slash "\" comme dernier caractère d'une ligne
+ pour indiquer que la directive continue à la ligne suivante.
+ Il ne doit y avoir aucun caractère ni espace entre l'anti-slash et
+ la fin de la ligne.</p>
+
+ <p>Les directives dans les fichiers de configuration ne sont pas
+ sensibles à la casse, mais leurs arguments le sont souvent. Les lignes
+ qui débutent par le caractère "#" sont interprétées comme des
+ commentaires, et sont ignorées. Les commentaires ne doivent
+ <strong>pas</strong> être inclus dans une ligne après une directive
+ de configuration. Les lignes vides et les espaces précédant une directive
+ sont ignorés; vous pouvez par conséquent indenter les directives
+ afin d'améliorer la lisibilité.</p>
+
+ <p>Vous pouvez vérifier l'absence d'erreurs de syntaxe dans vos fichiers
+ de configuration sans démarrer le serveur à l'aide de la commande
+ <code>apachectl configtest</code> ou de l'option de ligne de commande
+ <code>-t</code>.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="modules" id="modules">Modules</a></h2>
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>
+
+ <p>Apache est un serveur modulaire. Ceci implique que seules les
+ fonctionnalités les plus courantes sont incluses dans le serveur de base.
+ Les fonctionnalités étendues sont fournies à l'aide de <a href="mod/">modules</a> qui peuvent être chargés dans Apache.
+ Par défaut, un jeu de <a href="mod/module-dict.html#Status">modules de base</a> est inclus dans le
+ serveur à la compilation. Si le serveur est compilé de façon à utiliser
+ les <a href="dso.html">modules chargés dynamiquement</a>,
+ alors les modules peuvent être compilés séparément et chargés à
+ n'importe quel moment à l'aide de la directive
+ <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>.
+ Dans le cas contraire, Apache doit être recompilé pour ajouter ou
+ supprimer des modules.
+ Les directives de configuration peuvent être incluses de manière
+ conditionnelle selon la présence ou l'absence d'un module particulier
+ en les plaçant dans un bloc <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>.</p>
+
+ <p>Pour voir quels modules ont été compilés avec le serveur,
+ vous pouvez utiliser l'option de ligne de commande <code>-l</code>.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="scope" id="scope">Portée des directives</a></h2>
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
+
+ <p>Les directives placées dans les fichiers de configuration principaux
+ s'appliquent au serveur dans son ensemble. Si vous souhaitez modifier la
+ configuration d'une partie du serveur seulement, vous pouvez limiter la
+ portée de vos directives en les plaçant dans une section
+ <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>, ou <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>.
+ Ces sections limitent le champ d'application des directives qu'elles
+ contiennent à des URls ou des portions du système de fichiers particulières.
+ Elles peuvent aussi être imbriquées, ce qui permet
+ une configuration très fine.</p>
+
+ <p>Apache peut servir simultanément de nombreux sites web au travers des
+ <a href="vhosts/">Hôtes Virtuels</a>. La portée des directives peut ainsi
+ être limitée en les plaçant dans des sections
+ <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>,
+ afin qu'elles ne s'appliquent qu'aux requêtes
+ pour un site web particulier.</p>
+
+ <p>Bien que la plupart des directives puissent être placées dans
+ chacune de ces sections, certaines d'entre elles n'ont aucun sens
+ dans certains contextes.
+ Par exemple, les directives qui contrôlent la création des processus
+ n'ont de sens que dans le contexte du serveur principal. Pour déterminer
+ quelles directives peuvent être placées dans quelles sections, consultez
+ le <a href="mod/directive-dict.html#Context">Contexte</a> de la
+ directive. Pour plus d'informations, nous fournissons des détails dans
+ <a href="sections.html">Comment fonctionnent les sections Directory,
+ Location et Files</a>.</p>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h2>
+
+
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
+
+ <p>Apache permet la gestion décentralisée de la configuration
+ via des fichiers spéciaux placés dans l'arborescence du site web.
+ Ces fichiers spéciaux se nomment en général <code>.htaccess</code>,
+ mais tout autre nom peut être spécifié à l'aide de la directive
+ <code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code>.
+ Les directives placées dans les fichiers <code>.htaccess</code>
+ s'appliquent au répertoire dans lequel vous avez placé le fichier,
+ ainsi qu'à tous ses sous-répertoires.
+ La syntaxe des fichiers <code>.htaccess</code> est la même que celle
+ des fichiers de configuration principaux. Comme les fichiers
+ <code>.htaccess</code> sont lus à chaque requête, les modifications de
+ ces fichiers prennent effet immédiatement.</p>
+
+ <p>Pour déterminer quelles directives peuvent être placées
+ dans les fichiers <code>.htaccess</code>, consultez le
+ <a href="mod/directive-dict.html#Context">Contexte</a> de la
+ directive. L'administrateur du serveur peut contrôler quelles
+ directives peuvent être placées dans les fichiers
+ <code>.htaccess</code> en définissant la directive
+ <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>
+ dans les fichiers de configuration principaux.</p>
+
+ <p>Pour plus d'informations sur les fichiers <code>.htaccess</code>,
+ se référer au <a href="howto/htaccess.html">tutoriel .htaccess</a>.</p>
+ </div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/configuring.html.ja.euc-jp b/docs/manual/configuring.html.ja.euc-jp
index 44a53a01..fe11d1bd 100644
--- a/docs/manual/configuring.html.ja.euc-jp
+++ b/docs/manual/configuring.html.ja.euc-jp
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>Available Languages: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -163,6 +164,7 @@
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/configuring.html.ko.euc-kr b/docs/manual/configuring.html.ko.euc-kr
index f046bbee..8ce7d91c 100644
--- a/docs/manual/configuring.html.ko.euc-kr
+++ b/docs/manual/configuring.html.ko.euc-kr
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -142,6 +143,7 @@
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/content-negotiation.html b/docs/manual/content-negotiation.html
index 3fbf5ee0..02319b8d 100644
--- a/docs/manual/content-negotiation.html
+++ b/docs/manual/content-negotiation.html
@@ -2,6 +2,10 @@ URI: content-negotiation.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+URI: content-negotiation.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
+
URI: content-negotiation.html.ja.euc-jp
Content-Language: ja
Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/content-negotiation.html.en b/docs/manual/content-negotiation.html.en
index 7f4a7e99..bad0730b 100644
--- a/docs/manual/content-negotiation.html.en
+++ b/docs/manual/content-negotiation.html.en
@@ -19,6 +19,7 @@
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Content Negotiation</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="./en/content-negotiation.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -671,6 +672,7 @@ factors to 5 decimal places before choosing the best variant.</p>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./en/content-negotiation.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/content-negotiation.html.fr b/docs/manual/content-negotiation.html.fr
new file mode 100644
index 00000000..802bc966
--- /dev/null
+++ b/docs/manual/content-negotiation.html.fr
@@ -0,0 +1,705 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Négociation de contenu - Serveur Apache HTTP</title>
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.2</p>
+<img alt="" src="./images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Négociation de contenu</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+
+
+ <p>Apache supporte la négociation de contenu telle qu'elle est décrite
+ dans la spécification HTTP/1.1. Il peut choisir la meilleure représentation
+ d'une ressource en fonction des préférences du navigateur pour ce qui
+ concerne le type de media, les langages, le jeu de caractères et son
+ encodage. Il implémente aussi quelques fonctionnalités pour traiter de
+ manière plus intelligente les requêtes en provenance de navigateurs qui
+ envoient des informations de négociation incomplètes.</p>
+
+ <p>La négociation de contenu est assurée par le module
+ <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> qui est compilé par défaut
+ dans le serveur.</p>
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">À propos de la négociation de contenu</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">La négociation avec Apache</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#methods">Les méthodes de négociation</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#better">Ajustement des valeurs de qualité</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#extensions">Extensions à la négociation de contenu
+transparente</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#naming">Remarques à propos des liens hypertextes et des
+conventions de nommage</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#caching">Remarque sur la mise en cache</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#more">Pour plus d'informations</a></li>
+</ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="about" id="about">À propos de la négociation de contenu</a></h2>
+
+ <p>Une ressource peut être disponible selon différentes représentations.
+ Par exemple, elle peut être disponible en différents langages ou pour
+ différents types de média, ou une combinaison des deux.
+ Pour faire le meilleur choix, on peut fournir à l'utilisateur une page
+ d'index, et le laisser choisir. Cependant, le serveur peut souvent faire
+ ce choix automatiquement. Ceci est possible car les navigateurs peuvent
+ envoyer des informations sur les
+ représentations qu'ils préfèrent à l'intérieur de chaque requête.
+ Par exemple, un navigateur peut indiquer
+ qu'il préfère voir les informations en français, mais qu'en cas
+ d'impossibilité l'anglais peut convenir. Les navigateurs indiquent leurs
+ préférences à l'aide d'en-têtes dans la requête. Pour ne demander que des
+ représentations en français, le navigateur peut utiliser l'en-tête :</p>
+
+<div class="example"><p><code>Accept-Language: fr</code></p></div>
+
+ <p>Notez qu'il ne sera tenu compte de cette préférence que s'il existe un
+ choix de représentations et que ces dernières varient en fonction
+ du langage.</p>
+
+ <p>À titre d'exemple d'une requête plus complexe, ce navigateur a été
+ configuré pour accepter le français et l'anglais, avec une préférence pour
+ le français, et accepter différents types de média, avec une préférence
+ pour HTML par rapport au texte plat (plain text) ou autres types de fichiers texte, et
+ avec une préférence pour GIF ou JPEG par rapport à tout autre type de
+ média, mais autorisant tout autre type de média en dernier ressort :</p>
+
+<div class="example"><p><code>
+ Accept-Language: fr; q=1.0, en; q=0.5<br />
+ Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1
+</code></p></div>
+
+ <p>Apache supporte la négociation de contenu "server driven" (telle qu'elle
+ est définie dans la spécification HTTP/1.1), où c'est le serveur qui
+ décide quelle est la meilleure représentation à retourner pour la ressource
+ demandée. Il supporte entièrement les en-têtes de requête
+ <code>Accept</code>, <code>Accept-Language</code>,
+ <code>Accept-Charset</code> et <code>Accept-Encoding</code>.
+ Apache supporte aussi la négociation de contenu transparente, qui est un
+ protocole de négociation expérimental défini dans les RFC 2295 et 2296.
+ Il ne supporte pas la négociation de fonctionnalité (feature negotiation)
+ telle qu'elle est définie dans ces RFCs.</p>
+
+ <p>Une <strong>ressource</strong> est une entité conceptuelle identifiée
+ par une URI (RFC 2396). Un serveur HTTP comme Apache propose l'accès à des
+ <strong>représentations</strong> de la ressource à l'intérieur de son
+ espace de nommage, chaque représentation étant composée d'une séquence
+ d'octets avec la définition d'un type de media, d'un jeu de caractères,
+ d'un encodage, etc... A un instant donné, chaque ressource peut être
+ associée avec zéro, une ou plusieurs représentations. Si plusieurs
+ représentations sont disponibles, la ressource est qualifiée de
+ <strong>négociable</strong> et chacune de ses représentations se nomme
+ <strong>variante</strong>. Les différences entre les
+ variantes disponibles d'une ressource négociable constituent les
+ <strong>dimensions</strong> de la négociation.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="negotiation" id="negotiation">La négociation avec Apache</a></h2>
+
+ <p>Afin de négocier une ressource, on doit fournir au serveur des
+ informations à propos de chacune des variantes. Il y a deux manières
+ d'accomplir ceci :</p>
+
+ <ul>
+ <li>Utiliser une liste de correspondances de types ("type-map") (<em>c'est à dire</em>
+ un fichier <code>*.var</code>) qui nomme explicitement les fichiers
+ contenant les variantes, ou</li>
+
+ <li>Utiliser une recherche "multivues", où le serveur effectue une
+ recherche de correspondance sur un motif de nom de fichier implicite et
+ fait son choix parmi les différents résultats.</li>
+ </ul>
+
+ <h3><a name="type-map" id="type-map">Utilisation d'un fichier de
+ correspondances de types (type-map)</a></h3>
+
+ <p>Une liste de correspondances de types est un document associé au
+ gestionnaire <code>type-map</code> (ou, dans un souci de compatibilité
+ ascendante avec des configurations d'Apache plus anciennes, le
+ <a class="glossarylink" href="./glossary.html#type mime" title="see glossary">type MIME</a>
+ <code>application/x-type-map</code>). Notez que pour utiliser cette
+ fonctionnalité, vous devez, dans le fichier de configuration, définir un
+ gestionnaire qui associe un suffixe de fichier à une <code>type-map</code>;
+ ce qui se fait simplement en ajoutant</p>
+
+<div class="example"><p><code>AddHandler type-map .var</code></p></div>
+
+ <p>dans le fichier de configuration du serveur.</p>
+
+ <p>Les fichiers de correspondances de types doivent posséder le même nom que
+ la ressource qu'ils décrivent, et comporter une entrée pour chaque variante
+ disponible; chaque entrée consiste en une ligne contiguë d'en-têtes au
+ format HTTP. les entrées sont séparées par des lignes vides. Les lignes
+ vides à l'intérieur d'une entrée sont interdites. Par convention, le
+ fichier de correspondances débute par une entrée concernant l'entité
+ considérée dans son ensemble (bien que ce ne soit pas obligatoire, et
+ ignoré si présent). Un exemple de fichier de correspondance est fourni
+ ci-dessous.
+ Ce fichier doit être nommé <code>foo.var</code>, car il décrit une
+ ressource nommée <code>foo</code>.</p>
+
+<div class="example"><p><code>
+ URI: foo<br />
+<br />
+ URI: foo.en.html<br />
+ Content-type: text/html<br />
+ Content-language: en<br />
+<br />
+ URI: foo.fr.de.html<br />
+ Content-type: text/html;charset=iso-8859-2<br />
+ Content-language: fr, de<br />
+</code></p></div>
+ <p>Notez aussi qu'un fichier de correspondances de types prend le pas sur
+ les extensions de noms de fichiers, même si les Multivues sont activées.
+ Si les variantes sont de qualités différentes, on doit l'indiquer
+ à l'aide du paramètre "qs" à la suite du type de média, comme pour cette
+ image
+ (disponible aux formats JPEG, GIF, ou ASCII-art) : </p>
+
+<div class="example"><p><code>
+ URI: foo<br />
+<br />
+ URI: foo.jpeg<br />
+ Content-type: image/jpeg; qs=0.8<br />
+<br />
+ URI: foo.gif<br />
+ Content-type: image/gif; qs=0.5<br />
+<br />
+ URI: foo.txt<br />
+ Content-type: text/plain; qs=0.01<br />
+</code></p></div>
+
+ <p>Les valeurs de qs peuvent varier de 0.000 à 1.000. Notez que toute
+ variante possédant une valeur de qs de 0.000 ne sera jamais choisie.
+ Les variantes qui n'ont pas de paramètre qs défini se voient attribuer
+ une valeur de 1.0. Le paramètre qs indique la qualité relative de la
+ variante comparée à celle des autres variantes disponibles, sans tenir
+ compte des capacités du client. Par exemple, un fichier JPEG possède
+ en général une qualité supérieure à celle d'un fichier ASCII s'il
+ représente une photographie. Cependant, si la ressource représentée est
+ à un ASCII art original, la représentation ASCII sera de meilleure qualité
+ que la représentation JPEG. Ainsi une valeur de qs est associée à une
+ variante en fonction de la nature de la ressource qu'elle représente.</p>
+
+ <p>La liste complète des en-têtes reconnus est disponible dans la
+ documentation de la directive <a href="mod/mod_negotiation.html#typemaps">
+ typemap</a> (module mod_negotiation).</p>
+
+
+<h3><a name="multiviews" id="multiviews">Multivues (option Multiviews)</a></h3>
+
+ <p><code>MultiViews</code> est une option qui s'applique à un répertoire,
+ ce qui signifie qu'elle peut être activée à l'aide d'une directive
+ <code class="directive"><a href="./mod/core.html#options">Options</a></code> à l'intérieur d'une section
+ <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> ou <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> dans
+ <code>httpd.conf</code>, ou (si <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> est correctement positionnée) dans
+ des fichiers
+ <code>.htaccess</code>. Notez que <code>Options All</code>
+ n'active pas <code>MultiViews</code>; vous devez activer cette option en
+ la nommant explicitement.</p>
+
+ <p>L'effet de <code>MultiViews</code> est le suivant : si le serveur reçoit
+ une requête pour <code>/tel/répertoire/foo</code>, si
+ <code>MultiViews</code> est activée pour
+ <code>/tel/répertoire</code>, et si
+ <code>/tel/répertoire/foo</code> n'existe <em>pas</em>, le serveur parcourt
+ le répertoire à la recherche de fichiers nommés foo.*, et génère
+ une correspondance de types (type map) qui liste tous ces
+ fichiers, en leur associant les mêmes types de média et encodages de
+ contenu qu'ils auraient eu si le client avait demandé l'accès à l'un
+ d'entre eux par son nom. Il choisit ensuite ce qui correspond le mieux
+ aux besoins du client.</p>
+
+ <p><code>MultiViews</code> peut aussi s'appliquer à la recherche du fichier
+ nommé par la directive <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>, si le serveur tente d'indexer
+ un répertoire. Si les fichiers de configuration spécifient</p>
+<div class="example"><p><code>DirectoryIndex index</code></p></div>
+ <p>le serveur va choisir entre <code>index.html</code>
+ et <code>index.html3</code> si les deux fichiers sont présents. Si aucun
+ n'est présent, mais <code>index.cgi</code> existe,
+ le serveur l'exécutera.</p>
+
+ <p>Si, parcequ'elle n'est pas reconnue par <code>mod_mime</code>,
+ l'extension d'un des fichiers du répertoire ne permet pas de
+ déterminer son jeu de caractères, son type de contenu, son langage, ou son
+ encodage, alors
+ le résultat dépendra de la définition de la directive <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>. Cette directive détermine
+ si les gestionnaires (handlers), les filtres, et autres types d'extensions
+ peuvent participer à la négociation MultiVues.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="methods" id="methods">Les méthodes de négociation</a></h2>
+
+ <p>Une fois obtenue la liste des variantes pour une ressource donnée,
+ Apache dispose de deux méthodes pour choisir la meilleure variante à
+ retourner, s'il y a lieu, soit à partir d'un fichier de
+ correspondances de types, soit en se basant sur les noms de fichiers du
+ répertoire. Il n'est pas nécessaire de connaître en détails comment la
+ négociation fonctionne réellement pour pouvoir utiliser les fonctionnalités
+ de négociation de contenu d'Apache. La suite de ce document explique
+ cependant les méthodes utilisées pour ceux ou celles qui sont
+ intéressés(ées). </p>
+
+ <p>Il existe deux méthodes de négociation :</p>
+
+ <ol>
+ <li><strong>La négociation effectuée par le serveur selon l'algorithme
+ d'Apache</strong> est normalement utilisée. l'algorithme d'Apache est
+ expliqué plus en détails ci-dessous. Quand cet algorithme est utilisé,
+ Apache peut parfois "bricoler" le facteur de qualité (qs) d'une dimension
+ particulière afin d'obtenir un meilleur résultat.
+ La manière dont Apache peut modifier les facteurs de qualité est
+ expliquée plus en détails ci-dessous.</li>
+
+ <li><strong>La négociation de contenu transparente</strong> est utilisée
+ quand le navigateur le demande explicitement selon le mécanisme défini
+ dans la RFC 2295. Cette méthode de négociation donne au navigateur le
+ contrôle total du choix de la meilleure variante; le résultat dépend
+ cependant de la spécificité des algorithmes utilisés par le navigateur.
+ Au cours du processus de négociation transparente, le navigateur peut
+ demander à Apache d'exécuter l'"algorithme de sélection de variante à
+ distance" défini dans la RFC 2296.</li>
+ </ol>
+
+<h3><a name="dimensions" id="dimensions">Les dimensions de la négociation</a></h3>
+
+ <table>
+
+ <tr valign="top">
+ <th>Dimension</th>
+
+ <th>Notes</th>
+ </tr>
+
+ <tr valign="top">
+ <td>Type de média</td>
+
+ <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
+ <code>Accept</code>. Chaque type de média peut se voir associé un facteur de
+ qualité. La description de la variante peut aussi avoir un facteur de
+ qualité (le paramètre "qs").</td>
+ </tr>
+
+ <tr valign="top">
+ <td>Langage</td>
+
+ <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
+ <code>Accept-Language</code>. Chaque langue peut se voir associée un facteur de
+ qualité. Les variantes peuvent être associées avec zéro, un ou
+ plusieurs langages.</td>
+ </tr>
+
+ <tr valign="top">
+ <td>Encoding</td>
+
+ <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
+ <code>Accept-Encoding</code>. Chaque encodage peut se voir associé un facteur de
+ qualité.</td>
+ </tr>
+
+ <tr valign="top">
+ <td>Charset</td>
+
+ <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête
+ <code>Accept-Charset</code>. Chaque jeu de caractères peut se voir associé un facteur de
+ qualité. Les variantes peuvent préciser un jeu de caractères comme
+ paramètre du type de média.</td>
+ </tr>
+ </table>
+
+
+<h3><a name="algorithm" id="algorithm">L'algorithme de négociation d'Apache</a></h3>
+
+ <p>Apache peut utiliser l'algorithme suivant pour choisir la "meilleure"
+ variante (s'il y en a une) à retourner au navigateur. Cet algorithme n'est pas
+ configurable. Il fonctionne comme suit :</p>
+
+ <ol>
+ <li>En premier lieu, pour chaque dimension de la négociation, consulter
+ le champ d'en-tête <em>Accept*</em> approprié et assigner une qualité à
+ chaque variante. Si l'en-tête <em>Accept*</em> pour toute dimension
+ implique que la variante n'est pas acceptable, éliminer cette dernière.
+ S'il ne reste plus de variante, aller à l'étape 4.</li>
+
+ <li>
+ Choisir la "meilleure" variante par élimination. Chacun des tests
+ suivants est effectué dans cet ordre. Toute variante non sélectionnée
+ à l'issue d'un test est éliminée. Après chaque test, s'il reste une
+ seule variante, choisir cette dernière comme celle qui correspond le
+ mieux puis aller à l'étape 3. S'il reste plusieurs variantes, passer
+ au test suivant.
+
+ <ol>
+ <li>Multiplier le facteur de qualité de l'en-tête
+ <code>Accept</code> par le facteur de qualité "qs" pour le type de
+ média de ces variantes, et choisir la variante qui possède la valeur
+ la plus importante.</li>
+
+ <li>Sélectionner les variantes qui possèdent le facteur de qualité
+ de langage le plus haut.</li>
+
+ <li>Sélectionner les variantes dont le langage correspond le mieux,
+ en se basant sur l'ordre des langages de l'en-tête
+ <code>Accept-Language</code> (s'il existe), ou de la directive
+ <code>LanguagePriority</code> (si elle existe).</li>
+
+ <li>Sélectionner les variantes possédant le paramètre de média
+ "level" le plus élevé (utilisé pour préciser la version des types de
+ média text/html).</li>
+
+ <li>Sélectionner les variantes possédant le paramètre de média
+ "charset" (jeu de caractères) qui correspond le mieux, en se basant
+ sur la ligne d'en-tête <code>Accept-Charset</code> . Le jeu de
+ caractères ISO-8859-1 est acceptable sauf s'il est explicitement
+ exclus. Les variantes avec un type de média <code>text/*</code>
+ mais non explicitement associées avec un jeu de caractères
+ particulier sont supposées être en ISO-8859-1.</li>
+
+ <li>Sélectionner les variantes dont le paramètre de média "charset"
+ associé n'est <em>pas</em> ISO-8859-1. S'il n'en existe pas,
+ sélectionner toutes les variantes.</li>
+
+ <li>Sélectionner les variantes avec le meilleur encodage. S'il existe
+ des variantes avec un encodage acceptable pour le client,
+ sélectionner celles-ci. Sinon, s'il existe des variantes encodées et
+ des variantes non encodées, ne sélectionner que les variantes non
+ encodées. Si toutes les variantes sont encodées ou si aucune
+ ne l'est, sélectionner toutes les variantes.</li>
+
+ <li>Sélectionner les variantes dont le contenu a la longueur
+ la plus courte.</li>
+
+ <li>Sélectionner la première des variantes restantes. Il s'agira
+ soit de la première variante listée dans le fichier de
+ correspondances de types, soit, quand les variantes sont lues depuis
+ le répertoire, la première par ordre alphabétique quand elles sont
+ triées selon le code ASCII.</li>
+ </ol>
+ </li>
+
+ <li>L'algorithme a maintenant sélectionné une variante considérée comme
+ la "meilleure", il la retourne donc au client en guise de réponse.
+ L'en-tête HTTP <code>Vary</code> de la réponse est renseigné de façon à
+ indiquer les dimensions de la négociation (les navigateurs et les caches
+ peuvent utiliser cette information lors de la mise en cache de la
+ ressource). Travail terminé.</li>
+
+ <li>Le passage par cette étape signifie qu'aucune variante n'a été
+ sélectionnée (parce qu'aucune n'est acceptable pour le client HTTP).
+ Envoyer une réponse avec un code de statut 406 (qui signifie "Aucune
+ représentation acceptable") et un corps comportant un document HTML qui
+ affiche les variantes disponibles. Renseigner aussi l'en-tête HTTP
+ <code>Vary</code> de façon à indiquer les dimensions de la variante.</li>
+ </ol>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="better" id="better">Ajustement des valeurs de qualité</a></h2>
+
+ <p>Parfois Apache modifie les valeurs de qualité par rapport à celles qui
+ découleraient d'une stricte interprétation de l'algorithme de négociation
+ d'Apache ci-dessus, ceci pour améliorer les résultats de l'algorithme pour
+ les navigateurs qui envoient des informations incomplètes ou inappropriées.
+ Certains des navigateurs les plus populaires envoient des informations dans
+ l'en-tête <code>Accept</code> qui, sans ce traitement, provoqueraient la
+ sélection d'une variante inappropriée dans de nombreux cas. Quand un
+ navigateur envoie des informations complètes et correctes ces ajustements
+ ne sont pas effectués.</p>
+
+<h3><a name="wildcards" id="wildcards">Types de média et caractères génériques</a></h3>
+
+ <p>L'en-tête de requête <code>Accept:</code> indique les types de média
+ souhaités. Il peut aussi contenir des types de média avec caractères
+ génériques, comme "image/*" ou "*/*" où * correspond à n'importe quelle
+ chaîne de caractères. Ainsi une requête contenant :</p>
+
+<div class="example"><p><code>Accept: image/*, */*</code></p></div>
+
+ <p>indiquerait que tout type de média est acceptable, avec une préférence
+ pour les types commençant par "image/".
+ Certains navigateurs ajoutent par défaut des types de média avec caractères
+ génériques aux types explicitement nommés qu'ils peuvent gérer.
+ Par exemple :</p>
+
+<div class="example"><p><code>
+ Accept: text/html, text/plain, image/gif, image/jpeg, */*
+</code></p></div>
+ <p>Ceci indique que les types explicitement listés sont préférés, mais
+ qu'une représentation avec un type différent de ces derniers conviendra
+ aussi. Les valeurs de qualités explicites,
+ afin de préciser ce que veut vraiment le navigateur, s'utilisent
+ comme suit :</p>
+<div class="example"><p><code>
+ Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01
+</code></p></div>
+ <p>Les types explicites n'ont pas de facteur de qualité, la valeur par
+ défaut de leur préférence est donc de 1.0 (la plus haute). Le type avec
+ caractères génériques */* se voit attribuer une préférence basse de 0.01,
+ si bien que les types autres que ceux explicitement listés ne seront retournés
+ que s'il n'existe pas de variante correspondant à un type explicitement
+ listé.</p>
+
+ <p>Si l'en-tête <code>Accept:</code> ne contient <em>pas</em> aucun
+ facteur de qualité, Apache positionne la valeur de qualité de
+ "*/*", si present, à 0.01 pour simuler l'effet désiré. Il positionne aussi
+ la valeur de qualité des types avec caractères génériques au format
+ "type/*" à 0.02 (ils sont donc préférés à ceux correspondant à "*/*"). Si
+ un type de média dans l'en-tête <code>Accept:</code> contient un facteur de
+ qualité, ces valeurs spéciales ne seront <em>pas</em> appliquées, de façon
+ à ce que les requêtes de navigateurs qui envoient les informations
+ explicites à prendre en compte fonctionnent comme souhaité.</p>
+
+
+<h3><a name="exceptions" id="exceptions">Exceptions dans la négociation du
+langage</a></h3>
+
+ <p>A partir de la version 2.0 d'Apache, certaines exceptions ont été
+ ajoutées à l'algorithme de négociation afin de ménager une issue de secours
+ quand la négociation ne trouve aucun langage correspondant.</p>
+
+ <p>Quand un client demande une page sur votre serveur, si ce dernier ne
+ parvient pas à trouver une page dont la langue corresponde à l'en-tête
+ <code>Accept-language</code> envoyé par le navigateur, il enverra au client
+ une réponse "Aucune variante acceptable" ou "Plusieurs choix possibles".
+ Pour éviter ces
+ messages d'erreur, il est possible de configurer Apache de façon à ce que,
+ dans ces cas, il ignore l'en-tête <code>Accept-language</code> et fournisse
+ tout de même un document, même s'il ne correspond pas exactement à la
+ demande explicite du client. La directive <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code>
+ peut être utilisée pour éviter ces messages d'erreur et leur substituer une
+ page dont le langage sera déterminé en fonction du contenu de la directive
+ <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>.</p>
+
+ <p>Le serveur va aussi essayer d'étendre sa recherche de correspondance aux
+ sous-ensembles de langages quand aucune correspondance exacte ne peut être
+ trouvée. Par exemple, si un client demande des documents possédant le
+ langage <code>en-GB</code>, c'est à dire anglais britannique, le standard
+ HTTP/1.1 n'autorise normalement pas le serveur à faire correspondre cette
+ demande à un document dont le langage est simplement <code>en</code>.
+ (Notez qu'inclure <code>en-GB</code> et non <code>en</code> dans l'en-tête
+ <code>Accept-Language</code> constitue une quasi-erreur de configuration,
+ car il est très peu probable qu'un lecteur qui comprend l'anglais
+ britannique, ne comprenne pas l'anglais en général. Malheureusement, de
+ nombreux clients ont réellement des configurations par défaut de ce type.)
+ Cependant, si aucune autre correspondance de langage n'est possible, et que le
+ serveur est sur le point de retourner une erreur "Aucune variable
+ acceptable" ou de choisir le langage défini par la directive <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>, le serveur ignorera
+ la spécification du sous-ensemble de langage et associera la demande en
+ <code>en-GB</code> à des documents en <code>en</code>. Implicitement,
+ Apache ajoute le langage parent à la liste de langues acceptées par le
+ client avec une valeur de qualité très basse. Notez cependant que si le
+ client demande "en-GB; q=0.9, fr; q=0.8", et le serveur dispose de
+ documents estampillés "en" et "fr", alors c'est le document "fr" qui sera
+ retourné, tout ceci dans un souci de compatibilité avec la spécification
+ HTTP/1.1 et afin de fonctionner efficacement avec les clients
+ correctement configurés.</p>
+
+ <p>Pour supporter les techniques avancées (comme les cookies ou les chemins
+ d'URL spéciaux) afin de déterminer le langage préféré de l'utilisateur, le
+ module <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> reconnaît la
+ <a href="env.html">variable d'environnement</a>
+ <code>prefer-language</code>
+ depuis la version 2.0.47 d'Apache. Si elle est définie et contient un
+ symbole de langage approprié, <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> va essayer
+ de sélectionner une variante correspondante. S'il n'existe pas de telle
+ variante, le processus normal de négociation sera lancé.</p>
+
+ <div class="example"><h3>Exemple</h3><p><code>
+ SetEnvIf Cookie "language=(.+)" prefer-language=$1
+ Header append Vary cookie
+ </code></p></div>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="extensions" id="extensions">Extensions à la négociation de contenu
+transparente</a></h2>
+
+<p>Apache étend le protocole de négociation de contenu transparente (RFC
+2295) comme suit. Un nouvel élément <code>{encodage ..}</code> est utilisé dans
+les listes de variantes pour marquer celles qui ne sont disponibles qu'avec un
+encodage de contenu spécifique. L'implémentation de l'algorithme
+RVSA/1.0 (RFC 2296) est étendue à la reconnaissance de variantes encodées dans
+la liste, et à leur utilisation en tant que variantes candidates à partir du
+moment où leur encodage satisfait au contenu de l'en-tête de requête
+<code>Accept-Encoding</code>. L'implémentation RVSA/1.0 n'arrondit pas les
+facteurs de qualité calculés à 5 décimales avant d'avoir choisi la meilleure
+variante.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="naming" id="naming">Remarques à propos des liens hypertextes et des
+conventions de nommage</a></h2>
+
+ <p>Si vous utilisez la négociation de langage, vous avez le choix entre
+ différentes conventions de nommage, car les fichiers peuvent posséder
+ plusieurs extensions, et l'ordre dans lequel ces dernières apparaissent
+ est en général sans rapport (voir la documentation sur le module <a href="mod/mod_mime.html#multipleext">mod_mime</a>
+ pour plus de détails).</p>
+
+ <p>Un fichier type possède une extension liée au type MIME
+ (<em>par exemple</em>, <code>html</code>), mais parfois aussi une
+ extension liée à l'encodage (<em>par exemple</em>, <code>gz</code>),
+ et bien sûr une extension liée au langage
+ (<em>par exemple</em>, <code>en</code>) quand plusieurs variantes de
+ langage sont disponibles pour ce fichier.</p>
+
+ <p>Exemples :</p>
+
+ <ul>
+ <li>foo.en.html</li>
+
+ <li>foo.html.en</li>
+
+ <li>foo.en.html.gz</li>
+ </ul>
+
+ <p>Ci-dessous d'autres exemples de noms de fichiers avec des liens
+ hypertextes valides et invalides :</p>
+
+ <table class="bordered">
+
+ <tr>
+ <th>Nom fichier</th>
+
+ <th>lien valide</th>
+
+ <th>Lien invalide</th>
+ </tr>
+
+ <tr>
+ <td><em>foo.html.en</em></td>
+
+ <td>foo<br />
+ foo.html</td>
+
+ <td>-</td>
+ </tr>
+
+ <tr>
+ <td><em>foo.en.html</em></td>
+
+ <td>foo</td>
+
+ <td>foo.html</td>
+ </tr>
+
+ <tr>
+ <td><em>foo.html.en.gz</em></td>
+
+ <td>foo<br />
+ foo.html</td>
+
+ <td>foo.gz<br />
+ foo.html.gz</td>
+ </tr>
+
+ <tr>
+ <td><em>foo.en.html.gz</em></td>
+
+ <td>foo</td>
+
+ <td>foo.html<br />
+ foo.html.gz<br />
+ foo.gz</td>
+ </tr>
+
+ <tr>
+ <td><em>foo.gz.html.en</em></td>
+
+ <td>foo<br />
+ foo.gz<br />
+ foo.gz.html</td>
+
+ <td>foo.html</td>
+ </tr>
+
+ <tr>
+ <td><em>foo.html.gz.en</em></td>
+
+ <td>foo<br />
+ foo.html<br />
+ foo.html.gz</td>
+
+ <td>foo.gz</td>
+ </tr>
+ </table>
+
+ <p>En regardant la table ci-dessus, vous remarquerez qu'il est toujours
+ possible d'utiliser le nom de fichier sans extension dans un lien
+ (<em>par exemple</em>, <code>foo</code>). L'avantage est de pouvoir
+ dissimuler le type réel du fichier associé à un document et de pouvoir
+ le modifier
+ ultérieurement, <em>par exemple</em>, de <code>html</code> à
+ <code>shtml</code> ou <code>cgi</code> sans avoir à
+ mettre à jour aucun lien.</p>
+
+ <p>Si vous souhaitez continuer à utiliser un type MIME dans vos liens
+ (<em>par exemple </em> <code>foo.html</code>), l'extension liée au langage
+ (y compris une extension liée à l'encodage s'il en existe une)
+ doit se trouver à droite de l'extension liée au type MIME
+ (<em>par exemple</em>, <code>foo.html.en</code>).</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="caching" id="caching">Remarque sur la mise en cache</a></h2>
+
+ <p>Quand un cache stocke une représentation, il l'associe avec l'URL de la
+ requête. Lorsque cette URL est à nouveau demandée, le cache peut utiliser
+ la représentation stockée. Cependant, si la ressource est négociable au
+ niveau du serveur, il se peut que seule la première variante demandée soit
+ mise en cache et de ce fait, la correspondance positive du cache peut
+ entraîner une réponse inappropriée. Pour éviter ceci, Apache marque par
+ défaut toutes les réponses qui sont retournées après une négociation de
+ contenu comme "non-cachables" par les clients HTTP/1.0. Apache supporte
+ aussi les fonctionnalités du protocole HTTP/1.1 afin de permettre la mise
+ en cache des réponses négociées.</p>
+
+ <p>Pour les requêtes en provenance d'un client compatible HTTP/1.0
+ (un navigateur ou un cache), la directive <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> peut être utilisée
+ pour permettre la mise en cache des réponses qui ont fait l'objet d'une
+ négociation. Cette directive peut intervenir dans la configuration au
+ niveau du serveur ou de l'hôte virtuel, et n'accepte aucun argument. Elle
+ n'a aucun effet sur les requêtes en provenance de clients HTTP/1.1.</p>
+
+ <p>Pour les clients HTTP/1.1, Apache envoie un en-tête de réponse HTTP
+ <code>Vary</code> afin d'indiquer les dimensions de la négociation pour
+ cette réponse. Les caches peuvent
+ utiliser cette information afin de déterminer
+ si une requête peut être servie à partir de la copie locale. Pour inciter
+ un cache à utiliser la copie locale sans tenir compte des dimensions de la
+ négociation, définissez la
+ <a href="env.html#special">variable d'environnement</a>
+ <code>force-no-vary</code>.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="more" id="more">Pour plus d'informations</a></h2>
+
+ <p>Pour plus d'informations à propos de la négociation de contenu, voir le
+ document d'Alan J. Flavell <a href="http://ppewww.ph.gla.ac.uk/~flavell/www/lang-neg.html">Language
+ Negotiation Notes</a>. Mais gardez à l'esprit que ce document ne tiendra
+ peut-être pas compte des changements intervenus dans Apache 2.0.</p>
+</div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/content-negotiation.html.ja.euc-jp b/docs/manual/content-negotiation.html.ja.euc-jp
index 6c8074b1..99155d01 100644
--- a/docs/manual/content-negotiation.html.ja.euc-jp
+++ b/docs/manual/content-negotiation.html.ja.euc-jp
@@ -19,6 +19,7 @@
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.2</a></div><div id="page-content"><div id="preamble"><h1>¥³¥ó¥Æ¥ó¥È¥Í¥´¥·¥¨¡¼¥·¥ç¥ó</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/content-negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -721,6 +722,7 @@ RVSA/1.0 ¤Î¼ÂÁõ¤Ç¤Ï¡¢ºÇŬ¤Ê variant ¤¬¸«¤Ä¤«¤ë¤Þ¤Ç¡¢
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/content-negotiation.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/content-negotiation.html.ko.euc-kr b/docs/manual/content-negotiation.html.ko.euc-kr
index 84aa4a7d..aaab68c8 100644
--- a/docs/manual/content-negotiation.html.ko.euc-kr
+++ b/docs/manual/content-negotiation.html.ko.euc-kr
@@ -19,6 +19,7 @@
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>³»¿ëÇù»ó (Content Negotiation)</h1>
<div class="toplang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/content-negotiation.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -602,6 +603,7 @@ content-encodingÀ» °¡Áø º¯Çü¸¸À» ÁöĪÇÑ´Ù. RVSA/1.0 ¾Ë°í¸®ÁòÀº
</div></div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/content-negotiation.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/convenience.map b/docs/manual/convenience.map
index 61099327..6728f527 100644
--- a/docs/manual/convenience.map
+++ b/docs/manual/convenience.map
@@ -314,6 +314,7 @@ scriptlogbuffer mod/mod_cgi.html#scriptlogbuffer
scriptloglength mod/mod_cgi.html#scriptloglength
scriptsock mod/mod_cgid.html#scriptsock
securelisten mod/mod_nw_ssl.html#securelisten
+seerequesttail mod/mod_status.html#seerequesttail
sendbuffersize mod/mpm_common.html#sendbuffersize
serveradmin mod/core.html#serveradmin
serveralias mod/core.html#serveralias
@@ -329,6 +330,7 @@ setenvifnocase mod/mod_setenvif.html#setenvifnocase
sethandler mod/core.html#sethandler
setinputfilter mod/core.html#setinputfilter
setoutputfilter mod/core.html#setoutputfilter
+ssienableaccess mod/mod_include.html#ssienableaccess
ssiendtag mod/mod_include.html#ssiendtag
ssierrormsg mod/mod_include.html#ssierrormsg
ssistarttag mod/mod_include.html#ssistarttag
@@ -372,6 +374,7 @@ sslverifyclient mod/mod_ssl.html#sslverifyclient
sslverifydepth mod/mod_ssl.html#sslverifydepth
startservers mod/mpm_common.html#startservers
startthreads mod/mpm_common.html#startthreads
+substitute mod/mod_substitute.html#substitute
suexecusergroup mod/mod_suexec.html#suexecusergroup
threadlimit mod/mpm_common.html#threadlimit
threadsperchild mod/mpm_common.html#threadsperchild
diff --git a/docs/manual/developer/API.html.en b/docs/manual/developer/API.html.en
index 455390e5..180d436f 100644
--- a/docs/manual/developer/API.html.en
+++ b/docs/manual/developer/API.html.en
@@ -820,7 +820,7 @@ void *request_config; /* Notes on *this* request */</pre><p><code>
<h3>Other sorts of resources -- cleanup functions</h3>
- <p>More text goes here. Describe the the cleanup primitives in terms of
+ <p>More text goes here. Describe the cleanup primitives in terms of
which the file stuff is implemented; also, <code>spawn_process</code>.</p>
<p>Pool cleanups live until <code>clear_pool()</code> is called:
diff --git a/docs/manual/developer/documenting.html.en b/docs/manual/developer/documenting.html.en
index a03ca2e8..a06fd818 100644
--- a/docs/manual/developer/documenting.html.en
+++ b/docs/manual/developer/documenting.html.en
@@ -22,7 +22,7 @@
</div>
<p>Apache 2.0 uses <a href="http://www.doxygen.org/">Doxygen</a> to
- document the APIs and global variables in the the code. This will explain
+ document the APIs and global variables in the code. This will explain
the basics of how to document using Doxygen.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
diff --git a/docs/manual/dso.html.en b/docs/manual/dso.html.en
index 8344500c..b3ad061b 100644
--- a/docs/manual/dso.html.en
+++ b/docs/manual/dso.html.en
@@ -80,7 +80,7 @@
<div class="section">
<h2><a name="usage" id="usage">Usage Summary</a></h2>
- <p>To give you an overview of the DSO features of Apache 2.0,
+ <p>To give you an overview of the DSO features of Apache 2.x,
here is a short and concise summary:</p>
<ol>
diff --git a/docs/manual/dso.html.ja.euc-jp b/docs/manual/dso.html.ja.euc-jp
index 2b42fdc6..bad2567f 100644
--- a/docs/manual/dso.html.ja.euc-jp
+++ b/docs/manual/dso.html.ja.euc-jp
@@ -22,6 +22,8 @@
<a href="./ja/dso.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">This translation may be out of date. Check the
+ English version for recent changes.</div>
<p>Apache HTTP ¥µ¡¼¥Ð¤Ï¥â¥¸¥å¡¼¥ë²½¤µ¤ì¤¿¥×¥í¥°¥é¥à¤Ç¡¢
´ÉÍý¼Ô¤¬¥â¥¸¥å¡¼¥ë¤òÁªÂò¤¹¤ë¤³¤È¤Ç¥µ¡¼¥Ð¤ËÁȤ߹þ¤àµ¡Ç½¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
@@ -78,7 +80,7 @@
<div class="section">
<h2><a name="usage" id="usage">»ÈÍÑË¡¤Î³µÍ×</a></h2>
- <p>Apache 2.0 ¤Î DSO µ¡Ç½¤Î³µÎ¬¤òÃΤ뤳¤È¤¬¤Ç¤­¤ë¤¿¤á¤Î¡¢
+ <p>Apache 2.2 ¤Î DSO µ¡Ç½¤Î³µÎ¬¤òÃΤ뤳¤È¤¬¤Ç¤­¤ë¤¿¤á¤Î¡¢
û¤¯´Ê·é¤Ê³µÍפǤ¹:</p>
<ol>
diff --git a/docs/manual/dso.html.ko.euc-kr b/docs/manual/dso.html.ko.euc-kr
index ec8100aa..4365fb3d 100644
--- a/docs/manual/dso.html.ko.euc-kr
+++ b/docs/manual/dso.html.ko.euc-kr
@@ -77,7 +77,7 @@
<div class="section">
<h2><a name="usage" id="usage">»ç¿ë¹ý ¿ä¾à</a></h2>
- <p>Apache 2.0ÀÇ DSO ±â´É¿¡ ´ëÇÑ Âª°í °£·«ÇÑ ¿ä¾àÀÌ´Ù:</p>
+ <p>Apache 2.2ÀÇ DSO ±â´É¿¡ ´ëÇÑ Âª°í °£·«ÇÑ ¿ä¾àÀÌ´Ù:</p>
<ol>
<li>
diff --git a/docs/manual/env.html.en b/docs/manual/env.html.en
index 6b17060b..f4e32d36 100644
--- a/docs/manual/env.html.en
+++ b/docs/manual/env.html.en
@@ -261,7 +261,7 @@
<p>When set to a value of "1", this variable disables the DEFLATE
output filter provided by <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> for
content-types other than <code>text/html</code>. If you'd rather
- use statically compressed files; <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
+ use statically compressed files, <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>
evaluates the variable as well (not only for gzip, but for all
encodings that differ from "identity").</p>
diff --git a/docs/manual/glossary.html b/docs/manual/glossary.html
index 1efee972..35303ba4 100644
--- a/docs/manual/glossary.html
+++ b/docs/manual/glossary.html
@@ -10,6 +10,10 @@ URI: glossary.html.es
Content-Language: es
Content-type: text/html; charset=ISO-8859-1
+URI: glossary.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
+
URI: glossary.html.ko.euc-kr
Content-Language: ko
Content-type: text/html; charset=EUC-KR
diff --git a/docs/manual/glossary.html.de b/docs/manual/glossary.html.de
index c72d4c37..3fcc3d53 100644
--- a/docs/manual/glossary.html.de
+++ b/docs/manual/glossary.html.de
@@ -21,6 +21,7 @@
<p><span>Verfügbare Sprachen: </span><a href="./de/glossary.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<div class="outofdate">Diese Übersetzung ist möglicherweise
@@ -545,6 +546,7 @@
<p><span>Verfügbare Sprachen: </span><a href="./de/glossary.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Lizenziert unter der <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
diff --git a/docs/manual/glossary.html.en b/docs/manual/glossary.html.en
index 3f2e3b6f..0bec62e0 100644
--- a/docs/manual/glossary.html.en
+++ b/docs/manual/glossary.html.en
@@ -21,6 +21,7 @@
<p><span>Available Languages: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -448,6 +449,7 @@
<p><span>Available Languages: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
diff --git a/docs/manual/glossary.html.es b/docs/manual/glossary.html.es
index 2066c9d6..09c4f23f 100644
--- a/docs/manual/glossary.html.es
+++ b/docs/manual/glossary.html.es
@@ -21,6 +21,7 @@
<p><span>Idiomas disponibles: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<div class="outofdate">Esta traducción podría estar
@@ -388,6 +389,7 @@ SSL/TLS.<br /> Consulte: <a href="ssl/">Encriptado SSL/TLS</a></dd>
<p><span>Idiomas disponibles: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
diff --git a/docs/manual/glossary.html.fr b/docs/manual/glossary.html.fr
new file mode 100644
index 00000000..119f97ed
--- /dev/null
+++ b/docs/manual/glossary.html.fr
@@ -0,0 +1,551 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Glossaire - Serveur Apache HTTP</title>
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page" class="no-sidebar"><div id="page-header">
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.2</p>
+<img alt="" src="./images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Glossaire</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+
+ <p>Ce glossaire définit la terminologie courante relative à Apache en
+ particulier, et aux serveurs web en général. Vous trouverez plus
+ d'informations sur chaque concept dans les liens fournis.</p>
+ </div>
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="definitions" id="definitions">Définitions</a></h2>
+
+<dl>
+<dt><a name="algorithm" id="algorithm">Algorithme</a></dt>
+
+ <dd>Une formule sans ambiguité ou un jeu de règles destinées à
+ résoudre un problème en un nombre fini d'étapes. Les algorithmes de
+ chiffrement sont en général appelés
+ <dfn>Ciphers</dfn>.
+ </dd>
+
+ <dt><a name="cipher" id="cipher">Algorithme de chiffrement
+ (Cipher)</a></dt>
+ <dd>Un algorithme ou un système de chiffrement des données.
+ Quelques exemples : DES, IDEA, RC4, etc.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="tarball" id="tarball">Archive Tar (Tarball)</a></dt>
+ <dd>Un paquetage de fichiers rassemblés dans une archive
+ à l'aide de l'utilitaire <code>tar</code>.
+ Les distributions d'Apache sont stockées dans des Archives Tar compressées
+ ou en utilisant pkzip.
+ </dd>
+
+ <dt><a name="authentication" id="authentication">Authentification </a></dt>
+ <dd>L'identification formelle d'une entité du réseau comme un serveur, un
+ client, ou un utilisateur.<br />
+ Voir : <a href="howto/auth.html">Authentification, Autorisation, et
+ contrôle d'accès</a>
+ </dd>
+
+ <dt><a name="certificationauthority" id="certificationauthority">Autorité de Certification
+ (Certification Authority)</a>
+ <a name="ca" id="ca">(CA)</a></dt>
+ <dd>Un tiers de confiance habilité à signer des certificats pour des entités
+ du réseau qu'il a authentifiées selon des critères basés sur la sécurité.
+ Les autres entités du réseau peuvent alors utiliser la signature pour
+ vérifier qu'une CA a authentifié le porteur du certificat.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+
+<dt><a name="certificate" id="certificate">Certificat (Certificate)</a></dt>
+ <dd>Un ensemble de données servant à authentifier des entités du
+ réseau comme un serveur ou un client. Un certificat contient des ensembles
+ d'informations X509 à propos de son propriétaire (appelé sujet/subject)
+ et de l'<a class="glossarylink" href="./glossary.html#certificationauthority" title="see glossary">Autorité de Certification
+ (Certification Authority) ou CA</a> signataire (appelée
+ le fournisseur/issuer), ainsi que la
+ <a class="glossarylink" href="./glossary.html#publickey" title="see glossary">clé publique (public
+ key)</a> du propriétaire et la
+ signature de la CA. Les entités du réseau vérifient ces signatures
+ en utilisant les certificats des Autorités de Certification.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="publickeycryptography" id="publickeycryptography">Chiffrement à Clé Publique
+ (Public Key Cryptography)</a></dt>
+ <dd>L'étude et l'application des systèmes de chiffrement asymétriques,
+ qui utilisent une clé pour le chiffrement et une autre pour le
+ déchiffrement. Les deux clés correspondantes constituent une paire de clés.
+ Appelé aussi chiffrement asymétrique.
+ <br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="privatekey" id="privatekey">Clé Privée (Private Key)</a></dt>
+ <dd>La clé secrète dans un système de
+ <a class="glossarylink" href="./glossary.html#publickeycryptography" title="see glossary">chiffrement à clé publique</a>,
+ utilisée pour déchiffrer les messages entrants et signer
+ les messages sortants.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+<dt><a name="publickey" id="publickey">Clé Publique (Public Key)</a></dt>
+ <dd>La clé accessible au public dans un système de <a class="glossarylink" href="./glossary.html#publickeycryptography" title="see glossary">Chiffrement à clé publique</a>,
+ utilisée pour chiffrer les messages destinés uniquement à son
+ propriétaire et déchiffrer les signatures
+ faites par son propriétaire.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+<dt><a name="connect" id="connect">CONNECT</a></dt>
+ <dd>Une <a class="glossarylink" href="./glossary.html#method" title="see glossary">méthode</a> HTTP pour encapsuler
+ des données brutes dans HTTP. Elle peut aussi être utilisée pour encapsuler
+ d'autres protocoles, comme le protocole SSL.
+ </dd>
+
+ <dt><a name="context" id="context">Contexte (Context)</a></dt>
+ <dd>Une portion des <a class="glossarylink" href="./glossary.html#configurationfile" title="see glossary">
+ fichiers de configuration</a> dans laquelle certains types de
+ <a class="glossarylink" href="./glossary.html#directive" title="see glossary">directives</a> sont autorisés.<br />
+ Voir : <a href="mod/directive-dict.html#Context">Termes utilisés
+ pour décrire les directives d'Apache</a>
+ </dd>
+
+ <dt><a name="accesscontrol" id="accesscontrol">Contrôle d'accès
+ (Access Control)</a></dt>
+ <dd>La restriction d'accès à des zones du réseau. Habituellement
+ dans un contexte Apache,
+ la restriction d'accès à certaines <em>URLs</em>.<br />
+ Voir : <a href="howto/auth.html">Authentification, Autorisation et
+ Contrôle d'accès</a>
+ </dd>
+
+ <dt><a name="securesocketslayer" id="securesocketslayer">
+ Couche des Points de connexion Sécurisés
+ (Secure Sockets Layer)
+ </a> <a name="ssl" id="ssl">(SSL)</a></dt>
+ <dd>Un protocole créé par Netscape Communications Corporation pour
+ l'authentification et le chiffrement généraux des communications dans les
+ réseaux TCP/IP. L'utilisation la plus connue est <em>HTTPS</em>, autrement dit
+ le Protocole de Transfert Hypertexte (HTTP) au dessus de SSL.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="symmetriccryptophraphy" id="symmetriccryptophraphy">
+ Cryptographie Symétrique (Symmetric Cryptography)</a></dt>
+ <dd>L'étude et l'application des <em>Algorithmes de chiffrement</em> qui
+ utilisent une clé secrète unique pour les opérations de chiffrement et de
+ déchiffrement.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+
+ <dt><a name="export-crippled" id="export-crippled">
+ Dégradé pour l'exportation
+ (Export-Crippled)</a></dt>
+ <dd>Diminué en terme de puissance cryptographique (et de sécurité)
+ afin de respecter les Règles de l'Administration des Exportations
+ des Etats-Unis (Export Administration Regulations ou EAR).
+ Les logiciels de cryptographie dégradés pour l'exportation sont limités
+ à une clé de petite taille, et produisent un
+ <em>Texte crypté</em> qui peut en général être décrypté
+ par force brute.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+
+ <dt><a name="certificatsigningrequest" id="certificatsigningrequest">Demande de signature de certificat
+ (Certificate Signing Request)</a>
+ <a name="csr" id="csr">(CSR)</a></dt>
+ <dd>La soumission d'un <a class="glossarylink" href="./glossary.html#certificate" title="see glossary">certificat</a>
+ non signé à une <a class="glossarylink" href="./glossary.html#certificationauthority" title="see glossary">Autorité de
+ certification</a>, qui le signe avec la <a class="glossarylink" href="./glossary.html#privatekey" title="see glossary">Clé privée</a> de leur
+ <em>Certificat</em> de CA. Une fois le CSR signé, il devient un vrai
+ certificat.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="directive" id="directive">Directive</a></dt>
+ <dd>Une commande de configuration qui contrôle un ou plusieurs aspects du
+ comportement d'Apache. Les directives sont placées dans le <a class="glossarylink" href="./glossary.html#configurationfile" title="see glossary">Fichier de configuration</a><br />
+ Voir : <a href="mod/directives.html">Index des directives</a>
+ </dd>
+
+<dt><a name="configurationdirective" id="configurationdirective">Directive de configuration
+ (Configuration Directive)</a></dt>
+ <dd>Voir : <a class="glossarylink" href="./glossary.html#directive" title="see glossary">Directive</a></dd>
+
+ <dt><a name="header" id="header">En-tête (Header)</a></dt>
+ <dd>La partie de la requête et de la réponse
+ <a class="glossarylink" href="./glossary.html#http" title="see glossary">HTTP</a> qui est envoyée avant le contenu
+ proprement dit, et contient des méta-informations décrivant le contenu.
+ </dd>
+
+ <dt><a name="regularexpresion" id="regularexpresion">Expression Rationnelle
+ (Regular Expression)</a>
+ <a name="regex" id="regex">(Regex)</a></dt>
+ <dd>Une méthode pour décrire un modèle sous forme de texte - par exemple,
+ "tous les mots qui commencent par la lettre A" ou "tous les numéros de
+ téléphone à 10 chiffres" ou encore "Toutes les phrases contenant 2 virgules,
+ et aucun Q majuscule". Les expressions rationnelles sont très utiles dans
+ Apache car elles vous permettent d'appliquer certains attributs à des
+ ensembles de fichiers ou ressources avec une grande flexibilité
+ - par exemple, tous les fichiers .gif et .jpg situés dans tout répertoire
+ nommé "images", pourraient être enregistrés comme
+ "<code>/images/.*(jpg|gif)$</code>". Apache utilise les Expressions
+ Rationnelles Compatibles avec Perl fournies par la librairie <a href="http://www.pcre.org/">PCRE</a>.
+ </dd>
+
+ <dt><a name="configurationfile" id="configurationfile">
+ Fichier de configuration
+ (Configuration File)</a></dt>
+ <dd>Un fichier texte contenant des
+ <a class="glossarylink" href="./glossary.html#directive" title="see glossary">Directives</a>
+ qui contrôlent la configuration d'Apache.<br />
+ Voir : <a href="configuring.html">Fichiers de configuration</a>
+ </dd>
+
+ <dt><a name="filter" id="filter">Filtre (Filter)</a></dt>
+ <dd>Un traitement appliqué aux données envoyées ou reçues par le serveur.
+ Les filtres en entrée traitent les données envoyées au serveur par le
+ client, alors que les filtres en sortie traitent les documents sur le
+ serveur avant qu'ils soient envoyés au client.
+ Par exemple, le filtre en sortie
+ <code>INCLUDES</code>
+ traite les documents pour les
+ <a class="glossarylink" href="./glossary.html#ssi" title="see glossary">Server Side Includes (Inclusions côté Serveur)
+ </a>.<br />
+ Voir : <a href="filter.html">Filtres</a>
+ </dd>
+
+<dt><a name="handler" id="handler">Gestionnaire (Handler)</a></dt>
+ <dd>Une représentation interne à Apache de l'action à entreprendre
+ quand un fichier est appelé. En général, les fichiers ont des gestionnaires
+ implicites, basés sur le type de fichier. Normalement, tous les
+ fichiers sont directement servis par le serveur, mais certains
+ types de fichiers sont "gérés" séparément. Par exemple, le gestionnaire
+ <code>cgi-script</code> désigne les fichiers qui doivent être traités
+ comme <a class="glossarylink" href="./glossary.html#cgi" title="see glossary">CGIs</a>.<br />
+ Voir : <a href="handler.html">Utilisation des gestionnaires d'Apache</a>
+ </dd>
+
+ <dt><a name="hash" id="hash">Hachage (Hash)</a></dt>
+ <dd>Un algorithme mathématique à sens unique, irréversible, générant une
+ chaîne de longueur fixe à partir d'une autre chaîne de longueur quelconque.
+ Des chaînes différentes en entrée vont normalement produire des chaînes
+ différentes en sortie (selon la fonction de hachage).
+ </dd>
+
+ <dt><a name="virtualhosting" id="virtualhosting">Hébergement Virtuel
+ (Virtual Hosting)</a></dt>
+ <dd>Servir des sites web multiples en utilisant une seule instance d'Apache.
+ Les <em>Hôtes virtuels basés sur IP</em> différencient les sites web en se
+ basant sur leur adresse IP, alors que les
+ <em>Hôtes virtuels basés sur le nom</em> utilisent uniquement le nom d'hôte
+ et peuvent en conséquence héberger de nombreux sites avec la même
+ adresse IP.<br />
+ Voir la <a href="vhosts/">Documentation des Hôtes Virtuels d'Apache</a>
+ </dd>
+
+
+ <dt><a name="htaccess" id="htaccess">.htaccess</a></dt>
+ <dd>Un <a class="glossarylink" href="./glossary.html#configurationfile" title="see glossary">fichier de configuration</a>
+ placé à un certain niveau de l'arborescence du site web, et appliquant des
+ <a class="glossarylink" href="./glossary.html#directive" title="see glossary">directives</a> de configuration au
+ répertoire dans lequel il est placé, ainsi qu'à tous ses sous-répertoires.
+ En dépit de son nom, ce fichier peut contenir pratiquement tout type de
+ directive, et pas seulement des directives de contrôle d'accès.<br />
+ Voir : <a href="configuring.html">Fichiers de configuration</a>
+ </dd>
+
+<dt><a name="httpd.conf" id="httpd.conf">httpd.conf</a></dt>
+ <dd>Le <a class="glossarylink" href="./glossary.html#configurationfile" title="see glossary">fichier de configuration
+ </a> principal d'Apache. Sa localisation par défaut est
+ <code>/usr/local/apache2/conf/httpd.conf</code>, mais ceci peut être
+ changé en utilisant des options de compilation ou d'exécution.<br />
+ Voir : <a href="configuring.html">Fichiers de configuration</a>
+ </dd>
+
+ <dt><a name="https" id="https">HTTPS</a></dt>
+ <dd>Le Protocole de Transfert Hypertexte (Sécurisé), le mécanisme de
+ communication cryptée standard sur le World Wide Web.
+ Il s'agit en fait de HTTP au dessus de
+ <a class="glossarylink" href="./glossary.html#ssl" title="see glossary">SSL</a>.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="uniformresourceidentifier" id="uniformresourceidentifier">Identificateur de Ressource Uniformisé
+ (Uniform Resource Identifier)</a>
+ <a name="URI" id="URI">(URI)</a></dt>
+ <dd>Une chaîne de caractères compacte servant à identifier une ressource
+ abstraite ou physique. Elle est formellement définie par la <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>. Les URIs
+ utilisées sur le world-wide web sont souvent appelées <a class="glossarylink" href="./glossary.html#url" title="see glossary">URLs</a>.
+ </dd>
+
+ <dt><a name="serversideincludes" id="serversideincludes">
+ Inclusions Côté Serveur
+ (Server Side Includes)</a> <a name="ssi" id="ssi">(SSI)
+ </a></dt>
+ <dd>Une technique permettant d'englober des directives de traitement dans
+ des fichiers HTML.<br />
+ Voir : <a href="howto/ssi.html">Introduction aux Inclusions Côté Serveur</a>
+ </dd>
+
+<dt><a name="commongatewayinterface" id="commongatewayinterface">
+Interface commune avec les programmes externes
+(Common Gateway Interface)</a>
+ <a name="cgi" id="cgi">(CGI)</a></dt>
+ <dd>La définition standard d'une interface entre un serveur web et un
+ programme externe pour permettre à ce dernier de traiter des requêtes.
+ L'interface a été initialement définie par <a href="http://hoohoo.ncsa.uiuc.edu/cgi/overview.html">NCSA</a> mais il
+ existe aussi le projet
+ <a href="http://cgi-spec.golux.com/">RFC project</a>.<br />
+ Voir : <a href="howto/cgi.html">Contenu dynamique avec CGI</a>
+ </dd>
+
+
+ <dt><a name="apacheportableruntime" id="apacheportableruntime">Bibliothèques pour la portabilité d'Apache
+ (Apache Portable Runtime)</a> <a name="apr" id="apr">(APR)</a></dt>
+ <dd>Un jeu de bibliothèques qui fournit la plupart des interfaces de base
+ entre le serveur et le système d'exploitation. APR est développé
+ parallèlement au serveur HTTP Apache comme projet indépendant.<br />
+ Voir : <a href="http://apr.apache.org/">Apache Portable Runtime
+ Project</a>
+ </dd>
+<dt><a name="uniformresourcelocator" id="uniformresourcelocator">
+Localisation de Ressource Uniformisée
+(Uniform Resource Locator)
+ </a> <a name="url" id="url">(URL)</a></dt>
+ <dd>Le nom/adresse d'une ressource sur l'Internet. Il s'agit du terme
+ informel commun pour ce qui est formellement défini comme <a class="glossarylink" href="./glossary.html#uniformresourceidentifier" title="see glossary">
+ Identificateur de Ressource Uniformisé</a>.
+ Les URLs sont généralement construites selon un schéma, comme
+ <code>http</code> ou
+ <code>https</code>, un nom d'hôte, et un chemin. Une URL pour cette page
+ pourrait être
+ <code>http://httpd.apache.org/docs/2.2/glossary.html</code>.
+ </dd>
+
+
+ <dt><a name="proxy" id="proxy">Mandataire (Proxy)</a></dt>
+ <dd>Un serveur intermédiaire qui se situe entre le client et le
+ <em>serveur d'origine</em>.
+ Il prend en compte les requêtes des clients, les transmet au serveur
+ d'origine, puis renvoie la réponse du serveur d'origine au client.
+ Si plusieurs clients demandent le même contenu, le mandataire peut l'extraire
+ de son cache, plutôt que le demander au serveur d'origine
+ à chaque fois, ce qui réduit le temps de réponse.<br />
+ Voir : <a href="mod/mod_proxy.html">mod_proxy</a>
+ </dd>
+
+ <dt><a name="reverseproxy" id="reverseproxy">Mandataire inverse
+ (Reverse Proxy)</a></dt>
+ <dd>Un serveur <a class="glossarylink" href="./glossary.html#proxy" title="see glossary">mandataire</a> qui est vu du client
+ comme un <em>serveur d'origine</em>. Ceci peut s'avérer utile pour
+ dissimuler le serveur d'origine réel au client pour des raisons de sécurité,
+ ou pour répartir la charge.
+ </dd>
+
+ <dt><a name="method" id="method">Méthode (Method)</a></dt>
+ <dd>Dans le contexte <a class="glossarylink" href="./glossary.html#http" title="see glossary">HTTP</a>, une action à
+ effectuer sur une ressource spécifiée dans la ligne de requête
+ par le client. Parmi les méthodes disponibles dans HTTP, on trouve
+ <code>GET</code>, <code>POST</code>,
+ et <code>PUT</code>.
+ </dd>
+
+ <dt><a name="module" id="module">Module</a></dt>
+ <dd>Une partie indépendante d'un programme. De nombreuses fonctionnalités
+ d'Apache sont fournies par des modules que vous pouvez choisir d'inclure
+ ou d'exclure. Les modules qui sont compilés dans le binaire
+ <code class="program"><a href="./programs/httpd.html">httpd</a></code> sont appelés <dfn>modules statiques</dfn>, alors
+ que les modules qui existent séparément et peuvent être chargés
+ optionnellement à l'exécution sont appelés
+ <dfn>modules dynamiques</dfn> ou <a class="glossarylink" href="./glossary.html#dso" title="see glossary">DSOs</a>.
+ Les modules qui sont inclus par défaut sont appelés
+ <dfn>modules de base</dfn>. De nombreux modules disponibles pour Apache
+ ne se trouvent pas dans l'<a class="glossarylink" href="./glossary.html#tarball" title="see glossary">archive</a>
+ du Serveur HTTP Apache . Il sont appelés
+ <dfn>modules tiers</dfn>.<br />
+ Voir : <a href="mod/">Index des modules</a>
+ </dd>
+
+<dt><a name="passphrase" id="passphrase">Mot de Passe (Pass Phrase)</a></dt>
+ <dd>Le mot ou la phrase qui protège les fichiers de clés privées.
+ Il empêche les utilisateurs non autorisés de les déchiffrer. En général,
+ il s'agit simplement de la clé secrète de chiffrement/déchiffrement
+ utilisée pour les <a class="glossarylink" href="./glossary.html#cipher" title="see glossary">Algorithmes de chiffrement</a>.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="fully-qualifieddomain-name" id="fully-qualifieddomain-name">Nom de domaine entièrement qualifié
+ (Fully-Qualified Domain-Name)</a>
+ <a name="fqdn" id="fqdn">(FQDN)</a></dt>
+ <dd>Le nom unique d'une entité du réseau, comprenant un nom d'hôte et un
+ nom de domaine qui peuvent être résolus en une adresse IP. Par exemple,
+ <code>www</code> est un nom d'hôte, <code>example.com</code> est un nom
+ de domaine, et <code>www.example.com</code> est un nom de domaine
+ entièrement qualifié.
+ </dd>
+
+ <dt><a name="modulemagicnumber" id="modulemagicnumber">
+ Nombre Magique des Modules
+ (Module Magic Number)</a>
+ (<a name="mmn" id="mmn">MMN</a>)</dt>
+ <dd>Le Nombre Magique des Modules est une constante définie dans le code
+ source d'Apache et associée à la compatibilité binaire des modules.
+ Sa valeur est modifiée quand des structures internes d'Apache, des appels
+ de fonctions et d'autres parties significatives de l'API sont modifiées
+ de telle façon que la compatibilité binaire ne peut plus être garantie.
+ En cas de changement de MMN, tous les modules tiers doivent être au
+ moins recompilés, et parfois même légèrement modifiés afin de pouvoir
+ fonctionner avec la nouvelle version d'Apache.
+ </dd>
+
+ <dt><a name="dynamicsharedobject" id="dynamicsharedobject">
+ Objet Dynamique Partagé (Dynamic Shared Object)
+ </a> <a name="dso" id="dso">(DSO)</a></dt>
+ <dd><a class="glossarylink" href="./glossary.html#module" title="see glossary">Modules</a> compilés en dehors du binaire
+ Apache <code class="program"><a href="./programs/httpd.html">httpd</a></code> et qui peuvent être
+ chargés à la demande.<br />
+ Voir : <a href="dso.html">Support des objets dynamiques partagés</a>
+ </dd>
+
+<dt><a name="openssl" id="openssl">OpenSSL</a></dt>
+ <dd>L'ensemble d'outils Open Source pour SSL/TLS<br />
+ Voir <a href="http://www.openssl.org/">http://www.openssl.org/</a>#
+ </dd>
+
+<dt><a name="apacheextensiontool" id="apacheextensiontool">
+ Outil de gestion des extensions Apache
+ (APache eXtension Tool)</a>
+ <a name="apxs" id="apxs">(apxs)</a></dt>
+ <dd>Un script Perl qui aide à la compilation des sources de <a class="glossarylink" href="./glossary.html#module" title="see glossary">module</a> sous forme d'Objets Dynamiques Partagés
+ (Dynamic Shared Objects ou
+ <a class="glossarylink" href="./glossary.html#dso" title="see glossary">DSO</a>s) et facilite leur installation
+ dans le serveur Web Apache.<br />
+ Voir : Page de manuel : <code class="program"><a href="./programs/apxs.html">apxs</a></code>
+ </dd>
+
+<dt><a name="plaintext" id="plaintext">Plein Texte (Plaintext)</a></dt>
+ <dd>Le texte non chiffré.</dd>
+
+
+
+ <dt><a name="hypertexttransferprotocol" id="hypertexttransferprotocol">Protocole de Transfert Hypertexte
+ (HyperText Transfer Protocol)</a>
+ <a name="http" id="hhtp">(HTTP)</a></dt>
+ <dd>Le protocole de transmission standard utilisé sur le World Wide Web.
+ Apache implémente la version 1.1 du protocole, référencée comme HTTP/1.1 et
+ définie par la
+ <a href="http://ietf.org/rfc/rfc2616.txt">RFC 2616</a>.
+ </dd>
+
+ <dt><a name="messagedigest" id="messagedigest">Résumé de message
+ (Message Digest)</a></dt>
+ <dd>Un hachage du message, qui peut être utilisé pour vérifier
+ que son contenu n'a pas été altéré durant le transfert.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="transportlayersecurity" id="transportlayersecurity">
+ Sécurité de la couche Transport
+ (Transport Layer Security)
+ </a> <a name="tls" id="tls">(TLS)</a></dt>
+ <dd>Le protocole successeur de SSL, créé par l'Internet Engineering Task
+ Force (IETF) pour l'authentification et le chiffrement généraux des
+ communications dans les réseaux TCP/IP. TLS version 1 est pratiquement
+ identique à SSL version 3.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="session" id="session">Session</a></dt>
+ <dd>Les informations sur le contexte d'une communication en général.</dd>
+
+ <dt><a name="digitalsignature" id="digitalsignature">Signature numérique
+ (Digital Signature)</a></dt>
+ <dd>Un bloc de texte crypté qui valide un certificat ou un autre fichier.
+ Une <a class="glossarylink" href="./glossary.html#certificationauthority" title="see glossary">Autorité de certification</a>
+ crée une signature en générant une empreinte de la <em>Clé publique</em>
+ fournie avec le <em>Certificat</em>; la CA chiffre ensuite l'empreinte
+ avec sa propre <em>Clé privée</em>. Seule la clé publique de la CA
+ peut décrypter la signature, ce qui permet de vérifier que la CA a bien
+ authentifié l'entité du réseau qui possède le
+ <em>Certificat</em>.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+<dt><a name="ssleay" id="ssleay">SSLeay</a></dt>
+ <dd>La bibliothèque originelle d'implémentation de SSL/TLS développée par
+ Eric A. Young
+ </dd>
+
+<dt><a name="ciphertext" id="ciphertext">Texte crypté
+(Ciphertext)</a></dt>
+ <dd>Le résultat du passage d'un document
+ <a class="glossarylink" href="./glossary.html#plaintext" title="see glossary">Plaintext</a> (Plein texte) par un
+ <a class="glossarylink" href="./glossary.html#cipher" title="see glossary">Cipher</a>.<br />
+ Voir : <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+
+ <dt><a name="mime-type" id="mime-type">Type MIME (MIME-type)</a></dt>
+ <dd>Une méthode pour décrire le type de document transmis. Son nom
+ vient du fait que son format est issu des Multipurpose
+ Internet Mail Extensions (Extensions Multi-usages de la
+ Messagerie par Internet) . Il comprend un type majeur et un type
+ mineur, séparés par un slash (barre oblique). On trouve
+ entre autres types <code>text/html</code>,
+ <code>image/gif</code>, et <code>application/octet-stream</code>. Dans
+ HTTP, le type MIME est transmis dans l'
+ <a class="glossarylink" href="./glossary.html#header" title="see glossary">en-tête</a> <code>Content-Type</code>.<br />
+ Voir : <a href="mod/mod_mime.html">mod_mime</a>
+ </dd>
+
+
+ <dt><a name="environmentvariable" id="environmentvariable">
+ Variable d'environnement
+ (Environment Variable)</a> <a name="env-variable" id="env-variable">(env-variable)</a></dt>
+ <dd>Ce sont des variables nommées gérées par le shell du système
+ d'exploitation, et servant au stockage d'informations et à la
+ communication entre les programmes. Apache possède aussi des variables
+ internes considérées comme variables d'environnement, mais stockées dans
+ des structures internes à Apache, et non dans l'environnement
+ du shell.<br />
+ Voir : <a href="env.html">Les variables d'environnement dans Apache</a>
+ </dd>
+
+ <dt><a name="x.509" id="x.509">X.509</a></dt>
+ <dd>Une norme de certificat d'authentification recommandée par l'International
+ Telecommunication Union (ITU-T) et utilisée pour
+ l'authentification SSL/TLS.<br /> Voir :
+ <a href="ssl/">chiffrement SSL/TLS</a>
+ </dd>
+</dl>
+</div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ko/glossary.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/glossary.html.ko.euc-kr b/docs/manual/glossary.html.ko.euc-kr
index 5d624107..047655af 100644
--- a/docs/manual/glossary.html.ko.euc-kr
+++ b/docs/manual/glossary.html.ko.euc-kr
@@ -21,6 +21,7 @@
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<div class="outofdate">ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù.
@@ -357,6 +358,7 @@ ITU-T)ÀÌ ±ÇÀåÇÏ´Â ÀÎÁõ¼­ ¾ç½Ä. SSL/TLS ÀÎÁõ¿¡¼­ »ç¿ëÇÑ´Ù.<br />
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/glossary.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/glossary.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/glossary.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
+<a href="./fr/glossary.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ko/glossary.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
diff --git a/docs/manual/howto/auth.html.en b/docs/manual/howto/auth.html.en
index 7dbb2743..d682745c 100644
--- a/docs/manual/howto/auth.html.en
+++ b/docs/manual/howto/auth.html.en
@@ -349,11 +349,10 @@ person in</a></h2>
problems, you may wish to store your passwords somewhere else, such
as in a database.</p>
- <p><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>
- are two modules which make this possible. Rather than selecting
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicsource">AuthBasicSource</a></code> file,
- instead you can choose <code>dbm</code> or <code>dbd</code> as your
- storage format.</p>
+ <p><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code> are two
+ modules which make this possible. Rather than selecting <code><code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> file</code>, instead
+ you can choose <code>dbm</code> or <code>dbd</code> as your storage
+ format.</p>
<p>To select a dbd file rather than a text file, for example:</p>
@@ -377,7 +376,11 @@ person in</a></h2>
contain some more information about how this all works.
<code class="module"><a href="../mod/mod_authn_alias.html">mod_authn_alias</a></code> can also help in simplifying certain
authentication configurations.</p>
-
+
+ <p>The various ciphers supported by Apache for authentication data are
+ explained in <a href="../misc/password_encryptions.html">Password
+ Encryptions</a>.</p>
+
<p>And you may want to look at the <a href="access.html">Access
Control</a> howto, which discusses a number of related topics.</p>
diff --git a/docs/manual/index.html.fr b/docs/manual/index.html.fr
index f61be1b5..f320aa48 100644
--- a/docs/manual/index.html.fr
+++ b/docs/manual/index.html.fr
@@ -5,8 +5,8 @@
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
-<title>Documentation du Serveur HTTP Apache Version
-2.2 - Serveur Apache HTTP</title>
+<title>Documentation du Serveur HTTP Apache Version 2.2
+ - Serveur Apache HTTP</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
@@ -19,8 +19,8 @@
<div class="up"><a href="http://httpd.apache.org/docs-project/"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a></div>
-<div id="page-content"><h1>Documentation du Serveur HTTP Apache Version
-2.2</h1>
+<div id="page-content"><h1>Documentation du Serveur HTTP Apache Version 2.2
+</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="./de/" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
@@ -30,63 +30,61 @@
<a href="./ko/" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/" hreflang="pt-br" rel="alternate" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a></p>
</div>
-<div class="outofdate">Cette traduction peut être périmée. Verifiez la version
- Anglaise pour les changements récents.</div>
<form method="get" action="http://www.google.com/search"><p><input name="as_q" value="" type="text" /> <input value="Recherche Google" type="submit" /><input value="10" name="num" type="hidden" /><input value="fr" name="hl" type="hidden" /><input value="ISO-8859-1" name="ie" type="hidden" /><input value="Google Search" name="btnG" type="hidden" /><input name="as_epq" value="Version 2.2" type="hidden" /><input name="as_oq" value="" type="hidden" /><input name="as_eq" value="&quot;List-Post&quot;" type="hidden" /><input value="" name="lr" type="hidden" /><input value="i" name="as_ft" type="hidden" /><input value="" name="as_filetype" type="hidden" /><input value="all" name="as_qdr" type="hidden" /><input value="any" name="as_occt" type="hidden" /><input value="i" name="as_dt" type="hidden" /><input value="httpd.apache.org" name="as_sitesearch" type="hidden" /><input value="off" name="safe" type="hidden" /></p></form>
-<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Notes sur cette version</a></h2>
-<ul><li><a href="new_features_2_0.html">Nouvelles Fonctionnalités de la version 2.0</a></li>
-<li><a href="upgrading.html">Migrer à 2.0 depuis la version 1.3</a></li>
+<table id="indextable"><tr><td class="col1"><div class="category"><h2><a name="release" id="release">Notes de version</a></h2>
+<ul><li><a href="new_features_2_2.html">Nouvelles fonctionnalités d'Apache 2.1/2.2</a></li>
+<li><a href="new_features_2_0.html.fr">Nouvelles fonctionnalités d'Apache 2.0</a></li>
+<li><a href="upgrading.html">Mise à jour de la version 2.0 vers la version 2.2</a></li>
<li><a href="license.html">Licence Apache</a></li>
</ul>
-</div><div class="category"><h2><a name="manual" id="manual">Manuel de Référence</a></h2>
-<ul><li><a href="install.html">Compilation et Installation</a></li>
+</div><div class="category"><h2><a name="manual" id="manual">Manuel de référence</a></h2>
+<ul><li><a href="install.html">Compilation et installation</a></li>
<li><a href="invoking.html">Démarrage</a></li>
-<li><a href="stopping.html">Arrêt ou Redémarrage</a></li>
-<li><a href="mod/directives.html">Directives de Configuration à l'exécution</a></li>
-<li><a href="mod/quickreference.html">Résumé des Directives</a></li>
+<li><a href="stopping.html">Arrêt ou redémarrage</a></li>
+<li><a href="mod/directives.html">Directives de configuration à l'exécution</a></li>
+<li><a href="mod/quickreference.html">Référence rapide des directives</a></li>
<li><a href="mod/">Modules</a></li>
-<li><a href="mpm.html">Modules Multi-Processus (MPMs)</a></li>
+<li><a href="mpm.html">Modules multi-processus (MPMs)</a></li>
<li><a href="filter.html">Filtres</a></li>
-<li><a href="handler.html">Handlers</a></li>
-<li><a href="programs/">Serveur et Autres Programmes</a></li>
+<li><a href="handler.html">Gestionnaires</a></li>
+<li><a href="programs/">Le serveur et ses utilitaires</a></li>
<li><a href="glossary.html">Glossaire</a></li>
</ul>
-</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">Guide de l'Utilisateur</a></h2>
-<ul><li><a href="bind.html">Liaison</a></li>
-<li><a href="configuring.html">Fichiers de Configuration</a></li>
-<li><a href="sections.html">Configuration de Sections</a></li>
-<li><a href="content-negotiation.html">Négociation de Contenu</a></li>
-<li><a href="dso.html">Dynamic Shared Objects (DSO)</a></li>
-<li><a href="env.html">Variables d'Environnement</a></li>
-<li><a href="logs.html">Fichiers Journaux</a></li>
-<li><a href="urlmapping.html">Correspondances entre URLS et Système de Fichiers</a></li>
-<li><a href="misc/perf-tuning.html">Réglage de la Performance</a></li>
-<li><a href="misc/security_tips.html">Conseils sur la Sécurité</a></li>
-<li><a href="server-wide.html">Configuration à l'échelle du Serveur</a></li>
+</div></td><td><div class="category"><h2><a name="usersguide" id="usersguide">Guide de l'utilisateur</a></h2>
+<ul><li><a href="bind.html">Adresse IP et port d'écoute</a></li>
+<li><a href="configuring.html">Fichiers de configuration</a></li>
+<li><a href="sections.html">Sections de configuration</a></li>
+<li><a href="caching.html">Mise en cache du contenu</a></li>
+<li><a href="content-negotiation.html">Négociation sur le contenu</a></li>
+<li><a href="dso.html">Objets Dynamiques Partagés (DSO)</a></li>
+<li><a href="env.html">Variables d'environnement</a></li>
+<li><a href="logs.html">Fichiers de traces</a></li>
+<li><a href="urlmapping.html">Mise en correspondance des URLs avec le système de fichiers</a></li>
+<li><a href="misc/perf-tuning.html">Optimisation des performances</a></li>
+<li><a href="misc/security_tips.html">Conseils sur la sécurité</a></li>
+<li><a href="server-wide.html">Configuration à l'échelle du serveur</a></li>
<li><a href="ssl/">Chiffrement SSL/TLS</a></li>
-<li><a href="suexec.html">Execution Suexec des CGIs</a></li>
-<li><a href="misc/rewriteguide.html">Guide de réécriture d'URLs</a></li>
-<li><a href="vhosts/">Serveurs Virtuels</a></li>
+<li><a href="suexec.html">Exécution des CGI avec suexec</a></li>
+<li><a href="misc/rewriteguide.html">Guide de réécriture des URLs</a></li>
+<li><a href="vhosts/">Hôtes virtuels</a></li>
</ul>
-</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">Marche-à-Suivre / Tutoriels</a></h2>
-<ul><li><a href="howto/auth.html">Authentification, Autorisation, et Contrôles
- d'accès</a></li>
-<li><a href="howto/cgi.html">CGI: Contenu Dynamique</a></li>
-<li><a href="howto/htaccess.html">Fichiers .htaccess </a></li>
+</div></td><td class="col3"><div class="category"><h2><a name="howto" id="howto">Recettes / Tutoriels</a></h2>
+<ul><li><a href="howto/auth.html">Authentification, autorisation, et contrôle d'accès</a></li>
+<li><a href="howto/cgi.html">CGI: Contenu dynamique</a></li>
+<li><a href="howto/htaccess.html">Fichiers .htaccess</a></li>
<li><a href="howto/ssi.html">Server Side Includes (SSI)</a></li>
-<li><a href="howto/public_html.html">Répertoires Web par Utilisateur
- (public_html)</a></li>
+<li><a href="howto/public_html.html">Répertoires Web des utilisateurs (public_html)</a></li>
</ul>
-</div><div class="category"><h2><a name="platform" id="platform">Notes Spécifiques aux Différentes Plate-formes</a></h2>
+</div><div class="category"><h2><a name="platform" id="platform">Notes spécifiques aux différentes plateformes</a></h2>
<ul><li><a href="platform/windows.html">Microsoft Windows</a></li>
<li><a href="platform/netware.html">Novell NetWare</a></li>
-<li><a href="platform/ebcdic.html">Port EBCDIC</a></li>
+<li><a href="platform/ebcdic.html">Portage EBCDIC</a></li>
</ul>
-</div><div class="category"><h2><a name="other" id="other">Autres Sujets</a></h2>
+</div><div class="category"><h2><a name="other" id="other">Autres sujets</a></h2>
<ul><li><a href="faq/">Foire Aux Questions</a></li>
-<li><a href="sitemap.html">Plan du Site</a></li>
-<li><a href="developer/">Documentation du Developpeur</a></li>
-<li><a href="misc/">Autres Notes</a></li>
+<li><a href="sitemap.html">Plan du site</a></li>
+<li><a href="developer/">Documentation du développeur</a></li>
+<li><a href="misc/">Autres notes</a></li>
</ul>
</div></td></tr></table></div>
<div class="bottomlang">
diff --git a/docs/manual/install.html.de b/docs/manual/install.html.de
index 20f7cba3..ebe188ad 100644
--- a/docs/manual/install.html.de
+++ b/docs/manual/install.html.de
@@ -25,6 +25,9 @@
<a href="./ja/install.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">Diese Übersetzung ist möglicherweise
+ nicht mehr aktuell. Bitte prüfen Sie die englische Version auf
+ die neuesten Änderungen.</div>
<p>Dieses Dokument umfaßt nur die Kompilierung und Installation des
Apache HTTP Servers auf Unix und Unix-ähnlichen Systemen. Für die
diff --git a/docs/manual/install.html.en b/docs/manual/install.html.en
index d460574c..3ed0b881 100644
--- a/docs/manual/install.html.en
+++ b/docs/manual/install.html.en
@@ -169,9 +169,21 @@
<code>apr</code> or <code>apr-util</code>, versions 1.0 or 1.1,
are installed on your system, you must either upgrade your
<code>apr</code>/<code>apr-util</code> installations to
- 1.2, or have httpd use seperate builds. To use the bundled
- <code>apr</code>/<code>apr-util</code> sources for this
- purpose you must install them manually:
+ 1.2, force the use of the bundled libraries or have httpd use
+ separate builds. To use the bundled
+ <code>apr</code>/<code>apr-util</code> sources specify the
+ <code>--with-included-apr</code> option to configure:
+
+ <div class="note"><h3>Note</h3>
+ The --with-included-apr option was added in version 2.2.3
+ </div>
+ <div class="example"><p><code>
+ # Force the use of the bundled apr/apr-util<br />
+ ./configure --with-included-apr<br />
+ </code></p></div>
+
+ To build Apache HTTPd against a manually installed
+ <code>apr</code>/<code>apr-util</code>:
<div class="example"><p><code>
# Build and install apr 1.2<br />
cd srclib/apr<br />
diff --git a/docs/manual/install.html.fr b/docs/manual/install.html.fr
index da11875d..1407cbfa 100644
--- a/docs/manual/install.html.fr
+++ b/docs/manual/install.html.fr
@@ -173,10 +173,23 @@
<code>apr</code> ou <code>apr-util</code>, versions 1.0 ou 1.1,
sont installés sur votre système, vous devez soit mettre à jour vos
installations <code>apr</code>/<code>apr-util</code> vers la version
- 1.2, soit faire en sorte que httpd utilise des constructions séparées.
- Pour utiliser les sources incluses
- <code>apr</code>/<code>apr-util</code> de cette manière, vous devez
- les installer manuellement :
+ 1.2, forcer l'utilisation des bibliothèques intégrées,
+ soit faire en sorte que httpd utilise des constructions séparées.
+ Pour utiliser les sources de
+ <code>apr</code>/<code>apr-util</code> incluses, utilisez l'option
+ <code>--with-included-apr</code> du script configure :
+
+ <div class="note"><h3>Note</h3>
+ L'option --with-included-apr est disponible à partir
+ de la version 2.2.3
+ </div>
+ <div class="example"><p><code>
+ # Forcer l'utilisation des sources de apr/apr-util intégrées<br />
+ ./configure --with-included-apr<br />
+ </code></p></div>
+
+ Pour construire Apache HTTPd suite à une installation manuelle de
+ <code>apr</code>/<code>apr-util</code> :
<div class="example"><p><code>
# Construction et installation apr 1.2<br />
diff --git a/docs/manual/install.html.ja.euc-jp b/docs/manual/install.html.ja.euc-jp
index 875c98d4..9e806772 100644
--- a/docs/manual/install.html.ja.euc-jp
+++ b/docs/manual/install.html.ja.euc-jp
@@ -25,6 +25,8 @@
<a href="./ja/install.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/install.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">This translation may be out of date. Check the
+ English version for recent changes.</div>
<p>¤³¤Îʸ½ñ¤Ç°·¤¦ÈϰϤϡ¢Unix ¤ä Unix ¤ËÎà»÷¤·¤¿¥·¥¹¥Æ¥à¤Ç¤Î
diff --git a/docs/manual/logs.html.en b/docs/manual/logs.html.en
index 1b81db69..56de1359 100644
--- a/docs/manual/logs.html.en
+++ b/docs/manual/logs.html.en
@@ -74,8 +74,8 @@
what went wrong and how to fix it.</p>
<p>The error log is usually written to a file (typically
- <code>error_log</code> on unix systems and
- <code>error.log</code> on Windows and OS/2). On unix systems it
+ <code>error_log</code> on Unix systems and
+ <code>error.log</code> on Windows and OS/2). On Unix systems it
is also possible to have the server send errors to
<code>syslog</code> or <a href="#piped">pipe them to a
program</a>.</p>
@@ -92,11 +92,11 @@
</code></p></div>
<p>The first item in the log entry is the date and time of the
- message. The second entry lists the severity of the error being
+ message. The second item lists the severity of the error being
reported. The <code class="directive"><a href="./mod/core.html#loglevel">LogLevel</a></code>
directive is used to control the types of errors that are sent
to the error log by restricting the severity level. The third
- entry gives the IP address of the client that generated the
+ item gives the IP address of the client that generated the
error. Beyond that is the message itself, which in this case
indicates that the server has been configured to deny the
client access. The server reports the file-system path (as
@@ -117,7 +117,7 @@
file.</p>
<p>During testing, it is often useful to continuously monitor
- the error log for any problems. On unix systems, you can
+ the error log for any problems. On Unix systems, you can
accomplish this using:</p>
<div class="example"><p><code>
@@ -239,7 +239,7 @@
code for the request (see below) is 401, then this value
should not be trusted because the user is not yet
authenticated. If the document is not password protected,
- this entry will be "<code>-</code>" just like the previous
+ this part will be "<code>-</code>" just like the previous
one.</dd>
<dt><code>[10/Oct/2000:13:55:36 -0700]</code>
@@ -292,7 +292,7 @@
<dt><code>2326</code> (<code>%b</code>)</dt>
- <dd>The last entry indicates the size of the object returned
+ <dd>The last part indicates the size of the object returned
to the client, not including the response headers. If no
content was returned to the client, this value will be
"<code>-</code>". To log "<code>0</code>" for no content, use
@@ -540,7 +540,7 @@
<table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code></li><li><code class="module"><a href="./mod/mod_log_forensic.html">mod_log_forensic</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_log_forensic.html#forensiclog">ForensicLog</a></code></li><li><code class="directive"><a href="./mod/mpm_common.html#pidfile">PidFile</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritelog">RewriteLog</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlog">ScriptLog</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></code></li><li><code class="directive"><a href="./mod/mod_cgi.html#scriptloglength">ScriptLogLength</a></code></li></ul></td></tr></table>
- <h3>Logging actual bytes sent and recieved</h3>
+ <h3>Logging actual bytes sent and received</h3>
<p><code class="module"><a href="./mod/mod_logio.html">mod_logio</a></code> adds in two additional
diff --git a/docs/manual/logs.html.ja.euc-jp b/docs/manual/logs.html.ja.euc-jp
index cfa94002..db56b10b 100644
--- a/docs/manual/logs.html.ja.euc-jp
+++ b/docs/manual/logs.html.ja.euc-jp
@@ -22,6 +22,8 @@
<a href="./ja/logs.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/logs.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">This translation may be out of date. Check the
+ English version for recent changes.</div>
<p>¥¦¥§¥Ö¥µ¡¼¥Ð¤ò¸ú²ÌŪ¤Ë´ÉÍý¤¹¤ë¤¿¤á¤Ë¤Ï¡¢¥µ¡¼¥Ð¤Î³èÆ°¤ä¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¡¢
º£È¯À¸¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤ÌäÂê¤Ë´Ø¤¹¤ë¥Õ¥£¡¼¥É¥Ð¥Ã¥¯¤òÆÀ¤ë¤³¤È¤¬É¬ÍפǤ¹¡£
diff --git a/docs/manual/misc/index.html.en b/docs/manual/misc/index.html.en
index ae5c39dc..f730fd2b 100644
--- a/docs/manual/misc/index.html.en
+++ b/docs/manual/misc/index.html.en
@@ -67,6 +67,13 @@
<p>This document acts as a reference page for most of the relevant
standards that Apache follows.</p>
</dd>
+
+ <dt><a href="password_encryptions.html">Password Encryption Formats</a></dt>
+
+ <dd>
+ <p>Discussion of the various ciphers supported by Apache for
+ authentication purposes.</p>
+ </dd>
</dl>
</div>
diff --git a/docs/manual/misc/index.html.ko.euc-kr b/docs/manual/misc/index.html.ko.euc-kr
index 7aff401a..21a7359e 100644
--- a/docs/manual/misc/index.html.ko.euc-kr
+++ b/docs/manual/misc/index.html.ko.euc-kr
@@ -21,6 +21,8 @@
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/misc/" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/misc/" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù.
+ ÃÖ±Ù¿¡ º¯°æµÈ ³»¿ëÀº ¿µ¾î ¹®¼­¸¦ Âü°íÇϼ¼¿ä.</div>
<p>¾Æ·¡´Â ¾ÆÆÄÄ¡ À¥¼­¹ö °³¹ß ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ Ãß°¡ ¹®¼­
diff --git a/docs/manual/misc/password_encryptions.html b/docs/manual/misc/password_encryptions.html
new file mode 100644
index 00000000..1f357ebf
--- /dev/null
+++ b/docs/manual/misc/password_encryptions.html
@@ -0,0 +1,3 @@
+URI: password_encryptions.html.en
+Content-Language: en
+Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/misc/password_encryptions.html.en b/docs/manual/misc/password_encryptions.html.en
new file mode 100644
index 00000000..15c3d46b
--- /dev/null
+++ b/docs/manual/misc/password_encryptions.html.en
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Password Formats - Apache HTTP Server</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
+<p class="apache">Apache HTTP Server Version 2.2</p>
+<img alt="" src="../images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.2</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>Password Formats</h1>
+<div class="toplang">
+<p><span>Available Languages: </span><a href="../en/misc/password_encryptions.html" title="English">&nbsp;en&nbsp;</a></p>
+</div>
+
+ <p>Notes about the password encryption formats generated and understood by
+ Apache.</p>
+ </div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#basic">Basic Authentication</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#digest">Digest Authentication</a></li>
+</ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="basic" id="basic">Basic Authentication</a></h2>
+
+ <p>There are four formats that Apache recognizes for basic-authentication
+ passwords. Note that not all formats work on every platform:</p>
+
+ <dl>
+ <dt>PLAIN TEXT (i.e. <em>unencrypted</em>)</dt>
+ <dd>Windows, BEOS, &amp; Netware only.</dd>
+
+ <dt>CRYPT</dt>
+ <dd>Unix only. Uses the traditional Unix <code>crypt(3)</code> function
+ with a randomly-generated 32-bit salt (only 12 bits used) and the first 8
+ characters of the password.</dd>
+
+ <dt>SHA1</dt>
+ <dd>"{SHA}" + Base64-encoded SHA-1 digest of the password.</dd>
+
+ <dt>MD5</dt>
+ <dd>"$apr1$" + the result of an Apache-specific algorithm using an
+ iterated (1,000 times) MD5 digest of various combinations of a
+ randoml 32-bit salt and the password. See the APR source file
+ <a href="http://svn.apache.org/viewvc/apr/apr-util/trunk/crypto/apr_md5.c?view=markup">apr_md5.c</a>
+ for the details of the algorithm.</dd>
+ </dl>
+
+ <h3>Generating values with htpasswd</h3>
+
+ <div class="example"><h3>MD5</h3><p><code>
+ $ htpasswd -nbm myName myPassword<br />
+ myName:$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/
+ </code></p></div>
+
+ <div class="example"><h3>SHA1</h3><p><code>
+ $ htpasswd -nbs myName myPassword<br />
+ myName:{SHA}VBPuJHI7uixaa6LQGWx4s+5GKNE=
+ </code></p></div>
+
+ <div class="example"><h3>CRYPT</h3><p><code>
+ $ htpasswd -nbd myName myPassword<br />
+ myName:rqXexS6ZhobKA
+ </code></p></div>
+
+
+
+ <h3>Generating CRYPT and MD5 values with the OpenSSL
+ command-line program</h3>
+
+
+ <p>OpenSSL knows the Apache-specific MD5 algorithm.</p>
+
+ <div class="example"><h3>MD5</h3><p><code>
+ $ openssl passwd -apr1 myPassword<br />
+ $apr1$qHDFfhPC$nITSVHgYbDAK1Y0acGRnY0
+ </code></p></div>
+
+ <div class="example"><h3>CRYPT</h3><p><code>
+ openssl passwd -crypt myPassword<br />
+ qQ5vTYO3c8dsU
+ </code></p></div>
+
+
+ <h3>Validating CRYPT or MD5 passwords with the OpenSSL command
+ line program</h3>
+
+ <p>The salt for a CRYPT password is the first two characters (converted to
+ a binary value). To validate <code>myPassword</code> against
+ <code>rqXexS6ZhobKA</code></p>
+
+ <div class="example"><h3>CRYPT</h3><p><code>
+ $ openssl passwd -crypt -salt rq myPassword<br />
+ Warning: truncating password to 8 characters<br />
+ rqXexS6ZhobKA
+ </code></p></div>
+
+ <p>Note that using <code>myPasswo</code> instead of
+ <code>myPassword</code> will produce the same result because only the
+ first 8 characters of CRYPT passwords are considered.</p>
+
+ <p>The salt for an MD5 password is between <code>$apr1$</code> and the
+ following <code>$</code> (as a Base64-encoded binary value - max 8 chars)
+ To validate <code>myPassword</code> against
+ <code>$apr1$r31.....$HqJZimcKQFAMYayBlzkrA/</code></p>
+
+ <div class="example"><h3>MD5</h3><p><code>
+ $ openssl passwd -apr1 -salt r31..... myPassword<br />
+ $apr1$r31.....$HqJZimcKQFAMYayBlzkrA/
+ </code></p></div>
+
+
+ <h3>Database password fields for mod_dbd</h3>
+ <p>The SHA1 variant is probably the most useful format for DBD
+ authentication. Since the SHA1 and Base64 functions are commonly
+ available, other software can populate a database with encrypted passwords
+ that are usable by Apache basic authentication.</p>
+
+ <p>To create Apache SHA1-variant basic-authentication passwords in various
+ languages:</p>
+
+ <div class="example"><h3>PHP</h3><p><code>
+ '{SHA}' . base64_encode(sha1($password, TRUE))
+ </code></p></div>
+
+ <div class="example"><h3>Java</h3><p><code>
+ "{SHA}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes()))
+ </code></p></div>
+
+ <div class="example"><h3>ColdFusion</h3><p><code>
+ "{SHA}" &amp; ToBase64(BinaryDecode(Hash(password, "SHA1"), "Hex"))
+ </code></p></div>
+
+ <div class="example"><h3>Ruby</h3><p><code>
+ require 'digest/sha1'<br />
+ require 'base64'<br />
+ '{SHA}' + Base64.encode64(Digest::SHA1.digest(password))
+ </code></p></div>
+
+ <div class="example"><h3>C or C++</h3><p><code>
+ Use the APR function: apr_sha1_base64
+ </code></p></div>
+
+ <div class="example"><h3>PostgreSQL (with the contrib/pgcrypto functions
+ installed)</h3><p><code>
+
+ '{SHA}'||encode(digest(password,'sha1'),'base64')
+ </code></p></div>
+
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="digest" id="digest">Digest Authentication</a></h2>
+ <p>Apache recognizes one format for
+ digest-authentication passwords - the MD5 hash of the string
+ <code>user:realm:password</code> as a 32-character string of hexadecimal
+ digits. <code>realm</code> is the Authorization Realm argument to the
+ <code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> directive in
+ httpd.conf.</p>
+
+ <h3>Database password fields for mod_dbd</h3>
+
+ <p>Since the MD5 function is commonly available, other software can
+ populate a database with encrypted passwords that are usable by Apache
+ digest authentication.</p>
+
+ <p>To create Apache digest-authentication passwords in various
+ languages:</p>
+
+ <div class="example"><h3>PHP</h3><p><code>
+ md5($user . ':' . $realm . ':' .$password)
+ </code></p></div>
+
+ <div class="example"><h3>Java</h3><p><code>
+ byte b[] = java.security.MessageDigest.getInstance("MD5").digest( (user + ":" + realm + ":" + password ).getBytes());<br />
+ java.math.BigInteger bi = new java.math.BigInteger(b);<br />
+ String s = bi.toString(16);<br />
+ if (s.length() % 2 != 0)<br />
+ <span class="indent">
+ s = "0" + s;
+ </span>
+ // String s is the encrypted password
+ </code></p></div>
+
+ <div class="example"><h3>ColdFusion</h3><p><code>
+ LCase(Hash( (user &amp; ":" &amp; realm &amp; ":" &amp; password) , "MD5"))
+ </code></p></div>
+
+ <div class="example"><h3>Ruby</h3><p><code>
+ require 'digest/md5'<br />
+ Digest::MD5.hexdigest(user + ':' + realm + ':' + password)
+ </code></p></div>
+
+ <div class="example"><h3>PostgreSQL (with the contrib/pgcrypto functions installed)</h3><p><code>
+
+ encode(digest( user || ':' || realm || ':' || password , 'md5'), 'hex')
+ </code></p></div>
+
+
+ </div></div>
+<div class="bottomlang">
+<p><span>Available Languages: </span><a href="../en/misc/password_encryptions.html" title="English">&nbsp;en&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/misc/perf-tuning.html.en b/docs/manual/misc/perf-tuning.html.en
index f3141a32..fbfe64bf 100644
--- a/docs/manual/misc/perf-tuning.html.en
+++ b/docs/manual/misc/perf-tuning.html.en
@@ -23,19 +23,19 @@
</div>
- <p>Apache 2.0 is a general-purpose webserver, designed to
+ <p>Apache 2.x is a general-purpose webserver, designed to
provide a balance of flexibility, portability, and performance.
Although it has not been designed specifically to set benchmark
- records, Apache 2.0 is capable of high performance in many
+ records, Apache 2.x is capable of high performance in many
real-world situations.</p>
- <p>Compared to Apache 1.3, release 2.0 contains many additional
+ <p>Compared to Apache 1.3, release 2.x contains many additional
optimizations to increase throughput and scalability. Most of
these improvements are enabled by default. However, there are
compile-time and run-time configuration choices that can
significantly affect performance. This document describes the
options that a server administrator can configure to tune the
- performance of an Apache 2.0 installation. Some of these
+ performance of an Apache 2.x installation. Some of these
configuration options enable the httpd to better take advantage
of the capabilities of the hardware and OS, while others allow
the administrator to trade functionality for speed.</p>
@@ -122,7 +122,7 @@
from domain</code> or <code><code class="directive"><a href="../mod/mod_access.html#deny">Deny</a></code> from domain</code>
directives (i.e., using a hostname, or a domain name, rather than
an IP address) then you will pay for
- a double reverse DNS lookup (a reverse, followed by a forward
+ two DNS lookups (a reverse, followed by a forward lookup
to make sure that the reverse is not being spoofed). For best
performance, therefore, use IP addresses, rather than names, when
using these directives, if possible.</p>
@@ -270,7 +270,7 @@
- <p>In situations where Apache 2.0 needs to look at the contents
+ <p>In situations where Apache 2.x needs to look at the contents
of a file being delivered--for example, when doing server-side-include
processing--it normally memory-maps the file if the OS supports
some form of <code>mmap(2)</code>.</p>
@@ -283,7 +283,7 @@
<li>
<p>On some operating systems, <code>mmap</code> does not scale
as well as <code>read(2)</code> when the number of CPUs increases.
- On multiprocessor Solaris servers, for example, Apache 2.0 sometimes
+ On multiprocessor Solaris servers, for example, Apache 2.x sometimes
delivers server-parsed files faster when <code>mmap</code> is disabled.</p>
</li>
@@ -306,7 +306,7 @@
- <p>In situations where Apache 2.0 can ignore the contents of the file
+ <p>In situations where Apache 2.x can ignore the contents of the file
to be delivered -- for example, when serving static file content --
it normally uses the kernel sendfile support the file if the OS
supports the <code>sendfile(2)</code> operation.</p>
@@ -439,7 +439,7 @@
<p>Since memory usage is such an important consideration in
- performance, you should attempt to eliminate modules that youare
+ performance, you should attempt to eliminate modules that you are
not actually using. If you have built the modules as <a href="../dso.html">DSOs</a>, eliminating modules is a simple
matter of commenting out the associated <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive for that module.
This allows you to experiment with removing modules, and seeing
@@ -538,7 +538,7 @@
<div class="warning"><h3>Warning:</h3>
<p>This section has not been fully updated
- to take into account changes made in the 2.0 version of the
+ to take into account changes made in the 2.x version of the
Apache HTTP Server. Some of the information may still be
relevant, but please use it with care.</p>
</div>
@@ -1017,7 +1017,7 @@
<p>This <code>write(2)</code> call records the request in the
access log. Note that one thing missing from this trace is a
- <code>time(2)</code> call. Unlike Apache 1.3, Apache 2.0 uses
+ <code>time(2)</code> call. Unlike Apache 1.3, Apache 2.x uses
<code>gettimeofday(3)</code> to look up the time. On some operating
systems, like Linux or Solaris, <code>gettimeofday</code> has an
optimized implementation that doesn't require as much overhead
diff --git a/docs/manual/misc/rewriteguide.html.en b/docs/manual/misc/rewriteguide.html.en
index 32b8b01f..44b8bcd3 100644
--- a/docs/manual/misc/rewriteguide.html.en
+++ b/docs/manual/misc/rewriteguide.html.en
@@ -135,19 +135,23 @@ RewriteRule ^/([uge])/(<strong>[^/]+</strong>)$ /$1/$2<strong>/</strong> [<
<dl>
<dt>Description:</dt>
- <dd>...</dd>
+ <dd>The goal of this rule is to force the use of a particular
+ hostname, in preference to other hostnames which may be used to
+ reach the same site. For example, if you wish to force the use
+ of <strong>www.example.com</strong> instead of
+ <strong>example.com</strong>, you might use a variant of the
+ following recipe.</dd>
+
<dt>Solution:</dt>
<dd>
<div class="example"><pre>
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
-RewriteCond %{HTTP_HOST} !^$
-RewriteCond %{SERVER_PORT} !^80$
-RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
-RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
+# To force the use of
+RewriteEngine On
+RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} !^$
-RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
+RewriteRule ^/(.*) http://www.example.com/$1 [L,R]
</pre></div>
</dd>
</dl>
diff --git a/docs/manual/misc/security_tips.html.en b/docs/manual/misc/security_tips.html.en
index b726056d..5ba2cb21 100644
--- a/docs/manual/misc/security_tips.html.en
+++ b/docs/manual/misc/security_tips.html.en
@@ -131,7 +131,7 @@
<p>To isolate the damage a wayward SSI file can cause, a server
administrator can enable <a href="../suexec.html">suexec</a> as
- described in the <a href="#cgi">CGI in General</a> section</p>
+ described in the <a href="#cgi">CGI in General</a> section.</p>
<p>Enabling SSI for files with .html or .htm extensions can be
dangerous. This is especially true in a shared, or high traffic,
@@ -143,7 +143,7 @@
programs from SSI pages. To do this replace <code>Includes</code>
with <code>IncludesNOEXEC</code> in the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive. Note that users may
still use &lt;--#include virtual="..." --&gt; to execute CGI scripts if
- these scripts are in directories desginated by a <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> directive.</p>
+ these scripts are in directories designated by a <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> directive.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
@@ -280,7 +280,7 @@
<p>Pay particular attention to the interactions of <code class="directive"><a href="../mod/core.html#location">Location</a></code> and <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> directives; for instance, even
if <code>&lt;Directory /&gt;</code> denies access, a <code>
- &lt;Location /&gt;</code> directive might overturn it</p>
+ &lt;Location /&gt;</code> directive might overturn it.</p>
<p>Also be wary of playing games with the <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive; setting it to
something like "./" would have the same effect, for root, as the first
@@ -302,7 +302,7 @@
you have to check the <a href="../logs.html">Log Files</a>. Even though
the log files only reports what has already happened, they will give you
some understanding of what attacks is thrown against the server and
- allows you to check if the necessary level of security is present.</p>
+ allow you to check if the necessary level of security is present.</p>
<p>A couple of examples:</p>
diff --git a/docs/manual/mod/core.html.en b/docs/manual/mod/core.html.en
index 2deca11c..91b41252 100644
--- a/docs/manual/mod/core.html.en
+++ b/docs/manual/mod/core.html.en
@@ -123,7 +123,7 @@ available</td></tr>
</code></p></div>
<p>The <code>httpready</code> accept filter buffers entire HTTP requests at
- the kernel level. Once an entire request is recieved, the kernel then
+ the kernel level. Once an entire request is received, the kernel then
sends it to the server. See the
<a href="http://www.freebsd.org/cgi/man.cgi?query=accf_http&amp;sektion=9">
accf_http(9)</a> man page for more details. Since HTTPS requests are
@@ -146,7 +146,7 @@ available</td></tr>
<p>Using <code>none</code> for an argument will disable any accept filters
for that protocol. This is useful for protocols that require a server
send data first, such as <code>nntp</code>:</p>
- <div class="example"><p><code>AcceptFilter nttp none</code></p></div>
+ <div class="example"><p><code>AcceptFilter nntp none</code></p></div>
</div>
@@ -366,7 +366,6 @@ content-type is <code>text/plain</code> or <code>text/html</code></td></tr>
<code class="directive"><a href="#forcetype">ForceType</a></code>. Setting the
content type within a (non-nph) CGI script is also safe.</p>
- <p>The by-type output filters are never applied on proxy requests.</p>
</div>
<h3>See also</h3>
@@ -636,7 +635,7 @@ headers</td></tr>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>MIME content-type that will be sent if the
server cannot determine a type in any other way</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DefaultType <var>MIME-type</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DefaultType <var>MIME-type|none</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>DefaultType text/plain</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
@@ -646,8 +645,9 @@ server cannot determine a type in any other way</td></tr>
<p>There will be times when the server is asked to provide a
document whose type cannot be determined by its <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME types</a> mappings.</p>
- <p>The server must inform the client of the content-type of the
- document, so in the event of an unknown type it uses the
+ <p>The server SHOULD inform the client of the content-type of the
+ document. If the server is unable to determine this by normal
+ means, it will set it to the configured
<code>DefaultType</code>. For example:</p>
<div class="example"><p><code>
@@ -657,6 +657,15 @@ server cannot determine a type in any other way</td></tr>
<p>would be appropriate for a directory which contained many GIF
images with filenames missing the <code>.gif</code> extension.</p>
+ <p>In cases where it can neither be determined by the server nor
+ the administrator (e.g. a proxy), it is preferable to omit the MIME
+ type altogether rather than provide information that may be false.
+ This can be accomplished using</p>
+ <div class="example"><p><code>
+ DefaultType None
+ </code></p></div>
+ <p>DefaultType None is only available in httpd-2.2.7 and later.</p>
+
<p>Note that unlike <code class="directive"><a href="#forcetype">ForceType</a></code>, this directive only
provides the default mime-type. All other mime-type definitions,
including filename extensions, that might identify the media type
@@ -1187,6 +1196,14 @@ HTTP response header</td></tr>
the setting for that subdirectory (which will be inherited by
any sub-subdirectories that don't override it) will be equivalent to
<code>FileETag&nbsp;MTime&nbsp;Size</code>.</p>
+ <div class="warning"><h3>Warning</h3>
+ Do not change the default for directories or locations that have WebDAV
+ enabled and use <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> as a storage provider.
+ <code class="module"><a href="../mod/mod_dav_fs.html">mod_dav_fs</a></code> uses <code>INode&nbsp;MTime&nbsp;Size</code>
+ as a fixed format for <code>ETag</code> comparisons on conditional requests.
+ These conditional requests will break if the <code>ETag</code> format is
+ changed via <code class="directive">FileETag</code>.
+ </div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -3379,6 +3396,11 @@ hostname or IP address</td></tr>
to match all ports on that address. (This is recommended when used
with <code>_default_</code>.)</p>
+ <p>A <code class="directive"><a href="#servername">ServerName</a></code> should be
+ specified inside each <code class="directive">&lt;VirtualHost&gt;</code> block. If it is absent, the
+ <code class="directive"><a href="#servername">ServerName</a></code> from the "main"
+ server configuration will be inherited.</p>
+
<div class="warning"><h3>Security</h3>
<p>See the <a href="../misc/security_tips.html">security tips</a>
document for details on why your security could be compromised if the
diff --git a/docs/manual/mod/directives.html.de b/docs/manual/mod/directives.html.de
index a2eb42b6..e5acf3e8 100644
--- a/docs/manual/mod/directives.html.de
+++ b/docs/manual/mod/directives.html.de
@@ -292,6 +292,7 @@
<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
+<li><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset</a></li>
<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
@@ -346,6 +347,7 @@
<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
+<li><a href="mod_status.html#seerequesttail">SeeRequestTail</a></li>
<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
<li><a href="core.html#serveradmin">ServerAdmin</a></li>
<li><a href="core.html#serveralias">ServerAlias</a></li>
@@ -361,6 +363,7 @@
<li><a href="core.html#sethandler">SetHandler</a></li>
<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
+<li><a href="mod_include.html#ssienableaccess">SSIEnableAccess</a></li>
<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
@@ -404,6 +407,7 @@
<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
<li><a href="mpm_common.html#startservers">StartServers</a></li>
<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
+<li><a href="mod_substitute.html#substitute">Substitute</a></li>
<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
diff --git a/docs/manual/mod/directives.html.en b/docs/manual/mod/directives.html.en
index 9e7b9670..c3f9eb43 100644
--- a/docs/manual/mod/directives.html.en
+++ b/docs/manual/mod/directives.html.en
@@ -295,6 +295,7 @@
<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
+<li><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset</a></li>
<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
@@ -350,6 +351,7 @@
<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
+<li><a href="mod_status.html#seerequesttail">SeeRequestTail</a></li>
<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
<li><a href="core.html#serveradmin">ServerAdmin</a></li>
<li><a href="core.html#serveralias">ServerAlias</a></li>
@@ -365,6 +367,7 @@
<li><a href="core.html#sethandler">SetHandler</a></li>
<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
+<li><a href="mod_include.html#ssienableaccess">SSIEnableAccess</a></li>
<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
@@ -408,6 +411,7 @@
<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
<li><a href="mpm_common.html#startservers">StartServers</a></li>
<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
+<li><a href="mod_substitute.html#substitute">Substitute</a></li>
<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
diff --git a/docs/manual/mod/directives.html.es b/docs/manual/mod/directives.html.es
index 8342f26b..1c9da55c 100644
--- a/docs/manual/mod/directives.html.es
+++ b/docs/manual/mod/directives.html.es
@@ -297,6 +297,7 @@
<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
+<li><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset</a></li>
<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
@@ -352,6 +353,7 @@
<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
+<li><a href="mod_status.html#seerequesttail">SeeRequestTail</a></li>
<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
<li><a href="core.html#serveradmin">ServerAdmin</a></li>
<li><a href="core.html#serveralias">ServerAlias</a></li>
@@ -367,6 +369,7 @@
<li><a href="core.html#sethandler">SetHandler</a></li>
<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
+<li><a href="mod_include.html#ssienableaccess">SSIEnableAccess</a></li>
<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
@@ -410,6 +413,7 @@
<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
<li><a href="mpm_common.html#startservers">StartServers</a></li>
<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
+<li><a href="mod_substitute.html#substitute">Substitute</a></li>
<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
diff --git a/docs/manual/mod/directives.html.ja.euc-jp b/docs/manual/mod/directives.html.ja.euc-jp
index 91081a99..a6c8cce6 100644
--- a/docs/manual/mod/directives.html.ja.euc-jp
+++ b/docs/manual/mod/directives.html.ja.euc-jp
@@ -398,6 +398,7 @@
<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
<li><a href="mpm_common.html#startservers">StartServers</a></li>
<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
+<li><a href="mod_substitute.html#substitute">Substitute</a></li>
<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
diff --git a/docs/manual/mod/directives.html.ko.euc-kr b/docs/manual/mod/directives.html.ko.euc-kr
index e1814579..7877975a 100644
--- a/docs/manual/mod/directives.html.ko.euc-kr
+++ b/docs/manual/mod/directives.html.ko.euc-kr
@@ -287,6 +287,7 @@
<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
+<li><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset</a></li>
<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
@@ -357,6 +358,7 @@
<li><a href="core.html#sethandler">SetHandler</a></li>
<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
+<li><a href="mod_include.html#ssienableaccess">SSIEnableAccess</a></li>
<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
@@ -400,6 +402,7 @@
<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
<li><a href="mpm_common.html#startservers">StartServers</a></li>
<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
+<li><a href="mod_substitute.html#substitute">Substitute</a></li>
<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
diff --git a/docs/manual/mod/directives.html.ru.koi8-r b/docs/manual/mod/directives.html.ru.koi8-r
index 8c0e6084..e58f1980 100644
--- a/docs/manual/mod/directives.html.ru.koi8-r
+++ b/docs/manual/mod/directives.html.ru.koi8-r
@@ -294,6 +294,7 @@
<li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li>
<li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li>
<li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li>
+<li><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset</a></li>
<li><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize</a></li>
<li><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></li>
<li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li>
@@ -349,6 +350,7 @@
<li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li>
<li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li>
<li><a href="mod_nw_ssl.html#securelisten">SecureListen</a></li>
+<li><a href="mod_status.html#seerequesttail">SeeRequestTail</a></li>
<li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li>
<li><a href="core.html#serveradmin">ServerAdmin</a></li>
<li><a href="core.html#serveralias">ServerAlias</a></li>
@@ -364,6 +366,7 @@
<li><a href="core.html#sethandler">SetHandler</a></li>
<li><a href="core.html#setinputfilter">SetInputFilter</a></li>
<li><a href="core.html#setoutputfilter">SetOutputFilter</a></li>
+<li><a href="mod_include.html#ssienableaccess">SSIEnableAccess</a></li>
<li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li>
<li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li>
<li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li>
@@ -407,6 +410,7 @@
<li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li>
<li><a href="mpm_common.html#startservers">StartServers</a></li>
<li><a href="mpm_common.html#startthreads">StartThreads</a></li>
+<li><a href="mod_substitute.html#substitute">Substitute</a></li>
<li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li>
<li><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit</a></li>
<li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li>
diff --git a/docs/manual/mod/index.html.de b/docs/manual/mod/index.html.de
index 10974632..1a6028c2 100644
--- a/docs/manual/mod/index.html.de
+++ b/docs/manual/mod/index.html.de
@@ -169,6 +169,7 @@ allowing up to one misspelling</dd>
Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
<dt><a href="mod_status.html">mod_status</a></dt><dd>Provides information on server activity and
performance</dd>
+<dt><a href="mod_substitute.html">mod_substitute</a></dt><dd>Perform search and replace operations on response bodies</dd>
<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>Allows CGI scripts to run as a specified user
and Group</dd>
<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>Provides an environment variable with a unique
diff --git a/docs/manual/mod/index.html.en b/docs/manual/mod/index.html.en
index 6895a8af..bda41ed1 100644
--- a/docs/manual/mod/index.html.en
+++ b/docs/manual/mod/index.html.en
@@ -167,6 +167,7 @@ allowing up to one misspelling</dd>
Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
<dt><a href="mod_status.html">mod_status</a></dt><dd>Provides information on server activity and
performance</dd>
+<dt><a href="mod_substitute.html">mod_substitute</a></dt><dd>Perform search and replace operations on response bodies</dd>
<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>Allows CGI scripts to run as a specified user
and Group</dd>
<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>Provides an environment variable with a unique
diff --git a/docs/manual/mod/index.html.es b/docs/manual/mod/index.html.es
index 5a23d40b..1158be6e 100644
--- a/docs/manual/mod/index.html.es
+++ b/docs/manual/mod/index.html.es
@@ -170,6 +170,7 @@ allowing up to one misspelling</dd>
Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
<dt><a href="mod_status.html">mod_status</a></dt><dd>Provides information on server activity and
performance</dd>
+<dt><a href="mod_substitute.html">mod_substitute</a></dt><dd>Perform search and replace operations on response bodies</dd>
<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>Allows CGI scripts to run as a specified user
and Group</dd>
<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>Provides an environment variable with a unique
diff --git a/docs/manual/mod/index.html.ja.euc-jp b/docs/manual/mod/index.html.ja.euc-jp
index d61b2fd4..0b018465 100644
--- a/docs/manual/mod/index.html.ja.euc-jp
+++ b/docs/manual/mod/index.html.ja.euc-jp
@@ -155,6 +155,7 @@ URLs on the fly</dd>
<dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
<dt><a href="mod_status.html">mod_status</a></dt><dd>¥µ¡¼¥Ð¤Î³èÆ°¾õ¶·¤ÈÀ­Ç½¤Ë´Ø¤¹¤ë¾ðÊó¤òÄ󶡤¹¤ë</dd>
+<dt><a href="mod_substitute.html">mod_substitute</a></dt><dd>Perform search and replace operations on response bodies</dd>
<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>»ØÄꤵ¤ì¤¿¥æ¡¼¥¶¤È¥°¥ë¡¼¥×¤Ç CGI ¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë</dd>
<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>¤½¤ì¤¾¤ì¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë°ì°Õ¤Ê¼±Ê̻ҤÎÆþ¤Ã¤¿´Ä¶­ÊÑ¿ô¤ò
Ä󶡤¹¤ë</dd>
diff --git a/docs/manual/mod/index.html.ko.euc-kr b/docs/manual/mod/index.html.ko.euc-kr
index 439f8f55..84f3f3f6 100644
--- a/docs/manual/mod/index.html.ko.euc-kr
+++ b/docs/manual/mod/index.html.ko.euc-kr
@@ -150,6 +150,7 @@ URLs on the fly</dd>
<dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
Layer (SSL) and Transport Layer Security (TLS) protocols</dd>
<dt><a href="mod_status.html">mod_status</a></dt><dd>¼­¹ö È°µ¿°ú ¼º´É¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù</dd>
+<dt><a href="mod_substitute.html">mod_substitute</a></dt><dd>Perform search and replace operations on response bodies</dd>
<dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>CGI ½ºÅ©¸³Æ®¸¦ ƯÁ¤ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑÀ¸·Î ½ÇÇàÇÑ´Ù</dd>
<dt><a href="mod_unique_id.html" id="U" name="U">mod_unique_id</a></dt><dd>°¢ ¿äû¸¶´Ù À¯ÀÏÇÑ ½Äº°ÀÚ¸¦ °¡Áö´Â ȯ°æº¯¼ö¸¦
Á¦°øÇÑ´Ù</dd>
diff --git a/docs/manual/mod/mod_auth_digest.html.en b/docs/manual/mod/mod_auth_digest.html.en
index 4dcd174c..16ed805a 100644
--- a/docs/manual/mod/mod_auth_digest.html.en
+++ b/docs/manual/mod/mod_auth_digest.html.en
@@ -102,9 +102,9 @@
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="msie" id="msie">Working with MS Internet Explorer</a></h2>
- <p>The Digest authentication implementation in current Internet
- Explorer for Windows implementations has known issues, namely that
- <code>GET</code> requests with a query string are not RFC compliant.
+ <p>The Digest authentication implementation in previous Internet
+ Explorer for Windows versions (5 and 6) had issues, namely that
+ <code>GET</code> requests with a query string were not RFC compliant.
There are a few ways to work around this issue.</p>
<p>
@@ -118,13 +118,16 @@
<code>AuthDigestEnableQueryStringHack</code> environment variable.
If <code>AuthDigestEnableQueryStringHack</code> is set for the
request, Apache will take steps to work around the MSIE bug and
- remove the request URI from the digest comparison. Using this
+ remove the query string from the digest comparison. Using this
method would look similar to the following.</p>
<div class="example"><h3>Using Digest Authentication with MSIE:</h3><p><code>
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
</code></p></div>
+ <p>This workaround is not necessary for MSIE 7, though enabling it does
+ not cause any compatibility issues or significant overhead.</p>
+
<p>See the <code class="directive"><a href="../mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>
directive for more details on conditionally setting environment
variables</p>
diff --git a/docs/manual/mod/mod_authn_dbd.html.en b/docs/manual/mod/mod_authn_dbd.html.en
index d09e410e..cfe842bf 100644
--- a/docs/manual/mod/mod_authn_dbd.html.en
+++ b/docs/manual/mod/mod_authn_dbd.html.en
@@ -53,6 +53,7 @@
<h3>Topics</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#example">Configuration Example</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#exposed">Exposing Login Information</a></li>
</ul><h3>See also</h3>
<ul class="seealso">
<li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li>
@@ -103,6 +104,22 @@ DBDExptime 60</code>
<code>AuthDBDUserPWQuery "select password from authn where username = %s"
&lt;/Directory&gt;</code>
</pre></div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="exposed" id="exposed">Exposing Login Information</a></h2>
+
+<p>
+Whenever a query is made to the database server, all columns returned by
+the query are placed in the environment, using environment variables with
+the prefix "AUTHENTICATE_".
+</p>
+<p>If a database query for example returned the username, full name
+and telephone number of a user, a CGI program will have access to
+this information without the need to make a second independent database
+query to gather this additional information.</p>
+<p>This has the potential to dramatically simplify the coding and
+configuration required in some web applications.
+</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AuthDBDUserPWQuery" id="AuthDBDUserPWQuery">AuthDBDUserPWQuery</a> <a name="authdbduserpwquery" id="authdbduserpwquery">Directive</a></h2>
@@ -121,7 +138,10 @@ DBDExptime 60</code>
<div class="example"><p><code>
AuthDBDUserPWQuery "SELECT password FROM authn WHERE username = %s"
</code></p></div>
-
+ <p>If httpd was built against apr v1.3.0 or higher, any additional
+ columns specified in the select statement will be inserted into
+ the environment with the name <code>AUTHENTICATE_&lt;COLUMN&gt;</code>.
+ </p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -143,6 +163,10 @@ DBDExptime 60</code>
AuthDBDUserRealmQuery "SELECT password FROM authn
WHERE username = %s AND realm = %s"
</code></p></div>
+ <p>If httpd was built against apr v1.3.0 or higher, any additional
+ columns specified in the select statement will be inserted into
+ the environment with the name <code>AUTHENTICATE_&lt;COLUMN&gt;</code>.
+ </p>
</div>
diff --git a/docs/manual/mod/mod_authnz_ldap.html.en b/docs/manual/mod/mod_authnz_ldap.html.en
index 3d5c4ace..38708508 100644
--- a/docs/manual/mod/mod_authnz_ldap.html.en
+++ b/docs/manual/mod/mod_authnz_ldap.html.en
@@ -78,6 +78,7 @@ for HTTP Basic authentication.</td></tr>
<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#usingtls">Using TLS</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#usingssl">Using SSL</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#exposed">Exposing Login Information</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#frontpage">Using Microsoft
FrontPage with mod_authnz_ldap</a></li>
</ul><h3>See also</h3>
@@ -120,7 +121,7 @@ for HTTP Basic authentication.</td></tr>
<li><a href="#examples">Examples</a></li>
<li><a href="#usingtls">Using TLS</a></li>
<li><a href="#usingssl">Using SSL</a></li>
-
+ <li><a href="#exposed">Exposing Login Information</a></li>
<li>
<a href="#frontpage">Using Microsoft FrontPage with
<code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></a>
@@ -567,6 +568,22 @@ Require valid-user
directive, instead of <em>ldap://</em>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
+<h2><a name="exposed" id="exposed">Exposing Login Information</a></h2>
+
+ <p>Whenever a query is made to the LDAP server, all LDAP attributes
+ returned by the query are placed in the environment, using environment
+ variables with the prefix "AUTHENTICATE_".</p>
+
+ <p>If an LDAP query for example returned the username, common name
+ and telephone number of a user, a CGI program will have access to
+ this information without the need to make a second independent LDAP
+ query to gather this additional information.</p>
+
+ <p>This has the potential to dramatically simplify the coding and
+ configuration required in some web applications.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
<h2><a name="frontpage" id="frontpage">Using Microsoft
FrontPage with mod_authnz_ldap</a></h2>
diff --git a/docs/manual/mod/mod_authz_dbm.html.en b/docs/manual/mod/mod_authz_dbm.html.en
index 97b08a45..7d7127bb 100644
--- a/docs/manual/mod/mod_authz_dbm.html.en
+++ b/docs/manual/mod/mod_authz_dbm.html.en
@@ -122,7 +122,7 @@ modules</td></tr>
directive explicitly to <code>Off</code> allows group authorization
to be passed on to lower level modules (as defined in the
<code>modules.c</code> file) if there is no group found
- for the the supplied userID. If there are any groups
+ for the supplied userID. If there are any groups
specified, the usual checks will be applied and a failure will
give an Authentication Required reply.</p>
diff --git a/docs/manual/mod/mod_cache.html.en b/docs/manual/mod/mod_cache.html.en
index 9e53dcb9..97d607ea 100644
--- a/docs/manual/mod/mod_cache.html.en
+++ b/docs/manual/mod/mod_cache.html.en
@@ -338,6 +338,7 @@ header.</td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_cache</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.2.6 and later</td></tr>
</table>
<p>Ordinarily, requests with query string parameters are cached separately
for each unique query string. This is according to RFC 2616/13.9 done only
diff --git a/docs/manual/mod/mod_dbd.html.en b/docs/manual/mod/mod_dbd.html.en
index 1745c7a0..c6060b72 100644
--- a/docs/manual/mod/mod_dbd.html.en
+++ b/docs/manual/mod/mod_dbd.html.en
@@ -53,6 +53,9 @@
<li><img alt="" src="../images/down.gif" /> <a href="#pooling">Connection Pooling</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#API">Apache DBD API</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#prepared">SQL Prepared Statements</a></li>
+</ul><h3>See also</h3>
+<ul class="seealso">
+<li><a href="../misc/password_encryptions.html">Password Formats</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
diff --git a/docs/manual/mod/mod_include.html.en b/docs/manual/mod/mod_include.html.en
index d3c5c428..f4127334 100644
--- a/docs/manual/mod/mod_include.html.en
+++ b/docs/manual/mod/mod_include.html.en
@@ -41,6 +41,7 @@
</div>
<div id="quickview"><h3 class="directives">Directives</h3>
<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#ssienableaccess">SSIEnableAccess</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#ssiendtag">SSIEndTag</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#ssierrormsg">SSIErrorMsg</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#ssistarttag">SSIStartTag</a></li>
@@ -513,6 +514,25 @@
<dt><code><var>string</var></code></dt>
<dd>true if <var>string</var> is not empty</dd>
+ <dt><code><var>-A string</var></code></dt>
+ <dd><p>true if the URL represented by the string is accessible by
+ configuration, false otherwise. This test only has an effect if
+ <code class="directive">SSIEnableAccess</code> is on. This is useful
+ where content on a page is to be hidden from users who are not
+ authorized to view the URL, such as a link to that URL. Note
+ that the URL is only tested for whether access would be granted,
+ not whether the URL exists.</p>
+
+ <div class="example"><h3>Example</h3><p><code>
+ &lt;!--#if expr="-A /private" --&gt;<br />
+ <span class="indent">
+ Click &lt;a href="/private"&gt;here&lt;/a&gt; to access private
+ information.<br />
+ </span>
+ &lt;!--#endif --&gt;
+ </code></p></div>
+ </dd>
+
<dt><code><var>string1</var> = <var>string2</var><br />
<var>string1</var> == <var>string2</var><br />
<var>string1</var> != <var>string2</var></code></dt>
@@ -617,6 +637,35 @@
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SSIEnableAccess" id="SSIEnableAccess">SSIEnableAccess</a> <a name="ssienableaccess" id="ssienableaccess">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable the -A flag during conditional flow control processing.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIEnableAccess on|off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIEnableAccess off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
+</table>
+ <p>The <code class="directive">SSIEnableAccess</code> directive controls whether
+ the -A test is enabled during conditional flow control processing.
+ <code class="directive">SSIEnableAccess</code> can take on the following values:</p>
+
+ <dl>
+
+ <dt><code>off</code></dt>
+ <dd>&lt;!--#if expr="-A /foo"--&gt; will be interpreted as a series
+ of string and regular expression tokens, the -A has no special
+ meaning.</dd>
+
+ <dt><code>on</code></dt>
+ <dd>&lt;!--#if expr="-A /foo"--&gt; will evaluate to false if the
+ URL /foo is inaccessible by configuration, or true otherwise.</dd>
+
+ </dl>
+
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that ends an include element</td></tr>
@@ -794,7 +843,7 @@ set</td></tr>
</dd>
</dl>
-
+
</div>
</div>
<div class="bottomlang">
diff --git a/docs/manual/mod/mod_mime.html.en b/docs/manual/mod/mod_mime.html.en
index 145ae5b9..aa34d91f 100644
--- a/docs/manual/mod/mod_mime.html.en
+++ b/docs/manual/mod/mod_mime.html.en
@@ -116,7 +116,7 @@
file <code>welcome.html.fr</code> maps onto content type
<code>text/html</code> and language French then the file
<code>welcome.fr.html</code> will map onto exactly the same
- information. If more than one extension is given which maps onto
+ information. If more than one extension is given that maps onto
the same type of meta-information, then the one to the right will
be used, except for languages and content encodings. For example,
if <code>.gif</code> maps to the <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a>
@@ -133,7 +133,7 @@
<p>Care should be taken when a file with multiple extensions
gets associated with both a <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> and a handler. This will
- usually result in the request being by the module associated
+ usually result in the request being handled by the module associated
with the handler. For example, if the <code>.imap</code>
extension is mapped to the handler <code>imap-file</code> (from
<code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code>) and the <code>.html</code> extension is
@@ -143,6 +143,22 @@
When it is processed, the <code>imap-file</code> handler will be used,
and so it will be treated as a <code class="module"><a href="../mod/mod_imagemap.html">mod_imagemap</a></code> imagemap
file.</p>
+
+ <p>If you would prefer only the last dot-separated part of the
+ filename to be mapped to a particular piece of meta-data, then do
+ not use the <code>Add*</code> directives. For example, if you wish
+ to have the file <code>foo.html.cgi</code> processed as a CGI
+ script, but not the file <code>bar.cgi.html</code>, then instead
+ of using <code>AddHandler cgi-script .cgi</code>, use</p>
+
+ <div class="example"><h3>Configure handler based on final extension only</h3><p><code>
+ &lt;FilesMatch \.cgi$&gt;
+ <span class="indent">
+ SetHandler cgi-script
+ </span>
+ &lt;/FilesMatch&gt;
+ </code></p></div>
+
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="contentencoding" id="contentencoding">Content encoding</a></h2>
@@ -262,8 +278,11 @@ charset</td></tr>
where the server returns one from several documents based on
the client's charset preference.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
+ <p>The <var>extension</var> argument is case-insensitive and can
+ be specified with or without a leading dot. Filenames may have <a href="#multipleext">multiple extensions</a> and the
+ <var>extension</var> argument will be compared against each of
+ them.</p>
+
<h3>See also</h3>
<ul>
@@ -314,8 +333,10 @@ type</td></tr>
recent encodings, such as <code>deflate</code> should be
specified without the <code>x-</code>.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
+ <p>The <var>extension</var> argument is case-insensitive and can
+ be specified with or without a leading dot. Filenames may have <a href="#multipleext">multiple extensions</a> and the
+ <var>extension</var> argument will be compared against each of
+ them.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -344,8 +365,10 @@ handler</td></tr>
<p>Once that has been put into your httpd.conf file, any file containing
the <code>.cgi</code> extension will be treated as a CGI program.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
+ <p>The <var>extension</var> argument is case-insensitive and can
+ be specified with or without a leading dot. Filenames may have <a href="#multipleext">multiple extensions</a> and the
+ <var>extension</var> argument will be compared against each of
+ them.</p>
<h3>See also</h3>
<ul>
@@ -374,11 +397,15 @@ later.</td></tr>
directive. This mapping is merged over any already in force, overriding
any mappings that already exist for the same <var>extension</var>.</p>
- <p>If more than one filter is specified, they must be separated
+ <p>If more than one <var>filter</var> is specified, they must be separated
by semicolons in the order in which they should process the
- content. Both the filter and <var>extension</var> arguments are
- case-insensitive, and the extension may be specified with or
- without a leading dot.</p>
+ content. The <var>filter</var> is case-insensitive.</p>
+
+ <p>The <var>extension</var> argument is case-insensitive and can
+ be specified with or without a leading dot. Filenames may have <a href="#multipleext">multiple extensions</a> and the
+ <var>extension</var> argument will be compared against each of
+ them.</p>
+
<h3>See also</h3>
<ul>
@@ -433,8 +460,10 @@ language</td></tr>
<p>documents with the extension <code>.en</code> would be treated as
being <code>en-us</code>.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
+ <p>The <var>extension</var> argument is case-insensitive and can
+ be specified with or without a leading dot. Filenames may have <a href="#multipleext">multiple extensions</a> and the
+ <var>extension</var> argument will be compared against each of
+ them.</p>
<h3>See also</h3>
<ul>
@@ -472,9 +501,12 @@ later.</td></tr>
<p>If more than one filter is specified, they must be separated
by semicolons in the order in which they should process the
- content. Both the <var>filter</var> and <var>extension</var> arguments
- are case-insensitive, and the extension may be specified with or
- without a leading dot.</p>
+ content. The <var>filter</var> argument is case-insensitive.</p>
+
+ <p>The <var>extension</var> argument is case-insensitive and can
+ be specified with or without a leading dot. Filenames may have <a href="#multipleext">multiple extensions</a> and the
+ <var>extension</var> argument will be compared against each of
+ them.</p>
<h3>See also</h3>
<ul>
@@ -513,8 +545,10 @@ type</td></tr>
<code class="directive"><a href="#typesconfig">TypesConfig</a></code> file.
</div>
- <p>The <var>extension</var> argument is case-insensitive, and can
- be specified with or without a leading dot.</p>
+ <p>The <var>extension</var> argument is case-insensitive and can
+ be specified with or without a leading dot. Filenames may have <a href="#multipleext">multiple extensions</a> and the
+ <var>extension</var> argument will be compared against each of
+ them.</p>
<h3>See also</h3>
<ul>
@@ -673,7 +707,7 @@ later.</td></tr>
undo any associations inherited from parent directories or the
server config files.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
+ <p>The <var>extension</var> argument is case-insensitive and can
be specified with or without a leading dot.</p>
<div class="example"><h3>Example</h3><p><code>
@@ -720,7 +754,7 @@ extensions</td></tr>
if both occur within the same directory configuration.</p>
</div>
- <p>The <var>extension</var> argument is case-insensitive, and can
+ <p>The <var>extension</var> argument is case-insensitive and can
be specified with or without a leading dot.</p>
</div>
@@ -754,7 +788,7 @@ extensions</td></tr>
the <code>/foo/bar</code> directory to being treated as normal
files, rather than as candidates for parsing (see the <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> module).</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
+ <p>The <var>extension</var> argument is case-insensitive and can
be specified with or without a leading dot.</p>
</div>
@@ -779,7 +813,7 @@ later.</td></tr>
undo any associations inherited from parent directories or the
server config files.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
+ <p>The <var>extension</var> argument is case-insensitive and can
be specified with or without a leading dot.</p>
<h3>See also</h3>
@@ -808,7 +842,7 @@ later.</td></tr>
any associations inherited from parent directories or the
server config files.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
+ <p>The <var>extension</var> argument is case-insensitive and can
be specified with or without a leading dot.</p>
</div>
@@ -833,7 +867,7 @@ later.</td></tr>
undo any associations inherited from parent directories or the
server config files.</p>
- <p>The <var>extension</var> argument is case-insensitive, and can
+ <p>The <var>extension</var> argument is case-insensitive and can
be specified with or without a leading dot.</p>
<div class="example"><h3>Example</h3><p><code>
@@ -879,7 +913,7 @@ extensions</td></tr>
latter if both occur within the same directory configuration.</p>
</div>
- <p>The <var>extension</var> argument is case-insensitive, and can
+ <p>The <var>extension</var> argument is case-insensitive and can
be specified with or without a leading dot.</p>
</div>
diff --git a/docs/manual/mod/mod_proxy.html.en b/docs/manual/mod/mod_proxy.html.en
index bbe36687..1e598e45 100644
--- a/docs/manual/mod/mod_proxy.html.en
+++ b/docs/manual/mod/mod_proxy.html.en
@@ -70,6 +70,7 @@
<li><img alt="" src="../images/down.gif" /> <a href="#proxyblock">ProxyBlock</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#proxydomain">ProxyDomain</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#proxyerroroverride">ProxyErrorOverride</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#proxyftpdircharset">ProxyFtpDirCharset</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#proxyiobuffersize">ProxyIOBufferSize</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#proxymatch">&lt;ProxyMatch&gt;</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#proxymaxforwards">ProxyMaxForwards</a></li>
@@ -96,7 +97,7 @@
<li><img alt="" src="../images/down.gif" /> <a href="#startup">Slow Startup</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#intranet">Intranet Proxy</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#envsettings">Protocol Adjustments</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#request-bodies">Request Bodys</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#request-bodies">Request Bodies</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#x-headers">Reverse Proxy Request Headers</a></li>
</ul><h3>See also</h3>
<ul class="seealso">
@@ -271,7 +272,7 @@
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
-<h2><a name="request-bodies" id="request-bodies">Request Bodys</a></h2>
+<h2><a name="request-bodies" id="request-bodies">Request Bodies</a></h2>
<p>Some request methods such as POST include a request body.
The HTTP protocol requires that requests which include a body
@@ -353,7 +354,7 @@ proxy</td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerMember is only available in Apache 2.2.0
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerMember is only available in Apache 2.2
and later.</td></tr>
</table>
<p>This directive adds a member to a load balancing group. It must be used
@@ -538,7 +539,7 @@ response</td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>available in Apache 2.0.44 and later</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0.44 and later</td></tr>
</table>
<p>The <code class="directive">ProxyBadHeader</code> directive determines the
behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> if it receives syntactically invalid
@@ -645,6 +646,22 @@ proxied</td></tr>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="ProxyFtpDirCharset" id="ProxyFtpDirCharset">ProxyFtpDirCharset</a> <a name="proxyftpdircharset" id="proxyftpdircharset">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Define the character set for proxied FTP listings</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFtpDirCharset <var>character set</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyFtpDirCharset ISO-8859-1</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.2.7 and later</td></tr>
+</table>
+ <p>The <code class="directive">ProxyFtpDirCharset</code> directive defines the
+ character set to be set for FTP directory listings in HTML generated by
+ <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>.</p>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a> <a name="proxyiobuffersize" id="proxyiobuffersize">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine size of internal data throughput buffer</td></tr>
@@ -682,27 +699,36 @@ proxied resources</td></tr>
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximium number of proxies that a request can be forwarded
through</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyMaxForwards <var>number</var></code></td></tr>
-<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyMaxForwards 10</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyMaxForwards -1</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0 and later</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.0 and later;
+ default behaviour changed in 2.2.7</td></tr>
</table>
<p>The <code class="directive">ProxyMaxForwards</code> directive specifies the
maximum number of proxies through which a request may pass, if there's no
- <code>Max-Forwards</code> header supplied with the request. This is
- set to prevent infinite proxy loops, or a DoS attack.</p>
+ <code>Max-Forwards</code> header supplied with the request. This may
+ be set to prevent infinite proxy loops, or a DoS attack.</p>
<div class="example"><h3>Example</h3><p><code>
ProxyMaxForwards 15
</code></p></div>
+ <p>Note that setting <code class="directive">ProxyMaxForwards</code> is a
+ violation of the HTTP/1.1 protocol (RFC2616), which forbids a Proxy
+ setting <code>Max-Forwards</code> if the Client didn't set it.
+ Earlier Apache versions would always set it. A negative
+ <code class="directive">ProxyMaxForwards</code> value, including the
+ default -1, gives you protocol-compliant behaviour, but may
+ leave you open to loops.</p>
+
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ProxyPass" id="ProxyPass">ProxyPass</a> <a name="proxypass" id="proxypass">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space</td></tr>
-<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]]</code></td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]] [nocanon]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
@@ -742,7 +768,7 @@ through</td></tr>
<code>/mirror/foo/i</code>.</p>
<div class="note"><h3>Note</h3>
- <p>Order is important. you need to put the exclusions <em>before</em> the
+ <p>Order is important: exclusions must come <em>before</em> the
general <code class="directive">ProxyPass</code> directive.</p>
</div>
@@ -858,7 +884,8 @@ through</td></tr>
If the connection pool worker to the backend server is in the error state,
Apache will not forward any requests to that server until the timeout
expires. This enables to shut down the backend server for maintenance,
- and bring it back online later.
+ and bring it back online later. A value of 0 means always retry workers
+ in an error state with no timeout.
</td></tr>
<tr><td>route</td>
<td>-</td>
@@ -965,7 +992,14 @@ through</td></tr>
&lt;/Proxy&gt;
</code></p></div>
-
+ <p>Normally, mod_proxy will canonicalise ProxyPassed URLs.
+ But this may be incompatible with some backends, particularly those
+ that make use of <var>PATH_INFO</var>. The optional <var>nocanon</var>
+ keyword suppresses this, and passes the URL path "raw" to the
+ backend. Note that may affect the security of your backend, as it
+ removes the normal limited protection against URL-based attacks
+ provided by the proxy.</p>
+
<p>When used inside a <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> section, the first argument is omitted and the local
directory is obtained from the <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>.</p>
@@ -1230,7 +1264,7 @@ expressions</td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
-<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxySet is only available in Apache 2.2.0
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxySet is only available in Apache 2.2
and later.</td></tr>
</table>
<p>This directive is used as an alternate method of setting any of the
diff --git a/docs/manual/mod/mod_proxy_ajp.html.en b/docs/manual/mod/mod_proxy_ajp.html.en
index 6b5c04e2..e48f313b 100644
--- a/docs/manual/mod/mod_proxy_ajp.html.en
+++ b/docs/manual/mod/mod_proxy_ajp.html.en
@@ -507,7 +507,7 @@ AJP13_GET_BODY_CHUNK :=
<p>The status code and message are the usual HTTP things
(e.g. <code>200</code> and <code>OK</code>). The response header names are
encoded the same way the request header names are. See header_encoding above
- for details about how the the codes are distinguished from the strings.<br />
+ for details about how the codes are distinguished from the strings.<br />
The codes for common headers are:</p>
<table>
<tr><td>Name</td><td>Code value</td></tr>
diff --git a/docs/manual/mod/mod_proxy_balancer.html.en b/docs/manual/mod/mod_proxy_balancer.html.en
index 9cbc7757..1fb15f3b 100644
--- a/docs/manual/mod/mod_proxy_balancer.html.en
+++ b/docs/manual/mod/mod_proxy_balancer.html.en
@@ -66,7 +66,7 @@
<p>At present, there are 2 load balancer scheduler algorithms available
for use: Request Counting and Weighted Traffic Counting. These are controlled
via the <code>lbmethod</code> value of the Balancer definition. See
- the <code class="directive"><a href="../mod/mod_proxy.html#proxy">Proxy</a></code> directive for
+ the <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> directive for
more information.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
diff --git a/docs/manual/mod/mod_proxy_http.html.en b/docs/manual/mod/mod_proxy_http.html.en
index 0a20ef29..ce94fd95 100644
--- a/docs/manual/mod/mod_proxy_http.html.en
+++ b/docs/manual/mod/mod_proxy_http.html.en
@@ -50,12 +50,67 @@
<div id="quickview"><h3 class="directives">Directives</h3>
<p>This module provides no
directives.</p>
-<h3>See also</h3>
+<h3>Topics</h3>
+<ul id="topics">
+<li><img alt="" src="../images/down.gif" /> <a href="#env">Environment Variables</a></li>
+</ul><h3>See also</h3>
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></li>
</ul></div>
-
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="env" id="env">Environment Variables</a></h2>
+ <p>In addition to the configuration directives that control the
+ behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, there are a number of
+ <dfn>environment variables</dfn> that control the HTTP protocol
+ provider:</p>
+ <dl>
+ <dt>proxy-sendextracrlf</dt>
+ <dd>Causes proxy to send an extra CR-LF newline on the end of a
+ request. This is a workaround for a bug in some browsers.</dd>
+ <dt>force-proxy-request-1.0</dt>
+ <dd>Forces the proxy to send requests to the backend as HTTP/1.0
+ and disables HTTP/1.1 features.</dd>
+ <dt>proxy-nokeepalive</dt>
+ <dd>Forces the proxy to close the backend connection after
+ each request.</dd>
+ <dt>Proxy-Chain-Auth</dt>
+ <dd>If the proxy requires authentication, it will read and
+ consume the proxy authentication credentials sent by the client.
+ With <var>Proxy-Chain-Auth</var> it will <em>also</em> forward
+ the credentials to the next proxy in the chain. This may
+ be necessary if you have a chain of proxies that share
+ authentication information. <strong>Security Warning:</strong>
+ Do not set this unless you know you need it, as it forwards
+ sensitive information!</dd>
+ <dt>proxy-sendcl</dt>
+ <dd>HTTP/1.0 required all HTTP requests that include a body
+ (e.g. POST requests) to include a <var>Content-Length</var>
+ header. This environment variable forces the Apache proxy to
+ send this header to the backend server, regardless of what the
+ Client sent to the proxy. It ensures compatibility when
+ proxying for an HTTP/1.0 or unknown backend. However, it
+ may require the entire request to be buffered by the proxy,
+ so it becomes very inefficient for large requests.</dd>
+ <dt>proxy-sendchunks or proxy-sendchunked</dt>
+ <dd>This is the opposite of <var>proxy-sendcl</var>. It allows
+ request bodies to be sent to the backend using chunked transfer
+ encoding. This allows the request to be efficiently streamed,
+ but requires that the backend server supports HTTP/1.1.</dd>
+ <dt>proxy-interim-response</dt>
+ <dd>This variable takes values <code>RFC</code> or
+ <code>Suppress</code>. Earlier httpd versions would suppress
+ HTTP interim (1xx) responses sent from the backend. This is
+ technically a violation of the HTTP protocol. In practice,
+ if a backend sends an interim response, it may itself be
+ extending the protocol in a manner we know nothing about,
+ or just broken. So this is now configurable: set
+ <code>proxy-interim-response RFC</code> to be fully protocol
+ compliant, or <code>proxy-interim-response Suppress</code>
+ to suppress interim responses.</dd>
+ </dl>
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_http.html" title="English">&nbsp;en&nbsp;</a></p>
diff --git a/docs/manual/mod/mod_rewrite.html.en b/docs/manual/mod/mod_rewrite.html.en
index 3fe1f240..b3286afa 100644
--- a/docs/manual/mod/mod_rewrite.html.en
+++ b/docs/manual/mod/mod_rewrite.html.en
@@ -436,7 +436,15 @@ Result:
value of a header sent in the HTTP request.
Example: <code>%{HTTP:Proxy-Connection}</code> is
the value of the HTTP header
- ``<code>Proxy-Connection:</code>''.</li>
+ ``<code>Proxy-Connection:</code>''.
+ <p>If a HTTP header is used in a condition this header is added to
+ the Vary header of the response in case the condition evaluates to
+ to true for the request. It is <strong>not</strong> added if the
+ condition evaluates to false for the request. Adding the HTTP header
+ to the Vary header of the response is needed for proper caching.</p>
+ <p>It has to be kept in mind that conditions follow a short circuit
+ logic in the case of the '<strong><code>ornext|OR</code></strong>' flag
+ so that certain conditions might not be evaluated at all.</p></li>
<li>
<code>%{LA-U:variable}</code> can be used for look-aheads which perform
@@ -594,6 +602,16 @@ RewriteRule ...some special stuff for any of these hosts...
Without this flag you would have to write the condition/rule
pair three times.
</li>
+
+ <li>'<strong><code>novary|NV</code></strong>'
+ (<strong>n</strong>o <strong>v</strong>ary)<br />
+ If a HTTP header is used in the condition, this flag prevents
+ this header from being added to the Vary header of the response. <br />
+ Using this flag might break proper caching of the response if
+ the representation of this response varies on the value of this header.
+ So this flag should be only used if the meaning of the Vary header
+ is well understood.
+ </li>
</ul>
</li>
</ol>
@@ -1078,7 +1096,7 @@ later</td></tr>
</pre></div>
<p>For more information about regular expressions, have a look at the
- perl regular expression manpage ("<a href="http://www.perldoc.com/perlre.html">perldoc
+ perl regular expression manpage ("<a href="http://perldoc.perl.org/perlre.html">perldoc
perlre</a>"). If you are interested in more detailed
information about regular expressions and their variants
(POSIX regex etc.) the following book is dedicated to this topic:</p>
@@ -1123,7 +1141,7 @@ cannot use <code>$N</code> in the substitution string!
<dd>A <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>-relative path to the
resource to be served. Note that <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
tries to guess whether you have specified a file-system path
- or a URL-path by checking to see if the first segement of the
+ or a URL-path by checking to see if the first segment of the
path exists at the root of the file-system. For example, if
you specify a <em>Substitution</em> string of
<code>/www/file.html</code>, then this will be treated as a
@@ -1207,6 +1225,21 @@ cannot use <code>$N</code> in the substitution string!
brackets, of any of the following flags: </p>
<dl>
+ <dt>'<code>B</code>' (escape backreferences)</dt>
+ <dd><p>Apache has to unescape URLs before mapping them,
+ so backreferences will be unescaped at the time they are applied.
+ Using the B flag, non-alphanumeric characters in backreferences
+ will be escaped. For example, consider the rule:</p>
+ <pre><code> RewriteRule ^(.*)$ index.php?show=$1 </code></pre>
+ <p>This will map <code>/C++</code> to <code>index.php?show=C++</code>.
+ But it will also map <code>/C%2b%2b</code> to
+ <code>index.php?show=C++</code>, because the <code>%2b</code>
+ has been unescaped. With the B flag, it will instead map to
+ <code>index.php?show=&gt;/C%2b%2b</code>.</p>
+ <p>This escaping is particularly necessary in a proxy situation,
+ when the backend may break if presented with an unescaped URL.</p>
+ </dd>
+
<dt>'<code>chain|C</code>'
(chained with next rule)</dt><dd>
This flag chains the current rule with the next rule
@@ -1220,8 +1253,7 @@ cannot use <code>$N</code> in the substitution string!
when you let an external redirect happen (where the
``<code>.www</code>'' part should not occur!).</dd>
- <dt>
- '<code>cookie|CO=</code><em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>]]'
+ <dt>'<code>cookie|CO=</code><em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>]]'
(set cookie)</dt><dd>
This sets a cookie in the client's browser. The cookie's name
is specified by <em>NAME</em> and the value is
@@ -1461,6 +1493,17 @@ cannot use <code>$N</code> in the substitution string!
</dd>
</dl>
+<div class="note"><h3>Home directory expansion</h3>
+<p> When the substitution string begins with a string
+resembling "/~user" (via explicit text or backreferences), mod_rewrite performs
+home directory expansion independent of the presence or configuration
+of <code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code>.</p>
+
+<p> This expansion does not occur when the <em>PT</em>
+flag is used on the <code class="directive"><a href="#rewriterule">RewriteRule</a></code>
+directive.</p>
+</div>
+
<div class="note"><h3>Per-directory Rewrites</h3>
<p>The rewrite engine may be used in <a href="../howto/htaccess.html">.htaccess</a> files. To enable the
diff --git a/docs/manual/mod/mod_status.html.en b/docs/manual/mod/mod_status.html.en
index d37fe299..3ff6e5cc 100644
--- a/docs/manual/mod/mod_status.html.en
+++ b/docs/manual/mod/mod_status.html.en
@@ -65,13 +65,14 @@ performance</td></tr>
<li>The current hosts and requests being processed (*)</li>
</ul>
- <p>A compile-time option must be used to display the details
- marked "(*)" as the instrumentation required for obtaining
- these statistics does not exist within standard Apache.</p>
+ <p>The lines marked "(*)" are only available if
+ <code class="directive"><a href="#extendedstatus">ExtendedStatus</a></code>
+ is <code>On</code>.</p>
</div>
<div id="quickview"><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#extendedstatus">ExtendedStatus</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#seerequesttail">SeeRequestTail</a></li>
</ul>
<h3>Topics</h3>
<ul id="topics">
@@ -151,6 +152,29 @@ later.</td></tr>
the server.</p>
</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="SeeRequestTail" id="SeeRequestTail">SeeRequestTail</a> <a name="seerequesttail" id="seerequesttail">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine if mod_status displays the first 63 characters
+of a request or the last 63, assuming the request itself is greater than
+63 chars.</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SeeRequestTail On|Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SeeRequestTail Off</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_status</td></tr>
+<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>SeeRequestTail is only available in Apache 2.2.7 and
+later.</td></tr>
+</table>
+ <p>mod_status with ExtendedStatus On displays the actual request being
+ handled. For historical purposes, only 63 characters of the request
+ are actually stored for display purposes. This directive
+ controls whether the 1st 63 characters are stored (the previous
+ behavior and the default) or if the last 63 characters are. This
+ is only applicable, of course, if the length of the request is
+ 64 characters or greater.</p>
+
+</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_status.html" title="English">&nbsp;en&nbsp;</a> |
diff --git a/docs/manual/mod/mod_status.html.ja.euc-jp b/docs/manual/mod/mod_status.html.ja.euc-jp
index f467e5a5..9dd0de43 100644
--- a/docs/manual/mod/mod_status.html.ja.euc-jp
+++ b/docs/manual/mod/mod_status.html.ja.euc-jp
@@ -25,6 +25,8 @@
<a href="../ja/mod/mod_status.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_status.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">This translation may be out of date. Check the
+ English version for recent changes.</div>
<table class="module"><tr><th><a href="module-dict.html#Description">ÀâÌÀ:</a></th><td>¥µ¡¼¥Ð¤Î³èÆ°¾õ¶·¤ÈÀ­Ç½¤Ë´Ø¤¹¤ë¾ðÊó¤òÄ󶡤¹¤ë</td></tr>
<tr><th><a href="module-dict.html#Status">¥¹¥Æ¡¼¥¿¥¹:</a></th><td>Base</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">¥â¥¸¥å¡¼¥ë¼±ÊÌ»Ò:</a></th><td>status_module</td></tr>
diff --git a/docs/manual/mod/mod_status.html.ko.euc-kr b/docs/manual/mod/mod_status.html.ko.euc-kr
index 94f97267..d012f335 100644
--- a/docs/manual/mod/mod_status.html.ko.euc-kr
+++ b/docs/manual/mod/mod_status.html.ko.euc-kr
@@ -25,6 +25,8 @@
<a href="../ja/mod/mod_status.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_status.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù.
+ ÃÖ±Ù¿¡ º¯°æµÈ ³»¿ëÀº ¿µ¾î ¹®¼­¸¦ Âü°íÇϼ¼¿ä.</div>
<table class="module"><tr><th><a href="module-dict.html#Description">¼³¸í:</a></th><td>¼­¹ö È°µ¿°ú ¼º´É¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù</td></tr>
<tr><th><a href="module-dict.html#Status">»óÅÂ:</a></th><td>Base</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">¸ðµâ¸í:</a></th><td>status_module</td></tr>
diff --git a/docs/manual/mod/mod_substitute.html b/docs/manual/mod/mod_substitute.html
new file mode 100644
index 00000000..8b031f76
--- /dev/null
+++ b/docs/manual/mod/mod_substitute.html
@@ -0,0 +1,3 @@
+URI: mod_substitute.html.en
+Content-Language: en
+Content-type: text/html; charset=ISO-8859-1
diff --git a/docs/manual/mod/mod_substitute.html.en b/docs/manual/mod/mod_substitute.html.en
new file mode 100644
index 00000000..5ab9376c
--- /dev/null
+++ b/docs/manual/mod/mod_substitute.html.en
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>mod_substitute - Apache HTTP Server</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
+<p class="apache">Apache HTTP Server Version 2.2</p>
+<img alt="" src="../images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.2</a> &gt; <a href="./">Modules</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Apache Module mod_substitute</h1>
+<div class="toplang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_substitute.html" title="English">&nbsp;en&nbsp;</a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Perform search and replace operations on response bodies</td></tr>
+<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>substitute_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_substitute.c</td></tr></table>
+<h3>Summary</h3>
+
+ <p><code class="module"><a href="../mod/mod_substitute.html">mod_substitute</a></code> provides a mechanism to perform
+ both regular expression and fixed string substitutions on
+ response bodies.</p>
+</div>
+<div id="quickview"><h3 class="directives">Directives</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#substitute">Substitute</a></li>
+</ul>
+</div>
+
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="Substitute" id="Substitute">Substitute</a> <a name="substitute" id="substitute">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Pattern to filter the response content</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Substitute <var>s/pattern/substitution/[inf]</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
+<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_substitute</td></tr>
+</table>
+ <p>The <code class="directive">Substitute</code> directive specifies a
+ search and replace pattern to apply to the response body.</p>
+
+ <p>The meaning of the pattern can be modified by using any
+ combination of these flags:</p>
+
+ <dl>
+ <dt><code>i</code></dt>
+ <dd>Perform a case-insensitive match.</dd>
+ <dt><code>n</code></dt>
+ <dd>By default the pattern is treated as a regular expression.
+ Using the <code>n</code> flag forces the pattern to be treated
+ as a fixed string.</dd>
+ <dt><code>f</code></dt>
+ <dd>The <code>f</code> flag causes mod_substitute to flatten the
+ result of a substitution allowing for later substitutions to
+ take place on the boundary of this one.</dd>
+ </dl>
+
+ <div class="example"><h3>Example</h3><p><code>
+ &lt;Location /&gt;
+ <span class="indent">
+ AddOutputFilterByType SUBSTITUTE text/html<br />
+ Substitute s/foo/bar/ni<br />
+ </span>
+ &lt;/Location&gt;
+ </code></p></div>
+
+ <p>If either the pattern or the substitution contain a slash
+ character then an alternative delimiter should be used:</p>
+
+ <div class="example"><h3>Example of using an alternate delimiter</h3><p><code>
+ &lt;Location /&gt;
+ <span class="indent">
+ AddOutputFilterByType SUBSTITUTE text/html<br />
+ Substitute "s|&lt;BR */?&gt;|&lt;br /&gt;|i"
+ </span>
+ &lt;/Location&gt;
+ </code></p></div>
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_substitute.html" title="English">&nbsp;en&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/mod/quickreference.html.de b/docs/manual/mod/quickreference.html.de
index 5bc82e82..cd4a9d22 100644
--- a/docs/manual/mod/quickreference.html.de
+++ b/docs/manual/mod/quickreference.html.de
@@ -470,7 +470,7 @@ cache</td></tr>
cache</td></tr>
<tr><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
before declaring the response uncacheable</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
+<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 1 </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
cache</td></tr>
<tr><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">The algorithm used to select documents for removal from the
cache</td></tr>
@@ -518,115 +518,119 @@ response</td></tr>
proxied</td></tr>
<tr class="odd"><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
<tr><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
+<tr class="odd"><td><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset <var>character set</var></a></td><td> ISO-8859-1 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Define the character set for proxied FTP listings</td></tr>
+<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
proxied resources</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
+<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> -1 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
through</td></tr>
-<tr><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
- <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
+<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]] [nocanon]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
+<tr><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
+ <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
+<tr><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
+<tr><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
+<tr class="odd"><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
+<tr><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
+<tr><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
+<tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the end
+<tr class="odd"><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Name of the file that will be inserted at the end
of the index listing</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
+<tr><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
+<tr class="odd"><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
of the current URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
+<tr><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
a different URL</td></tr>
-<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
+<tr class="odd"><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
a different URL</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
+<tr><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content encoding associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
+<tr><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any handler associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any input filter associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
+<tr><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any language associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any output filter associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
+<tr><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content type associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
-[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr class="odd"><td><a href="core.html#require">Require <var>Name</var> [<var>Name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Wählt die authentisierten Benutzer aus, die auf eine
+<tr class="odd"><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
+[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
+<tr><td><a href="core.html#require">Require <var>Name</var> [<var>Name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Wählt die authentisierten Benutzer aus, die auf eine
Ressource zugreifen können</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
+<tr class="odd"><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
+<tr><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
+ <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a condition under which rewriting will take place
</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
+<tr><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
synchronization</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
+<tr class="odd"><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
processing</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
+<tr><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>Sekunden</var>|max [<var>Sekunden</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt den CPU-Verbrauch von Prozessen, die von
+<tr class="odd"><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
+</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
+<tr><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewriterule">RewriteRule
+ <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
+<tr><td><a href="core.html#rlimitcpu">RLimitCPU <var>Sekunden</var>|max [<var>Sekunden</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Begrenzt den CPU-Verbrauch von Prozessen, die von
Apache-Kindprozessen gestartet wurden</td></tr>
-<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>Bytes</var>|max [<var>Bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Begrenzt den Speicherverbrauch von Prozessen, die von
+<tr class="odd"><td><a href="core.html#rlimitmem">RLimitMEM <var>Bytes</var>|max [<var>Bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt den Speicherverbrauch von Prozessen, die von
Apache-Kindprozessen gestartet wurden</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>Zahl</var>|max [<var>Zahl</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Begrenzt die Anzahl der Prozesse, die von Prozessen gestartet
+<tr><td><a href="core.html#rlimitnproc">RLimitNPROC <var>Zahl</var>|max [<var>Zahl</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Begrenzt die Anzahl der Prozesse, die von Prozessen gestartet
werden können, der ihrerseits von Apache-Kinprozessen gestartet
wurden</td></tr>
-<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Zusammenspiel von rechnerbasierter Zugriffskontrolle und
+<tr class="odd"><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Zusammenspiel von rechnerbasierter Zugriffskontrolle und
Benutzerauthentisierung</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>Dateipfad</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Ablageort der Datei, die zur Speicherung von Daten zur
+<tr><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>Dateipfad</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Ablageort der Datei, die zur Speicherung von Daten zur
Koordinierung der Kindprozesse verwendet wird</td></tr>
-<tr><td><a href="mod_actions.html#script">Script <var>Methode</var> <var>CGI-Skript</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Aktiviert ein CGI-Skript für eine bestimmte
+<tr class="odd"><td><a href="mod_actions.html#script">Script <var>Methode</var> <var>CGI-Skript</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Aktiviert ein CGI-Skript für eine bestimmte
Anfragemethode.</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
+<tr><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
target as a CGI script</td></tr>
-<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
+<tr class="odd"><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
and designates the target as a CGI script</td></tr>
-<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Methode zur Ermittlung des Interpreters von
+<tr><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Methode zur Ermittlung des Interpreters von
CGI-Skripten</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
+<tr class="odd"><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
+<tr><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
in the scriptlog</td></tr>
-<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
-<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
+<tr class="odd"><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
+<tr><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
the cgi daemon</td></tr>
-<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr class="odd"><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
+<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr><td><a href="mod_status.html#seerequesttail">SeeRequestTail On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Determine if mod_status displays the first 63 characters
+of a request or the last 63, assuming the request itself is greater than
+63 chars.</td></tr>
<tr class="odd"><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>Bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Größe des TCP-Puffers</td></tr>
<tr><td><a href="core.html#serveradmin">ServerAdmin <var>E-Mail-Adresse</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">E-Mail-Adresse, die der Server in Fehlermeldungen einfügt,
welche an den Client gesendet werden</td></tr>
@@ -659,74 +663,76 @@ einen Handler</td></tr>
<tr><td><a href="core.html#setinputfilter">SetInputFilter <var>Filter</var>[;<var>Filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Bestimmt die Filter, die Client-Anfragen und POST-Eingaben
verarbeiten</td></tr>
<tr class="odd"><td><a href="core.html#setoutputfilter">SetOutputFilter <var>Filter</var>[;<var>Filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Bestimmt die Filter, die Antworten des Servers verarbeiten</td></tr>
-<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
+<tr><td><a href="mod_include.html#ssienableaccess">SSIEnableAccess on|off</a></td><td> off </td><td>dh</td><td>B</td></tr><tr><td class="descr" colspan="4">Enable the -A flag during conditional flow control processing.</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that ends an include element</td></tr>
+<tr><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Error message displayed when there is an SSI
error</td></tr>
-<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
+<tr class="odd"><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that starts an include element</td></tr>
+<tr><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Configures the format in which date strings are
displayed</td></tr>
-<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr class="odd"><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
+<tr><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for defining acceptable CA names</td></tr>
-<tr><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
defining acceptable CA names</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
+<tr><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
+<tr><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
+<tr><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
operations</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
+<tr><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
keys</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
proxy handshake</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
+<tr><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
+<tr><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
+[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
source</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
+<tr class="odd"><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Allow access only when an arbitrarily complex
boolean expression is true</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
+<tr><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Deny access when SSL is not used for the
HTTP request</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
+<tr class="odd"><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of the global/inter-process SSL Session
Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
+<tr><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Number of seconds before an SSL session expires
in the Session Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
+<tr class="odd"><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Variable name to determine user name</td></tr>
+<tr><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
Certificate verification</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Anzahl der Kindprozesse des Servers, die beim Start erstellt
+<tr><td><a href="mpm_common.html#startservers">StartServers <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Anzahl der Kindprozesse des Servers, die beim Start erstellt
werden</td></tr>
-<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Anzahl der Threads, die beim Start erstellt werden</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#startthreads">StartThreads <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Anzahl der Threads, die beim Start erstellt werden</td></tr>
+<tr><td><a href="mod_substitute.html#substitute">Substitute <var>s/pattern/substitution/[inf]</var></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Pattern to filter the response content</td></tr>
<tr class="odd"><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">User and group permissions for CGI programs</td></tr>
<tr><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>Anzahl</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Bestimmt die Obergrenze der konfigurierbaren Anzahl von Threads
pro Kindprozess</td></tr>
diff --git a/docs/manual/mod/quickreference.html.en b/docs/manual/mod/quickreference.html.en
index 8cf1c078..7acaa3f0 100644
--- a/docs/manual/mod/quickreference.html.en
+++ b/docs/manual/mod/quickreference.html.en
@@ -277,7 +277,7 @@ a DAV resource</td></tr>
configured</td></tr>
<tr><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets all files in the given scope to the specified
language</td></tr>
-<tr class="odd"><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">MIME content-type that will be sent if the
+<tr class="odd"><td><a href="core.html#defaulttype">DefaultType <var>MIME-type|none</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">MIME content-type that will be sent if the
server cannot determine a type in any other way</td></tr>
<tr><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Fragment size to be compressed at one time by zlib</td></tr>
<tr class="odd"><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">How much compression do we apply to the output</td></tr>
@@ -508,115 +508,119 @@ response</td></tr>
proxied</td></tr>
<tr class="odd"><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
<tr><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
+<tr class="odd"><td><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset <var>character set</var></a></td><td> ISO-8859-1 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Define the character set for proxied FTP listings</td></tr>
+<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
proxied resources</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
+<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> -1 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
through</td></tr>
-<tr><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
- <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
+<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]] [nocanon]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
+<tr><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
+ <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
+<tr><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
+<tr><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
+<tr class="odd"><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
+<tr><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
+<tr><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
+<tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the end
+<tr class="odd"><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Name of the file that will be inserted at the end
of the index listing</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP receive buffer size</td></tr>
-<tr><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
+<tr><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP receive buffer size</td></tr>
+<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
a different URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
+<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
of the current URL</td></tr>
-<tr><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
+<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
a different URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
+<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
a different URL</td></tr>
-<tr><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any character set associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content encoding associations for a set of file
+<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any handler associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any input filter associations for a set of file
+<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any language associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any output filter associations for a set of file
+<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content type associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
-[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Selects which authenticated users can access
+<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
+[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
+<tr class="odd"><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Selects which authenticated users can access
a resource</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a condition under which rewriting will take place
+<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
+ <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
+<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
synchronization</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
+<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
processing</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the CPU consumption of processes launched
+<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
+</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
+<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
+ <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
+<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the CPU consumption of processes launched
by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the memory consumption of processes launched
+<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the memory consumption of processes launched
by Apache children</td></tr>
-<tr><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of processes that can be launched by
+<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the number of processes that can be launched by
processes launched by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Interaction between host-level access control and
+<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Interaction between host-level access control and
user authentication</td></tr>
-<tr><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the file used to store coordination data for
+<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the file used to store coordination data for
the child processes</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activates a CGI script for a particular request
+<tr><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Activates a CGI script for a particular request
method.</td></tr>
-<tr><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
+<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
target as a CGI script</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
+<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
and designates the target as a CGI script</td></tr>
-<tr><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
+<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Technique for locating the interpreter for CGI
scripts</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
+<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
+<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
in the scriptlog</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
-<tr><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
+<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
+<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
the cgi daemon</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
+<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr class="odd"><td><a href="mod_status.html#seerequesttail">SeeRequestTail On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Determine if mod_status displays the first 63 characters
+of a request or the last 63, assuming the request itself is greater than
+63 chars.</td></tr>
<tr><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP buffer size</td></tr>
<tr class="odd"><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Email address that the server includes in error
messages sent to the client</td></tr>
@@ -646,73 +650,75 @@ handler</td></tr>
input</td></tr>
<tr><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process responses from the
server</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Error message displayed when there is an SSI
+<tr class="odd"><td><a href="mod_include.html#ssienableaccess">SSIEnableAccess on|off</a></td><td> off </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enable the -A flag during conditional flow control processing.</td></tr>
+<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
error</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Configures the format in which date strings are
+<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
displayed</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for defining acceptable CA names</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
defining acceptable CA names</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
+<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
+<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
+<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
+<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
+<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
operations</td></tr>
-<tr><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
+<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
+<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
keys</td></tr>
-<tr><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
proxy handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
+<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
+[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
source</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Allow access only when an arbitrarily complex
+<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
boolean expression is true</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Deny access when SSL is not used for the
+<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
HTTP request</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of the global/inter-process SSL Session
+<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Number of seconds before an SSL session expires
+<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
in the Session Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
+<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
+<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
Certificate verification</td></tr>
-<tr><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of threads created on startup</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
+<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created on startup</td></tr>
+<tr class="odd"><td><a href="mod_substitute.html#substitute">Substitute <var>s/pattern/substitution/[inf]</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pattern to filter the response content</td></tr>
<tr><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">User and group permissions for CGI programs</td></tr>
<tr class="odd"><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
per child process</td></tr>
diff --git a/docs/manual/mod/quickreference.html.es b/docs/manual/mod/quickreference.html.es
index 3152fb0e..c2c3cde3 100644
--- a/docs/manual/mod/quickreference.html.es
+++ b/docs/manual/mod/quickreference.html.es
@@ -280,7 +280,7 @@ a DAV resource</td></tr>
configured</td></tr>
<tr><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets all files in the given scope to the specified
language</td></tr>
-<tr class="odd"><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">MIME content-type that will be sent if the
+<tr class="odd"><td><a href="core.html#defaulttype">DefaultType <var>MIME-type|none</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">MIME content-type that will be sent if the
server cannot determine a type in any other way</td></tr>
<tr><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Fragment size to be compressed at one time by zlib</td></tr>
<tr class="odd"><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">How much compression do we apply to the output</td></tr>
@@ -464,7 +464,7 @@ cache</td></tr>
cache</td></tr>
<tr><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
before declaring the response uncacheable</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
+<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 1 </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
cache</td></tr>
<tr><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">The algorithm used to select documents for removal from the
cache</td></tr>
@@ -511,115 +511,119 @@ response</td></tr>
proxied</td></tr>
<tr class="odd"><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
<tr><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
+<tr class="odd"><td><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset <var>character set</var></a></td><td> ISO-8859-1 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Define the character set for proxied FTP listings</td></tr>
+<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
proxied resources</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
+<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> -1 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
through</td></tr>
-<tr><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
- <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
+<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]] [nocanon]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
+<tr><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
+ <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
+<tr><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
+<tr><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
+<tr class="odd"><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
+<tr><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
+<tr><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
+<tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the end
+<tr class="odd"><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Name of the file that will be inserted at the end
of the index listing</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP receive buffer size</td></tr>
-<tr><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
+<tr><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP receive buffer size</td></tr>
+<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
a different URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
+<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
of the current URL</td></tr>
-<tr><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
+<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
a different URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
+<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
a different URL</td></tr>
-<tr><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any character set associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content encoding associations for a set of file
+<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any handler associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any input filter associations for a set of file
+<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any language associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any output filter associations for a set of file
+<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content type associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
-[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Selects which authenticated users can access
+<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
+[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
+<tr class="odd"><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Selects which authenticated users can access
a resource</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a condition under which rewriting will take place
+<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
+ <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
+<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
synchronization</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
+<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
processing</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the CPU consumption of processes launched
+<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
+</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
+<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
+ <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
+<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the CPU consumption of processes launched
by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the memory consumption of processes launched
+<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the memory consumption of processes launched
by Apache children</td></tr>
-<tr><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of processes that can be launched by
+<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the number of processes that can be launched by
processes launched by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Interaction between host-level access control and
+<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Interaction between host-level access control and
user authentication</td></tr>
-<tr><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the file used to store coordination data for
+<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the file used to store coordination data for
the child processes</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activates a CGI script for a particular request
+<tr><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Activates a CGI script for a particular request
method.</td></tr>
-<tr><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
+<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
target as a CGI script</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
+<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
and designates the target as a CGI script</td></tr>
-<tr><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
+<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Technique for locating the interpreter for CGI
scripts</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
+<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
+<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
in the scriptlog</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
-<tr><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
+<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
+<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
the cgi daemon</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
+<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr class="odd"><td><a href="mod_status.html#seerequesttail">SeeRequestTail On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Determine if mod_status displays the first 63 characters
+of a request or the last 63, assuming the request itself is greater than
+63 chars.</td></tr>
<tr><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP buffer size</td></tr>
<tr class="odd"><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Email address that the server includes in error
messages sent to the client</td></tr>
@@ -649,73 +653,75 @@ handler</td></tr>
input</td></tr>
<tr><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process responses from the
server</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Error message displayed when there is an SSI
+<tr class="odd"><td><a href="mod_include.html#ssienableaccess">SSIEnableAccess on|off</a></td><td> off </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enable the -A flag during conditional flow control processing.</td></tr>
+<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
error</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Configures the format in which date strings are
+<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
displayed</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for defining acceptable CA names</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
defining acceptable CA names</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
+<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
+<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
+<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
+<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
+<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
operations</td></tr>
-<tr><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
+<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
+<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
keys</td></tr>
-<tr><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
proxy handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
+<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
+[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
source</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Allow access only when an arbitrarily complex
+<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
boolean expression is true</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Deny access when SSL is not used for the
+<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
HTTP request</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of the global/inter-process SSL Session
+<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Number of seconds before an SSL session expires
+<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
in the Session Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
+<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
+<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
Certificate verification</td></tr>
-<tr><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of threads created on startup</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
+<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created on startup</td></tr>
+<tr class="odd"><td><a href="mod_substitute.html#substitute">Substitute <var>s/pattern/substitution/[inf]</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pattern to filter the response content</td></tr>
<tr><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">User and group permissions for CGI programs</td></tr>
<tr class="odd"><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
per child process</td></tr>
diff --git a/docs/manual/mod/quickreference.html.ja.euc-jp b/docs/manual/mod/quickreference.html.ja.euc-jp
index 57884246..7d18b0b0 100644
--- a/docs/manual/mod/quickreference.html.ja.euc-jp
+++ b/docs/manual/mod/quickreference.html.ja.euc-jp
@@ -641,38 +641,39 @@ in the Session Cache</td></tr>
Certificate verification</td></tr>
<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë»Ò¥µ¡¼¥Ð¥×¥í¥»¥¹¤Î¿ô</td></tr>
<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">µ¯Æ°»þ¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¤Î¿ô</td></tr>
-<tr class="odd"><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td /></tr><tr class="odd"><td class="descr" colspan="4">CGI ¥×¥í¥°¥é¥à¤Î¥æ¡¼¥¶¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¡¢¥°¥ë¡¼¥×¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó</td></tr>
-<tr><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">ÀßÄê²Äǽ¤Ê»Ò¥×¥í¥»¥¹Ëè¤Î¥¹¥ì¥Ã¥É¿ô¤Î¾å¸Â¤ò
+<tr class="odd"><td><a href="mod_substitute.html#substitute">Substitute <var>s/pattern/substitution/[inf]</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pattern to filter the response content</td></tr>
+<tr><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td /></tr><tr><td class="descr" colspan="4">CGI ¥×¥í¥°¥é¥à¤Î¥æ¡¼¥¶¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¡¢¥°¥ë¡¼¥×¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">ÀßÄê²Äǽ¤Ê»Ò¥×¥í¥»¥¹Ëè¤Î¥¹¥ì¥Ã¥É¿ô¤Î¾å¸Â¤ò
ÀßÄꤷ¤Þ¤¹</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">»Ò¥×¥í¥»¥¹¤½¤ì¤¾¤ì¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¿ô</td></tr>
-<tr><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò¼õ¤±»ý¤Ä¥¹¥ì¥Ã¥É¤¬»ÈÍѤ¹¤ë
+<tr><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">»Ò¥×¥í¥»¥¹¤½¤ì¤¾¤ì¤ËÀ¸À®¤µ¤ì¤ë¥¹¥ì¥Ã¥É¿ô</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥¯¥é¥¤¥¢¥ó¥È¤Î¥³¥Í¥¯¥·¥ç¥ó¤ò¼õ¤±»ý¤Ä¥¹¥ì¥Ã¥É¤¬»ÈÍѤ¹¤ë
¥¹¥¿¥Ã¥¯¤Î¥Ð¥¤¥È¿ô</td></tr>
-<tr class="odd"><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">³Æ¥¤¥Ù¥ó¥È¤Ë¤Ä¤¤¤Æ¡¢¥ê¥¯¥¨¥¹¥È¤ò¼ºÇÔ¤µ¤»¤ë¤Þ¤Ç¤Ë¥µ¡¼¥Ð¤¬
+<tr><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">³Æ¥¤¥Ù¥ó¥È¤Ë¤Ä¤¤¤Æ¡¢¥ê¥¯¥¨¥¹¥È¤ò¼ºÇÔ¤µ¤»¤ë¤Þ¤Ç¤Ë¥µ¡¼¥Ð¤¬
ÂԤĻþ´Ö¤òÀßÄê</td></tr>
-<tr><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4"><code>TRACE</code> ¥á¥½¥Ã¥É¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë±þÅúÊýË¡¤ò·è¤á¤ë
+<tr class="odd"><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4"><code>TRACE</code> ¥á¥½¥Ã¥É¤Î¥ê¥¯¥¨¥¹¥È¤ËÂФ¹¤ë±þÅúÊýË¡¤ò·è¤á¤ë
</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥í¥°¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤ò»ØÄê</td></tr>
-<tr><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td /></tr><tr><td class="descr" colspan="4"><code>mime.types</code> ¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
-<tr class="odd"><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">´Ä¶­¤«¤éÊÑ¿ô¤ò¼è¤ê½ü¤¯</td></tr>
-<tr><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|Dns</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤Î̾Á°¤È¥Ý¡¼¥È¤ò·èÄꤹ¤ëÊýË¡¤òÀßÄꤹ¤ë</td></tr>
-<tr class="odd"><td><a href="core.html#usecanonicalphysicalport">UseCanonicalPhysicalPort On|Off</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤Î̾Á°¤È¥Ý¡¼¥È¤Î²ò·èÊýË¡¤òÀßÄꤹ¤ë</td></tr>
-<tr><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤ËÍѤ¤¤ë¥æ¡¼¥¶ ID</td></tr>
-<tr class="odd"><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¥æ¡¼¥¶ÀìÍѥǥ£¥ì¥¯¥È¥ê¤Î°ÌÃÖ</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
+<tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">¥í¥°¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤ò»ØÄê</td></tr>
+<tr class="odd"><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td /></tr><tr class="odd"><td class="descr" colspan="4"><code>mime.types</code> ¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ</td></tr>
+<tr><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
+...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">´Ä¶­¤«¤éÊÑ¿ô¤ò¼è¤ê½ü¤¯</td></tr>
+<tr class="odd"><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|Dns</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">¥µ¡¼¥Ð¤¬¼«Ê¬¼«¿È¤Î̾Á°¤È¥Ý¡¼¥È¤ò·èÄꤹ¤ëÊýË¡¤òÀßÄꤹ¤ë</td></tr>
+<tr><td><a href="core.html#usecanonicalphysicalport">UseCanonicalPhysicalPort On|Off</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">¥µ¡¼¥Ð¤Î̾Á°¤È¥Ý¡¼¥È¤Î²ò·èÊýË¡¤òÀßÄꤹ¤ë</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥ê¥¯¥¨¥¹¥È¤Ë±þÅú¤¹¤ëºÝ¤ËÍѤ¤¤ë¥æ¡¼¥¶ ID</td></tr>
+<tr><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">¥æ¡¼¥¶ÀìÍѥǥ£¥ì¥¯¥È¥ê¤Î°ÌÃÖ</td></tr>
+<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
for a given virtual host</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
+<tr><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
for a given virtual host</td></tr>
-<tr><td><a href="core.html#virtualhost">&lt;VirtualHost
+<tr class="odd"><td><a href="core.html#virtualhost">&lt;VirtualHost
<var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">ÆÃÄê¤Î¥Û¥¹¥È̾¤ä IP ¥¢¥É¥ì¥¹¤Î¤ß¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
+ ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">ÆÃÄê¤Î¥Û¥¹¥È̾¤ä IP ¥¢¥É¥ì¥¹¤Î¤ß¤ËŬÍѤµ¤ì¤ë¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
°Ï¤à</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
+<tr><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
a given virtual host</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
+<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
a given virtual host</td></tr>
-<tr class="odd"><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">¥Í¥Ã¥È¥ï¡¼¥¯Àܳ¤Î¼õ¤±ÉÕ¤±¤Ë accept() ¤òAcceptEx ¤ÎÂå¤ï¤ê¤Ë»È¤¦</td></tr>
-<tr><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¼Â¹Ô¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
+<tr><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">¥Í¥Ã¥È¥ï¡¼¥¯Àܳ¤Î¼õ¤±ÉÕ¤±¤Ë accept() ¤òAcceptEx ¤ÎÂå¤ï¤ê¤Ë»È¤¦</td></tr>
+<tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¼Â¹Ô¥Ó¥Ã¥È¤¬ÀßÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Î SSI ¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤ò
²òÀϤ¹¤ë</td></tr>
</table></div>
<div class="bottomlang">
diff --git a/docs/manual/mod/quickreference.html.ko.euc-kr b/docs/manual/mod/quickreference.html.ko.euc-kr
index 16064fc4..ecc6e39b 100644
--- a/docs/manual/mod/quickreference.html.ko.euc-kr
+++ b/docs/manual/mod/quickreference.html.ko.euc-kr
@@ -244,7 +244,7 @@ switch before dumping core</td></tr>
<tr><td><a href="mod_autoindex.html#defaulticon">DefaultIcon <var>url-path</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ƯÁ¤ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÏÁö¾ÊÀº ÆÄÀÏ¿¡ »ç¿ëÇÒ ¾ÆÀÌÄÜ</td></tr>
<tr class="odd"><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sets all files in the given scope to the specified
language</td></tr>
-<tr><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">MIME content-type that will be sent if the
+<tr><td><a href="core.html#defaulttype">DefaultType <var>MIME-type|none</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">MIME content-type that will be sent if the
server cannot determine a type in any other way</td></tr>
<tr class="odd"><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">zlibÀÌ Çѹø¿¡ ¾ÐÃàÇÒ Å©±â</td></tr>
<tr><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Ãâ·ÂÀ» ¾î´ÀÁ¤µµ ¾ÐÃàÇϴ°¡</td></tr>
@@ -456,140 +456,142 @@ response</td></tr>
proxied</td></tr>
<tr><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
<tr class="odd"><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
+<tr><td><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset <var>character set</var></a></td><td> ISO-8859-1 </td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Define the character set for proxied FTP listings</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
+<tr><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
proxied resources</td></tr>
-<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
+<tr class="odd"><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> -1 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
through</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
- <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
+<tr><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]] [nocanon]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
+ <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
+<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
+<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
+<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
request</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
+<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
connections</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
+<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
+<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
expressions</td></tr>
-<tr><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
-<tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
+<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
+<tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
+<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
header for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ÆÄÀϸñ·Ï ¸¶Áö¸·¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</td></tr>
-<tr><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP receive buffer size</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
+<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÆÄÀϸñ·Ï ¸¶Áö¸·¿¡ »ðÀÔÇÒ ÆÄÀÏÀÇ À̸§</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP receive buffer size</td></tr>
+<tr><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ÇöÀç URLÀÌ Á¤±ÔÇ¥Çö½Ä¿¡ ÇØ´çÇÏ¸é ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ»
+<tr class="odd"><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ÇöÀç URLÀÌ Á¤±ÔÇ¥Çö½Ä¿¡ ÇØ´çÇÏ¸é ¿ÜºÎ ¸®´ÙÀÌ·º¼ÇÀ»
º¸³½´Ù</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
+<tr><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
¿µ±¸ ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
+<tr class="odd"><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Ŭ¶óÀ̾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
Àӽà ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
+<tr><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content encoding associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
+<tr><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any handler associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any input filter associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
+<tr><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any language associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any output filter associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
+<tr><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content type associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset <var>header</var>
-[<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">HTTP ¿äû Çì´õ¸¦ ±¸¼ºÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Selects which authenticated users can access
+<tr class="odd"><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset <var>header</var>
+[<var>value</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">HTTP ¿äû Çì´õ¸¦ ±¸¼ºÇÑ´Ù</td></tr>
+<tr><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Selects which authenticated users can access
a resource</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
+<tr class="odd"><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
+<tr><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
+ <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a condition under which rewriting will take place
</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
+<tr><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
synchronization</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
+<tr class="odd"><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
processing</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
+<tr><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the CPU consumption of processes launched
+<tr class="odd"><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
+</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
+<tr><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewriterule">RewriteRule
+ <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
+<tr><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the CPU consumption of processes launched
by Apache children</td></tr>
-<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the memory consumption of processes launched
+<tr class="odd"><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the memory consumption of processes launched
by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the number of processes that can be launched by
+<tr><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of processes that can be launched by
processes launched by Apache children</td></tr>
-<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Interaction between host-level access control and
+<tr class="odd"><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Interaction between host-level access control and
user authentication</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the file used to store coordination data for
+<tr><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the file used to store coordination data for
the child processes</td></tr>
-<tr><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">ƯÁ¤ ¿äû¸Þ¼­µå¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
+<tr class="odd"><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ƯÁ¤ ¿äû¸Þ¼­µå¿¡ ´ëÇØ CGI ½ºÅ©¸³Æ®¸¦
»ç¿ëÇÑ´Ù.</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÏ°í ´ë»óÀÌ CGI
+<tr><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î ´ëÀÀÇÏ°í ´ë»óÀÌ CGI
½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</td></tr>
-<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î
+<tr class="odd"><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Á¤±ÔÇ¥Çö½ÄÀ» »ç¿ëÇÏ¿© URLÀ» ƯÁ¤ ÆÄÀϽýºÅÛ Àå¼Ò·Î
´ëÀÀÇÏ°í ´ë»óÀÌ CGI ½ºÅ©¸³Æ®¶ó°í ¾Ë¸°´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Technique for locating the interpreter for CGI
+<tr><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
scripts</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">CGI ½ºÅ©¸³Æ® ¿À·ù·Î±×ÆÄÀÏÀÇ À§Ä¡</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">½ºÅ©¸³Æ® ·Î±×¿¡ ±â·ÏÇÒ PUT ȤÀº POST ¿äûÀÇ ÃÖ´ë·®</td></tr>
-<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">CGI ½ºÅ©¸³Æ® ·Î±×ÆÄÀÏÀÇ Å©±â Á¦ÇÑ</td></tr>
-<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">cgi µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ÒÄÏÀÇ À̸§</td></tr>
-<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP buffer size</td></tr>
-<tr><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Email address that the server includes in error
+<tr class="odd"><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">CGI ½ºÅ©¸³Æ® ¿À·ù·Î±×ÆÄÀÏÀÇ À§Ä¡</td></tr>
+<tr><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">½ºÅ©¸³Æ® ·Î±×¿¡ ±â·ÏÇÒ PUT ȤÀº POST ¿äûÀÇ ÃÖ´ë·®</td></tr>
+<tr class="odd"><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">CGI ½ºÅ©¸³Æ® ·Î±×ÆÄÀÏÀÇ Å©±â Á¦ÇÑ</td></tr>
+<tr><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">cgi µ¥¸ó°ú Åë½ÅÀ» À§ÇØ »ç¿ëÇÒ ¼ÒÄÏÀÇ À̸§</td></tr>
+<tr class="odd"><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
+<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP buffer size</td></tr>
+<tr class="odd"><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Email address that the server includes in error
messages sent to the client</td></tr>
-<tr class="odd"><td><a href="core.html#serveralias">ServerAlias <var>hostname</var> [<var>hostname</var>] ...</a></td><td></td><td>v</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Alternate names for a host used when matching requests
+<tr><td><a href="core.html#serveralias">ServerAlias <var>hostname</var> [<var>hostname</var>] ...</a></td><td></td><td>v</td><td>C</td></tr><tr><td class="descr" colspan="4">Alternate names for a host used when matching requests
to name-virtual hosts</td></tr>
-<tr><td><a href="mpm_common.html#serverlimit">ServerLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Upper limit on configurable number of processes</td></tr>
-<tr class="odd"><td><a href="core.html#servername">ServerName [<var>scheme</var>://]<var>fully-qualified-domain-name</var>[:<var>port</var>]</a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Hostname and port that the server uses to identify
+<tr class="odd"><td><a href="mpm_common.html#serverlimit">ServerLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Upper limit on configurable number of processes</td></tr>
+<tr><td><a href="core.html#servername">ServerName [<var>scheme</var>://]<var>fully-qualified-domain-name</var>[:<var>port</var>]</a></td><td></td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Hostname and port that the server uses to identify
itself</td></tr>
-<tr><td><a href="core.html#serverpath">ServerPath <var>URL-path</var></a></td><td></td><td>v</td><td>C</td></tr><tr><td class="descr" colspan="4">Legacy URL pathname for a name-based virtual host that
+<tr class="odd"><td><a href="core.html#serverpath">ServerPath <var>URL-path</var></a></td><td></td><td>v</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Legacy URL pathname for a name-based virtual host that
is accessed by an incompatible browser</td></tr>
-<tr class="odd"><td><a href="core.html#serverroot">ServerRoot <var>directory-path</var></a></td><td> /usr/local/apache </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Base directory for the server installation</td></tr>
-<tr><td><a href="core.html#serversignature">ServerSignature On|Off|EMail</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures the footer on server-generated documents</td></tr>
-<tr class="odd"><td><a href="core.html#servertokens">ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</a></td><td> Full </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the <code>Server</code> HTTP response
+<tr><td><a href="core.html#serverroot">ServerRoot <var>directory-path</var></a></td><td> /usr/local/apache </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Base directory for the server installation</td></tr>
+<tr class="odd"><td><a href="core.html#serversignature">ServerSignature On|Off|EMail</a></td><td> Off </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the footer on server-generated documents</td></tr>
+<tr><td><a href="core.html#servertokens">ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</a></td><td> Full </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures the <code>Server</code> HTTP response
header</td></tr>
-<tr><td><a href="mod_env.html#setenv">SetEnv <var>env-variable</var> <var>value</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="mod_setenvif.html#setenvif">SetEnvIf <em>attribute
+<tr class="odd"><td><a href="mod_env.html#setenv">SetEnv <var>env-variable</var> <var>value</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
+<tr><td><a href="mod_setenvif.html#setenvif">SetEnvIf <em>attribute
regex [!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase <em>attribute regex
+ [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
+<tr class="odd"><td><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase <em>attribute regex
[!]env-variable</em>[=<em>value</em>]
- [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í ¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦
+ [[!]<em>env-variable</em>[=<em>value</em>]] ...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏÁö¾Ê°í ¿äûÀÇ ¼ºÁú¿¡ µû¶ó ȯ°æº¯¼ö¸¦
¼³Á¤ÇÑ´Ù</td></tr>
-<tr class="odd"><td><a href="core.html#sethandler">SetHandler <var>handler-name</var>|None</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Forces all matching files to be processed by a
+<tr><td><a href="core.html#sethandler">SetHandler <var>handler-name</var>|None</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Forces all matching files to be processed by a
handler</td></tr>
-<tr><td><a href="core.html#setinputfilter">SetInputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process client requests and POST
+<tr class="odd"><td><a href="core.html#setinputfilter">SetInputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the filters that will process client requests and POST
input</td></tr>
-<tr class="odd"><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the filters that will process responses from the
+<tr><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process responses from the
server</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssienableaccess">SSIEnableAccess on|off</a></td><td> off </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enable the -A flag during conditional flow control processing.</td></tr>
<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
error</td></tr>
@@ -657,41 +659,42 @@ in the Session Cache</td></tr>
Certificate verification</td></tr>
<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created on startup</td></tr>
-<tr class="odd"><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">CGI ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑ</td></tr>
-<tr><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
+<tr class="odd"><td><a href="mod_substitute.html#substitute">Substitute <var>s/pattern/substitution/[inf]</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pattern to filter the response content</td></tr>
+<tr><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">CGI ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÒ »ç¿ëÀÚ¿Í ±×·ì ±ÇÇÑ</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
per child process</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
-<tr><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
+<tr><td><a href="mpm_common.html#threadsperchild">ThreadsPerChild <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created by each child process</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#threadstacksize">ThreadStackSize <var>size</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">The size in bytes of the stack used by threads handling
client connections</td></tr>
-<tr class="odd"><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Amount of time the server will wait for
+<tr><td><a href="core.html#timeout">TimeOut <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>C</td></tr><tr><td class="descr" colspan="4">Amount of time the server will wait for
certain events before failing a request</td></tr>
-<tr><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Determines the behaviour on <code>TRACE</code>
+<tr class="odd"><td><a href="core.html#traceenable">TraceEnable <var>[on|off|extended]</var></a></td><td> on </td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Determines the behaviour on <code>TRACE</code>
requests</td></tr>
-<tr class="odd"><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">·Î±×ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
-<tr><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">The location of the <code>mime.types</code> file</td></tr>
-<tr class="odd"><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
-...</a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">ȯ°æº¯¼ö¸¦ Á¦°ÅÇÑ´Ù</td></tr>
-<tr><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|DNS</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures how the server determines its own name and
+<tr><td><a href="mod_log_config.html#transferlog">TransferLog <var>file</var>|<var>pipe</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">·Î±×ÆÄÀÏ À§Ä¡¸¦ ¼³Á¤ÇÑ´Ù</td></tr>
+<tr class="odd"><td><a href="mod_mime.html#typesconfig">TypesConfig <var>file-path</var></a></td><td> conf/mime.types </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The location of the <code>mime.types</code> file</td></tr>
+<tr><td><a href="mod_env.html#unsetenv" id="U" name="U">UnsetEnv <var>env-variable</var> [<var>env-variable</var>]
+...</a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">ȯ°æº¯¼ö¸¦ Á¦°ÅÇÑ´Ù</td></tr>
+<tr class="odd"><td><a href="core.html#usecanonicalname">UseCanonicalName On|Off|DNS</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures how the server determines its own name and
port</td></tr>
-<tr class="odd"><td><a href="core.html#usecanonicalphysicalport">UseCanonicalPhysicalPort On|Off</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Configures how the server determines its own name and
+<tr><td><a href="core.html#usecanonicalphysicalport">UseCanonicalPhysicalPort On|Off</a></td><td> Off </td><td>svd</td><td>C</td></tr><tr><td class="descr" colspan="4">Configures how the server determines its own name and
port</td></tr>
-<tr><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">The userid under which the server will answer
+<tr class="odd"><td><a href="mpm_common.html#user">User <var>unix-userid</var></a></td><td> #-1 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">The userid under which the server will answer
requests</td></tr>
-<tr class="odd"><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td> public_html </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">»ç¿ëÀÚº° µð·ºÅ丮 À§Ä¡</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
+<tr><td><a href="mod_userdir.html#userdir">UserDir <em>directory-filename</em></a></td><td> public_html </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">»ç¿ëÀÚº° µð·ºÅ丮 À§Ä¡</td></tr>
+<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentroot" id="V" name="V">VirtualDocumentRoot <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
for a given virtual host</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the document root
+<tr><td><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the document root
for a given virtual host</td></tr>
-<tr><td><a href="core.html#virtualhost">&lt;VirtualHost
+<tr class="odd"><td><a href="core.html#virtualhost">&lt;VirtualHost
<var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
- ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr><td class="descr" colspan="4">Contains directives that apply only to a specific
+ ...&gt; ... &lt;/VirtualHost&gt;</a></td><td></td><td>s</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Contains directives that apply only to a specific
hostname or IP address</td></tr>
-<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
+<tr><td><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the CGI directory for
a given virtual host</td></tr>
-<tr><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
+<tr class="odd"><td><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP <em>interpolated-directory</em>|none</a></td><td> none </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Dynamically configure the location of the cgi directory for
a given virtual host</td></tr>
-<tr class="odd"><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Use accept() rather than AcceptEx() to accept network connections</td></tr>
-<tr><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
+<tr><td><a href="mpm_winnt.html#win32disableacceptex" id="W" name="W">Win32DisableAcceptEx</a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Use accept() rather than AcceptEx() to accept network connections</td></tr>
+<tr class="odd"><td><a href="mod_include.html#xbithack" id="X" name="X">XBitHack on|off|full</a></td><td> off </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Parse SSI directives in files with the execute bit
set</td></tr>
</table></div>
<div class="bottomlang">
diff --git a/docs/manual/mod/quickreference.html.ru.koi8-r b/docs/manual/mod/quickreference.html.ru.koi8-r
index 948b3d93..774bd3be 100644
--- a/docs/manual/mod/quickreference.html.ru.koi8-r
+++ b/docs/manual/mod/quickreference.html.ru.koi8-r
@@ -279,7 +279,7 @@ a DAV resource</td></tr>
configured</td></tr>
<tr><td><a href="mod_mime.html#defaultlanguage">DefaultLanguage <var>MIME-lang</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sets all files in the given scope to the specified
language</td></tr>
-<tr class="odd"><td><a href="core.html#defaulttype">DefaultType <var>MIME-type</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">MIME content-type that will be sent if the
+<tr class="odd"><td><a href="core.html#defaulttype">DefaultType <var>MIME-type|none</var></a></td><td> text/plain </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">MIME content-type that will be sent if the
server cannot determine a type in any other way</td></tr>
<tr><td><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize <var>value</var></a></td><td> 8096 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Fragment size to be compressed at one time by zlib</td></tr>
<tr class="odd"><td><a href="mod_deflate.html#deflatecompressionlevel">DeflateCompressionLevel <var>value</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">How much compression do we apply to the output</td></tr>
@@ -463,7 +463,7 @@ cache</td></tr>
cache</td></tr>
<tr><td><a href="mod_mem_cache.html#mcachemaxstreamingbuffer">MCacheMaxStreamingBuffer <var>size_in_bytes</var></a></td><td> the smaller of 1000 +</td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum amount of a streamed response to buffer in memory
before declaring the response uncacheable</td></tr>
-<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
+<tr class="odd"><td><a href="mod_mem_cache.html#mcacheminobjectsize">MCacheMinObjectSize <var>bytes</var></a></td><td> 1 </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">The minimum size (in bytes) of a document to be allowed in the
cache</td></tr>
<tr><td><a href="mod_mem_cache.html#mcacheremovalalgorithm">MCacheRemovalAlgorithm LRU|GDSF</a></td><td> GDSF </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">The algorithm used to select documents for removal from the
cache</td></tr>
@@ -510,115 +510,119 @@ response</td></tr>
proxied</td></tr>
<tr class="odd"><td><a href="mod_proxy.html#proxydomain">ProxyDomain <var>Domain</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Default domain name for proxied requests</td></tr>
<tr><td><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Override error pages for proxied content</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
-<tr><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
+<tr class="odd"><td><a href="mod_proxy.html#proxyftpdircharset">ProxyFtpDirCharset <var>character set</var></a></td><td> ISO-8859-1 </td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Define the character set for proxied FTP listings</td></tr>
+<tr><td><a href="mod_proxy.html#proxyiobuffersize">ProxyIOBufferSize <var>bytes</var></a></td><td> 8192 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Determine size of internal data throughput buffer</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxymatch">&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Container for directives applied to regular-expression-matched
proxied resources</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> 10 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
+<tr><td><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards <var>number</var></a></td><td> -1 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximium number of proxies that a request can be forwarded
through</td></tr>
-<tr><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
- <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
+<tr class="odd"><td><a href="mod_proxy.html#proxypass">ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]] [nocanon]</a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maps remote servers into the local server URL-space</td></tr>
+<tr><td><a href="mod_proxy.html#proxypassmatch">ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
+ <var>[key=value</var> ...]]</a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Maps remote servers into the local server URL-space using regular expressions</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse [<var>path</var>] <var>url</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the URL in HTTP response headers sent from a reverse
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
+<tr><td><a href="mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Domain string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
+<tr class="odd"><td><a href="mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></a></td><td></td><td>svd</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Adjusts the Path string in Set-Cookie headers from a reverse-
proxied server</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
+<tr><td><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Use incoming Host HTTP request header for proxy
request</td></tr>
-<tr><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
+<tr class="odd"><td><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network buffer size for proxied HTTP and FTP
connections</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
+<tr><td><a href="mod_proxy.html#proxyremote">ProxyRemote <var>match</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Remote proxy used to handle certain requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyremotematch">ProxyRemoteMatch <var>regex</var> <var>remote-server</var></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Remote proxy used to handle requests matched by regular
expressions</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
-<tr><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
-<tr><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
-<tr class="odd"><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
+<tr><td><a href="mod_proxy.html#proxyrequests">ProxyRequests On|Off</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables forward (standard) proxy requests</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxyset">ProxySet <var>url</var> <var>key=value [key=value ...]</var></a></td><td></td><td>d</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Set various Proxy balancer or member parameters</td></tr>
+<tr><td><a href="mod_proxy.html#proxystatus">ProxyStatus Off|On|Full</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Show Proxy LoadBalancer status in mod_status</td></tr>
+<tr class="odd"><td><a href="mod_proxy.html#proxytimeout">ProxyTimeout <var>seconds</var></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Network timeout for proxied requests</td></tr>
+<tr><td><a href="mod_proxy.html#proxyvia">ProxyVia On|Off|Full|Block</a></td><td> Off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Information provided in the <code>Via</code> HTTP response
header for proxied requests</td></tr>
-<tr><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Name of the file that will be inserted at the end
+<tr class="odd"><td><a href="mod_autoindex.html#readmename" id="R" name="R">ReadmeName <var>filename</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Name of the file that will be inserted at the end
of the index listing</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">TCP receive buffer size</td></tr>
-<tr><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
+<tr><td><a href="mpm_common.html#receivebuffersize">ReceiveBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP receive buffer size</td></tr>
+<tr class="odd"><td><a href="mod_alias.html#redirect">Redirect [<var>status</var>] <var>URL-path</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect asking the client to fetch
a different URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
-<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
+<tr><td><a href="mod_alias.html#redirectmatch">RedirectMatch [<var>status</var>] <var>regex</var>
+<var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external redirect based on a regular expression match
of the current URL</td></tr>
-<tr><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
+<tr class="odd"><td><a href="mod_alias.html#redirectpermanent">RedirectPermanent <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external permanent redirect asking the client to fetch
a different URL</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
+<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
a different URL</td></tr>
-<tr><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any character set associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content encoding associations for a set of file
+<tr><td><a href="mod_mime.html#removeencoding">RemoveEncoding <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content encoding associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any handler associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removehandler">RemoveHandler <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any handler associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any input filter associations for a set of file
+<tr><td><a href="mod_mime.html#removeinputfilter">RemoveInputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any input filter associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any language associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removelanguage">RemoveLanguage <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any language associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any output filter associations for a set of file
+<tr><td><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any output filter associations for a set of file
extensions</td></tr>
-<tr><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
-...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any content type associations for a set of file
+<tr class="odd"><td><a href="mod_mime.html#removetype">RemoveType <var>extension</var> [<var>extension</var>]
+...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any content type associations for a set of file
extensions</td></tr>
-<tr class="odd"><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
-[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
-<tr><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Selects which authenticated users can access
+<tr><td><a href="mod_headers.html#requestheader">RequestHeader set|append|add|unset|edit <var>header</var>
+[<var>value</var>] [<var>replacement</var>] [early|env=[!]<var>variable</var>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure HTTP request headers</td></tr>
+<tr class="odd"><td><a href="core.html#require">Require <var>entity-name</var> [<var>entity-name</var>] ...</a></td><td></td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Selects which authenticated users can access
a resource</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
- <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a condition under which rewriting will take place
+<tr><td><a href="mod_rewrite.html#rewritebase">RewriteBase <em>URL-path</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the base URL for per-directory rewrites</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewritecond"> RewriteCond
+ <em>TestString</em> <em>CondPattern</em></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a condition under which rewriting will take place
</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
-<tr><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
+<tr><td><a href="mod_rewrite.html#rewriteengine">RewriteEngine on|off</a></td><td> off </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Enables or disables runtime rewriting engine</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewritelock">RewriteLock <em>file-path</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the lock file used for <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>
synchronization</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
+<tr><td><a href="mod_rewrite.html#rewritelog">RewriteLog <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the name of the file used for logging rewrite engine
processing</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel <em>Level</em></a></td><td> 0 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the verbosity of the log file used by the rewrite
engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
-</a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
-<tr><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
-<tr class="odd"><td><a href="mod_rewrite.html#rewriterule">RewriteRule
- <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
-<tr><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the CPU consumption of processes launched
+<tr><td><a href="mod_rewrite.html#rewritemap">RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
+</a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines a mapping function for key-lookup</td></tr>
+<tr class="odd"><td><a href="mod_rewrite.html#rewriteoptions">RewriteOptions <var>Options</var></a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Sets some special options for the rewrite engine</td></tr>
+<tr><td><a href="mod_rewrite.html#rewriterule">RewriteRule
+ <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Defines rules for the rewriting engine</td></tr>
+<tr class="odd"><td><a href="core.html#rlimitcpu">RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the CPU consumption of processes launched
by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the memory consumption of processes launched
+<tr><td><a href="core.html#rlimitmem">RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the memory consumption of processes launched
by Apache children</td></tr>
-<tr><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Limits the number of processes that can be launched by
+<tr class="odd"><td><a href="core.html#rlimitnproc">RLimitNPROC <var>number</var>|max [<var>number</var>|max]</a></td><td></td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Limits the number of processes that can be launched by
processes launched by Apache children</td></tr>
-<tr class="odd"><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Interaction between host-level access control and
+<tr><td><a href="core.html#satisfy" id="S" name="S">Satisfy Any|All</a></td><td> All </td><td>dh</td><td>C</td></tr><tr><td class="descr" colspan="4">Interaction between host-level access control and
user authentication</td></tr>
-<tr><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Location of the file used to store coordination data for
+<tr class="odd"><td><a href="mpm_common.html#scoreboardfile">ScoreBoardFile <var>file-path</var></a></td><td> logs/apache_status </td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the file used to store coordination data for
the child processes</td></tr>
-<tr class="odd"><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Activates a CGI script for a particular request
+<tr><td><a href="mod_actions.html#script">Script <var>method</var> <var>cgi-script</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Activates a CGI script for a particular request
method.</td></tr>
-<tr><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
+<tr class="odd"><td><a href="mod_alias.html#scriptalias">ScriptAlias <var>URL-path</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location and designates the
target as a CGI script</td></tr>
-<tr class="odd"><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
-<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
+<tr><td><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch <var>regex</var>
+<var>file-path</var>|<var>directory-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maps a URL to a filesystem location using a regular expression
and designates the target as a CGI script</td></tr>
-<tr><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Technique for locating the interpreter for CGI
+<tr class="odd"><td><a href="core.html#scriptinterpretersource">ScriptInterpreterSource Registry|Registry-Strict|Script</a></td><td> Script </td><td>svdh</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Technique for locating the interpreter for CGI
scripts</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
-<tr><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
+<tr><td><a href="mod_cgi.html#scriptlog">ScriptLog <var>file-path</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Location of the CGI script error logfile</td></tr>
+<tr class="odd"><td><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer <var>bytes</var></a></td><td> 1024 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum amount of PUT or POST requests that will be recorded
in the scriptlog</td></tr>
-<tr class="odd"><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
-<tr><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
+<tr><td><a href="mod_cgi.html#scriptloglength">ScriptLogLength <var>bytes</var></a></td><td> 10385760 </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Size limit of the CGI script logfile</td></tr>
+<tr class="odd"><td><a href="mod_cgid.html#scriptsock">ScriptSock <var>file-path</var></a></td><td> logs/cgisock </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">The filename prefix of the socket to use for communication with
the cgi daemon</td></tr>
-<tr class="odd"><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
-<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr><td><a href="mod_nw_ssl.html#securelisten">SecureListen [<var>IP-address</var>:]<var>portnumber</var>
+<var>Certificate-Name</var> [MUTUAL]</a></td><td></td><td>s</td><td>B</td></tr><tr><td class="descr" colspan="4">Enables SSL encryption for the specified port</td></tr>
+<tr class="odd"><td><a href="mod_status.html#seerequesttail">SeeRequestTail On|Off</a></td><td> Off </td><td>s</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Determine if mod_status displays the first 63 characters
+of a request or the last 63, assuming the request itself is greater than
+63 chars.</td></tr>
<tr><td><a href="mpm_common.html#sendbuffersize">SendBufferSize <var>bytes</var></a></td><td> 0 </td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">TCP buffer size</td></tr>
<tr class="odd"><td><a href="core.html#serveradmin">ServerAdmin <var>email-address</var>|<var>URL</var></a></td><td></td><td>sv</td><td>C</td></tr><tr class="odd"><td class="descr" colspan="4">Email address that the server includes in error
messages sent to the client</td></tr>
@@ -648,73 +652,75 @@ handler</td></tr>
input</td></tr>
<tr><td><a href="core.html#setoutputfilter">SetOutputFilter <var>filter</var>[;<var>filter</var>...]</a></td><td></td><td>svdh</td><td>C</td></tr><tr><td class="descr" colspan="4">Sets the filters that will process responses from the
server</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that ends an include element</td></tr>
-<tr><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Error message displayed when there is an SSI
+<tr class="odd"><td><a href="mod_include.html#ssienableaccess">SSIEnableAccess on|off</a></td><td> off </td><td>dh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Enable the -A flag during conditional flow control processing.</td></tr>
+<tr><td><a href="mod_include.html#ssiendtag">SSIEndTag <var>tag</var></a></td><td> "--&gt;" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that ends an include element</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssierrormsg">SSIErrorMsg <var>message</var></a></td><td> "[an error occurred +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Error message displayed when there is an SSI
error</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String that starts an include element</td></tr>
-<tr><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Configures the format in which date strings are
+<tr><td><a href="mod_include.html#ssistarttag">SSIStartTag <var>tag</var></a></td><td> "&lt;!--#" </td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">String that starts an include element</td></tr>
+<tr class="odd"><td><a href="mod_include.html#ssitimeformat">SSITimeFormat <var>formatstring</var></a></td><td> "%A, %d-%b-%Y %H:%M +</td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Configures the format in which date strings are
displayed</td></tr>
-<tr class="odd"><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
-<tr><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr><td><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho <var>string</var></a></td><td> "(none)" </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">String displayed when an unset variable is echoed</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr><td><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestfile">SSLCADNRequestFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for defining acceptable CA names</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr><td><a href="mod_ssl.html#sslcadnrequestpath">SSLCADNRequestPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
defining acceptable CA names</td></tr>
-<tr><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Client Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
-<tr><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr class="odd"><td><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of PEM-encoded Server CA Certificates</td></tr>
+<tr><td><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Server PEM-encoded X.509 Certificate file</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Server PEM-encoded Private Key file</td></tr>
+<tr><td><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
-<tr><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
+<tr class="odd"><td><a href="mod_ssl.html#sslcryptodevice">SSLCryptoDevice <em>engine</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Enable use of a cryptographic hardware accelerator</td></tr>
+<tr><td><a href="mod_ssl.html#sslengine">SSLEngine on|off|optional</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Engine Operation Switch</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslhonorcipherorder">SSLHonorCiperOrder <em>flag</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Option to prefer the server's cipher preference order</td></tr>
+<tr><td><a href="mod_ssl.html#sslmutex">SSLMutex <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Semaphore for internal mutual exclusion of
operations</td></tr>
-<tr><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
+<tr class="odd"><td><a href="mod_ssl.html#ssloptions">SSLOptions [+|-]<em>option</em> ...</a></td><td></td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure various SSL engine run-time options</td></tr>
+<tr><td><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog <em>type</em></a></td><td> builtin </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of pass phrase dialog for encrypted private
keys</td></tr>
-<tr><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
+<tr class="odd"><td><a href="mod_ssl.html#sslprotocol">SSLProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxycacertificatefile">SSLProxyCACertificateFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA Certificates
for Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycacertificatepath">SSLProxyCACertificatePath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA Certificates for
Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
+<tr><td><a href="mod_ssl.html#sslproxycarevocationfile">SSLProxyCARevocationFile <em>file-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
+<tr class="odd"><td><a href="mod_ssl.html#sslproxycarevocationpath">SSLProxyCARevocationPath <em>directory-path</em></a></td><td></td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded CA CRLs for
Remote Server Auth</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
+<tr><td><a href="mod_ssl.html#sslproxyciphersuite">SSLProxyCipherSuite <em>cipher-spec</em></a></td><td> ALL:!ADH:RC4+RSA:+H +</td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Cipher Suite available for negotiation in SSL
proxy handshake</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
-<tr><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyengine">SSLProxyEngine on|off</a></td><td> off </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">SSL Proxy Engine Operation Switch</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxymachinecertificatefile">SSLProxyMachineCertificateFile <em>filename</em></a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">File of concatenated PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxymachinecertificatepath">SSLProxyMachineCertificatePath <em>directory</em></a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Directory of PEM-encoded client certificates and keys to be used by the proxy</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxyprotocol">SSLProxyProtocol [+|-]<em>protocol</em> ...</a></td><td> all </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Configure usable SSL protocol flavors for proxy usage</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslproxyverify">SSLProxyVerify <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of remote server Certificate verification</td></tr>
+<tr><td><a href="mod_ssl.html#sslproxyverifydepth">SSLProxyVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Remote Server
Certificate verification</td></tr>
-<tr><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
-[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
+<tr class="odd"><td><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed <em>context</em> <em>source</em>
+[<em>bytes</em>]</a></td><td></td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pseudo Random Number Generator (PRNG) seeding
source</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Allow access only when an arbitrarily complex
+<tr><td><a href="mod_ssl.html#sslrequire">SSLRequire <em>expression</em></a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Allow access only when an arbitrarily complex
boolean expression is true</td></tr>
-<tr><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr><td class="descr" colspan="4">Deny access when SSL is not used for the
+<tr class="odd"><td><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Deny access when SSL is not used for the
HTTP request</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of the global/inter-process SSL Session
+<tr><td><a href="mod_ssl.html#sslsessioncache">SSLSessionCache <em>type</em></a></td><td> none </td><td>s</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of the global/inter-process SSL Session
Cache</td></tr>
-<tr><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">Number of seconds before an SSL session expires
+<tr class="odd"><td><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout <em>seconds</em></a></td><td> 300 </td><td>sv</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Number of seconds before an SSL session expires
in the Session Cache</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Variable name to determine user name</td></tr>
-<tr><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
-<tr class="odd"><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
+<tr><td><a href="mod_ssl.html#sslusername">SSLUserName <em>varname</em></a></td><td></td><td>sdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Variable name to determine user name</td></tr>
+<tr class="odd"><td><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient <em>level</em></a></td><td> none </td><td>svdh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Type of Client Certificate verification</td></tr>
+<tr><td><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth <em>number</em></a></td><td> 1 </td><td>svdh</td><td>E</td></tr><tr><td class="descr" colspan="4">Maximum depth of CA Certificates in Client
Certificate verification</td></tr>
-<tr><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
-<tr class="odd"><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of threads created on startup</td></tr>
+<tr class="odd"><td><a href="mpm_common.html#startservers">StartServers <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Number of child server processes created at startup</td></tr>
+<tr><td><a href="mpm_common.html#startthreads">StartThreads <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr><td class="descr" colspan="4">Number of threads created on startup</td></tr>
+<tr class="odd"><td><a href="mod_substitute.html#substitute">Substitute <var>s/pattern/substitution/[inf]</var></a></td><td></td><td>dh</td><td>E</td></tr><tr class="odd"><td class="descr" colspan="4">Pattern to filter the response content</td></tr>
<tr><td><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup <em>User Group</em></a></td><td></td><td>sv</td><td>E</td></tr><tr><td class="descr" colspan="4">User and group permissions for CGI programs</td></tr>
<tr class="odd"><td><a href="mpm_common.html#threadlimit" id="T" name="T">ThreadLimit <var>number</var></a></td><td></td><td>s</td><td>M</td></tr><tr class="odd"><td class="descr" colspan="4">Sets the upper limit on the configurable number of threads
per child process</td></tr>
diff --git a/docs/manual/new_features_2_2.html.en b/docs/manual/new_features_2_2.html.en
index f42976a6..edc5bccf 100644
--- a/docs/manual/new_features_2_2.html.en
+++ b/docs/manual/new_features_2_2.html.en
@@ -110,9 +110,6 @@
<dd><p><code class="module"><a href="./mod/mod_dbd.html">mod_dbd</a></code>, together with the apr_dbd framework,
brings direct SQL support to modules that need it. Supports
connection pooling in threaded MPMs.</p>
- <p><strong>Windows Users</strong> please note that this is not
- yet included in the standard windows build. If you try to use
- it on the Windows platform, please let us know how you get on.</p>
</dd>
</dl>
diff --git a/docs/manual/new_features_2_2.html.fr b/docs/manual/new_features_2_2.html.fr
index f2ba5acc..5dfc2e12 100644
--- a/docs/manual/new_features_2_2.html.fr
+++ b/docs/manual/new_features_2_2.html.fr
@@ -125,11 +125,6 @@
apr_dbd, fournit le support SQL direct aux modules
qui en ont besoin. Supporte la mise en commun des connexions
dans les modules MPM threadés.</p>
- <p><strong>Utilisateurs Windows</strong> : veuillez noter que ce
- support n'est pas encore inclus dans l'implémentation Windows
- standard. Si vous l'utilisez sur la plate-forme
- Windows, merci de nous faire savoir comment vous vous y
- prenez.</p>
</dd>
</dl>
@@ -240,10 +235,10 @@
que si l'utilisateur passe le paramètre <code>-t</code> à
<code class="program"><a href="./programs/httpd.html">httpd</a></code>.</dd>
- <dt>Définition de la taille de la pile pour les modules MPM threadés</dt>
+ <dt>Définition de la taille de la pile pour les modules MPM en processus légers</dt>
<dd>Une nouvelle directive a été ajoutée, <code>ThreadStackSize</code>
- afin de définir la taille de la pile pour tous les modules MPM threadés.
+ afin de définir la taille de la pile pour tous les modules MPM en processus légers (modules threadés).
Ceci s'avère nécessaire pour certains modules tiers sur des plateformes
dont la taille de la pile des threads par défaut est
trop petite.</dd>
@@ -272,7 +267,7 @@
est maintenant disponible dans l'espace de nommage <code>ap_</code>
depuis <code>ap_regex.h</code>. Les appels à <code>regcomp</code>,
<code>regexec</code>, etc... peuvent être remplacés par des appels à
- <code>ap_regcomp</code>, <code>ap_regcomp</code>.</dd>
+ <code>ap_regcomp</code>, <code>ap_regexec</code>.</dd>
<dt>Cadre d'application DBD (API pour base de données SQL)</dt>
diff --git a/docs/manual/platform/netware.html.en b/docs/manual/platform/netware.html.en
index af684380..ce3f4e28 100644
--- a/docs/manual/platform/netware.html.en
+++ b/docs/manual/platform/netware.html.en
@@ -613,17 +613,10 @@
steps:</p>
<ul>
- <li>Download the latest NetWare patch for OpenSSL from the
- <a href="http://www.openssl.org/contrib/">OpenSSL Contribution</a>
- page.</li>
-
- <li>Download the corresponding OpenSSL source code from the
+ <li>Download the recent OpenSSL 0.9.8 release source code from the
<a href="http://www.openssl.org/source/">OpenSSL Source</a>
- page.</li>
-
- <li>At the root of the OpenSSL source directory, apply the NetWare
- patch using the "patch" utility, for example:
- <div class="example"><p><code>patch -p 1 -i netwarepatch-0.9.7g.diff</code></p></div></li>
+ page (older 0.9.7 versions need to be patched and are therefore not
+ recommended).</li>
<li>Edit the file <code>NetWare/set_env.bat</code> and modify any
tools and utilities paths so that they correspond to your build
@@ -632,14 +625,25 @@
<li>From the root of the OpenSSL source directory, run the following
scripts:
<div class="example"><p><code>
- Netware/set_env netware-libc<br />
- Netware/build netware-libc
- </code></p></div></li>
+ Netware\set_env netware-libc<br />
+ Netware\build netware-libc
+ </code></p></div>
+ For performance reasons you should enable to build with ASM code.
+ Download NASM from the <a href="http://nasm.sourceforge.net/">SF site</a>.
+ Then configure OpenSSL to use ASM code:
+ <div class="example"><p><code>
+ Netware\build netware-libc nw-nasm enable-mdc2 enable-md5
+ </code></p></div>
+ Warning: dont use the CodeWarrior Assembler - it produces broken code!
+ </li>
<li>Before building Apache, set the environment variable
<code>OSSLSDK</code> to the full path to the root of the openssl
- source code directory.
- <div class="example"><p><code>Set OSSLSDK=d:\openssl-0.9.7x</code></p></div></li>
+ source code directory, and set WITH_MOD_SSL to 1.
+ <div class="example"><p><code>
+ Set OSSLSDK=d:\openssl-0.9.8x<br />
+ Set WITH_MOD_SSL=1
+ </code></p></div></li>
</ul>
diff --git a/docs/manual/platform/windows.html.en b/docs/manual/platform/windows.html.en
index 5a14cae6..f5d1c832 100644
--- a/docs/manual/platform/windows.html.en
+++ b/docs/manual/platform/windows.html.en
@@ -715,8 +715,8 @@
http://localhost/
</code></p></div>
- <p>Apache should respond with a welcome page and a link to the
- Apache manual. If nothing happens or you get an error, look in the
+ <p>Apache should respond with a welcome page and you should see
+ "It Works!". If nothing happens or you get an error, look in the
<code>error.log</code> file in the <code>logs</code> subdirectory.
If your host is not connected to the net, or if you have serious
problems with your DNS (Domain Name Service) configuration, you
diff --git a/docs/manual/programs/configure.html.en b/docs/manual/programs/configure.html.en
index 60de5d3a..ab3a7f11 100644
--- a/docs/manual/programs/configure.html.en
+++ b/docs/manual/programs/configure.html.en
@@ -689,8 +689,18 @@
</code></p></div>
<p>will compile most modules and build them as DSO modules.
</p>
+ <p><strong>Caveat:</strong>
+ <code>--enable-mods-shared=all</code> does not actually build all
+ modules. To build all modules then, one might use:</p>
+ <div class="example"><p><code>
+ ./configure \<br />
+ <span class="indent">
+ --with-ldap \<br />
+ --enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"
+ </span>
+ </code></p></div>
</dd>
-
+
<dt><code>--enable-modules=<var>MODULE-LIST</var></code></dt>
<dd>This option behaves similar to <code>--enable-mods-shared</code>,
but will link the given modules statically. This mean, these modules
diff --git a/docs/manual/programs/rotatelogs.html.en b/docs/manual/programs/rotatelogs.html.en
index 7d637a74..f8ae5346 100644
--- a/docs/manual/programs/rotatelogs.html.en
+++ b/docs/manual/programs/rotatelogs.html.en
@@ -23,36 +23,12 @@
</div>
<p><code>rotatelogs</code> is a simple program for use in
- conjunction with Apache's piped logfile feature. For example:</p>
-
-<div class="example"><p><code>
- CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
-</code></p></div>
-
- <p>This creates the files /var/logs/logfile.nnnn where nnnn is
- the system time at which the log nominally starts (this time
- will always be a multiple of the rotation time, so you can
- synchronize cron scripts with it). At the end of each rotation
- time (here after 24 hours) a new log is started.</p>
-
-<div class="example"><p><code>
- CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
-</code></p></div>
-
- <p>This configuration will rotate the logfile whenever it reaches
- a size of 5 megabytes.</p>
-
-<div class="example"><p><code>
- ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
-</code></p></div>
- <p>This configuration will rotate the error logfile whenever it
- reaches a size of 5 megabytes, and the suffix to the logfile name
- will be created of the form
- <code>errorlog.YYYY-mm-dd-HH_MM_SS</code>.</p>
-
+ conjunction with Apache's piped logfile feature. It supports
+ rotation based on a time interval or maximum size of the log.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#synopsis">Synopsis</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#options">Options</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#portability">Portability</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
@@ -62,8 +38,8 @@
<p><code><strong>rotatelogs</strong>
[ -<strong>l</strong> ]
<var>logfile</var>
- [ <var>rotationtime</var> [ <var>offset</var> ]] |
- [ <var>filesize</var>M ]</code></p>
+ <var>rotationtime</var>|<var>filesize</var>M
+ [ <var>offset</var> ]</code></p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="options" id="options">Options</a></h2>
@@ -72,8 +48,10 @@
<dt><code>-l</code></dt>
<dd>Causes the use of local time rather than GMT as the base for the
-interval. Note that using <code>-l</code> in an environment which changes the
-GMT offset (such as for BST or DST) can lead to unpredictable results!</dd>
+interval or for <code>strftime(3)</code> formatting with size-based
+rotation. Note that using <code>-l</code> in an environment which
+changes the GMT offset (such as for BST or DST) can lead to unpredictable
+results!</dd>
<dt><code><var>logfile</var></code></dt>
@@ -82,26 +60,73 @@ includes any '%' characters, it is treated as a format string for
<code>strftime(3)</code>. Otherwise, the suffix
<var>.nnnnnnnnnn</var> is automatically added and is the time in
seconds. Both formats compute the start time from the beginning of
-the current period.</dd>
+the current period. For example, if a rotation time of 86400 is
+specified, the hour, minute, and second fields created from the
+<code>strftime(3)</code> format will all be zero, referring to the
+beginning of the current 24-hour period (midnight).</dd>
<dt><code><var>rotationtime</var></code></dt>
-<dd>The time between log file rotations in seconds.</dd>
+<dd>The time between log file rotations in seconds. The rotation
+occurs at the beginning of this interval. For example, if the
+rotation time is 3600, the log file will be rotated at the beginning
+of every hour; if the rotation time is 86400, the log file will be
+rotated every night at midnight. (If no data is logged during an
+interval, no file will be created.)</dd>
+
+<dt><code><var>filesize</var>M</code></dt>
+
+<dd>The maximum file size in megabytes followed by the letter
+<code>M</code> to specify size rather than time.</dd>
<dt><code><var>offset</var></code></dt>
<dd>The number of minutes offset from UTC. If omitted, zero is
assumed and UTC is used. For example, to use local time in the zone
-UTC -5 hours, specify a value of <code>-300</code> for this argument.</dd>
-
-<dt><code><var>filesize</var>M</code></dt>
+UTC -5 hours, specify a value of <code>-300</code> for this argument.
+In most cases, <code>-l</code> should be used instead of specifying
+an offset.</dd>
-<dd>The maximum file size in megabytes followed by the letter
-<code>M</code> to specify size rather than time. Use this parameter
-in place of both rotationtime and offset.</dd>
</dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
+<h2><a name="examples" id="examples">Examples</a></h2>
+
+<div class="example"><p><code>
+ CustomLog "|bin/rotatelogs /var/logs/logfile 86400" common
+</code></p></div>
+
+ <p>This creates the files /var/logs/logfile.nnnn where nnnn is
+ the system time at which the log nominally starts (this time
+ will always be a multiple of the rotation time, so you can
+ synchronize cron scripts with it). At the end of each rotation
+ time (here after 24 hours) a new log is started.</p>
+
+<div class="example"><p><code>
+ CustomLog "|bin/rotatelogs -l /var/logs/logfile.%Y.%m.%d 86400" common
+</code></p></div>
+
+ <p>This creates the files /var/logs/logfile.yyyy.mm.dd where
+ yyyy is the year, mm is the month, and dd is the day of the month.
+ Logging will switch to a new file every day at midnight, local time.</p>
+
+<div class="example"><p><code>
+ CustomLog "|bin/rotatelogs /var/logs/logfile 5M" common
+</code></p></div>
+
+ <p>This configuration will rotate the logfile whenever it reaches
+ a size of 5 megabytes.</p>
+
+<div class="example"><p><code>
+ ErrorLog "|bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M"
+</code></p></div>
+ <p>This configuration will rotate the error logfile whenever it
+ reaches a size of 5 megabytes, and the suffix to the logfile name
+ will be created of the form
+ <code>errorlog.YYYY-mm-dd-HH_MM_SS</code>.</p>
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
<h2><a name="portability" id="portability">Portability</a></h2>
<p>The following logfile format string substitutions should be
diff --git a/docs/manual/programs/rotatelogs.html.ko.euc-kr b/docs/manual/programs/rotatelogs.html.ko.euc-kr
index 87baefa8..6e690007 100644
--- a/docs/manual/programs/rotatelogs.html.ko.euc-kr
+++ b/docs/manual/programs/rotatelogs.html.ko.euc-kr
@@ -23,6 +23,8 @@
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="../en/programs/rotatelogs.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/programs/rotatelogs.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">ÀÌ ¹®¼­´Â ÃÖ½ÅÆÇ ¹ø¿ªÀÌ ¾Æ´Õ´Ï´Ù.
+ ÃÖ±Ù¿¡ º¯°æµÈ ³»¿ëÀº ¿µ¾î ¹®¼­¸¦ Âü°íÇϼ¼¿ä.</div>
<p><code>rotatelogs</code>´Â ¾ÆÆÄÄ¡ÀÇ ÆÄÀÌÇÁ ·Î±×ÆÄÀÏ ±â´ÉÀ»
À§ÇÑ °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ¿¹¸¦ µé¾î:</p>
diff --git a/docs/manual/rewrite/rewrite_intro.html.en b/docs/manual/rewrite/rewrite_intro.html.en
index a2c41b48..e96dd216 100644
--- a/docs/manual/rewrite/rewrite_intro.html.en
+++ b/docs/manual/rewrite/rewrite_intro.html.en
@@ -61,7 +61,7 @@ follows is understood, rather than just copied blindly.
Regular Expression</a> vocabulary. In this document, we do not attempt
to provide a detailed reference to regular expressions. For that, we
recommend the <a href="http://pcre.org/pcre.txt">PCRE man pages</a>, the
-<a href="http://www.perldoc.com/perl5.8.0/pod/perlre.html">Perl regular
+<a href="http://perldoc.perl.org/perlre.html">Perl regular
expression man page</a>, and <a href="http://www.oreilly.com/catalog/regex2/index.html">Mastering
Regular Expressions, by Jeffrey Friedl</a>.</p>
diff --git a/docs/manual/sections.html b/docs/manual/sections.html
index 02645f01..7afbefe4 100644
--- a/docs/manual/sections.html
+++ b/docs/manual/sections.html
@@ -2,6 +2,10 @@ URI: sections.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+URI: sections.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
+
URI: sections.html.ja.euc-jp
Content-Language: ja
Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/sections.html.en b/docs/manual/sections.html.en
index 671484d3..609063b2 100644
--- a/docs/manual/sections.html.en
+++ b/docs/manual/sections.html.en
@@ -19,6 +19,7 @@
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Configuration Sections</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="./en/sections.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -469,6 +470,7 @@ Deny from badguy.example.com<br />
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./en/sections.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/sections.html.fr b/docs/manual/sections.html.fr
new file mode 100644
index 00000000..6e71fbbc
--- /dev/null
+++ b/docs/manual/sections.html.fr
@@ -0,0 +1,528 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Sections de configuration - Serveur Apache HTTP</title>
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.2</p>
+<img alt="" src="./images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Sections de configuration</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div>
+ <p>Les directives des <a href="configuring.html">fichiers de configuration</a> peuvent s'appliquer
+au serveur dans son ensemble, ou seulement à des répertoires, fichiers, hôtes,
+ou URLs particuliers. Ce document décrit comment utiliser les conteneurs de
+sections de configuration ou les fichiers <code>.htaccess</code> pour
+modifier la portée des directives de configuration.</p>
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#types">Types de conteneurs de sections de
+configuration</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#file-and-web">Système de fichiers et
+arborescence du site web</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#virtualhost">Hôtes virtuels</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#proxy">Mandataire</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#whatwhere">Quelles sont les directives autorisées ?</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#mergin">Comment les sections sont combinées entre elles</a></li>
+</ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="types" id="types">Types de conteneurs de sections de
+configuration</a></h2>
+
+<table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mod_version.html">mod_version</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_version.html#ifversion">&lt;IfVersion&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>
+
+<p>Il existe deux grands types de conteneurs. La plupart des conteneurs sont
+évalués pour chaque requête. Les directives qu'ils contiennent s'appliquent
+seulement aux requêtes qui sont concernées par le conteneur. En revanche,
+les conteneurs
+<code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>, <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>, et
+<code class="directive"><a href="./mod/mod_version.html#ifversion">&lt;IfVersion&gt;</a></code> sont
+évalués seulement au démarrage et au redémarrage du serveur.
+Si leurs conditions sont vérifiées au démarrage, les directives qu'ils contiennent
+s'appliqueront à toutes les requêtes. Si leurs conditions ne sont pas vérifiées, les
+directives qu'ils contiennent seront ignorées.</p>
+
+<p>Le conteneur <code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>
+contient des directives qui ne seront appliquées que si un paramètre
+approprié a été défini dans la ligne de commande de <code class="program"><a href="./programs/httpd.html">httpd</a></code>.
+Par exemple,
+avec la configuration suivante, toutes les requêtes seront redirigées vers
+un autre site si le serveur est démarré en utilisant la ligne de commande :
+<code>httpd -DClosedForNow</code>:</p>
+
+<div class="example"><p><code>
+&lt;IfDefine ClosedForNow&gt;<br />
+Redirect / http://otherserver.example.com/<br />
+&lt;/IfDefine&gt;
+</code></p></div>
+
+<p>Le conteneur <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>
+est similaire; les directives qu'il contient ne s'appliqueront que si
+un module particulier est disponible au niveau du serveur.
+Le module doit être soit compilé statiquement dans le serveur, soit
+dynamiquement et dans ce cas, la ligne <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> correspondante doit apparaître
+plus haut dans le fichier de configuration. Ce conteneur ne doit être
+utilisé que dans le cas où votre fichier de configuration doit fonctionner
+indépendamment de la présence ou de l'absence de certains modules.
+Il ne doit pas contenir de directives que vous souhaitez voir s'appliquer
+systématiquement, car vous pouvez perdre ainsi de précieux messages d'erreur
+à propos de modules manquants.</p>
+
+<p>Dans l'exemple suivant, la directive <code class="directive"><a href="./mod/mod_mime_magic.html#mimemagicfiles">MimeMagicFiles</a></code> ne s'appliquera que si le
+module <code class="module"><a href="./mod/mod_mime_magic.html">mod_mime_magic</a></code> est disponible.</p>
+
+<div class="example"><p><code>
+&lt;IfModule mod_mime_magic.c&gt;<br />
+MimeMagicFile conf/magic<br />
+&lt;/IfModule&gt;
+</code></p></div>
+
+<p>Le conteneur
+<code class="directive"><a href="./mod/mod_version.html#ifversion">&lt;IfVersion&gt;</a></code>
+est similaire aux conteneurs <code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> et <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>; les directives qu'il contient ne
+s'appliqueront que si une version particulière du serveur s'exécute. Ce
+conteneur a été conçu pour une utilisation dans les suites de tests
+et les grands réseaux qui doivent prendre en compte différentes versions
+et configurations de httpd.</p>
+
+<div class="example"><p><code>
+ &lt;IfVersion &gt;= 2.1&gt;<br />
+ <span class="indent">
+ # les directives situées ici ne s'appliquent que si la version <br />
+ # est supérieure ou égale à 2.1.0.<br />
+ </span>
+ &lt;/IfVersion&gt;
+</code></p></div>
+
+<p><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code>,
+<code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code>, et
+<code class="directive"><a href="./mod/mod_version.html#ifversion">&lt;IfVersion&gt;</a></code>
+peuvent inverser leur test conditionnel en le faisant précéder d'un "!".
+De plus, ces sections peuvent être imbriquées afin de définir des restrictions
+plus complexes.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="file-and-web" id="file-and-web">Système de fichiers et
+arborescence du site web</a></h2>
+
+<p>Les conteneurs de sections de configuration les plus couramment utilisés
+sont ceux qui modifient la configuration de points particuliers du système de
+fichiers ou de l'arborescence du site web. Tout d'abord, il est important de
+comprendre la différence entre les deux. Le système de fichiers est une vue
+de vos disques tels qu'ils sont perçus par votre système d'exploitation.
+Par exemple, avec une installation par défaut,
+Apache est situé dans <code>/usr/local/apache2</code> pour le système de
+fichiers UNIX, ou <code>"c:/Program Files/Apache Group/Apache2"</code> pour
+le système de fichiers Windows. (Notez que des slashes directs doivent
+toujours être utilisés comme séparateur de chemin dans Apache, même sous
+Windows.) Quant à
+l'arborescence du site web, il s'agit d'une vue de votre site
+tel que présenté par le
+serveur web et perçue par le client. Ainsi le chemin <code>/dir/</code> dans
+l'arborescence du site web correspond au chemin
+<code>/usr/local/apache2/htdocs/dir/</code> dans le système de fichiers pour
+une installation d'Apache par défaut sous UNIX.
+En outre, l'arborescence du site web n'a pas besoin de correspondre en permanence au
+système de fichiers, car les pages web peuvent être générées dynamiquement
+à partir de bases de données ou d'autres emplacements.</p>
+
+<h3><a name="filesystem" id="filesystem">Conteneurs de système de fichiers</a></h3>
+
+<p>Les conteneurs <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
+et <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>,
+ainsi que leurs équivalents acceptant les
+<a class="glossarylink" href="./glossary.html#regex" title="see glossary">expressions rationnelles</a>,
+appliquent des directives à certaines parties du système de fichiers.
+Les directives contenues dans une section <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> s'appliquent au répertoire
+précisé, ainsi qu'à tous ses sous-répertoires.
+Le même effet peut être obtenu en utilisant les <a href="howto/htaccess.html">fichiers .htaccess</a>. Par exemple, avec la
+configuration suivante, l'indexation sera activée pour le répertoire
+<code>/var/web/dir1</code> et tous ses sous-répertoires.</p>
+
+<div class="example"><p><code>
+&lt;Directory /var/web/dir1&gt;<br />
+Options +Indexes<br />
+&lt;/Directory&gt;
+</code></p></div>
+
+<p>Les directives contenues dans une section <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> s'appliquent à tout fichier
+avec le nom spécifié, quel que soit le répertoire dans lequel il se trouve.
+Ainsi par exemple, les directives de configuration suivantes, si elles sont
+placées dans la section principale du fichier de configuration, vont interdire
+l'accès à tout fichier nommé <code>private.html</code> quel que soit
+l'endroit où il se trouve.</p>
+
+<div class="example"><p><code>
+&lt;Files private.html&gt;<br />
+Order allow,deny<br />
+Deny from all<br />
+&lt;/Files&gt;
+</code></p></div>
+
+<p>Pour faire référence à des fichiers qui se trouvent en des points
+particuliers du système de fichiers, les sections
+<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> et
+<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
+peuvent être combinées. Par exemple, la configuration suivante va interdire
+l'accès à <code>/var/web/dir1/private.html</code>,
+<code>/var/web/dir1/subdir2/private.html</code>,
+<code>/var/web/dir1/subdir3/private.html</code>, ainsi que toute instance de
+<code>private.html</code> qui se trouve dans l'arborescence
+<code>/var/web/dir1/</code>.</p>
+
+<div class="example"><p><code>
+&lt;Directory /var/web/dir1&gt;<br />
+&lt;Files private.html&gt;<br />
+Order allow,deny<br />
+Deny from all<br />
+&lt;/Files&gt;<br />
+&lt;/Directory&gt;
+</code></p></div>
+
+
+<h3><a name="webspace" id="webspace">Conteneurs de l'arborescence du site web</a></h3>
+
+<p>le conteneur <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
+et son équivalent acceptant les
+<a class="glossarylink" href="./glossary.html#regex" title="see glossary">expressions rationnelles</a>, modifient quant à eux la
+configuration de parties de l'arborescence du site web. Par exemple, la
+configuration suivante interdit l'accès à toute URL dont la partie chemin
+commence par /private.
+En particulier, l'interdiction s'appliquera aux requêtes pour :
+<code>http://yoursite.example.com/private</code>,
+<code>http://yoursite.example.com/private123</code>, et
+<code>http://yoursite.example.com/private/dir/file.html</code> ainsi qu'à
+toute requête commençant par la chaîne de caractères <code>/private</code>.</p>
+
+<div class="example"><p><code>
+&lt;Location /private&gt;<br />
+Order Allow,Deny<br />
+Deny from all<br />
+&lt;/Location&gt;
+</code></p></div>
+
+<p>Le conteneur <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
+n'a pas besoin de faire référence à un élément du système de fichiers.
+Par exemple, l'exemple suivant montre comment faire référence à une URL
+particulière vers un gestionnaire interne d'Apache fourni par le module
+<code class="module"><a href="./mod/mod_status.html">mod_status</a></code>.
+Il n'est pas nécessaire de trouver un fichier nommé <code>server-status</code>
+dans le système de fichiers.</p>
+
+<div class="example"><p><code>
+&lt;Location /server-status&gt;<br />
+SetHandler server-status<br />
+&lt;/Location&gt;
+</code></p></div>
+
+
+<h3><a name="wildcards" id="wildcards">Caractères de remplacement
+et expressions rationnelles</a></h3>
+
+<p>Les conteneurs
+<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>,
+<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, et
+<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
+peuvent utiliser des caractères de remplacement de style shell comme dans
+la fonction <code>fnmatch</code> de la bibliothèque C standard.
+Le caractère "*"
+correspond à toute séquence de caractères, "?" à un caractère seul,
+et "[<em>seq</em>]" à tout caractère contenu dans <em>seq</em>.
+Le caractère "/"
+ne peut pas faire l'objet d'un remplacement;
+il doit être spécifié explicitement.</p>
+
+<p>Si une définition des critères de correspondance
+encore plus souple est nécessaire, chaque conteneur
+possède son équivalent acceptant les expressions rationnelles : <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, et <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> acceptent les
+<a class="glossarylink" href="./glossary.html#regex" title="see glossary">expressions rationnelles</a> compatibles Perl
+pour définir les critères de correspondance. Mais voyez plus loin la section
+à propos de la combinaison des sections de configuration
+pour comprendre comment l'utilisation de
+conteneurs avec des expressions rationnelles va modifier la manière
+dont les directives sont appliquées.</p>
+
+<p>Un conteneur qui modifie la configuration de tous les
+répertoires utilisateurs à l'aide de caractères de remplacement
+mais sans utiliser
+les expressions rationnelles pourrait ressembler à ceci :</p>
+
+<div class="example"><p><code>
+&lt;Directory /home/*/public_html&gt;<br />
+Options Indexes<br />
+&lt;/Directory&gt;
+</code></p></div>
+
+<p>Avec les conteneurs utilisant les expressions rationnelles,
+on peut interdire l'accès à de nombreux types de fichiers d'images
+simultanément :</p>
+<div class="example"><p><code>
+&lt;FilesMatch \.(?i:gif|jpe?g|png)$&gt;<br />
+Order allow,deny<br />
+Deny from all<br />
+&lt;/FilesMatch&gt;
+</code></p></div>
+
+
+
+<h3><a name="whichwhen" id="whichwhen">Que faut-il utiliser et quand ?</a></h3>
+
+<p>Choisir entre des conteneurs de système de fichiers et des conteneurs
+d'arborescence du site web est vraiment très simple.
+Pour appliquer des directives à des objets qui résident dans le système de
+fichiers, utilisez toujours un conteneur <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ou <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>. Pour appliquer des directives à des objets
+qui ne résident pas dans le système de fichiers (comme une page web générée
+par une base de données), utilisez un conteneur <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>.</p>
+
+<p>Il ne faut jamais utiliser un conteneur <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> pour restreindre l'accès à des
+objets du système de fichiers, car plusieurs localisations de
+l'arborescence du site web (URLs) peuvent correspondre à la même localisation
+du système de fichier, ce qui peut permettre de contourner vos restrictions.
+Par exemple, imaginez la configuration suivante :</p>
+
+<div class="example"><p><code>
+&lt;Location /dir/&gt;<br />
+Order allow,deny<br />
+Deny from all<br />
+&lt;/Location&gt;
+</code></p></div>
+
+<p>Elle fonctionne correctement si la requête appelle
+<code>http://yoursite.example.com/dir/</code>. Mais que va-t-il se passer si
+votre système de fichiers est insensible à la casse ?
+Votre restriction va pouvoir être tout simplement contournée en envoyant une
+requête sur
+<code>http://yoursite.example.com/DIR/</code>. Le conteneur <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, quant à lui, s'appliquera
+à tout contenu servi à partir de cette localisation,
+sans tenir compte de la manière dont il est appelé.
+(Les liens du système de fichiers constituent une exception.
+Le même répertoire peut être placé dans plusieurs parties du système de
+fichiers en utilisant des liens symboliques. Le conteneur
+<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> va suivre le
+lien symbolique sans modifier le nom du chemin. Par conséquent, pour plus de
+sécurité, les liens symboliques doivent être désactivés à l'aide de la
+directive
+<code class="directive"><a href="./mod/core.html#options">Options</a></code> appropriée.)</p>
+
+<p>Si vous pensez que vous n'êtes pas concerné par ce problème
+parceque vous utilisez un système de fichiers sensible à la casse,
+gardez à l'esprit qu'il y a de nombreuses autres manières pour faire
+correspondre plusieurs localisations de l'arborescence du site web à la même
+localisation du système de fichiers. C'est pourquoi vous devez autant que
+possible toujours utiliser les conteneurs de système de fichiers.
+Il y a cependant une exception à cette règle. Placer des restrictions de
+configuration dans un conteneur <code>&lt;Location
+/&gt;</code> est tout à fait sans rique car ce conteneur va s'appliquer à
+toutes les requêtes sans tenir compte de l'URL spécifique.</p>
+
+
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="virtualhost" id="virtualhost">Hôtes virtuels</a></h2>
+
+<p>Le conteneur <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
+contient des directives qui s'appliquent à des hôtes spécifiques.
+Ceci s'avère utile pour servir des hôtes multiples à partir de la même machine,
+chacun d'entre eux possédant une configuration différente. Pour de plus amples
+informations,
+voir la <a href="vhosts/">Documentation sur les hôtes virtuels</a>.</p>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="proxy" id="proxy">Mandataire</a></h2>
+
+<p>Les conteneurs
+<code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
+et <code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code>
+appliquent les directives de configuration qu'ils contiennent uniquement aux
+sites qui correspondent à l'URL spécifiée et auxquels on a
+accédé via le serveur mandataire du module <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>.
+Par exemple, la configuration suivante
+va interdire l'utilisation du serveur proxy pour accéder au site
+<code>cnn.com</code>.</p>
+
+<div class="example"><p><code>
+&lt;Proxy http://cnn.com/*&gt;<br />
+Order allow,deny<br />
+Deny from all<br />
+&lt;/Proxy&gt;
+</code></p></div>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="whatwhere" id="whatwhere">Quelles sont les directives autorisées ?</a></h2>
+
+<p>Pour déterminer quelles sont les directives autorisées pour tel type de
+section de configuration, vérifiez le <a href="mod/directive-dict.html#Context">Contexte</a> de la directive.
+Tout ce qui est autorisé dans les sections
+<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>
+l'est aussi d'un point de vue syntaxique dans les sections
+<code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>,
+<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>,
+<code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>,
+<code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>,
+<code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>,
+<code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>,
+et <code class="directive"><a href="./mod/mod_proxy.html#proxymatch">&lt;ProxyMatch&gt;</a></code>.
+Il y a cependant quelques exceptions :</p>
+
+<ul>
+<li>La directive <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>
+ne fonctionne que dans les sections
+<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>.</li>
+
+<li>Les <code class="directive"><a href="./mod/core.html#options">Options</a></code> <code>FollowSymLinks</code> et
+<code>SymLinksIfOwnerMatch</code> ne fonctionnent que dans les sections
+<code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> ou les fichiers
+<code>.htaccess</code>.</li>
+
+<li>La directive <code class="directive"><a href="./mod/core.html#options">Options</a></code> ne peut pas être
+utilisée dans les sections
+<code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>
+et <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>.</li>
+</ul>
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="mergin" id="mergin">Comment les sections sont combinées entre elles</a></h2>
+
+<p>Les sections de configuration sont appliquées dans un ordre très particulier.
+Il est important de savoir comment cet ordre est défini car il peut avoir
+des effets importants sur la manière dont les directives de configuration
+sont interprétées.</p>
+
+ <p>L'ordre dans lequel les sections sont combinées est :</p>
+
+ <ol>
+ <li> Les sections <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> (à l'exception des
+ expressions rationnelles)
+ et les fichiers <code>.htaccess</code> sont appliqués simultanément (avec
+ la possibilité pour <code>.htaccess</code>, s'il y est autorisé, de
+ prévaloir sur
+ <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>)</li>
+
+ <li>Les sections
+ <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>
+ (et <code>&lt;Directory ~&gt;</code>)</li>
+
+ <li>Les sections <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code> et <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code> sont appliquées
+ simultanément</li>
+
+ <li>Les sections
+ <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>
+ et <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> sont appliquées
+ simultanément</li>
+ </ol>
+
+ <p>Mises à part les sections <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, chaque groupe est traité selon
+ l'ordre dans lequel il apparaît dans les fichiers de configuration.
+ Les sections <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> (groupe 1 ci-dessus)
+ sont traitées dans l'ordre du répertoire le plus court vers le plus long.
+ Par exemple, <code>&lt;Directory /var/web/dir&gt;</code> sera
+ traité avant <code>&lt;Directory
+ /var/web/dir/subdir&gt;</code>. Si plusieurs sections <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> s'appliquent au même
+ répertoire, elles sont traitées selon l'ordre dans lequel elles
+ apparaissent dans le fichier de configuration.
+ Les sections de configuration incluses via la directive <code class="directive"><a href="./mod/core.html#include">Include</a></code> sont traitées comme si elles se
+ trouvaient réellement dans le fichier qui les inclut à la position de la
+ directive
+ <code class="directive"><a href="./mod/core.html#include">Include</a></code>.</p>
+
+ <p>Les sections situées à l'intérieur de sections <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
+ sont appliquées <em>après</em> les sections correspondantes situées en
+ dehors de la définition de l'hôte virtuel, ce qui permet à l'hôte virtuel
+ de prévaloir sur la configuration du serveur principal.</p>
+
+ <p>Quand la requête est servie par le module <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>,
+ le conteneur <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code>
+ prend la place du conteneur <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code> dans l'ordre de traitement.</p>
+
+ <p>Les sections situées plus loin dans le fichier de configuration prévalent
+ sur celles qui les précèdent.</p>
+
+<div class="note"><h3>Note technique</h3>
+ Une séquence
+ <code>&lt;Location&gt;</code>/<code>&lt;LocationMatch&gt;</code>
+ est réellement traitée juste avant la phase de traduction du nom
+ (où <code>Aliases</code> et <code>DocumentRoots</code>
+ sont utilisés pour faire correspondre les URLs aux noms de fichiers).
+ Les effets de cette séquence disparaissent totalement lorsque
+ la traduction est terminée.
+</div>
+
+<h3><a name="merge-examples" id="merge-examples">Quelques exemples</a></h3>
+
+<p>Voici un exemple imaginaire qui montre l'ordre de combinaison des sections.
+En supposant qu'elles s'appliquent toutes à la requête, les directives de
+cet exemple seront appliquées dans l'ordre suivant : A &gt; B &gt; C &gt; D &gt;
+E.</p>
+
+<div class="example"><p><code>
+&lt;Location /&gt;<br />
+E<br />
+&lt;/Location&gt;<br />
+<br />
+&lt;Files f.html&gt;<br />
+D<br />
+&lt;/Files&gt;<br />
+<br />
+&lt;VirtualHost *&gt;<br />
+&lt;Directory /a/b&gt;<br />
+B<br />
+&lt;/Directory&gt;<br />
+&lt;/VirtualHost&gt;<br />
+<br />
+&lt;DirectoryMatch "^.*b$"&gt;<br />
+C<br />
+&lt;/DirectoryMatch&gt;<br />
+<br />
+&lt;Directory /a/b&gt;<br />
+A<br />
+&lt;/Directory&gt;<br />
+<br />
+</code></p></div>
+
+<p>Pour un exemple plus concret, considérez ce qui suit. Sans tenir compte
+de toute restriction d'accès placée dans les sections <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, la section <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code> sera
+évaluée en dernier et permettra un accès au serveur sans aucune restriction.
+En d'autres termes, l'ordre de la combinaison des sections est important,
+soyez donc prudent !</p>
+
+<div class="example"><p><code>
+&lt;Location /&gt;<br />
+Order deny,allow<br />
+Allow from all<br />
+&lt;/Location&gt;<br />
+<br />:if expand("%") == ""|browse confirm w|else|confirm w|endif
+
+# Arrghs! Cette section &lt;Directory&gt; n'aura aucun effet<br />
+&lt;Directory /&gt;<br />
+Order allow,deny<br />
+Allow from all<br />
+Deny from badguy.example.com<br />
+&lt;/Directory&gt;
+</code></p></div>
+
+
+
+</div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/sections.html.ja.euc-jp b/docs/manual/sections.html.ja.euc-jp
index ab8533a5..c3ee29a4 100644
--- a/docs/manual/sections.html.ja.euc-jp
+++ b/docs/manual/sections.html.ja.euc-jp
@@ -19,6 +19,7 @@
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP ¥µ¡¼¥Ð</a> &gt; <a href="http://httpd.apache.org/docs/">¥É¥­¥å¥á¥ó¥Æ¡¼¥·¥ç¥ó</a> &gt; <a href="./">¥Ð¡¼¥¸¥ç¥ó 2.2</a></div><div id="page-content"><div id="preamble"><h1>¥»¥¯¥·¥ç¥ó¤ÎÀßÄê</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/sections.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -460,6 +461,7 @@ Deny from badguy.example.com<br />
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/sections.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/sections.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/sections.html.ko.euc-kr b/docs/manual/sections.html.ko.euc-kr
index ac7295ff..c9685481 100644
--- a/docs/manual/sections.html.ko.euc-kr
+++ b/docs/manual/sections.html.ko.euc-kr
@@ -19,6 +19,7 @@
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>¼½¼Ç ¼³Á¤</h1>
<div class="toplang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/sections.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
@@ -414,6 +415,7 @@ Deny from badguy.example.com<br />
</div></div>
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./en/sections.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/sections.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/sections.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/sections.html" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
diff --git a/docs/manual/sitemap.html.de b/docs/manual/sitemap.html.de
index 7c009d0d..219fdccc 100644
--- a/docs/manual/sitemap.html.de
+++ b/docs/manual/sitemap.html.de
@@ -228,6 +228,7 @@ HPUX betreiben</a></li>
<li><a href="mod/mod_speling.html">Apache-Modul mod_speling</a></li>
<li><a href="mod/mod_ssl.html">Apache-Modul mod_ssl</a></li>
<li><a href="mod/mod_status.html">Apache-Modul mod_status</a></li>
+<li><a href="mod/mod_substitute.html">Apache-Modul mod_substitute</a></li>
<li><a href="mod/mod_suexec.html">Apache-Modul mod_suexec</a></li>
<li><a href="mod/mod_unique_id.html">Apache-Modul mod_unique_id</a></li>
<li><a href="mod/mod_userdir.html">Apache-Modul mod_userdir</a></li>
diff --git a/docs/manual/sitemap.html.en b/docs/manual/sitemap.html.en
index f2ee368b..c8a0455d 100644
--- a/docs/manual/sitemap.html.en
+++ b/docs/manual/sitemap.html.en
@@ -226,6 +226,7 @@ Server on HPUX</a></li>
<li><a href="mod/mod_speling.html">Apache Module mod_speling</a></li>
<li><a href="mod/mod_ssl.html">Apache Module mod_ssl</a></li>
<li><a href="mod/mod_status.html">Apache Module mod_status</a></li>
+<li><a href="mod/mod_substitute.html">Apache Module mod_substitute</a></li>
<li><a href="mod/mod_suexec.html">Apache Module mod_suexec</a></li>
<li><a href="mod/mod_unique_id.html">Apache Module mod_unique_id</a></li>
<li><a href="mod/mod_userdir.html">Apache Module mod_userdir</a></li>
diff --git a/docs/manual/sitemap.html.es b/docs/manual/sitemap.html.es
index ad3b1867..f78fb57b 100644
--- a/docs/manual/sitemap.html.es
+++ b/docs/manual/sitemap.html.es
@@ -230,6 +230,7 @@ usados para describir las directivas de Apache</a></li>
<li><a href="mod/mod_speling.html">Módulo Apache mod_speling</a></li>
<li><a href="mod/mod_ssl.html">Módulo Apache mod_ssl</a></li>
<li><a href="mod/mod_status.html">Módulo Apache mod_status</a></li>
+<li><a href="mod/mod_substitute.html">Módulo Apache mod_substitute</a></li>
<li><a href="mod/mod_suexec.html">Módulo Apache mod_suexec</a></li>
<li><a href="mod/mod_unique_id.html">Módulo Apache mod_unique_id</a></li>
<li><a href="mod/mod_userdir.html">Módulo Apache mod_userdir</a></li>
diff --git a/docs/manual/sitemap.html.ja.euc-jp b/docs/manual/sitemap.html.ja.euc-jp
index 60f65fe4..d368158b 100644
--- a/docs/manual/sitemap.html.ja.euc-jp
+++ b/docs/manual/sitemap.html.ja.euc-jp
@@ -223,6 +223,7 @@
<li><a href="mod/mod_speling.html">Apache ¥â¥¸¥å¡¼¥ë mod_speling</a></li>
<li><a href="mod/mod_ssl.html">Apache ¥â¥¸¥å¡¼¥ë mod_ssl</a></li>
<li><a href="mod/mod_status.html">Apache ¥â¥¸¥å¡¼¥ë mod_status</a></li>
+<li><a href="mod/mod_substitute.html">Apache ¥â¥¸¥å¡¼¥ë mod_substitute</a></li>
<li><a href="mod/mod_suexec.html">Apache ¥â¥¸¥å¡¼¥ë mod_suexec</a></li>
<li><a href="mod/mod_unique_id.html">Apache ¥â¥¸¥å¡¼¥ë mod_unique_id</a></li>
<li><a href="mod/mod_userdir.html">Apache ¥â¥¸¥å¡¼¥ë mod_userdir</a></li>
diff --git a/docs/manual/sitemap.html.ko.euc-kr b/docs/manual/sitemap.html.ko.euc-kr
index db4a1184..24d23cb2 100644
--- a/docs/manual/sitemap.html.ko.euc-kr
+++ b/docs/manual/sitemap.html.ko.euc-kr
@@ -228,6 +228,7 @@
<li><a href="mod/mod_speling.html">¾ÆÆÄÄ¡ ¸ðµâ mod_speling</a></li>
<li><a href="mod/mod_ssl.html">¾ÆÆÄÄ¡ ¸ðµâ mod_ssl</a></li>
<li><a href="mod/mod_status.html">¾ÆÆÄÄ¡ ¸ðµâ mod_status</a></li>
+<li><a href="mod/mod_substitute.html">¾ÆÆÄÄ¡ ¸ðµâ mod_substitute</a></li>
<li><a href="mod/mod_suexec.html">¾ÆÆÄÄ¡ ¸ðµâ mod_suexec</a></li>
<li><a href="mod/mod_unique_id.html">¾ÆÆÄÄ¡ ¸ðµâ mod_unique_id</a></li>
<li><a href="mod/mod_userdir.html">¾ÆÆÄÄ¡ ¸ðµâ mod_userdir</a></li>
diff --git a/docs/manual/ssl/ssl_intro.html.en b/docs/manual/ssl/ssl_intro.html.en
index 470466b2..d27ab56f 100644
--- a/docs/manual/ssl/ssl_intro.html.en
+++ b/docs/manual/ssl/ssl_intro.html.en
@@ -102,8 +102,8 @@ integrity, and authentication.</p>
<p>Anyone can encrypt a message using the public key, but only the
owner of the private key will be able to read it. In this way, Alice
can send private messages to the owner of a key-pair (the bank), by
- encrypting it using their public key. Only the bank will be able to
- decrypt it.</p>
+ encrypting them using their public key. Only the bank will be able to
+ decrypt them.</p>
<h3><a name="messagedigests" id="messagedigests">Message Digests</a></h3>
@@ -144,13 +144,13 @@ message is really from her, so an intruder cannot request a transaction
involving her account. A <em>digital signature</em>, created by Alice and
included with the message, serves this purpose.</p>
-<p>Digital signatures are created by encrypting a digest of the message,
-and other information (such as a sequence number) with the sender's
-private key. Though anyone can <em>decrypt</em> the signature using the public
-key, only the sender knows the private key. This means that only they can
-have signed it. Including the digest in the signature means the signature is
-only good for that message; it also ensures the integrity of the message since
-no one can change the digest and still sign it.</p>
+<p>Digital signatures are created by encrypting a digest of the message, and
+other information (such as a sequence number) with the sender's private key.
+Though anyone can <em>decrypt</em> the signature using the public key, only the
+sender knows the private key. This means that only the sender can have signed
+the message. Including the digest in the signature means the signature is only
+good for that message; it also ensures the integrity of the message since no one
+can change the digest and still sign it.</p>
<p>To guard against interception and reuse of the signature by an intruder at a
later date, the signature contains a unique sequence number. This protects
the bank from a fraudulent claim from Alice that she did not send the message
@@ -292,7 +292,7 @@ dUHzICxBVC1lnHyYGjDuAMhe396lYAn8bCld1/L4NMGBCQ==
itself of the identity of the private key owner of a key-pair.
For instance, if Alice requests a personal certificate, the
Certificate Authority must first make sure that Alice really is the
- person the certificate claims she is.</p>
+ person the certificate request claims she is.</p>
<h4><a name="certificatechains" id="certificatechains">Certificate Chains</a></h4>
diff --git a/docs/manual/style/version.ent b/docs/manual/style/version.ent
index 822a9e0a..e076bfb9 100644
--- a/docs/manual/style/version.ent
+++ b/docs/manual/style/version.ent
@@ -19,6 +19,6 @@
<!ENTITY httpd.major "2">
<!ENTITY httpd.minor "2">
-<!ENTITY httpd.patch "6">
+<!ENTITY httpd.patch "8">
<!ENTITY httpd.docs "2.2">
diff --git a/docs/manual/suexec.html.en b/docs/manual/suexec.html.en
index 7f3ada6d..ad40c574 100644
--- a/docs/manual/suexec.html.en
+++ b/docs/manual/suexec.html.en
@@ -446,7 +446,7 @@
command <code>make install</code> to install them. The binary image
<code>suexec</code> is installed in the directory defined by the
<code>--sbindir</code> option. The default location is
- "/usr/local/apache2/sbin/suexec".<br />
+ "/usr/local/apache2/bin/suexec".<br />
Please note that you need <strong><em>root
privileges</em></strong> for the installation step. In order
for the wrapper to set the user ID, it must be installed as
@@ -472,7 +472,7 @@
</code></p></div>
<p>and <code class="program"><a href="./programs/suexec.html">suexec</a></code> is installed at
- "/usr/local/apache2/sbin/suexec", you should run:</p>
+ "/usr/local/apache2/bin/suexec", you should run:</p>
<div class="example"><p><code>
chgrp webgroup /usr/local/apache2/bin/suexec<br />
diff --git a/docs/manual/suexec.html.ja.euc-jp b/docs/manual/suexec.html.ja.euc-jp
index db5640c2..794b595b 100644
--- a/docs/manual/suexec.html.ja.euc-jp
+++ b/docs/manual/suexec.html.ja.euc-jp
@@ -22,6 +22,8 @@
<a href="./ja/suexec.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
+<div class="outofdate">This translation may be out of date. Check the
+ English version for recent changes.</div>
<p><strong>suEXEC</strong>
µ¡Ç½¤Ë¤è¤ê¡¢Apache ¥æ¡¼¥¶¤Ï Web ¥µ¡¼¥Ð¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¥æ¡¼¥¶ ID ¤È¤Ï
diff --git a/docs/manual/upgrading.html b/docs/manual/upgrading.html
index e32040ec..35b0339c 100644
--- a/docs/manual/upgrading.html
+++ b/docs/manual/upgrading.html
@@ -6,6 +6,10 @@ URI: upgrading.html.en
Content-Language: en
Content-type: text/html; charset=ISO-8859-1
+URI: upgrading.html.fr
+Content-Language: fr
+Content-type: text/html; charset=ISO-8859-1
+
URI: upgrading.html.ja.euc-jp
Content-Language: ja
Content-type: text/html; charset=EUC-JP
diff --git a/docs/manual/upgrading.html.de b/docs/manual/upgrading.html.de
index 5ce164f8..e36d4df2 100644
--- a/docs/manual/upgrading.html.de
+++ b/docs/manual/upgrading.html.de
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>Verfügbare Sprachen: </span><a href="./de/upgrading.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
@@ -110,6 +111,7 @@
<div class="bottomlang">
<p><span>Verfügbare Sprachen: </span><a href="./de/upgrading.html" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
diff --git a/docs/manual/upgrading.html.en b/docs/manual/upgrading.html.en
index 52cc5ceb..2c6a176a 100644
--- a/docs/manual/upgrading.html.en
+++ b/docs/manual/upgrading.html.en
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
@@ -143,13 +144,14 @@
<p>Many third-party modules designed for version 2.0 will work
- unchanged with the the Apache HTTP Server version 2.2. But all
+ unchanged with the Apache HTTP Server version 2.2. But all
modules must be recompiled before being loaded.</p>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
diff --git a/docs/manual/upgrading.html.fr b/docs/manual/upgrading.html.fr
new file mode 100644
index 00000000..eed93e49
--- /dev/null
+++ b/docs/manual/upgrading.html.fr
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>Mise à jour vers 2.2 depuis 2.0 - Serveur Apache HTTP</title>
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>
+<body id="manual-page"><div id="page-header">
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
+<p class="apache">Serveur Apache HTTP Version 2.2</p>
+<img alt="" src="./images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.2</a></div><div id="page-content"><div id="preamble"><h1>Mise à jour vers 2.2 depuis 2.0</h1>
+<div class="toplang">
+<p><span>Langues Disponibles: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
+<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
+<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
+</div>
+
+ <p>Afin d'assister les utilisateurs lors de leurs opérations de mise à
+ jour, nous maintenons un document
+ qui comporte des informations critiques à l'attention des personnes qui
+ utilisent déjà Apache. Ces informations ne sont que de brèves notes, et vous
+ devriez trouver plus d'informations dans le document <a href="new_features_2_2.html">Nouvelles fonctionnalités</a>, ou dans
+ le fichier <code>src/CHANGES</code>.</p>
+
+ <p>Ce document ne décrit que les modifications intervenues entre les versions
+ 2.0 et 2.2. Si vous effectuez une mise à jour depuis la version 1.3, vous
+ devez aussi consulter le
+ <a href="http://httpd.apache.org/docs/2.0/upgrading.html">document de mise
+ à jour de 1.3 vers 2.0.</a></p>
+
+</div>
+<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">Modifications de la configuration au moment de la compilation</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#run-time">Modifications de la configuration à l'exécution</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#misc">Changements divers</a></li>
+<li><img alt="" src="./images/down.gif" /> <a href="#third-party">Modules tiers</a></li>
+</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="new_features_2_2.html">Vue d'ensemble des nouvelles
+fonctionnalités de Apache 2.2</a></li></ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="compile-time" id="compile-time">Modifications de la configuration au moment de la compilation</a></h2>
+
+
+ <p>Le processus de compilation est très similaire à celui de la
+ version 2.0. Dans certains cas, vous pourrez même utiliser
+ votre ancienne ligne de commande
+ <code>configure</code> (que vous trouverez dans le fichier
+ <code>build/config.nice</code> à la racine du répertoire des sources de
+ votre serveur). Les changements qui devront être le plus souvent effectués
+ concerneront des noms de modules, et en particulier les modules gérant
+ l'authentification et les autorisations.
+ Quelques exemples de modifications :</p>
+
+ <ul>
+ <li>mod_imap a été renommé en <code class="module"><a href="./mod/mod_imagemap.html">mod_imagemap</a></code></li>
+ <li>mod_auth a été scindé en quatre modules :
+ <code class="module"><a href="./mod/mod_auth_basic.html">mod_auth_basic</a></code>,
+ <code class="module"><a href="./mod/mod_authn_file.html">mod_authn_file</a></code>, <code class="module"><a href="./mod/mod_authz_user.html">mod_authz_user</a></code>, et
+ <code class="module"><a href="./mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
+ <li>mod_access a été renommé en <code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li>
+ <li>mod_auth_ldap a été renommé en <code class="module"><a href="./mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
+ <li>La version requise pour l'API APR est la 1.0.</li>
+ <li>La version de la bibliothèque PCRE intégrée est la 5.0</li>
+ </ul>
+
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="run-time" id="run-time">Modifications de la configuration à l'exécution</a></h2>
+
+
+ <p>Vos fichiers de configuration et scripts de démarrage de la version 2.0
+ existante peuvent en général être utilisés sans modification avec la
+ version 2.2. Quelques petits ajustements peuvent cependant être nécessaires
+ dans le cas de configurations particulières comme décrit plus bas.
+ En outre, si des modules standards sont chargés dynamiquement à l'aide de
+ la directive <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>,
+ vous devez vérifier les changements de noms de modules mentionnés
+ plus haut.</p>
+
+ <p>Si vous choisissez d'utiliser le nouveau fichier de configuration par
+ défaut de la
+ version 2.2, vous vous apercevrez qu'il a été considérablement simplifié
+ et ne conserve que les points les plus essentiels de la configuration.
+ Plusieurs exemples de configurations utilisant des fonctionnalités plus
+ avancées sont disponibles dans le répertoire
+ <code>conf/extra/</code> de l'installation du serveur. Les fichiers de
+ configuration par défaut se trouvent dans le répertoire
+ <code>conf/original</code>.</p>
+
+ <p>Quelques changements dans la configuration à l'exécution que vous
+ pouvez noter :</p>
+
+ <ul>
+ <li>L'option <code>startssl</code> du programme
+ <code class="program"><a href="./programs/apachectl.html">apachectl</a></code> n'est plus disponible. Pour activer le
+ support SSL, vous devez éditer <code>httpd.conf</code> de façon à
+ inclure les directives du module <code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code>
+ correspondantes, puis utiliser la commande <code>apachectl start</code>
+ pour démarrer le serveur. Vous trouverez un exemple de configuration
+ permettant d'activer le module <code class="module"><a href="./mod/mod_ssl.html">mod_ssl</a></code> dans le fichier
+ <code>conf/extra/httpd-ssl.conf</code>.</li>
+
+ <li>La directive <code class="directive"><a href="./mod/core.html#usecanonicalname">UseCanonicalName</a></code> est maintenant définie par
+ défaut à <code>Off</code>. Si cette directive
+ n'était pas présente dans votre
+ ancien fichier de configuration, vous pouvez ajouter
+ <code>UseCanonicalName On</code> dans le nouveau pour garder inchangé
+ l'ancien comportement.</li>
+
+ <li>Le module <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code> ne sera appliqué sur les
+ requêtes que si une directive <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> spécifiant un nom de répertoire
+ se trouve dans le fichier de configuration. Pour garder l'ancien
+ comportement par défaut inchangé, placer la directive <code>UserDir
+ public_html</code> dans votre fichier de configuration.</li>
+
+ <li>La directive <code class="directive">AuthDigestFile</code>
+ du module <code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code> a été fusionnée avec la
+ directive <code class="directive"><a href="./mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>
+ et appartient maintenant au module <code class="module"><a href="./mod/mod_authn_file.html">mod_authn_file</a></code>.</li>
+ </ul>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="misc" id="misc">Changements divers</a></h2>
+
+
+ <ul>
+ <li>Le module <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code>, qui était
+ expérimental dans Apache 2.0, est désormais un module standard.</li>
+
+ <li>Le module <code class="module"><a href="./mod/mod_disk_cache.html">mod_disk_cache</a></code>, qui était
+ expérimental dans Apache 2.0, est désormais un module standard.</li>
+
+ <li>Le module <code class="module"><a href="./mod/mod_mem_cache.html">mod_mem_cache</a></code>, qui était
+ expérimental dans Apache 2.0, est désormais un module standard.</li>
+
+ <li>Le module <code class="module"><a href="./mod/mod_charset_lite.html">mod_charset_lite</a></code>, qui était
+ expérimental dans Apache 2.0, est désormais un module standard.</li>
+
+ <li>Le module <code class="module"><a href="./mod/mod_dumpio.html">mod_dumpio</a></code>, qui était
+ expérimental dans Apache 2.0, est désormais un module standard.</li>
+
+ </ul>
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="third-party" id="third-party">Modules tiers</a></h2>
+
+
+ <p>De nombreux modules tiers conçus pour la version 2.0 fonctionneront sans
+ changement avec le serveur HTTP Apache version 2.2. Mais tous ces modules
+ doivent être recompilés avant de pouvoir être chargés.</p>
+
+ </div></div>
+<div class="bottomlang">
+<p><span>Langues Disponibles: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
+<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" title="Français">&nbsp;fr&nbsp;</a> |
+<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
+<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
+<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
+<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2007 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+</body></html> \ No newline at end of file
diff --git a/docs/manual/upgrading.html.ja.euc-jp b/docs/manual/upgrading.html.ja.euc-jp
index 631c96d5..d857b675 100644
--- a/docs/manual/upgrading.html.ja.euc-jp
+++ b/docs/manual/upgrading.html.ja.euc-jp
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Portugu«´s (Brasil)">&nbsp;pt-br&nbsp;</a> |
@@ -212,6 +213,7 @@
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran«®ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Portugu«´s (Brasil)">&nbsp;pt-br&nbsp;</a> |
diff --git a/docs/manual/upgrading.html.ko.euc-kr b/docs/manual/upgrading.html.ko.euc-kr
index 8e00789e..34bb00d5 100644
--- a/docs/manual/upgrading.html.ko.euc-kr
+++ b/docs/manual/upgrading.html.ko.euc-kr
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Portugu&#234;s (Brasil)">&nbsp;pt-br&nbsp;</a> |
@@ -194,6 +195,7 @@
<div class="bottomlang">
<p><span>°¡´ÉÇÑ ¾ð¾î: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Portugu&#234;s (Brasil)">&nbsp;pt-br&nbsp;</a> |
diff --git a/docs/manual/upgrading.html.pt-br b/docs/manual/upgrading.html.pt-br
index 68ecea25..44eef029 100644
--- a/docs/manual/upgrading.html.pt-br
+++ b/docs/manual/upgrading.html.pt-br
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>Línguas Disponíveis: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
@@ -215,6 +216,7 @@
<div class="bottomlang">
<p><span>Línguas Disponíveis: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" title="Português (Brasil)">&nbsp;pt-br&nbsp;</a> |
diff --git a/docs/manual/upgrading.html.ru.koi8-r b/docs/manual/upgrading.html.ru.koi8-r
index 9aa6cd4d..25ca39e1 100644
--- a/docs/manual/upgrading.html.ru.koi8-r
+++ b/docs/manual/upgrading.html.ru.koi8-r
@@ -20,6 +20,7 @@
<div class="toplang">
<p><span>äÏÓÔÕÐÎÙÅ ÑÚÙËÉ: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Portugu&#234;s (Brasil)">&nbsp;pt-br&nbsp;</a> |
@@ -192,6 +193,7 @@
<div class="bottomlang">
<p><span>äÏÓÔÕÐÎÙÅ ÑÚÙËÉ: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
+<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./pt-br/upgrading.html" hreflang="pt-br" rel="alternate" title="Portugu&#234;s (Brasil)">&nbsp;pt-br&nbsp;</a> |
diff --git a/httpd.spec b/httpd.spec
index bb6d6ccd..d04ec50e 100644
--- a/httpd.spec
+++ b/httpd.spec
@@ -9,7 +9,7 @@
Summary: Apache HTTP Server
Name: httpd
-Version: 2.2.6
+Version: 2.2.8
Release: 1
URL: http://httpd.apache.org/
Vendor: Apache Software Foundation
diff --git a/include/ap_mmn.h b/include/ap_mmn.h
index 95871f1b..380346b2 100644
--- a/include/ap_mmn.h
+++ b/include/ap_mmn.h
@@ -114,6 +114,12 @@
* 20051115.4 (2.2.4) Added ap_get_server_banner() and
* ap_get_server_description() (minor)
* 20051115.5 (2.2.5) Added ap_mpm_safe_kill() (minor)
+ * 20051115.6 (2.2.7) Added retry_set to proxy_worker (minor)
+ * 20051115.7 (2.2.7) Added conn_rec::clogging_input_filters (minor)
+ * 20051115.8 (2.2.7) Added flags to proxy_alias (minor)
+ * 20051115.9 (2.2.7) Add ap_send_interim_response API
+ * 20051115.10(2.2.7) Added ap_mod_status_reqtail (minor)
+ * 20051115.11(2.2.7) Add *ftp_directory_charset to proxy_dir_conf
*
*/
@@ -122,7 +128,7 @@
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20051115
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 5 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 11 /* 0...n */
/**
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
diff --git a/include/ap_release.h b/include/ap_release.h
index 1777fd05..1e505f06 100644
--- a/include/ap_release.h
+++ b/include/ap_release.h
@@ -25,7 +25,7 @@
#include "apr_general.h" /* stringify */
#define AP_SERVER_COPYRIGHT \
- "Copyright 2007 The Apache Software Foundation."
+ "Copyright 2008 The Apache Software Foundation."
/*
* The below defines the base string of the Server: header. Additional
@@ -45,7 +45,7 @@
#define AP_SERVER_MAJORVERSION_NUMBER 2
#define AP_SERVER_MINORVERSION_NUMBER 2
-#define AP_SERVER_PATCHLEVEL_NUMBER 6
+#define AP_SERVER_PATCHLEVEL_NUMBER 8
#define AP_SERVER_DEVBUILD_BOOLEAN 0
#if AP_SERVER_DEVBUILD_BOOLEAN
diff --git a/include/http_protocol.h b/include/http_protocol.h
index e8355e17..276d09bf 100644
--- a/include/http_protocol.h
+++ b/include/http_protocol.h
@@ -664,6 +664,13 @@ AP_DECLARE(void) ap_set_sub_req_protocol(request_rec *rnew, const request_rec *r
* @param sub_r Subrequest that is now compete
*/
AP_DECLARE(void) ap_finalize_sub_req_protocol(request_rec *sub_r);
+
+/**
+ * Send an interim (HTTP 1xx) response immediately.
+ * @param r The request
+ * @param send_headers Whether to send&clear headers in r->headers_out
+ */
+AP_DECLARE(void) ap_send_interim_response(request_rec *r, int send_headers);
#ifdef __cplusplus
}
diff --git a/include/httpd.h b/include/httpd.h
index d4f61c4f..15e1f11d 100644
--- a/include/httpd.h
+++ b/include/httpd.h
@@ -233,6 +233,14 @@ extern "C" {
#define DEFAULT_CONTENT_TYPE "text/plain"
#endif
+/**
+ * NO_CONTENT_TYPE is an alternative DefaultType value that suppresses
+ * setting any default type when there's no information (e.g. a proxy).
+ */
+#ifndef NO_CONTENT_TYPE
+#define NO_CONTENT_TYPE "none"
+#endif
+
/** The name of the MIME types file */
#ifndef AP_TYPES_CONFIG_FILE
#define AP_TYPES_CONFIG_FILE "conf/mime.types"
@@ -1088,6 +1096,11 @@ struct conn_rec {
conn_state_t *cs;
/** Is there data pending in the input filters? */
int data_in_input_filters;
+
+ /** Are there any filters that clogg/buffer the input stream, breaking
+ * the event mpm.
+ */
+ int clogging_input_filters;
};
/**
diff --git a/include/scoreboard.h b/include/scoreboard.h
index 103cea7b..bf43cd3f 100644
--- a/include/scoreboard.h
+++ b/include/scoreboard.h
@@ -197,6 +197,7 @@ AP_DECLARE(lb_score *) ap_get_scoreboard_lb(int lb_num);
AP_DECLARE_DATA extern scoreboard *ap_scoreboard_image;
AP_DECLARE_DATA extern const char *ap_scoreboard_fname;
AP_DECLARE_DATA extern int ap_extended_status;
+AP_DECLARE_DATA extern int ap_mod_status_reqtail;
AP_DECLARE_DATA extern ap_generation_t volatile ap_my_generation;
diff --git a/include/util_ldap.h b/include/util_ldap.h
index f0dca264..75a9d70a 100644
--- a/include/util_ldap.h
+++ b/include/util_ldap.h
@@ -30,6 +30,13 @@
#include "apr_time.h"
#include "apr_ldap.h"
+#if APR_HAS_MICROSOFT_LDAPSDK
+#define AP_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN \
+ ||(s) == LDAP_UNAVAILABLE)
+#else
+#define AP_LDAP_IS_SERVER_DOWN(s) ((s) == LDAP_SERVER_DOWN)
+#endif
+
#if APR_HAS_SHARED_MEMORY
#include "apr_rmm.h"
#include "apr_shm.h"
diff --git a/modules/NWGNUmakefile b/modules/NWGNUmakefile
index b7bc80b1..76d018d2 100644
--- a/modules/NWGNUmakefile
+++ b/modules/NWGNUmakefile
@@ -3,6 +3,13 @@
#
# To build with exerimental modules set the environment
# variable EXPERIMENTAL=1
+# To build with the mod_ssl module set the environment
+# variable WITH_MOD_SSL=1
+
+# If USE_STDSOCKETS is defined we allways build mod_ssl
+ifdef USE_STDSOCKETS
+WITH_MOD_SSL=1
+endif
SUBDIRS = \
aaa \
@@ -26,8 +33,8 @@ SUBDIRS += ldap \
$(EOLIST)
endif
-# If OSSLSDK has been defined then build the mod_ssl module
-ifndef USE_STDSOCKETS
+# If WITH_MOD_SSL and OSSLSDK have been defined then build the mod_ssl module
+ifdef WITH_MOD_SSL
ifneq "$(OSSLSDK)" ""
SUBDIRS += ssl \
$(EOLIST)
diff --git a/modules/aaa/mod_auth.h b/modules/aaa/mod_auth.h
index 34704365..1feefb3f 100644
--- a/modules/aaa/mod_auth.h
+++ b/modules/aaa/mod_auth.h
@@ -40,6 +40,8 @@ extern "C" {
#define AUTHZ_GROUP_NOTE "authz_group_note"
#define AUTHN_PROVIDER_NAME_NOTE "authn_provider_name"
+#define AUTHN_PREFIX "AUTHENTICATE_"
+
typedef enum {
AUTH_DENIED,
AUTH_GRANTED,
diff --git a/modules/aaa/mod_authn_dbd.c b/modules/aaa/mod_authn_dbd.c
index 60dbb954..3bcde864 100644
--- a/modules/aaa/mod_authn_dbd.c
+++ b/modules/aaa/mod_authn_dbd.c
@@ -18,11 +18,13 @@
#include "httpd.h"
#include "http_config.h"
#include "http_log.h"
+#include "apr_lib.h"
#include "apr_dbd.h"
#include "mod_dbd.h"
#include "apr_strings.h"
#include "mod_auth.h"
#include "apr_md5.h"
+#include "apu_version.h"
module AP_MODULE_DECLARE_DATA authn_dbd_module;
@@ -101,13 +103,13 @@ static authn_status authn_dbd_password(request_rec *r, const char *user,
}
if (conf->user == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No DBD Authn configured!");
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No AuthDBDUserPWQuery has been specified.");
return AUTH_GENERAL_ERROR;
}
statement = apr_hash_get(dbd->prepared, conf->user, APR_HASH_KEY_STRING);
if (statement == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No DBD Authn configured!");
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "A prepared statement could not be found for AuthDBDUserPWQuery, key '%s'.", conf->user);
return AUTH_GENERAL_ERROR;
}
if (apr_dbd_pvselect(dbd->driver, r->pool, dbd->handle, &res, statement,
@@ -126,6 +128,33 @@ static authn_status authn_dbd_password(request_rec *r, const char *user,
}
if (dbd_password == NULL) {
dbd_password = apr_dbd_get_entry(dbd->driver, row, 0);
+
+#if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 3)
+ /* add the rest of the columns to the environment */
+ int i = 1;
+ const char *name;
+ for (name = apr_dbd_get_name(dbd->driver, res, i);
+ name != NULL;
+ name = apr_dbd_get_name(dbd->driver, res, i)) {
+
+ char *str = apr_pstrcat(r->pool, AUTHN_PREFIX,
+ name,
+ NULL);
+ int j = sizeof(AUTHN_PREFIX)-1; /* string length of "AUTHENTICATE_", excluding the trailing NIL */
+ while (str[j]) {
+ if (!apr_isalnum(str[j])) {
+ str[j] = '_';
+ }
+ else {
+ str[j] = apr_toupper(str[j]);
+ }
+ j++;
+ }
+ apr_table_set(r->subprocess_env, str,
+ apr_dbd_get_entry(dbd->driver, row, i));
+ i++;
+ }
+#endif
}
/* we can't break out here or row won't get cleaned up */
}
@@ -160,12 +189,12 @@ static authn_status authn_dbd_realm(request_rec *r, const char *user,
return AUTH_GENERAL_ERROR;
}
if (conf->realm == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No DBD Authn configured!");
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No AuthDBDUserRealmQuery has been specified.");
return AUTH_GENERAL_ERROR;
}
statement = apr_hash_get(dbd->prepared, conf->realm, APR_HASH_KEY_STRING);
if (statement == NULL) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "No DBD Authn configured!");
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "A prepared statement could not be found for AuthDBDUserRealmQuery, key '%s'.", conf->realm);
return AUTH_GENERAL_ERROR;
}
if (apr_dbd_pvselect(dbd->driver, r->pool, dbd->handle, &res, statement,
@@ -184,6 +213,33 @@ static authn_status authn_dbd_realm(request_rec *r, const char *user,
}
if (dbd_hash == NULL) {
dbd_hash = apr_dbd_get_entry(dbd->driver, row, 0);
+
+#if APU_MAJOR_VERSION > 1 || (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 3)
+ /* add the rest of the columns to the environment */
+ int i = 1;
+ const char *name;
+ for (name = apr_dbd_get_name(dbd->driver, res, i);
+ name != NULL;
+ name = apr_dbd_get_name(dbd->driver, res, i)) {
+
+ char *str = apr_pstrcat(r->pool, AUTHN_PREFIX,
+ name,
+ NULL);
+ int j = sizeof(AUTHN_PREFIX)-1; /* string length of "AUTHENTICATE_", excluding the trailing NIL */
+ while (str[j]) {
+ if (!apr_isalnum(str[j])) {
+ str[j] = '_';
+ }
+ else {
+ str[j] = apr_toupper(str[j]);
+ }
+ j++;
+ }
+ apr_table_set(r->subprocess_env, str,
+ apr_dbd_get_entry(dbd->driver, row, i));
+ i++;
+ }
+#endif
}
/* we can't break out here or row won't get cleaned up */
}
diff --git a/modules/aaa/mod_authnz_ldap.c b/modules/aaa/mod_authnz_ldap.c
index f520b0ae..7fbff414 100644
--- a/modules/aaa/mod_authnz_ldap.c
+++ b/modules/aaa/mod_authnz_ldap.c
@@ -29,6 +29,7 @@
#include "apr_xlate.h"
#define APR_WANT_STRFUNC
#include "apr_want.h"
+#include "apr_lib.h"
#if APR_HAVE_UNISTD_H
/* for getpid() */
@@ -400,7 +401,7 @@ start_over:
util_ldap_connection_close(ldc);
/* sanity check - if server is down, retry it up to 5 times */
- if (result == LDAP_SERVER_DOWN) {
+ if (AP_LDAP_IS_SERVER_DOWN(result)) {
if (failures++ <= 5) {
goto start_over;
}
@@ -441,12 +442,10 @@ start_over:
apr_table_t *e = r->subprocess_env;
int i = 0;
while (sec->attributes[i]) {
- char *str = apr_pstrcat(r->pool, "AUTHENTICATE_", sec->attributes[i], NULL);
- int j = 13;
+ char *str = apr_pstrcat(r->pool, AUTHN_PREFIX, sec->attributes[i], NULL);
+ int j = sizeof(AUTHN_PREFIX)-1; /* string length of "AUTHENTICATE_", excluding the trailing NIL */
while (str[j]) {
- if (str[j] >= 'a' && str[j] <= 'z') {
- str[j] = str[j] - ('a' - 'A');
- }
+ str[j] = apr_toupper(str[j]);
j++;
}
apr_table_setn(e, str, vals[i]);
diff --git a/modules/aaa/mod_authz_groupfile.c b/modules/aaa/mod_authz_groupfile.c
index 0d52c8de..4c710507 100644
--- a/modules/aaa/mod_authz_groupfile.c
+++ b/modules/aaa/mod_authz_groupfile.c
@@ -173,6 +173,11 @@ static int check_user_access(request_rec *r)
return DECLINED; /* XXX change from legacy */
}
+ /* If there's no user, it's a misconfiguration */
+ if (!user) {
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+
reqs = (require_line *)reqs_arr->elts;
for (x = 0; x < reqs_arr->nelts; x++) {
diff --git a/modules/cache/mod_disk_cache.c b/modules/cache/mod_disk_cache.c
index 6b3e7733..4148b373 100644
--- a/modules/cache/mod_disk_cache.c
+++ b/modules/cache/mod_disk_cache.c
@@ -165,7 +165,10 @@ static apr_status_t file_cache_el_final(disk_cache_object_t *dobj,
*/
rv = apr_file_rename(dobj->tempfile, dobj->datafile, r->pool);
if (rv != APR_SUCCESS) {
- /* XXX log */
+ ap_log_error(APLOG_MARK, APLOG_WARNING, rv, r->server,
+ "disk_cache: rename tempfile to datafile failed:"
+ " %s -> %s", dobj->tempfile, dobj->datafile);
+ apr_file_remove(dobj->tempfile, r->pool);
}
dobj->tfd = NULL;
@@ -856,9 +859,10 @@ static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info
rv = safe_file_rename(conf, dobj->tempfile, dobj->hdrsfile,
r->pool);
if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, r->server,
+ ap_log_error(APLOG_MARK, APLOG_WARNING, rv, r->server,
"disk_cache: rename tempfile to varyfile failed: %s -> %s",
dobj->tempfile, dobj->hdrsfile);
+ apr_file_remove(dobj->tempfile, r->pool);
return rv;
}
@@ -946,9 +950,10 @@ static apr_status_t store_headers(cache_handle_t *h, request_rec *r, cache_info
rv = safe_file_rename(conf, dobj->tempfile, dobj->hdrsfile, r->pool);
if (rv != APR_SUCCESS) {
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
+ ap_log_error(APLOG_MARK, APLOG_WARNING, rv, r->server,
"disk_cache: rename tempfile to hdrsfile failed: %s -> %s",
dobj->tempfile, dobj->hdrsfile);
+ apr_file_remove(dobj->tempfile, r->pool);
return rv;
}
diff --git a/modules/dav/fs/lock.c b/modules/dav/fs/lock.c
index 61dd8553..32220a79 100644
--- a/modules/dav/fs/lock.c
+++ b/modules/dav/fs/lock.c
@@ -600,8 +600,7 @@ static dav_error * dav_fs_load_lock_record(dav_lockdb *lockdb, apr_datum_t key,
dp = apr_pcalloc(p, sizeof(*dp));
memcpy(dp, val.dptr + offset, sizeof(dp->f));
offset += sizeof(dp->f);
- dp->locktoken = apr_palloc(p, sizeof(*dp->locktoken));
- memcpy(dp->locktoken, val.dptr + offset, sizeof(*dp->locktoken));
+ dp->locktoken = apr_pmemdup(p, val.dptr + offset, sizeof(*dp->locktoken));
offset += sizeof(*dp->locktoken);
if (*(val.dptr + offset) == '\0') {
++offset;
@@ -648,15 +647,13 @@ static dav_error * dav_fs_load_lock_record(dav_lockdb *lockdb, apr_datum_t key,
/* Create and fill a dav_lock_indirect structure */
ip = apr_pcalloc(p, sizeof(*ip));
- ip->locktoken = apr_palloc(p, sizeof(*ip->locktoken));
- memcpy(ip->locktoken, val.dptr + offset, sizeof(*ip->locktoken));
+ ip->locktoken = apr_pmemdup(p, val.dptr + offset, sizeof(*ip->locktoken));
offset += sizeof(*ip->locktoken);
memcpy(&ip->timeout, val.dptr + offset, sizeof(ip->timeout));
offset += sizeof(ip->timeout);
memcpy(&ip->key.dsize, val.dptr + offset, sizeof(ip->key.dsize)); /* length of datum */
offset += sizeof(ip->key.dsize);
- ip->key.dptr = apr_palloc(p, ip->key.dsize);
- memcpy(ip->key.dptr, val.dptr + offset, ip->key.dsize);
+ ip->key.dptr = apr_pmemdup(p, val.dptr + offset, ip->key.dsize);
offset += ip->key.dsize;
if (!dav_fs_lock_expired(ip->timeout)) {
diff --git a/modules/dav/fs/repos.c b/modules/dav/fs/repos.c
index 8c28c076..a532e6e9 100644
--- a/modules/dav/fs/repos.c
+++ b/modules/dav/fs/repos.c
@@ -1777,13 +1777,15 @@ static const char *dav_fs_getetag(const dav_resource *resource)
return apr_pstrdup(ctx->pool, "");
if (ctx->finfo.filetype != 0) {
- return apr_psprintf(ctx->pool, "\"%lx-%lx-%lx\"",
- (unsigned long) ctx->finfo.inode,
- (unsigned long) ctx->finfo.size,
- (unsigned long) ctx->finfo.mtime);
+ return apr_psprintf(ctx->pool, "\"%" APR_UINT64_T_HEX_FMT "-%"
+ APR_UINT64_T_HEX_FMT "-%" APR_UINT64_T_HEX_FMT "\"",
+ (apr_uint64_t) ctx->finfo.inode,
+ (apr_uint64_t) ctx->finfo.size,
+ (apr_uint64_t) ctx->finfo.mtime);
}
- return apr_psprintf(ctx->pool, "\"%lx\"", (unsigned long) ctx->finfo.mtime);
+ return apr_psprintf(ctx->pool, "\"%" APR_UINT64_T_HEX_FMT "\"",
+ (apr_uint64_t) ctx->finfo.mtime);
}
static const dav_hooks_repository dav_hooks_repository_fs =
diff --git a/modules/dav/lock/locks.c b/modules/dav/lock/locks.c
index 2b297a8c..a4e0e214 100644
--- a/modules/dav/lock/locks.c
+++ b/modules/dav/lock/locks.c
@@ -603,8 +603,7 @@ static dav_error * dav_generic_load_lock_record(dav_lockdb *lockdb,
offset += sizeof(dp->f);
/* Copy the lock token. */
- dp->locktoken = apr_palloc(p, sizeof(*dp->locktoken));
- memcpy(dp->locktoken, val.dptr + offset, sizeof(*dp->locktoken));
+ dp->locktoken = apr_pmemdup(p, val.dptr + offset, sizeof(*dp->locktoken));
offset += sizeof(*dp->locktoken);
/* Do we have an owner field? */
@@ -639,16 +638,14 @@ static dav_error * dav_generic_load_lock_record(dav_lockdb *lockdb,
/* Create and fill a dav_lock_indirect structure */
ip = apr_pcalloc(p, sizeof(*ip));
- ip->locktoken = apr_palloc(p, sizeof(*ip->locktoken));
- memcpy(ip->locktoken, val.dptr + offset, sizeof(*ip->locktoken));
+ ip->locktoken = apr_pmemdup(p, val.dptr + offset, sizeof(*ip->locktoken));
offset += sizeof(*ip->locktoken);
memcpy(&ip->timeout, val.dptr + offset, sizeof(ip->timeout));
offset += sizeof(ip->timeout);
/* length of datum */
ip->key.dsize = *((int *) (val.dptr + offset));
offset += sizeof(ip->key.dsize);
- ip->key.dptr = apr_palloc(p, ip->key.dsize);
- memcpy(ip->key.dptr, val.dptr + offset, ip->key.dsize);
+ ip->key.dptr = apr_pmemdup(p, val.dptr + offset, ip->key.dsize);
offset += ip->key.dsize;
if (!dav_generic_lock_expired(ip->timeout)) {
diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c
index 9033cad9..24699bc0 100644
--- a/modules/dav/main/mod_dav.c
+++ b/modules/dav/main/mod_dav.c
@@ -317,7 +317,7 @@ static int dav_error_response(request_rec *r, int status, const char *body)
/* ### I really don't think this is needed; gotta test */
r->status_line = ap_get_status_line(status);
- ap_set_content_type(r, "text/html");
+ ap_set_content_type(r, "text/html; charset=ISO-8859-1");
/* begin the response now... */
ap_rvputs(r,
diff --git a/modules/dav/main/util.c b/modules/dav/main/util.c
index 153f25d4..5297b908 100644
--- a/modules/dav/main/util.c
+++ b/modules/dav/main/util.c
@@ -1404,6 +1404,39 @@ static dav_error * dav_validate_walker(dav_walk_resource *wres, int calltype)
return NULL;
}
+/* If-* header checking */
+static int dav_meets_conditions(request_rec *r, int resource_state)
+{
+ const char *if_match, *if_none_match;
+ int retVal;
+
+ /* If-Match '*' fix. Resource existence not checked by ap_meets_conditions.
+ * If-Match '*' request should succeed only if the resource exists. */
+ if ((if_match = apr_table_get(r->headers_in, "If-Match")) != NULL) {
+ if (if_match[0] == '*' && resource_state != DAV_RESOURCE_EXISTS)
+ return HTTP_PRECONDITION_FAILED;
+ }
+
+ retVal = ap_meets_conditions(r);
+
+ /* If-None-Match '*' fix. If-None-Match '*' request should succeed
+ * if the resource does not exist. */
+ if (retVal == HTTP_PRECONDITION_FAILED) {
+ /* Note. If if_none_match != NULL, if_none_match is the culprit.
+ * Since, in presence of If-None-Match,
+ * other If-* headers are undefined. */
+ if ((if_none_match =
+ apr_table_get(r->headers_in, "If-None-Match")) != NULL) {
+ if (if_none_match[0] == '*'
+ && resource_state != DAV_RESOURCE_EXISTS) {
+ return OK;
+ }
+ }
+ }
+
+ return retVal;
+}
+
/*
** dav_validate_request: Validate if-headers (and check for locks) on:
** (1) r->filename @ depth;
@@ -1433,6 +1466,9 @@ DAV_DECLARE(dav_error *) dav_validate_request(request_rec *r,
const dav_hooks_repository *repos_hooks = resource->hooks;
dav_buffer work_buf = { 0 };
dav_response *new_response;
+ int resource_state;
+ const char *etag;
+ int set_etag = 0;
#if DAV_DEBUG
if (depth && response == NULL) {
@@ -1449,10 +1485,29 @@ DAV_DECLARE(dav_error *) dav_validate_request(request_rec *r,
if (response != NULL)
*response = NULL;
+ /* Set the ETag header required by dav_meets_conditions() */
+ etag = apr_table_get(r->headers_out, "ETag");
+ if (!etag) {
+ etag = (*resource->hooks->getetag)(resource);
+ if (etag && *etag) {
+ apr_table_set(r->headers_out, "ETag", etag);
+ set_etag = 1;
+ }
+ }
/* Do the standard checks for conditional requests using
* If-..-Since, If-Match etc */
- if ((result = ap_meets_conditions(r)) != OK) {
- /* ### fix this up... how? */
+ resource_state = dav_get_resource_state(r, resource);
+ result = dav_meets_conditions(r, resource_state);
+ if (set_etag) {
+ /*
+ * If we have set an ETag to headers out above for
+ * dav_meets_conditions() revert this here as we do not want to set
+ * the ETag in responses to requests with methods where this might not
+ * be desired.
+ */
+ apr_table_unset(r->headers_out, "ETag");
+ }
+ if (result != OK) {
return dav_new_error(r->pool, result, 0, NULL);
}
diff --git a/modules/experimental/mod_case_filter.c b/modules/experimental/mod_case_filter.c
index 04aeb703..023ebb22 100644
--- a/modules/experimental/mod_case_filter.c
+++ b/modules/experimental/mod_case_filter.c
@@ -91,7 +91,16 @@ static apr_status_t CaseFilterOutFilter(ap_filter_t *f,
APR_BRIGADE_INSERT_TAIL(pbbOut,pbktOut);
}
- /* XXX: is there any advantage to passing a brigade for each bucket? */
+ /* Q: is there any advantage to passing a brigade for each bucket?
+ * A: obviously, it can cut down server resource consumption, if this
+ * experimental module was fed a file of 4MB, it would be using 8MB for
+ * the 'read' buckets and the 'write' buckets.
+ *
+ * Note it is more efficient to consume (destroy) each bucket as it's
+ * processed above than to do a single cleanup down here. In any case,
+ * don't let our caller pass the same buckets to us, twice;
+ */
+ apr_brigade_cleanup(pbbIn);
return ap_pass_brigade(f->next,pbbOut);
}
diff --git a/modules/filters/NWGNUmakefile b/modules/filters/NWGNUmakefile
index 4433689e..04762d60 100644
--- a/modules/filters/NWGNUmakefile
+++ b/modules/filters/NWGNUmakefile
@@ -155,6 +155,7 @@ TARGET_nlm = \
$(OBJDIR)/extfiltr.nlm \
$(OBJDIR)/charsetl.nlm \
$(OBJDIR)/mod_filter.nlm \
+ $(OBJDIR)/substitute.nlm \
$(EOLIST)
# If the zlib libraries source exists then build the mod_deflate module
diff --git a/modules/filters/NWGNUsubstitute b/modules/filters/NWGNUsubstitute
new file mode 100644
index 00000000..ca19eb11
--- /dev/null
+++ b/modules/filters/NWGNUsubstitute
@@ -0,0 +1,258 @@
+#
+# Declare the sub-directories to be built here
+#
+
+SUBDIRS = \
+ $(EOLIST)
+
+#
+# Get the 'head' of the build environment. This includes default targets and
+# paths to tools
+#
+
+include $(AP_WORK)\build\NWGNUhead.inc
+
+#
+# build this level's files
+
+#
+# Make sure all needed macro's are defined
+#
+
+#
+# These directories will be at the beginning of the include list, followed by
+# INCDIRS
+#
+XINCDIRS += \
+ $(AP_WORK)/include \
+ $(NWOS) \
+ $(AP_WORK)/modules/arch/netware \
+ $(APR)/include \
+ $(APRUTIL)/include \
+ $(APR) \
+ $(EOLIST)
+
+#
+# These flags will come after CFLAGS
+#
+XCFLAGS += \
+ $(EOLIST)
+
+#
+# These defines will come after DEFINES
+#
+XDEFINES += \
+ $(EOLIST)
+
+#
+# These flags will be added to the link.opt file
+#
+XLFLAGS += \
+ $(EOLIST)
+
+#
+# These values will be appended to the correct variables based on the value of
+# RELEASE
+#
+ifeq "$(RELEASE)" "debug"
+XINCDIRS += \
+ $(EOLIST)
+
+XCFLAGS += \
+ $(EOLIST)
+
+XDEFINES += \
+ $(EOLIST)
+
+XLFLAGS += \
+ $(EOLIST)
+endif
+
+ifeq "$(RELEASE)" "noopt"
+XINCDIRS += \
+ $(EOLIST)
+
+XCFLAGS += \
+ $(EOLIST)
+
+XDEFINES += \
+ $(EOLIST)
+
+XLFLAGS += \
+ $(EOLIST)
+endif
+
+ifeq "$(RELEASE)" "release"
+XINCDIRS += \
+ $(EOLIST)
+
+XCFLAGS += \
+ $(EOLIST)
+
+XDEFINES += \
+ $(EOLIST)
+
+XLFLAGS += \
+ $(EOLIST)
+endif
+
+#
+# These are used by the link target if an NLM is being generated
+# This is used by the link 'name' directive to name the nlm. If left blank
+# TARGET_nlm (see below) will be used.
+#
+NLM_NAME = substitute
+
+#
+# This is used by the link '-desc ' directive.
+# If left blank, NLM_NAME will be used.
+#
+NLM_DESCRIPTION = Apache $(VERSION_STR) Substitute Module
+
+#
+# This is used by the '-threadname' directive. If left blank,
+# NLM_NAME Thread will be used.
+#
+NLM_THREAD_NAME = Substitute Module
+
+#
+# If this is specified, it will override VERSION value in
+# $(AP_WORK)\build\NWGNUenvironment.inc
+#
+NLM_VERSION =
+
+#
+# If this is specified, it will override the default of 64K
+#
+NLM_STACK_SIZE = 8192
+
+
+#
+# If this is specified it will be used by the link '-entry' directive
+#
+NLM_ENTRY_SYM = _LibCPrelude
+
+#
+# If this is specified it will be used by the link '-exit' directive
+#
+NLM_EXIT_SYM = _LibCPostlude
+
+#
+# If this is specified it will be used by the link '-check' directive
+#
+NLM_CHECK_SYM =
+
+#
+# If these are specified it will be used by the link '-flags' directive
+#
+NLM_FLAGS = AUTOUNLOAD, PSEUDOPREEMPTION
+
+#
+# If this is specified it will be linked in with the XDCData option in the def
+# file instead of the default of $(NWOS)/apache.xdc. XDCData can be disabled
+# by setting APACHE_UNIPROC in the environment
+#
+XDCDATA =
+
+#
+# If there is an NLM target, put it here
+#
+TARGET_nlm = \
+ $(OBJDIR)/substitute.nlm \
+ $(EOLIST)
+
+#
+# If there is an LIB target, put it here
+#
+TARGET_lib = \
+ $(EOLIST)
+
+#
+# These are the OBJ files needed to create the NLM target above.
+# Paths must all use the '/' character
+#
+FILES_nlm_objs = \
+ $(OBJDIR)/mod_substitute.o \
+ $(EOLIST)
+
+#
+# These are the LIB files needed to create the NLM target above.
+# These will be added as a library command in the link.opt file.
+#
+FILES_nlm_libs = \
+ libcpre.o \
+ $(EOLIST)
+
+#
+# These are the modules that the above NLM target depends on to load.
+# These will be added as a module command in the link.opt file.
+#
+FILES_nlm_modules = \
+ aprlib \
+ libc \
+ $(EOLIST)
+
+#
+# If the nlm has a msg file, put it's path here
+#
+FILE_nlm_msg =
+
+#
+# If the nlm has a hlp file put it's path here
+#
+FILE_nlm_hlp =
+
+#
+# If this is specified, it will override $(NWOS)\copyright.txt.
+#
+FILE_nlm_copyright =
+
+#
+# Any additional imports go here
+#
+FILES_nlm_Ximports = \
+ @$(APR)/aprlib.imp \
+ @$(NWOS)/httpd.imp \
+ @libc.imp \
+ $(EOLIST)
+
+#
+# Any symbols exported to here
+#
+FILES_nlm_exports = \
+ substitute_module \
+ $(EOLIST)
+
+#
+# These are the OBJ files needed to create the LIB target above.
+# Paths must all use the '/' character
+#
+FILES_lib_objs = \
+ $(EOLIST)
+
+#
+# implement targets and dependancies (leave this section alone)
+#
+
+libs :: $(OBJDIR) $(TARGET_lib)
+
+nlms :: libs $(TARGET_nlm)
+
+#
+# Updated this target to create necessary directories and copy files to the
+# correct place. (See $(AP_WORK)\build\NWGNUhead.inc for examples)
+#
+install :: nlms FORCE
+
+#
+# Any specialized rules here
+#
+
+#
+# Include the 'tail' makefile that has targets that depend on variables defined
+# in this makefile
+#
+
+include $(AP_WORK)\build\NWGNUtail.inc
+
+
diff --git a/modules/filters/config.m4 b/modules/filters/config.m4
index c9c8f386..9c1f6083 100644
--- a/modules/filters/config.m4
+++ b/modules/filters/config.m4
@@ -7,6 +7,7 @@ APACHE_MODPATH_INIT(filters)
APACHE_MODULE(ext_filter, external filter module, , , most)
APACHE_MODULE(include, Server Side Includes, , , yes)
APACHE_MODULE(filter, Smart Filtering, , , yes)
+APACHE_MODULE(substitute, response content rewrite-like filtering, , , most)
if test "$ac_cv_ebcdic" = "yes"; then
# mod_charset_lite can be very useful on an ebcdic system,
diff --git a/modules/filters/mod_charset_lite.c b/modules/filters/mod_charset_lite.c
index e7df32b1..ed8ecbe5 100644
--- a/modules/filters/mod_charset_lite.c
+++ b/modules/filters/mod_charset_lite.c
@@ -85,6 +85,7 @@ typedef struct charset_dir_t {
*/
typedef struct charset_filter_ctx_t {
apr_xlate_t *xlate;
+ int is_sb; /* single-byte translation? */
charset_dir_t *dc;
ees_t ees; /* extended error status */
apr_size_t saved;
@@ -188,9 +189,9 @@ static const char *add_charset_options(cmd_parms *cmd, void *in_dc,
return NULL;
}
-/* find_code_page() is a fixup hook that decides if translation should be
- * enabled; if so, it sets up request data for use by the filter registration
- * hook so that it knows what to do
+/* find_code_page() is a fixup hook that checks if the module is
+ * configured and the input or output potentially need to be translated.
+ * If so, context is initialized for the filters.
*/
static int find_code_page(request_rec *r)
{
@@ -199,13 +200,14 @@ static int find_code_page(request_rec *r)
charset_req_t *reqinfo;
charset_filter_ctx_t *input_ctx, *output_ctx;
apr_status_t rv;
- const char *mime_type;
if (dc->debug >= DBGLVL_FLOW) {
ap_log_rerror(APLOG_MARK,APLOG_DEBUG, 0, r,
"uri: %s file: %s method: %d "
"imt: %s flags: %s%s%s %s->%s",
- r->uri, r->filename, r->method_number,
+ r->uri,
+ r->filename ? r->filename : "(none)",
+ r->method_number,
r->content_type ? r->content_type : "(unknown)",
r->main ? "S" : "", /* S if subrequest */
r->prev ? "R" : "", /* R if redirect */
@@ -226,60 +228,22 @@ static int find_code_page(request_rec *r)
}
/* catch proxy requests */
- if (r->proxyreq) return DECLINED;
- /* mod_rewrite indicators */
- if (!strncmp(r->filename, "redirect:", 9)) return DECLINED;
- if (!strncmp(r->filename, "gone:", 5)) return DECLINED;
- if (!strncmp(r->filename, "passthrough:", 12)) return DECLINED;
- if (!strncmp(r->filename, "forbidden:", 10)) return DECLINED;
- /* no translation when server and network charsets are set to the same value */
- if (!strcasecmp(dc->charset_source, dc->charset_default)) return DECLINED;
-
- mime_type = r->content_type ? r->content_type : ap_default_type(r);
-
- /* If mime type isn't text or message, bail out.
- */
-
-/* XXX When we handle translation of the request body, watch out here as
- * 1.3 allowed additional mime types: multipart and
- * application/x-www-form-urlencoded
- */
+ if (r->proxyreq) {
+ return DECLINED;
+ }
- if (strncasecmp(mime_type, "text/", 5) &&
-#if APR_CHARSET_EBCDIC || AP_WANT_DIR_TRANSLATION
- /* On an EBCDIC machine, be willing to translate mod_autoindex-
- * generated output. Otherwise, it doesn't look too cool.
- *
- * XXX This isn't a perfect fix because this doesn't trigger us
- * to convert from the charset of the source code to ASCII. The
- * general solution seems to be to allow a generator to set an
- * indicator in the r specifying that the body is coded in the
- * implementation character set (i.e., the charset of the source
- * code). This would get several different types of documents
- * translated properly: mod_autoindex output, mod_status output,
- * mod_info output, hard-coded error documents, etc.
- */
- strcmp(mime_type, DIR_MAGIC_TYPE) &&
-#endif
- strncasecmp(mime_type, "message/", 8)) {
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "mime type is %s; no translation selected",
- mime_type);
- }
- /* We must not bail out here (i.e., the MIME test must be in the filter
- * itself, not in the fixup, because only then is the final MIME type known.
- * Examples for late changes to the MIME type include CGI handling (MIME
- * type is set in the Content-Type header produced by the CGI script), or
- * PHP (until PHP runs, the MIME type is set to application/x-httpd-php)
- */
+ /* mod_rewrite indicators */
+ if (r->filename
+ && (!strncmp(r->filename, "redirect:", 9)
+ || !strncmp(r->filename, "gone:", 5)
+ || !strncmp(r->filename, "passthrough:", 12)
+ || !strncmp(r->filename, "forbidden:", 10))) {
+ return DECLINED;
}
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "charset_source: %s charset_default: %s",
- dc && dc->charset_source ? dc->charset_source : "(none)",
- dc && dc->charset_default ? dc->charset_default : "(none)");
+ /* no translation when server and network charsets are set to the same value */
+ if (!strcasecmp(dc->charset_source, dc->charset_default)) {
+ return DECLINED;
}
/* Get storage for the request data and the output filter context.
@@ -296,14 +260,6 @@ static int find_code_page(request_rec *r)
reqinfo->output_ctx = output_ctx;
- /* We must not open the xlation table here yet, because the final MIME
- * type is not known until we are actually called in the output filter.
- * With POST or PUT request, the case is different, because their MIME
- * type is set in the request headers, and their data are prerequisites
- * for actually calling, e.g., the CGI handler later on.
- */
- output_ctx->xlate = NULL;
-
switch (r->method_number) {
case M_PUT:
case M_POST:
@@ -325,6 +281,9 @@ static int find_code_page(request_rec *r)
dc->charset_default, dc->charset_source);
return HTTP_INTERNAL_SERVER_ERROR;
}
+ if (apr_xlate_sb_get(input_ctx->xlate, &input_ctx->is_sb) != APR_SUCCESS) {
+ input_ctx->is_sb = 0;
+ }
}
return DECLINED;
@@ -823,18 +782,11 @@ static apr_status_t xlate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
}
}
- /* Opening the output translation (this used to be done in the fixup hook,
- * but that was too early: a subsequent type modification, e.g., by a
- * CGI script, would go unnoticed. Now we do it in the filter itself.)
+ /* Check the mime type to see if translation should be performed.
*/
- if (!ctx->noop && ctx->xlate == NULL)
- {
+ if (!ctx->noop && ctx->xlate == NULL) {
const char *mime_type = f->r->content_type ? f->r->content_type : ap_default_type(f->r);
- /* XXX When we handle translation of the request body, watch out here as
- * 1.3 allowed additional mime types: multipart and
- * application/x-www-form-urlencoded
- */
if (strncasecmp(mime_type, "text/", 5) == 0 ||
#if APR_CHARSET_EBCDIC
/* On an EBCDIC machine, be willing to translate mod_autoindex-
@@ -849,39 +801,51 @@ static apr_status_t xlate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
* translated properly: mod_autoindex output, mod_status output,
* mod_info output, hard-coded error documents, etc.
*/
- strcmp(mime_type, DIR_MAGIC_TYPE) == 0 ||
+ strcmp(mime_type, DIR_MAGIC_TYPE) == 0 ||
#endif
- strncasecmp(mime_type, "message/", 8) == 0) {
+ strncasecmp(mime_type, "message/", 8) == 0) {
rv = apr_xlate_open(&ctx->xlate,
- dc->charset_default, dc->charset_source, f->r->pool);
+ dc->charset_default, dc->charset_source, f->r->pool);
if (rv != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
"can't open translation %s->%s",
dc->charset_source, dc->charset_default);
ctx->noop = 1;
}
+ else {
+ if (apr_xlate_sb_get(ctx->xlate, &ctx->is_sb) != APR_SUCCESS) {
+ ctx->is_sb = 0;
+ }
+ }
}
else {
- ctx->noop = 1;
- if (dc->debug >= DBGLVL_GORY)
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
- "mime type is %s; no translation selected",
- mime_type);
+ ctx->noop = 1;
+ if (dc->debug >= DBGLVL_GORY) {
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
+ "mime type is %s; no translation selected",
+ mime_type);
}
+ }
}
if (dc->debug >= DBGLVL_GORY) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
- "xlate_out_filter() - "
- "charset_source: %s charset_default: %s",
- dc && dc->charset_source ? dc->charset_source : "(none)",
- dc && dc->charset_default ? dc->charset_default : "(none)");
+ "xlate_out_filter() - "
+ "charset_source: %s charset_default: %s",
+ dc && dc->charset_source ? dc->charset_source : "(none)",
+ dc && dc->charset_default ? dc->charset_default : "(none)");
}
if (!ctx->ran) { /* filter never ran before */
chk_filter_chain(f);
ctx->ran = 1;
+ if (!ctx->noop && !ctx->is_sb) {
+ /* We're not converting between two single-byte charsets, so unset
+ * Content-Length since it is unlikely to remain the same.
+ */
+ apr_table_unset(f->r->headers_out, "Content-Length");
+ }
}
if (ctx->noop) {
@@ -1040,6 +1004,23 @@ static int xlate_in_filter(ap_filter_t *f, apr_bucket_brigade *bb,
if (!ctx->ran) { /* filter never ran before */
chk_filter_chain(f);
ctx->ran = 1;
+ if (!ctx->noop && !ctx->is_sb
+ && apr_table_get(f->r->headers_in, "Content-Length")) {
+ /* A Content-Length header is present, but it won't be valid after
+ * conversion because we're not converting between two single-byte
+ * charsets. This will affect most CGI scripts and may affect
+ * some modules.
+ * Content-Length can't be unset here because that would break
+ * being able to read the request body.
+ * Processing of chunked request bodies is not impacted by this
+ * filter since the the length was not declared anyway.
+ */
+ if (dc->debug >= DBGLVL_PMC) {
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r,
+ "Request body length may change, resulting in "
+ "misprocessing by some modules or scripts");
+ }
+ }
}
if (ctx->noop) {
diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c
index f82b75b7..de1a57d7 100644
--- a/modules/filters/mod_deflate.c
+++ b/modules/filters/mod_deflate.c
@@ -293,6 +293,7 @@ typedef struct deflate_ctx_t
int (*libz_end_func)(z_streamp);
unsigned char *validation_buffer;
apr_size_t validation_buffer_length;
+ int inflate_init;
} deflate_ctx;
/* Number of validation bytes (CRC and length) after the compressed data */
@@ -371,7 +372,23 @@ static apr_status_t deflate_ctx_cleanup(void *data)
ctx->libz_end_func(&ctx->stream);
return APR_SUCCESS;
}
-
+/* PR 39727: we're screwing up our clients if we leave a strong ETag
+ * header while transforming content. Henrik Nordstrom suggests
+ * appending ";gzip".
+ *
+ * Pending a more thorough review of our Etag handling, let's just
+ * implement his suggestion. It fixes the bug, or at least turns it
+ * from a showstopper to an inefficiency. And it breaks nothing that
+ * wasn't already broken.
+ */
+static void deflate_check_etag(request_rec *r, const char *transform)
+{
+ const char *etag = apr_table_get(r->headers_out, "ETag");
+ if (etag && (((etag[0] != 'W') && (etag[0] !='w')) || (etag[1] != '/'))) {
+ apr_table_set(r->headers_out, "ETag",
+ apr_pstrcat(r->pool, etag, "-", transform, NULL));
+ }
+}
static apr_status_t deflate_out_filter(ap_filter_t *f,
apr_bucket_brigade *bb)
{
@@ -569,6 +586,7 @@ static apr_status_t deflate_out_filter(ap_filter_t *f,
}
apr_table_unset(r->headers_out, "Content-Length");
apr_table_unset(r->headers_out, "Content-MD5");
+ deflate_check_etag(r, "gzip");
/* initialize deflate output buffer */
ctx->stream.next_out = ctx->buffer;
@@ -983,7 +1001,6 @@ static apr_status_t inflate_out_filter(ap_filter_t *f,
{
int zlib_method;
int zlib_flags;
- int inflate_init = 1;
apr_bucket *e;
request_rec *r = f->r;
deflate_ctx *ctx = f->ctx;
@@ -1062,12 +1079,13 @@ static apr_status_t inflate_out_filter(ap_filter_t *f,
/* these are unlikely to be set anyway, but ... */
apr_table_unset(r->headers_out, "Content-Length");
apr_table_unset(r->headers_out, "Content-MD5");
+ deflate_check_etag(r, "gunzip");
/* initialize inflate output buffer */
ctx->stream.next_out = ctx->buffer;
ctx->stream.avail_out = c->bufferSize;
- inflate_init = 0;
+ ctx->inflate_init = 0;
}
while (!APR_BRIGADE_EMPTY(bb))
@@ -1172,7 +1190,7 @@ static apr_status_t inflate_out_filter(ap_filter_t *f,
apr_bucket_read(e, &data, &len, APR_BLOCK_READ);
/* first bucket contains zlib header */
- if (!inflate_init++) {
+ if (!ctx->inflate_init++) {
if (len < 10) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"Insufficient data for inflate");
diff --git a/modules/filters/mod_deflate.dsp b/modules/filters/mod_deflate.dsp
index 478eec66..f99035ed 100644
--- a/modules/filters/mod_deflate.dsp
+++ b/modules/filters/mod_deflate.dsp
@@ -53,7 +53,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /out:".\Release\mod_deflate.so" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so
-# ADD LINK32 kernel32.lib zlib.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Release\mod_deflate.so" /libpath:"../../srclib/zlib" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so /opt:ref
+# ADD LINK32 kernel32.lib zdll.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Release\mod_deflate.so" /libpath:"../../srclib/zlib" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\mod_deflate.so
SOURCE="$(InputPath)"
@@ -85,7 +85,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_deflate.so" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so
-# ADD LINK32 kernel32.lib zlib.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_deflate.so" /libpath:"../../srclib/zlib" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so
+# ADD LINK32 kernel32.lib zdll.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_deflate.so" /libpath:"../../srclib/zlib" /base:@..\..\os\win32\BaseAddr.ref,mod_deflate.so
# Begin Special Build Tool
TargetPath=.\Debug\mod_deflate.so
SOURCE="$(InputPath)"
diff --git a/modules/filters/mod_ext_filter.dsp b/modules/filters/mod_ext_filter.dsp
index 7b77b674..f87d5d7e 100644
--- a/modules/filters/mod_ext_filter.dsp
+++ b/modules/filters/mod_ext_filter.dsp
@@ -47,7 +47,7 @@ RSC=rc.exe
# ADD BASE MTL /nologo /D "NDEBUG" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /fo"Release/mod_deflate.res" /i "../../include" /i "../../srclib/apr/include" /d "NDEBUG" /d BIN_NAME="mod_deflate.so" /d LONG_NAME="deflate_module for Apache"
+# ADD RSC /l 0x409 /fo"Release/mod_ext_filter.res" /i "../../include" /i "../../srclib/apr/include" /d "NDEBUG" /d BIN_NAME="mod_ext_filter.so" /d LONG_NAME="ext_filter_module for Apache"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
@@ -79,7 +79,7 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# ADD BASE MTL /nologo /D "_DEBUG" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /fo"Debug/mod_deflate.res" /i "../../include" /i "../../srclib/apr/include" /d "_DEBUG" /d BIN_NAME="mod_deflate.so" /d LONG_NAME="deflate_module for Apache"
+# ADD RSC /l 0x409 /fo"Debug/mod_ext_filter.res" /i "../../include" /i "../../srclib/apr/include" /d "_DEBUG" /d BIN_NAME="mod_ext_filter.so" /d LONG_NAME="ext_filter_module for Apache"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
diff --git a/modules/filters/mod_filter.c b/modules/filters/mod_filter.c
index 778895b4..3ba13c95 100644
--- a/modules/filters/mod_filter.c
+++ b/modules/filters/mod_filter.c
@@ -137,7 +137,12 @@ static int filter_init(ap_filter_t *f)
harness_ctx *fctx = apr_pcalloc(f->r->pool, sizeof(harness_ctx));
for (p = filter->providers; p; p = p->next) {
- if (p->frec->filter_init_func) {
+ if (p->frec->filter_init_func == filter_init) {
+ ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, f->c,
+ "Chaining of FilterProviders not supported");
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+ else if (p->frec->filter_init_func) {
f->ctx = NULL;
if ((err = p->frec->filter_init_func(f)) != OK) {
ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, f->c,
@@ -533,10 +538,6 @@ static const char *filter_provider(cmd_parms *cmd, void *CFG, const char *args)
/* if provider has been registered, we can look it up */
provider_frec = ap_get_output_filter_handle(pname);
if (!provider_frec) {
- provider_frec = apr_hash_get(cfg->live_filters, pname,
- APR_HASH_KEY_STRING);
- }
- if (!provider_frec) {
return apr_psprintf(cmd->pool, "Unknown filter provider %s", pname);
}
diff --git a/modules/filters/mod_filter.dsp b/modules/filters/mod_filter.dsp
index 1729238a..ee4d484f 100644
--- a/modules/filters/mod_filter.dsp
+++ b/modules/filters/mod_filter.dsp
@@ -47,7 +47,7 @@ RSC=rc.exe
# ADD BASE MTL /nologo /D "NDEBUG" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /fo"Release/mod_deflate.res" /i "../../include" /i "../../srclib/apr/include" /d "NDEBUG" /d BIN_NAME="mod_deflate.so" /d LONG_NAME="deflate_module for Apache"
+# ADD RSC /l 0x409 /fo"Release/mod_filter.res" /i "../../include" /i "../../srclib/apr/include" /d "NDEBUG" /d BIN_NAME="mod_filter.so" /d LONG_NAME="filter_module for Apache"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
@@ -79,7 +79,7 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# ADD BASE MTL /nologo /D "_DEBUG" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /fo"Debug/mod_deflate.res" /i "../../include" /i "../../srclib/apr/include" /d "_DEBUG" /d BIN_NAME="mod_deflate.so" /d LONG_NAME="deflate_module for Apache"
+# ADD RSC /l 0x409 /fo"Debug/mod_filter.res" /i "../../include" /i "../../srclib/apr/include" /d "_DEBUG" /d BIN_NAME="mod_filter.so" /d LONG_NAME="filter_module for Apache"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
diff --git a/modules/filters/mod_include.c b/modules/filters/mod_include.c
index b89a459b..db8b5faa 100644
--- a/modules/filters/mod_include.c
+++ b/modules/filters/mod_include.c
@@ -80,7 +80,8 @@ typedef enum {
TOKEN_GE,
TOKEN_LE,
TOKEN_GT,
- TOKEN_LT
+ TOKEN_LT,
+ TOKEN_ACCESS
} token_type_t;
typedef struct {
@@ -114,6 +115,7 @@ typedef struct {
const char *default_time_fmt;
const char *undefined_echo;
xbithack_t xbithack;
+ const int accessenable;
} include_dir_config;
typedef struct {
@@ -190,6 +192,8 @@ struct ssi_internal_ctx {
const char *undefined_echo;
apr_size_t undefined_echo_len;
+ int accessenable; /* is using the access tests allowed? */
+
#ifdef DEBUG_INCLUDE
struct {
ap_filter_t *f;
@@ -941,7 +945,7 @@ static APR_INLINE int re_check(include_ctx_t *ctx, const char *string,
return rc;
}
-static int get_ptoken(apr_pool_t *pool, const char **parse, token_t *token)
+static int get_ptoken(include_ctx_t *ctx, const char **parse, token_t *token, token_t *previous)
{
const char *p;
apr_size_t shift;
@@ -990,6 +994,10 @@ static int get_ptoken(apr_pool_t *pool, const char **parse, token_t *token)
unmatched = '\'';
break;
case '/':
+ /* if last token was ACCESS, this token is STRING */
+ if (previous != NULL && TOKEN_ACCESS == previous->type) {
+ break;
+ }
TYPE_TOKEN(token, TOKEN_RE);
unmatched = '/';
break;
@@ -1023,6 +1031,13 @@ static int get_ptoken(apr_pool_t *pool, const char **parse, token_t *token)
}
TYPE_TOKEN(token, TOKEN_LT);
return 0;
+ case '-':
+ if (**parse == 'A' && (ctx->intern->accessenable)) {
+ TYPE_TOKEN(token, TOKEN_ACCESS);
+ ++*parse;
+ return 0;
+ }
+ break;
}
/* It's a string or regex token
@@ -1079,11 +1094,11 @@ static int get_ptoken(apr_pool_t *pool, const char **parse, token_t *token)
}
if (unmatched) {
- token->value = apr_pstrdup(pool, "");
+ token->value = apr_pstrdup(ctx->dpool, "");
}
else {
apr_size_t len = p - token->value - shift;
- char *c = apr_palloc(pool, len + 1);
+ char *c = apr_palloc(ctx->dpool, len + 1);
p = token->value;
token->value = c;
@@ -1111,6 +1126,7 @@ static int parse_expr(include_ctx_t *ctx, const char *expr, int *was_error)
{
parse_node_t *new, *root = NULL, *current = NULL;
request_rec *r = ctx->intern->r;
+ request_rec *rr = NULL;
const char *error = "Invalid expression \"%s\" in file %s";
const char *parse = expr;
int was_unmatched = 0;
@@ -1130,7 +1146,8 @@ static int parse_expr(include_ctx_t *ctx, const char *expr, int *was_error)
*/
CREATE_NODE(ctx, new);
- was_unmatched = get_ptoken(ctx->dpool, &parse, &new->token);
+ was_unmatched = get_ptoken(ctx, &parse, &new->token,
+ (current != NULL ? &current->token : NULL));
if (!parse) {
break;
}
@@ -1142,6 +1159,7 @@ static int parse_expr(include_ctx_t *ctx, const char *expr, int *was_error)
switch (new->token.type) {
case TOKEN_STRING:
case TOKEN_NOT:
+ case TOKEN_ACCESS:
case TOKEN_LBRACE:
root = current = new;
continue;
@@ -1276,6 +1294,7 @@ static int parse_expr(include_ctx_t *ctx, const char *expr, int *was_error)
break;
case TOKEN_NOT:
+ case TOKEN_ACCESS:
case TOKEN_LBRACE:
switch (current->token.type) {
case TOKEN_STRING:
@@ -1462,6 +1481,34 @@ static int parse_expr(include_ctx_t *ctx, const char *expr, int *was_error)
}
break;
+ case TOKEN_ACCESS:
+ if (current->left || !current->right ||
+ (current->right->token.type != TOKEN_STRING &&
+ current->right->token.type != TOKEN_RE)) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+ "Invalid expression \"%s\" in file %s: Token '-A' must be followed by a URI string.",
+ expr, r->filename);
+ *was_error = 1;
+ return 0;
+ }
+ current->right->token.value =
+ ap_ssi_parse_string(ctx, current->right->token.value, NULL, 0,
+ SSI_EXPAND_DROP_NAME);
+ rr = ap_sub_req_lookup_uri(current->right->token.value, r, NULL);
+ /* 400 and higher are considered access denied */
+ if (rr->status < HTTP_BAD_REQUEST) {
+ current->value = 1;
+ }
+ else {
+ current->value = 0;
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rr->status, r,
+ "mod_include: The tested "
+ "subrequest -A \"%s\" returned an error code.",
+ current->right->token.value);
+ }
+ ap_destroy_sub_req(rr);
+ break;
+
case TOKEN_RE:
if (!error) {
error = "No operator before regex in expr \"%s\" in file %s";
@@ -3225,9 +3272,8 @@ static apr_status_t send_parsed_content(ap_filter_t *f, apr_bucket_brigade *bb)
/* check if we mismatched earlier and have to release some chars */
if (release && (ctx->flags & SSI_FLAG_PRINTING)) {
- char *to_release = apr_palloc(ctx->pool, release);
+ char *to_release = apr_pmemdup(ctx->pool, intern->start_seq, release);
- memcpy(to_release, intern->start_seq, release);
newb = apr_bucket_pool_create(to_release, release, ctx->pool,
f->c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(pass_bb, newb);
@@ -3414,9 +3460,9 @@ static apr_status_t send_parsed_content(ap_filter_t *f, apr_bucket_brigade *bb)
if (intern->seen_eos) {
if (PARSE_HEAD == intern->state) {
if (ctx->flags & SSI_FLAG_PRINTING) {
- char *to_release = apr_palloc(ctx->pool, intern->parse_pos);
+ char *to_release = apr_pmemdup(ctx->pool, intern->start_seq,
+ intern->parse_pos);
- memcpy(to_release, intern->start_seq, intern->parse_pos);
APR_BRIGADE_INSERT_TAIL(pass_bb,
apr_bucket_pool_create(to_release,
intern->parse_pos, ctx->pool,
@@ -3527,6 +3573,7 @@ static apr_status_t includes_filter(ap_filter_t *f, apr_bucket_brigade *b)
if (ap_allow_options(r) & OPT_INCNOEXEC) {
ctx->flags |= SSI_FLAG_NO_EXEC;
}
+ intern->accessenable = conf->accessenable;
ctx->if_nesting_level = 0;
intern->re = NULL;
@@ -3809,6 +3856,9 @@ static const command_rec includes_cmds[] =
"SSI End String Tag"),
AP_INIT_TAKE1("SSIUndefinedEcho", set_undefined_echo, NULL, OR_ALL,
"String to be displayed if an echoed variable is undefined"),
+ AP_INIT_FLAG("SSIAccessEnable", ap_set_flag_slot,
+ (void *)APR_OFFSETOF(include_dir_config, accessenable),
+ OR_LIMIT, "Whether testing access is enabled. Limited to 'on' or 'off'"),
{NULL}
};
diff --git a/modules/filters/mod_substitute.c b/modules/filters/mod_substitute.c
new file mode 100644
index 00000000..592d1404
--- /dev/null
+++ b/modules/filters/mod_substitute.c
@@ -0,0 +1,584 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * mod_substitute.c: Perform content rewriting on the fly
+ */
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_core.h"
+#include "apr_general.h"
+#include "apr_strings.h"
+#include "apr_strmatch.h"
+#include "apr_lib.h"
+#include "util_filter.h"
+#include "apr_buckets.h"
+#include "http_request.h"
+#define APR_WANT_STRFUNC
+#include "apr_want.h"
+
+static const char substitute_filter_name[] = "SUBSTITUTE";
+
+module AP_MODULE_DECLARE_DATA substitute_module;
+
+typedef struct subst_pattern_t {
+ const apr_strmatch_pattern *pattern;
+ const ap_regex_t *regexp;
+ const char *replacement;
+ apr_size_t replen;
+ apr_size_t patlen;
+ int flatten;
+} subst_pattern_t;
+
+typedef struct {
+ apr_array_header_t *patterns;
+} subst_dir_conf;
+
+typedef struct {
+ apr_bucket_brigade *linebb;
+ apr_bucket_brigade *linesbb;
+ apr_bucket_brigade *passbb;
+ apr_bucket_brigade *pattbb;
+ apr_pool_t *tpool;
+} substitute_module_ctx;
+
+static void *create_substitute_dcfg(apr_pool_t *p, char *d)
+{
+ subst_dir_conf *dcfg =
+ (subst_dir_conf *) apr_pcalloc(p, sizeof(subst_dir_conf));
+
+ dcfg->patterns = apr_array_make(p, 10, sizeof(subst_pattern_t));
+ return dcfg;
+}
+
+static void *merge_substitute_dcfg(apr_pool_t *p, void *basev, void *overv)
+{
+ subst_dir_conf *a =
+ (subst_dir_conf *) apr_pcalloc(p, sizeof(subst_dir_conf));
+ subst_dir_conf *base = (subst_dir_conf *) basev;
+ subst_dir_conf *over = (subst_dir_conf *) overv;
+
+ a->patterns = apr_array_append(p, over->patterns,
+ base->patterns);
+ return a;
+}
+
+#define AP_MAX_BUCKETS 1000
+
+#define SEDSCAT(s1, s2, pool, buff, blen, repl) do { \
+ if (!s1) { \
+ s1 = apr_pstrmemdup(pool, buff, blen); \
+ } \
+ else { \
+ s2 = apr_pstrmemdup(pool, buff, blen); \
+ s1 = apr_pstrcat(pool, s1, s2, NULL); \
+ } \
+ s1 = apr_pstrcat(pool, s1, repl, NULL); \
+} while (0)
+
+#define SEDRMPATBCKT(b, offset, tmp_b, patlen) do { \
+ apr_bucket_split(b, offset); \
+ tmp_b = APR_BUCKET_NEXT(b); \
+ apr_bucket_split(tmp_b, patlen); \
+ b = APR_BUCKET_NEXT(tmp_b); \
+ apr_bucket_delete(tmp_b); \
+} while (0)
+
+static void do_pattmatch(ap_filter_t *f, apr_bucket *inb,
+ apr_bucket_brigade *mybb,
+ apr_pool_t *tmp_pool)
+{
+ int i;
+ ap_regmatch_t regm[AP_MAX_REG_MATCH];
+ apr_size_t bytes;
+ apr_size_t len;
+ apr_size_t fbytes;
+ const char *buff;
+ const char *repl;
+ char *scratch;
+ char *p;
+ char *s1;
+ char *s2;
+ apr_bucket *b;
+ apr_bucket *tmp_b;
+ apr_pool_t *tpool;
+
+ subst_dir_conf *cfg =
+ (subst_dir_conf *) ap_get_module_config(f->r->per_dir_config,
+ &substitute_module);
+ subst_pattern_t *script;
+
+ APR_BRIGADE_INSERT_TAIL(mybb, inb);
+
+ script = (subst_pattern_t *) cfg->patterns->elts;
+ apr_pool_create(&tpool, tmp_pool);
+ scratch = NULL;
+ fbytes = 0;
+ for (i = 0; i < cfg->patterns->nelts; i++) {
+ for (b = APR_BRIGADE_FIRST(mybb);
+ b != APR_BRIGADE_SENTINEL(mybb);
+ b = APR_BUCKET_NEXT(b)) {
+ if (APR_BUCKET_IS_METADATA(b)) {
+ /*
+ * we should NEVER see this, because we should never
+ * be passed any, but "handle" it just in case.
+ */
+ continue;
+ }
+ if (apr_bucket_read(b, &buff, &bytes, APR_BLOCK_READ)
+ == APR_SUCCESS) {
+ s1 = NULL;
+ if (script->pattern) {
+ while ((repl = apr_strmatch(script->pattern, buff, bytes)))
+ {
+ /* get offset into buff for pattern */
+ len = (apr_size_t) (repl - buff);
+ if (script->flatten) {
+ /*
+ * We are flattening the buckets here, meaning
+ * that we don't do the fast bucket splits.
+ * Instead we copy over what the buckets would
+ * contain and use them. This is slow, since we
+ * are constanting allocing space and copying
+ * strings.
+ */
+ SEDSCAT(s1, s2, tmp_pool, buff, len,
+ script->replacement);
+ }
+ else {
+ /*
+ * We now split off the stuff before the regex
+ * as its own bucket, then isolate the pattern
+ * and delete it.
+ */
+ SEDRMPATBCKT(b, len, tmp_b, script->patlen);
+ /*
+ * Finally, we create a bucket that contains the
+ * replacement...
+ */
+ tmp_b = apr_bucket_transient_create(script->replacement,
+ script->replen,
+ f->r->connection->bucket_alloc);
+ /* ... and insert it */
+ APR_BUCKET_INSERT_BEFORE(b, tmp_b);
+ }
+ /* now we need to adjust buff for all these changes */
+ len += script->patlen;
+ bytes -= len;
+ buff += len;
+ }
+ if (script->flatten && s1) {
+ /*
+ * we've finished looking at the bucket, so remove the
+ * old one and add in our new one
+ */
+ s2 = apr_pstrmemdup(tmp_pool, buff, bytes);
+ s1 = apr_pstrcat(tmp_pool, s1, s2, NULL);
+ tmp_b = apr_bucket_transient_create(s1, strlen(s1),
+ f->r->connection->bucket_alloc);
+ APR_BUCKET_INSERT_BEFORE(b, tmp_b);
+ tmp_b = APR_BUCKET_NEXT(b);
+ apr_bucket_delete(b);
+ b = tmp_b;
+ }
+
+ }
+ else if (script->regexp) {
+ /*
+ * we need a null terminated string here :(. To hopefully
+ * save time and memory, we don't alloc for each run
+ * through, but only if we need to have a larger chunk
+ * to save the string to. So we keep track of how much
+ * we've allocated and only re-alloc when we need it.
+ * NOTE: this screams for a macro.
+ */
+ if (!scratch || (bytes > (fbytes + 1))) {
+ fbytes = bytes + 1;
+ scratch = apr_palloc(tpool, fbytes);
+ }
+ /* reset pointer to the scratch space */
+ p = scratch;
+ memcpy(p, buff, bytes);
+ p[bytes] = '\0';
+ while (!ap_regexec(script->regexp, p,
+ AP_MAX_REG_MATCH, regm, 0)) {
+ /* first, grab the replacement string */
+ repl = ap_pregsub(tmp_pool, script->replacement, p,
+ AP_MAX_REG_MATCH, regm);
+ if (script->flatten) {
+ SEDSCAT(s1, s2, tmp_pool, p, regm[0].rm_so, repl);
+ }
+ else {
+ len = (apr_size_t) (regm[0].rm_eo - regm[0].rm_so);
+ SEDRMPATBCKT(b, regm[0].rm_so, tmp_b, len);
+ tmp_b = apr_bucket_transient_create(repl,
+ strlen(repl),
+ f->r->connection->bucket_alloc);
+ APR_BUCKET_INSERT_BEFORE(b, tmp_b);
+ }
+ /*
+ * reset to past what we just did. buff now maps to b
+ * again
+ */
+ p += regm[0].rm_eo;
+ }
+ if (script->flatten && s1) {
+ s1 = apr_pstrcat(tmp_pool, s1, p, NULL);
+ tmp_b = apr_bucket_transient_create(s1, strlen(s1),
+ f->r->connection->bucket_alloc);
+ APR_BUCKET_INSERT_BEFORE(b, tmp_b);
+ tmp_b = APR_BUCKET_NEXT(b);
+ apr_bucket_delete(b);
+ b = tmp_b;
+ }
+
+ }
+ else {
+ /* huh? */
+ continue;
+ }
+ }
+ }
+ script++;
+ }
+
+ apr_pool_destroy(tpool);
+
+ return;
+}
+
+static apr_status_t substitute_filter(ap_filter_t *f, apr_bucket_brigade *bb)
+{
+ apr_size_t bytes;
+ apr_size_t len;
+ apr_size_t fbytes;
+ const char *buff;
+ const char *nl = NULL;
+ char *bflat;
+ apr_bucket *b;
+ apr_bucket *tmp_b;
+ apr_bucket_brigade *tmp_bb = NULL;
+ apr_status_t rv;
+
+ substitute_module_ctx *ctx = f->ctx;
+
+ /*
+ * First time around? Create the saved bb that we used for each pass
+ * through. Note that we can also get here when we explicitly clear ctx,
+ * for error handling
+ */
+ if (!ctx) {
+ f->ctx = ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
+ /*
+ * Create all the temporary brigades we need and reuse them to avoid
+ * creating them over and over again from r->pool which would cost a
+ * lot of memory in some cases.
+ */
+ ctx->linebb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ ctx->linesbb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ ctx->pattbb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ /*
+ * Everything to be passed to the next filter goes in
+ * here, our pass brigade.
+ */
+ ctx->passbb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ /* Create our temporary pool only once */
+ apr_pool_create(&(ctx->tpool), f->r->pool);
+ apr_table_unset(f->r->headers_out, "Content-Length");
+ }
+
+ /*
+ * Shortcircuit processing
+ */
+ if (APR_BRIGADE_EMPTY(bb))
+ return APR_SUCCESS;
+
+ /*
+ * Here's the concept:
+ * Read in the data and look for newlines. Once we
+ * find a full "line", add it to our working brigade.
+ * If we've finished reading the brigade and we have
+ * any left over data (not a "full" line), store that
+ * for the next pass.
+ *
+ * Note: anything stored in ctx->linebb for sure does not have
+ * a newline char, so we don't concat that bb with the
+ * new bb, since we would spending time searching for the newline
+ * in data we know it doesn't exist. So instead, we simply scan
+ * our current bb and, if we see a newline, prepend ctx->linebb
+ * to the front of it. This makes the code much less straight-
+ * forward (otherwise we could APR_BRIGADE_CONCAT(ctx->linebb, bb)
+ * and just scan for newlines and not bother with needing to know
+ * when ctx->linebb needs to be reset) but also faster. We'll take
+ * the speed.
+ *
+ * Note: apr_brigade_split_line would be nice here, but we
+ * really can't use it since we need more control and we want
+ * to re-use already read bucket data.
+ *
+ * See mod_include if still confused :)
+ */
+
+ while ((b = APR_BRIGADE_FIRST(bb)) && (b != APR_BRIGADE_SENTINEL(bb))) {
+ if (APR_BUCKET_IS_EOS(b)) {
+ /*
+ * if we see the EOS, then we need to pass along everything we
+ * have. But if the ctx->linebb isn't empty, then we need to add
+ * that to the end of what we'll be passing.
+ */
+ if (!APR_BRIGADE_EMPTY(ctx->linebb)) {
+ rv = apr_brigade_pflatten(ctx->linebb, &bflat,
+ &fbytes, ctx->tpool);
+ tmp_b = apr_bucket_transient_create(bflat, fbytes,
+ f->r->connection->bucket_alloc);
+ do_pattmatch(f, tmp_b, ctx->pattbb, ctx->tpool);
+ APR_BRIGADE_CONCAT(ctx->passbb, ctx->pattbb);
+ }
+ apr_brigade_cleanup(ctx->linebb);
+ APR_BUCKET_REMOVE(b);
+ APR_BRIGADE_INSERT_TAIL(ctx->passbb, b);
+ }
+ /*
+ * No need to handle FLUSH buckets separately as we call
+ * ap_pass_brigade anyway at the end of the loop.
+ */
+ else if (APR_BUCKET_IS_METADATA(b)) {
+ APR_BUCKET_REMOVE(b);
+ APR_BRIGADE_INSERT_TAIL(ctx->passbb, b);
+ }
+ else {
+ /*
+ * We have actual "data" so read in as much as we can and start
+ * scanning and splitting from our read buffer
+ */
+ rv = apr_bucket_read(b, &buff, &bytes, APR_BLOCK_READ);
+ if (rv != APR_SUCCESS || bytes == 0) {
+ APR_BUCKET_REMOVE(b);
+ }
+ else {
+ int num = 0;
+ while (bytes > 0) {
+ nl = memchr(buff, APR_ASCII_LF, bytes);
+ if (nl) {
+ len = (apr_size_t) (nl - buff) + 1;
+ /* split *after* the newline */
+ apr_bucket_split(b, len);
+ /*
+ * We've likely read more data, so bypass rereading
+ * bucket data and continue scanning through this
+ * buffer
+ */
+ bytes -= len;
+ buff += len;
+ /*
+ * we need b to be updated for future potential
+ * splitting
+ */
+ tmp_b = APR_BUCKET_NEXT(b);
+ APR_BUCKET_REMOVE(b);
+ /*
+ * Hey, we found a newline! Don't forget the old
+ * stuff that needs to be added to the front. So we
+ * add the split bucket to the end, flatten the whole
+ * bb, morph the whole shebang into a bucket which is
+ * then added to the tail of the newline bb.
+ */
+ if (!APR_BRIGADE_EMPTY(ctx->linebb)) {
+ APR_BRIGADE_INSERT_TAIL(ctx->linebb, b);
+ rv = apr_brigade_pflatten(ctx->linebb, &bflat,
+ &fbytes, ctx->tpool);
+ b = apr_bucket_transient_create(bflat, fbytes,
+ f->r->connection->bucket_alloc);
+ apr_brigade_cleanup(ctx->linebb);
+ }
+ do_pattmatch(f, b, ctx->pattbb, ctx->tpool);
+ /*
+ * Count how many buckets we have in ctx->passbb
+ * so far. Yes, this is correct we count ctx->passbb
+ * and not ctx->pattbb as we do not reset num on every
+ * iteration.
+ */
+ for (b = APR_BRIGADE_FIRST(ctx->pattbb);
+ b != APR_BRIGADE_SENTINEL(ctx->pattbb);
+ b = APR_BUCKET_NEXT(b)) {
+ num++;
+ }
+ APR_BRIGADE_CONCAT(ctx->passbb, ctx->pattbb);
+ /*
+ * If the number of buckets in ctx->passbb reaches an
+ * "insane" level, we consume much memory for all the
+ * buckets as such. So lets flush them down the chain
+ * in this case and thus clear ctx->passbb. This frees
+ * the buckets memory for further processing.
+ * Usually this condition should not become true, but
+ * it is a safety measure for edge cases.
+ */
+ if (num > AP_MAX_BUCKETS) {
+ b = apr_bucket_flush_create(
+ f->r->connection->bucket_alloc);
+ APR_BRIGADE_INSERT_TAIL(ctx->passbb, b);
+ rv = ap_pass_brigade(f->next, ctx->passbb);
+ apr_brigade_cleanup(ctx->passbb);
+ num = 0;
+ apr_pool_clear(ctx->tpool);
+ if (rv != APR_SUCCESS)
+ return rv;
+ }
+ b = tmp_b;
+ }
+ else {
+ /*
+ * no newline in whatever is left of this buffer so
+ * tuck data away and get next bucket
+ */
+ APR_BUCKET_REMOVE(b);
+ APR_BRIGADE_INSERT_TAIL(ctx->linebb, b);
+ bytes = 0;
+ }
+ }
+ }
+ }
+ if (!APR_BRIGADE_EMPTY(ctx->passbb)) {
+ rv = ap_pass_brigade(f->next, ctx->passbb);
+ apr_brigade_cleanup(ctx->passbb);
+ if (rv != APR_SUCCESS) {
+ apr_pool_clear(ctx->tpool);
+ return rv;
+ }
+ }
+ apr_pool_clear(ctx->tpool);
+ }
+
+ /* Anything left we want to save/setaside for the next go-around */
+ if (!APR_BRIGADE_EMPTY(ctx->linebb)) {
+ /*
+ * Provide ap_save_brigade with an existing empty brigade
+ * (ctx->linesbb) to avoid creating a new one.
+ */
+ ap_save_brigade(f, &(ctx->linesbb), &(ctx->linebb), f->r->pool);
+ tmp_bb = ctx->linebb;
+ ctx->linebb = ctx->linesbb;
+ ctx->linesbb = tmp_bb;
+ }
+
+ return APR_SUCCESS;
+}
+
+static const char *set_pattern(cmd_parms *cmd, void *cfg, const char *line)
+{
+ char *from = NULL;
+ char *to = NULL;
+ char *flags = NULL;
+ char *ourline;
+ char delim;
+ subst_pattern_t *nscript;
+ int is_pattern = 0;
+ int ignore_case = 0;
+ int flatten = 0;
+ ap_regex_t *r = NULL;
+
+ if (apr_tolower(*line) != 's') {
+ return "Bad Substitute format, must be an s/// pattern";
+ }
+ ourline = apr_pstrdup(cmd->pool, line);
+ delim = *++ourline;
+ if (delim)
+ from = ++ourline;
+ if (from) {
+ while (*++ourline && *ourline != delim);
+ if (*ourline) {
+ *ourline = '\0';
+ to = ++ourline;
+ }
+ }
+ if (to) {
+ while (*++ourline && *ourline != delim);
+ if (*ourline) {
+ *ourline = '\0';
+ flags = ++ourline;
+ }
+ }
+
+ if (!delim || !from || !to) {
+ return "Bad Substitute format, must be a complete s/// pattern";
+ }
+
+ while (*flags) {
+ delim = apr_tolower(*flags); /* re-use */
+ if (delim == 'i')
+ ignore_case = 1;
+ else if (delim == 'n')
+ is_pattern = 1;
+ else if (delim == 'f')
+ flatten = 1;
+ else
+ return "Bad Substitute flag, only s///[inf] are supported";
+ flags++;
+ }
+
+ /* first see if we can compile the regex */
+ if (!is_pattern) {
+ r = ap_pregcomp(cmd->pool, from, AP_REG_EXTENDED |
+ (ignore_case ? AP_REG_ICASE : 0));
+ if (!r)
+ return "Substitute could not compile regex";
+ }
+ nscript = apr_array_push(((subst_dir_conf *) cfg)->patterns);
+ /* init the new entries */
+ nscript->pattern = NULL;
+ nscript->regexp = NULL;
+ nscript->replacement = NULL;
+ nscript->patlen = 0;
+
+ if (is_pattern) {
+ nscript->patlen = strlen(from);
+ nscript->pattern = apr_strmatch_precompile(cmd->pool, from,
+ !ignore_case);
+ }
+ else {
+ nscript->regexp = r;
+ }
+
+ nscript->replacement = to;
+ nscript->replen = strlen(to);
+ nscript->flatten = flatten;
+
+ return NULL;
+}
+
+#define PROTO_FLAGS AP_FILTER_PROTO_CHANGE|AP_FILTER_PROTO_CHANGE_LENGTH
+static void register_hooks(apr_pool_t *pool)
+{
+ ap_register_output_filter(substitute_filter_name, substitute_filter,
+ NULL, AP_FTYPE_RESOURCE);
+}
+
+static const command_rec substitute_cmds[] = {
+ AP_INIT_TAKE1("Substitute", set_pattern, NULL, OR_ALL,
+ "Pattern to filter the response content (s/foo/bar/[inf])"),
+ {NULL}
+};
+
+module AP_MODULE_DECLARE_DATA substitute_module = {
+ STANDARD20_MODULE_STUFF,
+ create_substitute_dcfg, /* dir config creater */
+ merge_substitute_dcfg, /* dir merger --- default is to override */
+ NULL, /* server config */
+ NULL, /* merge server config */
+ substitute_cmds, /* command table */
+ register_hooks /* register hooks */
+};
diff --git a/modules/filters/mod_substitute.dsp b/modules/filters/mod_substitute.dsp
new file mode 100644
index 00000000..def4157e
--- /dev/null
+++ b/modules/filters/mod_substitute.dsp
@@ -0,0 +1,111 @@
+# Microsoft Developer Studio Project File - Name="mod_substitute" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mod_substitute - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mod_substitute.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For substitute:
+!MESSAGE
+!MESSAGE NMAKE /f "mod_substitute.mak" CFG="mod_substitute - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mod_substitute - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mod_substitute - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mod_substitute - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Release\mod_substitute_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /fo"Release/mod_substitute.res" /i "../../include" /i "../../srclib/apr/include" /d "NDEBUG" /d BIN_NAME="mod_substitute.so" /d LONG_NAME="substitute_module for Apache"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /out:".\Release\mod_substitute.so" /base:@..\..\os\win32\BaseAddr.ref,mod_substitute.so
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Release\mod_substitute.so" /base:@..\..\os\win32\BaseAddr.ref,mod_substitute.so /opt:ref
+# Begin Special Build Tool
+TargetPath=.\Release\mod_substitute.so
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "mod_substitute - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../../include" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /Fd"Debug\mod_substitute_src" /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /fo"Debug/mod_substitute.res" /i "../../include" /i "../../srclib/apr/include" /d "_DEBUG" /d BIN_NAME="mod_substitute.so" /d LONG_NAME="substitute_module for Apache"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_substitute.so" /base:@..\..\os\win32\BaseAddr.ref,mod_substitute.so
+# ADD LINK32 kernel32.lib /nologo /subsystem:windows /dll /incremental:no /debug /out:".\Debug\mod_substitute.so" /base:@..\..\os\win32\BaseAddr.ref,mod_substitute.so
+# Begin Special Build Tool
+TargetPath=.\Debug\mod_substitute.so
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "mod_substitute - Win32 Release"
+# Name "mod_substitute - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\mod_substitute.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\build\win32\httpd.rc
+# End Source File
+# End Target
+# End Project
diff --git a/modules/generators/mod_autoindex.c b/modules/generators/mod_autoindex.c
index 8d514021..3e8153c1 100644
--- a/modules/generators/mod_autoindex.c
+++ b/modules/generators/mod_autoindex.c
@@ -160,9 +160,18 @@ static void emit_preamble(request_rec *r, int xhtml, const char *title)
d = (autoindex_config_rec *) ap_get_module_config(r->per_dir_config,
&autoindex_module);
- ap_rvputs(r, xhtml ? DOCTYPE_XHTML_1_0T : DOCTYPE_HTML_3_2,
- "<html>\n <head>\n <title>Index of ", title,
- "</title>\n", NULL);
+ if (xhtml) {
+ ap_rvputs(r, DOCTYPE_XHTML_1_0T,
+ "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
+ " <head>\n <title>Index of ", title,
+ "</title>\n", NULL);
+ } else {
+ ap_rvputs(r, DOCTYPE_HTML_3_2,
+ "<html>\n <head>\n"
+ " <title>Index of ", title,
+ "</title>\n", NULL);
+ }
+
if (d->style_sheet != NULL) {
ap_rvputs(r, " <link rel=\"stylesheet\" href=\"", d->style_sheet,
"\" type=\"text/css\"", xhtml ? " />\n" : ">\n", NULL);
diff --git a/modules/generators/mod_info.c b/modules/generators/mod_info.c
index adc34150..eb4e0c63 100644
--- a/modules/generators/mod_info.c
+++ b/modules/generators/mod_info.c
@@ -607,7 +607,7 @@ static int display_info(request_rec * r)
if (r->method_number != M_GET)
return DECLINED;
- ap_set_content_type(r, "text/html");
+ ap_set_content_type(r, "text/html; charset=ISO-8859-1");
ap_rputs(DOCTYPE_XHTML_1_0T
"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
diff --git a/modules/generators/mod_status.c b/modules/generators/mod_status.c
index b2a6ea28..bcf9b10c 100644
--- a/modules/generators/mod_status.c
+++ b/modules/generators/mod_status.c
@@ -71,6 +71,7 @@
#endif
#define APR_WANT_STRFUNC
#include "apr_want.h"
+#include "apr_strings.h"
#ifdef NEXT
#if (NX_CURRENT_COMPILER_RELEASE == 410)
@@ -128,10 +129,24 @@ static const char *set_extended_status(cmd_parms *cmd, void *dummy, int arg)
return NULL;
}
+static const char *set_reqtail(cmd_parms *cmd, void *dummy, int arg)
+{
+ const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+ if (err != NULL) {
+ return err;
+ }
+ ap_mod_status_reqtail = arg;
+ return NULL;
+}
+
+
static const command_rec status_module_cmds[] =
{
AP_INIT_FLAG("ExtendedStatus", set_extended_status, NULL, RSRC_CONF,
"\"On\" to enable extended status information, \"Off\" to disable"),
+ AP_INIT_FLAG("SeeRequestTail", set_reqtail, NULL, RSRC_CONF,
+ "For verbose requests, \"On\" to see the last 63 chars of the request, "
+ "\"Off\" (default) to see the first 63 in extended status display"),
{NULL}
};
@@ -282,19 +297,18 @@ static int status_handler(request_rec *r)
if ((loc = ap_strstr_c(r->args,
status_options[i].form_data_str)) != NULL) {
switch (status_options[i].id) {
- case STAT_OPT_REFRESH:
- if (*(loc + strlen(status_options[i].form_data_str)) == '='
- && atol(loc + strlen(status_options[i].form_data_str)
- + 1) > 0)
- apr_table_set(r->headers_out,
- status_options[i].hdr_out_str,
- loc +
- strlen(status_options[i].hdr_out_str) +
- 1);
- else
- apr_table_set(r->headers_out,
- status_options[i].hdr_out_str, "1");
+ case STAT_OPT_REFRESH: {
+ apr_size_t len = strlen(status_options[i].form_data_str);
+ long t = 0;
+
+ if (*(loc + len ) == '=') {
+ t = atol(loc + len + 1);
+ }
+ apr_table_set(r->headers_out,
+ status_options[i].hdr_out_str,
+ apr_ltoa(r->pool, t < 1 ? 10 : t));
break;
+ }
case STAT_OPT_NOTABLE:
no_table_report = 1;
break;
diff --git a/modules/http/byterange_filter.c b/modules/http/byterange_filter.c
index 073e27e0..a25d1e59 100644
--- a/modules/http/byterange_filter.c
+++ b/modules/http/byterange_filter.c
@@ -193,12 +193,21 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
"byteranges; boundary=",
ctx->boundary, NULL));
- ctx->bound_head = apr_pstrcat(r->pool,
- CRLF "--", ctx->boundary,
- CRLF "Content-type: ",
- orig_ct,
- CRLF "Content-range: bytes ",
- NULL);
+ if (strcasecmp(orig_ct, NO_CONTENT_TYPE)) {
+ ctx->bound_head = apr_pstrcat(r->pool,
+ CRLF "--", ctx->boundary,
+ CRLF "Content-type: ",
+ orig_ct,
+ CRLF "Content-range: bytes ",
+ NULL);
+ }
+ else {
+ /* if we have no type for the content, do our best */
+ ctx->bound_head = apr_pstrcat(r->pool,
+ CRLF "--", ctx->boundary,
+ CRLF "Content-range: bytes ",
+ NULL);
+ }
ap_xlate_proto_to_ascii(ctx->bound_head, strlen(ctx->bound_head));
}
diff --git a/modules/http/chunk_filter.c b/modules/http/chunk_filter.c
index 2c94b3ca..b680185b 100644
--- a/modules/http/chunk_filter.c
+++ b/modules/http/chunk_filter.c
@@ -85,7 +85,9 @@ apr_status_t ap_http_chunk_filter(ap_filter_t *f, apr_bucket_brigade *b)
}
if (APR_BUCKET_IS_FLUSH(e)) {
flush = e;
- more = apr_brigade_split(b, APR_BUCKET_NEXT(e));
+ if (e != APR_BRIGADE_LAST(b)) {
+ more = apr_brigade_split(b, APR_BUCKET_NEXT(e));
+ }
break;
}
else if (e->length == (apr_size_t)-1) {
diff --git a/modules/http/http_core.c b/modules/http/http_core.c
index b52b5477..be1e1138 100644
--- a/modules/http/http_core.c
+++ b/modules/http/http_core.c
@@ -42,6 +42,8 @@ AP_DECLARE_DATA ap_filter_rec_t *ap_chunk_filter_handle;
AP_DECLARE_DATA ap_filter_rec_t *ap_http_outerror_filter_handle;
AP_DECLARE_DATA ap_filter_rec_t *ap_byterange_filter_handle;
+static int ap_process_http_connection(conn_rec *c);
+
static const char *set_keep_alive_timeout(cmd_parms *cmd, void *dummy,
const char *arg)
{
@@ -124,6 +126,10 @@ static int ap_process_http_async_connection(conn_rec *c)
request_rec *r;
conn_state_t *cs = c->cs;
+ if (c->clogging_input_filters) {
+ return ap_process_http_connection(c);
+ }
+
AP_DEBUG_ASSERT(cs->state == CONN_STATE_READ_REQUEST_LINE);
while (cs->state == CONN_STATE_READ_REQUEST_LINE) {
@@ -222,6 +228,15 @@ static int http_create_request(request_rec *r)
return OK;
}
+static int http_send_options(request_rec *r)
+{
+ if ((r->method_number == M_OPTIONS) && r->uri && (r->uri[0] == '*') &&
+ (r->uri[1] == '\0')) {
+ return DONE; /* Send HTTP pong, without Allow header */
+ }
+ return DECLINED;
+}
+
static void register_hooks(apr_pool_t *p)
{
/**
@@ -240,6 +255,7 @@ static void register_hooks(apr_pool_t *p)
}
ap_hook_map_to_storage(ap_send_http_trace,NULL,NULL,APR_HOOK_MIDDLE);
+ ap_hook_map_to_storage(http_send_options,NULL,NULL,APR_HOOK_MIDDLE);
ap_hook_http_scheme(http_scheme,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_default_port(http_port,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_create_request(http_create_request, NULL, NULL, APR_HOOK_REALLY_LAST);
diff --git a/modules/http/http_etag.c b/modules/http/http_etag.c
index c2dd8813..a7d3d9c0 100644
--- a/modules/http/http_etag.c
+++ b/modules/http/http_etag.c
@@ -28,16 +28,17 @@
#include "http_protocol.h" /* For index_of_response(). Grump. */
#include "http_request.h"
-/* Generate the human-readable hex representation of an unsigned long
- * (basically a faster version of 'sprintf("%lx")')
+/* Generate the human-readable hex representation of an apr_uint64_t
+ * (basically a faster version of 'sprintf("%llx")')
*/
#define HEX_DIGITS "0123456789abcdef"
-static char *etag_ulong_to_hex(char *next, unsigned long u)
+static char *etag_uint64_to_hex(char *next, apr_uint64_t u)
{
int printing = 0;
- int shift = sizeof(unsigned long) * 8 - 4;
+ int shift = sizeof(apr_uint64_t) * 8 - 4;
do {
- unsigned long next_digit = ((u >> shift) & (unsigned long)0xf);
+ unsigned short next_digit = (unsigned short)
+ ((u >> shift) & (apr_uint64_t)0xf);
if (next_digit) {
*next++ = HEX_DIGITS[next_digit];
printing = 1;
@@ -47,12 +48,12 @@ static char *etag_ulong_to_hex(char *next, unsigned long u)
}
shift -= 4;
} while (shift);
- *next++ = HEX_DIGITS[u & (unsigned long)0xf];
+ *next++ = HEX_DIGITS[u & (apr_uint64_t)0xf];
return next;
}
#define ETAG_WEAK "W/"
-#define CHARS_PER_UNSIGNED_LONG (sizeof(unsigned long) * 2)
+#define CHARS_PER_UINT64 (sizeof(apr_uint64_t) * 2)
/*
* Construct an entity tag (ETag) from resource information. If it's a real
* file, build in some of the file characteristics. If the modification time
@@ -115,7 +116,7 @@ AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak)
* FileETag keywords.
*/
etag = apr_palloc(r->pool, weak_len + sizeof("\"--\"") +
- 3 * CHARS_PER_UNSIGNED_LONG + 1);
+ 3 * CHARS_PER_UINT64 + 1);
next = etag;
if (weak) {
while (*weak) {
@@ -125,21 +126,21 @@ AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak)
*next++ = '"';
bits_added = 0;
if (etag_bits & ETAG_INODE) {
- next = etag_ulong_to_hex(next, (unsigned long)r->finfo.inode);
+ next = etag_uint64_to_hex(next, r->finfo.inode);
bits_added |= ETAG_INODE;
}
if (etag_bits & ETAG_SIZE) {
if (bits_added != 0) {
*next++ = '-';
}
- next = etag_ulong_to_hex(next, (unsigned long)r->finfo.size);
+ next = etag_uint64_to_hex(next, r->finfo.size);
bits_added |= ETAG_SIZE;
}
if (etag_bits & ETAG_MTIME) {
if (bits_added != 0) {
*next++ = '-';
}
- next = etag_ulong_to_hex(next, (unsigned long)r->mtime);
+ next = etag_uint64_to_hex(next, r->mtime);
}
*next++ = '"';
*next = '\0';
@@ -149,7 +150,7 @@ AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak)
* Not a file document, so just use the mtime: [W/]"mtime"
*/
etag = apr_palloc(r->pool, weak_len + sizeof("\"\"") +
- CHARS_PER_UNSIGNED_LONG + 1);
+ CHARS_PER_UINT64 + 1);
next = etag;
if (weak) {
while (*weak) {
@@ -157,7 +158,7 @@ AP_DECLARE(char *) ap_make_etag(request_rec *r, int force_weak)
}
}
*next++ = '"';
- next = etag_ulong_to_hex(next, (unsigned long)r->mtime);
+ next = etag_uint64_to_hex(next, r->mtime);
*next++ = '"';
*next = '\0';
}
diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c
index 185f50f8..7ad07ad6 100644
--- a/modules/http/http_filters.c
+++ b/modules/http/http_filters.c
@@ -55,6 +55,8 @@
#include <unistd.h>
#endif
+#define INVALID_CHAR -2
+
static long get_chunk_size(char *);
typedef struct http_filter_ctx {
@@ -64,11 +66,145 @@ typedef struct http_filter_ctx {
enum {
BODY_NONE,
BODY_LENGTH,
- BODY_CHUNK
+ BODY_CHUNK,
+ BODY_CHUNK_PART
} state;
int eos_sent;
+ char chunk_ln[32];
+ char *pos;
+ apr_off_t linesize;
+ apr_bucket_brigade *bb;
} http_ctx_t;
+static apr_status_t bail_out_on_error(http_ctx_t *ctx,
+ ap_filter_t *f,
+ int http_error)
+{
+ apr_bucket *e;
+ apr_bucket_brigade *bb = ctx->bb;
+
+ apr_brigade_cleanup(bb);
+ e = ap_bucket_error_create(http_error,
+ NULL, f->r->pool,
+ f->c->bucket_alloc);
+ APR_BRIGADE_INSERT_TAIL(bb, e);
+ e = apr_bucket_eos_create(f->c->bucket_alloc);
+ APR_BRIGADE_INSERT_TAIL(bb, e);
+ ctx->eos_sent = 1;
+ return ap_pass_brigade(f->r->output_filters, bb);
+}
+
+static apr_status_t get_remaining_chunk_line(http_ctx_t *ctx,
+ apr_bucket_brigade *b,
+ int linelimit)
+{
+ apr_status_t rv;
+ apr_off_t brigade_length;
+ apr_bucket *e;
+ const char *lineend;
+ apr_size_t len;
+
+ /*
+ * As the brigade b should have been requested in mode AP_MODE_GETLINE
+ * all buckets in this brigade are already some type of memory
+ * buckets (due to the needed scanning for LF in mode AP_MODE_GETLINE)
+ * or META buckets.
+ */
+ rv = apr_brigade_length(b, 0, &brigade_length);
+ if (rv != APR_SUCCESS) {
+ return rv;
+ }
+ /* Sanity check. Should never happen. See above. */
+ if (brigade_length == -1) {
+ return APR_EGENERAL;
+ }
+ if (!brigade_length) {
+ return APR_EAGAIN;
+ }
+ ctx->linesize += brigade_length;
+ if (ctx->linesize > linelimit) {
+ return APR_ENOSPC;
+ }
+ /*
+ * As all buckets are already some type of memory buckets or META buckets
+ * (see above), we only need to check the last byte in the last data bucket.
+ */
+ for (e = APR_BRIGADE_LAST(b);
+ e != APR_BRIGADE_SENTINEL(b);
+ e = APR_BUCKET_PREV(e)) {
+
+ if (APR_BUCKET_IS_METADATA(e)) {
+ continue;
+ }
+ rv = apr_bucket_read(e, &lineend, &len, APR_BLOCK_READ);
+ if (rv != APR_SUCCESS) {
+ return rv;
+ }
+ if (len > 0) {
+ break; /* we got the data we want */
+ }
+ /* If we got a zero-length data bucket, we try the next one */
+ }
+ /* We had no data in this brigade */
+ if (!len || e == APR_BRIGADE_SENTINEL(b)) {
+ return APR_EAGAIN;
+ }
+ if (lineend[len - 1] != APR_ASCII_LF) {
+ return APR_EAGAIN;
+ }
+ /* Line is complete. So reset ctx->linesize for next round. */
+ ctx->linesize = 0;
+ return APR_SUCCESS;
+}
+
+static apr_status_t get_chunk_line(http_ctx_t *ctx, apr_bucket_brigade *b,
+ int linelimit)
+{
+ apr_size_t len;
+ int tmp_len;
+ apr_status_t rv;
+
+ tmp_len = sizeof(ctx->chunk_ln) - (ctx->pos - ctx->chunk_ln) - 1;
+ /* Saveguard ourselves against underflows */
+ if (tmp_len < 0) {
+ len = 0;
+ }
+ else {
+ len = (apr_size_t) tmp_len;
+ }
+ /*
+ * Check if there is space left in ctx->chunk_ln. If not, then either
+ * the chunk size is insane or we have chunk-extensions. Ignore both
+ * by discarding the remaining part of the line via
+ * get_remaining_chunk_line. Only bail out if the line is too long.
+ */
+ if (len > 0) {
+ rv = apr_brigade_flatten(b, ctx->pos, &len);
+ if (rv != APR_SUCCESS) {
+ return rv;
+ }
+ ctx->pos += len;
+ ctx->linesize += len;
+ *(ctx->pos) = '\0';
+ /*
+ * Check if we really got a full line. If yes the
+ * last char in the just read buffer must be LF.
+ * If not advance the buffer and return APR_EAGAIN.
+ * We do not start processing until we have the
+ * full line.
+ */
+ if (ctx->pos[-1] != APR_ASCII_LF) {
+ /* Check if the remaining data in the brigade has the LF */
+ return get_remaining_chunk_line(ctx, b, linelimit);
+ }
+ /* Line is complete. So reset ctx->pos for next round. */
+ ctx->pos = ctx->chunk_ln;
+ return APR_SUCCESS;
+ }
+ return get_remaining_chunk_line(ctx, b, linelimit);
+}
+
+
/* This is the HTTP_INPUT filter for HTTP requests and responses from
* proxied servers (mod_proxy). It handles chunked and content-length
* bodies. This can only be inserted/used after the headers
@@ -82,6 +218,8 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
http_ctx_t *ctx = f->ctx;
apr_status_t rv;
apr_off_t totalread;
+ int http_error = HTTP_REQUEST_ENTITY_TOO_LARGE;
+ apr_bucket_brigade *bb;
/* just get out of the way of things we don't want. */
if (mode != AP_MODE_READBYTES && mode != AP_MODE_GETLINE) {
@@ -90,11 +228,11 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
if (!ctx) {
const char *tenc, *lenp;
- f->ctx = ctx = apr_palloc(f->r->pool, sizeof(*ctx));
+ f->ctx = ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
ctx->state = BODY_NONE;
- ctx->remaining = 0;
- ctx->limit_used = 0;
- ctx->eos_sent = 0;
+ ctx->pos = ctx->chunk_ln;
+ ctx->bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ bb = ctx->bb;
/* LimitRequestBody does not apply to proxied responses.
* Consider implementing this check in its own filter.
@@ -115,8 +253,22 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
if (!strcasecmp(tenc, "chunked")) {
ctx->state = BODY_CHUNK;
}
+ /* test lenp, because it gives another case we can handle */
+ else if (!lenp) {
+ /* Something that isn't in HTTP, unless some future
+ * edition defines new transfer ecodings, is unsupported.
+ */
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
+ "Unknown Transfer-Encoding: %s", tenc);
+ return bail_out_on_error(ctx, f, HTTP_NOT_IMPLEMENTED);
+ }
+ else {
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, f->r,
+ "Unknown Transfer-Encoding: %s; using Content-Length", tenc);
+ tenc = NULL;
+ }
}
- else if (lenp) {
+ if (lenp && !tenc) {
char *endstr;
ctx->state = BODY_LENGTH;
@@ -127,39 +279,23 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
* and a negative number. */
if (apr_strtoff(&ctx->remaining, lenp, &endstr, 10)
|| endstr == lenp || *endstr || ctx->remaining < 0) {
- apr_bucket_brigade *bb;
ctx->remaining = 0;
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
"Invalid Content-Length");
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
- f->r->pool, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
+ return bail_out_on_error(ctx, f, HTTP_REQUEST_ENTITY_TOO_LARGE);
}
/* If we have a limit in effect and we know the C-L ahead of
* time, stop it here if it is invalid.
*/
if (ctx->limit && ctx->limit < ctx->remaining) {
- apr_bucket_brigade *bb;
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
"Requested content-length of %" APR_OFF_T_FMT
" is larger than the configured limit"
" of %" APR_OFF_T_FMT, ctx->remaining, ctx->limit);
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
- f->r->pool, f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
+ return bail_out_on_error(ctx, f, HTTP_REQUEST_ENTITY_TOO_LARGE);
}
}
@@ -185,13 +321,13 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
* Only valid on chunked and C-L bodies where the C-L is > 0. */
if ((ctx->state == BODY_CHUNK ||
(ctx->state == BODY_LENGTH && ctx->remaining > 0)) &&
- f->r->expecting_100 && f->r->proto_num >= HTTP_VERSION(1,1)) {
+ f->r->expecting_100 && f->r->proto_num >= HTTP_VERSION(1,1) &&
+ !(f->r->eos_sent || f->r->bytes_sent)) {
char *tmp;
- apr_bucket_brigade *bb;
tmp = apr_pstrcat(f->r->pool, AP_SERVER_PROTOCOL, " ",
ap_get_status_line(100), CRLF CRLF, NULL);
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ apr_brigade_cleanup(bb);
e = apr_bucket_pool_create(tmp, strlen(tmp), f->r->pool,
f->c->bucket_alloc);
APR_BRIGADE_INSERT_HEAD(bb, e);
@@ -203,30 +339,31 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
/* We can't read the chunk until after sending 100 if required. */
if (ctx->state == BODY_CHUNK) {
- char line[30];
- apr_bucket_brigade *bb;
- apr_size_t len = 30;
- apr_off_t brigade_length;
-
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ apr_brigade_cleanup(bb);
rv = ap_get_brigade(f->next, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
+ block, 0);
+
+ /* for timeout */
+ if (block == APR_NONBLOCK_READ &&
+ ( (rv == APR_SUCCESS && APR_BRIGADE_EMPTY(bb)) ||
+ (APR_STATUS_IS_EAGAIN(rv)) )) {
+ ctx->state = BODY_CHUNK_PART;
+ return APR_EAGAIN;
+ }
if (rv == APR_SUCCESS) {
- /* We have to check the length of the brigade we got back.
- * We will not accept partial or blank lines.
- */
- rv = apr_brigade_length(bb, 1, &brigade_length);
- if (rv == APR_SUCCESS
- && (!brigade_length ||
- brigade_length > f->r->server->limit_req_line)) {
- rv = APR_ENOSPC;
+ rv = get_chunk_line(ctx, bb, f->r->server->limit_req_line);
+ if (APR_STATUS_IS_EAGAIN(rv)) {
+ apr_brigade_cleanup(bb);
+ ctx->state = BODY_CHUNK_PART;
+ return rv;
}
if (rv == APR_SUCCESS) {
- rv = apr_brigade_flatten(bb, line, &len);
- if (rv == APR_SUCCESS) {
- ctx->remaining = get_chunk_size(line);
+ ctx->remaining = get_chunk_size(ctx->chunk_ln);
+ if (ctx->remaining == INVALID_CHAR) {
+ rv = APR_EGENERAL;
+ http_error = HTTP_SERVICE_UNAVAILABLE;
}
}
}
@@ -236,14 +373,7 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
if (rv != APR_SUCCESS || ctx->remaining < 0) {
ctx->remaining = 0; /* Reset it in case we have to
* come back here later */
- e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
- f->r->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- return ap_pass_brigade(f->r->output_filters, bb);
+ return bail_out_on_error(ctx, f, http_error);
}
if (!ctx->remaining) {
@@ -257,6 +387,9 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
}
}
}
+ else {
+ bb = ctx->bb;
+ }
if (ctx->eos_sent) {
e = apr_bucket_eos_create(f->c->bucket_alloc);
@@ -274,34 +407,60 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
ctx->eos_sent = 1;
return APR_SUCCESS;
case BODY_CHUNK:
+ case BODY_CHUNK_PART:
{
- char line[30];
- apr_bucket_brigade *bb;
- apr_size_t len = 30;
- apr_status_t http_error = HTTP_REQUEST_ENTITY_TOO_LARGE;
-
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ apr_brigade_cleanup(bb);
/* We need to read the CRLF after the chunk. */
- rv = ap_get_brigade(f->next, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
- apr_brigade_cleanup(bb);
+ if (ctx->state == BODY_CHUNK) {
+ rv = ap_get_brigade(f->next, bb, AP_MODE_GETLINE,
+ block, 0);
+ if (block == APR_NONBLOCK_READ &&
+ ( (rv == APR_SUCCESS && APR_BRIGADE_EMPTY(bb)) ||
+ (APR_STATUS_IS_EAGAIN(rv)) )) {
+ return APR_EAGAIN;
+ }
+ /*
+ * We really don't care whats on this line. If it is RFC
+ * compliant it should be only \r\n. If there is more
+ * before we just ignore it as long as we do not get over
+ * the limit for request lines.
+ */
+ rv = get_remaining_chunk_line(ctx, bb,
+ f->r->server->limit_req_line);
+ apr_brigade_cleanup(bb);
+ if (APR_STATUS_IS_EAGAIN(rv)) {
+ return rv;
+ }
+ } else {
+ rv = APR_SUCCESS;
+ }
if (rv == APR_SUCCESS) {
/* Read the real chunk line. */
rv = ap_get_brigade(f->next, bb, AP_MODE_GETLINE,
- APR_BLOCK_READ, 0);
+ block, 0);
+ /* Test timeout */
+ if (block == APR_NONBLOCK_READ &&
+ ( (rv == APR_SUCCESS && APR_BRIGADE_EMPTY(bb)) ||
+ (APR_STATUS_IS_EAGAIN(rv)) )) {
+ ctx->state = BODY_CHUNK_PART;
+ return APR_EAGAIN;
+ }
+ ctx->state = BODY_CHUNK;
if (rv == APR_SUCCESS) {
- rv = apr_brigade_flatten(bb, line, &len);
+ rv = get_chunk_line(ctx, bb, f->r->server->limit_req_line);
+ if (APR_STATUS_IS_EAGAIN(rv)) {
+ ctx->state = BODY_CHUNK_PART;
+ apr_brigade_cleanup(bb);
+ return rv;
+ }
if (rv == APR_SUCCESS) {
- /* Wait a sec, that's a blank line! Oh no. */
- if (!len) {
+ ctx->remaining = get_chunk_size(ctx->chunk_ln);
+ if (ctx->remaining == INVALID_CHAR) {
rv = APR_EGENERAL;
http_error = HTTP_SERVICE_UNAVAILABLE;
}
- else {
- ctx->remaining = get_chunk_size(line);
- }
}
}
apr_brigade_cleanup(bb);
@@ -309,18 +468,9 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
/* Detect chunksize error (such as overflow) */
if (rv != APR_SUCCESS || ctx->remaining < 0) {
- apr_status_t out_error;
-
ctx->remaining = 0; /* Reset it in case we have to
* come back here later */
- e = ap_bucket_error_create(http_error,
- NULL, f->r->pool,
- f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- e = apr_bucket_eos_create(f->c->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(bb, e);
- ctx->eos_sent = 1;
- out_error = ap_pass_brigade(f->r->output_filters, bb);
+ bail_out_on_error(ctx, f, http_error);
return rv;
}
@@ -378,12 +528,11 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
* really count. This seems to be up for interpretation. */
ctx->limit_used += totalread;
if (ctx->limit < ctx->limit_used) {
- apr_bucket_brigade *bb;
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r,
"Read content-length of %" APR_OFF_T_FMT
" is larger than the configured limit"
" of %" APR_OFF_T_FMT, ctx->limit_used, ctx->limit);
- bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
+ apr_brigade_cleanup(bb);
e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL,
f->r->pool,
f->c->bucket_alloc);
@@ -414,6 +563,13 @@ static long get_chunk_size(char *b)
ap_xlate_proto_from_ascii(b, strlen(b));
+ if (!apr_isxdigit(*b)) {
+ /*
+ * Detect invalid character at beginning. This also works for empty
+ * chunk size lines.
+ */
+ return INVALID_CHAR;
+ }
/* Skip leading zeros */
while (*b == '0') {
++b;
@@ -831,7 +987,7 @@ AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r)
if (conf->trace_enable == AP_TRACE_DISABLE) {
apr_table_setn(r->notes, "error-notes",
"TRACE denied by server configuration");
- return HTTP_FORBIDDEN;
+ return HTTP_METHOD_NOT_ALLOWED;
}
if (conf->trace_enable == AP_TRACE_EXTENDED)
@@ -925,6 +1081,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
apr_bucket_brigade *b2;
header_struct h;
header_filter_ctx *ctx = f->ctx;
+ const char *ctype;
AP_DEBUG_ASSERT(!r->main);
@@ -1000,8 +1157,10 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
apr_table_unset(r->headers_out, "Content-Length");
}
- apr_table_setn(r->headers_out, "Content-Type",
- ap_make_content_type(r, r->content_type));
+ ctype = ap_make_content_type(r, r->content_type);
+ if (strcasecmp(ctype, NO_CONTENT_TYPE)) {
+ apr_table_setn(r->headers_out, "Content-Type", ctype);
+ }
if (r->content_encoding) {
apr_table_setn(r->headers_out, "Content-Encoding",
diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c
index d8886af1..87f3f307 100644
--- a/modules/http/http_protocol.c
+++ b/modules/http/http_protocol.c
@@ -48,6 +48,7 @@
#include "util_charset.h"
#include "util_ebcdic.h"
#include "util_time.h"
+#include "ap_mpm.h"
#include "mod_core.h"
@@ -187,6 +188,7 @@ AP_DECLARE(int) ap_set_keepalive(request_rec *r)
* or they're a buggy twit coming through a HTTP/1.1 proxy
* and the client is requesting an HTTP/1.0-style keep-alive
* or the client claims to be HTTP/1.1 compliant (perhaps a proxy);
+ * and this MPM process is not already exiting
* THEN we can be persistent, which requires more headers be output.
*
* Note that the condition evaluation order is extremely important.
@@ -212,7 +214,8 @@ AP_DECLARE(int) ap_set_keepalive(request_rec *r)
&& (!apr_table_get(r->subprocess_env, "nokeepalive")
|| apr_table_get(r->headers_in, "Via"))
&& ((ka_sent = ap_find_token(r->pool, conn, "keep-alive"))
- || (r->proto_num >= HTTP_VERSION(1,1)))) {
+ || (r->proto_num >= HTTP_VERSION(1,1)))
+ && !ap_graceful_stop_signalled()) {
int left = r->server->keep_alive_max - r->connection->keepalives;
r->connection->keepalive = AP_CONN_KEEPALIVE;
@@ -910,7 +913,8 @@ static const char *get_canned_error_string(int status,
NULL));
case HTTP_METHOD_NOT_ALLOWED:
return(apr_pstrcat(p,
- "<p>The requested method ", r->method,
+ "<p>The requested method ",
+ ap_escape_html(r->pool, r->method),
" is not allowed for the URL ",
ap_escape_html(r->pool, r->uri),
".</p>\n",
@@ -928,7 +932,7 @@ static const char *get_canned_error_string(int status,
case HTTP_LENGTH_REQUIRED:
s1 = apr_pstrcat(p,
"<p>A request of the requested method ",
- r->method,
+ ap_escape_html(r->pool, r->method),
" requires a valid Content-length.<br />\n",
NULL);
return(add_optional_notes(r, s1, "error-notes", "</p>\n"));
@@ -975,7 +979,7 @@ static const char *get_canned_error_string(int status,
"The requested resource<br />",
ap_escape_html(r->pool, r->uri), "<br />\n",
"does not allow request data with ",
- r->method,
+ ap_escape_html(r->pool, r->method),
" requests, or the amount of data provided in\n"
"the request exceeds the capacity limit.\n",
NULL));
diff --git a/modules/http/mod_mime.c b/modules/http/mod_mime.c
index d122d05b..d9d8b101 100644
--- a/modules/http/mod_mime.c
+++ b/modules/http/mod_mime.c
@@ -140,11 +140,10 @@ static void *overlay_extension_mappings(apr_pool_t *p,
const void *base_val,
const void *data)
{
- extension_info *new_info = apr_palloc(p, sizeof(extension_info));
const extension_info *overlay_info = (const extension_info *)overlay_val;
const extension_info *base_info = (const extension_info *)base_val;
+ extension_info *new_info = apr_pmemdup(p, base_info, sizeof(extension_info));
- memcpy(new_info, base_info, sizeof(extension_info));
if (overlay_info->forced_type) {
new_info->forced_type = overlay_info->forced_type;
}
diff --git a/modules/ldap/util_ldap.c b/modules/ldap/util_ldap.c
index d6f8c78b..2f651931 100644
--- a/modules/ldap/util_ldap.c
+++ b/modules/ldap/util_ldap.c
@@ -111,7 +111,7 @@ static int util_ldap_handler(request_rec *r)
return DECLINED;
}
- r->content_type = "text/html";
+ r->content_type = "text/html; charset=ISO-8859-1";
if (r->header_only)
return OK;
@@ -223,7 +223,7 @@ static int uldap_connection_init(request_rec *r,
* some hosts with ports and some without. All hosts which do not
* specify a port will use the default port.
*/
- apr_ldap_init(ldc->pool, &(ldc->ldap),
+ apr_ldap_init(r->pool, &(ldc->ldap),
ldc->host,
APR_LDAP_SSL == ldc->secure ? LDAPS_PORT : LDAP_PORT,
APR_LDAP_NONE,
@@ -251,7 +251,7 @@ static int uldap_connection_init(request_rec *r,
/* set client certificates */
if (!apr_is_empty_array(ldc->client_certs)) {
- apr_ldap_set_option(ldc->pool, ldc->ldap, APR_LDAP_OPT_TLS_CERT,
+ apr_ldap_set_option(r->pool, ldc->ldap, APR_LDAP_OPT_TLS_CERT,
ldc->client_certs, &(result));
if (LDAP_SUCCESS != result->rc) {
uldap_connection_unbind( ldc );
@@ -262,7 +262,7 @@ static int uldap_connection_init(request_rec *r,
/* switch on SSL/TLS */
if (APR_LDAP_NONE != ldc->secure) {
- apr_ldap_set_option(ldc->pool, ldc->ldap,
+ apr_ldap_set_option(r->pool, ldc->ldap,
APR_LDAP_OPT_TLS, &ldc->secure, &(result));
if (LDAP_SUCCESS != result->rc) {
uldap_connection_unbind( ldc );
@@ -277,7 +277,7 @@ static int uldap_connection_init(request_rec *r,
/*XXX All of the #ifdef's need to be removed once apr-util 1.2 is released */
#ifdef APR_LDAP_OPT_VERIFY_CERT
- apr_ldap_set_option(ldc->pool, ldc->ldap,
+ apr_ldap_set_option(r->pool, ldc->ldap,
APR_LDAP_OPT_VERIFY_CERT, &(st->verify_svr_cert), &(result));
#else
#if defined(LDAPSSL_VERIFY_SERVER)
@@ -307,7 +307,7 @@ static int uldap_connection_init(request_rec *r,
}
if (st->connectionTimeout >= 0) {
- rc = apr_ldap_set_option(ldc->pool, ldc->ldap, LDAP_OPT_NETWORK_TIMEOUT,
+ rc = apr_ldap_set_option(r->pool, ldc->ldap, LDAP_OPT_NETWORK_TIMEOUT,
(void *)&timeOut, &(result));
if (APR_SUCCESS != rc) {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
@@ -369,7 +369,7 @@ static int uldap_connection_open(request_rec *r,
rc = ldap_simple_bind_s(ldc->ldap,
(char *)ldc->binddn,
(char *)ldc->bindpw);
- if (LDAP_SERVER_DOWN != rc) {
+ if (!AP_LDAP_IS_SERVER_DOWN(rc)) {
break;
} else if (failures == 5) {
/* attempt to init the connection once again */
@@ -539,11 +539,19 @@ static util_ldap_connection_t *
*/
/* create the details to the pool in st */
l = apr_pcalloc(st->pool, sizeof(util_ldap_connection_t));
+ if (apr_pool_create(&l->pool, st->pool) != APR_SUCCESS) {
+ ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
+ "util_ldap: Failed to create memory pool");
+#if APR_HAS_THREADS
+ apr_thread_mutex_unlock(st->mutex);
+#endif
+ return NULL;
+
+ }
#if APR_HAS_THREADS
apr_thread_mutex_create(&l->lock, APR_THREAD_MUTEX_DEFAULT, st->pool);
apr_thread_mutex_lock(l->lock);
#endif
- l->pool = st->pool;
l->bound = 0;
l->host = apr_pstrdup(st->pool, host);
l->port = port;
@@ -663,10 +671,10 @@ start_over:
}
/* search for reqdn */
- if ((result = ldap_search_ext_s(ldc->ldap, (char *)reqdn, LDAP_SCOPE_BASE,
- "(objectclass=*)", NULL, 1,
- NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res))
- == LDAP_SERVER_DOWN)
+ result = ldap_search_ext_s(ldc->ldap, (char *)reqdn, LDAP_SCOPE_BASE,
+ "(objectclass=*)", NULL, 1,
+ NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res);
+ if (AP_LDAP_IS_SERVER_DOWN(result))
{
ldc->reason = "DN Comparison ldap_search_ext_s() "
"failed with server down";
@@ -800,11 +808,11 @@ start_over:
return result;
}
- if ((result = ldap_compare_s(ldc->ldap,
- (char *)dn,
- (char *)attrib,
- (char *)value))
- == LDAP_SERVER_DOWN) {
+ result = ldap_compare_s(ldc->ldap,
+ (char *)dn,
+ (char *)attrib,
+ (char *)value);
+ if (AP_LDAP_IS_SERVER_DOWN(result)) {
/* connection failed - try again */
ldc->reason = "ldap_compare_s() failed with server down";
uldap_connection_unbind(ldc);
@@ -913,8 +921,16 @@ static int uldap_cache_checkuserid(request_rec *r, util_ldap_connection_t *ldc,
&& (strcmp(search_nodep->bindpw, bindpw) == 0))
{
/* ...and entry is valid */
- *binddn = search_nodep->dn;
- *retvals = search_nodep->vals;
+ *binddn = apr_pstrdup(r->pool, search_nodep->dn);
+ if (attrs) {
+ int i = 0, k = 0;
+ while (attrs[k++]);
+ *retvals = apr_pcalloc(r->pool, sizeof(char *) * k);
+ while (search_nodep->vals[i]) {
+ (*retvals)[i] = apr_pstrdup(r->pool, search_nodep->vals[i]);
+ i++;
+ }
+ }
LDAP_CACHE_UNLOCK();
ldc->reason = "Authentication successful (cached)";
return LDAP_SUCCESS;
@@ -940,11 +956,11 @@ start_over:
}
/* try do the search */
- if ((result = ldap_search_ext_s(ldc->ldap,
- (char *)basedn, scope,
- (char *)filter, attrs, 0,
- NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res))
- == LDAP_SERVER_DOWN)
+ result = ldap_search_ext_s(ldc->ldap,
+ (char *)basedn, scope,
+ (char *)filter, attrs, 0,
+ NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res);
+ if (AP_LDAP_IS_SERVER_DOWN(result))
{
ldc->reason = "ldap_search_ext_s() for user failed with server down";
uldap_connection_unbind(ldc);
@@ -998,9 +1014,10 @@ start_over:
* fails, it means that the password is wrong (the dn obviously
* exists, since we just retrieved it)
*/
- if ((result = ldap_simple_bind_s(ldc->ldap,
- (char *)*binddn,
- (char *)bindpw)) == LDAP_SERVER_DOWN) {
+ result = ldap_simple_bind_s(ldc->ldap,
+ (char *)*binddn,
+ (char *)bindpw);
+ if (AP_LDAP_IS_SERVER_DOWN(result)) {
ldc->reason = "ldap_simple_bind_s() to check user credentials "
"failed with server down";
ldap_msgfree(res);
@@ -1153,8 +1170,16 @@ static int uldap_cache_getuserdn(request_rec *r, util_ldap_connection_t *ldc,
}
else {
/* ...and entry is valid */
- *binddn = search_nodep->dn;
- *retvals = search_nodep->vals;
+ *binddn = apr_pstrdup(r->pool, search_nodep->dn);
+ if (attrs) {
+ int i = 0, k = 0;
+ while (attrs[k++]);
+ *retvals = apr_pcalloc(r->pool, sizeof(char *) * k);
+ while (search_nodep->vals[i]) {
+ (*retvals)[i] = apr_pstrdup(r->pool, search_nodep->vals[i]);
+ i++;
+ }
+ }
LDAP_CACHE_UNLOCK();
ldc->reason = "Search successful (cached)";
return LDAP_SUCCESS;
@@ -1180,11 +1205,11 @@ start_over:
}
/* try do the search */
- if ((result = ldap_search_ext_s(ldc->ldap,
- (char *)basedn, scope,
- (char *)filter, attrs, 0,
- NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res))
- == LDAP_SERVER_DOWN)
+ result = ldap_search_ext_s(ldc->ldap,
+ (char *)basedn, scope,
+ (char *)filter, attrs, 0,
+ NULL, NULL, NULL, APR_LDAP_SIZELIMIT, &res);
+ if (AP_LDAP_IS_SERVER_DOWN(result))
{
ldc->reason = "ldap_search_ext_s() for user failed with server down";
uldap_connection_unbind(ldc);
@@ -1990,7 +2015,7 @@ static int util_ldap_post_config(apr_pool_t *p, apr_pool_t *plog,
0,
&(result_err));
if (APR_SUCCESS == rc) {
- rc = apr_ldap_set_option(p, NULL, APR_LDAP_OPT_TLS_CERT,
+ rc = apr_ldap_set_option(ptemp, NULL, APR_LDAP_OPT_TLS_CERT,
(void *)st->global_certs, &(result_err));
}
diff --git a/modules/mappers/mod_imagemap.c b/modules/mappers/mod_imagemap.c
index f4dce5ff..f6741d35 100644
--- a/modules/mappers/mod_imagemap.c
+++ b/modules/mappers/mod_imagemap.c
@@ -479,13 +479,16 @@ static int imap_reply(request_rec *r, char *redirect)
static void menu_header(request_rec *r, char *menu)
{
- ap_set_content_type(r, "text/html");
+ ap_set_content_type(r, "text/html; charset=ISO-8859-1");
- ap_rvputs(r, DOCTYPE_HTML_3_2, "<html><head>\n<title>Menu for ", r->uri,
- "</title>\n</head><body>\n", NULL);
+ ap_rvputs(r, DOCTYPE_HTML_3_2, "<html><head>\n<title>Menu for ",
+ ap_escape_html(r->pool, r->uri),
+ "</title>\n</head><body>\n", NULL);
if (!strcasecmp(menu, "formatted")) {
- ap_rvputs(r, "<h1>Menu for ", r->uri, "</h1>\n<hr />\n\n", NULL);
+ ap_rvputs(r, "<h1>Menu for ",
+ ap_escape_html(r->pool, r->uri),
+ "</h1>\n<hr />\n\n", NULL);
}
return;
diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c
index 39dc11fb..e4d0e5d8 100644
--- a/modules/mappers/mod_rewrite.c
+++ b/modules/mappers/mod_rewrite.c
@@ -130,6 +130,7 @@
#define CONDFLAG_NOCASE 1<<1
#define CONDFLAG_NOTMATCH 1<<2
#define CONDFLAG_ORNEXT 1<<3
+#define CONDFLAG_NOVARY 1<<4
#define RULEFLAG_NONE 1<<0
#define RULEFLAG_FORCEREDIRECT 1<<1
@@ -145,6 +146,7 @@
#define RULEFLAG_NOESCAPE 1<<11
#define RULEFLAG_NOSUB 1<<12
#define RULEFLAG_STATUS 1<<13
+#define RULEFLAG_ESCAPEBACKREF 1<<14
/* return code of the rewrite rule
* the result may be escaped - or not
@@ -2079,7 +2081,7 @@ static APR_INLINE char *find_char_in_curlies(char *s, int c)
* are interpreted by a later expansion, producing results that
* were not intended by the administrator.
*/
-static char *do_expand(char *input, rewrite_ctx *ctx)
+static char *do_expand(char *input, rewrite_ctx *ctx, rewriterule_entry *entry)
{
result_list *result, *current;
result_list sresult[SMALL_EXPANSION];
@@ -2191,10 +2193,10 @@ static char *do_expand(char *input, rewrite_ctx *ctx)
}
/* reuse of key variable as result */
- key = lookup_map(ctx->r, map, do_expand(key, ctx));
+ key = lookup_map(ctx->r, map, do_expand(key, ctx, entry));
if (!key && dflt && *dflt) {
- key = do_expand(dflt, ctx);
+ key = do_expand(dflt, ctx, entry);
}
if (key) {
@@ -2218,9 +2220,22 @@ static char *do_expand(char *input, rewrite_ctx *ctx)
if (bri->source && n < AP_MAX_REG_MATCH
&& bri->regmatch[n].rm_eo > bri->regmatch[n].rm_so) {
span = bri->regmatch[n].rm_eo - bri->regmatch[n].rm_so;
-
- current->len = span;
- current->string = bri->source + bri->regmatch[n].rm_so;
+ if (entry && (entry->flags & RULEFLAG_ESCAPEBACKREF)) {
+ /* escape the backreference */
+ char *tmp2, *tmp;
+ tmp = apr_pstrndup(pool, bri->source + bri->regmatch[n].rm_so, span);
+ tmp2 = ap_escape_path_segment(pool, tmp);
+ rewritelog((ctx->r, 5, ctx->perdir, "escaping backreference '%s' to '%s'",
+ tmp, tmp2));
+
+ current->len = span = strlen(tmp2);
+ current->string = tmp2;
+ }
+ else {
+ current->len = span;
+ current->string = bri->source + bri->regmatch[n].rm_so;
+ }
+
outlen += span;
}
@@ -2280,7 +2295,7 @@ static void do_expand_env(data_item *env, rewrite_ctx *ctx)
char *name, *val;
while (env) {
- name = do_expand(env->data, ctx);
+ name = do_expand(env->data, ctx, NULL);
if ((val = ap_strchr(name, ':')) != NULL) {
*val++ = '\0';
@@ -2369,7 +2384,7 @@ static void add_cookie(request_rec *r, char *s)
static void do_expand_cookie(data_item *cookie, rewrite_ctx *ctx)
{
while (cookie) {
- add_cookie(ctx->r, do_expand(cookie->data, ctx));
+ add_cookie(ctx->r, do_expand(cookie->data, ctx, NULL));
cookie = cookie->next;
}
@@ -3029,6 +3044,10 @@ static const char *cmd_rewritecond_setflag(apr_pool_t *p, void *_cfg,
|| strcasecmp(key, "OR") == 0 ) {
cfg->flags |= CONDFLAG_ORNEXT;
}
+ else if ( strcasecmp(key, "novary") == 0
+ || strcasecmp(key, "NV") == 0 ) {
+ cfg->flags |= CONDFLAG_NOVARY;
+ }
else {
return apr_pstrcat(p, "RewriteCond: unknown flag '", key, "'", NULL);
}
@@ -3149,6 +3168,15 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
int error = 0;
switch (*key++) {
+ case 'b':
+ case 'B':
+ if (!*key || !strcasecmp(key, "ackrefescaping")) {
+ cfg->flags |= RULEFLAG_ESCAPEBACKREF;
+ }
+ else {
+ ++error;
+ }
+ break;
case 'c':
case 'C':
if (!*key || !strcasecmp(key, "hain")) { /* chain */
@@ -3350,7 +3378,6 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
++error;
}
break;
-
default:
++error;
break;
@@ -3486,7 +3513,7 @@ static APR_INLINE int compare_lexicography(char *a, char *b)
*/
static int apply_rewrite_cond(rewritecond_entry *p, rewrite_ctx *ctx)
{
- char *input = do_expand(p->input, ctx);
+ char *input = do_expand(p->input, ctx, NULL);
apr_finfo_t sb;
request_rec *rsub, *r = ctx->r;
ap_regmatch_t regmatch[AP_MAX_REG_MATCH];
@@ -3609,7 +3636,7 @@ static APR_INLINE void force_type_handler(rewriterule_entry *p,
char *expanded;
if (p->forced_mimetype) {
- expanded = do_expand(p->forced_mimetype, ctx);
+ expanded = do_expand(p->forced_mimetype, ctx, p);
if (*expanded) {
ap_str_tolower(expanded);
@@ -3623,7 +3650,7 @@ static APR_INLINE void force_type_handler(rewriterule_entry *p,
}
if (p->forced_handler) {
- expanded = do_expand(p->forced_handler, ctx);
+ expanded = do_expand(p->forced_handler, ctx, p);
if (*expanded) {
ap_str_tolower(expanded);
@@ -3722,6 +3749,12 @@ static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
rewritecond_entry *c = &conds[i];
rc = apply_rewrite_cond(c, ctx);
+ /*
+ * Reset vary_this if the novary flag is set for this condition.
+ */
+ if (c->flags & CONDFLAG_NOVARY) {
+ ctx->vary_this = NULL;
+ }
if (c->flags & CONDFLAG_ORNEXT) {
if (!rc) {
/* One condition is false, but another can be still true. */
@@ -3734,7 +3767,6 @@ static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
&& c->flags & CONDFLAG_ORNEXT) {
c = &conds[++i];
}
- continue;
}
}
else if (!rc) {
@@ -3755,7 +3787,7 @@ static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
/* expand the result */
if (!(p->flags & RULEFLAG_NOSUB)) {
- newuri = do_expand(p->output, ctx);
+ newuri = do_expand(p->output, ctx, p);
rewritelog((r, 2, ctx->perdir, "rewrite '%s' -> '%s'", ctx->uri,
newuri));
}
@@ -3802,6 +3834,7 @@ static int apply_rewrite_rule(rewriterule_entry *p, rewrite_ctx *ctx)
* ourself).
*/
if (p->flags & RULEFLAG_PROXY) {
+ /* PR#39746: Escaping things here gets repeated in mod_proxy */
fully_qualify_uri(r);
rewritelog((r, 2, ctx->perdir, "forcing proxy-throughput with %s",
diff --git a/modules/proxy/ajp.h b/modules/proxy/ajp.h
index 3451a848..8c022fb3 100644
--- a/modules/proxy/ajp.h
+++ b/modules/proxy/ajp.h
@@ -145,7 +145,7 @@ struct ajp_msg
#define AJP_HEADER_SZ_LEN 2
#define AJP_HEADER_SZ 6
#define AJP_MSG_BUFFER_SZ 8192
-#define AJP_MAX_BUFFER_SZ 16384
+#define AJP_MAX_BUFFER_SZ 65536
#define AJP13_MAX_SEND_BODY_SZ (AJP_MAX_BUFFER_SZ - AJP_HEADER_SZ)
/** Send a request from web server to container*/
diff --git a/modules/proxy/ajp_header.c b/modules/proxy/ajp_header.c
index 07ffba97..6fecb5a9 100644
--- a/modules/proxy/ajp_header.c
+++ b/modules/proxy/ajp_header.c
@@ -162,13 +162,19 @@ static const unsigned char sc_for_req_method_table[] = {
0 /* M_INVALID */
};
-static int sc_for_req_method_by_id(int method_id)
+static int sc_for_req_method_by_id(request_rec *r)
{
- if (method_id < 0 || method_id > M_INVALID)
+ int method_id = r->method_number;
+ if (method_id < 0 || method_id > M_INVALID) {
return UNKNOWN_METHOD;
- else
+ }
+ else if (r->header_only) {
+ return SC_M_HEAD;
+ }
+ else {
return sc_for_req_method_table[method_id] ?
sc_for_req_method_table[method_id] : UNKNOWN_METHOD;
+ }
}
/*
@@ -218,7 +224,7 @@ static apr_status_t ajp_marshal_into_msgb(ajp_msg_t *msg,
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
"Into ajp_marshal_into_msgb");
- if ((method = sc_for_req_method_by_id(r->method_number)) == UNKNOWN_METHOD) {
+ if ((method = sc_for_req_method_by_id(r)) == UNKNOWN_METHOD) {
ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
"ajp_marshal_into_msgb - No such method %s",
r->method);
diff --git a/modules/proxy/mod_proxy.c b/modules/proxy/mod_proxy.c
index 18b554a7..de48638b 100644
--- a/modules/proxy/mod_proxy.c
+++ b/modules/proxy/mod_proxy.c
@@ -85,9 +85,10 @@ static const char *set_worker_param(apr_pool_t *p,
* in error state, it will be retried after that timeout.
*/
ival = atoi(val);
- if (ival < 1)
- return "Retry must be at least one second";
+ if (ival < 0)
+ return "Retry must be a positive value";
worker->retry = apr_time_from_sec(ival);
+ worker->retry_set = 1;
}
else if (!strcasecmp(key, "ttl")) {
/* Time in seconds that will destroy all the connections
@@ -219,12 +220,12 @@ static const char *set_worker_param(apr_pool_t *p,
else
worker->status &= ~PROXY_WORKER_HOT_STANDBY;
}
- else if (*v == 'I' || *v == 'i') {
- if (mode)
- worker->status |= PROXY_WORKER_IGNORE_ERRORS;
- else
- worker->status &= ~PROXY_WORKER_IGNORE_ERRORS;
- }
+ else if (*v == 'I' || *v == 'i') {
+ if (mode)
+ worker->status |= PROXY_WORKER_IGNORE_ERRORS;
+ else
+ worker->status &= ~PROXY_WORKER_IGNORE_ERRORS;
+ }
else {
return "Unknown status parameter option";
}
@@ -439,7 +440,9 @@ static int proxy_trans(request_rec *r)
int i, len;
struct proxy_alias *ent = (struct proxy_alias *) conf->aliases->elts;
ap_regmatch_t regm[AP_MAX_REG_MATCH];
+ ap_regmatch_t reg1[AP_MAX_REG_MATCH];
char *found = NULL;
+ int mismatch = 0;
if (r->proxyreq) {
/* someone has already set up the proxy, it was possibly ourselves
@@ -454,13 +457,22 @@ static int proxy_trans(request_rec *r)
*/
for (i = 0; i < conf->aliases->nelts; i++) {
+ unsigned int nocanon = ent[i].flags & PROXYPASS_NOCANON;
+ const char *use_uri = nocanon ? r->unparsed_uri : r->uri;
if (ent[i].regex) {
if (!ap_regexec(ent[i].regex, r->uri, AP_MAX_REG_MATCH, regm, 0)) {
if ((ent[i].real[0] == '!') && (ent[i].real[1] == '\0')) {
return DECLINED;
}
- found = ap_pregsub(r->pool, ent[i].real, r->uri, AP_MAX_REG_MATCH,
- regm);
+ /* test that we haven't reduced the URI */
+ if (nocanon && ap_regexec(ent[i].regex, r->unparsed_uri,
+ AP_MAX_REG_MATCH, reg1, 0)) {
+ mismatch = 1;
+ use_uri = r->uri;
+ }
+ found = ap_pregsub(r->pool, ent[i].real, use_uri,
+ AP_MAX_REG_MATCH,
+ (use_uri == r->uri) ? regm : reg1);
/* Note: The strcmp() below catches cases where there
* was no regex substitution. This is so cases like:
*
@@ -478,8 +490,8 @@ static int proxy_trans(request_rec *r)
found = apr_pstrcat(r->pool, "proxy:", found, NULL);
}
else {
- found = apr_pstrcat(r->pool, "proxy:", ent[i].real, r->uri,
- NULL);
+ found = apr_pstrcat(r->pool, "proxy:", ent[i].real,
+ use_uri, NULL);
}
}
}
@@ -490,15 +502,31 @@ static int proxy_trans(request_rec *r)
if ((ent[i].real[0] == '!') && (ent[i].real[1] == '\0')) {
return DECLINED;
}
-
+ if (nocanon
+ && len != alias_match(r->unparsed_uri, ent[i].fake)) {
+ mismatch = 1;
+ use_uri = r->uri;
+ }
found = apr_pstrcat(r->pool, "proxy:", ent[i].real,
- r->uri + len, NULL);
+ use_uri + len, NULL);
}
}
+ if (mismatch) {
+ /* We made a reducing transformation, so we can't safely use
+ * unparsed_uri. Safe fallback is to ignore nocanon.
+ */
+ ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r,
+ "Unescaped URL path matched ProxyPass; ignoring unsafe nocanon");
+ }
+
if (found) {
r->filename = found;
r->handler = "proxy-server";
r->proxyreq = PROXYREQ_REVERSE;
+ if (nocanon && !mismatch) {
+ /* mod_proxy_http needs to be told. Different module. */
+ apr_table_setn(r->notes, "proxy-nocanon", "1");
+ }
return OK;
}
}
@@ -691,8 +719,10 @@ static int proxy_handler(request_rec *r)
/* set configured max-forwards */
maxfwd = conf->maxfwd;
}
- apr_table_set(r->headers_in, "Max-Forwards",
- apr_psprintf(r->pool, "%ld", (maxfwd > 0) ? maxfwd : 0));
+ if (maxfwd >= 0) {
+ apr_table_set(r->headers_in, "Max-Forwards",
+ apr_psprintf(r->pool, "%ld", maxfwd));
+ }
if (r->method_number == M_TRACE) {
core_server_config *coreconf = (core_server_config *)
@@ -708,7 +738,7 @@ static int proxy_handler(request_rec *r)
apr_table_setn(r->notes, "verbose-error-to", "*");
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"proxy: TRACE forbidden by server configuration");
- return HTTP_FORBIDDEN;
+ return HTTP_METHOD_NOT_ALLOWED;
}
/* Can't test ap_should_client_block, we aren't ready to send
@@ -859,7 +889,7 @@ static int proxy_handler(request_rec *r)
"If you are using a DSO version of mod_proxy, make sure "
"the proxy submodules are included in the configuration "
"using LoadModule.", r->uri);
- access_status = HTTP_FORBIDDEN;
+ access_status = HTTP_INTERNAL_SERVER_ERROR;
goto cleanup;
}
cleanup:
@@ -994,6 +1024,9 @@ static void *merge_proxy_dir_config(apr_pool_t *p, void *basev, void *addv)
= apr_array_append(p, base->cookie_domains, add->cookie_domains);
new->cookie_path_str = base->cookie_path_str;
new->cookie_domain_str = base->cookie_domain_str;
+ new->ftp_directory_charset = add->ftp_directory_charset ?
+ add->ftp_directory_charset :
+ base->ftp_directory_charset;
return new;
}
@@ -1087,6 +1120,7 @@ static const char *
const apr_table_entry_t *elts;
int i;
int use_regex = is_regex;
+ unsigned int flags = 0;
while (*arg) {
word = ap_getword_conf(cmd->pool, &arg);
@@ -1100,8 +1134,12 @@ static const char *
}
f = word;
}
- else if (!r)
+ else if (!r) {
r = word;
+ }
+ else if (!strcasecmp(word,"nocanon")) {
+ flags |= PROXYPASS_NOCANON;
+ }
else {
char *val = strchr(word, '=');
if (!val) {
@@ -1132,6 +1170,7 @@ static const char *
new = apr_array_push(conf->aliases);
new->fake = apr_pstrdup(cmd->pool, f);
new->real = apr_pstrdup(cmd->pool, r);
+ new->flags = flags;
if (use_regex) {
new->regex = ap_pregcomp(cmd->pool, f, AP_REG_EXTENDED);
if (new->regex == NULL)
@@ -1146,7 +1185,7 @@ static const char *
arr = apr_table_elts(params);
elts = (const apr_table_entry_t *)arr->elts;
- /* Distinguish the balancer from woker */
+ /* Distinguish the balancer from worker */
if (strncasecmp(r, "balancer:", 9) == 0) {
proxy_balancer *balancer = ap_proxy_get_balancer(cmd->pool, conf, r);
if (!balancer) {
@@ -1169,6 +1208,9 @@ static const char *
const char *err = ap_proxy_add_worker(&worker, cmd->pool, conf, r);
if (err)
return apr_pstrcat(cmd->temp_pool, "ProxyPass ", err, NULL);
+ } else {
+ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
+ "worker %s already used by another worker", worker->name);
}
PROXY_COPY_CONF_PARAMS(worker, conf);
@@ -1436,9 +1478,6 @@ static const char *
proxy_server_conf *psf =
ap_get_module_config(parms->server->module_config, &proxy_module);
long s = atol(arg);
- if (s < 0) {
- return "ProxyMaxForwards must be greater or equal to zero..";
- }
psf->maxfwd = s;
psf->maxfwd_set = 1;
@@ -1575,6 +1614,9 @@ static const char *add_member(cmd_parms *cmd, void *dummy, const char *arg)
const char *err;
if ((err = ap_proxy_add_worker(&worker, cmd->pool, conf, name)) != NULL)
return apr_pstrcat(cmd->temp_pool, "BalancerMember ", err, NULL);
+ } else {
+ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server,
+ "worker %s already used by another worker", worker->name);
}
PROXY_COPY_CONF_PARAMS(worker, conf);
@@ -1685,6 +1727,15 @@ static const char *
return NULL;
}
+static const char *set_ftp_directory_charset(cmd_parms *cmd, void *dconf,
+ const char *arg)
+{
+ proxy_dir_conf *conf = dconf;
+
+ conf->ftp_directory_charset = arg;
+ return NULL;
+}
+
static void ap_add_per_proxy_conf(server_rec *s, ap_conf_vector_t *dir_config)
{
proxy_server_conf *sconf = ap_get_module_config(s->module_config,
@@ -1892,6 +1943,8 @@ static const command_rec proxy_cmds[] =
"Configure Status: proxy status to one of: on | off | full"),
AP_INIT_RAW_ARGS("ProxySet", set_proxy_param, NULL, RSRC_CONF|ACCESS_CONF,
"A balancer or worker name with list of params"),
+ AP_INIT_TAKE1("ProxyFtpDirCharset", set_ftp_directory_charset, NULL,
+ RSRC_CONF|ACCESS_CONF, "Define the character set for proxied FTP listings"),
{NULL}
};
@@ -1978,7 +2031,12 @@ static int proxy_status_hook(request_rec *r, int flags)
ap_rputs("\n\n<table border=\"0\"><tr>"
"<th>SSes</th><th>Timeout</th><th>Method</th>"
"</tr>\n<tr>", r);
- ap_rvputs(r, "<td>", balancer->sticky, NULL);
+ if (balancer->sticky) {
+ ap_rvputs(r, "<td>", balancer->sticky, NULL);
+ }
+ else {
+ ap_rputs("<td> - ", r);
+ }
ap_rprintf(r, "</td><td>%" APR_TIME_T_FMT "</td>",
apr_time_sec(balancer->timeout));
ap_rprintf(r, "<td>%s</td>\n",
diff --git a/modules/proxy/mod_proxy.h b/modules/proxy/mod_proxy.h
index e7879525..3944104e 100644
--- a/modules/proxy/mod_proxy.h
+++ b/modules/proxy/mod_proxy.h
@@ -94,7 +94,10 @@ enum enctype {
#endif /*APR_CHARSET_EBCDIC*/
/* default Max-Forwards header setting */
-#define DEFAULT_MAX_FORWARDS 10
+/* Set this to -1, which complies with RFC2616 by not setting
+ * max-forwards if the client didn't send it to us.
+ */
+#define DEFAULT_MAX_FORWARDS -1
/* static information about a remote proxy */
struct proxy_remote {
@@ -106,10 +109,12 @@ struct proxy_remote {
int use_regex; /* simple boolean. True if we have a regex pattern */
};
+#define PROXYPASS_NOCANON 0x01
struct proxy_alias {
const char *real;
const char *fake;
ap_regex_t *regex;
+ unsigned int flags;
};
struct dirconn_entry {
@@ -207,6 +212,7 @@ typedef struct {
apr_array_header_t* cookie_domains;
const apr_strmatch_pattern* cookie_path_str;
const apr_strmatch_pattern* cookie_domain_str;
+ const char *ftp_directory_charset;
} proxy_dir_conf;
typedef struct {
@@ -254,14 +260,16 @@ struct proxy_conn_pool {
#define PROXY_WORKER_NOT_USABLE_BITMAP ( PROXY_WORKER_IN_SHUTDOWN | \
PROXY_WORKER_DISABLED | PROXY_WORKER_STOPPED | PROXY_WORKER_IN_ERROR )
-#define PROXY_WORKER_IS_INITIALIZED(f) ( (f)->s->status & \
- PROXY_WORKER_INITIALIZED )
+/* NOTE: these check the shared status */
+#define PROXY_WORKER_IS_INITIALIZED(f) ( (f)->s && \
+ ( (f)->s->status & PROXY_WORKER_INITIALIZED ) )
-#define PROXY_WORKER_IS_STANDBY(f) ( (f)->s->status & \
- PROXY_WORKER_HOT_STANDBY )
+#define PROXY_WORKER_IS_STANDBY(f) ( (f)->s && \
+ ( (f)->s->status & PROXY_WORKER_HOT_STANDBY ) )
-#define PROXY_WORKER_IS_USABLE(f) ( !((f)->s->status & \
- (PROXY_WORKER_NOT_USABLE_BITMAP)) && PROXY_WORKER_IS_INITIALIZED(f) )
+#define PROXY_WORKER_IS_USABLE(f) ( (f)->s && \
+ ( !( (f)->s->status & PROXY_WORKER_NOT_USABLE_BITMAP) ) && \
+ PROXY_WORKER_IS_INITIALIZED(f) )
/* default worker retry timeout in seconds */
#define PROXY_WORKER_DEFAULT_RETRY 60
@@ -328,6 +336,7 @@ struct proxy_worker {
int lbset; /* load balancer cluster set */
apr_interval_time_t ping_timeout;
char ping_timeout_set;
+ char retry_set;
};
/*
diff --git a/modules/proxy/mod_proxy_ajp.c b/modules/proxy/mod_proxy_ajp.c
index d02b4364..bad2b26e 100644
--- a/modules/proxy/mod_proxy_ajp.c
+++ b/modules/proxy/mod_proxy_ajp.c
@@ -131,6 +131,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
int backend_failed = 0;
apr_off_t bb_len;
int data_sent = 0;
+ int headers_sent = 0;
int rv = 0;
apr_int32_t conn_poll_fd;
apr_pollfd_t *conn_poll;
@@ -326,17 +327,24 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
if (status != APR_SUCCESS) {
backend_failed = 1;
}
+ headers_sent = 1;
break;
case CMD_AJP13_SEND_BODY_CHUNK:
/* AJP13_SEND_BODY_CHUNK: piece of data */
status = ajp_parse_data(r, conn->data, &size, &buff);
if (status == APR_SUCCESS) {
+ /* AJP13_SEND_BODY_CHUNK with zero length
+ * is explicit flush message
+ */
if (size == 0) {
- /* AJP13_SEND_BODY_CHUNK with zero length
- * is explicit flush message
- */
- e = apr_bucket_flush_create(r->connection->bucket_alloc);
- APR_BRIGADE_INSERT_TAIL(output_brigade, e);
+ if (headers_sent) {
+ e = apr_bucket_flush_create(r->connection->bucket_alloc);
+ APR_BRIGADE_INSERT_TAIL(output_brigade, e);
+ }
+ else {
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+ "Ignoring flush message received before headers");
+ }
}
else {
e = apr_bucket_transient_create(buff, size,
diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c
index e2f22235..d2ae88bb 100644
--- a/modules/proxy/mod_proxy_balancer.c
+++ b/modules/proxy/mod_proxy_balancer.c
@@ -19,6 +19,7 @@
#define CORE_PRIVATE
#include "mod_proxy.h"
+#include "scoreboard.h"
#include "ap_mpm.h"
#include "apr_version.h"
#include "apr_hooks.h"
@@ -79,22 +80,37 @@ static int init_balancer_members(proxy_server_conf *conf, server_rec *s,
{
int i;
proxy_worker *workers;
+ int worker_is_initialized;
+ proxy_worker_stat *slot;
workers = (proxy_worker *)balancer->workers->elts;
for (i = 0; i < balancer->workers->nelts; i++) {
+ worker_is_initialized = PROXY_WORKER_IS_INITIALIZED(workers);
+ if (!worker_is_initialized) {
+ /*
+ * If the worker is not initialized check whether its scoreboard
+ * slot is already initialized.
+ */
+ slot = (proxy_worker_stat *) ap_get_scoreboard_lb(workers->id);
+ if (slot) {
+ worker_is_initialized = slot->status & PROXY_WORKER_INITIALIZED;
+ }
+ else {
+ worker_is_initialized = 0;
+ }
+ }
ap_proxy_initialize_worker_share(conf, workers, s);
ap_proxy_initialize_worker(workers, s);
+ if (!worker_is_initialized) {
+ /* Set to the original configuration */
+ workers->s->lbstatus = workers->s->lbfactor =
+ (workers->lbfactor ? workers->lbfactor : 1);
+ workers->s->lbset = workers->lbset;
+ }
++workers;
}
- workers = (proxy_worker *)balancer->workers->elts;
- for (i = 0; i < balancer->workers->nelts; i++) {
- /* Set to the original configuration */
- workers[i].s->lbstatus = workers[i].s->lbfactor =
- (workers[i].lbfactor ? workers[i].lbfactor : 1);
- workers[i].s->lbset = workers[i].lbset;
- }
/* Set default number of attempts to the number of
* workers.
*/
@@ -622,7 +638,7 @@ static int balancer_handler(request_rec *r)
proxy_worker *ws;
ws = ap_proxy_get_worker(r->pool, conf, name);
- if (ws) {
+ if (bsel && ws) {
worker = (proxy_worker *)bsel->workers->elts;
for (n = 0; n < bsel->workers->nelts; n++) {
if (strcasecmp(worker->name, ws->name) == 0) {
@@ -634,33 +650,10 @@ static int balancer_handler(request_rec *r)
}
}
/* First set the params */
- if (bsel) {
- const char *val;
- if ((val = apr_table_get(params, "ss"))) {
- if (strlen(val))
- bsel->sticky = apr_pstrdup(conf->pool, val);
- else
- bsel->sticky = NULL;
- }
- if ((val = apr_table_get(params, "tm"))) {
- int ival = atoi(val);
- if (ival >= 0)
- bsel->timeout = apr_time_from_sec(ival);
- }
- if ((val = apr_table_get(params, "fa"))) {
- int ival = atoi(val);
- if (ival >= 0)
- bsel->max_attempts = ival;
- bsel->max_attempts_set = 1;
- }
- if ((val = apr_table_get(params, "lm"))) {
- proxy_balancer_method *provider;
- provider = ap_lookup_provider(PROXY_LBMETHOD, val, "0");
- if (provider) {
- bsel->lbmethod = provider;
- }
- }
- }
+ /*
+ * Note that it is not possible set the proxy_balancer because it is not
+ * in shared memory.
+ */
if (wsel) {
const char *val;
if ((val = apr_table_get(params, "lf"))) {
@@ -727,7 +720,7 @@ static int balancer_handler(request_rec *r)
ap_rputs("</httpd:manager>", r);
}
else {
- ap_set_content_type(r, "text/html");
+ ap_set_content_type(r, "text/html; charset=ISO-8859-1");
ap_rputs(DOCTYPE_HTML_3_2
"<html><head><title>Balancer Manager</title></head>\n", r);
ap_rputs("<body><h1>Load Balancer Manager for ", r);
@@ -740,14 +733,16 @@ static int balancer_handler(request_rec *r)
for (i = 0; i < conf->balancers->nelts; i++) {
ap_rputs("<hr />\n<h3>LoadBalancer Status for ", r);
- ap_rvputs(r, "<a href=\"", r->uri, "?b=",
- balancer->name + sizeof("balancer://") - 1,
- "\">", NULL);
- ap_rvputs(r, balancer->name, "</a></h3>\n\n", NULL);
+ ap_rvputs(r, balancer->name, "</h3>\n\n", NULL);
ap_rputs("\n\n<table border=\"0\" style=\"text-align: left;\"><tr>"
"<th>StickySession</th><th>Timeout</th><th>FailoverAttempts</th><th>Method</th>"
"</tr>\n<tr>", r);
- ap_rvputs(r, "<td>", balancer->sticky, NULL);
+ if (balancer->sticky) {
+ ap_rvputs(r, "<td>", balancer->sticky, NULL);
+ }
+ else {
+ ap_rputs("<td> - ", r);
+ }
ap_rprintf(r, "</td><td>%" APR_TIME_T_FMT "</td>",
apr_time_sec(balancer->timeout));
ap_rprintf(r, "<td>%d</td>\n", balancer->max_attempts);
@@ -769,8 +764,10 @@ static int balancer_handler(request_rec *r)
ap_escape_uri(r->pool, worker->name),
"\">", NULL);
ap_rvputs(r, worker->name, "</a></td>", NULL);
- ap_rvputs(r, "<td>", worker->s->route, NULL);
- ap_rvputs(r, "</td><td>", worker->s->redirect, NULL);
+ ap_rvputs(r, "<td>", ap_escape_html(r->pool, worker->s->route),
+ NULL);
+ ap_rvputs(r, "</td><td>",
+ ap_escape_html(r->pool, worker->s->redirect), NULL);
ap_rprintf(r, "</td><td>%d</td>", worker->s->lbfactor);
ap_rprintf(r, "<td>%d</td><td>", worker->s->lbset);
if (worker->s->status & PROXY_WORKER_DISABLED)
@@ -808,10 +805,12 @@ static int balancer_handler(request_rec *r)
ap_rputs("<tr><td>LB Set:</td><td><input name=\"ls\" type=text ", r);
ap_rprintf(r, "value=\"%d\"></td></tr>\n", wsel->s->lbset);
ap_rputs("<tr><td>Route:</td><td><input name=\"wr\" type=text ", r);
- ap_rvputs(r, "value=\"", wsel->route, NULL);
+ ap_rvputs(r, "value=\"", ap_escape_html(r->pool, wsel->s->route),
+ NULL);
ap_rputs("\"></td></tr>\n", r);
ap_rputs("<tr><td>Route Redirect:</td><td><input name=\"rr\" type=text ", r);
- ap_rvputs(r, "value=\"", wsel->redirect, NULL);
+ ap_rvputs(r, "value=\"", ap_escape_html(r->pool, wsel->s->redirect),
+ NULL);
ap_rputs("\"></td></tr>\n", r);
ap_rputs("<tr><td>Status:</td><td>Disabled: <input name=\"dw\" value=\"Disable\" type=radio", r);
if (wsel->s->status & PROXY_WORKER_DISABLED)
@@ -828,41 +827,6 @@ static int balancer_handler(request_rec *r)
"\">\n</form>\n", NULL);
ap_rputs("<hr />\n", r);
}
- else if (bsel) {
- ap_rputs("<h3>Edit balancer settings for ", r);
- ap_rvputs(r, bsel->name, "</h3>\n", NULL);
- ap_rvputs(r, "<form method=\"GET\" action=\"", NULL);
- ap_rvputs(r, r->uri, "\">\n<dl>", NULL);
- ap_rputs("<table><tr><td>StickySession Identifier:</td><td><input name=\"ss\" type=text ", r);
- if (bsel->sticky)
- ap_rvputs(r, "value=\"", bsel->sticky, "\"", NULL);
- ap_rputs("></td><tr>\n<tr><td>Timeout:</td><td><input name=\"tm\" type=text ", r);
- ap_rprintf(r, "value=\"%" APR_TIME_T_FMT "\"></td></tr>\n",
- apr_time_sec(bsel->timeout));
- ap_rputs("<tr><td>Failover Attempts:</td><td><input name=\"fa\" type=text ", r);
- ap_rprintf(r, "value=\"%d\"></td></tr>\n",
- bsel->max_attempts);
- ap_rputs("<tr><td>LB Method:</td><td><select name=\"lm\">", r);
- {
- apr_array_header_t *methods;
- ap_list_provider_names_t *method;
- int i;
- methods = ap_list_provider_names(r->pool, PROXY_LBMETHOD, "0");
- method = (ap_list_provider_names_t *)methods->elts;
- for (i = 0; i < methods->nelts; i++) {
- ap_rprintf(r, "<option value=\"%s\" %s>%s</option>", method->provider_name,
- (!strcasecmp(bsel->lbmethod->name, method->provider_name)) ? "selected" : "",
- method->provider_name);
- method++;
- }
- }
- ap_rputs("</select></td></tr>\n", r);
- ap_rputs("<tr><td colspan=2><input type=submit value=\"Submit\"></td></tr>\n", r);
- ap_rvputs(r, "</table>\n<input type=hidden name=\"b\" ", NULL);
- ap_rvputs(r, "value=\"", bsel->name + sizeof("balancer://") - 1,
- "\">\n</form>\n", NULL);
- ap_rputs("<hr />\n", r);
- }
ap_rputs(ap_psignature("",r), r);
ap_rputs("</body></html>\n", r);
}
diff --git a/modules/proxy/mod_proxy_ftp.c b/modules/proxy/mod_proxy_ftp.c
index eac6eff6..3cacac6e 100644
--- a/modules/proxy/mod_proxy_ftp.c
+++ b/modules/proxy/mod_proxy_ftp.c
@@ -517,6 +517,14 @@ static apr_status_t proxy_send_dir_filter(ap_filter_t *f,
}
filename = strrchr(ctx->buffer, ' ');
+ if (filename == NULL) {
+ /* Line is broken. Ignore it. */
+ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, r->server,
+ "proxy_ftp: could not parse line %s", ctx->buffer);
+ /* erase buffer for next time around */
+ ctx->buffer[0] = 0;
+ continue; /* while state is BODY */
+ }
*(filename++) = '\0';
/* handle filenames with spaces in 'em */
@@ -1682,7 +1690,13 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker,
/* set content-type */
if (dirlisting) {
- ap_set_content_type(r, "text/html");
+ proxy_dir_conf *dconf = ap_get_module_config(r->per_dir_config,
+ &proxy_module);
+
+ ap_set_content_type(r, apr_pstrcat(p, "text/html;charset=",
+ dconf->ftp_directory_charset ?
+ dconf->ftp_directory_charset :
+ "ISO-8859-1", NULL));
}
else {
if (r->content_type) {
diff --git a/modules/proxy/mod_proxy_http.c b/modules/proxy/mod_proxy_http.c
index 534cbb5d..e5f654bb 100644
--- a/modules/proxy/mod_proxy_http.c
+++ b/modules/proxy/mod_proxy_http.c
@@ -17,6 +17,7 @@
/* HTTP routines for Apache proxy */
#include "mod_proxy.h"
+#include "ap_regex.h"
module AP_MODULE_DECLARE_DATA proxy_http_module;
@@ -80,7 +81,26 @@ static int proxy_http_canon(request_rec *r, char *url)
search = r->args;
/* process path */
- path = ap_proxy_canonenc(r->pool, url, strlen(url), enc_path, 0, r->proxyreq);
+ /* In a reverse proxy, our URL has been processed, so canonicalise
+ * unless proxy-nocanon is set to say it's raw
+ * In a forward proxy, we have and MUST NOT MANGLE the original.
+ */
+ switch (r->proxyreq) {
+ default: /* wtf are we doing here? */
+ case PROXYREQ_REVERSE:
+ if (apr_table_get(r->notes, "proxy-nocanon")) {
+ path = url; /* this is the raw path */
+ }
+ else {
+ path = ap_proxy_canonenc(r->pool, url, strlen(url),
+ enc_path, 0, r->proxyreq);
+ }
+ break;
+ case PROXYREQ_PROXY:
+ path = url;
+ break;
+ }
+
if (path == NULL)
return HTTP_BAD_REQUEST;
@@ -98,29 +118,102 @@ static int proxy_http_canon(request_rec *r, char *url)
}
/* Clear all connection-based headers from the incoming headers table */
-static void ap_proxy_clear_connection(apr_pool_t *p, apr_table_t *headers)
+typedef struct header_dptr {
+ apr_pool_t *pool;
+ apr_table_t *table;
+ apr_time_t time;
+} header_dptr;
+static ap_regex_t *warn_rx;
+static int clean_warning_headers(void *data, const char *key, const char *val)
{
+ apr_table_t *headers = ((header_dptr*)data)->table;
+ apr_pool_t *pool = ((header_dptr*)data)->pool;
+ char *warning;
+ char *date;
+ apr_time_t warn_time;
+ const int nmatch = 3;
+ ap_regmatch_t pmatch[3];
+
+ if (headers == NULL) {
+ ((header_dptr*)data)->table = headers = apr_table_make(pool, 2);
+ }
+/*
+ * Parse this, suckers!
+ *
+ * Warning = "Warning" ":" 1#warning-value
+ *
+ * warning-value = warn-code SP warn-agent SP warn-text
+ * [SP warn-date]
+ *
+ * warn-code = 3DIGIT
+ * warn-agent = ( host [ ":" port ] ) | pseudonym
+ * ; the name or pseudonym of the server adding
+ * ; the Warning header, for use in debugging
+ * warn-text = quoted-string
+ * warn-date = <"> HTTP-date <">
+ *
+ * Buggrit, use a bloomin' regexp!
+ * (\d{3}\s+\S+\s+\".*?\"(\s+\"(.*?)\")?) --> whole in $1, date in $3
+ */
+ while (!ap_regexec(warn_rx, val, nmatch, pmatch, 0)) {
+ warning = apr_pstrndup(pool, val+pmatch[0].rm_so,
+ pmatch[0].rm_eo - pmatch[0].rm_so);
+ warn_time = 0;
+ if (pmatch[2].rm_eo > pmatch[2].rm_so) {
+ /* OK, we have a date here */
+ date = apr_pstrndup(pool, val+pmatch[2].rm_so,
+ pmatch[2].rm_eo - pmatch[2].rm_so);
+ warn_time = apr_date_parse_http(date);
+ }
+ if (!warn_time || (warn_time == ((header_dptr*)data)->time)) {
+ apr_table_addn(headers, key, warning);
+ }
+ val += pmatch[0].rm_eo;
+ }
+ return 1;
+}
+static apr_table_t *ap_proxy_clean_warnings(apr_pool_t *p, apr_table_t *headers)
+{
+ header_dptr x;
+ x.pool = p;
+ x.table = NULL;
+ x.time = apr_date_parse_http(apr_table_get(headers, "Date"));
+ apr_table_do(clean_warning_headers, &x, headers, "Warning", NULL);
+ if (x.table != NULL) {
+ apr_table_unset(headers, "Warning");
+ return apr_table_overlay(p, headers, x.table);
+ }
+ else {
+ return headers;
+ }
+}
+static int clear_conn_headers(void *data, const char *key, const char *val)
+{
+ apr_table_t *headers = ((header_dptr*)data)->table;
+ apr_pool_t *pool = ((header_dptr*)data)->pool;
const char *name;
- char *next = apr_pstrdup(p, apr_table_get(headers, "Connection"));
-
- apr_table_unset(headers, "Proxy-Connection");
- if (!next)
- return;
-
+ char *next = apr_pstrdup(pool, val);
while (*next) {
name = next;
while (*next && !apr_isspace(*next) && (*next != ',')) {
++next;
}
while (*next && (apr_isspace(*next) || (*next == ','))) {
- *next = '\0';
- ++next;
+ *next++ = '\0';
}
apr_table_unset(headers, name);
}
+ return 1;
+}
+static void ap_proxy_clear_connection(apr_pool_t *p, apr_table_t *headers)
+{
+ header_dptr x;
+ x.pool = p;
+ x.table = headers;
+ apr_table_unset(headers, "Proxy-Connection");
+ apr_table_do(clear_conn_headers, &x, headers, "Connection", NULL);
apr_table_unset(headers, "Connection");
}
-
static void add_te_chunked(apr_pool_t *p,
apr_bucket_alloc_t *bucket_alloc,
apr_bucket_brigade *header_brigade)
@@ -755,19 +848,21 @@ apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r,
|| !strcasecmp(headers_in[counter].key, "Trailer")
|| !strcasecmp(headers_in[counter].key, "Upgrade")
- /* XXX: @@@ FIXME: "Proxy-Authorization" should *only* be
- * suppressed if THIS server requested the authentication,
- * not when a frontend proxy requested it!
- *
- * The solution to this problem is probably to strip out
- * the Proxy-Authorisation header in the authorisation
- * code itself, not here. This saves us having to signal
- * somehow whether this request was authenticated or not.
- */
- || !strcasecmp(headers_in[counter].key,"Proxy-Authorization")
- || !strcasecmp(headers_in[counter].key,"Proxy-Authenticate")) {
+ ) {
continue;
}
+ /* Do we want to strip Proxy-Authorization ?
+ * If we haven't used it, then NO
+ * If we have used it then MAYBE: RFC2616 says we MAY propagate it.
+ * So let's make it configurable by env.
+ */
+ if (!strcasecmp(headers_in[counter].key,"Proxy-Authorization")) {
+ if (r->user != NULL) { /* we've authenticated */
+ if (!apr_table_get(r->subprocess_env, "Proxy-Chain-Auth")) {
+ continue;
+ }
+ }
+ }
/* Skip Transfer-Encoding and Content-Length for now.
*/
@@ -1233,6 +1328,9 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
int pread_len = 0;
apr_table_t *save_table;
int backend_broke = 0;
+ static const char *hop_by_hop_hdrs[] =
+ {"Keep-Alive", "Proxy-Authenticate", "TE", "Trailer", "Upgrade", NULL};
+ int i;
bb = apr_brigade_create(p, c->bucket_alloc);
@@ -1373,6 +1471,13 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
}
ap_proxy_pre_http_request(origin,rp);
+ /* Clear hop-by-hop headers */
+ for (i=0; hop_by_hop_hdrs[i]; ++i) {
+ apr_table_unset(r->headers_out, hop_by_hop_hdrs[i]);
+ }
+ /* Delete warnings with wrong date */
+ r->headers_out = ap_proxy_clean_warnings(p, r->headers_out);
+
/* handle Via header in response */
if (conf->viaopt != via_off && conf->viaopt != via_block) {
const char *server_name = ap_get_server_name(r);
@@ -1384,8 +1489,8 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
if (server_name == r->hostname)
server_name = r->server->server_hostname;
/* create a "Via:" response header entry and merge it */
- apr_table_mergen(r->headers_out, "Via",
- (conf->viaopt == via_full)
+ apr_table_addn(r->headers_out, "Via",
+ (conf->viaopt == via_full)
? apr_psprintf(p, "%d.%d %s%s (%s)",
HTTP_VERSION_MAJOR(r->proto_num),
HTTP_VERSION_MINOR(r->proto_num),
@@ -1415,9 +1520,33 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
interim_response = ap_is_HTTP_INFO(r->status);
if (interim_response) {
+ /* RFC2616 tells us to forward this.
+ *
+ * OTOH, an interim response here may mean the backend
+ * is playing sillybuggers. The Client didn't ask for
+ * it within the defined HTTP/1.1 mechanisms, and if
+ * it's an extension, it may also be unsupported by us.
+ *
+ * There's also the possibility that changing existing
+ * behaviour here might break something.
+ *
+ * So let's make it configurable.
+ */
+ const char *policy = apr_table_get(r->subprocess_env,
+ "proxy-interim-response");
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
"proxy: HTTP: received interim %d response",
r->status);
+ if (!policy || !strcasecmp(policy, "RFC")) {
+ ap_send_interim_response(r, 1);
+ }
+ /* FIXME: refine this to be able to specify per-response-status
+ * policies and maybe also add option to bail out with 502
+ */
+ else if (strcasecmp(policy, "Suppress")) {
+ ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
+ "undefined proxy interim response policy");
+ }
}
/* Moved the fixups of Date headers and those affected by
* ProxyPassReverse/etc from here to ap_proxy_read_headers
@@ -1754,11 +1883,17 @@ cleanup:
}
return status;
}
-
+static apr_status_t warn_rx_free(void *p)
+{
+ ap_pregfree((apr_pool_t*)p, warn_rx);
+ return APR_SUCCESS;
+}
static void ap_proxy_http_register_hook(apr_pool_t *p)
{
proxy_hook_scheme_handler(proxy_http_handler, NULL, NULL, APR_HOOK_FIRST);
proxy_hook_canon_handler(proxy_http_canon, NULL, NULL, APR_HOOK_FIRST);
+ warn_rx = ap_pregcomp(p, "[0-9]{3}[ \t]+[^ \t]+[ \t]+\"[^\"]*\"([ \t]+\"([^\"]+)\")?", 0);
+ apr_pool_cleanup_register(p, p, warn_rx_free, apr_pool_cleanup_null);
}
module AP_MODULE_DECLARE_DATA proxy_http_module = {
diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c
index 934f9027..910f3610 100644
--- a/modules/proxy/proxy_util.c
+++ b/modules/proxy/proxy_util.c
@@ -495,7 +495,7 @@ PROXY_DECLARE(int) ap_proxyerror(request_rec *r, int statuscode, const char *mes
apr_table_setn(r->notes, "error-notes",
apr_pstrcat(r->pool,
"The proxy server could not handle the request "
- "<em><a href=\"", ap_escape_uri(r->pool, r->uri),
+ "<em><a href=\"", ap_escape_html(r->pool, r->uri),
"\">", ap_escape_html(r->pool, r->method),
"&nbsp;",
ap_escape_html(r->pool, r->uri), "</a></em>.<p>\n"
@@ -907,6 +907,7 @@ PROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *c
return HTTP_FORBIDDEN;
}
while (conf_addr) {
+ uri_addr = src_uri_addr;
while (uri_addr) {
char *conf_ip;
char *uri_ip;
@@ -995,12 +996,14 @@ PROXY_DECLARE(apr_status_t) ap_proxy_string_read(conn_rec *c, apr_bucket_brigade
len = (bufflen-1)-(pos-buff);
}
if (len > 0) {
- pos = apr_cpystrn(pos, response, len);
+ memcpy(pos, response, len);
+ pos += len;
}
}
APR_BUCKET_REMOVE(e);
apr_bucket_destroy(e);
}
+ *pos = '\0';
}
return APR_SUCCESS;
@@ -1647,7 +1650,7 @@ PROXY_DECLARE(void) ap_proxy_initialize_worker_share(proxy_server_conf *conf,
void *score = NULL;
#endif
- if (worker->s && PROXY_WORKER_IS_INITIALIZED(worker)) {
+ if (PROXY_WORKER_IS_INITIALIZED(worker)) {
/* The worker share is already initialized */
ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
"proxy: worker %s already initialized",
@@ -1719,7 +1722,7 @@ PROXY_DECLARE(apr_status_t) ap_proxy_initialize_worker(proxy_worker *worker, ser
}
/* Set default parameters */
- if (!worker->retry) {
+ if (!worker->retry_set) {
worker->retry = apr_time_from_sec(PROXY_WORKER_DEFAULT_RETRY);
}
/* By default address is reusable */
@@ -2053,7 +2056,7 @@ static int is_socket_connected(apr_socket_t *socket)
else
return 0;
}
- else if (APR_STATUS_IS_EAGAIN(status)) {
+ else if (APR_STATUS_IS_EAGAIN(status) || APR_STATUS_IS_TIMEUP(status)) {
return 1;
}
return 0;
diff --git a/modules/ssl/mod_ssl.c b/modules/ssl/mod_ssl.c
index 35d0b88b..01d5b43b 100644
--- a/modules/ssl/mod_ssl.c
+++ b/modules/ssl/mod_ssl.c
@@ -500,7 +500,7 @@ static void ssl_register_hooks(apr_pool_t *p)
ap_hook_insert_filter (ssl_hook_Insert_Filter, NULL,NULL, APR_HOOK_MIDDLE);
/* ap_hook_handler (ssl_hook_Upgrade, NULL,NULL, APR_HOOK_MIDDLE); */
- ssl_var_register();
+ ssl_var_register(p);
APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable);
APR_REGISTER_OPTIONAL_FN(ssl_engine_disable);
diff --git a/modules/ssl/mod_ssl.dsp b/modules/ssl/mod_ssl.dsp
index 95d41991..19aa6fb6 100644
--- a/modules/ssl/mod_ssl.dsp
+++ b/modules/ssl/mod_ssl.dsp
@@ -44,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE=1" /Fd"Release\mod_ssl_src" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE" /D "HAVE_OPENSSL_ENGINE_H" /D "HAVE_ENGINE_INIT" /D "HAVE_ENGINE_LOAD_BUILTIN_ENGINES" /Fd"Release\mod_ssl_src" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -76,7 +76,7 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE=1" /Fd"Debug\mod_ssl_src" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE" /D "HAVE_OPENSSL_ENGINE_H" /D "HAVE_ENGINE_INIT" /D "HAVE_ENGINE_LOAD_BUILTIN_ENGINES" /Fd"Debug\mod_ssl_src" /FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -108,7 +108,7 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE=1" /Fd"Release\mod_ssl_src" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../../include" /I "../generators" /I "../../srclib/apr/include" /I "../../srclib/apr-util/include" /I "../../srclib/openssl/inc32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "WIN32_LEAN_AND_MEAN" /D "NO_IDEA" /D "NO_RC5" /D "NO_MDC2" /D "OPENSSL_NO_IDEA" /D "OPENSSL_NO_RC5" /D "OPENSSL_NO_MDC2" /D "HAVE_OPENSSL" /D "HAVE_SSL_SET_STATE" /D "HAVE_OPENSSL_ENGINE_H" /D "HAVE_ENGINE_INIT" /D "HAVE_ENGINE_LOAD_BUILTIN_ENGINES" /Fd"Release\mod_ssl_src" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c
index ff2a4946..268f7f24 100644
--- a/modules/ssl/ssl_engine_init.c
+++ b/modules/ssl/ssl_engine_init.c
@@ -361,7 +361,7 @@ static void ssl_init_ctx_protocol(server_rec *s,
modssl_ctx_t *mctx)
{
SSL_CTX *ctx = NULL;
- SSL_METHOD *method = NULL;
+ MODSSL_SSL_METHOD_CONST SSL_METHOD *method = NULL;
char *cp;
int protocol = mctx->protocol;
diff --git a/modules/ssl/ssl_engine_io.c b/modules/ssl/ssl_engine_io.c
index f3917ea1..1264c289 100644
--- a/modules/ssl/ssl_engine_io.c
+++ b/modules/ssl/ssl_engine_io.c
@@ -1541,14 +1541,25 @@ int ssl_io_buffer_fill(request_rec *r)
apr_brigade_destroy(tempb);
- /* Insert the filter which will supply the buffered data. */
+ /* After consuming all protocol-level input, remove all protocol-level
+ * filters. It should strictly only be necessary to remove filters
+ * at exactly ftype == AP_FTYPE_PROTOCOL, since this filter will
+ * precede all > AP_FTYPE_PROTOCOL anyway. */
+ while (r->proto_input_filters->frec->ftype < AP_FTYPE_CONNECTION) {
+ ap_remove_input_filter(r->proto_input_filters);
+ }
+
+ /* Insert the filter which will supply the buffered content. */
ap_add_input_filter(ssl_io_buffer, ctx, r, c);
return 0;
}
/* This input filter supplies the buffered request body to the caller
- * from the brigade stored in f->ctx. */
+ * from the brigade stored in f->ctx. Note that the placement of this
+ * filter in the filter stack is important; it must be the first
+ * r->proto_input_filter; lower-typed filters will not be preserved
+ * across internal redirects (see PR 43738). */
static apr_status_t ssl_io_filter_buffer(ap_filter_t *f,
apr_bucket_brigade *bb,
ap_input_mode_t mode,
@@ -1567,6 +1578,19 @@ static apr_status_t ssl_io_filter_buffer(ap_filter_t *f,
return APR_ENOTIMPL;
}
+ if (APR_BRIGADE_EMPTY(ctx->bb)) {
+ /* Suprisingly (and perhaps, wrongly), the request body can be
+ * pulled from the input filter stack more than once; a
+ * handler may read it, and ap_discard_request_body() will
+ * attempt to do so again after *every* request. So input
+ * filters must be prepared to give up an EOS if invoked after
+ * initially reading the request. The HTTP_IN filter does this
+ * with its ->eos_sent flag. */
+
+ APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_eos_create(f->c->bucket_alloc));
+ return APR_SUCCESS;
+ }
+
if (mode == AP_MODE_READBYTES) {
apr_bucket *e;
@@ -1621,8 +1645,9 @@ static apr_status_t ssl_io_filter_buffer(ap_filter_t *f,
}
ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, f->c,
- "buffered SSL brigade now exhausted; removing filter");
- ap_remove_input_filter(f);
+ "buffered SSL brigade exhausted");
+ /* Note that the filter must *not* be removed here; it may be
+ * invoked again, see comment above. */
}
return APR_SUCCESS;
@@ -1665,6 +1690,9 @@ void ssl_io_filter_init(conn_rec *c, SSL *ssl)
filter_ctx->pbioWrite = BIO_new(&bio_filter_out_method);
filter_ctx->pbioWrite->ptr = (void *)bio_filter_out_ctx_new(filter_ctx, c);
+ /* We insert a clogging input filter. Let the core know. */
+ c->clogging_input_filters = 1;
+
ssl_io_input_add_filter(filter_ctx, c, ssl);
SSL_set_bio(ssl, filter_ctx->pbioRead, filter_ctx->pbioWrite);
@@ -1691,7 +1719,7 @@ void ssl_io_filter_register(apr_pool_t *p)
ap_register_input_filter (ssl_io_filter, ssl_io_filter_input, NULL, AP_FTYPE_CONNECTION + 5);
ap_register_output_filter (ssl_io_filter, ssl_io_filter_output, NULL, AP_FTYPE_CONNECTION + 5);
- ap_register_input_filter (ssl_io_buffer, ssl_io_filter_buffer, NULL, AP_FTYPE_PROTOCOL - 1);
+ ap_register_input_filter (ssl_io_buffer, ssl_io_filter_buffer, NULL, AP_FTYPE_PROTOCOL);
return;
}
diff --git a/modules/ssl/ssl_engine_vars.c b/modules/ssl/ssl_engine_vars.c
index 5d82a464..97d8d9a7 100644
--- a/modules/ssl/ssl_engine_vars.c
+++ b/modules/ssl/ssl_engine_vars.c
@@ -58,12 +58,32 @@ static int ssl_is_https(conn_rec *c)
return sslconn && sslconn->ssl;
}
-void ssl_var_register(void)
+static const char var_interface[] = "mod_ssl/" MOD_SSL_VERSION;
+static char var_library_interface[] = SSL_LIBRARY_TEXT;
+static char *var_library = NULL;
+
+void ssl_var_register(apr_pool_t *p)
{
+ char *cp, *cp2;
+
APR_REGISTER_OPTIONAL_FN(ssl_is_https);
APR_REGISTER_OPTIONAL_FN(ssl_var_lookup);
APR_REGISTER_OPTIONAL_FN(ssl_ext_lookup);
- return;
+
+ /* Perform once-per-process library version determination: */
+ var_library = apr_pstrdup(p, SSL_LIBRARY_DYNTEXT);
+
+ if ((cp = strchr(var_library, ' ')) != NULL) {
+ *cp = '/';
+ if ((cp2 = strchr(cp, ' ')) != NULL)
+ *cp2 = NUL;
+ }
+
+ if ((cp = strchr(var_library_interface, ' ')) != NULL) {
+ *cp = '/';
+ if ((cp2 = strchr(cp, ' ')) != NULL)
+ *cp2 = NUL;
+ }
}
/* This function must remain safe to use for a non-SSL connection. */
@@ -635,41 +655,17 @@ static void ssl_var_lookup_ssl_cipher_bits(SSL *ssl, int *usekeysize, int *algke
static char *ssl_var_lookup_ssl_version(apr_pool_t *p, char *var)
{
- static char interface[] = "mod_ssl/" MOD_SSL_VERSION;
- static char library_interface[] = SSL_LIBRARY_TEXT;
- static char *library = NULL;
- char *result;
-
- if (!library) {
- char *cp, *cp2;
- library = apr_pstrdup(p, SSL_LIBRARY_DYNTEXT);
- if ((cp = strchr(library, ' ')) != NULL) {
- *cp = '/';
- if ((cp2 = strchr(cp, ' ')) != NULL)
- *cp2 = NUL;
- }
- if ((cp = strchr(library_interface, ' ')) != NULL) {
- *cp = '/';
- if ((cp2 = strchr(cp, ' ')) != NULL)
- *cp2 = NUL;
- }
- }
-
if (strEQ(var, "INTERFACE")) {
- result = apr_pstrdup(p, interface);
+ return apr_pstrdup(p, var_interface);
}
else if (strEQ(var, "LIBRARY_INTERFACE")) {
- result = apr_pstrdup(p, library_interface);
+ return apr_pstrdup(p, var_library_interface);
}
else if (strEQ(var, "LIBRARY")) {
- result = apr_pstrdup(p, library);
- }
- else {
- result = NULL;
+ return apr_pstrdup(p, var_library);
}
- return result;
+ return NULL;
}
-
const char *ssl_ext_lookup(apr_pool_t *p, conn_rec *c, int peer,
const char *oidnum)
diff --git a/modules/ssl/ssl_expr_eval.c b/modules/ssl/ssl_expr_eval.c
index b6965f31..f9d6f5ec 100644
--- a/modules/ssl/ssl_expr_eval.c
+++ b/modules/ssl/ssl_expr_eval.c
@@ -239,7 +239,7 @@ apr_array_header_t *ssl_extlist_by_oid(request_rec *r, const char *oidstr)
BIO_get_mem_ptr(bio, &buf);
- *new = apr_pstrdup(r->pool, buf->data);
+ *new = apr_pstrmemdup(r->pool, buf->data, buf->length);
}
BIO_vfree(bio);
diff --git a/modules/ssl/ssl_private.h b/modules/ssl/ssl_private.h
index b66e6023..64ad36be 100644
--- a/modules/ssl/ssl_private.h
+++ b/modules/ssl/ssl_private.h
@@ -648,7 +648,9 @@ void ssl_die(void);
void ssl_log_ssl_error(const char *, int, int, server_rec *);
/** Variables */
-void ssl_var_register(void);
+
+/* Register variables for the lifetime of the process pool 'p'. */
+void ssl_var_register(apr_pool_t *p);
char *ssl_var_lookup(apr_pool_t *, server_rec *, conn_rec *, request_rec *, char *);
const char *ssl_ext_lookup(apr_pool_t *p, conn_rec *c, int peer, const char *oid);
diff --git a/modules/ssl/ssl_scache_dbm.c b/modules/ssl/ssl_scache_dbm.c
index d495ad45..cdcce9d8 100644
--- a/modules/ssl/ssl_scache_dbm.c
+++ b/modules/ssl/ssl_scache_dbm.c
@@ -370,8 +370,7 @@ static void ssl_scache_dbm_expire(server_rec *s)
bDelete = TRUE;
}
if (bDelete) {
- if ((keylist[keyidx].dptr = apr_palloc(p, dbmkey.dsize)) != NULL) {
- memcpy(keylist[keyidx].dptr, dbmkey.dptr, dbmkey.dsize);
+ if ((keylist[keyidx].dptr = apr_pmemdup(p, dbmkey.dptr, dbmkey.dsize)) != NULL) {
keylist[keyidx].dsize = dbmkey.dsize;
keyidx++;
if (keyidx == KEYMAX)
diff --git a/modules/ssl/ssl_toolkit_compat.h b/modules/ssl/ssl_toolkit_compat.h
index d8bad75a..430127c1 100644
--- a/modules/ssl/ssl_toolkit_compat.h
+++ b/modules/ssl/ssl_toolkit_compat.h
@@ -105,6 +105,12 @@
# define MODSSL_D2I_X509_CONST
#endif
+#if (OPENSSL_VERSION_NUMBER >= 0x00909000)
+# define MODSSL_SSL_METHOD_CONST const
+#else
+# define MODSSL_SSL_METHOD_CONST
+#endif
+
#define modssl_X509_verify_cert X509_verify_cert
typedef int (modssl_read_bio_cb_fn)(char*,int,int,void*);
diff --git a/os/netware/util_nw.c b/os/netware/util_nw.c
index c5b964c8..bfa196e6 100644
--- a/os/netware/util_nw.c
+++ b/os/netware/util_nw.c
@@ -18,7 +18,7 @@
#include "http_log.h"
#include <netware.h>
-#include <nks\netware.h>
+#include <nks/netware.h>
int nlmUnloadSignaled(int wait);
event_handle_t eh;
diff --git a/os/win32/BaseAddr.ref b/os/win32/BaseAddr.ref
index 85090bd3..e6f05d61 100644
--- a/os/win32/BaseAddr.ref
+++ b/os/win32/BaseAddr.ref
@@ -80,3 +80,4 @@ mod_case_filter.so 0x6F9C0000 0x00010000
mod_case_filter_in.so 0x6F9B0000 0x00010000
mod_filter.so 0x6F9A0000 0x00010000
mod_dav_lock.so 0x6F990000 0x00010000
+mod_substitute.so 0x6F980000 0x00010000
diff --git a/os/win32/os.h b/os/win32/os.h
index ff7dc008..8b9f8acb 100644
--- a/os/win32/os.h
+++ b/os/win32/os.h
@@ -87,9 +87,6 @@ FARPROC ap_load_dll_func(ap_dlltoken_e fnLib, char* fnName, int ordinal);
PSECURITY_ATTRIBUTES GetNullACL();
void CleanNullACL(void *sa);
-DWORD wait_for_many_objects(DWORD nCount, CONST HANDLE *lpHandles,
- DWORD dwSeconds);
-
int set_listeners_noninheritable(apr_pool_t *p);
diff --git a/os/win32/util_win32.c b/os/win32/util_win32.c
index a0bb7fd7..ab96ff11 100644
--- a/os/win32/util_win32.c
+++ b/os/win32/util_win32.c
@@ -145,42 +145,3 @@ void CleanNullACL(void *sa)
LocalFree(sa);
}
}
-
-
-/*
- * The Win32 call WaitForMultipleObjects will only allow you to wait for
- * a maximum of MAXIMUM_WAIT_OBJECTS (current 64). Since the threading
- * model in the multithreaded version of apache wants to use this call,
- * we are restricted to a maximum of 64 threads. This is a simplistic
- * routine that will increase this size.
- */
-DWORD wait_for_many_objects(DWORD nCount, CONST HANDLE *lpHandles,
- DWORD dwSeconds)
-{
- time_t tStopTime;
- DWORD dwRet = WAIT_TIMEOUT;
- DWORD dwIndex=0;
- BOOL bFirst = TRUE;
-
- tStopTime = time(NULL) + dwSeconds;
-
- do {
- if (!bFirst)
- Sleep(1000);
- else
- bFirst = FALSE;
-
- for (dwIndex = 0; dwIndex * MAXIMUM_WAIT_OBJECTS < nCount; dwIndex++) {
- dwRet = WaitForMultipleObjects(
- min(MAXIMUM_WAIT_OBJECTS, nCount - (dwIndex * MAXIMUM_WAIT_OBJECTS)),
- lpHandles + (dwIndex * MAXIMUM_WAIT_OBJECTS),
- 0, 0);
-
- if (dwRet != WAIT_TIMEOUT) {
- break;
- }
- }
- } while((time(NULL) < tStopTime) && (dwRet == WAIT_TIMEOUT));
-
- return dwRet;
-}
diff --git a/server/core.c b/server/core.c
index b4aca33b..0e479b0c 100644
--- a/server/core.c
+++ b/server/core.c
@@ -227,8 +227,7 @@ static void *merge_core_dir_configs(apr_pool_t *a, void *basev, void *newv)
/* Create this conf by duplicating the base, replacing elements
* (or creating copies for merging) where new-> values exist.
*/
- conf = (core_dir_config *)apr_palloc(a, sizeof(core_dir_config));
- memcpy(conf, base, sizeof(core_dir_config));
+ conf = (core_dir_config *)apr_pmemdup(a, base, sizeof(core_dir_config));
conf->d = new->d;
conf->d_is_fnmatch = new->d_is_fnmatch;
@@ -286,10 +285,9 @@ static void *merge_core_dir_configs(apr_pool_t *a, void *basev, void *newv)
else if (new->response_code_strings != NULL) {
/* If we merge, the merge-result must have it's own array
*/
- conf->response_code_strings = apr_palloc(a,
+ conf->response_code_strings = apr_pmemdup(a,
+ base->response_code_strings,
sizeof(*conf->response_code_strings) * RESPONSE_CODES);
- memcpy(conf->response_code_strings, base->response_code_strings,
- sizeof(*conf->response_code_strings) * RESPONSE_CODES);
for (i = 0; i < RESPONSE_CODES; ++i) {
if (new->response_code_strings[i] != NULL) {
@@ -497,8 +495,7 @@ static void *merge_core_server_configs(apr_pool_t *p, void *basev, void *virtv)
core_server_config *virt = (core_server_config *)virtv;
core_server_config *conf;
- conf = (core_server_config *)apr_palloc(p, sizeof(core_server_config));
- memcpy(conf, virt, sizeof(core_server_config));
+ conf = (core_server_config *)apr_pmemdup(p, virt, sizeof(core_server_config));
if (!conf->access_name) {
conf->access_name = base->access_name;
@@ -1173,6 +1170,9 @@ static const char *set_document_root(cmd_parms *cmd, void *dummy,
/* Make it absolute, relative to ServerRoot */
arg = ap_server_root_relative(cmd->pool, arg);
+ if (arg == NULL) {
+ return "DocumentRoot must be a directory";
+ }
/* TODO: ap_configtestonly && ap_docrootcheck && */
if (apr_filepath_merge((char**)&conf->ap_document_root, NULL, arg,
@@ -3906,6 +3906,7 @@ static conn_rec *core_create_conn(apr_pool_t *ptrans, server_rec *server,
c->id = id;
c->bucket_alloc = alloc;
+ c->clogging_input_filters = 0;
return c;
}
diff --git a/server/log.c b/server/log.c
index 14b4fdc2..3aa20b0b 100644
--- a/server/log.c
+++ b/server/log.c
@@ -161,15 +161,26 @@ static apr_status_t clear_handle_list(void *v)
return APR_SUCCESS;
}
-/* remember to close this handle in the child process */
+/* remember to close this handle in the child process
+ *
+ * On Win32 this makes zero sense, because we don't
+ * take the parent process's child procs.
+ * If the win32 parent instead passed each and every
+ * logger write handle from itself down to the child,
+ * and the parent manages all aspects of keeping the
+ * reliable pipe log children alive, this would still
+ * make no sense :) Cripple it on Win32.
+ */
static void close_handle_in_child(apr_pool_t *p, apr_file_t *f)
{
+#ifndef WIN32
read_handle_t *new_handle;
new_handle = apr_pcalloc(p, sizeof(read_handle_t));
new_handle->next = read_handles;
new_handle->handle = f;
read_handles = new_handle;
+#endif
}
void ap_logs_child_init(apr_pool_t *p, server_rec *s)
@@ -263,7 +274,7 @@ static int log_child(apr_pool_t *p, const char *progname,
apr_status_t rc;
apr_procattr_t *procattr;
apr_proc_t *procnew;
- apr_file_t *errfile;
+ apr_file_t *outfile, *errfile;
if (((rc = apr_procattr_create(&procattr, p)) == APR_SUCCESS)
&& ((rc = apr_procattr_cmdtype_set(procattr,
@@ -282,8 +293,11 @@ static int log_child(apr_pool_t *p, const char *progname,
pname = apr_pstrdup(p, args[0]);
procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew));
- if (dummy_stderr) {
- if ((rc = apr_file_open_stdout(&errfile, p)) == APR_SUCCESS)
+ if ((rc = apr_file_open_stdout(&outfile, p)) == APR_SUCCESS) {
+ rc = apr_procattr_child_out_set(procattr, outfile, NULL);
+ if (dummy_stderr)
+ rc = apr_procattr_child_err_set(procattr, outfile, NULL);
+ else if ((rc = apr_file_open_stderr(&errfile, p)) == APR_SUCCESS)
rc = apr_procattr_child_err_set(procattr, errfile, NULL);
}
@@ -421,6 +435,16 @@ int ap_open_logs(apr_pool_t *pconf, apr_pool_t *p /* plog */,
apr_pool_destroy(stderr_pool);
stderr_pool = stderr_p;
replace_stderr = 0;
+ /*
+ * Now that we have dup'ed s_main->error_log to stderr_log
+ * close it and set s_main->error_log to stderr_log. This avoids
+ * this fd being inherited by the next piped logger who would
+ * keep open the writing end of the pipe that this one uses
+ * as stdin. This in turn would prevent the piped logger from
+ * exiting.
+ */
+ apr_file_close(s_main->error_log);
+ s_main->error_log = stderr_log;
}
}
/* note that stderr may still need to be replaced with something
@@ -877,6 +901,12 @@ static apr_status_t piped_log_spawn(piped_log *pl)
else {
char **args;
const char *pname;
+ apr_file_t *outfile, *errfile;
+
+ if ((status = apr_file_open_stdout(&outfile, pl->p)) == APR_SUCCESS)
+ status = apr_procattr_child_out_set(procattr, outfile, NULL);
+ if ((status = apr_file_open_stderr(&errfile, pl->p)) == APR_SUCCESS)
+ status = apr_procattr_child_err_set(procattr, errfile, NULL);
apr_tokenize_to_argv(pl->program, &args, pl->p);
pname = apr_pstrdup(pl->p, args[0]);
diff --git a/server/mpm/experimental/event/event.c b/server/mpm/experimental/event/event.c
index 2a6913b3..261468ea 100644
--- a/server/mpm/experimental/event/event.c
+++ b/server/mpm/experimental/event/event.c
@@ -623,6 +623,15 @@ static int process_socket(apr_pool_t * p, apr_socket_t * sock,
c->sbh = sbh;
}
+ if (c->clogging_input_filters && !c->aborted) {
+ /* Since we have an input filter which 'cloggs' the input stream,
+ * like mod_ssl, lets just do the normal read from input filters,
+ * like the Worker MPM does.
+ */
+ ap_run_process_connection(c);
+ cs->state = CONN_STATE_LINGER;
+ }
+
if (cs->state == CONN_STATE_READ_REQUEST_LINE) {
if (!c->aborted) {
ap_run_process_connection(c);
@@ -639,7 +648,6 @@ static int process_socket(apr_pool_t * p, apr_socket_t * sock,
if (cs->state == CONN_STATE_LINGER) {
ap_lingering_close(c);
- apr_bucket_alloc_destroy(cs->bucket_alloc);
apr_pool_clear(p);
ap_push_pool(worker_queue_info, p);
return 1;
@@ -1020,12 +1028,19 @@ static void *listener_thread(apr_thread_t * thd, void *dummy)
cs = APR_RING_FIRST(&timeout_head);
timeout_time = time_now + TIMEOUT_FUDGE_FACTOR;
while (!APR_RING_EMPTY(&timeout_head, conn_state_t, timeout_list)
- && cs->expiration_time < timeout_time
- && get_worker(&have_idle_worker)) {
+ && cs->expiration_time < timeout_time) {
cs->state = CONN_STATE_LINGER;
APR_RING_REMOVE(cs, timeout_list);
+ apr_thread_mutex_unlock(timeout_mutex);
+
+ if (!get_worker(&have_idle_worker)) {
+ apr_thread_mutex_lock(timeout_mutex);
+ APR_RING_INSERT_HEAD(&timeout_head, cs,
+ conn_state_t, timeout_list);
+ break;
+ }
rc = push2worker(&cs->pfd, event_pollset);
@@ -1038,6 +1053,7 @@ static void *listener_thread(apr_thread_t * thd, void *dummy)
*/
}
have_idle_worker = 0;
+ apr_thread_mutex_lock(timeout_mutex);
cs = APR_RING_FIRST(&timeout_head);
}
apr_thread_mutex_unlock(timeout_mutex);
diff --git a/server/mpm/winnt/child.c b/server/mpm/winnt/child.c
index 8996bfd8..d918e47a 100644
--- a/server/mpm/winnt/child.c
+++ b/server/mpm/winnt/child.c
@@ -80,6 +80,7 @@ void mpm_recycle_completion_context(PCOMP_CONTEXT context)
*/
if (context) {
apr_pool_clear(context->ptrans);
+ context->ba = apr_bucket_alloc_create(context->ptrans);
context->next = NULL;
ResetEvent(context->Overlapped.hEvent);
apr_thread_mutex_lock(qlock);
@@ -175,7 +176,7 @@ PCOMP_CONTEXT mpm_get_completion_context(void)
apr_pool_tag(context->ptrans, "transaction");
context->accept_socket = INVALID_SOCKET;
- context->ba = apr_bucket_alloc_create(pchild);
+ context->ba = apr_bucket_alloc_create(context->ptrans);
apr_atomic_inc32(&num_completion_contexts);
apr_thread_mutex_unlock(child_lock);
@@ -432,12 +433,12 @@ static PCOMP_CONTEXT win9x_get_connection(PCOMP_CONTEXT context)
apr_pool_create_ex(&context->ptrans, pchild, NULL, allocator);
apr_allocator_owner_set(allocator, context->ptrans);
apr_pool_tag(context->ptrans, "transaction");
- context->ba = apr_bucket_alloc_create(pchild);
apr_thread_mutex_unlock(child_lock);
}
while (1) {
apr_pool_clear(context->ptrans);
+ context->ba = apr_bucket_alloc_create(context->ptrans);
context->accept_socket = remove_job();
if (context->accept_socket == INVALID_SOCKET) {
return NULL;
@@ -863,14 +864,15 @@ void child_main(apr_pool_t *pconf)
apr_hash_t *ht;
ap_listen_rec *lr;
HANDLE child_events[2];
- int threads_created = 0;
+ HANDLE *child_handles;
int listener_started = 0;
+ int threads_created = 0;
+ int watch_thread;
+ int time_remains;
+ int cld;
int tid;
- HANDLE *child_handles;
int rv;
- time_t end_time;
int i;
- int cld;
apr_pool_create(&pchild, pconf);
apr_pool_tag(pchild, "pchild");
@@ -1109,21 +1111,71 @@ void child_main(apr_pool_t *pconf)
apr_thread_mutex_unlock(qlock);
}
- /* Give busy worker threads a chance to service their connections */
- ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
- "Child %d: Waiting for %d worker threads to exit.", my_pid, threads_created);
- end_time = time(NULL) + 180;
- while (threads_created) {
- rv = wait_for_many_objects(threads_created, child_handles, (DWORD)(end_time - time(NULL)));
- if (rv != WAIT_TIMEOUT) {
- rv = rv - WAIT_OBJECT_0;
- ap_assert((rv >= 0) && (rv < threads_created));
- cleanup_thread(child_handles, &threads_created, rv);
+ /* Give busy threads a chance to service their connections,
+ * (no more than the global server timeout period which
+ * we track in msec remaining).
+ */
+ watch_thread = 0;
+ time_remains = (int)(ap_server_conf->timeout / APR_TIME_C(1000));
+
+ while (threads_created)
+ {
+ int nFailsafe = MAXIMUM_WAIT_OBJECTS;
+ DWORD dwRet;
+
+ /* Every time we roll over to wait on the first group
+ * of MAXIMUM_WAIT_OBJECTS threads, take a breather,
+ * and infrequently update the error log.
+ */
+ if (watch_thread >= threads_created) {
+ if ((time_remains -= 100) < 0)
+ break;
+
+ /* Every 30 seconds give an update */
+ if ((time_remains % 30000) == 0) {
+ ap_log_error(APLOG_MARK, APLOG_NOTICE, APR_SUCCESS,
+ ap_server_conf,
+ "Child %d: Waiting %d more seconds "
+ "for %d worker threads to finish.",
+ my_pid, time_remains / 1000, threads_created);
+ }
+ /* We'll poll from the top, 10 times per second */
+ Sleep(100);
+ watch_thread = 0;
+ }
+
+ /* Fairness, on each iteration we will pick up with the thread
+ * after the one we just removed, even if it's a single thread.
+ * We don't block here.
+ */
+ dwRet = WaitForMultipleObjects(min(threads_created - watch_thread,
+ MAXIMUM_WAIT_OBJECTS),
+ child_handles + watch_thread, 0, 0);
+
+ if (dwRet == WAIT_FAILED) {
+ break;
+ }
+ if (dwRet == WAIT_TIMEOUT) {
+ /* none ready */
+ watch_thread += MAXIMUM_WAIT_OBJECTS;
continue;
}
- break;
+ else if (dwRet >= WAIT_ABANDONED_0) {
+ /* We just got the ownership of the object, which
+ * should happen at most MAXIMUM_WAIT_OBJECTS times.
+ * It does NOT mean that the object is signaled.
+ */
+ if ((nFailsafe--) < 1)
+ break;
+ }
+ else {
+ watch_thread += (dwRet - WAIT_OBJECT_0);
+ if (watch_thread >= threads_created)
+ break;
+ cleanup_thread(child_handles, &threads_created, watch_thread);
+ }
}
-
+
/* Kill remaining threads off the hard way */
if (threads_created) {
ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
@@ -1136,7 +1188,10 @@ void child_main(apr_pool_t *pconf)
CloseHandle(child_handles[i]);
/* Reset the scoreboard entry for the thread we just whacked */
score_idx = apr_hash_get(ht, &child_handles[i], sizeof(HANDLE));
- ap_update_child_status_from_indexes(0, *score_idx, SERVER_DEAD, NULL);
+ if (score_idx) {
+ ap_update_child_status_from_indexes(0, *score_idx,
+ SERVER_DEAD, NULL);
+ }
}
ap_log_error(APLOG_MARK,APLOG_NOTICE, APR_SUCCESS, ap_server_conf,
"Child %d: All worker threads have exited.", my_pid);
diff --git a/server/mpm/winnt/mpm_winnt.c b/server/mpm/winnt/mpm_winnt.c
index 4b37d741..120adfc0 100644
--- a/server/mpm/winnt/mpm_winnt.c
+++ b/server/mpm/winnt/mpm_winnt.c
@@ -625,6 +625,7 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_
apr_pool_t *ptemp;
apr_procattr_t *attr;
apr_proc_t new_child;
+ apr_file_t *child_out, *child_err;
HANDLE hExitEvent;
HANDLE waitlist[2]; /* see waitlist_e */
char *cmd;
@@ -678,6 +679,22 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_
return -1;
}
+ /* httpd-2.0/2.2 specific to work around apr_proc_create bugs */
+ if (((rv = apr_file_open_stdout(&child_out, p))
+ != APR_SUCCESS) ||
+ ((rv = apr_procattr_child_out_set(attr, child_out, NULL))
+ != APR_SUCCESS)) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
+ "Parent: Could not set child process stdout");
+ }
+ if (((rv = apr_file_open_stderr(&child_err, p))
+ != APR_SUCCESS) ||
+ ((rv = apr_procattr_child_err_set(attr, child_err, NULL))
+ != APR_SUCCESS)) {
+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
+ "Parent: Could not set child process stderr");
+ }
+
/* Create the child_ready_event */
waitlist[waitlist_ready] = CreateEvent(NULL, TRUE, FALSE, NULL);
if (!waitlist[waitlist_ready]) {
@@ -975,9 +992,11 @@ die_now:
event_handles[CHILD_HANDLE] = NULL;
}
}
+ CloseHandle(child_exit_event);
return 0; /* Tell the caller we do not want to restart */
}
winnt_mpm_state = AP_MPMQ_STARTING;
+ CloseHandle(child_exit_event);
return 1; /* Tell the caller we want a restart */
}
@@ -1081,7 +1100,7 @@ void winnt_rewrite_args(process_rec *process)
pid = getenv("AP_PARENT_PID");
if (pid)
{
- HANDLE filehand, newhand;
+ HANDLE filehand;
HANDLE hproc = GetCurrentProcess();
/* This is the child */
@@ -1094,17 +1113,12 @@ void winnt_rewrite_args(process_rec *process)
/* The parent gave us stdin, we need to remember this
* handle, and no longer inherit it at our children
* (we can't slurp it up now, we just aren't ready yet).
+ * The original handle is closed below, at apr_file_dup2()
*/
pipe = GetStdHandle(STD_INPUT_HANDLE);
-
- if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) {
- /* This doesn't work for 9x, but it's cleaner. */
- SetHandleInformation(pipe, HANDLE_FLAG_INHERIT, 0);
- }
- else if (DuplicateHandle(hproc, pipe,
- hproc, &filehand, 0, FALSE,
- DUPLICATE_SAME_ACCESS)) {
- CloseHandle(pipe);
+ if (DuplicateHandle(hproc, pipe,
+ hproc, &filehand, 0, FALSE,
+ DUPLICATE_SAME_ACCESS)) {
pipe = filehand;
}
@@ -1114,13 +1128,17 @@ void winnt_rewrite_args(process_rec *process)
* Don't infect child processes with our stdin
* handle, use another handle to NUL!
*/
- if ((filehand = GetStdHandle(STD_OUTPUT_HANDLE))
- && DuplicateHandle(hproc, filehand,
- hproc, &newhand, 0,
- TRUE, DUPLICATE_SAME_ACCESS)) {
- SetStdHandle(STD_INPUT_HANDLE, newhand);
+ {
+ apr_file_t *infile, *outfile;
+ if ((apr_file_open_stdout(&outfile, process->pool) == APR_SUCCESS)
+ && (apr_file_open_stdin(&infile, process->pool) == APR_SUCCESS))
+ apr_file_dup2(infile, outfile, process->pool);
}
+ /* This child needs the existing stderr opened for logging,
+ * already
+ */
+
/* The parent is responsible for providing the
* COMPLETE ARGUMENTS REQUIRED to the child.
*
@@ -1286,19 +1304,10 @@ void winnt_rewrite_args(process_rec *process)
if ((rv = apr_file_open(&nullfile, "NUL",
APR_READ | APR_WRITE, APR_OS_DEFAULT,
process->pool)) == APR_SUCCESS) {
- HANDLE hproc = GetCurrentProcess();
- HANDLE nullstdout = NULL;
- HANDLE nullhandle;
-
- /* Duplicate the handle to be inherited by children */
- if ((apr_os_file_get(&nullhandle, nullfile) == APR_SUCCESS)
- && DuplicateHandle(hproc, nullhandle,
- hproc, &nullstdout,
- 0, TRUE, DUPLICATE_SAME_ACCESS)) {
- SetStdHandle(STD_OUTPUT_HANDLE, nullstdout);
- }
-
- /* Close the original handle, we used the duplicate */
+ apr_file_t *nullstdout;
+ if (apr_file_open_stdout(&nullstdout, process->pool)
+ == APR_SUCCESS)
+ apr_file_dup2(nullstdout, nullfile, process->pool);
apr_file_close(nullfile);
}
}
@@ -1426,6 +1435,26 @@ static int winnt_pre_config(apr_pool_t *pconf_, apr_pool_t *plog, apr_pool_t *pt
service_name);
exit(APEXIT_INIT);
}
+ else if (!one_process && !ap_my_generation) {
+ /* Open a null handle to soak stdout in this process.
+ * We need to emulate apr_proc_detach, unix performs this
+ * same check in the pre_config hook (although it is
+ * arguably premature). Services already fixed this.
+ */
+ apr_file_t *nullfile;
+ apr_status_t rv;
+ apr_pool_t *pproc = apr_pool_parent_get(pconf);
+
+ if ((rv = apr_file_open(&nullfile, "NUL",
+ APR_READ | APR_WRITE, APR_OS_DEFAULT,
+ pproc)) == APR_SUCCESS) {
+ apr_file_t *nullstdout;
+ if (apr_file_open_stdout(&nullstdout, pproc)
+ == APR_SUCCESS)
+ apr_file_dup2(nullstdout, nullfile, pproc);
+ apr_file_close(nullfile);
+ }
+ }
/* Win9x: disable AcceptEx */
if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
diff --git a/server/mpm/winnt/nt_eventlog.c b/server/mpm/winnt/nt_eventlog.c
index a0ae68c9..baa1a88b 100644
--- a/server/mpm/winnt/nt_eventlog.c
+++ b/server/mpm/winnt/nt_eventlog.c
@@ -21,6 +21,7 @@
#include "mpm_winnt.h"
#include "apr_strings.h"
#include "apr_lib.h"
+#include "apr_portable.h"
#include "ap_regkey.h"
static char *display_name = NULL;
@@ -138,7 +139,8 @@ void mpm_nt_eventlog_stderr_open(char *argv0, apr_pool_t *p)
HANDLE hPipeWrite = NULL;
HANDLE hDup = NULL;
DWORD threadid;
- int fd;
+ apr_file_t *eventlog_file;
+ apr_file_t *stderr_file;
display_name = argv0;
@@ -159,27 +161,11 @@ void mpm_nt_eventlog_stderr_open(char *argv0, apr_pool_t *p)
WaitForSingleObject(stderr_ready, INFINITE);
- /* Flush stderr and unset its buffer, then commit and replace stderr.
- * This is typically a noop for Win2K/XP since services with NULL std
- * handles [but valid FILE *'s, oddly enough], but is required
- * for NT 4.0 and to use this code outside of services.
- */
- fflush(stderr);
- setvbuf(stderr, NULL, _IONBF, 0);
- _commit(2 /* stderr */);
- fd = _open_osfhandle((long) hPipeWrite,
- _O_WRONLY | _O_BINARY);
- _dup2(fd, 2);
- _close(fd);
- _setmode(2, _O_BINARY);
-
- /* hPipeWrite was _close()'ed above, and _dup2()'ed
- * to fd 2 creating a new, inherited Win32 handle.
- * Recover that real handle from fd 2.
- */
- hPipeWrite = (HANDLE)_get_osfhandle(2);
-
- SetStdHandle(STD_ERROR_HANDLE, hPipeWrite);
+ if ((apr_file_open_stderr(&stderr_file, p)
+ == APR_SUCCESS)
+ && (apr_os_file_put(&eventlog_file, &hPipeWrite, APR_WRITE, p)
+ == APR_SUCCESS))
+ apr_file_dup2(stderr_file, eventlog_file, p);
/* The code above _will_ corrupt the StdHandle...
* and we must do so anyways. We set this up only
diff --git a/server/mpm_common.c b/server/mpm_common.c
index f8063733..a95b2312 100644
--- a/server/mpm_common.c
+++ b/server/mpm_common.c
@@ -699,7 +699,7 @@ static apr_status_t dummy_connection(ap_pod_t *pod)
* adminstrators can track down the cause of the odd-looking
* requests in their logs.
*/
- srequest = apr_pstrcat(p, "GET / HTTP/1.0\r\nUser-Agent: ",
+ srequest = apr_pstrcat(p, "OPTIONS * HTTP/1.0\r\nUser-Agent: ",
ap_get_server_banner(),
" (internal dummy connection)\r\n\r\n", NULL);
diff --git a/server/protocol.c b/server/protocol.c
index b7145bb7..e5b2e030 100644
--- a/server/protocol.c
+++ b/server/protocol.c
@@ -1399,9 +1399,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_old_write_filter(
* can simply insert our buffered data at the front and
* pass the whole bundle down the chain.
*/
- APR_BRIGADE_CONCAT(ctx->bb, bb);
- bb = ctx->bb;
- ctx->bb = NULL;
+ APR_BRIGADE_PREPEND(bb, ctx->bb);
}
return ap_pass_brigade(f->next, bb);
@@ -1539,9 +1537,6 @@ AP_DECLARE(int) ap_vrprintf(request_rec *r, const char *fmt, va_list va)
written = apr_vformatter(r_flush, &vd.vbuff, fmt, va);
- /* tack on null terminator on remaining string */
- *(vd.vbuff.curpos) = '\0';
-
if (written != -1) {
int n = vd.vbuff.curpos - vrprintf_buf;
@@ -1633,6 +1628,44 @@ AP_DECLARE(void) ap_set_last_modified(request_rec *r)
}
}
+typedef struct hdr_ptr {
+ ap_filter_t *f;
+ apr_bucket_brigade *bb;
+} hdr_ptr;
+
+static int send_header(void *data, const char *key, const char *val)
+{
+ ap_fputstrs(((hdr_ptr*)data)->f, ((hdr_ptr*)data)->bb,
+ key, ": ", val, CRLF, NULL);
+ return 1;
+}
+
+AP_DECLARE(void) ap_send_interim_response(request_rec *r, int send_headers)
+{
+ hdr_ptr x;
+
+ if (r->proto_num < 1001) {
+ /* don't send interim response to HTTP/1.0 Client */
+ return;
+ }
+ if (!ap_is_HTTP_INFO(r->status)) {
+ ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, NULL,
+ "Status is %d - not sending interim response", r->status);
+ return;
+ }
+
+ x.f = r->connection->output_filters;
+ x.bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
+ ap_fputstrs(x.f, x.bb, AP_SERVER_PROTOCOL, " ", r->status_line, CRLF, NULL);
+ if (send_headers) {
+ apr_table_do(send_header, &x, r->headers_out, NULL);
+ apr_table_clear(r->headers_out);
+ }
+ ap_fputs(x.f, x.bb, CRLF);
+ ap_fflush(x.f, x.bb);
+ apr_brigade_destroy(x.bb);
+}
+
AP_IMPLEMENT_HOOK_RUN_ALL(int,post_read_request,
(request_rec *r), (r), OK, DECLINED)
AP_IMPLEMENT_HOOK_RUN_ALL(int,log_transaction,
diff --git a/server/scoreboard.c b/server/scoreboard.c
index 9cb7359a..0f657131 100644
--- a/server/scoreboard.c
+++ b/server/scoreboard.c
@@ -40,6 +40,7 @@
AP_DECLARE_DATA scoreboard *ap_scoreboard_image = NULL;
AP_DECLARE_DATA const char *ap_scoreboard_fname = NULL;
AP_DECLARE_DATA int ap_extended_status = 0;
+AP_DECLARE_DATA int ap_mod_status_reqtail = 0;
#if APR_HAS_SHARED_MEMORY
@@ -157,7 +158,7 @@ static apr_status_t create_namebased_scoreboard(apr_pool_t *pool,
rv = apr_shm_create(&ap_scoreboard_shm, scoreboard_size, fname, pool);
if (rv != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "unable to create scoreboard \"%s\" "
+ "unable to create or access scoreboard \"%s\" "
"(name-based shared memory failure)", fname);
return rv;
}
@@ -204,7 +205,7 @@ static apr_status_t open_scoreboard(apr_pool_t *pconf)
global_pool); /* anonymous shared memory */
if ((rv != APR_SUCCESS) && (rv != APR_ENOTIMPL)) {
ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
- "Unable to create scoreboard "
+ "Unable to create or access scoreboard "
"(anonymous shared memory failure)");
return rv;
}
@@ -380,6 +381,42 @@ AP_DECLARE(void) ap_create_sb_handle(ap_sb_handle_t **new_sbh, apr_pool_t *p,
(*new_sbh)->thread_num = thread_num;
}
+static void copy_request(char *rbuf, apr_size_t rbuflen, request_rec *r)
+{
+ char *p;
+
+ if (r->the_request == NULL) {
+ apr_cpystrn(rbuf, "NULL", rbuflen);
+ return; /* short circuit below */
+ }
+
+ if (r->parsed_uri.password == NULL) {
+ p = r->the_request;
+ }
+ else {
+ /* Don't reveal the password in the server-status view */
+ p = apr_pstrcat(r->pool, r->method, " ",
+ apr_uri_unparse(r->pool, &r->parsed_uri,
+ APR_URI_UNP_OMITPASSWORD),
+ r->assbackwards ? NULL : " ", r->protocol, NULL);
+ }
+
+ /* now figure out if we copy over the 1st rbuflen chars or the last */
+ if (!ap_mod_status_reqtail) {
+ apr_cpystrn(rbuf, p, rbuflen);
+ }
+ else {
+ apr_size_t slen = strlen(p);
+ if (slen < rbuflen) {
+ /* it all fits anyway */
+ apr_cpystrn(rbuf, p, rbuflen);
+ }
+ else {
+ apr_cpystrn(rbuf, p+(slen-rbuflen+1), rbuflen);
+ }
+ }
+}
+
AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num,
int thread_num,
int status,
@@ -422,18 +459,7 @@ AP_DECLARE(int) ap_update_child_status_from_indexes(int child_num,
conn_rec *c = r->connection;
apr_cpystrn(ws->client, ap_get_remote_host(c, r->per_dir_config,
REMOTE_NOLOOKUP, NULL), sizeof(ws->client));
- if (r->the_request == NULL) {
- apr_cpystrn(ws->request, "NULL", sizeof(ws->request));
- } else if (r->parsed_uri.password == NULL) {
- apr_cpystrn(ws->request, r->the_request, sizeof(ws->request));
- } else {
- /* Don't reveal the password in the server-status view */
- apr_cpystrn(ws->request, apr_pstrcat(r->pool, r->method, " ",
- apr_uri_unparse(r->pool, &r->parsed_uri,
- APR_URI_UNP_OMITPASSWORD),
- r->assbackwards ? NULL : " ", r->protocol, NULL),
- sizeof(ws->request));
- }
+ copy_request(ws->request, sizeof(ws->request), r);
apr_cpystrn(ws->vhost, r->server->server_hostname,
sizeof(ws->vhost));
}
diff --git a/srclib/apr-util/CHANGES b/srclib/apr-util/CHANGES
index 15b37d87..97f55c70 100644
--- a/srclib/apr-util/CHANGES
+++ b/srclib/apr-util/CHANGES
@@ -1,4 +1,34 @@
-*- coding: utf-8 -*-
+
+Changes with APR-util 1.2.12
+
+ *) Wakeup threads waiting for a reslist resource after a resource was
+ invalidated. [Ruediger Pluem]
+
+ *) Fix GMT offset for several date formats and add a new format.
+ [Maxime Petazzoni <maxime.petazzoni bulix.org>]
+
+ *) Numerous fixes to the test/ framework, including better handling of
+ long size_t comparisons and more consistent Makefile.(in|win) setup
+ for authoring new tests. [William Rowe]
+
+ *) Win32 build fixes including a Makefile.win scheme, fixes for 64P
+ model x86_64 compiles and VC8 builds. [William Rowe]
+
+ *) Type mismatch between apr_datum_t and GDBM's datum type could
+ yield a corrupt apr_datum_t when reading from a GDBM database.
+ PR 43025. [Björn Wiberg <Bjorn.Wiberg its.uu.se>, Davi Arnaut]
+
+ *) Add the #define APR_LDAP_SIZELIMIT that is set appropriately
+ for the LDAP SDK that is being used. Also include ZOS as an
+ LDAP Platform.
+ PR 37814. [David Jones <oscaremma gmail com>, Davi Arnaut]
+
+ *) Fix exported LDFLAGS with new expat detection. PR 43337.
+ [Justin Erenkrantz]
+
+ *) Add MySQL DBD driver [Nick Kew, Bojan Smojver]
+
Changes with APR-util 1.2.10
*) Support BerkeleyDB 4.6. [Arfrever Frehtes Taifersar Arahesis]
diff --git a/srclib/apr-util/INSTALL.MySQL b/srclib/apr-util/INSTALL.MySQL
deleted file mode 100644
index 67718bf9..00000000
--- a/srclib/apr-util/INSTALL.MySQL
+++ /dev/null
@@ -1,14 +0,0 @@
-The MySQL driver is not distributed from apache.org due to licensing issues.
-
-If you wish to build the driver, download apr_dbd_mysql.c from
-http://apache.webthing.com/database/
-and copy it into the dbd directory.
-Now run buildconf, followed by configure.
-
-It is distributed under the GPL to conform with MySQL License terms
-This means it cannot be distributed from apache.org, as that would
-violate ASF policy.
-
-Using the driver with APR and Apache is of course allowed,
-and there is no problem with a third party bundling the driver,
-provided you respect both the ASF and GPL licenses.
diff --git a/srclib/apr-util/Makefile.win b/srclib/apr-util/Makefile.win
new file mode 100644
index 00000000..ba2c55a0
--- /dev/null
+++ b/srclib/apr-util/Makefile.win
@@ -0,0 +1,278 @@
+# Makefile.win for Win32 APR + APR-iconv + APR-util
+#
+# Targets are:
+#
+# buildall - compile everything
+# checkall - run APR + APR-util regression tests
+# install - compile everything
+# clean - mop up everything
+#
+# You can override the build mechansim, choose only one;
+#
+# USEMAK=1 - compile from exported make files
+# USEDSW=1 - compile from .dsw / .dsp VC6 projects
+# USESLN=1 - compile from converted .sln / .vcproj VC7+ files
+#
+# Define ARCH to your desired preference (your PATH must point
+# to the correct compiler tools!) Choose only one;
+#
+# ARCH="Win32 Release"
+# ARCH="Win32 Debug"
+# ARCH="Win32 ReleaseNT"
+# ARCH="Win32 DebugNT"
+# ARCH="x64 Release"
+# ARCH="x64 Debug"
+#
+# Provide the APR_PATH, API_PATH and APU_PATH entirely relative
+# to one another! At this time, building the libraries themselves
+# is only expected to work if the defaults (../apr, ../apr-iconv
+# and ../apr-util) are used, or if they are built with USEMAK=1.
+#
+# APR_PATH=..\apr-1.2.12
+# API_PATH=..\apr-iconv-1.2.1
+# APU_PATH=..\apr-util-1.2.12
+#
+# For example;
+#
+# nmake -f Makefile.win PREFIX=C:\APR buildall checkall installall clean
+#
+
+!IF EXIST("aprutil.sln") && ([devenv /help > NUL 2>&1] == 0) \
+ && !defined(USEMAK) && !defined(USEDSW)
+USESLN=1
+USEMAK=0
+USEDSW=0
+!ELSEIF EXIST("aprutil.mak") && !defined(USEDSW)
+USESLN=0
+USEMAK=1
+USEDSW=0
+!ELSE
+USESLN=0
+USEMAK=0
+USEDSW=1
+!ENDIF
+
+PREFIX=..\apr-dist
+
+!IF [$(COMSPEC) /c cl /nologo /? | find "x64" >NUL ] == 0
+ARCH=x64 Release
+!ELSE
+ARCH=Win32 Release
+!ENDIF
+
+APR_PATH=..\apr
+API_PATH=..\apr-iconv
+APU_PATH=..\apr-util
+
+!MESSAGE ARCH = $(ARCH)
+!MESSAGE APR_PATH = $(APR_PATH)
+!MESSAGE API_PATH = $(API_PATH) (apr-iconv)
+!MESSAGE APU_PATH = $(APU_PATH) (apr-util)
+!MESSAGE PREFIX = $(PREFIX) (install path)
+
+
+# Utility and Translation things, nothing here for the user
+#
+!IF "$(ARCH)" == "Win32 Release"
+SLNARCH=Release|Win32
+ARCHPATH=Release
+LIBSPATH=LibR
+ARCHOSPATH=Release
+LIBSOSPATH=LibR
+!ELSEIF "$(ARCH)" == "Win32 Debug"
+SLNARCH=Debug|Win32
+ARCHPATH=Debug
+LIBSPATH=LibD
+ARCHOSPATH=Debug
+LIBSOSPATH=LibD
+!ELSEIF "$(ARCH)" == "Win32 ReleaseNT"
+SLNARCH=ReleaseNT|Win32
+ARCHPATH=Release
+LIBSPATH=LibR
+ARCHOSPATH=NT\Release
+LIBSOSPATH=NT\LibR
+!ELSEIF "$(ARCH)" == "Win32 DebugNT"
+SLNARCH=DebugNT|Win32
+ARCHPATH=Debug
+LIBSPATH=LibD
+ARCHOSPATH=NT\Debug
+LIBSOSPATH=NT\LibD
+!ELSEIF "$(ARCH)" == "x64 Release"
+SLNARCH=Release|x64
+ARCHPATH=x64\Release
+LIBSPATH=x64\LibR
+ARCHOSPATH=x64\Release
+LIBSOSPATH=x64\LibR
+!ELSEIF "$(ARCH)" == "x64 Debug"
+SLNARCH=Debug|x64
+ARCHPATH=x64\Debug
+LIBSPATH=x64\LibD
+ARCHOSPATH=x64\Debug
+LIBSOSPATH=x64\LibD
+!ENDIF
+
+!IFNDEF MAKEOPT
+# Only default the behavior if MAKEOPT= is omitted
+!IFDEF _NMAKE_VER
+# Microsoft NMake options
+MAKEOPT=-nologo
+!ELSEIF "$(MAKE)" == "make"
+# Borland make options? Not really supported (yet)
+MAKEOPT=-s -N
+!ENDIF
+!ENDIF
+
+
+# Sanity Checks
+#
+!IF !EXIST("$(APR_PATH)\apr.dsp") || !EXIST("$(API_PATH)\apriconv.dsp") \
+ || !EXIST("$(APU_PATH)\aprutil.dsp")
+!MESSAGE Please check out or download and unpack the Apache Portability Runtime
+!MESSAGE sources (apr, apr-iconv and apr-util) under a single parent dir,
+!MESSAGE or provide APR_PATH, API_PATH and APU_PATH (all relative to each other,
+!MESSAGE or all absolute paths).
+!MESSAGE Apache cannot build without these libraries!
+!MESSAGE
+!ERROR Need apr and apr-iconv alongside apr-util to build!
+!ENDIF
+
+
+all: buildall checkall
+
+# To help win32 pick up the locations where they don't fall in the usual
+# path locations. This may not be completely effective for USESLN/USEDSP
+# oriented builds, just yet
+#
+LIB=$(APR_PATH)\$(ARCHOSPATH);$(APR_PATH)\$(LIBSOSPATH);$(API_PATH)\$(ARCHPATH);$(API_PATH)\$(LIBSPATH);$(APU_PATH)\$(ARCHPATH);$(APU_PATH)\$(LIBSPATH);$(LIB)
+INCLUDE=$(APR_PATH)\include;$(API_PATH)\include;$(INCLUDE)
+
+!IF $(USEMAK) == 1
+
+clean:
+ $(MAKE) $(MAKEOPT) -f Makefile.win ARCH="$(ARCH)" \
+ CTARGET=CLEAN buildall
+
+buildall:
+ cd $(APR_PATH)
+ $(MAKE) $(MAKEOPT) -f apr.mak CFG="apr - $(ARCH)" RECURSE=0 $(CTARGET)
+ $(MAKE) $(MAKEOPT) -f libapr.mak CFG="libapr - $(ARCH)" RECURSE=0 $(CTARGET)
+ cd build
+ $(MAKE) $(MAKEOPT) -f apr_app.mak CFG="apr_app - $(ARCH)" RECURSE=0 $(CTARGET)
+ $(MAKE) $(MAKEOPT) -f libapr_app.mak CFG="libapr_app - $(ARCH)" RECURSE=0 $(CTARGET)
+ cd ..
+ cd $(API_PATH)
+ $(MAKE) $(MAKEOPT) -f apriconv.mak CFG="apriconv - $(ARCH)" RECURSE=0 $(CTARGET)
+ $(MAKE) $(MAKEOPT) -f libapriconv.mak CFG="libapriconv - $(ARCH)" RECURSE=0 $(CTARGET)
+!IF "$(CTARGET)" == "CLEAN"
+ $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
+ BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
+!ELSE
+ cd ccs
+ $(MAKE) $(MAKEOPT) -f Makefile.win all \
+ BUILD_MODE="$(ARCH)" BIND_MODE=shared
+ cd ..\ces
+ $(MAKE) $(MAKEOPT) -f Makefile.win all \
+ BUILD_MODE="$(ARCH)" BIND_MODE=shared
+ cd ..
+!ENDIF
+ cd $(APU_PATH)\xml\expat\lib
+ $(MAKE) $(MAKEOPT) -f xml.mak CFG="xml - $(ARCH)" RECURSE=0 $(CTARGET)
+ cd ..\..\..
+ $(MAKE) $(MAKEOPT) -f aprutil.mak CFG="aprutil - $(ARCH)" RECURSE=0 $(CTARGET)
+ $(MAKE) $(MAKEOPT) -f libaprutil.mak CFG="libaprutil - $(ARCH)" RECURSE=0 $(CTARGET)
+
+!ELSEIF $(USESLN) == 1
+
+clean:
+ -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libaprutil
+ -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project libapr_app
+ -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project aprutil
+ -devenv aprutil.sln /useenv /clean "$(SLNARCH)" /project apr_app
+ cd $(API_PATH)
+ $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
+ BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
+ cd $(APU_PATH)
+
+buildall:
+ devenv aprutil.sln /useenv /build "$(SLNARCH)" /project apr_app
+ devenv aprutil.sln /useenv /build "$(SLNARCH)" /project aprutil
+ devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libapr_app
+ devenv aprutil.sln /useenv /build "$(SLNARCH)" /project libaprutil
+
+!ELSE
+# $(USEDSP) == 1
+
+clean:
+ -msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)" /CLEAN
+ -msdev aprutil.dsw /USEENV /MAKE "libapr_app - $(ARCH)" /CLEAN
+ -msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)" /CLEAN
+ -msdev aprutil.dsw /USEENV /MAKE "apr_app - $(ARCH)" /CLEAN
+ cd $(API_PATH)
+ $(MAKE) $(MAKEOPT) -f build\modules.mk.win clean \
+ BUILD_MODE="$(ARCH)" BIND_MODE=shared API_SOURCE=.
+ cd $(APU_PATH)
+
+buildall:
+ @msdev aprutil.dsw /USEENV /MAKE "apr_app - $(ARCH)"
+ @msdev aprutil.dsw /USEENV /MAKE "aprutil - $(ARCH)"
+ @msdev aprutil.dsw /USEENV /MAKE "libapr_app - $(ARCH)"
+ @msdev aprutil.dsw /USEENV /MAKE "libaprutil - $(ARCH)"
+
+!ENDIF
+
+
+checkapr:
+ cd $(APR_PATH)\test
+ $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
+ OUTDIR=$(LIBSOSPATH) check
+ $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
+ OUTDIR=$(ARCHOSPATH) check
+ cd ..
+ cd $(APU_PATH)
+
+checkapu:
+ cd $(APU_PATH)
+ cd test
+ $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
+ OUTDIR=$(LIBSPATH) APROUTDIR=$(LIBSOSPATH) \
+ APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check
+ $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
+ OUTDIR=$(ARCHPATH) APROUTDIR=$(ARCHOSPATH) \
+ APR_PATH=..\$(APR_PATH) API_PATH=..\$(API_PATH) check
+ cd ..
+
+checkall: checkapr checkapu
+
+
+install:
+ echo Y >.y
+ echo A >.A
+ @if NOT EXIST "$(PREFIX)\." mkdir "$(PREFIX)"
+ @if NOT EXIST "$(PREFIX)\bin\." mkdir "$(PREFIX)\bin"
+ @if NOT EXIST "$(PREFIX)\bin\iconv\." mkdir "$(PREFIX)\bin\iconv"
+ @if NOT EXIST "$(PREFIX)\include\." mkdir "$(PREFIX)\include"
+ @if NOT EXIST "$(PREFIX)\lib\." mkdir "$(PREFIX)\lib"
+ copy CHANGES "$(PREFIX)\CHANGES.txt" <.y
+ copy LICENSE "$(PREFIX)\LICENSE.txt" <.y
+ copy NOTICE "$(PREFIX)\NOTICE.txt" <.y
+ xcopy $(APR_PATH)\include\*.h "$(PREFIX)\include\" /d < .a
+ xcopy $(APU_PATH)\include\*.h "$(PREFIX)\include\" /d < .a
+ copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.lib "$(PREFIX)\lib\" <.y
+ copy $(APR_PATH)\$(LIBSOSPATH)\apr-1.pdb "$(PREFIX)\lib\" <.y
+ copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.lib "$(PREFIX)\lib\" <.y
+ copy $(APU_PATH)\$(LIBSPATH)\aprutil-1.pdb "$(PREFIX)\lib\" <.y
+ copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.lib "$(PREFIX)\lib\" <.y
+ copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.exp "$(PREFIX)\lib\" <.y
+ copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.lib "$(PREFIX)\lib\" <.y
+ copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.exp "$(PREFIX)\lib\" <.y
+ copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.dll "$(PREFIX)\bin\" <.y
+ copy $(APR_PATH)\$(ARCHOSPATH)\libapr-1.pdb "$(PREFIX)\bin\" <.y
+ copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.dll "$(PREFIX)\bin\" <.y
+ copy $(API_PATH)\$(ARCHPATH)\libapriconv-1.pdb "$(PREFIX)\bin\" <.y
+ copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.dll "$(PREFIX)\bin\" <.y
+ copy $(APU_PATH)\$(ARCHPATH)\libaprutil-1.pdb "$(PREFIX)\bin\" <.y
+ xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.so "$(PREFIX)\bin\iconv\" /d < .a
+ xcopy $(API_PATH)\$(ARCHPATH)\iconv\*.pdb "$(PREFIX)\bin\iconv\" /d < .a
+ del .y
+ del .a
+
diff --git a/srclib/apr-util/README.MySQL b/srclib/apr-util/README.MySQL
new file mode 100644
index 00000000..e3af3488
--- /dev/null
+++ b/srclib/apr-util/README.MySQL
@@ -0,0 +1,3 @@
+As of apr-util version 1.2.11, MySQL DBD driver is shipped as part of the
+distribution. However, unless you specify --with-mysql option to configure,
+MySQL DBD driver will NOT be built to avoid ABI breakage.
diff --git a/srclib/apr-util/aprutil.dsp b/srclib/apr-util/aprutil.dsp
index efa1f823..9fd6d2db 100644
--- a/srclib/apr-util/aprutil.dsp
+++ b/srclib/apr-util/aprutil.dsp
@@ -4,7 +4,7 @@
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=aprutil - Win32 Debug
+CFG=aprutil - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,12 +13,14 @@ CFG=aprutil - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "aprutil.mak" CFG="aprutil - Win32 Debug"
+!MESSAGE NMAKE /f "aprutil.mak" CFG="aprutil - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "aprutil - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "aprutil - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "aprutil - x64 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "aprutil - x64 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
@@ -41,7 +43,7 @@ RSC=rc.exe
# PROP Intermediate_Dir "LibR"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "APU_USE_SDBM" /D "XML_STATIC" /D "WIN32" /D "_WINDOWS" /Fd"LibR\aprutil_src" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "APU_USE_SDBM" /D "XML_STATIC" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\aprutil-1" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -65,7 +67,7 @@ LIB32=link.exe -lib
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "APU_USE_SDBM" /D "XML_STATIC" /D "WIN32" /D "_WINDOWS" /Fd"LibD\aprutil_src" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "APU_USE_SDBM" /D "XML_STATIC" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\aprutil-1" /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -75,12 +77,61 @@ LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"LibD\aprutil-1.lib"
+!ELSEIF "$(CFG)" == "aprutil - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "x64\LibR"
+# PROP BASE Intermediate_Dir "x64\LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "x64\LibR"
+# PROP Intermediate_Dir "x64\LibR"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "APU_USE_SDBM" /D "XML_STATIC" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\aprutil-1" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibR\aprutil-1.lib"
+
+!ELSEIF "$(CFG)" == "aprutil - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "x64\LibD"
+# PROP BASE Intermediate_Dir "x64\LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "x64\LibD"
+# PROP Intermediate_Dir "x64\LibD"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC" /D "APU_USE_SDBM" /D "XML_STATIC" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\aprutil-1" /FD /EHsc /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibD\aprutil-1.lib"
+
!ENDIF
# Begin Target
# Name "aprutil - Win32 Release"
# Name "aprutil - Win32 Debug"
+# Name "aprutil - x64 Release"
+# Name "aprutil - x64 Debug"
# Begin Group "Source Files"
# PROP Default_Filter ""
@@ -172,6 +223,10 @@ SOURCE=.\dbd\apr_dbd.c
# End Source File
# Begin Source File
+SOURCE=.\dbd\apr_dbd_mysql.c
+# End Source File
+# Begin Source File
+
SOURCE=.\dbd\apr_dbd_pgsql.c
# End Source File
# Begin Source File
@@ -359,6 +414,26 @@ InputPath=.\include\apr_ldap.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "aprutil - x64 Release"
+
+# Begin Custom Build - Creating apr_ldap.h from apr_ldap.hw
+InputPath=.\include\apr_ldap.hw
+
+".\include\apr_ldap.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr_ldap.hw > .\include\apr_ldap.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "aprutil - x64 Debug"
+
+# Begin Custom Build - Creating apr_ldap.h from apr_ldap.hw
+InputPath=.\include\apr_ldap.hw
+
+".\include\apr_ldap.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr_ldap.hw > .\include\apr_ldap.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -394,6 +469,26 @@ InputPath=.\include\apu.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "aprutil - x64 Release"
+
+# Begin Custom Build - Creating apu.h from apu.hw
+InputPath=.\include\apu.hw
+
+".\include\apu.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu.hw > .\include\apu.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "aprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu.h from apu.hw
+InputPath=.\include\apu.hw
+
+".\include\apu.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu.hw > .\include\apu.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -425,6 +520,26 @@ InputPath=.\include\private\apu_config.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "aprutil - x64 Release"
+
+# Begin Custom Build - Creating apu_config.h from apu_config.hw
+InputPath=.\include\private\apu_config.hw
+
+".\include\private\apu_config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_config.hw > .\include\private\apu_config.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "aprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu_config.h from apu_config.hw
+InputPath=.\include\private\apu_config.hw
+
+".\include\private\apu_config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_config.hw > .\include\private\apu_config.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -456,6 +571,26 @@ InputPath=.\include\private\apu_select_dbm.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "aprutil - x64 Release"
+
+# Begin Custom Build - Creating apu_select_dbm.h from apu_select_dbm.hw
+InputPath=.\include\private\apu_select_dbm.hw
+
+".\include\private\apu_select_dbm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_select_dbm.hw > .\include\private\apu_select_dbm.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "aprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu_select_dbm.h from apu_select_dbm.hw
+InputPath=.\include\private\apu_select_dbm.hw
+
+".\include\private\apu_select_dbm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_select_dbm.hw > .\include\private\apu_select_dbm.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -491,6 +626,26 @@ InputPath=.\include\apu_want.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "aprutil - x64 Release"
+
+# Begin Custom Build - Creating apu_want.h from apu_want.hw
+InputPath=.\include\apu_want.hw
+
+".\include\apu_want.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu_want.hw > .\include\apu_want.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "aprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu_want.h from apu_want.hw
+InputPath=.\include\apu_want.hw
+
+".\include\apu_want.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu_want.hw > .\include\apu_want.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -582,6 +737,10 @@ SOURCE=.\include\apr_xlate.h
SOURCE=.\include\apr_xml.h
# End Source File
+# Begin Source File
+
+SOURCE=.\include\apu_version.h
+# End Source File
# End Group
# End Target
# End Project
diff --git a/srclib/apr-util/aprutil.dsw b/srclib/apr-util/aprutil.dsw
index 75352c29..a96e3a05 100644
--- a/srclib/apr-util/aprutil.dsw
+++ b/srclib/apr-util/aprutil.dsw
@@ -15,7 +15,7 @@ Package=<4>
###############################################################################
-Project: "apriconv"="..\apr-iconv\apriconv.dsp" - Package Owner=<4>
+Project: "apr_app"="..\apr\build\apr_app.dsp" - Package Owner=<4>
Package=<5>
{{{
@@ -30,7 +30,7 @@ Package=<4>
###############################################################################
-Project: "aprutil"=".\aprutil.dsp" - Package Owner=<4>
+Project: "apriconv"="..\apr-iconv\apriconv.dsp" - Package Owner=<4>
Package=<5>
{{{
@@ -41,11 +41,23 @@ Package=<4>
Begin Project Dependency
Project_Dep_Name apr
End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "aprutil"=".\aprutil.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
Begin Project Dependency
- Project_Dep_Name xml
+ Project_Dep_Name apriconv
End Project Dependency
Begin Project Dependency
- Project_Dep_Name apriconv
+ Project_Dep_Name xml
End Project Dependency
}}}
@@ -63,6 +75,21 @@ Package=<4>
###############################################################################
+Project: "libapr_app"="..\apr\build\libapr_app.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+}}}
+
+###############################################################################
+
Project: "libapriconv"="..\apr-iconv\libapriconv.dsp" - Package Owner=<4>
Package=<5>
@@ -126,10 +153,16 @@ Package=<4>
Project_Dep_Name libapr
End Project Dependency
Begin Project Dependency
- Project_Dep_Name xml
+ Project_Dep_Name libapriconv
End Project Dependency
Begin Project Dependency
- Project_Dep_Name libapriconv
+ Project_Dep_Name libapriconv_ccs_modules
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv_ces_modules
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name xml
End Project Dependency
}}}
diff --git a/srclib/apr-util/apu-config.in b/srclib/apr-util/apu-config.in
index b4d896e0..cb28dc25 100644
--- a/srclib/apr-util/apu-config.in
+++ b/srclib/apr-util/apu-config.in
@@ -1,10 +1,10 @@
#!/bin/sh
-# Copyright 2001-2005 The Apache Software Foundation or its licensors, as
-# applicable.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
diff --git a/srclib/apr-util/buckets/apr_brigade.c b/srclib/apr-util/buckets/apr_brigade.c
index 69813f29..b5d938a9 100644
--- a/srclib/apr-util/buckets/apr_brigade.c
+++ b/srclib/apr-util/buckets/apr_brigade.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -29,6 +29,12 @@
#include <sys/uio.h>
#endif
+/* TODO: ~((apr_size_t)0) appears to be the best way to quickly
+ * represent MAX_APR_SIZE_T for any CPU we support. Move this
+ * out as APR_MAX_SIZE_T to our public headers...
+ */
+#define MAX_APR_SIZE_T (~((apr_size_t)0))
+
static apr_status_t brigade_cleanup(void *data)
{
return apr_brigade_cleanup(data);
@@ -114,7 +120,10 @@ APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b,
e != APR_BRIGADE_SENTINEL(b);
e = APR_BUCKET_NEXT(e))
{
- if ((e->length == (apr_size_t)(-1)) && (point > (apr_size_t)(-1))) {
+ /* For an unknown length bucket, while 'point' is beyond the possible
+ * size contained in apr_size_t, read and continue...
+ */
+ if ((e->length == (apr_size_t)(-1)) && (point > MAX_APR_SIZE_T)) {
/* point is too far out to simply split this bucket,
* we must fix this bucket's size and keep going... */
rv = apr_bucket_read(e, &s, &len, APR_BLOCK_READ);
@@ -123,9 +132,12 @@ APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b,
return rv;
}
}
- if ((point < e->length) || (e->length == (apr_size_t)(-1))) {
- /* We already checked e->length -1 above, so we now
- * trust e->length < MAX_APR_SIZE_T.
+ else if (((apr_size_t)point < e->length) || (e->length == (apr_size_t)(-1))) {
+ /* We already consumed buckets where point is beyond
+ * our interest ( point > MAX_APR_SIZE_T ), above.
+ * Here point falls between 0 and MAX_APR_SIZE_T
+ * and is within this bucket, or this bucket's len
+ * is undefined, so now we are ready to split it.
* First try to split the bucket natively... */
if ((rv = apr_bucket_split(e, (apr_size_t)point))
!= APR_ENOTIMPL) {
@@ -144,7 +156,7 @@ APU_DECLARE(apr_status_t) apr_brigade_partition(apr_bucket_brigade *b,
/* this assumes that len == e->length, which is okay because e
* might have been morphed by the apr_bucket_read() above, but
* if it was, the length would have been adjusted appropriately */
- if (point < e->length) {
+ if ((apr_size_t)point < e->length) {
rv = apr_bucket_split(e, (apr_size_t)point);
*after_point = APR_BUCKET_NEXT(e);
return rv;
@@ -342,7 +354,7 @@ APU_DECLARE(apr_status_t) apr_brigade_to_iovec(apr_bucket_brigade *b,
++vec;
}
- *nvec = vec - orig;
+ *nvec = (int)(vec - orig);
return APR_SUCCESS;
}
diff --git a/srclib/apr-util/buckets/apr_buckets.c b/srclib/apr-util/buckets/apr_buckets.c
index 69b7f6cf..802f4e25 100644
--- a/srclib/apr-util/buckets/apr_buckets.c
+++ b/srclib/apr-util/buckets/apr_buckets.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_alloc.c b/srclib/apr-util/buckets/apr_buckets_alloc.c
index 81a82714..76031c76 100644
--- a/srclib/apr-util/buckets/apr_buckets_alloc.c
+++ b/srclib/apr-util/buckets/apr_buckets_alloc.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_eos.c b/srclib/apr-util/buckets/apr_buckets_eos.c
index 5783857d..25cff756 100644
--- a/srclib/apr-util/buckets/apr_buckets_eos.c
+++ b/srclib/apr-util/buckets/apr_buckets_eos.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_file.c b/srclib/apr-util/buckets/apr_buckets_file.c
index 7462bb70..214b53d2 100644
--- a/srclib/apr-util/buckets/apr_buckets_file.c
+++ b/srclib/apr-util/buckets/apr_buckets_file.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_flush.c b/srclib/apr-util/buckets/apr_buckets_flush.c
index 68b6bfa2..a5d84d75 100644
--- a/srclib/apr-util/buckets/apr_buckets_flush.c
+++ b/srclib/apr-util/buckets/apr_buckets_flush.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_heap.c b/srclib/apr-util/buckets/apr_buckets_heap.c
index d1ebd294..00f9808b 100644
--- a/srclib/apr-util/buckets/apr_buckets_heap.c
+++ b/srclib/apr-util/buckets/apr_buckets_heap.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_mmap.c b/srclib/apr-util/buckets/apr_buckets_mmap.c
index 3e7a9d73..19de291b 100644
--- a/srclib/apr-util/buckets/apr_buckets_mmap.c
+++ b/srclib/apr-util/buckets/apr_buckets_mmap.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_pipe.c b/srclib/apr-util/buckets/apr_buckets_pipe.c
index 36c0cd55..46b46970 100644
--- a/srclib/apr-util/buckets/apr_buckets_pipe.c
+++ b/srclib/apr-util/buckets/apr_buckets_pipe.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_pool.c b/srclib/apr-util/buckets/apr_buckets_pool.c
index 2226a751..56ba585e 100644
--- a/srclib/apr-util/buckets/apr_buckets_pool.c
+++ b/srclib/apr-util/buckets/apr_buckets_pool.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_refcount.c b/srclib/apr-util/buckets/apr_buckets_refcount.c
index 72747878..0e765d94 100644
--- a/srclib/apr-util/buckets/apr_buckets_refcount.c
+++ b/srclib/apr-util/buckets/apr_buckets_refcount.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_simple.c b/srclib/apr-util/buckets/apr_buckets_simple.c
index aabe0864..cef748be 100644
--- a/srclib/apr-util/buckets/apr_buckets_simple.c
+++ b/srclib/apr-util/buckets/apr_buckets_simple.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/buckets/apr_buckets_socket.c b/srclib/apr-util/buckets/apr_buckets_socket.c
index 7885d08e..68eae43b 100644
--- a/srclib/apr-util/buckets/apr_buckets_socket.c
+++ b/srclib/apr-util/buckets/apr_buckets_socket.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/build-outputs.mk b/srclib/apr-util/build-outputs.mk
index cf154fcf..cc4ee01d 100644
--- a/srclib/apr-util/build-outputs.mk
+++ b/srclib/apr-util/build-outputs.mk
@@ -42,11 +42,12 @@ xml/apr_xml.lo: xml/apr_xml.c .make.dirs include/apr_xml.h include/apr_xlate.h
strmatch/apr_strmatch.lo: strmatch/apr_strmatch.c .make.dirs include/apr_strmatch.h
xlate/xlate.lo: xlate/xlate.c .make.dirs include/apr_xlate.h
dbd/apr_dbd.lo: dbd/apr_dbd.c .make.dirs include/apr_dbd.h
+dbd/apr_dbd_mysql.lo: dbd/apr_dbd_mysql.c .make.dirs include/apu_version.h include/apr_buckets.h
dbd/apr_dbd_pgsql.lo: dbd/apr_dbd_pgsql.c .make.dirs
dbd/apr_dbd_sqlite2.lo: dbd/apr_dbd_sqlite2.c .make.dirs
dbd/apr_dbd_sqlite3.lo: dbd/apr_dbd_sqlite3.c .make.dirs
-OBJECTS_all = buckets/apr_brigade.lo buckets/apr_buckets.lo buckets/apr_buckets_alloc.lo buckets/apr_buckets_eos.lo buckets/apr_buckets_file.lo buckets/apr_buckets_flush.lo buckets/apr_buckets_heap.lo buckets/apr_buckets_mmap.lo buckets/apr_buckets_pipe.lo buckets/apr_buckets_pool.lo buckets/apr_buckets_refcount.lo buckets/apr_buckets_simple.lo buckets/apr_buckets_socket.lo crypto/apr_md4.lo crypto/apr_md5.lo crypto/apr_sha1.lo crypto/getuuid.lo crypto/uuid.lo dbm/apr_dbm.lo dbm/apr_dbm_berkeleydb.lo dbm/apr_dbm_gdbm.lo dbm/apr_dbm_ndbm.lo dbm/apr_dbm_sdbm.lo dbm/sdbm/sdbm.lo dbm/sdbm/sdbm_hash.lo dbm/sdbm/sdbm_lock.lo dbm/sdbm/sdbm_pair.lo encoding/apr_base64.lo hooks/apr_hooks.lo ldap/apr_ldap_init.lo ldap/apr_ldap_option.lo ldap/apr_ldap_url.lo misc/apr_date.lo misc/apr_queue.lo misc/apr_reslist.lo misc/apr_rmm.lo misc/apu_version.lo uri/apr_uri.lo xml/apr_xml.lo strmatch/apr_strmatch.lo xlate/xlate.lo dbd/apr_dbd.lo dbd/apr_dbd_pgsql.lo dbd/apr_dbd_sqlite2.lo dbd/apr_dbd_sqlite3.lo
+OBJECTS_all = buckets/apr_brigade.lo buckets/apr_buckets.lo buckets/apr_buckets_alloc.lo buckets/apr_buckets_eos.lo buckets/apr_buckets_file.lo buckets/apr_buckets_flush.lo buckets/apr_buckets_heap.lo buckets/apr_buckets_mmap.lo buckets/apr_buckets_pipe.lo buckets/apr_buckets_pool.lo buckets/apr_buckets_refcount.lo buckets/apr_buckets_simple.lo buckets/apr_buckets_socket.lo crypto/apr_md4.lo crypto/apr_md5.lo crypto/apr_sha1.lo crypto/getuuid.lo crypto/uuid.lo dbm/apr_dbm.lo dbm/apr_dbm_berkeleydb.lo dbm/apr_dbm_gdbm.lo dbm/apr_dbm_ndbm.lo dbm/apr_dbm_sdbm.lo dbm/sdbm/sdbm.lo dbm/sdbm/sdbm_hash.lo dbm/sdbm/sdbm_lock.lo dbm/sdbm/sdbm_pair.lo encoding/apr_base64.lo hooks/apr_hooks.lo ldap/apr_ldap_init.lo ldap/apr_ldap_option.lo ldap/apr_ldap_url.lo misc/apr_date.lo misc/apr_queue.lo misc/apr_reslist.lo misc/apr_rmm.lo misc/apu_version.lo uri/apr_uri.lo xml/apr_xml.lo strmatch/apr_strmatch.lo xlate/xlate.lo dbd/apr_dbd.lo dbd/apr_dbd_mysql.lo dbd/apr_dbd_pgsql.lo dbd/apr_dbd_sqlite2.lo dbd/apr_dbd_sqlite3.lo
OBJECTS_unix = $(OBJECTS_all)
diff --git a/srclib/apr-util/build/apr_common.m4 b/srclib/apr-util/build/apr_common.m4
index 90793ee1..caae9bfa 100644
--- a/srclib/apr-util/build/apr_common.m4
+++ b/srclib/apr-util/build/apr_common.m4
@@ -959,3 +959,19 @@ fi
AC_SUBST(MKDEP)
])
+
+dnl
+dnl APR_CHECK_TYPES_COMPATIBLE(TYPE-1, TYPE-2, [ACTION-IF-TRUE])
+dnl
+dnl Try to determine whether two types are the same. Only works
+dnl for gcc and icc.
+dnl
+AC_DEFUN([APR_CHECK_TYPES_COMPATIBLE], [
+define([apr_cvname], apr_cv_typematch_[]translit([$1], [ ], [_])_[]translit([$2], [ ], [_]))
+AC_CACHE_CHECK([whether $1 and $2 are the same], apr_cvname, [
+AC_TRY_COMPILE(AC_INCLUDES_DEFAULT, [
+ int foo[0 - !__builtin_types_compatible_p($1, $2)];
+], [apr_cvname=yes
+$3], [apr_cvname=no])])
+])
+
diff --git a/srclib/apr-util/build/apu-conf.m4 b/srclib/apr-util/build/apu-conf.m4
index cba3fd65..157980b8 100644
--- a/srclib/apr-util/build/apu-conf.m4
+++ b/srclib/apr-util/build/apu-conf.m4
@@ -1,10 +1,10 @@
dnl -------------------------------------------------------- -*- autoconf -*-
-dnl Copyright 2000-2005 The Apache Software Foundation or its licensors, as
-dnl applicable.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements. See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
@@ -111,7 +111,8 @@ AC_DEFUN([APU_SYSTEM_EXPAT], [
APU_TRY_EXPAT_LINK([Expat 1.95.x in /usr/local],
apu_cv_expat_usrlocal, [expat.h], [-lexpat],
- [APR_ADDTO(APRUTIL_INCLUDES, [-I/usr/local/include])],[
+ [APR_ADDTO(APRUTIL_INCLUDES, [-I/usr/local/include])
+ APR_ADDTO(APRUTIL_LDFLAGS, [-L/usr/local/lib])],[
APR_REMOVEFROM(LDFLAGS, [-L/usr/local/lib])
APR_REMOVEFROM(CPPFLAGS, [-I/usr/local/include])
])
@@ -124,6 +125,9 @@ dnl APU_FIND_EXPAT: figure out where EXPAT is located (or use bundled)
dnl
AC_DEFUN([APU_FIND_EXPAT], [
+save_cppflags="$CPPFLAGS"
+save_ldflags="$LDFLAGS"
+
apu_has_expat=0
# Default: will use either external or bundled expat.
@@ -144,6 +148,7 @@ AC_ARG_WITH([expat],
APR_ADDTO(LDFLAGS, [-L$withval/lib])
APR_ADDTO(CPPFLAGS, [-I$withval/include])
APR_ADDTO(APRUTIL_INCLUDES, [-I$withval/include])
+ APR_ADDTO(APRUTIL_LDFLAGS, [-L$withval/lib])
fi
# ...and refuse to fall back on the builtin expat.
apu_try_builtin_expat=0
@@ -169,6 +174,9 @@ APR_ADDTO(APRUTIL_LIBS, [$apu_expat_libs])
APR_XML_DIR=$bundled_subdir
AC_SUBST(APR_XML_DIR)
+
+CPPFLAGS=$save_cppflags
+LDFLAGS=$save_ldflags
])
@@ -219,6 +227,7 @@ apu_has_ldap_novell="0"
apu_has_ldap_microsoft="0"
apu_has_ldap_netscape="0"
apu_has_ldap_mozilla="0"
+apu_has_ldap_zos="0"
apu_has_ldap_other="0"
AC_ARG_WITH(ldap-include,[ --with-ldap-include=path path to ldap include files with trailing slash])
@@ -320,6 +329,15 @@ dnl The iPlanet C SDK 5.0 is as yet untested...
apr_cv_ldap_toolkit="Mozilla"])
fi
if test "x$apr_cv_ldap_toolkit" = "x"; then
+ case "$host" in
+ *-ibm-os390)
+ AC_EGREP_CPP([IBM], [$lber_h
+ $ldap_h], [apu_has_ldap_zos="1"
+ apr_cv_ldap_toolkit="zOS"])
+ ;;
+ esac
+ fi
+ if test "x$apr_cv_ldap_toolkit" = "x"; then
apu_has_ldap_other="1"
apr_cv_ldap_toolkit="unknown"
fi
@@ -348,6 +366,7 @@ AC_SUBST(apu_has_ldap_novell)
AC_SUBST(apu_has_ldap_microsoft)
AC_SUBST(apu_has_ldap_netscape)
AC_SUBST(apu_has_ldap_mozilla)
+AC_SUBST(apu_has_ldap_zos)
AC_SUBST(apu_has_ldap_other)
])
diff --git a/srclib/apr-util/build/apu-hints.m4 b/srclib/apr-util/build/apu-hints.m4
index ecdb384e..6d6784a8 100644
--- a/srclib/apr-util/build/apu-hints.m4
+++ b/srclib/apr-util/build/apu-hints.m4
@@ -1,10 +1,10 @@
dnl -------------------------------------------------------- -*- autoconf -*-
-dnl Copyright 2003-2005 The Apache Software Foundation or its licensors, as
-dnl applicable.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements. See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
diff --git a/srclib/apr-util/build/apu-iconv.m4 b/srclib/apr-util/build/apu-iconv.m4
index b27b75ce..13042273 100644
--- a/srclib/apr-util/build/apu-iconv.m4
+++ b/srclib/apr-util/build/apu-iconv.m4
@@ -1,10 +1,10 @@
dnl -------------------------------------------------------- -*- autoconf -*-
-dnl Copyright 2002-2005 The Apache Software Foundation, or its licensors, as
-dnl applicable.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements. See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
@@ -35,21 +35,30 @@ AC_DEFUN([APU_FIND_ICONV], [
apu_iconv_dir="unknown"
have_apr_iconv="0"
+want_iconv="1"
AC_ARG_WITH(iconv,[ --with-iconv[=DIR] path to iconv installation],
[ apu_iconv_dir="$withval"
- if test "$apu_iconv_dir" != "yes"; then
- APR_ADDTO(CPPFLAGS,[-I$apu_iconv_dir/include])
- APR_ADDTO(LDFLAGS,[-L$apu_iconv_dir/lib])
- fi
- if test -f "$apu_iconv_dir/include/api_version.h"; then
- have_apr_iconv="1"
+ if test "$apu_iconv_dir" = "no"; then
+ have_apr_iconv="0"
have_iconv="0"
- APR_REMOVEFROM(LIBS,[-lapriconv])
- AC_MSG_RESULT("Using apr-iconv")
+ want_iconv="0"
+ elif test "$apu_iconv_dir" != "yes"; then
+ if test -f "$apu_iconv_dir/include/apr-1/api_version.h"; then
+ have_apr_iconv="1"
+ have_iconv="0"
+ APR_ADDTO(APRUTIL_INCLUDES,[-I$apu_iconv_dir/include/apr-1])
+ APR_ADDTO(APRUTIL_LIBS,[$apu_iconv_dir/lib/libapriconv-1.la])
+ AC_MSG_RESULT(using apr-iconv)
+ elif test -f "$apu_iconv_dir/include/iconv.h"; then
+ have_apr_iconv="0"
+ have_iconv="1"
+ APR_ADDTO(CPPFLAGS,[-I$apu_iconv_dir/include])
+ APR_ADDTO(LDFLAGS,[-L$apu_iconv_dir/lib])
+ fi
fi
])
-if test "$have_apr_iconv" != "1"; then
+if test "$want_iconv" = "1" -a "$have_apr_iconv" != "1"; then
AC_CHECK_HEADER(iconv.h, [
APU_TRY_ICONV([ have_iconv="1" ], [
@@ -67,7 +76,7 @@ if test "$have_apr_iconv" != "1"; then
], [ have_iconv="0" ])
fi
-if test "$apu_iconv_dir" != "unknown"; then
+if test "$want_iconv" = "1" -a "$apu_iconv_dir" != "unknown"; then
if test "$have_iconv" != "1"; then
if test "$have_apr_iconv" != "1"; then
AC_MSG_ERROR([iconv support requested, but not found])
diff --git a/srclib/apr-util/build/dbd.m4 b/srclib/apr-util/build/dbd.m4
index 076efb51..2cc18fc0 100644
--- a/srclib/apr-util/build/dbd.m4
+++ b/srclib/apr-util/build/dbd.m4
@@ -1,10 +1,10 @@
dnl -------------------------------------------------------- -*- autoconf -*-
-dnl Copyright 2005 The Apache Software Foundation or its licensors, as
-dnl applicable.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements. See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
@@ -24,9 +24,9 @@ dnl
AC_DEFUN([APU_CHECK_DBD], [
apu_have_pgsql=0
- AC_ARG_WITH([pgsql], [
- --with-pgsql=DIR specify PostgreSQL location
- ], [
+ AC_ARG_WITH([pgsql],
+ APR_HELP_STRING([--with-pgsql=DIR], [specify PostgreSQL location]),
+ [
apu_have_pgsql=0
if test "$withval" = "yes"; then
AC_CHECK_HEADERS(libpq-fe.h, AC_CHECK_LIB(pq, PQsendQueryPrepared, [apu_have_pgsql=1]))
@@ -78,99 +78,71 @@ dnl
AC_DEFUN([APU_CHECK_DBD_MYSQL], [
apu_have_mysql=0
- AC_CHECK_FILES([dbd/apr_dbd_mysql.c],[
- AC_ARG_WITH([mysql], [
- --with-mysql=DIR **** SEE INSTALL.MySQL ****
- ], [
- apu_have_mysql=0
- if test "$withval" = "yes"; then
- old_cppflags="$CPPFLAGS"
- old_ldflags="$LDFLAGS"
-
- AC_PATH_PROG([MYSQL_CONFIG],[mysql_config])
- if test "x$MYSQL_CONFIG" != 'x'; then
- mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
- mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
-
- APR_ADDTO(CPPFLAGS, [$mysql_CPPFLAGS])
- APR_ADDTO(LDFLAGS, [$mysql_LDFLAGS])
- fi
-
- AC_CHECK_HEADERS(mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
- if test "$apu_have_mysql" = "0"; then
- AC_CHECK_HEADERS(mysql/mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
- else
- if test "x$MYSQL_CONFIG" != 'x'; then
- APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS])
- APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS])
- fi
- fi
-
- CPPFLAGS="$old_cppflags"
- LDFLAGS="$old_ldflags"
- elif test "$withval" = "no"; then
- apu_have_mysql=0
- else
- old_cppflags="$CPPFLAGS"
- old_ldflags="$LDFLAGS"
+ AC_ARG_WITH([mysql],
+ APR_HELP_STRING([--with-mysql=DIR], [specify MySQL location (disabled by default)]),
+ [
+ apu_have_mysql=0
+ if test "$withval" = "yes"; then
+ old_cppflags="$CPPFLAGS"
+ old_ldflags="$LDFLAGS"
- AC_PATH_PROG([MYSQL_CONFIG],[mysql_config],,[$withval/bin])
- if test "x$MYSQL_CONFIG" != 'x'; then
- mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
- mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
- else
- mysql_CPPFLAGS="-I$withval/include"
- mysql_LDFLAGS="-L$withval/lib "
- fi
+ AC_PATH_PROG([MYSQL_CONFIG],[mysql_config])
+ if test "x$MYSQL_CONFIG" != 'x'; then
+ mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
+ mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
APR_ADDTO(CPPFLAGS, [$mysql_CPPFLAGS])
APR_ADDTO(LDFLAGS, [$mysql_LDFLAGS])
+ fi
- AC_MSG_NOTICE(checking for mysql in $withval)
- AC_CHECK_HEADERS(mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
- if test "$apu_have_mysql" != "0"; then
+ AC_CHECK_HEADERS(mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
+ if test "$apu_have_mysql" = "0"; then
+ AC_CHECK_HEADERS(mysql/mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
+ else
+ if test "x$MYSQL_CONFIG" != 'x'; then
APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS])
APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS])
fi
-
- if test "$apu_have_mysql" != "1"; then
- AC_CHECK_HEADERS(mysql/mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
- if test "$apu_have_mysql" != "0"; then
- APR_ADDTO(APRUTIL_INCLUDES, [-I$withval/include/mysql])
- APR_ADDTO(APRUTIL_LDFLAGS, [-L$withval/lib])
- fi
- fi
-
- CPPFLAGS="$old_cppflags"
- LDFLAGS="$old_ldflags"
fi
- ], [
- apu_have_mysql=0
+ CPPFLAGS="$old_cppflags"
+ LDFLAGS="$old_ldflags"
+ elif test "$withval" = "no"; then
+ apu_have_mysql=0
+ else
old_cppflags="$CPPFLAGS"
old_ldflags="$LDFLAGS"
- AC_PATH_PROG([MYSQL_CONFIG],[mysql_config])
+ AC_PATH_PROG([MYSQL_CONFIG],[mysql_config],,[$withval/bin])
if test "x$MYSQL_CONFIG" != 'x'; then
mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
-
- APR_ADDTO(CPPFLAGS, [$mysql_CPPFLAGS])
- APR_ADDTO(LDFLAGS, [$mysql_LDFLAGS])
+ else
+ mysql_CPPFLAGS="-I$withval/include"
+ mysql_LDFLAGS="-L$withval/lib "
fi
- AC_CHECK_HEADERS(mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
+ APR_ADDTO(CPPFLAGS, [$mysql_CPPFLAGS])
+ APR_ADDTO(LDFLAGS, [$mysql_LDFLAGS])
+ AC_MSG_NOTICE(checking for mysql in $withval)
+ AC_CHECK_HEADERS(mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
if test "$apu_have_mysql" != "0"; then
- if test "x$MYSQL_CONFIG" != 'x'; then
- APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS])
- APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS])
+ APR_ADDTO(APRUTIL_INCLUDES, [$mysql_CPPFLAGS])
+ APR_ADDTO(APRUTIL_LDFLAGS, [$mysql_LDFLAGS])
+ fi
+
+ if test "$apu_have_mysql" != "1"; then
+ AC_CHECK_HEADERS(mysql/mysql.h, AC_CHECK_LIB(mysqlclient_r, mysql_init, [apu_have_mysql=1]))
+ if test "$apu_have_mysql" != "0"; then
+ APR_ADDTO(APRUTIL_INCLUDES, [-I$withval/include/mysql])
+ APR_ADDTO(APRUTIL_LDFLAGS, [-L$withval/lib])
fi
fi
CPPFLAGS="$old_cppflags"
LDFLAGS="$old_ldflags"
- ])
+ fi
])
AC_SUBST(apu_have_mysql)
@@ -186,9 +158,9 @@ dnl
AC_DEFUN([APU_CHECK_DBD_SQLITE3], [
apu_have_sqlite3=0
- AC_ARG_WITH([sqlite3], [
- --with-sqlite3=DIR
- ], [
+ AC_ARG_WITH([sqlite3],
+ APR_HELP_STRING([--with-sqlite3=DIR], [enable sqlite3 DBD driver]),
+ [
apu_have_sqlite3=0
if test "$withval" = "yes"; then
AC_CHECK_HEADERS(sqlite3.h, AC_CHECK_LIB(sqlite3, sqlite3_open, [apu_have_sqlite3=1]))
@@ -232,9 +204,9 @@ dnl
AC_DEFUN([APU_CHECK_DBD_SQLITE2], [
apu_have_sqlite2=0
- AC_ARG_WITH([sqlite2], [
- --with-sqlite2=DIR
- ], [
+ AC_ARG_WITH([sqlite2],
+ APR_HELP_STRING([--with-sqlite2=DIR], [enable sqlite2 DBD driver]),
+ [
apu_have_sqlite2=0
if test "$withval" = "yes"; then
AC_CHECK_HEADERS(sqlite.h, AC_CHECK_LIB(sqlite, sqlite_open, [apu_have_sqlite2=1]))
diff --git a/srclib/apr-util/build/dbm.m4 b/srclib/apr-util/build/dbm.m4
index 61a12495..85f1cb54 100644
--- a/srclib/apr-util/build/dbm.m4
+++ b/srclib/apr-util/build/dbm.m4
@@ -1,10 +1,10 @@
dnl -------------------------------------------------------- -*- autoconf -*-
-dnl Copyright 2002-2005 The Apache Software Foundation or its licensors, as
-dnl applicable.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements. See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
diff --git a/srclib/apr-util/build/find_apu.m4 b/srclib/apr-util/build/find_apu.m4
index e2e27311..4ee01e68 100644
--- a/srclib/apr-util/build/find_apu.m4
+++ b/srclib/apr-util/build/find_apu.m4
@@ -1,10 +1,10 @@
dnl -------------------------------------------------------- -*- autoconf -*-
-dnl Copyright 2002-2005 The Apache Software Foundation or its licensors, as
-dnl applicable.
-dnl
-dnl Licensed under the Apache License, Version 2.0 (the "License");
-dnl you may not use this file except in compliance with the License.
-dnl You may obtain a copy of the License at
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements. See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License. You may obtain a copy of the License at
dnl
dnl http://www.apache.org/licenses/LICENSE-2.0
dnl
diff --git a/srclib/apr-util/build/pkg/buildpkg.sh b/srclib/apr-util/build/pkg/buildpkg.sh
index ba4f4d13..b0a35aa6 100755
--- a/srclib/apr-util/build/pkg/buildpkg.sh
+++ b/srclib/apr-util/build/pkg/buildpkg.sh
@@ -1,10 +1,10 @@
#!/bin/sh
-# Copyright 2000-2005 The Apache Software Foundation or its licensors, as
-# applicable.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
diff --git a/srclib/apr-util/buildconf b/srclib/apr-util/buildconf
index 1b39f1bd..3a8467a1 100755
--- a/srclib/apr-util/buildconf
+++ b/srclib/apr-util/buildconf
@@ -1,11 +1,11 @@
#!/bin/sh
#
-# Copyright 1999-2005 The Apache Software Foundation or its licensors, as
-# applicable.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
diff --git a/srclib/apr-util/configure b/srclib/apr-util/configure
index 21207fc5..7b1c89cb 100755
--- a/srclib/apr-util/configure
+++ b/srclib/apr-util/configure
@@ -651,6 +651,7 @@ target_os
INSTALL_PROGRAM
INSTALL_SCRIPT
INSTALL_DATA
+LT_NO_INSTALL
top_builddir
abs_srcdir
abs_builddir
@@ -687,6 +688,7 @@ apu_has_ldap_novell
apu_has_ldap_microsoft
apu_has_ldap_netscape
apu_has_ldap_mozilla
+apu_has_ldap_zos
apu_has_ldap_other
apu_use_sdbm
apu_use_gdbm
@@ -1333,18 +1335,10 @@ Optional Packages:
the \`=PATH' part completely, the configure script will search
for Berkeley DB in a number of standard places.
-
- --with-pgsql=DIR specify PostgreSQL location
-
-
- --with-mysql=DIR **** SEE INSTALL.MySQL ****
-
-
- --with-sqlite3=DIR
-
-
- --with-sqlite2=DIR
-
+ --with-pgsql=DIR specify PostgreSQL location
+ --with-mysql=DIR specify MySQL location (disabled by default)
+ --with-sqlite3=DIR enable sqlite3 DBD driver
+ --with-sqlite2=DIR enable sqlite2 DBD driver
--with-expat=DIR specify Expat location, or 'builtin'
--with-iconv=DIR path to iconv installation
@@ -1979,6 +1973,9 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
rm -f config.nice
cat >config.nice<<EOF
#! /bin/sh
@@ -2263,6 +2260,16 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+# Use -no-install to link the test programs on all platforms
+# but Darwin, where it would cause the programs to be linked
+# against installed versions of libapr instead of those just
+# built.
+case $host in
+*-apple-darwin*) LT_NO_INSTALL="" ;;
+*) LT_NO_INSTALL="-no-install" ;;
+esac
+
+
top_builddir="$abs_builddir"
@@ -4731,6 +4738,7 @@ apu_has_ldap_novell="0"
apu_has_ldap_microsoft="0"
apu_has_ldap_netscape="0"
apu_has_ldap_mozilla="0"
+apu_has_ldap_zos="0"
apu_has_ldap_other="0"
@@ -16153,6 +16161,28 @@ rm -f conftest*
fi
if test "x$apr_cv_ldap_toolkit" = "x"; then
+ case "$host" in
+ *-ibm-os390)
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$lber_h
+ $ldap_h
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "IBM" >/dev/null 2>&1; then
+ apu_has_ldap_zos="1"
+ apr_cv_ldap_toolkit="zOS"
+fi
+rm -f conftest*
+
+ ;;
+ esac
+ fi
+ if test "x$apr_cv_ldap_toolkit" = "x"; then
apu_has_ldap_other="1"
apr_cv_ldap_toolkit="unknown"
fi
@@ -16190,6 +16220,7 @@ fi
+
apu_use_sdbm=0
apu_use_ndbm=0
apu_use_gdbm=0
@@ -40848,40 +40879,16 @@ fi
apu_have_mysql=0
- { echo "$as_me:$LINENO: checking for dbd/apr_dbd_mysql.c" >&5
-echo $ECHO_N "checking for dbd/apr_dbd_mysql.c... $ECHO_C" >&6; }
-if test "${ac_cv_file_dbd_apr_dbd_mysql_c+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- test "$cross_compiling" = yes &&
- { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5
-echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
- { (exit 1); exit 1; }; }
-if test -r "dbd/apr_dbd_mysql.c"; then
- ac_cv_file_dbd_apr_dbd_mysql_c=yes
-else
- ac_cv_file_dbd_apr_dbd_mysql_c=no
-fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_file_dbd_apr_dbd_mysql_c" >&5
-echo "${ECHO_T}$ac_cv_file_dbd_apr_dbd_mysql_c" >&6; }
-if test $ac_cv_file_dbd_apr_dbd_mysql_c = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DBD_APR_DBD_MYSQL_C 1
-_ACEOF
-
-
# Check whether --with-mysql was given.
if test "${with_mysql+set}" = set; then
withval=$with_mysql;
- apu_have_mysql=0
- if test "$withval" = "yes"; then
- old_cppflags="$CPPFLAGS"
- old_ldflags="$LDFLAGS"
+ apu_have_mysql=0
+ if test "$withval" = "yes"; then
+ old_cppflags="$CPPFLAGS"
+ old_ldflags="$LDFLAGS"
- # Extract the first word of "mysql_config", so it can be a program name with args.
+ # Extract the first word of "mysql_config", so it can be a program name with args.
set dummy mysql_config; ac_word=$2
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
@@ -40921,9 +40928,9 @@ echo "${ECHO_T}no" >&6; }
fi
- if test "x$MYSQL_CONFIG" != 'x'; then
- mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
- mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
+ if test "x$MYSQL_CONFIG" != 'x'; then
+ mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
+ mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
if test "x$CPPFLAGS" = "x"; then
@@ -40967,7 +40974,7 @@ fi
done
fi
- fi
+ fi
for ac_header in mysql.h
@@ -41213,7 +41220,7 @@ fi
done
- if test "$apu_have_mysql" = "0"; then
+ if test "$apu_have_mysql" = "0"; then
for ac_header in mysql/mysql.h
do
@@ -41458,8 +41465,8 @@ fi
done
- else
- if test "x$MYSQL_CONFIG" != 'x'; then
+ else
+ if test "x$MYSQL_CONFIG" != 'x'; then
if test "x$APRUTIL_INCLUDES" = "x"; then
test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"$mysql_CPPFLAGS\""
@@ -41502,18 +41509,18 @@ done
done
fi
- fi
fi
+ fi
- CPPFLAGS="$old_cppflags"
- LDFLAGS="$old_ldflags"
- elif test "$withval" = "no"; then
- apu_have_mysql=0
- else
- old_cppflags="$CPPFLAGS"
- old_ldflags="$LDFLAGS"
+ CPPFLAGS="$old_cppflags"
+ LDFLAGS="$old_ldflags"
+ elif test "$withval" = "no"; then
+ apu_have_mysql=0
+ else
+ old_cppflags="$CPPFLAGS"
+ old_ldflags="$LDFLAGS"
- # Extract the first word of "mysql_config", so it can be a program name with args.
+ # Extract the first word of "mysql_config", so it can be a program name with args.
set dummy mysql_config; ac_word=$2
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
@@ -41553,13 +41560,13 @@ echo "${ECHO_T}no" >&6; }
fi
- if test "x$MYSQL_CONFIG" != 'x'; then
- mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
- mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
- else
- mysql_CPPFLAGS="-I$withval/include"
- mysql_LDFLAGS="-L$withval/lib "
- fi
+ if test "x$MYSQL_CONFIG" != 'x'; then
+ mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
+ mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
+ else
+ mysql_CPPFLAGS="-I$withval/include"
+ mysql_LDFLAGS="-L$withval/lib "
+ fi
if test "x$CPPFLAGS" = "x"; then
@@ -41604,7 +41611,7 @@ fi
fi
- { echo "$as_me:$LINENO: checking for mysql in $withval" >&5
+ { echo "$as_me:$LINENO: checking for mysql in $withval" >&5
echo "$as_me: checking for mysql in $withval" >&6;}
for ac_header in mysql.h
@@ -41850,7 +41857,7 @@ fi
done
- if test "$apu_have_mysql" != "0"; then
+ if test "$apu_have_mysql" != "0"; then
if test "x$APRUTIL_INCLUDES" = "x"; then
test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"$mysql_CPPFLAGS\""
@@ -41893,9 +41900,9 @@ done
done
fi
- fi
+ fi
- if test "$apu_have_mysql" != "1"; then
+ if test "$apu_have_mysql" != "1"; then
for ac_header in mysql/mysql.h
do
@@ -42140,7 +42147,7 @@ fi
done
- if test "$apu_have_mysql" != "0"; then
+ if test "$apu_have_mysql" != "0"; then
if test "x$APRUTIL_INCLUDES" = "x"; then
test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$withval/include/mysql\""
@@ -42183,405 +42190,12 @@ done
done
fi
- fi
- fi
-
- CPPFLAGS="$old_cppflags"
- LDFLAGS="$old_ldflags"
- fi
-
-else
-
- apu_have_mysql=0
-
- old_cppflags="$CPPFLAGS"
- old_ldflags="$LDFLAGS"
-
- # Extract the first word of "mysql_config", so it can be a program name with args.
-set dummy mysql_config; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_MYSQL_CONFIG+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $MYSQL_CONFIG in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_MYSQL_CONFIG="$MYSQL_CONFIG" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_MYSQL_CONFIG="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-fi
-MYSQL_CONFIG=$ac_cv_path_MYSQL_CONFIG
-if test -n "$MYSQL_CONFIG"; then
- { echo "$as_me:$LINENO: result: $MYSQL_CONFIG" >&5
-echo "${ECHO_T}$MYSQL_CONFIG" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
- if test "x$MYSQL_CONFIG" != 'x'; then
- mysql_CPPFLAGS="`$MYSQL_CONFIG --include`"
- mysql_LDFLAGS="`$MYSQL_CONFIG --libs_r`"
-
-
- if test "x$CPPFLAGS" = "x"; then
- test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$mysql_CPPFLAGS\""
- CPPFLAGS="$mysql_CPPFLAGS"
- else
- apr_addto_bugger="$mysql_CPPFLAGS"
- for i in $apr_addto_bugger; do
- apr_addto_duplicate="0"
- for j in $CPPFLAGS; do
- if test "x$i" = "x$j"; then
- apr_addto_duplicate="1"
- break
- fi
- done
- if test $apr_addto_duplicate = "0"; then
- test "x$silent" != "xyes" && echo " adding \"$i\" to CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $i"
- fi
- done
- fi
-
-
- if test "x$LDFLAGS" = "x"; then
- test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$mysql_LDFLAGS\""
- LDFLAGS="$mysql_LDFLAGS"
- else
- apr_addto_bugger="$mysql_LDFLAGS"
- for i in $apr_addto_bugger; do
- apr_addto_duplicate="0"
- for j in $LDFLAGS; do
- if test "x$i" = "x$j"; then
- apr_addto_duplicate="1"
- break
- fi
- done
- if test $apr_addto_duplicate = "0"; then
- test "x$silent" != "xyes" && echo " adding \"$i\" to LDFLAGS"
- LDFLAGS="$LDFLAGS $i"
- fi
- done
- fi
-
- fi
-
-
-for ac_header in mysql.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null; then
- if test -s conftest.err; then
- ac_cpp_err=$ac_c_preproc_warn_flag
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
- else
- ac_cpp_err=
- fi
-else
- ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
- { echo "$as_me:$LINENO: checking for mysql_init in -lmysqlclient_r" >&5
-echo $ECHO_N "checking for mysql_init in -lmysqlclient_r... $ECHO_C" >&6; }
-if test "${ac_cv_lib_mysqlclient_r_mysql_init+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lmysqlclient_r $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char mysql_init ();
-int
-main ()
-{
-return mysql_init ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_lib_mysqlclient_r_mysql_init=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_mysqlclient_r_mysql_init=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_mysqlclient_r_mysql_init" >&5
-echo "${ECHO_T}$ac_cv_lib_mysqlclient_r_mysql_init" >&6; }
-if test $ac_cv_lib_mysqlclient_r_mysql_init = yes; then
- apu_have_mysql=1
-fi
-
-fi
-
-done
-
-
- if test "$apu_have_mysql" != "0"; then
- if test "x$MYSQL_CONFIG" != 'x'; then
-
- if test "x$APRUTIL_INCLUDES" = "x"; then
- test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"$mysql_CPPFLAGS\""
- APRUTIL_INCLUDES="$mysql_CPPFLAGS"
- else
- apr_addto_bugger="$mysql_CPPFLAGS"
- for i in $apr_addto_bugger; do
- apr_addto_duplicate="0"
- for j in $APRUTIL_INCLUDES; do
- if test "x$i" = "x$j"; then
- apr_addto_duplicate="1"
- break
- fi
- done
- if test $apr_addto_duplicate = "0"; then
- test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES"
- APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i"
- fi
- done
- fi
-
-
- if test "x$APRUTIL_LDFLAGS" = "x"; then
- test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"$mysql_LDFLAGS\""
- APRUTIL_LDFLAGS="$mysql_LDFLAGS"
- else
- apr_addto_bugger="$mysql_LDFLAGS"
- for i in $apr_addto_bugger; do
- apr_addto_duplicate="0"
- for j in $APRUTIL_LDFLAGS; do
- if test "x$i" = "x$j"; then
- apr_addto_duplicate="1"
- break
- fi
- done
- if test $apr_addto_duplicate = "0"; then
- test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS"
- APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i"
- fi
- done
- fi
-
fi
fi
CPPFLAGS="$old_cppflags"
LDFLAGS="$old_ldflags"
-
-fi
-
+ fi
fi
@@ -44431,6 +44045,9 @@ fi
+save_cppflags="$CPPFLAGS"
+save_ldflags="$LDFLAGS"
+
apu_has_expat=0
# Default: will use either external or bundled expat.
@@ -44517,6 +44134,27 @@ echo "$as_me: error: Expat cannot be disabled (at this time)" >&2;}
done
fi
+
+ if test "x$APRUTIL_LDFLAGS" = "x"; then
+ test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L$withval/lib\""
+ APRUTIL_LDFLAGS="-L$withval/lib"
+ else
+ apr_addto_bugger="-L$withval/lib"
+ for i in $apr_addto_bugger; do
+ apr_addto_duplicate="0"
+ for j in $APRUTIL_LDFLAGS; do
+ if test "x$i" = "x$j"; then
+ apr_addto_duplicate="1"
+ break
+ fi
+ done
+ if test $apr_addto_duplicate = "0"; then
+ test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS"
+ APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i"
+ fi
+ done
+ fi
+
fi
# ...and refuse to fall back on the builtin expat.
apu_try_builtin_expat=0
@@ -45042,6 +44680,27 @@ _ACEOF
done
fi
+
+ if test "x$APRUTIL_LDFLAGS" = "x"; then
+ test "x$silent" != "xyes" && echo " setting APRUTIL_LDFLAGS to \"-L/usr/local/lib\""
+ APRUTIL_LDFLAGS="-L/usr/local/lib"
+ else
+ apr_addto_bugger="-L/usr/local/lib"
+ for i in $apr_addto_bugger; do
+ apr_addto_duplicate="0"
+ for j in $APRUTIL_LDFLAGS; do
+ if test "x$i" = "x$j"; then
+ apr_addto_duplicate="1"
+ break
+ fi
+ done
+ if test $apr_addto_duplicate = "0"; then
+ test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LDFLAGS"
+ APRUTIL_LDFLAGS="$APRUTIL_LDFLAGS $i"
+ fi
+ done
+ fi
+
else
apu_has_expat=0
@@ -45315,15 +44974,73 @@ fi
APR_XML_DIR=$bundled_subdir
+CPPFLAGS=$save_cppflags
+LDFLAGS=$save_ldflags
+
apu_iconv_dir="unknown"
have_apr_iconv="0"
+want_iconv="1"
# Check whether --with-iconv was given.
if test "${with_iconv+set}" = set; then
withval=$with_iconv; apu_iconv_dir="$withval"
- if test "$apu_iconv_dir" != "yes"; then
+ if test "$apu_iconv_dir" = "no"; then
+ have_apr_iconv="0"
+ have_iconv="0"
+ want_iconv="0"
+ elif test "$apu_iconv_dir" != "yes"; then
+ if test -f "$apu_iconv_dir/include/apr-1/api_version.h"; then
+ have_apr_iconv="1"
+ have_iconv="0"
+
+ if test "x$APRUTIL_INCLUDES" = "x"; then
+ test "x$silent" != "xyes" && echo " setting APRUTIL_INCLUDES to \"-I$apu_iconv_dir/include/apr-1\""
+ APRUTIL_INCLUDES="-I$apu_iconv_dir/include/apr-1"
+ else
+ apr_addto_bugger="-I$apu_iconv_dir/include/apr-1"
+ for i in $apr_addto_bugger; do
+ apr_addto_duplicate="0"
+ for j in $APRUTIL_INCLUDES; do
+ if test "x$i" = "x$j"; then
+ apr_addto_duplicate="1"
+ break
+ fi
+ done
+ if test $apr_addto_duplicate = "0"; then
+ test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_INCLUDES"
+ APRUTIL_INCLUDES="$APRUTIL_INCLUDES $i"
+ fi
+ done
+ fi
+
+
+ if test "x$APRUTIL_LIBS" = "x"; then
+ test "x$silent" != "xyes" && echo " setting APRUTIL_LIBS to \"$apu_iconv_dir/lib/libapriconv-1.la\""
+ APRUTIL_LIBS="$apu_iconv_dir/lib/libapriconv-1.la"
+ else
+ apr_addto_bugger="$apu_iconv_dir/lib/libapriconv-1.la"
+ for i in $apr_addto_bugger; do
+ apr_addto_duplicate="0"
+ for j in $APRUTIL_LIBS; do
+ if test "x$i" = "x$j"; then
+ apr_addto_duplicate="1"
+ break
+ fi
+ done
+ if test $apr_addto_duplicate = "0"; then
+ test "x$silent" != "xyes" && echo " adding \"$i\" to APRUTIL_LIBS"
+ APRUTIL_LIBS="$APRUTIL_LIBS $i"
+ fi
+ done
+ fi
+
+ { echo "$as_me:$LINENO: result: using apr-iconv" >&5
+echo "${ECHO_T}using apr-iconv" >&6; }
+ elif test -f "$apu_iconv_dir/include/iconv.h"; then
+ have_apr_iconv="0"
+ have_iconv="1"
if test "x$CPPFLAGS" = "x"; then
test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-I$apu_iconv_dir/include\""
@@ -45366,38 +45083,13 @@ if test "${with_iconv+set}" = set; then
done
fi
- fi
- if test -f "$apu_iconv_dir/include/api_version.h"; then
- have_apr_iconv="1"
- have_iconv="0"
-
- if test "x$LIBS" = "x-lapriconv"; then
- test "x$silent" != "xyes" && echo " nulling LIBS"
- LIBS=""
- else
- apr_new_bugger=""
- apr_removed=0
- for i in $LIBS; do
- if test "x$i" != "x-lapriconv"; then
- apr_new_bugger="$apr_new_bugger $i"
- else
- apr_removed=1
fi
- done
- if test $apr_removed = "1"; then
- test "x$silent" != "xyes" && echo " removed \"-lapriconv\" from LIBS"
- LIBS=$apr_new_bugger
- fi
- fi
-
- { echo "$as_me:$LINENO: result: \"Using apr-iconv\"" >&5
-echo "${ECHO_T}\"Using apr-iconv\"" >&6; }
fi
fi
-if test "$have_apr_iconv" != "1"; then
+if test "$want_iconv" = "1" -a "$have_apr_iconv" != "1"; then
if test "${ac_cv_header_iconv_h+set}" = set; then
{ echo "$as_me:$LINENO: checking for iconv.h" >&5
echo $ECHO_N "checking for iconv.h... $ECHO_C" >&6; }
@@ -45780,7 +45472,7 @@ fi
fi
-if test "$apu_iconv_dir" != "unknown"; then
+if test "$want_iconv" = "1" -a "$apu_iconv_dir" != "unknown"; then
if test "$have_iconv" != "1"; then
if test "$have_apr_iconv" != "1"; then
{ { echo "$as_me:$LINENO: error: iconv support requested, but not found" >&5
@@ -47424,6 +47116,7 @@ target_os!$target_os$ac_delim
INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
INSTALL_DATA!$INSTALL_DATA$ac_delim
+LT_NO_INSTALL!$LT_NO_INSTALL$ac_delim
top_builddir!$top_builddir$ac_delim
abs_srcdir!$abs_srcdir$ac_delim
abs_builddir!$abs_builddir$ac_delim
@@ -47460,14 +47153,13 @@ apu_has_ldap_novell!$apu_has_ldap_novell$ac_delim
apu_has_ldap_microsoft!$apu_has_ldap_microsoft$ac_delim
apu_has_ldap_netscape!$apu_has_ldap_netscape$ac_delim
apu_has_ldap_mozilla!$apu_has_ldap_mozilla$ac_delim
+apu_has_ldap_zos!$apu_has_ldap_zos$ac_delim
apu_has_ldap_other!$apu_has_ldap_other$ac_delim
apu_use_sdbm!$apu_use_sdbm$ac_delim
apu_use_gdbm!$apu_use_gdbm$ac_delim
apu_use_ndbm!$apu_use_ndbm$ac_delim
apu_use_db!$apu_use_db$ac_delim
apu_have_sdbm!$apu_have_sdbm$ac_delim
-apu_have_gdbm!$apu_have_gdbm$ac_delim
-apu_have_ndbm!$apu_have_ndbm$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -47509,6 +47201,8 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
+apu_have_gdbm!$apu_have_gdbm$ac_delim
+apu_have_ndbm!$apu_have_ndbm$ac_delim
apu_have_db!$apu_have_db$ac_delim
apu_db_header!$apu_db_header$ac_delim
apu_db_version!$apu_db_version$ac_delim
@@ -47534,7 +47228,7 @@ LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 23; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 25; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/srclib/apr-util/configure.in b/srclib/apr-util/configure.in
index 2534eb14..13d61bd7 100644
--- a/srclib/apr-util/configure.in
+++ b/srclib/apr-util/configure.in
@@ -40,6 +40,16 @@ AC_CANONICAL_SYSTEM
AC_PROG_INSTALL
+# Use -no-install to link the test programs on all platforms
+# but Darwin, where it would cause the programs to be linked
+# against installed versions of libapr instead of those just
+# built.
+case $host in
+*-apple-darwin*) LT_NO_INSTALL="" ;;
+*) LT_NO_INSTALL="-no-install" ;;
+esac
+AC_SUBST(LT_NO_INSTALL)
+
dnl
dnl compute the top directory of the build
dnl note: this is needed for LIBTOOL and exporting the bundled Expat
diff --git a/srclib/apr-util/crypto/apr_md4.c b/srclib/apr-util/crypto/apr_md4.c
index 6b9d9f4b..ada51400 100644
--- a/srclib/apr-util/crypto/apr_md4.c
+++ b/srclib/apr-util/crypto/apr_md4.c
@@ -1,9 +1,9 @@
-/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/crypto/apr_md5.c b/srclib/apr-util/crypto/apr_md5.c
index 40942e30..313896f3 100644
--- a/srclib/apr-util/crypto/apr_md5.c
+++ b/srclib/apr-util/crypto/apr_md5.c
@@ -31,12 +31,12 @@
documentation and/or software.
*/
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -686,7 +686,7 @@ APU_DECLARE(apr_status_t) apr_password_validate(const char *passwd,
apr_md5_encode(passwd, hash, sample, sizeof(sample));
}
else if (!strncmp(hash, APR_SHA1PW_ID, APR_SHA1PW_IDLEN)) {
- apr_sha1_base64(passwd, strlen(passwd), sample);
+ apr_sha1_base64(passwd, (int)strlen(passwd), sample);
}
else {
/*
diff --git a/srclib/apr-util/crypto/apr_sha1.c b/srclib/apr-util/crypto/apr_sha1.c
index 0b139127..31a9f9cc 100644
--- a/srclib/apr-util/crypto/apr_sha1.c
+++ b/srclib/apr-util/crypto/apr_sha1.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/crypto/getuuid.c b/srclib/apr-util/crypto/getuuid.c
index dd18bfc2..0cb324bb 100644
--- a/srclib/apr-util/crypto/getuuid.c
+++ b/srclib/apr-util/crypto/getuuid.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/crypto/uuid.c b/srclib/apr-util/crypto/uuid.c
index 451481b5..6e45d718 100644
--- a/srclib/apr-util/crypto/uuid.c
+++ b/srclib/apr-util/crypto/uuid.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbd/NWGNUdbdmysql b/srclib/apr-util/dbd/NWGNUdbdmysql
index c5acb2f3..cc207e20 100644
--- a/srclib/apr-util/dbd/NWGNUdbdmysql
+++ b/srclib/apr-util/dbd/NWGNUdbdmysql
@@ -54,7 +54,7 @@ XCFLAGS += \
# These defines will come after DEFINES
#
XDEFINES += \
- -DAPU_HAVE_MYSQL \
+ -DAPU_HAVE_MYSQL=1 \
-DHAVE_MYSQL_H \
$(EOLIST)
@@ -130,12 +130,6 @@ NLM_NAME = dbdmysql
NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBD MySQL Driver Module
#
-# This is used by the link '-copy ' directive.
-# If left blank, the ASF copyright defined in NWGNUtail.inc will be used.
-#
-NLM_COPYRIGHT = Copyright (c) 2003-2007 WebThing Ltd and other contributors
-
-#
# This is used by the '-threadname' directive. If left blank,
# NLM_NAME Thread will be used.
#
diff --git a/srclib/apr-util/dbd/NWGNUdbdpgsql b/srclib/apr-util/dbd/NWGNUdbdpgsql
index 96c95895..e90665cd 100644
--- a/srclib/apr-util/dbd/NWGNUdbdpgsql
+++ b/srclib/apr-util/dbd/NWGNUdbdpgsql
@@ -54,7 +54,7 @@ XCFLAGS += \
# These defines will come after DEFINES
#
XDEFINES += \
- -DAPU_HAVE_PGSQL \
+ -DAPU_HAVE_PGSQL=1 \
-DHAVE_LIBPQ_FE_H \
$(EOLIST)
diff --git a/srclib/apr-util/dbd/NWGNUdbdsqli2 b/srclib/apr-util/dbd/NWGNUdbdsqli2
index 111e3ad8..7aa95c90 100644
--- a/srclib/apr-util/dbd/NWGNUdbdsqli2
+++ b/srclib/apr-util/dbd/NWGNUdbdsqli2
@@ -54,7 +54,7 @@ XCFLAGS += \
# These defines will come after DEFINES
#
XDEFINES += \
- -DAPU_HAVE_SQLITE2 \
+ -DAPU_HAVE_SQLITE2=1 \
$(EOLIST)
#
@@ -120,7 +120,7 @@ endif
# This is used by the link 'name' directive to name the nlm. If left blank
# TARGET_nlm (see below) will be used.
#
-NLM_NAME = dbdsqli3
+NLM_NAME = dbdsqli2
#
# This is used by the link '-desc ' directive.
@@ -132,7 +132,7 @@ NLM_DESCRIPTION = Apache Portability Runtime Library $(VERSION_STR) DBD SQLite2
# This is used by the '-threadname' directive. If left blank,
# NLM_NAME Thread will be used.
#
-NLM_THREAD_NAME = dbdsqli3
+NLM_THREAD_NAME = dbdsqli2
#
# If this is specified, it will override VERSION value in
diff --git a/srclib/apr-util/dbd/NWGNUdbdsqli3 b/srclib/apr-util/dbd/NWGNUdbdsqli3
index b32b0777..81bd4dbb 100644
--- a/srclib/apr-util/dbd/NWGNUdbdsqli3
+++ b/srclib/apr-util/dbd/NWGNUdbdsqli3
@@ -54,7 +54,7 @@ XCFLAGS += \
# These defines will come after DEFINES
#
XDEFINES += \
- -DAPU_HAVE_SQLITE3 \
+ -DAPU_HAVE_SQLITE3=1 \
$(EOLIST)
#
diff --git a/srclib/apr-util/dbd/apr_dbd.c b/srclib/apr-util/dbd/apr_dbd.c
index f13dc457..4eed3918 100644
--- a/srclib/apr-util/dbd/apr_dbd.c
+++ b/srclib/apr-util/dbd/apr_dbd.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbd/apr_dbd_mysql.c b/srclib/apr-util/dbd/apr_dbd_mysql.c
new file mode 100644
index 00000000..65b862e6
--- /dev/null
+++ b/srclib/apr-util/dbd/apr_dbd_mysql.c
@@ -0,0 +1,771 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "apu.h"
+#define HAVE_MYSQL_MYSQL_H
+
+#if APU_HAVE_MYSQL
+
+#include "apu_version.h"
+#include "apu_config.h"
+
+#include <ctype.h>
+#include <stdlib.h>
+
+#ifdef HAVE_MYSQL_H
+#include <mysql.h>
+#include <errmsg.h>
+#elif defined(HAVE_MYSQL_MYSQL_H)
+#include <mysql/mysql.h>
+#include <mysql/errmsg.h>
+#endif
+
+#include "apr_strings.h"
+#include "apr_buckets.h"
+
+#include "apr_dbd_internal.h"
+
+/* default maximum field size 1 MB */
+#define FIELDSIZE 1048575
+
+struct apr_dbd_prepared_t {
+ MYSQL_STMT* stmt;
+};
+
+struct apr_dbd_transaction_t {
+ int errnum;
+ apr_dbd_t *handle;
+};
+
+struct apr_dbd_t {
+ MYSQL* conn ;
+ apr_dbd_transaction_t* trans ;
+ unsigned long fldsz;
+};
+
+struct apr_dbd_results_t {
+ int random;
+ MYSQL_RES *res;
+ MYSQL_STMT *statement;
+ MYSQL_BIND *bind;
+};
+struct apr_dbd_row_t {
+ MYSQL_ROW row;
+ apr_dbd_results_t *res;
+};
+
+static apr_status_t free_result(void *data)
+{
+ mysql_free_result(data);
+ return APR_SUCCESS;
+}
+
+static int dbd_mysql_select(apr_pool_t *pool, apr_dbd_t *sql,
+ apr_dbd_results_t **results,
+ const char *query, int seek)
+{
+ int sz;
+ int ret;
+ if (sql->trans && sql->trans->errnum) {
+ return sql->trans->errnum;
+ }
+ ret = mysql_query(sql->conn, query);
+ if (!ret) {
+ if (sz = mysql_field_count(sql->conn), sz > 0) {
+ if (!*results) {
+ *results = apr_palloc(pool, sizeof(apr_dbd_results_t));
+ }
+ (*results)->random = seek;
+ (*results)->statement = NULL;
+ if (seek) {
+ (*results)->res = mysql_store_result(sql->conn);
+ }
+ else {
+ (*results)->res = mysql_use_result(sql->conn);
+ }
+ apr_pool_cleanup_register(pool, (*results)->res,
+ free_result,apr_pool_cleanup_null);
+ }
+ } else {
+ ret = mysql_errno(sql->conn);
+ }
+
+ if (sql->trans) {
+ sql->trans->errnum = ret;
+ }
+ return ret;
+}
+
+static int dbd_mysql_get_row(apr_pool_t *pool, apr_dbd_results_t *res,
+ apr_dbd_row_t **row, int rownum)
+{
+ MYSQL_ROW r = NULL;
+ int ret = 0;
+
+ if (res->statement) {
+ if (res->random) {
+ if (rownum >= 0) {
+ mysql_stmt_data_seek(res->statement, (my_ulonglong)rownum);
+ }
+ }
+ ret = mysql_stmt_fetch(res->statement);
+ switch (ret) {
+ case 1:
+ ret = mysql_stmt_errno(res->statement);
+ break;
+ case MYSQL_NO_DATA:
+ ret = -1;
+ break;
+ default:
+ ret = 0; /* bad luck - get_entry will deal with this */
+ break;
+ }
+ }
+ else {
+ if (res->random) {
+ if (rownum >= 0) {
+ mysql_data_seek(res->res, (my_ulonglong) rownum);
+ }
+ }
+ r = mysql_fetch_row(res->res);
+ if (r == NULL) {
+ ret = -1;
+ }
+ }
+ if (ret == 0) {
+ if (!*row) {
+ *row = apr_palloc(pool, sizeof(apr_dbd_row_t));
+ }
+ (*row)->row = r;
+ (*row)->res = res;
+ }
+ else {
+ apr_pool_cleanup_run(pool, res->res, free_result);
+ }
+ return ret;
+}
+#if 0
+/* An improved API that was proposed but not followed up */
+static int dbd_mysql_get_entry(const apr_dbd_row_t *row, int n,
+ apr_dbd_datum_t *val)
+{
+ MYSQL_BIND *bind;
+ if (row->res->statement) {
+ bind = &row->res->bind[n];
+ if (mysql_stmt_fetch_column(row->res->statement, bind, n, 0) != 0) {
+ val->type = APR_DBD_VALUE_NULL;
+ return -1;
+ }
+ if (*bind->is_null) {
+ val->type = APR_DBD_VALUE_NULL;
+ return -1;
+ }
+ else {
+ val->type = APR_DBD_VALUE_STRING;
+ val->value.stringval = bind->buffer;
+ }
+ }
+ else {
+ val->type = APR_DBD_VALUE_STRING;
+ val->value.stringval = row->row[n];
+ }
+ return 0;
+}
+#else
+
+static const char *dbd_mysql_get_entry(const apr_dbd_row_t *row, int n)
+{
+ MYSQL_BIND *bind;
+ if (row->res->statement) {
+ bind = &row->res->bind[n];
+ if (mysql_stmt_fetch_column(row->res->statement, bind, n, 0) != 0) {
+ return NULL;
+ }
+ if (*bind->is_null) {
+ return NULL;
+ }
+ else {
+ return bind->buffer;
+ }
+ }
+ else {
+ return row->row[n];
+ }
+ return NULL;
+}
+#endif
+
+static const char *dbd_mysql_error(apr_dbd_t *sql, int n)
+{
+ return mysql_error(sql->conn);
+}
+
+static int dbd_mysql_query(apr_dbd_t *sql, int *nrows, const char *query)
+{
+ int ret;
+ if (sql->trans && sql->trans->errnum) {
+ return sql->trans->errnum;
+ }
+ ret = mysql_query(sql->conn, query);
+ if (ret != 0) {
+ ret = mysql_errno(sql->conn);
+ }
+ *nrows = mysql_affected_rows(sql->conn);
+ if (sql->trans) {
+ sql->trans->errnum = ret;
+ }
+ return ret;
+}
+
+static const char *dbd_mysql_escape(apr_pool_t *pool, const char *arg,
+ apr_dbd_t *sql)
+{
+ unsigned long len = strlen(arg);
+ char *ret = apr_palloc(pool, 2*len + 1);
+ mysql_real_escape_string(sql->conn, ret, arg, len);
+ return ret;
+}
+
+static apr_status_t stmt_close(void *data)
+{
+ mysql_stmt_close(data);
+ return APR_SUCCESS;
+}
+
+static int dbd_mysql_prepare(apr_pool_t *pool, apr_dbd_t *sql,
+ const char *query, const char *label,
+ apr_dbd_prepared_t **statement)
+{
+ /* Translate from apr_dbd to native query format */
+ char *myquery = apr_pstrdup(pool, query);
+ char *p = myquery;
+ const char *q;
+ int ret;
+ for (q = query; *q; ++q) {
+ if (q[0] == '%') {
+ if (isalpha(q[1])) {
+ *p++ = '?';
+ ++q;
+ }
+ else if (q[1] == '%') {
+ /* reduce %% to % */
+ *p++ = *q++;
+ }
+ else {
+ *p++ = *q;
+ }
+ }
+ else {
+ *p++ = *q;
+ }
+ }
+ *p = 0;
+ if (!*statement) {
+ *statement = apr_palloc(pool, sizeof(apr_dbd_prepared_t));
+ }
+ (*statement)->stmt = mysql_stmt_init(sql->conn);
+
+ if ((*statement)->stmt) {
+ apr_pool_cleanup_register(pool, (*statement)->stmt,
+ stmt_close, apr_pool_cleanup_null);
+ ret = mysql_stmt_prepare((*statement)->stmt, myquery, strlen(myquery));
+
+ if (ret != 0) {
+ ret = mysql_stmt_errno((*statement)->stmt);
+ }
+
+ return ret;
+ }
+
+ return CR_OUT_OF_MEMORY;
+}
+
+static int dbd_mysql_pquery(apr_pool_t *pool, apr_dbd_t *sql,
+ int *nrows, apr_dbd_prepared_t *statement,
+ int nargs, const char **values)
+{
+ MYSQL_BIND *bind;
+ char *arg;
+ int ret;
+ int i;
+ my_bool is_null = FALSE;
+
+ if (sql->trans && sql->trans->errnum) {
+ return sql->trans->errnum;
+ }
+ nargs = mysql_stmt_param_count(statement->stmt);
+
+ bind = apr_palloc(pool, nargs*sizeof(MYSQL_BIND));
+ for (i=0; i < nargs; ++i) {
+ arg = (char*)values[i];
+ bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ bind[i].buffer = arg;
+ bind[i].buffer_length = strlen(arg);
+ bind[i].length = &bind[i].buffer_length;
+ bind[i].is_null = &is_null;
+ bind[i].is_unsigned = 0;
+ }
+
+ ret = mysql_stmt_bind_param(statement->stmt, bind);
+ if (ret != 0) {
+ *nrows = 0;
+ ret = mysql_stmt_errno(statement->stmt);
+ }
+ else {
+ ret = mysql_stmt_execute(statement->stmt);
+ if (ret != 0) {
+ ret = mysql_stmt_errno(statement->stmt);
+ }
+ *nrows = mysql_stmt_affected_rows(statement->stmt);
+ }
+ if (sql->trans) {
+ sql->trans->errnum = ret;
+ }
+ return ret;
+}
+
+static int dbd_mysql_pvquery(apr_pool_t *pool, apr_dbd_t *sql, int *nrows,
+ apr_dbd_prepared_t *statement, va_list args)
+{
+ MYSQL_BIND *bind;
+ char *arg;
+ int ret;
+ int nargs = 0;
+ int i;
+ my_bool is_null = FALSE;
+
+ if (sql->trans && sql->trans->errnum) {
+ return sql->trans->errnum;
+ }
+ nargs = mysql_stmt_param_count(statement->stmt);
+
+ bind = apr_palloc(pool, nargs*sizeof(MYSQL_BIND));
+ for (i=0; i < nargs; ++i) {
+ arg = va_arg(args, char*);
+ bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ bind[i].buffer = arg;
+ bind[i].buffer_length = strlen(arg);
+ bind[i].length = &bind[i].buffer_length;
+ bind[i].is_null = &is_null;
+ bind[i].is_unsigned = 0;
+ }
+
+ ret = mysql_stmt_bind_param(statement->stmt, bind);
+ if (ret != 0) {
+ *nrows = 0;
+ ret = mysql_stmt_errno(statement->stmt);
+ }
+ else {
+ ret = mysql_stmt_execute(statement->stmt);
+ if (ret != 0) {
+ ret = mysql_stmt_errno(statement->stmt);
+ }
+ *nrows = mysql_stmt_affected_rows(statement->stmt);
+ }
+ if (sql->trans) {
+ sql->trans->errnum = ret;
+ }
+ return ret;
+}
+
+static int dbd_mysql_pselect(apr_pool_t *pool, apr_dbd_t *sql,
+ apr_dbd_results_t **res,
+ apr_dbd_prepared_t *statement, int random,
+ int nargs, const char **args)
+{
+ int i;
+ int nfields;
+ char *arg;
+ my_bool is_null = FALSE;
+ my_bool *is_nullr;
+#if MYSQL_VERSION_ID >= 50000
+ my_bool *error;
+#endif
+ int ret;
+ unsigned long *length, maxlen;
+ MYSQL_BIND *bind;
+
+ if (sql->trans && sql->trans->errnum) {
+ return sql->trans->errnum;
+ }
+
+ nargs = mysql_stmt_param_count(statement->stmt);
+ bind = apr_palloc(pool, nargs*sizeof(MYSQL_BIND));
+
+ for (i=0; i < nargs; ++i) {
+ arg = (char*)args[i];
+ bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ bind[i].buffer = arg;
+ bind[i].buffer_length = strlen(arg);
+ bind[i].length = &bind[i].buffer_length;
+ bind[i].is_null = &is_null;
+ bind[i].is_unsigned = 0;
+ }
+
+ ret = mysql_stmt_bind_param(statement->stmt, bind);
+ if (ret == 0) {
+ ret = mysql_stmt_execute(statement->stmt);
+ if (!ret) {
+ if (!*res) {
+ *res = apr_pcalloc(pool, sizeof(apr_dbd_results_t));
+ }
+ (*res)->random = random;
+ (*res)->statement = statement->stmt;
+ (*res)->res = mysql_stmt_result_metadata(statement->stmt);
+ apr_pool_cleanup_register(pool, (*res)->res,
+ free_result, apr_pool_cleanup_null);
+ nfields = mysql_num_fields((*res)->res);
+ if (!(*res)->bind) {
+ (*res)->bind = apr_palloc(pool, nfields*sizeof(MYSQL_BIND));
+ length = apr_pcalloc(pool, nfields*sizeof(unsigned long));
+#if MYSQL_VERSION_ID >= 50000
+ error = apr_palloc(pool, nfields*sizeof(my_bool));
+#endif
+ is_nullr = apr_pcalloc(pool, nfields*sizeof(my_bool));
+ for ( i = 0; i < nfields; ++i ) {
+ maxlen = ((*res)->res->fields[i].length < sql->fldsz ?
+ (*res)->res->fields[i].length : sql->fldsz) + 1;
+ (*res)->bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ (*res)->bind[i].buffer_length = maxlen;
+ (*res)->bind[i].length = &length[i];
+ (*res)->bind[i].buffer = apr_palloc(pool, maxlen);
+ (*res)->bind[i].is_null = is_nullr+i;
+#if MYSQL_VERSION_ID >= 50000
+ (*res)->bind[i].error = error+i;
+#endif
+ }
+ }
+ ret = mysql_stmt_bind_result(statement->stmt, (*res)->bind);
+ if (!ret) {
+ ret = mysql_stmt_store_result(statement->stmt);
+ }
+ }
+ }
+ if (ret != 0) {
+ ret = mysql_stmt_errno(statement->stmt);
+ }
+ if (sql->trans) {
+ sql->trans->errnum = ret;
+ }
+ return ret;
+}
+
+static int dbd_mysql_pvselect(apr_pool_t *pool, apr_dbd_t *sql,
+ apr_dbd_results_t **res,
+ apr_dbd_prepared_t *statement, int random,
+ va_list args)
+{
+ int i;
+ int nfields;
+ char *arg;
+ my_bool is_null = FALSE;
+ my_bool *is_nullr;
+#if MYSQL_VERSION_ID >= 50000
+ my_bool *error;
+#endif
+ int ret;
+ unsigned long *length, maxlen;
+ int nargs;
+ MYSQL_BIND *bind;
+
+ if (sql->trans && sql->trans->errnum) {
+ return sql->trans->errnum;
+ }
+
+ nargs = mysql_stmt_param_count(statement->stmt);
+ bind = apr_palloc(pool, nargs*sizeof(MYSQL_BIND));
+
+ for (i=0; i < nargs; ++i) {
+ arg = va_arg(args, char*);
+ bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ bind[i].buffer = arg;
+ bind[i].buffer_length = strlen(arg);
+ bind[i].length = &bind[i].buffer_length;
+ bind[i].is_null = &is_null;
+ bind[i].is_unsigned = 0;
+ }
+
+ ret = mysql_stmt_bind_param(statement->stmt, bind);
+ if (ret == 0) {
+ ret = mysql_stmt_execute(statement->stmt);
+ if (!ret) {
+ if (!*res) {
+ *res = apr_pcalloc(pool, sizeof(apr_dbd_results_t));
+ }
+ (*res)->random = random;
+ (*res)->statement = statement->stmt;
+ (*res)->res = mysql_stmt_result_metadata(statement->stmt);
+ apr_pool_cleanup_register(pool, (*res)->res,
+ free_result, apr_pool_cleanup_null);
+ nfields = mysql_num_fields((*res)->res);
+ if (!(*res)->bind) {
+ (*res)->bind = apr_palloc(pool, nfields*sizeof(MYSQL_BIND));
+ length = apr_pcalloc(pool, nfields*sizeof(unsigned long));
+#if MYSQL_VERSION_ID >= 50000
+ error = apr_palloc(pool, nfields*sizeof(my_bool));
+#endif
+ is_nullr = apr_pcalloc(pool, nfields*sizeof(my_bool));
+ for ( i = 0; i < nfields; ++i ) {
+ maxlen = ((*res)->res->fields[i].length < sql->fldsz ?
+ (*res)->res->fields[i].length : sql->fldsz) + 1;
+ (*res)->bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ (*res)->bind[i].buffer_length = maxlen;
+ (*res)->bind[i].length = &length[i];
+ (*res)->bind[i].buffer = apr_palloc(pool, maxlen);
+ (*res)->bind[i].is_null = is_nullr+i;
+#if MYSQL_VERSION_ID >= 50000
+ (*res)->bind[i].error = error+i;
+#endif
+ }
+ }
+ ret = mysql_stmt_bind_result(statement->stmt, (*res)->bind);
+ if (!ret) {
+ ret = mysql_stmt_store_result(statement->stmt);
+ }
+ }
+ }
+ if (ret != 0) {
+ ret = mysql_stmt_errno(statement->stmt);
+ }
+ if (sql->trans) {
+ sql->trans->errnum = ret;
+ }
+ return ret;
+}
+
+static int dbd_mysql_end_transaction(apr_dbd_transaction_t *trans)
+{
+ int ret = -1;
+ if (trans) {
+ if (trans->errnum) {
+ trans->errnum = 0;
+ ret = mysql_rollback(trans->handle->conn);
+ }
+ else {
+ ret = mysql_commit(trans->handle->conn);
+ }
+ }
+ ret |= mysql_autocommit(trans->handle->conn, 1);
+ trans->handle->trans = NULL;
+ return ret;
+}
+/* Whether or not transactions work depends on whether the
+ * underlying DB supports them within MySQL. Unfortunately
+ * it fails silently with the default InnoDB.
+ */
+
+static int dbd_mysql_transaction(apr_pool_t *pool, apr_dbd_t *handle,
+ apr_dbd_transaction_t **trans)
+{
+ /* Don't try recursive transactions here */
+ if (handle->trans) {
+ dbd_mysql_end_transaction(handle->trans) ;
+ }
+ if (!*trans) {
+ *trans = apr_pcalloc(pool, sizeof(apr_dbd_transaction_t));
+ }
+ (*trans)->errnum = mysql_autocommit(handle->conn, 0);
+ (*trans)->handle = handle;
+ handle->trans = *trans;
+ return (*trans)->errnum;
+}
+
+static apr_dbd_t *dbd_mysql_open(apr_pool_t *pool, const char *params)
+{
+ static const char *const delims = " \r\n\t;|,";
+ const char *ptr;
+ int i;
+ const char *key;
+ size_t klen;
+ const char *value;
+ size_t vlen;
+#if MYSQL_VERSION_ID >= 50013
+ my_bool do_reconnect = 1;
+#endif
+ MYSQL *real_conn;
+ unsigned long flags = 0;
+
+ struct {
+ const char *field;
+ const char *value;
+ } fields[] = {
+ {"host", NULL},
+ {"user", NULL},
+ {"pass", NULL},
+ {"dbname", NULL},
+ {"port", NULL},
+ {"sock", NULL},
+ {"flags", NULL},
+ {"fldsz", NULL},
+ {"group", NULL},
+ {NULL, NULL}
+ };
+ unsigned int port = 0;
+ apr_dbd_t *sql = apr_pcalloc(pool, sizeof(apr_dbd_t));
+ sql->fldsz = FIELDSIZE;
+ sql->conn = mysql_init(sql->conn);
+ if ( sql->conn == NULL ) {
+ return NULL;
+ }
+ for (ptr = strchr(params, '='); ptr; ptr = strchr(ptr, '=')) {
+ for (key = ptr-1; isspace(*key); --key);
+ klen = 0;
+ while (isalpha(*key)) {
+ /* don't parse backwards off the start of the string */
+ if (key == params) {
+ --key;
+ ++klen;
+ break;
+ }
+ --key;
+ ++klen;
+ }
+ ++key;
+ for (value = ptr+1; isspace(*value); ++value);
+ vlen = strcspn(value, delims);
+ for (i = 0; fields[i].field != NULL; i++) {
+ if (!strncasecmp(fields[i].field, key, klen)) {
+ fields[i].value = apr_pstrndup(pool, value, vlen);
+ break;
+ }
+ }
+ ptr = value+vlen;
+ }
+ if (fields[4].value != NULL) {
+ port = atoi(fields[4].value);
+ }
+ if (fields[6].value != NULL &&
+ !strcmp(fields[6].value, "CLIENT_FOUND_ROWS")) {
+ flags |= CLIENT_FOUND_ROWS; /* only option we know */
+ }
+ if (fields[7].value != NULL) {
+ sql->fldsz = atol(fields[7].value);
+ }
+ if (fields[8].value != NULL) {
+ mysql_options(sql->conn, MYSQL_READ_DEFAULT_GROUP, fields[8].value);
+ }
+
+#if MYSQL_VERSION_ID >= 50013
+ /* the MySQL manual says this should be BEFORE mysql_real_connect */
+ mysql_options(sql->conn, MYSQL_OPT_RECONNECT, &do_reconnect);
+#endif
+
+ real_conn = mysql_real_connect(sql->conn, fields[0].value,
+ fields[1].value, fields[2].value,
+ fields[3].value, port,
+ fields[5].value, flags);
+
+ if(real_conn == NULL) {
+ mysql_close(sql->conn);
+ return NULL;
+ }
+
+#if MYSQL_VERSION_ID >= 50013
+ /* Some say this should be AFTER mysql_real_connect */
+ mysql_options(sql->conn, MYSQL_OPT_RECONNECT, &do_reconnect);
+#endif
+
+ return sql;
+}
+
+static apr_status_t dbd_mysql_close(apr_dbd_t *handle)
+{
+ mysql_close(handle->conn);
+ return APR_SUCCESS;
+}
+
+static apr_status_t dbd_mysql_check_conn(apr_pool_t *pool,
+ apr_dbd_t *handle)
+{
+ return mysql_ping(handle->conn) ? APR_EGENERAL : APR_SUCCESS;
+}
+
+static int dbd_mysql_select_db(apr_pool_t *pool, apr_dbd_t* handle,
+ const char* name)
+{
+ return mysql_select_db(handle->conn, name);
+}
+
+static void *dbd_mysql_native(apr_dbd_t *handle)
+{
+ return handle->conn;
+}
+
+static int dbd_mysql_num_cols(apr_dbd_results_t *res)
+{
+ if (res->statement) {
+ return mysql_stmt_field_count(res->statement);
+ }
+ else {
+ return mysql_num_fields(res->res);
+ }
+}
+
+static int dbd_mysql_num_tuples(apr_dbd_results_t *res)
+{
+ if (res->random) {
+ if (res->statement) {
+ return (int) mysql_stmt_num_rows(res->statement);
+ }
+ else {
+ return (int) mysql_num_rows(res->res);
+ }
+ }
+ else {
+ return -1;
+ }
+}
+
+static apr_status_t thread_end(void *data)
+{
+ mysql_thread_end();
+ return APR_SUCCESS;
+}
+
+static void dbd_mysql_init(apr_pool_t *pool)
+{
+ my_init();
+ mysql_thread_init();
+
+ /* FIXME: this is a guess; find out what it really does */
+ apr_pool_cleanup_register(pool, NULL, thread_end, apr_pool_cleanup_null);
+}
+APU_DECLARE_DATA const apr_dbd_driver_t apr_dbd_mysql_driver = {
+ "mysql",
+ dbd_mysql_init,
+ dbd_mysql_native,
+ dbd_mysql_open,
+ dbd_mysql_check_conn,
+ dbd_mysql_close,
+ dbd_mysql_select_db,
+ dbd_mysql_transaction,
+ dbd_mysql_end_transaction,
+ dbd_mysql_query,
+ dbd_mysql_select,
+ dbd_mysql_num_cols,
+ dbd_mysql_num_tuples,
+ dbd_mysql_get_row,
+ dbd_mysql_get_entry,
+ dbd_mysql_error,
+ dbd_mysql_escape,
+ dbd_mysql_prepare,
+ dbd_mysql_pvquery,
+ dbd_mysql_pvselect,
+ dbd_mysql_pquery,
+ dbd_mysql_pselect
+};
+
+#endif
diff --git a/srclib/apr-util/dbd/apr_dbd_pgsql.c b/srclib/apr-util/dbd/apr_dbd_pgsql.c
index 76bfa0c1..2fc28ac7 100644
--- a/srclib/apr-util/dbd/apr_dbd_pgsql.c
+++ b/srclib/apr-util/dbd/apr_dbd_pgsql.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbd/apr_dbd_sqlite2.c b/srclib/apr-util/dbd/apr_dbd_sqlite2.c
index d93bf111..6907be7b 100644
--- a/srclib/apr-util/dbd/apr_dbd_sqlite2.c
+++ b/srclib/apr-util/dbd/apr_dbd_sqlite2.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbd/apr_dbd_sqlite3.c b/srclib/apr-util/dbd/apr_dbd_sqlite3.c
index d82e3d31..32073fcb 100644
--- a/srclib/apr-util/dbd/apr_dbd_sqlite3.c
+++ b/srclib/apr-util/dbd/apr_dbd_sqlite3.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/apr_dbm.c b/srclib/apr-util/dbm/apr_dbm.c
index 88cf08e6..d4fed7b1 100644
--- a/srclib/apr-util/dbm/apr_dbm.c
+++ b/srclib/apr-util/dbm/apr_dbm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/apr_dbm_berkeleydb.c b/srclib/apr-util/dbm/apr_dbm_berkeleydb.c
index 46ededcc..06277421 100644
--- a/srclib/apr-util/dbm/apr_dbm_berkeleydb.c
+++ b/srclib/apr-util/dbm/apr_dbm_berkeleydb.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/apr_dbm_gdbm.c b/srclib/apr-util/dbm/apr_dbm_gdbm.c
index 93fb942a..f0baee8d 100644
--- a/srclib/apr-util/dbm/apr_dbm_gdbm.c
+++ b/srclib/apr-util/dbm/apr_dbm_gdbm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -41,7 +41,7 @@ typedef datum *cvt_datum_t;
#define CONVERT_DATUM(cvt, pinput) ((cvt) = (datum *)(pinput))
typedef datum result_datum_t;
-#define RETURN_DATUM(poutput, rd) (*(poutput) = *(apr_datum_t *)&(rd))
+#define RETURN_DATUM(poutput, rd) ((poutput)->dptr = (rd).dptr, (poutput)->dsize = (apr_size_t) (rd).dsize)
#define APR_DBM_CLOSE(f) gdbm_close(f)
#define APR_DBM_FETCH(f, k, v) ((v) = gdbm_fetch(f, *(k)), APR_SUCCESS)
diff --git a/srclib/apr-util/dbm/apr_dbm_ndbm.c b/srclib/apr-util/dbm/apr_dbm_ndbm.c
index d770ed44..c4bcfcf7 100644
--- a/srclib/apr-util/dbm/apr_dbm_ndbm.c
+++ b/srclib/apr-util/dbm/apr_dbm_ndbm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/apr_dbm_sdbm.c b/srclib/apr-util/dbm/apr_dbm_sdbm.c
index dadb1e26..f99b3805 100644
--- a/srclib/apr-util/dbm/apr_dbm_sdbm.c
+++ b/srclib/apr-util/dbm/apr_dbm_sdbm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -41,10 +41,12 @@
typedef apr_sdbm_t *real_file_t;
typedef apr_sdbm_datum_t cvt_datum_t;
-#define CONVERT_DATUM(cvt, pinput) ((cvt).dptr = (pinput)->dptr, (cvt).dsize = (pinput)->dsize)
+#define CONVERT_DATUM(cvt, pinput) \
+ ((cvt).dptr = (pinput)->dptr, (cvt).dsize = (int)(pinput)->dsize)
typedef apr_sdbm_datum_t result_datum_t;
-#define RETURN_DATUM(poutput, rd) ((poutput)->dptr = (rd).dptr, (poutput)->dsize = (rd).dsize)
+#define RETURN_DATUM(poutput, rd) \
+ ((poutput)->dptr = (rd).dptr, (poutput)->dsize = (rd).dsize)
#define APR_DBM_CLOSE(f) apr_sdbm_close(f)
#define APR_DBM_FETCH(f, k, v) apr_sdbm_fetch(f, &(v), (k))
diff --git a/srclib/apr-util/dbm/sdbm/sdbm.c b/srclib/apr-util/dbm/sdbm/sdbm.c
index 537a5b72..787f235c 100644
--- a/srclib/apr-util/dbm/sdbm/sdbm.c
+++ b/srclib/apr-util/dbm/sdbm/sdbm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/sdbm/sdbm_hash.c b/srclib/apr-util/dbm/sdbm/sdbm_hash.c
index 012e3d07..e4d75179 100644
--- a/srclib/apr-util/dbm/sdbm/sdbm_hash.c
+++ b/srclib/apr-util/dbm/sdbm/sdbm_hash.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/sdbm/sdbm_lock.c b/srclib/apr-util/dbm/sdbm/sdbm_lock.c
index a001ed41..b2a30112 100644
--- a/srclib/apr-util/dbm/sdbm/sdbm_lock.c
+++ b/srclib/apr-util/dbm/sdbm/sdbm_lock.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/sdbm/sdbm_pair.c b/srclib/apr-util/dbm/sdbm/sdbm_pair.c
index 3fe82b66..21302007 100644
--- a/srclib/apr-util/dbm/sdbm/sdbm_pair.c
+++ b/srclib/apr-util/dbm/sdbm/sdbm_pair.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -183,7 +183,7 @@ apr_sdbm_datum_t key;
register int m;
register char *dst = pag + (i == 1 ? PBLKSIZ : ino[i - 1]);
register char *src = pag + ino[i + 1];
- register int zoo = dst - src;
+ register short zoo = (short) (dst - src);
debug(("free-up %d ", zoo));
/*
diff --git a/srclib/apr-util/dbm/sdbm/sdbm_pair.h b/srclib/apr-util/dbm/sdbm/sdbm_pair.h
index 51d10658..222c5e17 100644
--- a/srclib/apr-util/dbm/sdbm/sdbm_pair.h
+++ b/srclib/apr-util/dbm/sdbm/sdbm_pair.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/sdbm/sdbm_private.h b/srclib/apr-util/dbm/sdbm/sdbm_private.h
index a1ad29d4..f5d1ae06 100644
--- a/srclib/apr-util/dbm/sdbm/sdbm_private.h
+++ b/srclib/apr-util/dbm/sdbm/sdbm_private.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/dbm/sdbm/sdbm_tune.h b/srclib/apr-util/dbm/sdbm/sdbm_tune.h
index 92ed6a25..9bf3d09f 100644
--- a/srclib/apr-util/dbm/sdbm/sdbm_tune.h
+++ b/srclib/apr-util/dbm/sdbm/sdbm_tune.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/encoding/apr_base64.c b/srclib/apr-util/encoding/apr_base64.c
index 4a1f49c5..1eed1530 100644
--- a/srclib/apr-util/encoding/apr_base64.c
+++ b/srclib/apr-util/encoding/apr_base64.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -111,13 +111,13 @@ APU_DECLARE(int) apr_base64_decode_len(const char *bufcoded)
{
int nbytesdecoded;
register const unsigned char *bufin;
- register int nprbytes;
+ register apr_size_t nprbytes;
bufin = (const unsigned char *) bufcoded;
while (pr2six[*(bufin++)] <= 63);
nprbytes = (bufin - (const unsigned char *) bufcoded) - 1;
- nbytesdecoded = ((nprbytes + 3) / 4) * 3;
+ nbytesdecoded = (((int)nprbytes + 3) / 4) * 3;
return nbytesdecoded + 1;
}
@@ -148,12 +148,12 @@ APU_DECLARE(int) apr_base64_decode_binary(unsigned char *bufplain,
int nbytesdecoded;
register const unsigned char *bufin;
register unsigned char *bufout;
- register int nprbytes;
+ register apr_size_t nprbytes;
bufin = (const unsigned char *) bufcoded;
while (pr2six[*(bufin++)] <= 63);
nprbytes = (bufin - (const unsigned char *) bufcoded) - 1;
- nbytesdecoded = ((nprbytes + 3) / 4) * 3;
+ nbytesdecoded = (((int)nprbytes + 3) / 4) * 3;
bufout = (unsigned char *) bufplain;
bufin = (const unsigned char *) bufcoded;
@@ -183,7 +183,7 @@ APU_DECLARE(int) apr_base64_decode_binary(unsigned char *bufplain,
(unsigned char) (pr2six[bufin[2]] << 6 | pr2six[bufin[3]]);
}
- nbytesdecoded -= (4 - nprbytes) & 3;
+ nbytesdecoded -= (4 - (int)nprbytes) & 3;
return nbytesdecoded;
}
@@ -264,5 +264,5 @@ APU_DECLARE(int) apr_base64_encode_binary(char *encoded,
}
*p++ = '\0';
- return p - encoded;
+ return (int)(p - encoded);
}
diff --git a/srclib/apr-util/hooks/apr_hooks.c b/srclib/apr-util/hooks/apr_hooks.c
index da0ae970..44353cbb 100644
--- a/srclib/apr-util/hooks/apr_hooks.c
+++ b/srclib/apr-util/hooks/apr_hooks.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_anylock.h b/srclib/apr-util/include/apr_anylock.h
index 6b724de2..51e97ff3 100644
--- a/srclib/apr-util/include/apr_anylock.h
+++ b/srclib/apr-util/include/apr_anylock.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_base64.h b/srclib/apr-util/include/apr_base64.h
index d26aeb2d..b4b2b88f 100644
--- a/srclib/apr-util/include/apr_base64.h
+++ b/srclib/apr-util/include/apr_base64.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -80,9 +80,10 @@ APU_DECLARE(int) apr_base64_encode_binary(char * coded_dst,
int len_plain_src);
/**
- * Determine the length of a plain text string given the encoded version
+ * Determine the maximum buffer length required to decode the plain text
+ * string given the encoded string.
* @param coded_src The encoded string
- * @return the length of the plain text string
+ * @return the maximum required buffer length for the plain text string
*/
APU_DECLARE(int) apr_base64_decode_len(const char * coded_src);
diff --git a/srclib/apr-util/include/apr_buckets.h b/srclib/apr-util/include/apr_buckets.h
index 01f6743d..8983a372 100644
--- a/srclib/apr-util/include/apr_buckets.h
+++ b/srclib/apr-util/include/apr_buckets.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_date.h b/srclib/apr-util/include/apr_date.h
index 87500a33..b098b542 100644
--- a/srclib/apr-util/include/apr_date.h
+++ b/srclib/apr-util/include/apr_date.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_dbd.h b/srclib/apr-util/include/apr_dbd.h
index 103ff9cb..3fd19e1c 100644
--- a/srclib/apr-util/include/apr_dbd.h
+++ b/srclib/apr-util/include/apr_dbd.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -79,13 +79,15 @@ APU_DECLARE(apr_status_t) apr_dbd_get_driver(apr_pool_t *pool, const char *name,
* function as a filename to be opened (check SQLite3 documentation for more
* details).
* @remarks MySQL: the params can have "host", "port", "user", "pass",
- * "dbname", "sock", "flags" and "fldsz" keys, each followed by an equal sign
- * and a value. Such key/value pairs can be delimited by space, CR, LF, tab,
- * semicolon, vertical bar or comma. For now, "flags" can only recognise
- * CLIENT_FOUND_ROWS (check MySQL manual for details). The value associated
- * with "fldsz" determines maximum amount of memory (in bytes) for each of
- * the fields in the result set of prepared statements. By default, this
- * value is 1 MB.
+ * "dbname", "sock", "flags" "fldsz" and "group" keys, each followed by an
+ * equal sign and a value. Such key/value pairs can be delimited by space,
+ * CR, LF, tab, semicolon, vertical bar or comma. For now, "flags" can only
+ * recognise CLIENT_FOUND_ROWS (check MySQL manual for details). The value
+ * associated with "fldsz" determines maximum amount of memory (in bytes) for
+ * each of the fields in the result set of prepared statements. By default,
+ * this value is 1 MB. The value associated with "group" determines which
+ * group from configuration file to use (see MYSQL_READ_DEFAULT_GROUP option
+ * of mysql_options() in MySQL manual).
*/
APU_DECLARE(apr_status_t) apr_dbd_open(const apr_dbd_driver_t *driver,
apr_pool_t *pool, const char *params,
diff --git a/srclib/apr-util/include/apr_dbm.h b/srclib/apr-util/include/apr_dbm.h
index d34f9ad3..9f6e8b47 100644
--- a/srclib/apr-util/include/apr_dbm.h
+++ b/srclib/apr-util/include/apr_dbm.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_hooks.h b/srclib/apr-util/include/apr_hooks.h
index 287fb8cb..1a528332 100644
--- a/srclib/apr-util/include/apr_hooks.h
+++ b/srclib/apr-util/include/apr_hooks.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_ldap.h.in b/srclib/apr-util/include/apr_ldap.h.in
index e44729d6..d66f1fd6 100644
--- a/srclib/apr-util/include/apr_ldap.h.in
+++ b/srclib/apr-util/include/apr_ldap.h.in
@@ -1,9 +1,9 @@
-/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -40,6 +40,7 @@
#define APR_HAS_MOZILLA_LDAPSDK @apu_has_ldap_mozilla@
#define APR_HAS_OPENLDAP_LDAPSDK @apu_has_ldap_openldap@
#define APR_HAS_MICROSOFT_LDAPSDK @apu_has_ldap_microsoft@
+#define APR_HAS_ZOS_LDAPSDK @apu_has_ldap_zos@
#define APR_HAS_OTHER_LDAPSDK @apu_has_ldap_other@
@@ -93,6 +94,29 @@
#define LDAPS_PORT 636 /* ldaps:/// default LDAP over TLS port */
#endif
+/*
+ * For ldap function calls that input a size limit on the number of returned elements
+ * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0)
+ */
+#if APR_HAS_ZOS_LDAPSDK
+#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
+#else
+#ifdef LDAP_DEFAULT_LIMIT
+#define APR_LDAP_SIZELIMIT LDAP_DEFAULT_LIMIT
+#else
+#define APR_LDAP_SIZELIMIT -1 /* equivalent to LDAP_DEFAULT_LIMIT */
+#endif
+#endif
+
+/*
+ * z/OS is missing some defines
+ */
+#ifndef LDAP_VERSION_MAX
+#define LDAP_VERSION_MAX LDAP_VERSION
+#endif
+#if APR_HAS_ZOS_LDAPSDK
+#define LDAP_VENDOR_NAME "IBM z/OS"
+#endif
/* Note: Macros defining const casting has been removed in APR v1.0,
* pending real support for LDAP v2.0 toolkits.
diff --git a/srclib/apr-util/include/apr_ldap.hnw b/srclib/apr-util/include/apr_ldap.hnw
index 947eaac2..105dfff0 100644
--- a/srclib/apr-util/include/apr_ldap.hnw
+++ b/srclib/apr-util/include/apr_ldap.hnw
@@ -1,9 +1,9 @@
-/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_ldap.hw b/srclib/apr-util/include/apr_ldap.hw
index 7a4d67f8..57b11639 100644
--- a/srclib/apr-util/include/apr_ldap.hw
+++ b/srclib/apr-util/include/apr_ldap.hw
@@ -1,9 +1,9 @@
-/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -87,6 +87,13 @@
#endif
+/*
+ * For ldap function calls that input a size limit on the number of returned elements
+ * Some SDKs do not have the define for LDAP_DEFAULT_LIMIT (-1) or LDAP_NO_LIMIT (0)
+ */
+#define APR_LDAP_SIZELIMIT LDAP_NO_LIMIT
+
+
/* Note: Macros defining const casting has been removed in APR v1.0,
* pending real support for LDAP v2.0 toolkits.
*
diff --git a/srclib/apr-util/include/apr_ldap_init.h b/srclib/apr-util/include/apr_ldap_init.h
index bd13d070..2120262c 100644
--- a/srclib/apr-util/include/apr_ldap_init.h
+++ b/srclib/apr-util/include/apr_ldap_init.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_ldap_option.h b/srclib/apr-util/include/apr_ldap_option.h
index 489dc0c8..32041329 100644
--- a/srclib/apr-util/include/apr_ldap_option.h
+++ b/srclib/apr-util/include/apr_ldap_option.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_ldap_url.h b/srclib/apr-util/include/apr_ldap_url.h
index de591614..6ebda832 100644
--- a/srclib/apr-util/include/apr_ldap_url.h
+++ b/srclib/apr-util/include/apr_ldap_url.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_md4.h b/srclib/apr-util/include/apr_md4.h
index 42d108df..43fb33e3 100644
--- a/srclib/apr-util/include/apr_md4.h
+++ b/srclib/apr-util/include/apr_md4.h
@@ -1,9 +1,9 @@
-/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_md5.h b/srclib/apr-util/include/apr_md5.h
index c6a306e3..367324a7 100644
--- a/srclib/apr-util/include/apr_md5.h
+++ b/srclib/apr-util/include/apr_md5.h
@@ -28,12 +28,12 @@
documentation and/or software.
*/
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_optional.h b/srclib/apr-util/include/apr_optional.h
index 8c9413f9..3301d66e 100644
--- a/srclib/apr-util/include/apr_optional.h
+++ b/srclib/apr-util/include/apr_optional.h
@@ -1,9 +1,9 @@
-/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_optional_hooks.h b/srclib/apr-util/include/apr_optional_hooks.h
index 7d01ab00..54bf65ef 100644
--- a/srclib/apr-util/include/apr_optional_hooks.h
+++ b/srclib/apr-util/include/apr_optional_hooks.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_queue.h b/srclib/apr-util/include/apr_queue.h
index 5a0181b2..5d24c67c 100644
--- a/srclib/apr-util/include/apr_queue.h
+++ b/srclib/apr-util/include/apr_queue.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_reslist.h b/srclib/apr-util/include/apr_reslist.h
index e6b64846..e7025939 100644
--- a/srclib/apr-util/include/apr_reslist.h
+++ b/srclib/apr-util/include/apr_reslist.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_rmm.h b/srclib/apr-util/include/apr_rmm.h
index a1f0d676..976fe9c5 100644
--- a/srclib/apr-util/include/apr_rmm.h
+++ b/srclib/apr-util/include/apr_rmm.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_sdbm.h b/srclib/apr-util/include/apr_sdbm.h
index 7fcf7f6e..d5a5cbf1 100644
--- a/srclib/apr-util/include/apr_sdbm.h
+++ b/srclib/apr-util/include/apr_sdbm.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_sha1.h b/srclib/apr-util/include/apr_sha1.h
index 1ad50655..2a4edf36 100644
--- a/srclib/apr-util/include/apr_sha1.h
+++ b/srclib/apr-util/include/apr_sha1.h
@@ -1,9 +1,9 @@
-/* Copyright 2001-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_strmatch.h b/srclib/apr-util/include/apr_strmatch.h
index 4753318b..53fadad5 100644
--- a/srclib/apr-util/include/apr_strmatch.h
+++ b/srclib/apr-util/include/apr_strmatch.h
@@ -1,9 +1,9 @@
-/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_uri.h b/srclib/apr-util/include/apr_uri.h
index 82a86b24..99db4d96 100644
--- a/srclib/apr-util/include/apr_uri.h
+++ b/srclib/apr-util/include/apr_uri.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_uuid.h b/srclib/apr-util/include/apr_uuid.h
index 820d7409..5312a9f6 100644
--- a/srclib/apr-util/include/apr_uuid.h
+++ b/srclib/apr-util/include/apr_uuid.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_xlate.h b/srclib/apr-util/include/apr_xlate.h
index 19402a76..32636685 100644
--- a/srclib/apr-util/include/apr_xlate.h
+++ b/srclib/apr-util/include/apr_xlate.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apr_xml.h b/srclib/apr-util/include/apr_xml.h
index ab184e7a..2a43b283 100644
--- a/srclib/apr-util/include/apr_xml.h
+++ b/srclib/apr-util/include/apr_xml.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apu.h.in b/srclib/apr-util/include/apu.h.in
index 5bd7d00f..13e6a6d4 100644
--- a/srclib/apr-util/include/apu.h.in
+++ b/srclib/apr-util/include/apu.h.in
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apu.hnw b/srclib/apr-util/include/apu.hnw
index d31996a1..ced27a43 100644
--- a/srclib/apr-util/include/apu.hnw
+++ b/srclib/apr-util/include/apu.hnw
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -21,15 +21,16 @@
/* @file apu.h
* @brief APR-Utility main file
*/
+
+#ifdef NETWARE
+#ifndef APU_H
+#define APU_H
/**
* @defgroup APR_Util APR Utility Functions
* @{
*/
-#ifndef APU_H
-#define APU_H
-
/**
* APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
* so that all public symbols are exported.
@@ -71,27 +72,19 @@
* we always have SDBM (it's in our codebase)
*/
#define APU_HAVE_SDBM 1
+#define APU_HAVE_NDBM 0
#define APU_HAVE_GDBM 0
#define APU_HAVE_DB 0
-
-#define HAVE_ICONV_H 1
#define APU_HAVE_APR_ICONV 0
#define APU_HAVE_ICONV 1
#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
-/*
- * check for newer NDKs which use now correctly 'const char*' with iconv.
- */
-#include <ndkvers.h>
-#if (CURRENT_NDK_THRESHOLD >= 705110000)
-#define APU_ICONV_INBUF_CONST
-#endif
-
/*
* Hack to enable dynamic loads within apr_dbd
*/
#define APR_DSO_BUILD APR_HAS_DSO
#endif /* APU_H */
-/** @} */
+#endif /* NETWARE */
+
diff --git a/srclib/apr-util/include/apu.hw b/srclib/apr-util/include/apu.hw
index 494a8b72..0a912bcf 100644
--- a/srclib/apr-util/include/apu.hw
+++ b/srclib/apr-util/include/apu.hw
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -87,27 +87,23 @@
* we always have SDBM (it's in our codebase)
*/
#define APU_HAVE_SDBM 1
+#define APU_HAVE_NDBM 0
#define APU_HAVE_GDBM 0
-
-/* Allow external override */
-#if !defined(APU_HAVE_DB)
#define APU_HAVE_DB 0
+
+#if APU_HAVE_DB
+#define APU_HAVE_DB_VERSION UNKNOWN
#endif
+#define APU_HAVE_PGSQL 0
+#define APU_HAVE_MYSQL 0
+#define APU_HAVE_SQLITE2 0
+#define APU_HAVE_SQLITE3 0
+#define APU_HAVE_ORACLE 0
#define APU_HAVE_APR_ICONV 1
#define APU_HAVE_ICONV 0
#define APR_HAS_XLATE (APU_HAVE_APR_ICONV || APU_HAVE_ICONV)
-#if !defined(APU_HAVE_PGSQL)
-#define APU_HAVE_PGSQL 0
-#endif
-#if !defined(APU_HAVE_SQLITE2)
-#define APU_HAVE_SQLITE2 0
-#endif
-#if !defined(APU_HAVE_SQLITE3)
-#define APU_HAVE_SQLITE3 0
-#endif
-
#endif /* APU_H */
#endif /* WIN32 */
diff --git a/srclib/apr-util/include/apu_version.h b/srclib/apr-util/include/apu_version.h
index 17076831..f39d3b40 100644
--- a/srclib/apr-util/include/apu_version.h
+++ b/srclib/apr-util/include/apu_version.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -59,7 +59,7 @@
* The Patch Level never includes API changes, simply bug fixes.
* Reset to 0 when upgrading APR_MINOR_VERSION
*/
-#define APU_PATCH_VERSION 10
+#define APU_PATCH_VERSION 12
/**
* The symbol APU_IS_DEV_VERSION is only defined for internal,
diff --git a/srclib/apr-util/include/apu_want.h.in b/srclib/apr-util/include/apu_want.h.in
index ac297292..a296e5c5 100644
--- a/srclib/apr-util/include/apu_want.h.in
+++ b/srclib/apr-util/include/apu_want.h.in
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apu_want.hnw b/srclib/apr-util/include/apu_want.hnw
index 4927da8b..afdc9f74 100644
--- a/srclib/apr-util/include/apu_want.hnw
+++ b/srclib/apr-util/include/apu_want.hnw
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/apu_want.hw b/srclib/apr-util/include/apu_want.hw
index 4927da8b..8bb56ce7 100644
--- a/srclib/apr-util/include/apu_want.hw
+++ b/srclib/apr-util/include/apu_want.hw
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -23,7 +23,7 @@
* <PRE>
* Features:
*
- * APU_WANT_DB: <@apu_db_header>
+ * APU_WANT_DB: <db.h>
*
* Typical usage:
*
diff --git a/srclib/apr-util/include/private/apr_dbd_internal.h b/srclib/apr-util/include/private/apr_dbd_internal.h
index fcefc234..1769d466 100644
--- a/srclib/apr-util/include/private/apr_dbd_internal.h
+++ b/srclib/apr-util/include/private/apr_dbd_internal.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/private/apr_dbm_private.h b/srclib/apr-util/include/private/apr_dbm_private.h
index 7faae8bf..c598752f 100644
--- a/srclib/apr-util/include/private/apr_dbm_private.h
+++ b/srclib/apr-util/include/private/apr_dbm_private.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/private/apu_config.h.in b/srclib/apr-util/include/private/apu_config.h.in
index 1e905718..1c65b912 100644
--- a/srclib/apr-util/include/private/apu_config.h.in
+++ b/srclib/apr-util/include/private/apu_config.h.in
@@ -18,9 +18,6 @@
/* Define to 1 if you have the `crypt_r' function. */
#undef HAVE_CRYPT_R
-/* Define to 1 if you have the file `AC_File'. */
-#undef HAVE_DBD_APR_DBD_MYSQL_C
-
/* Define if expat.h is available */
#undef HAVE_EXPAT_H
diff --git a/srclib/apr-util/include/private/apu_config.hnw b/srclib/apr-util/include/private/apu_config.hnw
new file mode 100644
index 00000000..a92da1bf
--- /dev/null
+++ b/srclib/apr-util/include/private/apu_config.hnw
@@ -0,0 +1,50 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Note: This is a NetWare specific version of apu_config.hnw. It is copied
+ * as apu_config.h at the start of a NetWare build.
+ */
+
+#ifdef NETWARE
+
+#ifndef APU_CONFIG_H
+#define APU_CONFIG_H
+
+/*
+ * NetWare does not have GDBM, and we always use the bundled (new) Expat
+ */
+
+/* Define if you have the gdbm library (-lgdbm). */
+/* #undef HAVE_LIBGDBM */
+
+/* define if Expat 1.0 or 1.1 was found */
+/* #undef APR_HAVE_OLD_EXPAT */
+
+/* NetWare uses its own ICONV implementation. */
+#define HAVE_ICONV_H 1
+
+/*
+ * check for newer NDKs which use now correctly 'const char*' with iconv.
+ */
+#include <ndkvers.h>
+#if (CURRENT_NDK_THRESHOLD >= 705110000)
+#define APU_ICONV_INBUF_CONST
+#endif
+
+#endif /* APU_CONFIG_H */
+#endif /* NETWARE */
+
diff --git a/srclib/apr-util/include/private/apu_config.hw b/srclib/apr-util/include/private/apu_config.hw
index c4d7d093..72cea511 100644
--- a/srclib/apr-util/include/private/apu_config.hw
+++ b/srclib/apr-util/include/private/apu_config.hw
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/private/apu_select_dbm.h.in b/srclib/apr-util/include/private/apu_select_dbm.h.in
index c24ebe52..b69aec03 100644
--- a/srclib/apr-util/include/private/apu_select_dbm.h.in
+++ b/srclib/apr-util/include/private/apu_select_dbm.h.in
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/include/private/apu_select_dbm.hnw b/srclib/apr-util/include/private/apu_select_dbm.hnw
new file mode 100644
index 00000000..baa6c144
--- /dev/null
+++ b/srclib/apr-util/include/private/apu_select_dbm.hnw
@@ -0,0 +1,28 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APU_SELECT_DBM_H
+#define APU_SELECT_DBM_H
+
+/*
+** The following macros control what features APRUTIL will use
+*/
+#define APU_USE_SDBM 1
+#define APU_USE_GDBM 0
+#define APU_USE_NDBM 0
+#define APU_USE_DB 0
+
+#endif /* !APU_SELECT_DBM_H */
diff --git a/srclib/apr-util/include/private/apu_select_dbm.hw b/srclib/apr-util/include/private/apu_select_dbm.hw
index 0561cb8f..97c7b6c2 100644
--- a/srclib/apr-util/include/private/apu_select_dbm.hw
+++ b/srclib/apr-util/include/private/apu_select_dbm.hw
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -20,13 +20,9 @@
/*
** The following macros control what features APRUTIL will use
*/
-#define APU_USE_SDBM 1
-#define APU_USE_GDBM 0
-#define APU_USE_NDBM 0
-#define APU_USE_DB 0
-
-#if APU_USE_DB
-#include <db.h>
-#endif
+#define APU_USE_SDBM 1
+#define APU_USE_GDBM 0
+#define APU_USE_NDBM 0
+#define APU_USE_DB 0
#endif /* !APU_SELECT_DBM_H */
diff --git a/srclib/apr-util/ldap/apr_ldap_init.c b/srclib/apr-util/ldap/apr_ldap_init.c
index 6aec5d16..767faade 100644
--- a/srclib/apr-util/ldap/apr_ldap_init.c
+++ b/srclib/apr-util/ldap/apr_ldap_init.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/ldap/apr_ldap_option.c b/srclib/apr-util/ldap/apr_ldap_option.c
index 43eb8d09..15d216a2 100644
--- a/srclib/apr-util/ldap/apr_ldap_option.c
+++ b/srclib/apr-util/ldap/apr_ldap_option.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/ldap/apr_ldap_url.c b/srclib/apr-util/ldap/apr_ldap_url.c
index 29684b77..52e37b25 100644
--- a/srclib/apr-util/ldap/apr_ldap_url.c
+++ b/srclib/apr-util/ldap/apr_ldap_url.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/libaprutil.dsp b/srclib/apr-util/libaprutil.dsp
index 7b22eff3..bc9afeb1 100644
--- a/srclib/apr-util/libaprutil.dsp
+++ b/srclib/apr-util/libaprutil.dsp
@@ -4,7 +4,7 @@
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-CFG=libaprutil - Win32 Debug
+CFG=libaprutil - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,12 +13,14 @@ CFG=libaprutil - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "libaprutil.mak" CFG="libaprutil - Win32 Debug"
+!MESSAGE NMAKE /f "libaprutil.mak" CFG="libaprutil - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libaprutil - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "libaprutil - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libaprutil - x64 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libaprutil - x64 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
@@ -43,7 +45,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "NDEBUG" /D "APU_DECLARE_EXPORT" /D "APU_USE_SDBM" /D "WIN32" /D "_WINDOWS" /Fd"Release\libaprutil_src" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "NDEBUG" /D "APU_DECLARE_EXPORT" /D "APU_USE_SDBM" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libaprutil_src" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
# ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -53,9 +55,9 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /opt:ref
-# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /out:".\Release\libaprutil-1.dll" /opt:ref
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /out:"Release\libaprutil-1.dll" /pdb:"Release\libaprutil-1.pdb" /implib:"Release\libaprutil-1.lib" /MACHINE:X86 /opt:ref
# Begin Special Build Tool
-TargetPath=.\Release\libaprutil-1.dll
+TargetPath=Release\libaprutil-1.dll
SOURCE="$(InputPath)"
PostBuild_Desc=Embed .manifest
PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
@@ -74,8 +76,8 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "_DEBUG" /D "APU_DECLARE_EXPORT" /D "APU_USE_SDBM" /D "WIN32" /D "_WINDOWS" /Fd"Debug\libaprutil_src" /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "_DEBUG" /D "APU_DECLARE_EXPORT" /D "APU_USE_SDBM" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libaprutil_src" /FD /EHsc /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
# ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -85,9 +87,73 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /out:".\Debug\libaprutil-1.dll"
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /out:"Debug\libaprutil-1.dll" /pdb:"Debug\libaprutil-1.pdb" /implib:"Debug\libaprutil-1.lib" /MACHINE:X86
# Begin Special Build Tool
-TargetPath=.\Debug\libaprutil-1.dll
+TargetPath=Debug\libaprutil-1.dll
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "libaprutil - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "x64\Release"
+# PROP BASE Intermediate_Dir "x64\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "x64\Release"
+# PROP Intermediate_Dir "x64\Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "NDEBUG" /D "APU_DECLARE_EXPORT" /D "APU_USE_SDBM" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libaprutil_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG" /d "APU_VERSION_ONLY" /I "./include" /I "../apr/include"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /opt:ref
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /out:"x64\Release\libaprutil-1.dll" /pdb:"x64\Release\libaprutil-1.pdb" /implib:"x64\Release\libaprutil-1.lib" /MACHINE:X64 /opt:ref
+# Begin Special Build Tool
+TargetPath=x64\Release\libaprutil-1.dll
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "libaprutil - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "x64\Debug"
+# PROP BASE Intermediate_Dir "x64\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "x64\Debug"
+# PROP Intermediate_Dir "x64\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "../apr/include" /I "./include/private" /I "../apr-iconv/include" /I "./dbm/sdbm" /I "./xml/expat/lib" /D "_DEBUG" /D "APU_DECLARE_EXPORT" /D "APU_USE_SDBM" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libaprutil_src" /FD /EHsc /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG" /d "APU_VERSION_ONLY" /I "./include" /I "../apr/include"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib wldap32.lib ole32.lib /nologo /base:"0x6EE60000" /subsystem:windows /dll /incremental:no /debug /out:"x64\Debug\libaprutil-1.dll" /pdb:"x64\Debug\libaprutil-1.pdb" /implib:"x64\Debug\libaprutil-1.lib" /MACHINE:X64
+# Begin Special Build Tool
+TargetPath=x64\Debug\libaprutil-1.dll
SOURCE="$(InputPath)"
PostBuild_Desc=Embed .manifest
PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
@@ -99,6 +165,8 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# Name "libaprutil - Win32 Release"
# Name "libaprutil - Win32 Debug"
+# Name "libaprutil - x64 Release"
+# Name "libaprutil - x64 Debug"
# Begin Group "Source Files"
# PROP Default_Filter ""
@@ -190,6 +258,10 @@ SOURCE=.\dbd\apr_dbd.c
# End Source File
# Begin Source File
+SOURCE=.\dbd\apr_dbd_mysql.c
+# End Source File
+# Begin Source File
+
SOURCE=.\dbd\apr_dbd_pgsql.c
# End Source File
# Begin Source File
@@ -377,6 +449,26 @@ InputPath=.\include\apr_ldap.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "libaprutil - x64 Release"
+
+# Begin Custom Build - Creating apr_ldap.h from apr_ldap.hw
+InputPath=.\include\apr_ldap.hw
+
+".\include\apr_ldap.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr_ldap.hw > .\include\apr_ldap.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libaprutil - x64 Debug"
+
+# Begin Custom Build - Creating apr_ldap.h from apr_ldap.hw
+InputPath=.\include\apr_ldap.hw
+
+".\include\apr_ldap.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr_ldap.hw > .\include\apr_ldap.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -412,6 +504,26 @@ InputPath=.\include\apu.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "libaprutil - x64 Release"
+
+# Begin Custom Build - Creating apu.h from apu.hw
+InputPath=.\include\apu.hw
+
+".\include\apu.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu.hw > .\include\apu.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libaprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu.h from apu.hw
+InputPath=.\include\apu.hw
+
+".\include\apu.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu.hw > .\include\apu.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -443,6 +555,26 @@ InputPath=.\include\private\apu_config.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "libaprutil - x64 Release"
+
+# Begin Custom Build - Creating apu_config.h from apu_config.hw
+InputPath=.\include\private\apu_config.hw
+
+".\include\private\apu_config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_config.hw > .\include\private\apu_config.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libaprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu_config.h from apu_config.hw
+InputPath=.\include\private\apu_config.hw
+
+".\include\private\apu_config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_config.hw > .\include\private\apu_config.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -474,6 +606,26 @@ InputPath=.\include\private\apu_select_dbm.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "libaprutil - x64 Release"
+
+# Begin Custom Build - Creating apu_select_dbm.h from apu_select_dbm.hw
+InputPath=.\include\private\apu_select_dbm.hw
+
+".\include\private\apu_select_dbm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_select_dbm.hw > .\include\private\apu_select_dbm.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libaprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu_select_dbm.h from apu_select_dbm.hw
+InputPath=.\include\private\apu_select_dbm.hw
+
+".\include\private\apu_select_dbm.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\private\apu_select_dbm.hw > .\include\private\apu_select_dbm.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -509,6 +661,26 @@ InputPath=.\include\apu_want.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "libaprutil - x64 Release"
+
+# Begin Custom Build - Creating apu_want.h from apu_want.hw
+InputPath=.\include\apu_want.hw
+
+".\include\apu_want.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu_want.hw > .\include\apu_want.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libaprutil - x64 Debug"
+
+# Begin Custom Build - Creating apu_want.h from apu_want.hw
+InputPath=.\include\apu_want.hw
+
+".\include\apu_want.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apu_want.hw > .\include\apu_want.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -609,6 +781,5 @@ SOURCE=.\include\apu_version.h
SOURCE=.\libaprutil.rc
# End Source File
-
# End Target
# End Project
diff --git a/srclib/apr-util/misc/apr_date.c b/srclib/apr-util/misc/apr_date.c
index f584e093..28086e33 100644
--- a/srclib/apr-util/misc/apr_date.c
+++ b/srclib/apr-util/misc/apr_date.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -334,7 +334,7 @@ APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date)
if (!date)
return APR_DATE_BAD;
- /* Not all dates have text months at the beginning. */
+ /* Not all dates have text days at the beginning. */
if (!apr_isdigit(date[0]))
{
while (*date && apr_isspace(*date)) /* Find first non-whitespace char */
@@ -361,7 +361,7 @@ APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date)
monstr = date + 3;
timstr = date + 12;
- gmtstr = date + 20;
+ gmtstr = date + 21;
TIMEPARSE_STD(ds, timstr);
}
@@ -418,7 +418,9 @@ APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date)
}
else if (apr_date_checkmask(date, "## @$$ ## ##:##:## *")) {
/* This is the old RFC 1123 date format - many many years ago, people
- * used two-digit years. Oh, how foolish. */
+ * used two-digit years. Oh, how foolish.
+ *
+ * Two-digit day, two-digit year version. */
ds.tm_year = ((date[7] - '0') * 10) + (date[8] - '0');
if (ds.tm_year < 70)
@@ -432,9 +434,29 @@ APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date)
TIMEPARSE_STD(ds, timstr);
}
+ else if (apr_date_checkmask(date, " # @$$ ## ##:##:## *")) {
+ /* This is the old RFC 1123 date format - many many years ago, people
+ * used two-digit years. Oh, how foolish.
+ *
+ * Space + one-digit day, two-digit year version.*/
+ ds.tm_year = ((date[7] - '0') * 10) + (date[8] - '0');
+
+ if (ds.tm_year < 70)
+ ds.tm_year += 100;
+
+ ds.tm_mday = (date[1] - '0');
+
+ monstr = date + 3;
+ timstr = date + 10;
+ gmtstr = date + 19;
+
+ TIMEPARSE_STD(ds, timstr);
+ }
else if (apr_date_checkmask(date, "# @$$ ## ##:##:## *")) {
/* This is the old RFC 1123 date format - many many years ago, people
- * used two-digit years. Oh, how foolish. */
+ * used two-digit years. Oh, how foolish.
+ *
+ * One-digit day, two-digit year version. */
ds.tm_year = ((date[6] - '0') * 10) + (date[7] - '0');
if (ds.tm_year < 70)
@@ -521,7 +543,7 @@ APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date)
monstr = date + 3;
timstr = date + 12;
- gmtstr = date + 20;
+ gmtstr = date + 21;
TIMEPARSE_STD(ds, timstr);
}
@@ -583,22 +605,21 @@ APU_DECLARE(apr_time_t) apr_date_parse_rfc(const char *date)
* If there is any confusion, tm_gmtoff will remain 0.
*/
ds.tm_gmtoff = 0;
- if (gmtstr && *gmtstr != '\0') {
- /* Do we have a GMT? */
- if (*(++gmtstr) != '\0') {
- int offset;
- switch (*(gmtstr++)) {
- case '-':
- offset = atoi(gmtstr);
- ds.tm_gmtoff -= (offset / 100) * 60 * 60;
- ds.tm_gmtoff -= (offset % 100) * 60;
- break;
- case '+':
- offset = atoi(gmtstr);
- ds.tm_gmtoff += (offset / 100) * 60 * 60;
- ds.tm_gmtoff += (offset % 100) * 60;
- break;
- }
+
+ /* Do we have a timezone ? */
+ if (gmtstr) {
+ int offset;
+ switch (*gmtstr) {
+ case '-':
+ offset = atoi(gmtstr+1);
+ ds.tm_gmtoff -= (offset / 100) * 60 * 60;
+ ds.tm_gmtoff -= (offset % 100) * 60;
+ break;
+ case '+':
+ offset = atoi(gmtstr+1);
+ ds.tm_gmtoff += (offset / 100) * 60 * 60;
+ ds.tm_gmtoff += (offset % 100) * 60;
+ break;
}
}
diff --git a/srclib/apr-util/misc/apr_queue.c b/srclib/apr-util/misc/apr_queue.c
index a869cf9f..8636a824 100644
--- a/srclib/apr-util/misc/apr_queue.c
+++ b/srclib/apr-util/misc/apr_queue.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/misc/apr_reslist.c b/srclib/apr-util/misc/apr_reslist.c
index 531b7450..058fc7d3 100644
--- a/srclib/apr-util/misc/apr_reslist.c
+++ b/srclib/apr-util/misc/apr_reslist.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -370,6 +370,7 @@ APU_DECLARE(apr_status_t) apr_reslist_invalidate(apr_reslist_t *reslist,
apr_thread_mutex_lock(reslist->listlock);
ret = reslist->destructor(resource, reslist->params, reslist->pool);
reslist->ntotal--;
+ apr_thread_cond_signal(reslist->avail);
apr_thread_mutex_unlock(reslist->listlock);
return ret;
}
diff --git a/srclib/apr-util/misc/apr_rmm.c b/srclib/apr-util/misc/apr_rmm.c
index 87d05132..ed67dc25 100644
--- a/srclib/apr-util/misc/apr_rmm.c
+++ b/srclib/apr-util/misc/apr_rmm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/misc/apu_version.c b/srclib/apr-util/misc/apu_version.c
index dab34b71..97e73099 100644
--- a/srclib/apr-util/misc/apu_version.c
+++ b/srclib/apr-util/misc/apu_version.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/strmatch/apr_strmatch.c b/srclib/apr-util/strmatch/apr_strmatch.c
index 86f874f3..7fec638c 100644
--- a/srclib/apr-util/strmatch/apr_strmatch.c
+++ b/srclib/apr-util/strmatch/apr_strmatch.c
@@ -1,9 +1,9 @@
-/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -36,7 +36,7 @@ static const char *match_boyer_moore_horspool(
const char *s, apr_size_t slen)
{
const char *s_end = s + slen;
- int *shift = (int *)(this_pattern->context);
+ apr_size_t *shift = (apr_size_t *)(this_pattern->context);
const char *s_next = s + this_pattern->length - 1;
const char *p_start = this_pattern->pattern;
const char *p_end = p_start + this_pattern->length - 1;
@@ -60,7 +60,7 @@ static const char *match_boyer_moore_horspool_nocase(
const char *s, apr_size_t slen)
{
const char *s_end = s + slen;
- int *shift = (int *)(this_pattern->context);
+ apr_size_t *shift = (apr_size_t *)(this_pattern->context);
const char *s_next = s + this_pattern->length - 1;
const char *p_start = this_pattern->pattern;
const char *p_end = p_start + this_pattern->length - 1;
@@ -85,7 +85,7 @@ APU_DECLARE(const apr_strmatch_pattern *) apr_strmatch_precompile(
{
apr_strmatch_pattern *pattern;
apr_size_t i;
- int *shift;
+ apr_size_t *shift;
pattern = apr_palloc(p, sizeof(*pattern));
pattern->pattern = s;
@@ -96,7 +96,7 @@ APU_DECLARE(const apr_strmatch_pattern *) apr_strmatch_precompile(
return pattern;
}
- shift = (int *)apr_palloc(p, sizeof(int) * NUM_CHARS);
+ shift = (apr_size_t *)apr_palloc(p, sizeof(apr_size_t) * NUM_CHARS);
for (i = 0; i < NUM_CHARS; i++) {
shift[i] = pattern->length;
}
diff --git a/srclib/apr-util/test/Makefile.in b/srclib/apr-util/test/Makefile.in
index 98a56572..97a97635 100644
--- a/srclib/apr-util/test/Makefile.in
+++ b/srclib/apr-util/test/Makefile.in
@@ -1,26 +1,64 @@
+srcdir = @srcdir@
VPATH = @srcdir@
+# PROGRAMS includes all test programs built on this platform.
+# STDTEST_PORTABLE
+# test programs invoked via standard user interface, run on all platforms
+# ALL_TESTS
+# test modules invoked through the abts suite (./testall)
+# OTHER_PROGRAMS
+# programs such as sockperf, that have to be invoked in a special sequence
+# or with special parameters
+
INCLUDES = @APRUTIL_PRIV_INCLUDES@ @APR_INCLUDES@ @APRUTIL_INCLUDES@
-PROGRAMS = testall testdbm testdate testxml testrmm \
- testreslist testqueue testxlate dbd
+STDTEST_PORTABLE = testall dbd
+
+TESTS = teststrmatch.lo testuri.lo testuuid.lo testbuckets.lo testpass.lo \
+ testmd4.lo testmd5.lo testldap.lo testdate.lo testdbm.lo testdbd.lo \
+ testxml.lo testrmm.lo testreslist.lo testqueue.lo testxlate.lo
+
+OTHER_PROGRAMS =
+
+PROGRAMS = $(STDTEST_PORTABLE) $(OTHER_PROGRAMS)
+
TARGETS = $(PROGRAMS)
-APRUTIL_DOTTED_VERSION=@APRUTIL_DOTTED_VERSION@
-APRUTIL_MAJOR_VERSION=@APRUTIL_MAJOR_VERSION@
-TARGET_LIB_PATH = ../lib@APRUTIL_LIBNAME@.la
+LOCAL_LIBS = ../lib@APRUTIL_LIBNAME@@APRUTIL_MAJOR_VERSION@.la
CLEAN_TARGETS = manyfile.bin testfile.txt data/sqlite*.db
# bring in rules.mk for standard functionality
@INCLUDE_RULES@
-PROGRAM_DEPENDENCIES = @APRUTIL_LIBS@
-APRUTIL_LDFLAGS = -no-install @APRUTIL_LDFLAGS@
+APRUTIL_LIBS = @APRUTIL_LIBS@
+APRUTIL_LDFLAGS = $(ALL_LDFLAGS) @LT_NO_INSTALL@ @APRUTIL_LDFLAGS@
+
+# link programs using -no-install to get real executables not
+# libtool wrapper scripts which link an executable when first run.
+LINK_PROG = $(LIBTOOL) $(LTFLAGS) --mode=link $(LT_LDFLAGS) $(COMPILE) \
+ $(APRUTIL_LDFLAGS) -o $@
-all: $(PROGRAMS)
+# STDTEST_PORTABLE;
-check: $(PROGRAMS)
- for prog in $(PROGRAMS); do \
+abts.lo: $(srcdir)/abts.c $(srcdir)/abts.h $(srcdir)/abts_tests.h \
+ $(srcdir)/testutil.h
+
+testutil.lo: $(srcdir)/abts.c $(srcdir)/abts.h $(srcdir)/abts_tests.h \
+ $(srcdir)/testutil.h
+
+OBJECTS_testall = abts.lo testutil.lo $(TESTS) $(LOCAL_LIBS)
+testall: $(OBJECTS_testall)
+ $(LINK_PROG) $(OBJECTS_testall) $(APRUTIL_LIBS)
+# For VPATH builds; where we have no ./data, copy us some data
+# if we wait until 'make check', then 'make; ./testall' fails;
+ if test ! -d "./data"; then cp -r $(srcdir)/data data; fi
+
+OBJECTS_dbd = dbd.lo $(LOCAL_LIBS)
+dbd: $(OBJECTS_dbd)
+ $(LINK_PROG) $(OBJECTS_dbd) $(APRUTIL_LIBS)
+
+check: $(TESTALL_COMPONENTS) $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE)
+ for prog in $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE); do \
if test "$$prog" = 'dbd'; then \
for driver in sqlite2 sqlite3; do \
./$$prog $$driver; \
@@ -38,54 +76,4 @@ check: $(PROGRAMS)
fi; \
done
-testdbm_OBJECTS = testdbm.lo
-testdbm_LDADD = $(TARGET_LIB_PATH)
-testdbm: $(testdbm_OBJECTS) $(testdbm_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testdbm_OBJECTS) $(testdbm_LDADD) $(PROGRAM_DEPENDENCIES)
-
-dbd_OBJECTS = dbd.lo
-dbd_LDADD = $(TARGET_LIB_PATH)
-dbd: $(dbd_OBJECTS) $(dbd_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(dbd_OBJECTS) $(dbd_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testdbd_OBJECTS = testdbd.lo
-testdbd_LDADD = $(TARGET_LIB_PATH)
-testdbd: $(testdbd_OBJECTS) $(testdbd_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testdbd_OBJECTS) $(testdbd_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testdate_OBJECTS = testdate.lo
-testdate_LDADD = $(TARGET_LIB_PATH)
-testdate: $(testdate_OBJECTS) $(testdate_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testdate_OBJECTS) $(testdate_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testxml_OBJECTS = testxml.lo
-testxml_LDADD = $(TARGET_LIB_PATH)
-testxml: $(testxml_OBJECTS) $(testxml_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testxml_OBJECTS) $(testxml_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testrmm_OBJECTS = testrmm.lo
-testrmm_LDADD = $(TARGET_LIB_PATH)
-testrmm: $(testrmm_OBJECTS) $(testrmm_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testrmm_OBJECTS) $(testrmm_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testreslist_OBJECTS = testreslist.lo
-testreslist_LDADD = $(TARGET_LIB_PATH)
-testreslist: $(testreslist_OBJECTS) $(testreslist_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testreslist_OBJECTS) $(testreslist_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testqueue_OBJECTS = testqueue.lo
-testqueue_LDADD = $(TARGET_LIB_PATH)
-testqueue: $(testqueue_OBJECTS) $(testqueue_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testqueue_OBJECTS) $(testqueue_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testxlate_OBJECTS = testxlate.lo
-testxlate_LDADD = $(TARGET_LIB_PATH)
-testxlate: $(testxlate_OBJECTS) $(testxlate_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testxlate_OBJECTS) $(testxlate_LDADD) $(PROGRAM_DEPENDENCIES)
-
-testall_OBJECTS = teststrmatch.lo testuri.lo testuuid.lo abts.lo testutil.lo \
- testbuckets.lo testpass.lo testmd4.lo testmd5.lo testldap.lo testdbd.lo
-testall_LDADD = $(TARGET_LIB_PATH)
-testall: $(testall_OBJECTS) $(testall_LDADD)
- $(LINK) $(APRUTIL_LDFLAGS) $(testall_OBJECTS) $(testall_LDADD) $(PROGRAM_DEPENDENCIES)
-
+# DO NOT REMOVE
diff --git a/srclib/apr-util/test/Makefile.win b/srclib/apr-util/test/Makefile.win
index 374f0ebb..e9b44b3a 100644
--- a/srclib/apr-util/test/Makefile.win
+++ b/srclib/apr-util/test/Makefile.win
@@ -1,131 +1,162 @@
-# -*- Makefile -*-
-!IF "$(OS)" == "Windows_NT"
-NULL=
-rmdir=rd /s /q
-!ELSE
-NULL=nul
-rmdir=deltree /y
+# PROGRAMS
+# test programs invoked via standard user interface, run on all platforms
+# ALL_TESTS
+# test modules invoked through the abts suite (./testall)
+# OTHER_PROGRAMS
+# programs such as sendfile, that have to be invoked in a special sequence
+# or with special parameters
+
+# Windows Specific;
+# MODEL
+# dynamic or static - refers to which set of bindings are desired
+# and controls which libraries (apr-1 or libapr-1) will be linked.
+# OUTDIR
+# the library path of the libraries, and also the path within test/
+# where all of the tests for that library will be built
+# APR_PATH
+# relative or absolute path to locate apr libs and includes
+# API_PATH
+# relative or absolute path to locate apr-iconv libs and includes
+
+!IFNDEF MODEL
+MODEL=dynamic
!ENDIF
-SILENT=@
+APROUTDIR=OUTDIR
-# Default build and bind modes
-BUILD_MODE = release
-BIND_MODE = shared
+!IFNDEF OUTDIR
+!IF "$(MODEL)" == "static"
+OUTDIR=LibR
+!ELSE
+OUTDIR=Release
+!ENDIF
-!IF "$(BUILD_MODE)" == "release" || "$(BUILD_MODE)" == "Release"
-!IF "$(BIND_MODE)" == "shared"
-# release shared
-APR_LIB_PFX = $(APR_SOURCE)\Release\lib
-APU_LIB_PFX = $(APU_SOURCE)\Release\lib
-API_LIB_PFX = $(API_SOURCE)\Release\lib
-CFG_CFLAGS = /MD /O2
-CFG_DEFINES = /D "NDEBUG"
-CFG_OUTPUT = Release
+!IF [$(COMSPEC) /c cl /nologo /? | find "x64" >NUL ] == 0
+OUTDIR=x64\$(OUTDIR)
+!ENDIF
+!ENDIF
-!ELSE
-!IF "$(BIND_MODE)" == "static"
-# release static
-APR_LIB_PFX = $(APR_SOURCE)\LibR\ # no line continuation
-APU_LIB_PFX = $(APU_SOURCE)\LibR\ # no line continuation
-API_LIB_PFX = $(API_SOURCE)\LibR\ # no line continuation
-CFG_CFLAGS = /MD /O2
-CFG_DEFINES = /D "NDEBUG" /D "APR_DECLARE_STATIC" \
- /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC"
-CFG_API_LIB = $(API_LIB_PFX)apriconv-1.lib
-CFG_OUTPUT = LibR
+!IF !EXIST("$(OUTDIR)\.")
+!IF ([$(COMSPEC) /C mkdir $(OUTDIR)] == 0)
+!ENDIF
+!ENDIF
+!IFNDEF INTDIR
+INTDIR=$(OUTDIR)
!ELSE
-!ERROR Unknown bind mode "$(BIND_MODE)"
+!IF !EXIST("$(INTDIR)\.")
+!IF ([$(COMSPEC) /C mkdir $(INTDIR)] == 0)
+!ENDIF
!ENDIF
!ENDIF
-!ELSE
-!IF "$(BUILD_MODE)" == "debug" || "$(BUILD_MODE)" == "Debug"
-!IF "$(BIND_MODE)" == "shared"
-# debug shared
-APR_LIB_PFX = $(APR_SOURCE)\Debug\lib
-APU_LIB_PFX = $(APU_SOURCE)\Debug\lib
-API_LIB_PFX = $(API_SOURCE)\Debug\lib
-CFG_CFLAGS = /MDd /Zi /Od
-CFG_DEFINES = /D "_DEBUG"
-CFG_LDFLAGS = /DEBUG
-CFG_OUTPUT = Debug
+!MESSAGE Building tests into $(OUTDIR) for $(MODEL)
-!ELSE
-!IF "$(BIND_MODE)" == "static"
-# debug static
-APR_LIB_PFX = $(APR_SOURCE)\LibD\ # no line continuation
-APU_LIB_PFX = $(APU_SOURCE)\LibD\ # no line continuation
-API_LIB_PFX = $(API_SOURCE)\LibD\ # no line continuation
-CFG_CFLAGS = /MDd /Zi /Od
-CFG_DEFINES = /D "_DEBUG" /D "APR_DECLARE_STATIC" \
- /D "APU_DECLARE_STATIC" /D "API_DECLARE_STATIC"
-CFG_LDFLAGS = /DEBUG
-CFG_API_LIB = $(API_LIB_PFX)apriconv-1.lib
-CFG_OUTPUT = LibD
+ALL_TESTS = $(INTDIR)\teststrmatch.obj $(INTDIR)\testuri.obj \
+ $(INTDIR)\testuuid.obj $(INTDIR)\testutil.obj \
+ $(INTDIR)\testbuckets.obj $(INTDIR)\testpass.obj \
+ $(INTDIR)\testmd4.obj $(INTDIR)\testmd5.obj \
+ $(INTDIR)\testldap.obj $(INTDIR)\testdbd.obj \
+ $(OUTDIR)\testdbm.obj $(OUTDIR)\testreslist.obj \
+ $(OUTDIR)\testxml.obj $(OUTDIR)\testqueue.obj \
+ $(OUTDIR)\testrmm.obj $(OUTDIR)\testxlate.obj \
+ $(OUTDIR)\testdate.obj
+
+CLEAN_DATA = manyfile.bin testfile.txt data\sqlite*.db
+
+CLEAN_BUILDDIRS = Debug Release LibD LibR 9x x64
+
+PROGRAMS = $(OUTDIR)\testall.exe
+
+OTHER_PROGRAMS = $(OUTDIR)\dbd.exe
+
+# bring in rules.mk for standard functionality
+ALL: $(PROGRAMS) $(OTHER_PROGRAMS)
+
+CL = cl.exe
+LD = link.exe
+
+APR_PATH = ..\..\apr
+API_PATH = ..\..\apr-iconv
+
+APROUTDIR=$(OUTDIR)
+!IF "$(MODEL)" == "static"
+PROGRAM_DEPENDENCIES = \
+ $(APR_PATH)\$(APROUTDIR)\apr-1.lib \
+ $(API_PATH)\$(OUTDIR)\apriconv-1.lib \
+ ..\$(OUTDIR)\aprutil-1.lib
+STATIC_CFLAGS = /D APR_DECLARE_STATIC /D APU_DECLARE_STATIC
!ELSE
-!ERROR Unknown bind mode "$(BIND_MODE)"
-!ENDIF
+PROGRAM_DEPENDENCIES = \
+ $(APR_PATH)\$(APROUTDIR)\libapr-1.lib \
+ $(API_PATH)\$(OUTDIR)\libapriconv-1.lib \
+ ..\$(OUTDIR)\libaprutil-1.lib
+STATIC_CFLAGS =
!ENDIF
+!IFDEF _DEBUG
+DEBUG_CFLAGS = /MDd
!ELSE
-!ERROR Unknown build mode "$(BUILD_MODE)"
-!ENDIF
+DEBUG_CFLAGS = /MD
!ENDIF
+INCLUDES=/I "../include" /I "$(API_PATH)/include" /I "$(APR_PATH)/include"
+
+CFLAGS = /nologo /c /W3 /Gm /EHsc /Zi /Od $(INCLUDES) \
+ $(STATIC_CFLAGS) $(DEBUG_CFLAGS) /D "BINPATH=$(OUTDIR:\=/)" \
+ /D _DEBUG /D WIN32 /Fo"$(INTDIR)/" /FD
+
+LD_LIBS = kernel32.lib advapi32.lib ws2_32.lib wsock32.lib \
+ ole32.lib shell32.lib rpcrt4.lib wldap32.lib
+
+LDFLAGS = /nologo /debug /subsystem:console /incremental:no
+SHLDFLAGS = /nologo /dll /debug /subsystem:windows /incremental:no
+
+.c{$(INTDIR)}.obj::
+ $(CL) $(CFLAGS) -c $< -Fd$(INTDIR)\ $(INCLUDES)
+
+# PROGRAMS;
+
+abts.c: abts.h abts_tests.h testutil.h
+
+testutil.c: abts.h abts_tests.h testutil.h
+
+$(OUTDIR)\testall.exe: $(ALL_TESTS) $(INTDIR)\abts.obj $(PROGRAM_DEPENDENCIES)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
+
+# OTHER_PROGRAMS;
+
+$(OUTDIR)\dbd.exe: $(INTDIR)\dbd.obj $(PROGRAM_DEPENDENCIES)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
+
+
+cleandata:
+ @for %f in ($(CLEAN_DATA)) do @if EXIST %f del /f %f
+
+clean: cleandata
+ @if EXIST $(INTDIR)\. rmdir /s /q $(INTDIR)
+ @if EXIST $(OUTDIR)\. rmdir /s /q $(OUTDIR)
+
+cleanall:
+ @for %d in ($(CLEAN_BUILDDIRS) $(INTDIR) $(OUTDIR)) do \
+ @if EXIST %d\. rmdir /s /q %d
+
+
+PATH=$(OUTDIR);..\$(OUTDIR);$(API_PATH)\$(OUTDIR);$(APR_PATH)\$(APROUTDIR);$(PATH)
+APR_ICONV1_PATH=$(API_PATH)\$(OUTDIR)\iconv
+
+check: $(PROGRAMS) $(OTHER_PROGRAMS)
+ @for %p in ($(PROGRAMS)) do @( \
+ echo Testing %p && %p -v || echo %p failed \
+ )
+ echo Testing dbd sqlite2 && $(OUTDIR)\dbd.exe sqlite2 || echo Failed
+ echo Testing dbd sqlite3 && $(OUTDIR)\dbd.exe sqlite3 || echo Failed
+
+checkall: check
-APR_SOURCE = ..\..\apr
-APU_SOURCE = ..
-API_SOURCE = ..\..\apr-iconv
-OUTPUT_DIR = .\$(CFG_OUTPUT)
-
-INT_CFLAGS = /nologo $(CFG_CFLAGS) /Fp"$(OUTPUT_DIR)\iconv.pch" /YX"iconv.h"
-INT_INCLUDES = /I "$(APU_SOURCE)\include" /I "$(APR_SOURCE)\include"
-# /I "$(API_SOURCE)\include"
-INT_DEFINES = /D "WIN32" /D "_CONSOLE" /D "_MBCS" $(CFG_DEFINES)
-INT_LDFLAGS = /nologo /incremental:no /subsystem:console $(CFG_LDFLAGS)
-
-CFLAGS = /W3
-ALL_CFLAGS = $(INT_CFLAGS) $(INT_INCLUDES) $(INT_DEFINES) $(CFLAGS)
-
-LDFLAGS = /WARN:0
-ALL_LDFLAGS = $(INT_LDFLAGS) $(LDFLAGS)
-
-.c{$(OUTPUT_DIR)}.exe:
- -$(SILENT)if not exist "$(OUTPUT_DIR)\$(NULL)" mkdir "$(OUTPUT_DIR)"
- $(SILENT)echo Compiling and linking $@...
- $(SILENT)cl $(ALL_CFLAGS) /Fo"$*.obj" /Fd"$*" $< \
- /link $(ALL_LDFLAGS) /out:$@ \
- "$(APU_LIB_PFX)aprutil-1.lib" \
- "$(APR_LIB_PFX)apr-1.lib" \
- "$(CFG_API)" \
- kernel32.lib advapi32.lib ws2_32.lib mswsock.lib
-
-
-##!ALL_TARGETS = $(OUTPUT_DIR)\testdate.exe \
-##! $(OUTPUT_DIR)\testdbm.exe \
-##! $(OUTPUT_DIR)\testmd4.exe \
-##! $(OUTPUT_DIR)\testmd5.exe \
-##! $(OUTPUT_DIR)\testqueue.exe \
-##! $(OUTPUT_DIR)\testreslist.exe \
-##! $(OUTPUT_DIR)\testrmm.exe \
-##! $(OUTPUT_DIR)\teststrmatch.exe \
-##! $(OUTPUT_DIR)\testuri.exe \
-##! $(OUTPUT_DIR)\testuuid.exe \
-##! $(OUTPUT_DIR)\testxlate.exe \
-##! $(OUTPUT_DIR)\testxml.exe
-
-ALL_TARGETS = $(OUTPUT_DIR)\testxlate.exe \
- $(OUTPUT_DIR)\testdbm.exe \
- $(OUTPUT_DIR)\testqueue.exe \
- $(OUTPUT_DIR)\testrmm.exe \
- $(OUTPUT_DIR)\testmd4.exe \
- $(OUTPUT_DIR)\testmd5.exe \
- $(OUTPUT_DIR)\testxml.exe
-
-all: $(ALL_TARGETS)
-
-clean:
- -$(SILENT)if exist "$(OUTPUT_DIR)/$(NULL)" $(rmdir) $(OUTPUT_DIR)
+# DO NOT REMOVE
diff --git a/srclib/apr-util/test/abts.c b/srclib/apr-util/test/abts.c
index 03ae16d1..596ad0a2 100644
--- a/srclib/apr-util/test/abts.c
+++ b/srclib/apr-util/test/abts.c
@@ -372,6 +372,9 @@ int main(int argc, const char *const argv[]) {
abts_suite *suite = NULL;
initialize();
+
+ quiet = !isatty(STDOUT_FILENO);
+
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-v")) {
verbose = 1;
diff --git a/srclib/apr-util/test/abts.h b/srclib/apr-util/test/abts.h
index 51123ff0..3ae41d26 100644
--- a/srclib/apr-util/test/abts.h
+++ b/srclib/apr-util/test/abts.h
@@ -22,6 +22,12 @@ extern "C" {
#include <stdlib.h>
#include <string.h>
+#ifdef WIN32
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
#ifndef ABTS_H
#define ABTS_H
diff --git a/srclib/apr-util/test/abts_tests.h b/srclib/apr-util/test/abts_tests.h
index b137ce58..ca157bbb 100644
--- a/srclib/apr-util/test/abts_tests.h
+++ b/srclib/apr-util/test/abts_tests.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -31,7 +31,14 @@ const struct testlist {
{testmd4},
{testmd5},
{testldap},
- {testdbd}
+ {testdbd},
+ {testdate},
+ {testxml},
+ {testxlate},
+ {testrmm},
+ {testdbm},
+ {testqueue},
+ {testreslist}
};
#endif /* APR_TEST_INCLUDES */
diff --git a/srclib/apr-util/test/dbd.c b/srclib/apr-util/test/dbd.c
index f8832539..b5ae9630 100644
--- a/srclib/apr-util/test/dbd.c
+++ b/srclib/apr-util/test/dbd.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/test_apu.h b/srclib/apr-util/test/test_apu.h
index 8d5f6dde..642edec2 100644
--- a/srclib/apr-util/test/test_apu.h
+++ b/srclib/apr-util/test/test_apu.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testall.dsw b/srclib/apr-util/test/testall.dsw
new file mode 100644
index 00000000..a3f5c2a3
--- /dev/null
+++ b/srclib/apr-util/test/testall.dsw
@@ -0,0 +1,278 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "apr"="..\..\apr\apr.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "apr_app"="..\..\apr\build\apr_app.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name apr
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "apriconv"="..\..\apr-iconv\apriconv.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name apr
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "aprutil"="..\aprutil.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name apriconv
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name xml
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libapr"="..\..\apr\libapr.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libapr_app"="..\..\apr\build\libapr_app.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libapriconv"="..\..\apr-iconv\libapriconv.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libapriconv_ccs_modules"="..\..\apr-iconv\ccs\libapriconv_ccs_modules.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libapriconv_ces_modules"="..\..\apr-iconv\ces\libapriconv_ces_modules.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "libaprutil"="..\libaprutil.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv_ccs_modules
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv_ces_modules
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name xml
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "testdll"="..\..\apr\test\testdll.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapr_app
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "testlib"="..\..\apr\test\testlib.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name apr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name apr_app
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "testutildll"=".\testutildll.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name libapr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapriconv
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libaprutil
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libapr_app
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "testutillib"=".\testutillib.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name apr
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name apriconv
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name aprutil
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name apr_app
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "xml"="..\xml\expat\lib\xml.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/srclib/apr-util/test/testbuckets.c b/srclib/apr-util/test/testbuckets.c
index 52b48400..6c23a771 100644
--- a/srclib/apr-util/test/testbuckets.c
+++ b/srclib/apr-util/test/testbuckets.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testdate.c b/srclib/apr-util/test/testdate.c
index 173f03bf..b4e2edf2 100644
--- a/srclib/apr-util/test/testdate.c
+++ b/srclib/apr-util/test/testdate.c
@@ -1,32 +1,43 @@
-/* This program tests the date_parse_http routine in ../main/util_date.c.
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
- * It is only semiautomated in that I would run it, modify the code to
- * use a different algorithm or seed, recompile and run again, etc.
- * Obviously it should use an argument for that, but I never got around
- * to changing the implementation.
- *
- * gcc -g -O2 -I../main -o test_date ../main/util_date.o test_date.c
- * test_date | egrep '^No '
- *
- * Roy Fielding, 1996
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
+#include "abts.h"
+#include "testutil.h"
#include "apr_date.h"
+#include "apr_general.h"
-#ifndef srand48
-#define srand48 srandom
-#endif
-
-#ifndef mrand48
-#define mrand48 random
-#endif
+#if APR_HAVE_TIME_H
+#include <time.h>
+#endif /* APR_HAVE_TIME_H */
-void gm_timestr_822(char *ts, apr_time_t sec);
-void gm_timestr_850(char *ts, apr_time_t sec);
-void gm_timestr_ccc(char *ts, apr_time_t sec);
+static struct datetest {
+ const char *input;
+ const char *output;
+} tests[] = {
+ { "Mon, 27 Feb 1995 20:49:44 -0800", "Tue, 28 Feb 1995 04:49:44 GMT" },
+ { "Fri, 1 Jul 2005 11:34:25 -0400", "Fri, 01 Jul 2005 15:34:25 GMT" },
+ { "Monday, 27-Feb-95 20:49:44 -0800", "Tue, 28 Feb 1995 04:49:44 GMT" },
+ { "Tue, 4 Mar 1997 12:43:52 +0200", "Tue, 04 Mar 1997 10:43:52 GMT" },
+ { "Mon, 27 Feb 95 20:49:44 -0800", "Tue, 28 Feb 1995 04:49:44 GMT" },
+ { "Tue, 4 Mar 97 12:43:52 +0200", "Tue, 04 Mar 1997 10:43:52 GMT" },
+ { "Tue, 4 Mar 97 12:43:52 +0200", "Tue, 04 Mar 1997 10:43:52 GMT" },
+ { "Mon, 27 Feb 95 20:49 GMT", "Mon, 27 Feb 1995 20:49:00 GMT" },
+ { "Tue, 4 Mar 97 12:43 GMT", "Tue, 04 Mar 1997 12:43:00 GMT" },
+ { NULL, NULL }
+};
static const apr_time_t year2secs[] = {
APR_INT64_C(0), /* 1970 */
@@ -104,7 +115,8 @@ const char month_snames[12][4] = {
"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
};
-void gm_timestr_822(char *ts, apr_time_t sec)
+/* XXX: non-portable */
+static void gm_timestr_822(char *ts, apr_time_t sec)
{
static const char *const days[7]=
{"Sun","Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
@@ -112,52 +124,26 @@ void gm_timestr_822(char *ts, apr_time_t sec)
time_t ls = (time_t)sec;
tms = gmtime(&ls);
-
+
sprintf(ts, "%s, %.2d %s %d %.2d:%.2d:%.2d GMT", days[tms->tm_wday],
tms->tm_mday, month_snames[tms->tm_mon], tms->tm_year + 1900,
tms->tm_hour, tms->tm_min, tms->tm_sec);
}
-void gm_timestr_850(char *ts, apr_time_t sec)
+/* Linear congruential generator */
+static apr_uint32_t lgc(apr_uint32_t a)
{
- static const char *const days[7]=
- {"Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
- "Saturday"};
- struct tm *tms;
- int year;
- time_t ls = (time_t)sec;
-
- tms = gmtime(&ls);
-
- year = tms->tm_year;
- if (year >= 100) year -= 100;
-
- sprintf(ts, "%s, %.2d-%s-%.2d %.2d:%.2d:%.2d GMT", days[tms->tm_wday],
- tms->tm_mday, month_snames[tms->tm_mon], year,
- tms->tm_hour, tms->tm_min, tms->tm_sec);
+ apr_uint64_t z = a;
+ z *= 279470273;
+ z %= APR_UINT64_C(4294967291);
+ return (apr_uint32_t)z;
}
-void gm_timestr_ccc(char *ts, apr_time_t sec)
-{
- static const char *const days[7]=
- {"Sun","Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
- struct tm *tms;
- time_t ls = (time_t)sec;
-
- tms = gmtime(&ls);
-
- sprintf(ts, "%s %s %2d %.2d:%.2d:%.2d %d", days[tms->tm_wday],
- month_snames[tms->tm_mon], tms->tm_mday,
- tms->tm_hour, tms->tm_min, tms->tm_sec, tms->tm_year + 1900);
-}
-
-int main (void)
+static void test_date_parse_http(abts_case *tc, void *data)
{
int year, i;
apr_time_t guess;
apr_time_t offset = 0;
- /* apr_time_t offset = 0; */
- /* apr_time_t offset = ((31 + 28) * 24 * 3600) - 1; */
apr_time_t secstodate, newsecs;
char datestr[50];
@@ -166,33 +152,51 @@ int main (void)
gm_timestr_822(datestr, secstodate);
secstodate *= APR_USEC_PER_SEC;
newsecs = apr_date_parse_http(datestr);
- if (secstodate == newsecs)
- printf("Yes %4d %19" APR_TIME_T_FMT " %s\n", year, secstodate, datestr);
- else if (newsecs == APR_DATE_BAD)
- printf("No %4d %19" APR_TIME_T_FMT " %19" APR_TIME_T_FMT " %s\n",
- year, secstodate, newsecs, datestr);
- else
- printf("No* %4d %19" APR_TIME_T_FMT " %19" APR_TIME_T_FMT " %s\n",
- year, secstodate, newsecs, datestr);
+ ABTS_TRUE(tc, secstodate == newsecs);
}
-
- srand48(978245L);
+
+#if APR_HAS_RANDOM
+ apr_generate_random_bytes((unsigned char *)&guess, sizeof(guess));
+#else
+ guess = apr_time_now() % APR_TIME_C(4294967291);
+#endif
for (i = 0; i < 10000; ++i) {
- guess = (time_t)mrand48();
- if (guess < 0) guess *= -1;
+ guess = (time_t)lgc((apr_uint32_t)guess);
+ if (guess < 0)
+ guess *= -1;
secstodate = guess + offset;
gm_timestr_822(datestr, secstodate);
secstodate *= APR_USEC_PER_SEC;
newsecs = apr_date_parse_http(datestr);
- if (secstodate == newsecs)
- printf("Yes %" APR_TIME_T_FMT " %s\n", secstodate, datestr);
- else if (newsecs == APR_DATE_BAD)
- printf("No %" APR_TIME_T_FMT " %" APR_TIME_T_FMT " %s\n",
- secstodate, newsecs, datestr);
- else
- printf("No* %" APR_TIME_T_FMT " %" APR_TIME_T_FMT " %s\n",
- secstodate, newsecs, datestr);
+ ABTS_TRUE(tc, secstodate == newsecs);
+ }
+}
+
+static void test_date_rfc(abts_case *tc, void *data)
+{
+ apr_time_t date;
+ int i = 0;
+
+ while (tests[i].input) {
+ char str_date[APR_RFC822_DATE_LEN] = { 0 };
+
+ date = apr_date_parse_rfc(tests[i].input);
+
+ apr_rfc822_date(str_date, date);
+
+ ABTS_STR_EQUAL(tc, str_date, tests[i].output);
+
+ i++;
}
- exit(0);
+}
+
+abts_suite *testdate(abts_suite *suite)
+{
+ suite = ADD_SUITE(suite);
+
+ abts_run_test(suite, test_date_parse_http, NULL);
+ abts_run_test(suite, test_date_rfc, NULL);
+
+ return suite;
}
diff --git a/srclib/apr-util/test/testdbd.c b/srclib/apr-util/test/testdbd.c
index 9f2dcbc8..fd9a7874 100644
--- a/srclib/apr-util/test/testdbd.c
+++ b/srclib/apr-util/test/testdbd.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testdbm.c b/srclib/apr-util/test/testdbm.c
index da787125..fc64c5dc 100644
--- a/srclib/apr-util/test/testdbm.c
+++ b/srclib/apr-util/test/testdbm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -13,413 +13,209 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-/* This file came from the SDBM package (written by oz@nexus.yorku.ca).
- * That package was under public domain. This file has been ported to
- * APR, updated to ANSI C and other, newer idioms, and added to the Apache
- * codebase under the above copyright and license.
- */
-
-/*
- * testdbm: Simple APR dbm tester.
- * Automatic test case: ./testdbm auto foo
- * - Attempts to store and fetch values from the DBM.
- *
- * Run the program for more help.
- */
#include "apr.h"
#include "apr_general.h"
#include "apr_pools.h"
#include "apr_errno.h"
-#include "apr_getopt.h"
-#include "apr_time.h"
-#define APR_WANT_STRFUNC
-#include "apr_want.h"
-
-#if APR_HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h> /* for atexit(), malloc() */
-#include <string.h>
-
#include "apr_dbm.h"
+#include "apr_uuid.h"
+#include "apr_strings.h"
+#include "abts.h"
+#include "testutil.h"
-static const char *progname;
-static int rflag;
-
-#define DERROR 0
-#define DLOOK 1
-
-#define DDELETE 3
-#define DCAT 4
-#define DBUILD 5
-#define DPRESS 6
-#define DCREAT 7
-#define DNAME 8
-#define DTRUNC 9
-#define DAUTO 10
-
-#define LINEMAX 8192
+#define NUM_TABLE_ROWS 1024
typedef struct {
- const char *sname;
- int scode;
- int flags;
-} cmd;
-
-static const cmd cmds[] = {
-
- { "fetch", DLOOK, APR_DBM_READONLY },
- { "get", DLOOK, APR_DBM_READONLY },
- { "look", DLOOK, APR_DBM_READONLY },
- { "add", DBUILD, APR_DBM_READWRITE },
- { "insert", DBUILD, APR_DBM_READWRITE },
- { "store", DBUILD, APR_DBM_READWRITE },
- { "delete", DDELETE, APR_DBM_READWRITE },
- { "remove", DDELETE, APR_DBM_READWRITE },
- { "dump", DCAT, APR_DBM_READONLY },
- { "list", DCAT, APR_DBM_READONLY },
- { "cat", DCAT, APR_DBM_READONLY },
- { "build", DBUILD, APR_DBM_RWCREATE }, /** this one creates the DB */
- { "creat", DCREAT, APR_DBM_RWCREATE },
- { "trunc", DTRUNC, APR_DBM_RWTRUNC },
- { "new", DCREAT, APR_DBM_RWCREATE },
- { "names", DNAME, APR_DBM_READONLY },
-#if 0
- {"squash", DPRESS, APR_DBM_READWRITE, },
- {"compact", DPRESS, APR_DBM_READWRITE, },
- {"compress", DPRESS, APR_DBM_READWRITE, },
-#endif
- { "auto", DAUTO, APR_DBM_RWCREATE },
-};
-
-#define CMD_SIZE (sizeof(cmds)/sizeof(cmd))
-
-static void doit(const cmd *act, const char*type, const char *file, apr_pool_t *pool);
-static const cmd *parse_command(const char *str);
-static void prdatum(FILE *stream, apr_datum_t d);
-static void oops(apr_dbm_t *dbm, apr_status_t rv, const char *s1,
- const char *s2);
-static void show_usage(void);
+ apr_datum_t key;
+ apr_datum_t val;
+ int deleted;
+ int visited;
+} dbm_table_t;
-int main(int argc, const char * const * argv)
+static dbm_table_t *generate_table(void)
{
- apr_pool_t *pool;
- const cmd *act;
- apr_getopt_t *os;
- char optch;
- const char *optarg;
- const char*dbtype;
-
- (void) apr_initialize();
- apr_pool_create(&pool, NULL);
- atexit(apr_terminate);
-
- (void) apr_getopt_init(&os, pool, argc, argv);
-
- progname = argv[0];
- dbtype = "default";
-
- while (apr_getopt(os, "Rt:", &optch, &optarg) == APR_SUCCESS) {
- switch (optch) {
- case 'R': /* raw processing */
- rflag++;
- break;
- case 't':
- dbtype = optarg;
- break;
- default:
- show_usage();
- fputs("unknown option.",stderr);
- exit(-1);
- break;
- }
+ unsigned int i;
+ apr_uuid_t uuid;
+ dbm_table_t *table = apr_pcalloc(p, sizeof(*table) * NUM_TABLE_ROWS);
+
+ for (i = 0; i < NUM_TABLE_ROWS/2; i++) {
+ apr_uuid_get(&uuid);
+ table[i].key.dptr = apr_pmemdup(p, uuid.data, sizeof(uuid.data));
+ table[i].key.dsize = sizeof(uuid.data);
+ table[i].val.dptr = apr_palloc(p, APR_UUID_FORMATTED_LENGTH);
+ table[i].val.dsize = APR_UUID_FORMATTED_LENGTH;
+ apr_uuid_format(table[i].val.dptr, &uuid);
}
- if (argc <= os->ind) {
- show_usage();
- fputs("Note: If you have no clue what this program is, start with:\n", stderr);
- fputs(" ./testdbm auto foo\n", stderr);
- fputs(" where foo is the DBM prefix.\n", stderr);
- exit(-2);
+ for (; i < NUM_TABLE_ROWS; i++) {
+ apr_uuid_get(&uuid);
+ table[i].val.dptr = apr_pmemdup(p, uuid.data, sizeof(uuid.data));
+ table[i].val.dsize = sizeof(uuid.data);
+ table[i].key.dptr = apr_palloc(p, APR_UUID_FORMATTED_LENGTH);
+ table[i].key.dsize = APR_UUID_FORMATTED_LENGTH;
+ apr_uuid_format(table[i].key.dptr, &uuid);
}
- if ((act = parse_command(argv[os->ind])) == NULL) {
- show_usage();
- fprintf(stderr, "unrecognized command: %s\n", argv[os->ind]);
- exit(-3);
- }
-
- if (++os->ind >= argc) {
- show_usage();
- fputs("please supply a DB file to use (may be created)\n", stderr);
- exit(-4);
- }
+ return table;
+}
- doit(act, dbtype, argv[os->ind], pool);
+static void test_dbm_store(abts_case *tc, apr_dbm_t *db, dbm_table_t *table)
+{
+ apr_status_t rv;
+ unsigned int i = NUM_TABLE_ROWS - 1;
- apr_pool_destroy(pool);
+ for (; i >= NUM_TABLE_ROWS/2; i--) {
+ rv = apr_dbm_store(db, table[i].key, table[i].val);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ table[i].deleted = FALSE;
+ }
- return 0;
+ for (i = 0; i < NUM_TABLE_ROWS/2; i++) {
+ rv = apr_dbm_store(db, table[i].key, table[i].val);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ table[i].deleted = FALSE;
+ }
}
-static void doit(const cmd *act, const char*type, const char *file,
- apr_pool_t *pool)
+static void test_dbm_fetch(abts_case *tc, apr_dbm_t *db, dbm_table_t *table)
{
apr_status_t rv;
- apr_datum_t key;
+ unsigned int i;
apr_datum_t val;
- apr_dbm_t *db;
- char *op;
- int n;
- char *line;
- const char *use1;
- const char *use2;
-#ifdef TIME
- long start;
- extern long time();
-#endif
-
- rv = apr_dbm_open_ex(&db, type, file, act->flags, APR_OS_DEFAULT, pool);
- if (rv != APR_SUCCESS)
- oops(db, rv, "cannot open: %s", file);
- line = (char *) apr_palloc(pool,LINEMAX);
-
- switch (act->scode) {
-
- case DLOOK:
- while (fgets(line, LINEMAX, stdin) != NULL) {
- n = strlen(line) - 1;
- line[n] = 0;
- if (n == 0)
- break;
-
- key.dptr = line;
- key.dsize = n;
- rv = apr_dbm_fetch(db, key, &val);
- if (rv == APR_SUCCESS) {
- prdatum(stdout, val);
- putchar('\n');
- continue;
- }
- prdatum(stderr, key);
- fprintf(stderr, ": not found.\n");
+ for (i = 0; i < NUM_TABLE_ROWS; i++) {
+ memset(&val, 0, sizeof(val));
+ rv = apr_dbm_fetch(db, table[i].key, &val);
+ if (!table[i].deleted) {
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ ABTS_INT_EQUAL(tc, (int)table[i].val.dsize, (int)val.dsize);
+ ABTS_INT_EQUAL(tc, 0, memcmp(table[i].val.dptr, val.dptr, val.dsize));
+ apr_dbm_freedatum(db, val);
+ } else {
+ ABTS_INT_EQUAL(tc, 0, (int)val.dsize);
}
- break;
-
- case DDELETE:
- while (fgets(line, LINEMAX, stdin) != NULL) {
- n = strlen(line) - 1;
- line[n] = 0;
- if (n == 0)
- break;
-
- key.dptr = line;
- key.dsize = n;
- if (apr_dbm_delete(db, key) != APR_SUCCESS) {
- prdatum(stderr, key);
- fprintf(stderr, ": not found.\n");
- }
- }
- break;
- case DCAT:
- rv = apr_dbm_firstkey(db, &key);
- if (rv != APR_SUCCESS)
- oops(db, rv, "could not fetch first key: %s", file);
-
- while (key.dptr != NULL) {
- prdatum(stdout, key);
- putchar('\t');
- rv = apr_dbm_fetch(db, key, &val);
- if (rv != APR_SUCCESS)
- oops(db, rv, "apr_dbm_fetch", "failure");
- prdatum(stdout, val);
- putchar('\n');
- rv = apr_dbm_nextkey(db, &key);
- if (rv != APR_SUCCESS)
- oops(db, rv, "NextKey", "failure");
- }
- break;
- case DBUILD:
-#ifdef TIME
- start = time(0);
-#endif
- while (fgets(line, LINEMAX, stdin) != NULL) {
- n = strlen(line) - 1;
- line[n] = 0;
- if (n == 0)
- break;
-
- key.dptr = line;
- if ((op = strchr(line, '\t')) != 0) {
- key.dsize = op - line;
- *op++ = 0;
- val.dptr = op;
- val.dsize = line + n - op;
- }
- else
- oops(NULL, APR_EGENERAL, "bad input: %s", line);
-
- rv = apr_dbm_store(db, key, val);
- if (rv != APR_SUCCESS) {
- prdatum(stderr, key);
- fprintf(stderr, ": ");
- oops(db, rv, "store: %s", "failed");
- }
- }
-#ifdef TIME
- printf("done: %d seconds.\n", time(0) - start);
-#endif
- break;
- case DPRESS:
- break;
- case DCREAT:
- break;
- case DTRUNC:
- break;
- case DNAME:
- apr_dbm_get_usednames(pool, file, &use1, &use2);
- fprintf(stderr, "%s %s\n", use1, use2);
- break;
- case DAUTO:
- {
- int i;
- char *valdata = "0123456789";
- fprintf(stderr, "Generating data: ");
- for (i = 0; i < 10; i++) {
- int j;
- char c, keydata[10];
- for (j = 0, c = 'A' + (i % 16); j < 10; j++, c++) {
- keydata[j] = c;
- }
- key.dptr = keydata;
- key.dsize = 10;
- val.dptr = valdata;
- val.dsize = 10;
- rv = apr_dbm_store(db, key, val);
- if (rv != APR_SUCCESS) {
- prdatum(stderr, key);
- fprintf(stderr, ": ");
- oops(db, rv, "store: %s", "failed");
- }
- }
- fputs("OK\n", stderr);
- fputs("Testing existence/retrieval: ", stderr);
- for (i = 0; i < 10; i++) {
- int j;
- char c, keydata[10];
- for (j = 0, c = 'A' + (i % 16); j < 10; j++, c++) {
- keydata[j] = c;
- }
- key.dptr = keydata;
- key.dsize = 10;
- if (!apr_dbm_exists(db, key)) {
- prdatum(stderr, key);
- oops(db, 0, "exists: %s", "failed");
- }
- rv = apr_dbm_fetch(db, key, &val);
- if (rv != APR_SUCCESS || val.dsize != 10 ||
- (strncmp(val.dptr, valdata, 10) != 0) ) {
- prdatum(stderr, key);
- fprintf(stderr, ": ");
- oops(db, rv, "fetch: %s", "failed");
- }
- }
- fputs("OK\n", stderr);
- }
- break;
}
-
- apr_dbm_close(db);
}
-static const cmd *parse_command(const char *str)
+static void test_dbm_delete(abts_case *tc, apr_dbm_t *db, dbm_table_t *table)
{
- int i;
-
- for (i = 0; i < CMD_SIZE; i++)
- if (strcasecmp(cmds[i].sname, str) == 0)
- return &cmds[i];
-
- return NULL;
+ apr_status_t rv;
+ unsigned int i;
+
+ for (i = 0; i < NUM_TABLE_ROWS; i++) {
+ /* XXX: random */
+ if (i & 1)
+ continue;
+ rv = apr_dbm_delete(db, table[i].key);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ table[i].deleted = TRUE;
+ }
}
-static void prdatum(FILE *stream, apr_datum_t d)
+static void test_dbm_exists(abts_case *tc, apr_dbm_t *db, dbm_table_t *table)
{
- int c;
- const char *p = d.dptr;
- int n = d.dsize;
-
- while (n--) {
- c = *p++ & 0377;
- if (c & 0200) {
- fprintf(stream, "M-");
- c &= 0177;
+ unsigned int i;
+ int cond;
+
+ for (i = 0; i < NUM_TABLE_ROWS; i++) {
+ cond = apr_dbm_exists(db, table[i].key);
+ if (table[i].deleted) {
+ ABTS_TRUE(tc, cond == 0);
+ } else {
+ ABTS_TRUE(tc, cond != 0);
}
- if (c == 0177 || c < ' ')
- fprintf(stream, "^%c", (c == 0177) ? '?' : c + '@');
- else
- putc(c, stream);
}
}
-static void oops(apr_dbm_t * dbm, apr_status_t rv, const char *s1,
- const char *s2)
+static void test_dbm_traversal(abts_case *tc, apr_dbm_t *db, dbm_table_t *table)
{
- char errbuf[200];
+ apr_status_t rv;
+ unsigned int i;
+ apr_datum_t key;
- if (progname) {
- fprintf(stderr, "%s: ", progname);
- }
- fprintf(stderr, s1, s2);
- fprintf(stderr, "\n");
+ rv = apr_dbm_firstkey(db, &key);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- if (rv != APR_SUCCESS) {
- apr_strerror(rv, errbuf, sizeof(errbuf));
- fprintf(stderr, "APR Error %d - %s\n", rv, errbuf);
+ do {
+ if (key.dptr == NULL || key.dsize == 0)
+ break;
- if (dbm) {
- apr_dbm_geterror(dbm, &rv, errbuf, sizeof(errbuf));
- fprintf(stderr, "APR_DB Error %d - %s\n", rv, errbuf);
+ for (i = 0; i < NUM_TABLE_ROWS; i++) {
+ if (table[i].key.dsize != key.dsize)
+ continue;
+ if (memcmp(table[i].key.dptr, key.dptr, key.dsize))
+ continue;
+ ABTS_INT_EQUAL(tc, table[i].deleted, 0);
+ ABTS_INT_EQUAL(tc, table[i].visited, 0);
+ table[i].visited++;
}
+
+ rv = apr_dbm_nextkey(db, &key);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ } while (1);
+
+ for (i = 0; i < NUM_TABLE_ROWS; i++) {
+ if (table[i].deleted)
+ continue;
+ ABTS_INT_EQUAL(tc, table[i].visited, 1);
+ table[i].visited = 0;
}
- exit(1);
}
-static void show_usage(void)
+static void test_dbm(abts_case *tc, void *data)
{
- int i;
+ apr_dbm_t *db;
+ apr_status_t rv;
+ dbm_table_t *table;
+ const char *type = data;
+ const char *file = apr_pstrcat(p, "data/test-", type, NULL);
- if (!progname) {
- progname = "testdbm";
- }
+ rv = apr_dbm_open_ex(&db, type, file, APR_DBM_RWCREATE, APR_OS_DEFAULT, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ if (rv != APR_SUCCESS)
+ return;
+
+ table = generate_table();
+
+ test_dbm_store(tc, db, table);
+ test_dbm_fetch(tc, db, table);
+ test_dbm_delete(tc, db, table);
+ test_dbm_exists(tc, db, table);
+ test_dbm_traversal(tc, db, table);
+
+ apr_dbm_close(db);
- fprintf(stderr, "%s [-t DBM-type] [-R] [commands] dbm-file-path\n",
- progname);
+ rv = apr_dbm_open_ex(&db, type, file, APR_DBM_READONLY, APR_OS_DEFAULT, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ if (rv != APR_SUCCESS)
+ return;
+
+ test_dbm_exists(tc, db, table);
+ test_dbm_traversal(tc, db, table);
+ test_dbm_fetch(tc, db, table);
+
+ apr_dbm_close(db);
+}
+
+abts_suite *testdbm(abts_suite *suite)
+{
+ suite = ADD_SUITE(suite);
- fputs("Available DBM-types:", stderr);
#if APU_HAVE_GDBM
- fputs(" GDBM", stderr);
+ abts_run_test(suite, test_dbm, "gdbm");
#endif
#if APU_HAVE_NDBM
- fputs(" NDBM", stderr);
+ abts_run_test(suite, test_dbm, "ndbm");
#endif
#if APU_HAVE_SDBM
- fputs(" SDBM", stderr);
+ abts_run_test(suite, test_dbm, "sdbm");
#endif
#if APU_HAVE_DB
- fputs(" DB", stderr);
+ abts_run_test(suite, test_dbm, "db");
#endif
- fputs(" default\n", stderr);
- fputs("Available commands:\n", stderr);
- for (i = 0; i < CMD_SIZE; i++) {
- fprintf(stderr, "%-8s%c", cmds[i].sname,
- ((i + 1) % 6 == 0) ? '\n' : ' ');
- }
- fputs("\n", stderr);
+ return suite;
}
diff --git a/srclib/apr-util/test/testldap.c b/srclib/apr-util/test/testldap.c
index b0a63692..7595a55f 100644
--- a/srclib/apr-util/test/testldap.c
+++ b/srclib/apr-util/test/testldap.c
@@ -1,9 +1,9 @@
-/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testmd4.c b/srclib/apr-util/test/testmd4.c
index 494529d3..345650e5 100644
--- a/srclib/apr-util/test/testmd4.c
+++ b/srclib/apr-util/test/testmd4.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -95,7 +95,7 @@ static void test_md4sum(abts_case *tc, void *data)
unsigned char digest[APR_MD4_DIGESTSIZE];
const void *string = md4sums[count].string;
const void *sum = md4sums[count].md4sum;
- unsigned int len = strlen(string);
+ apr_size_t len = strlen(string);
ABTS_ASSERT(tc, "apr_md4_init", (apr_md4_init(&context) == 0));
ABTS_ASSERT(tc, "apr_md4_update",
diff --git a/srclib/apr-util/test/testmd5.c b/srclib/apr-util/test/testmd5.c
index 4f06f0d7..5f8241a8 100644
--- a/srclib/apr-util/test/testmd5.c
+++ b/srclib/apr-util/test/testmd5.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -55,7 +55,7 @@ static void test_md5sum(abts_case *tc, void *data)
unsigned char digest[APR_MD5_DIGESTSIZE];
const void *string = md5sums[count].string;
const void *sum = md5sums[count].digest;
- unsigned int len = strlen(string);
+ apr_size_t len = strlen(string);
ABTS_ASSERT(tc, "apr_md5_init", (apr_md5_init(&context) == 0));
ABTS_ASSERT(tc, "apr_md5_update",
diff --git a/srclib/apr-util/test/testpass.c b/srclib/apr-util/test/testpass.c
index 67bbdbea..66ab77d4 100644
--- a/srclib/apr-util/test/testpass.c
+++ b/srclib/apr-util/test/testpass.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -108,7 +108,7 @@ static void test_shapass(abts_case *tc, void *data)
const char *pass = "hellojed";
char hash[100];
- apr_sha1_base64(pass, strlen(pass), hash);
+ apr_sha1_base64(pass, (int)strlen(pass), hash);
apr_assert_success(tc, "SHA1 password validated",
apr_password_validate(pass, hash));
diff --git a/srclib/apr-util/test/testqueue.c b/srclib/apr-util/test/testqueue.c
index 9a971f4b..b442f902 100644
--- a/srclib/apr-util/test/testqueue.c
+++ b/srclib/apr-util/test/testqueue.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -14,269 +14,128 @@
* limitations under the License.
*/
-#include <apr_thread_proc.h>
-#include <apr_errno.h>
-#include <apr_general.h>
-#include <apr_getopt.h>
-#include <apr_strings.h>
-#include "errno.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <apr_time.h>
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <apr_portable.h>
+#include "apu.h"
#include "apr_queue.h"
+#include "apr_thread_proc.h"
+#include "apr_time.h"
+#include "abts.h"
+#include "testutil.h"
-#if !APR_HAS_THREADS
-int main(void)
-{
- fprintf(stderr,
- "This program won't work on this platform because there is no "
- "support for threads.\n");
- return 0;
-}
-#else /* !APR_HAS_THREADS */
+#if APR_HAS_THREADS
+
+#define NUMBER_CONSUMERS 3
+#define CONSUMER_ACTIVITY 4
+#define NUMBER_PRODUCERS 4
+#define PRODUCER_ACTIVITY 5
+#define QUEUE_SIZE 100
-apr_pool_t *context;
-int consumer_activity=400;
-int producer_activity=300;
-int verbose=0;
-static void * APR_THREAD_FUNC consumer(apr_thread_t *thd, void *data);
-static void * APR_THREAD_FUNC producer(apr_thread_t *thd, void *data);
-static void usage(void);
+static apr_queue_t *queue;
static void * APR_THREAD_FUNC consumer(apr_thread_t *thd, void *data)
{
long sleeprate;
- apr_queue_t *q = (apr_queue_t*)data;
+ abts_case *tc = data;
apr_status_t rv;
- int val;
void *v;
- char current_thread_str[30];
- apr_os_thread_t current_thread = apr_os_thread_current();
- apr_snprintf(current_thread_str, sizeof current_thread_str,
- "%pT", &current_thread);
-
- sleeprate = 1000000/consumer_activity;
+ sleeprate = 1000000/CONSUMER_ACTIVITY;
apr_sleep( (rand() % 4 ) * 1000000 ); /* sleep random seconds */
- while (1) {
- do {
- rv = apr_queue_pop(q, &v);
- if (rv == APR_EINTR) {
- fprintf(stderr, "%s\tconsumer intr\n", current_thread_str);
- }
- } while (rv == APR_EINTR) ;
- if (rv != APR_SUCCESS) {
- if (rv == APR_EOF) {
- fprintf(stderr, "%s\tconsumer:queue terminated APR_EOF\n", current_thread_str);
- rv=APR_SUCCESS;
- }
- else
- fprintf(stderr, "%s\tconsumer thread exit rv %d\n", current_thread_str, rv);
- apr_thread_exit(thd, rv);
- return NULL;
- }
- val = *(int*)v;
- if (verbose)
- fprintf(stderr, "%s\tpop %d\n", current_thread_str, val);
+ while (1)
+ {
+ rv = apr_queue_pop(queue, &v);
+
+ if (rv == APR_EINTR)
+ continue;
+
+ if (rv == APR_EOF)
+ break;
+
+ ABTS_TRUE(tc, v == NULL);
+ ABTS_TRUE(tc, rv == APR_SUCCESS);
+
apr_sleep( sleeprate ); /* sleep this long to acheive our rate */
}
+
+ apr_thread_exit(thd, rv);
+
/* not reached */
return NULL;
}
static void * APR_THREAD_FUNC producer(apr_thread_t *thd, void *data)
{
- int i=0;
long sleeprate;
- apr_queue_t *q = (apr_queue_t*)data;
+ abts_case *tc = data;
apr_status_t rv;
- int *val;
- char current_thread_str[30];
- apr_os_thread_t current_thread = apr_os_thread_current();
-
- apr_snprintf(current_thread_str, sizeof current_thread_str,
- "%pT", &current_thread);
- sleeprate = 1000000/producer_activity;
+ sleeprate = 1000000/PRODUCER_ACTIVITY;
apr_sleep( (rand() % 4 ) * 1000000 ); /* sleep random seconds */
+
+ while (1)
+ {
+ rv = apr_queue_push(queue, NULL);
+
+ if (rv == APR_EINTR)
+ continue;
- while(1) {
- val = apr_palloc(context, sizeof(int));
- *val=i;
- if (verbose)
- fprintf(stderr, "%s\tpush %d\n", current_thread_str, *val);
- do {
- rv = apr_queue_push(q, val);
- if (rv == APR_EINTR)
- fprintf(stderr, "%s\tproducer intr\n", current_thread_str);
- } while (rv == APR_EINTR);
+ if (rv == APR_EOF)
+ break;
+
+ ABTS_TRUE(tc, rv == APR_SUCCESS);
- if (rv != APR_SUCCESS) {
- if (rv == APR_EOF) {
- fprintf(stderr, "%s\tproducer: queue terminated APR_EOF\n", current_thread_str);
- rv = APR_SUCCESS;
- }
- else
- fprintf(stderr, "%s\tproducer thread exit rv %d\n", current_thread_str, rv);
- apr_thread_exit(thd, rv);
- return NULL;
- }
- i++;
apr_sleep( sleeprate ); /* sleep this long to acheive our rate */
}
- /* not reached */
+
+ apr_thread_exit(thd, rv);
+
+ /* not reached */
return NULL;
}
-static void usage(void)
-{
- fprintf(stderr,"usage: testqueue -p n -P n -c n -C n -q n -s n\n");
- fprintf(stderr,"-c # of consumer\n");
- fprintf(stderr,"-C amount they consumer before dying\n");
- fprintf(stderr,"-p # of producers\n");
- fprintf(stderr,"-P amount they produce before dying\n");
- fprintf(stderr,"-q queue size\n");
- fprintf(stderr,"-s amount of time to sleep before killing it\n");
- fprintf(stderr,"-v verbose\n");
-}
-
-int main(int argc, const char* const argv[])
+static void test_queue_producer_consumer(abts_case *tc, void *data)
{
- apr_thread_t **t;
- apr_queue_t *queue;
- int i;
+ unsigned int i;
apr_status_t rv;
- apr_getopt_t *opt;
- const char *optarg;
- char c;
- int numconsumers=3;
- int numproducers=4;
- int queuesize=100;
- int sleeptime=30;
- char errorbuf[200];
+ apr_thread_t **t;
- apr_initialize();
+ /* XXX: non-portable */
srand((unsigned int)apr_time_now());
- printf("APR Queue Test\n======================\n\n");
- printf("%-60s", "Initializing the context");
- if (apr_pool_create(&context, NULL) != APR_SUCCESS) {
- fflush(stdout);
- fprintf(stderr, "Failed.\nCould not initialize\n");
- exit(-1);
+ rv = apr_queue_create(&queue, QUEUE_SIZE, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ t = apr_palloc(p, sizeof(apr_thread_t*) * (NUMBER_CONSUMERS
+ + NUMBER_PRODUCERS));
+ for (i = 0; i < NUMBER_CONSUMERS; ++i) {
+ rv = apr_thread_create(&t[i], NULL, consumer, tc, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
- printf("OK\n");
-
- apr_getopt_init(&opt, context, argc, argv);
- while ((rv = apr_getopt(opt, "p:c:P:C:q:s:v", &c, &optarg))
- == APR_SUCCESS) {
- switch (c) {
- case 'c':
- numconsumers = atoi( optarg);
- break;
- case 'p':
- numproducers = atoi( optarg);
- break;
- case 'C':
- consumer_activity = atoi( optarg);
- break;
- case 'P':
- producer_activity = atoi( optarg);
- break;
- case 's':
- sleeptime= atoi(optarg);
- break;
- case 'q':
- queuesize = atoi(optarg);
- break;
- case 'v':
- verbose= 1;
- break;
- default:
- usage();
- exit(-1);
- }
- }
- /* bad cmdline option? then we die */
- if (rv != APR_EOF || opt->ind < opt->argc) {
- usage();
- exit(-1);
+ for (i = NUMBER_CONSUMERS; i < NUMBER_CONSUMERS + NUMBER_PRODUCERS; ++i) {
+ rv = apr_thread_create(&t[i], NULL, producer, tc, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
+ apr_sleep(5000000); /* sleep 5 seconds */
-
- printf("test stats %d consumers (rate %d/sec) %d producers (rate %d/sec) queue size %d sleep %d\n",
- numconsumers,consumer_activity, numproducers, producer_activity, queuesize,sleeptime);
- printf("%-60s", "Initializing the queue");
- rv = apr_queue_create(&queue, queuesize, context);
-
- if (rv != APR_SUCCESS) {
- fflush(stdout);
- fprintf(stderr, "Failed\nCould not create queue %d\n",rv);
- apr_strerror(rv, errorbuf,200);
- fprintf(stderr,"%s\n",errorbuf);
- exit(-1);
- }
- printf("OK\n");
-
- t = apr_palloc( context, sizeof(apr_thread_t*) * (numconsumers+numproducers));
- printf("%-60s", "Starting consumers");
- for (i=0;i<numconsumers;i++) {
- rv = apr_thread_create(&t[i], NULL, consumer, queue, context);
- if (rv != APR_SUCCESS) {
- apr_strerror(rv, errorbuf,200);
- fprintf(stderr, "Failed\nError starting consumer thread (%d) rv=%d:%s\n",i, rv,errorbuf);
- exit(-1);
-
- }
- }
- for (i=numconsumers;i<(numconsumers+numproducers);i++) {
- rv = apr_thread_create(&t[i], NULL, producer, queue, context);
- if (rv != APR_SUCCESS) {
- apr_strerror(rv, errorbuf,200);
- fprintf(stderr, "Failed\nError starting producer thread (%d) rv=%d:%s\n",i, rv,errorbuf);
- exit(-1);
-
- }
- }
-
- printf("OK\n");
- printf("%-60s", "Sleeping\n");
- apr_sleep( sleeptime * 1000000 ); /* sleep 10 seconds */
- printf("OK\n");
-
- printf("%-60s", "Terminating queue");
rv = apr_queue_term(queue);
- if (rv != APR_SUCCESS) {
- apr_strerror(rv, errorbuf,200);
- fprintf( stderr, "apr_queue_term failed %d:%s\n",rv,errorbuf);
- }
- printf("OK\n");
-
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- printf("%-60s", "Waiting for threads to exit\n");
- fflush(stdout);
- for (i=0;i<numconsumers+numproducers;i++) {
+ for (i = 0; i < NUMBER_CONSUMERS + NUMBER_PRODUCERS; ++i) {
apr_thread_join(&rv, t[i]);
- if (rv != 0 ) {
- apr_strerror(rv, errorbuf,200);
- if (i<numconsumers)
- fprintf( stderr, "consumer thread %d failed rv %d:%s\n",i,rv,errorbuf);
- else
- fprintf( stderr, "producer thread %d failed rv %d:%s\n",i,rv,errorbuf);
- }
+ ABTS_INT_EQUAL(tc, rv, APR_EOF);
}
+}
- printf("OK\n");
+#endif /* APR_HAS_THREADS */
- apr_terminate();
+abts_suite *testqueue(abts_suite *suite)
+{
+ suite = ADD_SUITE(suite);
- return 0;
-}
+#if APR_HAS_THREADS
+ abts_run_test(suite, test_queue_producer_consumer, NULL);
+#endif /* APR_HAS_THREADS */
-#endif /* !APR_HAS_THREADS */
+ return suite;
+}
diff --git a/srclib/apr-util/test/testreslist.c b/srclib/apr-util/test/testreslist.c
index 5ecfcea4..a91de158 100644
--- a/srclib/apr-util/test/testreslist.c
+++ b/srclib/apr-util/test/testreslist.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -16,32 +16,28 @@
#include <stdio.h>
#include <stdlib.h>
+#include "apr_general.h"
+#include "apu.h"
#include "apr_reslist.h"
#include "apr_thread_proc.h"
-
#if APR_HAVE_TIME_H
#include <time.h>
#endif /* APR_HAVE_TIME_H */
-#if !APR_HAS_THREADS
-
-int main(void)
-{
- fprintf(stderr, "this program requires APR thread support\n");
- return 0;
-}
+#include "abts.h"
+#include "testutil.h"
-#else
+#if APR_HAS_THREADS
#define RESLIST_MIN 3
#define RESLIST_SMAX 10
#define RESLIST_HMAX 20
-#define RESLIST_TTL APR_TIME_C(350000) /* 35 ms */
+#define RESLIST_TTL APR_TIME_C(35000) /* 35 ms */
#define CONSUMER_THREADS 25
#define CONSUMER_ITERATIONS 250
-#define CONSTRUCT_SLEEP_TIME APR_TIME_C(250000) /* 25 ms */
-#define DESTRUCT_SLEEP_TIME APR_TIME_C(100000) /* 10 ms */
-#define WORK_DELAY_SLEEP_TIME APR_TIME_C(150000) /* 15 ms */
+#define CONSTRUCT_SLEEP_TIME APR_TIME_C(25000) /* 25 ms */
+#define DESTRUCT_SLEEP_TIME APR_TIME_C(10000) /* 10 ms */
+#define WORK_DELAY_SLEEP_TIME APR_TIME_C(15000) /* 15 ms */
typedef struct {
apr_interval_time_t sleep_upon_construct;
@@ -54,6 +50,15 @@ typedef struct {
int id;
} my_resource_t;
+/* Linear congruential generator */
+static apr_uint32_t lgc(apr_uint32_t a)
+{
+ apr_uint64_t z = a;
+ z *= 279470273;
+ z %= APR_UINT64_C(4294967291);
+ return (apr_uint32_t)z;
+}
+
static apr_status_t my_constructor(void **resource, void *params,
apr_pool_t *pool)
{
@@ -64,9 +69,6 @@ static apr_status_t my_constructor(void **resource, void *params,
res = apr_palloc(pool, sizeof(*res));
res->id = my_params->c_count++;
- printf("++ constructing new resource [id:%d, #%d/%d]\n", res->id,
- my_params->c_count, my_params->d_count);
-
/* Sleep for awhile, to simulate construction overhead. */
apr_sleep(my_params->sleep_upon_construct);
@@ -80,9 +82,7 @@ static apr_status_t my_destructor(void *resource, void *params,
{
my_resource_t *res = resource;
my_parameters_t *my_params = params;
-
- printf("-- destructing old resource [id:%d, #%d/%d]\n", res->id,
- my_params->c_count, ++my_params->d_count);
+ res->id = my_params->d_count++;
apr_sleep(my_params->sleep_upon_destruct);
@@ -91,54 +91,51 @@ static apr_status_t my_destructor(void *resource, void *params,
typedef struct {
int tid;
+ abts_case *tc;
apr_reslist_t *reslist;
apr_interval_time_t work_delay_sleep;
} my_thread_info_t;
+#define PERCENT95th ( ( 2u^30 / 5u ) * 19u )
+
static void * APR_THREAD_FUNC resource_consuming_thread(apr_thread_t *thd,
void *data)
{
+ int i;
+ apr_uint32_t chance;
+ void *vp;
apr_status_t rv;
+ my_resource_t *res;
my_thread_info_t *thread_info = data;
apr_reslist_t *rl = thread_info->reslist;
- int i;
+
+#if APR_HAS_RANDOM
+ apr_generate_random_bytes((void*)&chance, sizeof(chance));
+#else
+ chance = (apr_uint32_t)(apr_time_now() % APR_TIME_C(4294967291));
+#endif
for (i = 0; i < CONSUMER_ITERATIONS; i++) {
- my_resource_t *res;
- void *vp;
rv = apr_reslist_acquire(rl, &vp);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Failed to retrieve resource from reslist\n");
- apr_thread_exit(thd, rv);
- return NULL;
- }
+ ABTS_INT_EQUAL(thread_info->tc, rv, APR_SUCCESS);
res = vp;
- printf(" [tid:%d,iter:%d] using resource id:%d\n", thread_info->tid,
- i, res->id);
apr_sleep(thread_info->work_delay_sleep);
-/* simulate a 5% chance of the resource being bad */
- if ( drand48() < 0.95 ) {
- rv = apr_reslist_release(rl, res);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Failed to return resource to reslist\n");
- apr_thread_exit(thd, rv);
- return NULL;
- }
+
+ /* simulate a 5% chance of the resource being bad */
+ chance = lgc(chance);
+ if ( chance < PERCENT95th ) {
+ rv = apr_reslist_release(rl, res);
+ ABTS_INT_EQUAL(thread_info->tc, rv, APR_SUCCESS);
} else {
- printf("invalidating resource id:%d\n", res->id) ;
- rv = apr_reslist_invalidate(rl, res);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Failed to invalidate resource\n");
- apr_thread_exit(thd, rv);
- return NULL;
- }
+ rv = apr_reslist_invalidate(rl, res);
+ ABTS_INT_EQUAL(thread_info->tc, rv, APR_SUCCESS);
}
}
return APR_SUCCESS;
}
-static void test_timeout(apr_reslist_t *rl)
+static void test_timeout(abts_case *tc, apr_reslist_t *rl)
{
apr_status_t rv;
my_resource_t *resources[RESLIST_HMAX];
@@ -146,9 +143,7 @@ static void test_timeout(apr_reslist_t *rl)
void *vp;
int i;
- printf("Setting timeout to 1000us: ");
apr_reslist_timeout_set(rl, 1000);
- fprintf(stdout, "OK\n");
/* deplete all possible resources from the resource list
* so that the next call will block until timeout is reached
@@ -158,19 +153,13 @@ static void test_timeout(apr_reslist_t *rl)
for (i = 0; i < RESLIST_HMAX; i++) {
rv = apr_reslist_acquire(rl, (void**)&resources[i]);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "couldn't acquire resource: %d\n", rv);
- exit(1);
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
/* next call will block until timeout is reached */
rv = apr_reslist_acquire(rl, &vp);
- if (!APR_STATUS_IS_TIMEUP(rv)) {
- fprintf(stderr, "apr_reslist_acquire()->%d instead of TIMEUP\n",
- rv);
- exit(1);
- }
+ ABTS_TRUE(tc, APR_STATUS_IS_TIMEUP(rv));
+
res = vp;
/* release the resources; otherwise the destroy operation
@@ -178,51 +167,38 @@ static void test_timeout(apr_reslist_t *rl)
*/
for (i = 0; i < RESLIST_HMAX; i++) {
rv = apr_reslist_release(rl, resources[i]);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "couldn't release resource: %d\n", rv);
- exit(1);
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
}
-static void test_shrinking(apr_reslist_t *rl)
+static void test_shrinking(abts_case *tc, apr_reslist_t *rl)
{
apr_status_t rv;
my_resource_t *resources[RESLIST_HMAX];
my_resource_t *res;
+ void *vp;
int i;
int sleep_time = RESLIST_TTL / RESLIST_HMAX;
/* deplete all possible resources from the resource list */
for (i = 0; i < RESLIST_HMAX; i++) {
rv = apr_reslist_acquire(rl, (void**)&resources[i]);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "couldn't acquire resource: %d\n", rv);
- exit(1);
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
/* Free all resources above RESLIST_SMAX - 1 */
for (i = RESLIST_SMAX - 1; i < RESLIST_HMAX; i++) {
rv = apr_reslist_release(rl, resources[i]);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "couldn't release resource: %d\n", rv);
- exit(1);
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
for (i = 0; i < RESLIST_HMAX; i++) {
- rv = apr_reslist_acquire(rl, (void**)&res);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "couldn't acquire resource: %d\n", rv);
- exit(1);
- }
+ rv = apr_reslist_acquire(rl, &vp);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ res = vp;
apr_sleep(sleep_time);
rv = apr_reslist_release(rl, res);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "couldn't release resource: %d\n", rv);
- exit(1);
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
apr_sleep(sleep_time);
@@ -232,132 +208,74 @@ static void test_shrinking(apr_reslist_t *rl)
*/
for (i = 0; i < RESLIST_SMAX - 1; i++) {
rv = apr_reslist_release(rl, resources[i]);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "couldn't release resource: %d\n", rv);
- exit(1);
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
}
-static apr_status_t test_reslist(apr_pool_t *parpool)
+static void test_reslist(abts_case *tc, void *data)
{
+ int i;
+ apr_pool_t *p;
apr_status_t rv;
- apr_pool_t *pool;
apr_reslist_t *rl;
my_parameters_t *params;
- int i;
apr_thread_t *my_threads[CONSUMER_THREADS];
my_thread_info_t my_thread_info[CONSUMER_THREADS];
- srand48(time(0)) ;
- printf("Creating child pool.......................");
- rv = apr_pool_create(&pool, parpool);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Error creating child pool\n");
- return rv;
- }
- printf("OK\n");
+ rv = apr_pool_create(&p, NULL);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
/* Create some parameters that will be passed into each
* constructor and destructor call. */
- params = apr_pcalloc(pool, sizeof(*params));
+ params = apr_pcalloc(p, sizeof(*params));
params->sleep_upon_construct = CONSTRUCT_SLEEP_TIME;
params->sleep_upon_destruct = DESTRUCT_SLEEP_TIME;
/* We're going to want 10 blocks of data from our target rmm. */
- printf("Creating resource list:\n"
- " min/smax/hmax: %d/%d/%d\n"
- " ttl: %" APR_TIME_T_FMT "\n", RESLIST_MIN, RESLIST_SMAX,
- RESLIST_HMAX, RESLIST_TTL);
rv = apr_reslist_create(&rl, RESLIST_MIN, RESLIST_SMAX, RESLIST_HMAX,
RESLIST_TTL, my_constructor, my_destructor,
- params, pool);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Error allocating shared memory block\n");
- return rv;
- }
- fprintf(stdout, "OK\n");
+ params, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- printf("Creating %d threads", CONSUMER_THREADS);
for (i = 0; i < CONSUMER_THREADS; i++) {
putchar('.');
my_thread_info[i].tid = i;
+ my_thread_info[i].tc = tc;
my_thread_info[i].reslist = rl;
my_thread_info[i].work_delay_sleep = WORK_DELAY_SLEEP_TIME;
rv = apr_thread_create(&my_threads[i], NULL,
resource_consuming_thread, &my_thread_info[i],
- pool);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Failed to create thread %d\n", i);
- return rv;
- }
+ p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
- printf("\nDone!\n");
- printf("Waiting for threads to finish");
for (i = 0; i < CONSUMER_THREADS; i++) {
apr_status_t thread_rv;
- putchar('.');
apr_thread_join(&thread_rv, my_threads[i]);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Failed to join thread %d\n", i);
- return rv;
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
- printf("\nDone!\n");
- test_timeout(rl);
+ test_timeout(tc, rl);
- test_shrinking(rl);
- if (params->c_count - params->d_count != RESLIST_SMAX) {
- printf("FAILED: Resourcelist has not shrinked back to RESLIST_SMAX\n");
- return APR_EGENERAL;
- }
- else {
- printf("OK: Resource list shrinked back to RESLIST_SMAX\n");
- }
+ test_shrinking(tc, rl);
+ ABTS_INT_EQUAL(tc, RESLIST_SMAX, params->c_count - params->d_count);
- printf("Destroying resource list.................");
rv = apr_reslist_destroy(rl);
- if (rv != APR_SUCCESS) {
- printf("FAILED\n");
- return rv;
- }
- printf("OK\n");
-
- apr_pool_destroy(pool);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- return APR_SUCCESS;
+ apr_pool_destroy(p);
}
-int main(void)
+#endif /* APR_HAS_THREADS */
+
+abts_suite *testreslist(abts_suite *suite)
{
- apr_status_t rv;
- apr_pool_t *pool;
- char errmsg[200];
-
- apr_initialize();
-
- printf("APR Resource List Test\n");
- printf("======================\n\n");
-
- printf("Initializing the pool............................");
- if (apr_pool_create(&pool, NULL) != APR_SUCCESS) {
- printf("could not initialize pool\n");
- exit(-1);
- }
- printf("OK\n");
+ suite = ADD_SUITE(suite);
- rv = test_reslist(pool);
- if (rv != APR_SUCCESS) {
- printf("Resource list test FAILED: [%d] %s\n",
- rv, apr_strerror(rv, errmsg, sizeof(errmsg)));
- exit(-2);
- }
- printf("Resource list test passed!\n");
+#if APR_HAS_THREADS
+ abts_run_test(suite, test_reslist, NULL);
+#endif
- return 0;
+ return suite;
}
-
-#endif /* APR_HAS_THREADS */
diff --git a/srclib/apr-util/test/testrmm.c b/srclib/apr-util/test/testrmm.c
index 3c3ac604..c899308b 100644
--- a/srclib/apr-util/test/testrmm.c
+++ b/srclib/apr-util/test/testrmm.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -21,12 +21,8 @@
#include "apr_lib.h"
#include "apr_strings.h"
#include "apr_time.h"
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#if APR_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
+#include "abts.h"
+#include "testutil.h"
#if APR_HAS_SHARED_MEMORY
@@ -34,163 +30,119 @@
#define FRAG_COUNT 10
#define SHARED_SIZE (apr_size_t)(FRAG_SIZE * FRAG_COUNT * sizeof(char*))
-static apr_status_t test_rmm(apr_pool_t *parpool)
+static void test_rmm(abts_case *tc, void *data)
{
apr_status_t rv;
apr_pool_t *pool;
apr_shm_t *shm;
apr_rmm_t *rmm;
apr_size_t size, fragsize;
- apr_rmm_off_t *off;
+ apr_rmm_off_t *off, off2;
int i;
void *entity;
- rv = apr_pool_create(&pool, parpool);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Error creating child pool\n");
- return rv;
- }
+ rv = apr_pool_create(&pool, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
/* We're going to want 10 blocks of data from our target rmm. */
size = SHARED_SIZE + apr_rmm_overhead_get(FRAG_COUNT + 1);
- printf("Creating anonymous shared memory (%"
- APR_SIZE_T_FMT " bytes).....", size);
rv = apr_shm_create(&shm, size, NULL, pool);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Error allocating shared memory block\n");
- return rv;
- }
- fprintf(stdout, "OK\n");
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- printf("Creating rmm segment.............................");
- rv = apr_rmm_init(&rmm, NULL, apr_shm_baseaddr_get(shm), size,
- pool);
+ if (rv != APR_SUCCESS)
+ return;
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "Error allocating rmm..............\n");
- return rv;
- }
- fprintf(stdout, "OK\n");
+ rv = apr_rmm_init(&rmm, NULL, apr_shm_baseaddr_get(shm), size, pool);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ if (rv != APR_SUCCESS)
+ return;
+ /* Creating each fragment of size fragsize */
fragsize = SHARED_SIZE / FRAG_COUNT;
- printf("Creating each fragment of size %" APR_SIZE_T_FMT "................",
- fragsize);
off = apr_palloc(pool, FRAG_COUNT * sizeof(apr_rmm_off_t));
for (i = 0; i < FRAG_COUNT; i++) {
off[i] = apr_rmm_malloc(rmm, fragsize);
- }
- fprintf(stdout, "OK\n");
-
- printf("Checking for out of memory allocation............");
- if (apr_rmm_malloc(rmm, FRAG_SIZE * FRAG_COUNT) == 0) {
- fprintf(stdout, "OK\n");
- }
- else {
- return APR_EGENERAL;
}
- printf("Checking each fragment for address alignment.....");
+ /* Checking for out of memory allocation */
+ off2 = apr_rmm_malloc(rmm, FRAG_SIZE * FRAG_COUNT);
+ ABTS_TRUE(tc, !off2);
+
+ /* Checking each fragment for address alignment */
for (i = 0; i < FRAG_COUNT; i++) {
char *c = apr_rmm_addr_get(rmm, off[i]);
apr_size_t sc = (apr_size_t)c;
- if (off[i] == 0) {
- printf("allocation failed for offset %d\n", i);
- return APR_ENOMEM;
- }
-
- if (sc & 7) {
- printf("Bad alignment for fragment %d; %p not %p!\n",
- i, c, (void *)APR_ALIGN_DEFAULT((apr_size_t)c));
- return APR_EGENERAL;
- }
+ ABTS_TRUE(tc, !!off[i]);
+ ABTS_TRUE(tc, !(sc & 7));
}
- fprintf(stdout, "OK\n");
-
- printf("Setting each fragment to a unique value..........");
+
+ /* Setting each fragment to a unique value */
for (i = 0; i < FRAG_COUNT; i++) {
int j;
char **c = apr_rmm_addr_get(rmm, off[i]);
for (j = 0; j < FRAG_SIZE; j++, c++) {
*c = apr_itoa(pool, i + j);
}
- }
- fprintf(stdout, "OK\n");
+ }
- printf("Checking each fragment for its unique value......");
+ /* Checking each fragment for its unique value */
for (i = 0; i < FRAG_COUNT; i++) {
int j;
char **c = apr_rmm_addr_get(rmm, off[i]);
for (j = 0; j < FRAG_SIZE; j++, c++) {
char *d = apr_itoa(pool, i + j);
- if (strcmp(*c, d) != 0) {
- return APR_EGENERAL;
- }
+ ABTS_STR_EQUAL(tc, *c, d);
}
- }
- fprintf(stdout, "OK\n");
+ }
- printf("Freeing each fragment............................");
+ /* Freeing each fragment */
for (i = 0; i < FRAG_COUNT; i++) {
rv = apr_rmm_free(rmm, off[i]);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- }
- fprintf(stdout, "OK\n");
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ }
- printf("Creating one large segment.......................");
+ /* Creating one large segment */
off[0] = apr_rmm_calloc(rmm, SHARED_SIZE);
- fprintf(stdout, "OK\n");
- printf("Setting large segment............................");
+ /* Setting large segment */
for (i = 0; i < FRAG_COUNT * FRAG_SIZE; i++) {
char **c = apr_rmm_addr_get(rmm, off[0]);
c[i] = apr_itoa(pool, i);
}
- fprintf(stdout, "OK\n");
- printf("Freeing large segment............................");
- apr_rmm_free(rmm, off[0]);
- fprintf(stdout, "OK\n");
+ /* Freeing large segment */
+ rv = apr_rmm_free(rmm, off[0]);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- printf("Creating each fragment of size %" APR_SIZE_T_FMT " (again)........",
- fragsize);
+ /* Creating each fragment of size fragsize */
for (i = 0; i < FRAG_COUNT; i++) {
off[i] = apr_rmm_malloc(rmm, fragsize);
- }
- fprintf(stdout, "OK\n");
+ }
- printf("Freeing each fragment backwards..................");
+ /* Freeing each fragment backwards */
for (i = FRAG_COUNT - 1; i >= 0; i--) {
rv = apr_rmm_free(rmm, off[i]);
- if (rv != APR_SUCCESS) {
- return rv;
- }
- }
- fprintf(stdout, "OK\n");
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+ }
- printf("Creating one large segment (again)...............");
+ /* Creating one large segment (again) */
off[0] = apr_rmm_calloc(rmm, SHARED_SIZE);
- fprintf(stdout, "OK\n");
- printf("Freeing large segment............................");
- apr_rmm_free(rmm, off[0]);
- fprintf(stdout, "OK\n");
+ /* Freeing large segment */
+ rv = apr_rmm_free(rmm, off[0]);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- printf("Checking realloc.................................");
+ /* Checking realloc */
off[0] = apr_rmm_calloc(rmm, SHARED_SIZE - 100);
off[1] = apr_rmm_calloc(rmm, 100);
- if (off[0] == 0 || off[1] == 0) {
- printf("FAILED\n");
- return APR_EINVAL;
- }
+ ABTS_TRUE(tc, !!off[0]);
+ ABTS_TRUE(tc, !!off[1]);
+
entity = apr_rmm_addr_get(rmm, off[1]);
rv = apr_rmm_free(rmm, off[0]);
- if (rv != APR_SUCCESS) {
- printf("FAILED\n");
- return rv;
- }
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
{
unsigned char *c = entity;
@@ -205,77 +157,35 @@ static apr_status_t test_rmm(apr_pool_t *parpool)
/* now we can realloc off[1] and get many more bytes */
off[0] = apr_rmm_realloc(rmm, entity, SHARED_SIZE - 100);
- if (off[0] == 0) {
- printf("FAILED\n");
- return APR_EINVAL;
- }
+ ABTS_TRUE(tc, !!off[0]);
{
unsigned char *c = apr_rmm_addr_get(rmm, off[0]);
/* fill in the region */
for (i = 0; i < 100; i++) {
- if (c[i] != (i < 50 ? 0 : i)) {
- printf("FAILED at offset %d: %hx\n", i, c[i]);
- return APR_EGENERAL;
- }
+ ABTS_TRUE(tc, c[i] == (i < 50 ? 0 : i));
}
}
- fprintf(stdout, "OK\n");
-
- printf("Destroying rmm segment...........................");
rv = apr_rmm_destroy(rmm);
- if (rv != APR_SUCCESS) {
- printf("FAILED\n");
- return rv;
- }
- printf("OK\n");
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- printf("Destroying shared memory segment.................");
rv = apr_shm_destroy(shm);
- if (rv != APR_SUCCESS) {
- printf("FAILED\n");
- return rv;
- }
- printf("OK\n");
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
apr_pool_destroy(pool);
-
- return APR_SUCCESS;
}
+#endif /* APR_HAS_SHARED_MEMORY */
-int main(void)
+abts_suite *testrmm(abts_suite *suite)
{
- apr_status_t rv;
- apr_pool_t *pool;
- char errmsg[200];
-
- apr_initialize();
-
- printf("APR RMM Memory Test\n");
- printf("======================\n\n");
+ suite = ADD_SUITE(suite);
- printf("Initializing the pool............................");
- if (apr_pool_create(&pool, NULL) != APR_SUCCESS) {
- printf("could not initialize pool\n");
- exit(-1);
- }
- printf("OK\n");
-
- rv = test_rmm(pool);
- if (rv != APR_SUCCESS) {
- printf("Anonymous shared memory test FAILED: [%d] %s\n",
- rv, apr_strerror(rv, errmsg, sizeof(errmsg)));
- exit(-2);
- }
- printf("RMM test passed!\n");
+#if APR_HAS_SHARED_MEMORY
+ abts_run_test(suite, test_rmm, NULL);
+#endif
- return 0;
+ return suite;
}
-
-#else /* APR_HAS_SHARED_MEMORY */
-#error shmem is not supported on this platform
-#endif /* APR_HAS_SHARED_MEMORY */
-
diff --git a/srclib/apr-util/test/teststrmatch.c b/srclib/apr-util/test/teststrmatch.c
index e86b4c13..5ed70f84 100644
--- a/srclib/apr-util/test/teststrmatch.c
+++ b/srclib/apr-util/test/teststrmatch.c
@@ -1,9 +1,9 @@
-/* Copyright 2002-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testuri.c b/srclib/apr-util/test/testuri.c
index c4d385d3..b84df9a1 100644
--- a/srclib/apr-util/test/testuri.c
+++ b/srclib/apr-util/test/testuri.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testutil.c b/srclib/apr-util/test/testutil.c
index f60ef21a..11a1923a 100644
--- a/srclib/apr-util/test/testutil.c
+++ b/srclib/apr-util/test/testutil.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testutil.h b/srclib/apr-util/test/testutil.h
index 95318e17..6b8e5f84 100644
--- a/srclib/apr-util/test/testutil.h
+++ b/srclib/apr-util/test/testutil.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -52,5 +52,13 @@ abts_suite *testmd4(abts_suite *suite);
abts_suite *testmd5(abts_suite *suite);
abts_suite *testldap(abts_suite *suite);
abts_suite *testdbd(abts_suite *suite);
+abts_suite *testdate(abts_suite *suite);
+abts_suite *testmemcache(abts_suite *suite);
+abts_suite *testreslist(abts_suite *suite);
+abts_suite *testqueue(abts_suite *suite);
+abts_suite *testxml(abts_suite *suite);
+abts_suite *testxlate(abts_suite *suite);
+abts_suite *testrmm(abts_suite *suite);
+abts_suite *testdbm(abts_suite *suite);
#endif /* APR_TEST_INCLUDES */
diff --git a/srclib/apr-util/test/testutildll.dsp b/srclib/apr-util/test/testutildll.dsp
new file mode 100644
index 00000000..474853fc
--- /dev/null
+++ b/srclib/apr-util/test/testutildll.dsp
@@ -0,0 +1,266 @@
+# Microsoft Developer Studio Project File - Name="testutildll" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=testutildll - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "testutildll.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "testutildll.mak" CFG="testutildll - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "testutildll - Win32 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testutildll - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "testutildll - Win32 ReleaseNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testutildll - Win32 DebugNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testutildll - x64 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testutildll - x64 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "testutildll - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=Release OUTDIR=Release MODEL=dynamic all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "Release\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=Release OUTDIR=Release MODEL=dynamic all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "Release\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutildll - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=Debug OUTDIR=Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "Debug\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=Debug OUTDIR=Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "Debug\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutildll - Win32 ReleaseNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Release OUTDIR=NT\Release MODEL=dynamic all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\Release\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Release OUTDIR=NT\Release MODEL=dynamic all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\Release\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutildll - Win32 DebugNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Debug OUTDIR=NT\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\Debug\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Debug OUTDIR=NT\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\Debug\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutildll - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Release OUTDIR=x64\Release MODEL=dynamic all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\Release\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Release OUTDIR=x64\Release MODEL=dynamic all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\Release\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutildll - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Debug OUTDIR=x64\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\Debug\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Debug OUTDIR=x64\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\Debug\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "testutildll - Win32 Release"
+# Name "testutildll - Win32 Debug"
+# Name "testutildll - Win32 ReleaseNT"
+# Name "testutildll - Win32 DebugNT"
+# Name "testutildll - x64 Release"
+# Name "testutildll - x64 Debug"
+# Begin Group "testall Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Source File
+
+SOURCE=.\abts.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\abts.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\abts_tests.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testbuckets.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdbd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdbm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testldap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testmd4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testmd5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testpass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testqueue.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testreslist.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testrmm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\teststrmatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testuri.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testuuid.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testxlate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testxml.c
+# End Source File
+# End Group
+# Begin Group "Other Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Source File
+
+SOURCE=.\dbd.c
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\Makefile.win
+# End Source File
+# End Target
+# End Project
diff --git a/srclib/apr-util/test/testutillib.dsp b/srclib/apr-util/test/testutillib.dsp
new file mode 100644
index 00000000..c6396dd8
--- /dev/null
+++ b/srclib/apr-util/test/testutillib.dsp
@@ -0,0 +1,266 @@
+# Microsoft Developer Studio Project File - Name="testutillib" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=testutillib - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "testutillib.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "testutillib.mak" CFG="testutillib - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "testutillib - Win32 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testutillib - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "testutillib - Win32 ReleaseNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testutillib - Win32 DebugNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testutillib - x64 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testutillib - x64 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "testutillib - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=LibR OUTDIR=LibR MODEL=static all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "LibR\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=LibR OUTDIR=LibR MODEL=static all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "LibR\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutillib - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=LibD OUTDIR=LibD MODEL=static _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "LibD\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=LibD OUTDIR=LibD MODEL=static _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "LibD\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutillib - Win32 ReleaseNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibR OUTDIR=NT\LibR MODEL=static all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\LibR\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibR OUTDIR=NT\LibR MODEL=static all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\LibR\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutillib - Win32 DebugNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibD OUTDIR=NT\LibD MODEL=static _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\LibD\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibD OUTDIR=NT\LibD MODEL=static _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\LibD\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutillib - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibR OUTDIR=x64\LibR MODEL=static all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\LibR\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibR OUTDIR=x64\LibR MODEL=static all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\LibR\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testutillib - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibD OUTDIR=x64\LibD MODEL=static _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\LibD\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibD OUTDIR=x64\LibD MODEL=static _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\LibD\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "testutillib - Win32 Release"
+# Name "testutillib - Win32 Debug"
+# Name "testutillib - Win32 ReleaseNT"
+# Name "testutillib - Win32 DebugNT"
+# Name "testutillib - x64 Release"
+# Name "testutillib - x64 Debug"
+# Begin Group "testall Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Source File
+
+SOURCE=.\abts.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\abts.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\abts_tests.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testbuckets.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdbd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdbm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testldap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testmd4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testmd5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testpass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testqueue.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testreslist.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testrmm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\teststrmatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testuri.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testuuid.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testxlate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testxml.c
+# End Source File
+# End Group
+# Begin Group "Other Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Source File
+
+SOURCE=.\dbd.c
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\Makefile.win
+# End Source File
+# End Target
+# End Project
diff --git a/srclib/apr-util/test/testuuid.c b/srclib/apr-util/test/testuuid.c
index 2bd6ef37..f33adde1 100644
--- a/srclib/apr-util/test/testuuid.c
+++ b/srclib/apr-util/test/testuuid.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/test/testxlate.c b/srclib/apr-util/test/testxlate.c
index f6819914..8dbc4c8e 100644
--- a/srclib/apr-util/test/testxlate.c
+++ b/srclib/apr-util/test/testxlate.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -14,111 +14,90 @@
* limitations under the License.
*/
-#include <stdio.h>
-#include <stdlib.h>
-
#include "apr.h"
#include "apr_errno.h"
#include "apr_general.h"
#include "apr_strings.h"
#include "apr_xlate.h"
+#include "abts.h"
+#include "testutil.h"
+
+#ifdef APR_HAS_XLATE
static const char test_utf8[] = "Edelwei\xc3\x9f";
static const char test_utf7[] = "Edelwei+AN8-";
static const char test_latin1[] = "Edelwei\xdf";
static const char test_latin2[] = "Edelwei\xdf";
-
-static int check_status (apr_status_t status, const char *msg)
-{
- if (status)
- {
- static char buf[1024];
- printf("ERROR: %s\n %s\n", msg,
- apr_strerror(status, buf, sizeof(buf)));
- return 1;
- }
- return 0;
-}
-
-static int test_conversion (apr_xlate_t *convset,
- const char *inbuf,
- const char *expected)
+static void test_conversion(abts_case *tc, apr_xlate_t *convset,
+ const char *inbuf, const char *expected)
{
static char buf[1024];
- int retcode = 0;
apr_size_t inbytes_left = strlen(inbuf);
apr_size_t outbytes_left = sizeof(buf) - 1;
- apr_status_t status = apr_xlate_conv_buffer(convset,
- inbuf,
- &inbytes_left,
- buf,
- &outbytes_left);
- if (status == APR_SUCCESS) {
- status = apr_xlate_conv_buffer(convset, NULL, NULL,
- buf + sizeof(buf) - outbytes_left - 1,
- &outbytes_left);
- }
+ apr_status_t rv;
+
+ rv = apr_xlate_conv_buffer(convset, inbuf, &inbytes_left, buf, &outbytes_left);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ if (rv != APR_SUCCESS)
+ return;
+
+ rv = apr_xlate_conv_buffer(convset, NULL, NULL, buf + sizeof(buf) -
+ outbytes_left - 1, &outbytes_left);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
buf[sizeof(buf) - outbytes_left - 1] = '\0';
- retcode |= check_status(status, "apr_xlate_conv_buffer");
- if ((!status || APR_STATUS_IS_INCOMPLETE(status))
- && strcmp(buf, expected))
- {
- printf("ERROR: expected: '%s'\n actual: '%s'"
- "\n inbytes_left: %"APR_SIZE_T_FMT"\n",
- expected, buf, inbytes_left);
- retcode |= 1;
- }
- return retcode;
+
+ ABTS_STR_EQUAL(tc, buf, expected);
}
-static int one_test (const char *cs1, const char *cs2,
+static void one_test(abts_case *tc, const char *cs1, const char *cs2,
const char *str1, const char *str2,
apr_pool_t *pool)
{
+ apr_status_t rv;
apr_xlate_t *convset;
- const char *msg = apr_psprintf(pool, "apr_xlate_open(%s, %s)", cs2, cs1);
- int retcode = check_status(apr_xlate_open(&convset, cs2, cs1, pool), msg);
- if (!retcode)
- {
- retcode |= test_conversion(convset, str1, str2);
- retcode |= check_status(apr_xlate_close(convset), "apr_xlate_close");
- }
- printf("%s: %s -> %s\n", (retcode ? "FAIL" : "PASS"), cs1, cs2);
- return retcode;
-}
+ rv = apr_xlate_open(&convset, cs2, cs1, pool);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
-int main (int argc, char **argv)
-{
- apr_pool_t *pool;
- int retcode = 0;
+ if (rv != APR_SUCCESS)
+ return;
-#ifndef APR_HAS_XLATE
- puts("SKIP: apr_xlate not implemented");
- return 0;
-#endif
+ test_conversion(tc, convset, str1, str2);
- apr_initialize();
- atexit(apr_terminate);
- apr_pool_create(&pool, NULL);
+ rv = apr_xlate_close(convset);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+}
+static void test_transformation(abts_case *tc, void *data)
+{
/* 1. Identity transformation: UTF-8 -> UTF-8 */
- retcode |= one_test("UTF-8", "UTF-8", test_utf8, test_utf8, pool);
+ one_test(tc, "UTF-8", "UTF-8", test_utf8, test_utf8, p);
/* 2. UTF-8 <-> ISO-8859-1 */
- retcode |= one_test("UTF-8", "ISO-8859-1", test_utf8, test_latin1, pool);
- retcode |= one_test("ISO-8859-1", "UTF-8", test_latin1, test_utf8, pool);
+ one_test(tc, "UTF-8", "ISO-8859-1", test_utf8, test_latin1, p);
+ one_test(tc, "ISO-8859-1", "UTF-8", test_latin1, test_utf8, p);
/* 3. ISO-8859-1 <-> ISO-8859-2, identity */
- retcode |= one_test("ISO-8859-1", "ISO-8859-2",
- test_latin1, test_latin2, pool);
- retcode |= one_test("ISO-8859-2", "ISO-8859-1",
- test_latin2, test_latin1, pool);
+ one_test(tc, "ISO-8859-1", "ISO-8859-2", test_latin1, test_latin2, p);
+ one_test(tc, "ISO-8859-2", "ISO-8859-1", test_latin2, test_latin1, p);
/* 4. Transformation using charset aliases */
- retcode |= one_test("UTF-8", "UTF-7", test_utf8, test_utf7, pool);
- retcode |= one_test("UTF-7", "UTF-8", test_utf7, test_utf8, pool);
+ one_test(tc, "UTF-8", "UTF-7", test_utf8, test_utf7, p);
+ one_test(tc, "UTF-7", "UTF-8", test_utf7, test_utf8, p);
+}
+
+#endif /* APR_HAS_XLATE */
+
+abts_suite *testxlate(abts_suite *suite)
+{
+ suite = ADD_SUITE(suite);
+
+#ifdef APR_HAS_XLATE
+ abts_run_test(suite, test_transformation, NULL);
+#endif
- return retcode;
+ return suite;
}
diff --git a/srclib/apr-util/test/testxml.c b/srclib/apr-util/test/testxml.c
index 9808f210..8db40535 100644
--- a/srclib/apr-util/test/testxml.c
+++ b/srclib/apr-util/test/testxml.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -17,203 +17,143 @@
#include "apr.h"
#include "apr_general.h"
#include "apr_xml.h"
+#include "abts.h"
+#include "testutil.h"
-#if APR_HAVE_STDLIB_H
-#include <stdlib.h> /* for exit() */
-#endif
-
-static const char *progname;
-static const char *usage = "%s [xmlfile]\nIt will create "
- "a dummy XML file if none is supplied";
-/*
- * If our platform knows about the tmpnam() external buffer size, create
- * a buffer to pass in. This is needed in a threaded environment, or
- * one that thinks it is (like HP-UX).
- */
-
-#ifdef L_tmpnam
-static char tname_buf[L_tmpnam];
-#else
-static char *tname_buf = NULL;
-#endif
-
-static apr_status_t create_dummy_file_error(apr_pool_t *p, apr_file_t **fd)
+static apr_status_t create_dummy_file_error(abts_case *tc, apr_pool_t *p,
+ apr_file_t **fd)
{
- apr_status_t rv;
- char *tmpfile;
int i;
+ apr_status_t rv;
apr_off_t off = 0L;
- tmpfile = tmpnam(tname_buf);
+ char template[] = "data/testxmldummyerrorXXXXXX";
- if ((tmpfile == NULL) || (*tmpfile == '\0')) {
- fprintf(stderr, "unable to generate temporary filename\n");
- if (errno == 0) {
- errno = ENOENT;
- }
- perror("tmpnam");
- return APR_ENOENT;
- }
- rv = apr_file_open(fd, tmpfile, APR_CREATE|APR_TRUNCATE|APR_DELONCLOSE|
- APR_READ|APR_WRITE|APR_EXCL, APR_OS_DEFAULT, p);
+ rv = apr_file_mktemp(fd, template, APR_CREATE | APR_TRUNCATE | APR_DELONCLOSE |
+ APR_READ | APR_WRITE | APR_EXCL, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
if (rv != APR_SUCCESS)
return rv;
+
rv = apr_file_puts("<?xml version=\"1.0\" ?>\n<maryx>"
"<had a=\"little\"/><lamb its='fleece "
"was white as snow' />\n", *fd);
- if (rv != APR_SUCCESS)
- return rv;
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
for (i = 0; i < 5000; i++) {
rv = apr_file_puts("<hmm roast=\"lamb\" "
"for=\"dinner\">yummy</hmm>\n", *fd);
- if (rv != APR_SUCCESS)
- return rv;
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
+
rv = apr_file_puts("</mary>\n", *fd);
- if (rv != APR_SUCCESS)
- return rv;
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ rv = apr_file_seek(*fd, APR_SET, &off);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- return apr_file_seek(*fd, APR_SET, &off);
+ return rv;
}
-static apr_status_t create_dummy_file(apr_pool_t *p, apr_file_t **fd)
+static apr_status_t create_dummy_file(abts_case *tc, apr_pool_t *p,
+ apr_file_t **fd)
{
- apr_status_t rv;
- char *tmpfile;
int i;
+ apr_status_t rv;
apr_off_t off = 0L;
- tmpfile = tmpnam(tname_buf);
+ char template[] = "data/testxmldummyXXXXXX";
- if ((tmpfile == NULL) || (*tmpfile == '\0')) {
- fprintf(stderr, "unable to generate temporary filename\n");
- if (errno == 0) {
- errno = ENOENT;
- }
- perror("tmpnam");
- return APR_ENOENT;
- }
- rv = apr_file_open(fd, tmpfile, APR_CREATE|APR_TRUNCATE|APR_DELONCLOSE|
- APR_READ|APR_WRITE|APR_EXCL, APR_OS_DEFAULT, p);
+ rv = apr_file_mktemp(fd, template, APR_CREATE | APR_TRUNCATE | APR_DELONCLOSE |
+ APR_READ | APR_WRITE | APR_EXCL, p);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
if (rv != APR_SUCCESS)
return rv;
- rv = apr_file_puts("<?xml version=\"1.0\" ?>\n<mary>"
- "<had a=\"little\"/><lamb its='fleece "
- "was white as snow' />\n", *fd);
- if (rv != APR_SUCCESS)
- return rv;
+
+ rv = apr_file_puts("<?xml version=\"1.0\" ?>\n<mary>\n", *fd);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
for (i = 0; i < 5000; i++) {
rv = apr_file_puts("<hmm roast=\"lamb\" "
"for=\"dinner\">yummy</hmm>\n", *fd);
- if (rv != APR_SUCCESS)
- return rv;
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
}
+
rv = apr_file_puts("</mary>\n", *fd);
- if (rv != APR_SUCCESS)
- return rv;
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
rv = apr_file_seek(*fd, APR_SET, &off);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
return rv;
}
-static void dump_xml(apr_xml_elem *e, int level)
+static void dump_xml(abts_case *tc, apr_xml_elem *e, int level)
{
apr_xml_attr *a;
apr_xml_elem *ec;
- printf("%d: element %s\n", level, e->name);
+ if (level == 0) {
+ ABTS_STR_EQUAL(tc, e->name, "mary");
+ } else {
+ ABTS_STR_EQUAL(tc, e->name, "hmm");
+ }
+
if (e->attr) {
a = e->attr;
- printf("%d:\tattrs\t", level);
- while (a) {
- printf("%s=%s\t", a->name, a->value);
- a = a->next;
- }
- printf("\n");
+ ABTS_PTR_NOTNULL(tc, a);
+ ABTS_STR_EQUAL(tc, a->name, "for");
+ ABTS_STR_EQUAL(tc, a->value, "dinner");
+ a = a->next;
+ ABTS_PTR_NOTNULL(tc, a);
+ ABTS_STR_EQUAL(tc, a->name, "roast");
+ ABTS_STR_EQUAL(tc, a->value, "lamb");
}
if (e->first_child) {
ec = e->first_child;
while (ec) {
- dump_xml(ec, level + 1);
+ dump_xml(tc, ec, level + 1);
ec = ec->next;
}
}
}
-static void oops(const char *s1, const char *s2, apr_status_t rv)
+static void test_xml_parser(abts_case *tc, void *data)
{
- if (progname)
- fprintf(stderr, "%s: ", progname);
- fprintf(stderr, s1, s2);
- if (rv != APR_SUCCESS) {
- char buf[120];
-
- fprintf(stderr, " (%s)", apr_strerror(rv, buf, sizeof buf));
- }
- fprintf(stderr, "\n");
- exit(1);
-}
-
-int main(int argc, const char *const * argv)
-{
- apr_pool_t *pool;
apr_file_t *fd;
apr_xml_parser *parser;
apr_xml_doc *doc;
apr_status_t rv;
- char errbuf[2000];
- char errbufXML[2000];
-
- (void) apr_initialize();
- apr_pool_create(&pool, NULL);
- progname = argv[0];
- if (argc == 1) {
- rv = create_dummy_file(pool, &fd);
- if (rv != APR_SUCCESS) {
- oops("cannot create dummy file", "oops", rv);
- }
- }
- else {
- if (argc == 2) {
- rv = apr_file_open(&fd, argv[1], APR_READ, APR_OS_DEFAULT, pool);
- if (rv != APR_SUCCESS) {
- oops("cannot open: %s", argv[1], rv);
- }
- }
- else {
- oops("usage: %s", usage, 0);
- }
- }
- rv = apr_xml_parse_file(pool, &parser, &doc, fd, 2000);
- if (rv != APR_SUCCESS) {
- fprintf(stderr, "APR Error %s\nXML Error: %s\n",
- apr_strerror(rv, errbuf, sizeof(errbuf)),
- apr_xml_parser_geterror(parser, errbufXML, sizeof(errbufXML)));
- return rv;
- }
- dump_xml(doc->root, 0);
- apr_file_close(fd);
- if (argc == 1) {
- rv = create_dummy_file_error(pool, &fd);
- if (rv != APR_SUCCESS) {
- oops("cannot create error dummy file", "oops", rv);
- }
- rv = apr_xml_parse_file(pool, &parser, &doc, fd, 2000);
- if (rv != APR_SUCCESS) {
- fprintf(stdout, "APR Error %s\nXML Error: %s "
- "(EXPECTED) This is good.\n",
- apr_strerror(rv, errbuf, sizeof(errbuf)),
- apr_xml_parser_geterror(parser, errbufXML, sizeof(errbufXML)));
- rv = APR_SUCCESS; /* reset the return code, as the test is supposed to get this error */
- }
- else {
- fprintf(stderr, "Expected an error, but didn't get one ;( ");
- return APR_EGENERAL;
- }
- }
- apr_pool_destroy(pool);
- apr_terminate();
- return rv;
+
+ rv = create_dummy_file(tc, p, &fd);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ if (rv != APR_SUCCESS)
+ return;
+
+ rv = apr_xml_parse_file(p, &parser, &doc, fd, 2000);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ dump_xml(tc, doc->root, 0);
+
+ rv = apr_file_close(fd);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ rv = create_dummy_file_error(tc, p, &fd);
+ ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
+
+ if (rv != APR_SUCCESS)
+ return;
+
+ rv = apr_xml_parse_file(p, &parser, &doc, fd, 2000);
+ ABTS_TRUE(tc, rv != APR_SUCCESS);
+}
+
+abts_suite *testxml(abts_suite *suite)
+{
+ suite = ADD_SUITE(suite);
+
+ abts_run_test(suite, test_xml_parser, NULL);
+
+ return suite;
}
diff --git a/srclib/apr-util/uri/apr_uri.c b/srclib/apr-util/uri/apr_uri.c
index 3245c19a..2a5aa3cd 100644
--- a/srclib/apr-util/uri/apr_uri.c
+++ b/srclib/apr-util/uri/apr_uri.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/xlate/xlate.c b/srclib/apr-util/xlate/xlate.c
index 5e955ef2..1ea840e9 100644
--- a/srclib/apr-util/xlate/xlate.c
+++ b/srclib/apr-util/xlate/xlate.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -310,22 +310,22 @@ APU_DECLARE(apr_status_t) apr_xlate_conv_buffer(apr_xlate_t *convset,
*/
switch (status) {
- case E2BIG: /* out of space on output */
+ case APR_BADARG: /* out of space on output */
status = 0; /* change table lookup code below if you
make this an error */
break;
- case EINVAL: /* input character not complete (yet) */
+ case APR_EINVAL: /* input character not complete (yet) */
status = APR_INCOMPLETE;
break;
- case EILSEQ: /* bad input byte */
+ case APR_BADCH: /* bad input byte */
status = APR_EINVAL;
break;
/* Sometimes, iconv is not good about setting errno. */
case 0:
- if (*inbytes_left)
+ if (inbytes_left && *inbytes_left)
status = APR_INCOMPLETE;
break;
@@ -387,8 +387,8 @@ APU_DECLARE(apr_status_t) apr_xlate_conv_buffer(apr_xlate_t *convset,
#endif
if (inbuf) {
- int to_convert = min(*inbytes_left, *outbytes_left);
- int converted = to_convert;
+ apr_size_t to_convert = min(*inbytes_left, *outbytes_left);
+ apr_size_t converted = to_convert;
char *table = convset->sbcs_table;
while (to_convert) {
diff --git a/srclib/apr-util/xml/apr_xml.c b/srclib/apr-util/xml/apr_xml.c
index dc362205..256223f4 100644
--- a/srclib/apr-util/xml/apr_xml.c
+++ b/srclib/apr-util/xml/apr_xml.c
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
@@ -383,7 +383,7 @@ static apr_status_t do_parse(apr_xml_parser *parser,
parser->error = APR_XML_ERROR_PARSE_DONE;
}
else {
- int rv = XML_Parse(parser->xp, data, len, is_final);
+ int rv = XML_Parse(parser->xp, data, (int)len, is_final);
if (rv == 0) {
parser->error = APR_XML_ERROR_EXPAT;
diff --git a/srclib/apr-util/xml/expat/lib/osd_ebcdic_df04_1.h b/srclib/apr-util/xml/expat/lib/osd_ebcdic_df04_1.h
index 968256ba..6f4b6b91 100644
--- a/srclib/apr-util/xml/expat/lib/osd_ebcdic_df04_1.h
+++ b/srclib/apr-util/xml/expat/lib/osd_ebcdic_df04_1.h
@@ -1,9 +1,9 @@
-/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
- * applicable.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
diff --git a/srclib/apr-util/xml/expat/lib/xml.dsp b/srclib/apr-util/xml/expat/lib/xml.dsp
index 55baa486..1c5b0676 100644
--- a/srclib/apr-util/xml/expat/lib/xml.dsp
+++ b/srclib/apr-util/xml/expat/lib/xml.dsp
@@ -4,7 +4,7 @@
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=xml - Win32 Debug
+CFG=xml - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,12 +13,14 @@ CFG=xml - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "xml.mak" CFG="xml - Win32 Debug"
+!MESSAGE NMAKE /f "xml.mak" CFG="xml - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "xml - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "xml - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "xml - x64 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "xml - x64 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
@@ -41,7 +43,7 @@ RSC=rc.exe
# PROP Intermediate_Dir "LibR"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D VERSION=\"expat_1.95.2\" /Fd"LibR\xml_src" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D VERSION=\"expat_1.95.2\" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\xml" /FD /c
# ADD BASE RSC /l 0x409
# ADD RSC /l 0x409
BSC32=bscmake.exe
@@ -49,7 +51,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
+# ADD LIB32 /nologo /out:"LibR\xml.lib"
!ELSEIF "$(CFG)" == "xml - Win32 Debug"
@@ -64,8 +66,8 @@ LIB32=link.exe -lib
# PROP Intermediate_Dir "LibD"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D VERSION=\"expat_1.95.2\" /Fd"LibD\xml_src" /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D VERSION=\"expat_1.95.2\" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\xml" /FD /EHsc /c
# ADD BASE RSC /l 0x409
# ADD RSC /l 0x409
BSC32=bscmake.exe
@@ -73,7 +75,54 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
+# ADD LIB32 /nologo /out:"LibD\xml.lib"
+
+!ELSEIF "$(CFG)" == "xml - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "x64\LibR"
+# PROP BASE Intermediate_Dir "x64\LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "x64\LibR"
+# PROP Intermediate_Dir "x64\LibR"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D VERSION=\"expat_1.95.2\" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\xml" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibR\xml.lib"
+
+!ELSEIF "$(CFG)" == "xml - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "x64\LibD"
+# PROP BASE Intermediate_Dir "x64\LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "x64\LibD"
+# PROP Intermediate_Dir "x64\LibD"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D VERSION=\"expat_1.95.2\" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\xml" /FD /EHsc /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibD\xml.lib"
!ENDIF
@@ -81,6 +130,8 @@ LIB32=link.exe -lib
# Name "xml - Win32 Release"
# Name "xml - Win32 Debug"
+# Name "xml - x64 Release"
+# Name "xml - x64 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
@@ -182,6 +233,26 @@ InputPath=.\expat.h.in
# End Custom Build
+!ELSEIF "$(CFG)" == "xml - x64 Release"
+
+# Begin Custom Build - Creating expat.h from expat.h.in
+InputPath=.\expat.h.in
+
+".\expat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\expat.h.in > .\expat.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "xml - x64 Debug"
+
+# Begin Custom Build - Creating expat.h from expat.h.in
+InputPath=.\expat.h.in
+
+".\expat.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\expat.h.in > .\expat.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -209,6 +280,26 @@ InputPath=.\winconfig.h
# End Custom Build
+!ELSEIF "$(CFG)" == "xml - x64 Release"
+
+# Begin Custom Build - Creating config.h from winconfig.h
+InputPath=.\winconfig.h
+
+".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\winconfig.h > .\config.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "xml - x64 Debug"
+
+# Begin Custom Build - Creating config.h from winconfig.h
+InputPath=.\winconfig.h
+
+".\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\winconfig.h > .\config.h
+
+# End Custom Build
+
!ENDIF
# End Source File
diff --git a/srclib/apr/CHANGES b/srclib/apr/CHANGES
index 2d48c08e..bb9c989b 100644
--- a/srclib/apr/CHANGES
+++ b/srclib/apr/CHANGES
@@ -1,7 +1,68 @@
-*- coding: utf-8 -*-
+Changes for APR 1.2.12
+
+ *) Numerous fixes to the test/ framework, including better handling of
+ long size_t comparisons and more consistent Makefile.(in|win) setup
+ for authoring new tests. [William Rowe]
+
+ *) Win32 build fixes including a Makefile.win scheme, fixes for 64P
+ model x86_64 compiles and VC8 builds. [William Rowe]
+
+ *) Fix --disable-ipv6 build on platforms with getifaddrs().
+ PR 39199. [Joe Orton]
+
+ *) Fix DSO-related crash on z/OS caused by incorrect memory
+ allocation. [David Jones <oscaremma gmail.com>]
+
+ *) Define apr_ino_t in such a way that it doesn't change definition
+ based on the library consumer's -D'efines to the filesystem.
+ [Lucian Adrian Grijincu <lucian.grijincu gmail.com>]
+
+ *) Implement apr_atomic_casptr() for z/OS.
+ [David Jones <oscaremma gmail.com>]
+
+ *) Fill in apr_fileinfo_t member st_csize on Netware and Unix (PR 41678),
+ and refine the file times down to apr_time_t resolution if supported
+ by a st_atimensec or st_atim.tv_nsec value by the OS. Additional
+ msec implementations are possible if exposed through autoconf.
+ [William Rowe, Nicklas Edmundsson <nikke acc.umu.se>]
+
+ *) Fix apr_socket_recvfrom() to ensure the peer's port and address
+ is returned through the "from" parameter on Unix and Win32.
+ [Joe Orton, William Rowe]
+
+ *) The WIN32 cleanup routine for shared memory segments could wrongly
+ return unknown errors and leak a open handle.
+ [Joe Mudd <Joe.Mudd sas.com>]
+
+ *) apr_procattr_io_set() on Windows: Set non-blocking pipe handles
+ to a default timeout of 0, following the Unix default. No effect
+ on pipe handles configured to block. PR 43522.
+ [Eric Covener <covener gmail.com>]
+
+ *) apr_file_write() on Windows: Fix return code when writing to a non-
+ blocking pipe would have blocked. PR 43563.
+ [Eric Covener <covener gmail.com>]
+
+ *) Cause apr_file_dup2() on Win32 to update the MSVCRT psuedo-stdio
+ handles for fd-based and FILE * based I/O. [William Rowe]
+
+ *) Revert Win32 to the 1.2.8 behavior of apr_proc_create() for any
+ of the three stdio streams which are not initialized, through either
+ apr_procattr_io_set() or apr_procattr_child_XXX_set(), when given a
+ procattr_t with one or two streams which were initialized through
+ apr_procattr_child_XXX_set(). Once again, these do not inherit the
+ parent process stdio stream to WIN32 child processes (passing
+ INVALID_HANDLE_VALUE instead) as on Unix. Note APR 1.3.0 adopts
+ the Unix behavior of inheriting any uninitialized streams as the
+ parent's corresponding stdio stream, in such cases. [William Rowe]
+
Changes for APR 1.2.11
- *) Win32 apr_file_read; Correctly handle completion-based read-to-EOF.
+ *) Fix handling of EINTR from read() in apr_generate_random_bytes()
+ on platforms with /dev/random. PR 39790. [Joe Orton]
+
+ *) Win32 apr_file_read: Correctly handle completion-based read-to-EOF.
[Steven Naim <steven.naim googlemail.com>]
*) Fixed Win32 regression of stdout inheritance in apr_proc_create.
@@ -9,7 +70,7 @@ Changes for APR 1.2.11
Changes for APR 1.2.10
- *) Solve winNT inherited pipe leaks by mutexing apr_proc_create calls,
+ *) Solve WinNT inherited pipe leaks by mutexing apr_proc_create calls,
on WinNT (not WinCE, nor 9x) so that we toggle the inherited state
of the stdin/out/err pipes. All other file handles are treated as
not-inherited until apr_file_dup2'ed a std handle of this process,
diff --git a/srclib/apr/Makefile.win b/srclib/apr/Makefile.win
new file mode 100644
index 00000000..51b31652
--- /dev/null
+++ b/srclib/apr/Makefile.win
@@ -0,0 +1,176 @@
+# Makefile.win for Win32 APR alone
+#
+# Targets are:
+#
+# buildall - compile everything
+# checkall - run APR regression tests
+# install - compile everything
+# clean - mop up everything
+#
+# You can override the build mechansim, choose only one;
+#
+# USEMAK=1 - compile from exported make files
+# USEDSW=1 - compile from .dsw / .dsp VC6 projects
+# USESLN=1 - compile from converted .sln / .vcproj VC7+ files
+#
+# Define ARCH to your desired preference (your PATH must point
+# to the correct compiler tools!) Choose only one;
+#
+# ARCH="Win32 Release"
+# ARCH="Win32 Debug"
+# ARCH="Win32 ReleaseNT"
+# ARCH="Win32 DebugNT"
+# ARCH="x64 Release"
+# ARCH="x64 Debug"
+#
+# For example;
+#
+# nmake -f Makefile.win PREFIX=C:\APR buildall checkall installall clean
+#
+
+!IF EXIST("apr.sln") && ([devenv /help > NUL 2>&1] == 0) \
+ && !defined(USEMAK) && !defined(USEDSW)
+USESLN=1
+USEMAK=0
+USEDSW=0
+!ELSEIF EXIST("apr.mak") && !defined(USEDSW)
+USESLN=0
+USEMAK=1
+USEDSW=0
+!ELSE
+USESLN=0
+USEMAK=0
+USEDSW=1
+!ENDIF
+
+PREFIX=..\apr-dist
+
+!IF [$(COMSPEC) /c cl /nologo /? | find "x64" >NUL ] == 0
+ARCH=x64 Release
+!ELSE
+ARCH=Win32 Release
+!ENDIF
+
+!MESSAGE ARCH = $(ARCH)
+!MESSAGE PREFIX = $(PREFIX) (install path)
+
+
+# Utility and Translation things, nothing here for the user
+#
+!IF "$(ARCH)" == "Win32 Release"
+SLNARCH=Release|Win32
+ARCHOSPATH=Release
+LIBSOSPATH=LibR
+!ELSEIF "$(ARCH)" == "Win32 Debug"
+SLNARCH=Debug|Win32
+ARCHOSPATH=Debug
+LIBSOSPATH=LibD
+!ELSEIF "$(ARCH)" == "Win32 ReleaseNT"
+SLNARCH=ReleaseNT|Win32
+ARCHOSPATH=NT\Release
+LIBSOSPATH=NT\LibR
+!ELSEIF "$(ARCH)" == "Win32 DebugNT"
+SLNARCH=DebugNT|Win32
+ARCHOSPATH=NT\Debug
+LIBSOSPATH=NT\LibD
+!ELSEIF "$(ARCH)" == "x64 Release"
+SLNARCH=Release|x64
+ARCHOSPATH=x64\Release
+LIBSOSPATH=x64\LibR
+!ELSEIF "$(ARCH)" == "x64 Debug"
+SLNARCH=Debug|x64
+ARCHOSPATH=x64\Debug
+LIBSOSPATH=x64\LibD
+!ENDIF
+
+!IFNDEF MAKEOPT
+# Only default the behavior if MAKEOPT= is omitted
+!IFDEF _NMAKE_VER
+# Microsoft NMake options
+MAKEOPT=-nologo
+!ELSEIF "$(MAKE)" == "make"
+# Borland make options? Not really supported (yet)
+MAKEOPT=-s -N
+!ENDIF
+!ENDIF
+
+
+all: buildall checkall
+
+!IF $(USEMAK) == 1
+
+clean:
+ $(MAKE) $(MAKEOPT) -f Makefile.win ARCH="$(ARCH)" \
+ CTARGET=CLEAN buildall
+
+buildall:
+ $(MAKE) $(MAKEOPT) -f apr.mak CFG="apr - $(ARCH)" RECURSE=0 $(CTARGET)
+ $(MAKE) $(MAKEOPT) -f libapr.mak CFG="libapr - $(ARCH)" RECURSE=0 $(CTARGET)
+ cd build
+ $(MAKE) $(MAKEOPT) -f apr_app.mak CFG="apr_app - $(ARCH)" RECURSE=0 $(CTARGET)
+ $(MAKE) $(MAKEOPT) -f libapr_app.mak CFG="libapr_app - $(ARCH)" RECURSE=0 $(CTARGET)
+ cd ..
+
+!ELSEIF $(USESLN) == 1
+
+clean:
+ -devenv apr.sln /useenv /clean "$(SLNARCH)" /project libapr_app
+ -devenv apr.sln /useenv /clean "$(SLNARCH)" /project libapr
+ -devenv apr.sln /useenv /clean "$(SLNARCH)" /project apr_app
+ -devenv apr.sln /useenv /clean "$(SLNARCH)" /project apr
+
+buildall:
+ devenv apr.sln /useenv /build "$(SLNARCH)" /project apr
+ devenv apr.sln /useenv /build "$(SLNARCH)" /project apr_app
+ devenv apr.sln /useenv /build "$(SLNARCH)" /project libapr
+ devenv apr.sln /useenv /build "$(SLNARCH)" /project libapr_app
+
+!ELSE
+# $(USEDSP) == 1
+
+clean:
+ -msdev apr.dsw /USEENV /MAKE "libapr_app - $(ARCH)" /CLEAN
+ -msdev apr.dsw /USEENV /MAKE "libapr - $(ARCH)" /CLEAN
+ -msdev apr.dsw /USEENV /MAKE "apr_app - $(ARCH)" /CLEAN
+ -msdev apr.dsw /USEENV /MAKE "apr - $(ARCH)" /CLEAN
+
+buildall:
+ @msdev apr.dsw /USEENV /MAKE "apr - $(ARCH)"
+ @msdev apr.dsw /USEENV /MAKE "apr_app - $(ARCH)"
+ @msdev apr.dsw /USEENV /MAKE "libapr - $(ARCH)"
+ @msdev apr.dsw /USEENV /MAKE "libapr_app - $(ARCH)"
+
+!ENDIF
+
+
+checkapr:
+ cd test
+ $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=static \
+ OUTDIR=$(LIBSOSPATH) check
+ $(MAKE) $(MAKEOPT) -f Makefile.win MODEL=dynamic \
+ OUTDIR=$(ARCHOSPATH) check
+ cd ..
+
+checkall: checkapr
+
+
+install:
+ echo Y >.y
+ echo A >.A
+ @if NOT EXIST "$(PREFIX)\." mkdir "$(PREFIX)"
+ @if NOT EXIST "$(PREFIX)\bin\." mkdir "$(PREFIX)\bin"
+ @if NOT EXIST "$(PREFIX)\include\." mkdir "$(PREFIX)\include"
+ @if NOT EXIST "$(PREFIX)\lib\." mkdir "$(PREFIX)\lib"
+ copy CHANGES "$(PREFIX)\CHANGES.txt" <.y
+ copy LICENSE "$(PREFIX)\LICENSE.txt" <.y
+ copy NOTICE "$(PREFIX)\NOTICE.txt" <.y
+ xcopy include\*.h "$(PREFIX)\include\" /d < .a
+ copy $(LIBSOSPATH)\apr-1.lib "$(PREFIX)\lib\" <.y
+ copy $(LIBSOSPATH)\apr-1.pdb "$(PREFIX)\lib\" <.y
+ copy $(ARCHOSPATH)\libapr-1.lib "$(PREFIX)\lib\" <.y
+ copy $(ARCHOSPATH)\libapr-1.exp "$(PREFIX)\lib\" <.y
+ copy $(ARCHOSPATH)\libapr-1.dll "$(PREFIX)\bin\" <.y
+ copy $(ARCHOSPATH)\libapr-1.pdb "$(PREFIX)\bin\" <.y
+ del .y
+ del .a
+
diff --git a/srclib/apr/apr.dsp b/srclib/apr/apr.dsp
index d1c1b29c..c19e30d7 100644
--- a/srclib/apr/apr.dsp
+++ b/srclib/apr/apr.dsp
@@ -4,7 +4,7 @@
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=apr - Win32 Debug
+CFG=apr - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,12 +13,16 @@ CFG=apr - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "apr.mak" CFG="apr - Win32 Debug"
+!MESSAGE NMAKE /f "apr.mak" CFG="apr - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "apr - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "apr - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr - Win32 ReleaseNT" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr - Win32 DebugNT" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr - x64 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr - x64 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
@@ -41,7 +45,7 @@ RSC=rc.exe
# PROP Intermediate_Dir "LibR"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "WIN32" /D "_WINDOWS" /Fd"LibR\apr_src" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr-1" /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@@ -64,8 +68,8 @@ LIB32=link.exe -lib
# PROP Intermediate_Dir "LibD"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "WIN32" /D "_WINDOWS" /Fd"LibD\apr_src" /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr-1" /FD /EHsc /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@@ -75,12 +79,110 @@ LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"LibD\apr-1.lib"
+!ELSEIF "$(CFG)" == "apr - Win32 ReleaseNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "NT\LibR"
+# PROP BASE Intermediate_Dir "NT\LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "NT\LibR"
+# PROP Intermediate_Dir "NT\LibR"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr-1" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"NT\LibR\apr-1.lib"
+
+!ELSEIF "$(CFG)" == "apr - Win32 DebugNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NT\LibD"
+# PROP BASE Intermediate_Dir "NT\LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "NT\LibD"
+# PROP Intermediate_Dir "NT\LibD"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr-1" /FD /EHsc /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"NT\LibD\apr-1.lib"
+
+!ELSEIF "$(CFG)" == "apr - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "x64\LibR"
+# PROP BASE Intermediate_Dir "x64\LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "x64\LibR"
+# PROP Intermediate_Dir "x64\LibR"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_STATIC" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr-1" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibR\apr-1.lib"
+
+!ELSEIF "$(CFG)" == "apr - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "x64\LibD"
+# PROP BASE Intermediate_Dir "x64\LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "x64\LibD"
+# PROP Intermediate_Dir "x64\LibD"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_STATIC" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr-1" /FD /EHsc /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibD\apr-1.lib"
+
!ENDIF
# Begin Target
# Name "apr - Win32 Release"
# Name "apr - Win32 Debug"
+# Name "apr - Win32 ReleaseNT"
+# Name "apr - Win32 DebugNT"
+# Name "apr - x64 Release"
+# Name "apr - x64 Debug"
# Begin Group "Source Files"
# PROP Default_Filter ".c"
@@ -274,10 +376,6 @@ SOURCE=.\network_io\unix\inet_pton.c
# End Source File
# Begin Source File
-SOURCE=.\poll\unix\select.c
-# End Source File
-# Begin Source File
-
SOURCE=.\network_io\unix\multicast.c
# End Source File
# Begin Source File
@@ -305,6 +403,14 @@ SOURCE=.\network_io\win32\sockopt.c
SOURCE=.\passwd\apr_getpass.c
# End Source File
# End Group
+# Begin Group "poll"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\poll\unix\select.c
+# End Source File
+# End Group
# Begin Group "random"
# PROP Default_Filter ""
@@ -507,6 +613,46 @@ InputPath=.\include\apr.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "apr - Win32 ReleaseNT"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "apr - Win32 DebugNT"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "apr - x64 Release"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "apr - x64 Debug"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -592,6 +738,10 @@ SOURCE=.\include\apr_proc_mutex.h
# End Source File
# Begin Source File
+SOURCE=.\include\apr_random.h
+# End Source File
+# Begin Source File
+
SOURCE=.\include\apr_ring.h
# End Source File
# Begin Source File
diff --git a/srclib/apr/apr.dsw b/srclib/apr/apr.dsw
index dc0871bb..6d67f340 100644
--- a/srclib/apr/apr.dsw
+++ b/srclib/apr/apr.dsw
@@ -15,7 +15,7 @@ Package=<4>
###############################################################################
-Project: "apr_app"=".\build\apr_app.dsp" - Package Owner=<4>
+Project: "aprapp"=".\build\aprapp.dsp" - Package Owner=<4>
Package=<5>
{{{
@@ -24,7 +24,7 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name apr
+ Project_Dep_Name preaprapp
End Project Dependency
}}}
@@ -42,7 +42,37 @@ Package=<4>
###############################################################################
-Project: "libapr_app"=".\build\libapr_app.dsp" - Package Owner=<4>
+Project: "libaprapp"=".\build\libaprapp.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name prelibaprapp
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "preaprapp"=".\build\preaprapp.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name apr
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "prelibaprapp"=".\build\prelibaprapp.dsp" - Package Owner=<4>
Package=<5>
{{{
diff --git a/srclib/apr/atomic/os390/atomic.c b/srclib/apr/atomic/os390/atomic.c
index 35ddf1c2..3c57668b 100644
--- a/srclib/apr/atomic/os390/atomic.c
+++ b/srclib/apr/atomic/os390/atomic.c
@@ -82,6 +82,30 @@ apr_uint32_t apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint32_t swap,
return old; /* old is automatically updated from mem on cs failure */
}
+#if APR_SIZEOF_VOIDP == 4
+void *apr_atomic_casptr(volatile void **mem_ptr,
+ void *swap_ptr,
+ const void *cmp_ptr)
+{
+ __cs1(&cmp_ptr, /* automatically updated from mem on __cs1 failure */
+ mem_ptr, /* set from swap when __cs1 succeeds */
+ &swap_ptr);
+ return (void *)cmp_ptr;
+}
+#elif APR_SIZEOF_VOIDP == 8
+void *apr_atomic_casptr(volatile void **mem_ptr,
+ void *swap_ptr,
+ const void *cmp_ptr)
+{
+ __csg(&cmp_ptr, /* automatically updated from mem on __csg failure */
+ mem_ptr, /* set from swap when __csg succeeds */
+ &swap_ptr);
+ return (void *)cmp_ptr;
+}
+#else
+#error APR_SIZEOF_VOIDP value not supported
+#endif /* APR_SIZEOF_VOIDP */
+
apr_uint32_t apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint32_t val)
{
apr_uint32_t old, new_val;
diff --git a/srclib/apr/atomic/win32/apr_atomic.c b/srclib/apr/atomic/win32/apr_atomic.c
index 9393fcb0..42c19876 100644
--- a/srclib/apr/atomic/win32/apr_atomic.c
+++ b/srclib/apr/atomic/win32/apr_atomic.c
@@ -106,7 +106,7 @@ APR_DECLARE(apr_uint32_t) apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint3
APR_DECLARE(void *) apr_atomic_casptr(volatile void **mem, void *with, const void *cmp)
{
#if (defined(_M_IA64) || defined(_M_AMD64)) && !defined(RC_INVOKED)
- return InterlockedCompareExchangePointer(mem, with, cmp);
+ return InterlockedCompareExchangePointer((void* volatile*)mem, with, (void *)cmp);
#else
/* Too many VC6 users have stale win32 API files, stub this */
return ((apr_atomic_win32_ptr_ptr_ptr_fn)InterlockedCompareExchange)(mem, with, cmp);
diff --git a/srclib/apr/build/NWGNUmakefile b/srclib/apr/build/NWGNUmakefile
index b8c94ce1..84ed7fed 100644
--- a/srclib/apr/build/NWGNUmakefile
+++ b/srclib/apr/build/NWGNUmakefile
@@ -56,13 +56,13 @@ $(APR)/include/%.h: $(subst /,\,$(APR))\include\%.hnw
@echo Creating $(subst /,\,$@)
copy $< $(subst /,\,$(APR))\include\$(@F)
-$(APRUTIL)/include/%.h: $(subst /,\,$(APRUTIL))\include\%.hnw
+$(APRUTIL)/include/private/%.h: $(subst /,\,$(APRUTIL))\include\private\%.hnw
@echo Creating $(subst /,\,$@)
- copy $< $(subst /,\,$(APRUTIL))\include\$(@F)
+ copy $< $(subst /,\,$(APRUTIL))\include\private\$(@F)
-$(APRUTIL)/include/private/%.h: $(subst /,\,$(APRUTIL))\include\private\%.hw
+$(APRUTIL)/include/%.h: $(subst /,\,$(APRUTIL))\include\%.hnw
@echo Creating $(subst /,\,$@)
- copy $< $(subst /,\,$(APRUTIL))\include\private\$(@F)
+ copy $< $(subst /,\,$(APRUTIL))\include\$(@F)
$(APRUTIL)/xml/expat/lib/%.h: $(subst /,\,$(APRUTIL))\xml\expat\lib\%.hnw
@echo Creating $(subst /,\,$@)
diff --git a/srclib/apr/build/apr_app.dsp b/srclib/apr/build/apr_app.dsp
index ac060a50..1b41f958 100644
--- a/srclib/apr/build/apr_app.dsp
+++ b/srclib/apr/build/apr_app.dsp
@@ -4,7 +4,7 @@
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=apr_app - Win32 Debug
+CFG=apr_app - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,12 +13,16 @@ CFG=apr_app - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "apr_app.mak" CFG="apr_app - Win32 Debug"
+!MESSAGE NMAKE /f "apr_app.mak" CFG="apr_app - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "apr_app - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "apr_app - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr_app - Win32 ReleaseNT" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr_app - Win32 DebugNT" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr_app - x64 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "apr_app - x64 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
@@ -41,7 +45,7 @@ RSC=rc.exe
# PROP Intermediate_Dir "LibR"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fd"LibR\apr_app_src" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr_app-1" /FD /c
# ADD BASE RSC /l 0x409
# ADD RSC /l 0x409
BSC32=bscmake.exe
@@ -65,7 +69,7 @@ LIB32=link.exe -lib
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fd"LibD\apr_app_src" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr_app-1" /FD /c
# ADD BASE RSC /l 0x409
# ADD RSC /l 0x409
BSC32=bscmake.exe
@@ -75,12 +79,110 @@ LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"LibD\apr_app-1.lib"
+!ELSEIF "$(CFG)" == "apr_app - Win32 ReleaseNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "NT\LibR"
+# PROP BASE Intermediate_Dir "NT\LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "NT\LibR"
+# PROP Intermediate_Dir "NT\LibR"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"NT\LibR\apr_app-1.lib"
+
+!ELSEIF "$(CFG)" == "apr_app - Win32 DebugNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NT\LibD"
+# PROP BASE Intermediate_Dir "NT\LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "NT\LibD"
+# PROP Intermediate_Dir "NT\LibD"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"NT\LibD\apr_app-1.lib"
+
+!ELSEIF "$(CFG)" == "apr_app - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "x64\LibR"
+# PROP BASE Intermediate_Dir "x64\LibR"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "x64\LibR"
+# PROP Intermediate_Dir "x64\LibR"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibR\apr_app-1.lib"
+
+!ELSEIF "$(CFG)" == "apr_app - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "x64\LibD"
+# PROP BASE Intermediate_Dir "x64\LibD"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "x64\LibD"
+# PROP Intermediate_Dir "x64\LibD"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /D "APR_DECLARE_STATIC" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\apr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\LibD\apr_app-1.lib"
+
!ENDIF
# Begin Target
# Name "apr_app - Win32 Release"
# Name "apr_app - Win32 Debug"
+# Name "apr_app - Win32 ReleaseNT"
+# Name "apr_app - Win32 DebugNT"
+# Name "apr_app - x64 Release"
+# Name "apr_app - x64 Debug"
# Begin Source File
SOURCE=..\misc\win32\apr_app.c
diff --git a/srclib/apr/build/apr_common.m4 b/srclib/apr/build/apr_common.m4
index 90793ee1..caae9bfa 100644
--- a/srclib/apr/build/apr_common.m4
+++ b/srclib/apr/build/apr_common.m4
@@ -959,3 +959,19 @@ fi
AC_SUBST(MKDEP)
])
+
+dnl
+dnl APR_CHECK_TYPES_COMPATIBLE(TYPE-1, TYPE-2, [ACTION-IF-TRUE])
+dnl
+dnl Try to determine whether two types are the same. Only works
+dnl for gcc and icc.
+dnl
+AC_DEFUN([APR_CHECK_TYPES_COMPATIBLE], [
+define([apr_cvname], apr_cv_typematch_[]translit([$1], [ ], [_])_[]translit([$2], [ ], [_]))
+AC_CACHE_CHECK([whether $1 and $2 are the same], apr_cvname, [
+AC_TRY_COMPILE(AC_INCLUDES_DEFAULT, [
+ int foo[0 - !__builtin_types_compatible_p($1, $2)];
+], [apr_cvname=yes
+$3], [apr_cvname=no])])
+])
+
diff --git a/srclib/apr/build/libapr_app.dsp b/srclib/apr/build/libapr_app.dsp
index 0cd962e5..b6ce86aa 100644
--- a/srclib/apr/build/libapr_app.dsp
+++ b/srclib/apr/build/libapr_app.dsp
@@ -4,7 +4,7 @@
# TARGTYPE "Win32 (x86) Static Library" 0x0104
-CFG=libapr_app - Win32 Debug
+CFG=libapr_app - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,12 +13,16 @@ CFG=libapr_app - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "libapr_app.mak" CFG="libapr_app - Win32 Debug"
+!MESSAGE NMAKE /f "libapr_app.mak" CFG="libapr_app - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libapr_app - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "libapr_app - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "libapr_app - Win32 ReleaseNT" (based on "Win32 (x86) Static Library")
+!MESSAGE "libapr_app - Win32 DebugNT" (based on "Win32 (x86) Static Library")
+!MESSAGE "libapr_app - x64 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "libapr_app - x64 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
@@ -41,7 +45,7 @@ RSC=rc.exe
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fd"Release\libapr_app_src" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\libapr_app-1" /FD /c
# ADD BASE RSC /l 0x409
# ADD RSC /l 0x409
BSC32=bscmake.exe
@@ -65,7 +69,7 @@ LIB32=link.exe -lib
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fd"Debug\libapr_app_src" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\libapr_app-1" /FD /c
# ADD BASE RSC /l 0x409
# ADD RSC /l 0x409
BSC32=bscmake.exe
@@ -75,12 +79,110 @@ LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"Debug\libapr_app-1.lib"
+!ELSEIF "$(CFG)" == "libapr_app - Win32 ReleaseNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "NT\Release"
+# PROP BASE Intermediate_Dir "NT\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "NT\Release"
+# PROP Intermediate_Dir "NT\Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\libapr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"NT\Release\libapr_app-1.lib"
+
+!ELSEIF "$(CFG)" == "libapr_app - Win32 DebugNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NT\Debug"
+# PROP BASE Intermediate_Dir "NT\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "NT\Debug"
+# PROP Intermediate_Dir "NT\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\libapr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"NT\Debug\libapr_app-1.lib"
+
+!ELSEIF "$(CFG)" == "libapr_app - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "x64\Release"
+# PROP BASE Intermediate_Dir "x64\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "x64\Release"
+# PROP Intermediate_Dir "x64\Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "NDEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\libapr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\Release\libapr_app-1.lib"
+
+!ELSEIF "$(CFG)" == "libapr_app - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "x64\Debug"
+# PROP BASE Intermediate_Dir "x64\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "x64\Debug"
+# PROP Intermediate_Dir "x64\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /I "../include/arch" /I "../include/arch/win32" /I "../include/arch/unix" /D "_DEBUG" /D "WINNT" /D "WIN32" /D "_WINDOWS" /D "APR_APP" /Fo"$(INTDIR)\" /Fd"$(OUTDIR)\libapr_app-1" /FD /c
+# ADD BASE RSC /l 0x409
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"x64\Debug\libapr_app-1.lib"
+
!ENDIF
# Begin Target
# Name "libapr_app - Win32 Release"
# Name "libapr_app - Win32 Debug"
+# Name "libapr_app - Win32 ReleaseNT"
+# Name "libapr_app - Win32 DebugNT"
+# Name "libapr_app - x64 Release"
+# Name "libapr_app - x64 Debug"
# Begin Source File
SOURCE=..\misc\win32\apr_app.c
diff --git a/srclib/apr/configure b/srclib/apr/configure
index 1745dc52..c7afc0d7 100755
--- a/srclib/apr/configure
+++ b/srclib/apr/configure
@@ -943,6 +943,7 @@ uint64_literal
stdint
bigendian
aprlfs
+ino_t_value
have_strnicmp
have_strncasecmp
have_stricmp
@@ -2230,6 +2231,9 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
## Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
## Free Software Foundation, Inc.
@@ -9539,7 +9543,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 9542 "configure"' > conftest.$ac_ext
+ echo '#line 9546 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -11857,11 +11861,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:11860: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:11864: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:11864: \$? = $ac_status" >&5
+ echo "$as_me:11868: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -12125,11 +12129,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12128: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12132: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:12132: \$? = $ac_status" >&5
+ echo "$as_me:12136: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -12229,11 +12233,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12232: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12236: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:12236: \$? = $ac_status" >&5
+ echo "$as_me:12240: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -14681,7 +14685,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 14684 "configure"
+#line 14688 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14781,7 +14785,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 14784 "configure"
+#line 14788 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -17153,11 +17157,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17156: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17160: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:17160: \$? = $ac_status" >&5
+ echo "$as_me:17164: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -17257,11 +17261,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17260: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17264: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:17264: \$? = $ac_status" >&5
+ echo "$as_me:17268: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -18827,11 +18831,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:18830: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:18834: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:18834: \$? = $ac_status" >&5
+ echo "$as_me:18838: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -18931,11 +18935,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:18934: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:18938: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:18938: \$? = $ac_status" >&5
+ echo "$as_me:18942: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -21165,11 +21169,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:21168: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:21172: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:21172: \$? = $ac_status" >&5
+ echo "$as_me:21176: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -21433,11 +21437,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:21436: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:21440: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:21440: \$? = $ac_status" >&5
+ echo "$as_me:21444: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -21537,11 +21541,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:21540: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:21544: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:21544: \$? = $ac_status" >&5
+ echo "$as_me:21548: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -24818,7 +24822,7 @@ INSTALL_SUBDIRS="none"
OBJECTS_PLATFORM='$(OBJECTS_unix)'
case $host in
- i386-ibm-aix* | *-ibm-aix1-2.* | *-ibm-aix3.* | *-ibm-aix4.1 | *-ibm-aix4.1.* | *-ibm-aix4.2 | *-ibm-aix4.2.*)
+ i386-ibm-aix* | *-ibm-aix[1-2].* | *-ibm-aix3.* | *-ibm-aix4.1 | *-ibm-aix4.1.* | *-ibm-aix4.2 | *-ibm-aix4.2.*)
OSDIR="aix"
if test "x$LDFLAGS" = "x"; then
@@ -31133,6 +31137,10 @@ _ACEOF
sendfile="0"
fi
;;
+ *darwin*)
+ # darwin semantics in 9.0.0 appear to be fubar
+ sendfile="0"
+ ;;
esac
if test "$orig_sendfile" != "$sendfile"; then
echo "sendfile support disabled to avoid system problem"
@@ -32374,243 +32382,6 @@ _ACEOF
fi
-{ echo "$as_me:$LINENO: checking for inode member of struct dirent" >&5
-echo $ECHO_N "checking for inode member of struct dirent... $ECHO_C" >&6; }
-if test "${apr_cv_dirent_inode+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-apr_cv_dirent_inode=no
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <dirent.h>
-
-int
-main ()
-{
-
-#ifdef d_ino
-#undef d_ino
-#endif
-struct dirent de; de.d_fileno;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- apr_cv_dirent_inode=d_fileno
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test "$apr_cv_dirent_inode" = "no"; then
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <dirent.h>
-
-int
-main ()
-{
-
-#ifdef d_fileno
-#undef d_fileno
-#endif
-struct dirent de; de.d_ino;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- apr_cv_dirent_inode=d_ino
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-fi
-{ echo "$as_me:$LINENO: result: $apr_cv_dirent_inode" >&5
-echo "${ECHO_T}$apr_cv_dirent_inode" >&6; }
-if test "$apr_cv_dirent_inode" != "no"; then
-
-cat >>confdefs.h <<_ACEOF
-#define DIRENT_INODE $apr_cv_dirent_inode
-_ACEOF
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for file type member of struct dirent" >&5
-echo $ECHO_N "checking for file type member of struct dirent... $ECHO_C" >&6; }
-if test "${apr_cv_dirent_type+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-apr_cv_dirent_type=no
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <dirent.h>
-
-int
-main ()
-{
-
-struct dirent de; de.d_type = DT_REG;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- apr_cv_dirent_type=d_type
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $apr_cv_dirent_type" >&5
-echo "${ECHO_T}$apr_cv_dirent_type" >&6; }
-if test "$apr_cv_dirent_type" != "no"; then
-
-cat >>confdefs.h <<_ACEOF
-#define DIRENT_TYPE $apr_cv_dirent_type
-_ACEOF
-
-fi
-
-
{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
if test "${ac_cv_header_stdc+set}" = set; then
@@ -32867,6 +32638,7 @@ fi
+
for ac_header in alloca.h \
ByteOrder.h \
conio.h \
@@ -32914,6 +32686,7 @@ for ac_header in alloca.h \
sys/file.h \
sys/ioctl.h \
sys/mman.h \
+ sys/param.h \
sys/poll.h \
sys/resource.h \
sys/select.h \
@@ -33139,6 +32912,7 @@ for aprt_i in alloca.h \
sys/file.h \
sys/ioctl.h \
sys/mman.h \
+ sys/param.h \
sys/poll.h \
sys/resource.h \
sys/select.h \
@@ -37733,6 +37507,96 @@ fi
{ echo "$as_me:$LINENO: result: $off_t_value" >&5
echo "${ECHO_T}$off_t_value" >&6; }
+# Regardless of whether _LARGEFILE64_SOURCE is used, on 32-bit
+# platforms _FILE_OFFSET_BITS will affect the size of ino_t and hence
+# the build-time ABI may be different from the apparent ABI when using
+# APR with another package which *does* define _FILE_OFFSET_BITS.
+# (Exactly as per the case above with off_t where LFS is *not* used)
+#
+# To be safe, hard-code apr_ino_t as 'unsigned long' iff that is
+# exactly the size of ino_t here; otherwise use ino_t as existing
+# releases did. To be correct, apr_ino_t should have been made an
+# ino64_t as apr_off_t is off64_t, but this can't be done now without
+# breaking ABI.
+ino_t_value=ino_t
+if test "$ac_cv_sizeof_long" = "4"; then
+
+
+{ echo "$as_me:$LINENO: checking whether ino_t and unsigned long are the same" >&5
+echo $ECHO_N "checking whether ino_t and unsigned long are the same... $ECHO_C" >&6; }
+if test "${apr_cv_typematch_ino_t_unsigned_long+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ int foo[0 - !__builtin_types_compatible_p(ino_t, unsigned long)];
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ apr_cv_typematch_ino_t_unsigned_long=yes
+ino_t_value="unsigned long"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ apr_cv_typematch_ino_t_unsigned_long=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $apr_cv_typematch_ino_t_unsigned_long" >&5
+echo "${ECHO_T}$apr_cv_typematch_ino_t_unsigned_long" >&6; }
+
+fi
+{ echo "$as_me:$LINENO: using $ino_t_value for ino_t" >&5
+echo "$as_me: using $ino_t_value for ino_t" >&6;}
+
{ echo "$as_me:$LINENO: checking size of pid_t" >&5
echo $ECHO_N "checking size of pid_t... $ECHO_C" >&6; }
if test "${ac_cv_sizeof_pid_t+set}" = set; then
@@ -38124,7 +37988,7 @@ case $host in
;;
*aix4*|*aix5*)
ssize_t_fmt='#define APR_SSIZE_T_FMT "ld"'
- size_t_fmt='#define APR_SIZE_T_FMT "ld"'
+ size_t_fmt='#define APR_SIZE_T_FMT "lu"'
;;
*beos*)
ssize_t_fmt='#define APR_SSIZE_T_FMT "ld"'
@@ -38133,7 +37997,7 @@ case $host in
*apple-darwin*)
osver=`uname -r`
case $osver in
- 0-7.*)
+ [0-7].*)
ssize_t_fmt='#define APR_SSIZE_T_FMT "d"'
;;
*)
@@ -38167,6 +38031,7 @@ esac
+
for ac_func in strnicmp
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -39203,8 +39068,11 @@ fi
if test "$dsotype" = "any"; then
- # Darwin:
- { echo "$as_me:$LINENO: checking for NSLinkModule" >&5
+ if test "$dsotype" = "any"; then
+ case $host in
+ *darwin[0-8]\.*)
+ # Original Darwin, not for 9.0!:
+ { echo "$as_me:$LINENO: checking for NSLinkModule" >&5
echo $ECHO_N "checking for NSLinkModule... $ECHO_C" >&6; }
if test "${ac_cv_func_NSLinkModule+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -39304,10 +39172,11 @@ echo "${ECHO_T}$ac_cv_func_NSLinkModule" >&6; }
if test $ac_cv_func_NSLinkModule = yes; then
dsotype=dyld
fi
-
- if test "$dsotype" = "any"; then
- # Original HP-UX:
- { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+;;
+ *-hpux[1-9]\.*|*-hpux1[01]*)
+ # shl is specific to hpux(?), and is suboptimal for 64 bit builds,
+ # and most unlikely to be the choice of 12.x developers.
+ { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; }
if test "${ac_cv_lib_dld_shl_load+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -39385,7 +39254,11 @@ fi
{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; }
if test $ac_cv_lib_dld_shl_load = yes; then
- dsotype=shl;
+ have_shl=1
+fi
+
+ if test "$ac_cv_sizeof_voidp$have_shl" = "41"; then
+ dsotype=shl;
if test "x$LIBS" = "x"; then
test "x$silent" != "xyes" && echo " setting LIBS to \"-ldld\""
LIBS="-ldld"
@@ -39406,8 +39279,15 @@ if test $ac_cv_lib_dld_shl_load = yes; then
done
fi
-fi
-
+ fi;;
+ *-os2*)
+ # several 'other's below probably belong up here. If they always
+ # use a platform implementation and shouldn't test the dlopen/dlfcn
+ # features, then bring them up here.
+ # But if they -should- optionally use dlfcn, and/or need the config
+ # detection of dlopen/dlsym, do not move them up.
+ dsotype=other ;;
+ esac
fi
# Normal POSIX:
if test "$dsotype" = "any"; then
@@ -39912,7 +39792,33 @@ fi
# Everything else:
if test "$dsotype" = "any"; then
case $host in
- *os390|*-os2*|*os400|*-aix*) dsotype=other ;;
+ *os390|*os400|*-aix*)
+ # Some -aix5 will use dl, no hassles. Keep that pattern here.
+ dsotype=other ;;
+ *-hpux*)
+ if test "$have_shl" = "1"; then
+ dsotype=shl;
+ if test "x$LIBS" = "x"; then
+ test "x$silent" != "xyes" && echo " setting LIBS to \"-ldld\""
+ LIBS="-ldld"
+ else
+ apr_addto_bugger="-ldld"
+ for i in $apr_addto_bugger; do
+ apr_addto_duplicate="0"
+ for j in $LIBS; do
+ if test "x$i" = "x$j"; then
+ apr_addto_duplicate="1"
+ break
+ fi
+ done
+ if test $apr_addto_duplicate = "0"; then
+ test "x$silent" != "xyes" && echo " adding \"$i\" to LIBS"
+ LIBS="$LIBS $i"
+ fi
+ done
+ fi
+
+ fi;;
esac
fi
fi
@@ -41996,6 +41902,1797 @@ fi
+echo "${nl}Checking for File Info Support..."
+{ echo "$as_me:$LINENO: checking for struct stat.st_blocks" >&5
+echo $ECHO_N "checking for struct stat.st_blocks... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_blocks+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_blocks)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_blocks=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_blocks)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_blocks=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_blocks=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_blocks" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_blocks" >&6; }
+if test $ac_cv_member_struct_stat_st_blocks = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_BLOCKS 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_atimensec" >&5
+echo $ECHO_N "checking for struct stat.st_atimensec... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_atimensec+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_atimensec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_atimensec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_atimensec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_atimensec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_atimensec=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atimensec" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_atimensec" >&6; }
+if test $ac_cv_member_struct_stat_st_atimensec = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_ctimensec" >&5
+echo $ECHO_N "checking for struct stat.st_ctimensec... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_ctimensec+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_ctimensec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_ctimensec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_ctimensec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_ctimensec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_ctimensec=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_ctimensec" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_ctimensec" >&6; }
+if test $ac_cv_member_struct_stat_st_ctimensec = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_CTIMENSEC 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_mtimensec" >&5
+echo $ECHO_N "checking for struct stat.st_mtimensec... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_mtimensec+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_mtimensec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_mtimensec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_mtimensec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_mtimensec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_mtimensec=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_mtimensec" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_mtimensec" >&6; }
+if test $ac_cv_member_struct_stat_st_mtimensec = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIMENSEC 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_atim.tv_nsec" >&5
+echo $ECHO_N "checking for struct stat.st_atim.tv_nsec... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_atim_tv_nsec+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_atim.tv_nsec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_atim_tv_nsec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_atim.tv_nsec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_atim_tv_nsec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_atim_tv_nsec=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atim_tv_nsec" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_atim_tv_nsec" >&6; }
+if test $ac_cv_member_struct_stat_st_atim_tv_nsec = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_ctim.tv_nsec" >&5
+echo $ECHO_N "checking for struct stat.st_ctim.tv_nsec... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_ctim_tv_nsec+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_ctim.tv_nsec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_ctim_tv_nsec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_ctim.tv_nsec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_ctim_tv_nsec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_ctim_tv_nsec=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_ctim_tv_nsec" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_ctim_tv_nsec" >&6; }
+if test $ac_cv_member_struct_stat_st_ctim_tv_nsec = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_CTIM_TV_NSEC 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_mtim.tv_nsec" >&5
+echo $ECHO_N "checking for struct stat.st_mtim.tv_nsec... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_mtim_tv_nsec+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_mtim.tv_nsec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_mtim_tv_nsec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_mtim.tv_nsec)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_mtim_tv_nsec=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_mtim_tv_nsec=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_mtim_tv_nsec" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_mtim_tv_nsec" >&6; }
+if test $ac_cv_member_struct_stat_st_mtim_tv_nsec = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_atime_n" >&5
+echo $ECHO_N "checking for struct stat.st_atime_n... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_atime_n+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_atime_n)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_atime_n=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_atime_n)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_atime_n=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_atime_n=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_atime_n" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_atime_n" >&6; }
+if test $ac_cv_member_struct_stat_st_atime_n = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_ATIME_N 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_ctime_n" >&5
+echo $ECHO_N "checking for struct stat.st_ctime_n... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_ctime_n+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_ctime_n)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_ctime_n=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_ctime_n)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_ctime_n=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_ctime_n=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_ctime_n" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_ctime_n" >&6; }
+if test $ac_cv_member_struct_stat_st_ctime_n = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_CTIME_N 1
+_ACEOF
+
+
+fi
+{ echo "$as_me:$LINENO: checking for struct stat.st_mtime_n" >&5
+echo $ECHO_N "checking for struct stat.st_mtime_n... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_stat_st_mtime_n+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (ac_aggr.st_mtime_n)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_mtime_n=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+int
+main ()
+{
+static struct stat ac_aggr;
+if (sizeof ac_aggr.st_mtime_n)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_member_struct_stat_st_mtime_n=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_member_struct_stat_st_mtime_n=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_stat_st_mtime_n" >&5
+echo "${ECHO_T}$ac_cv_member_struct_stat_st_mtime_n" >&6; }
+if test $ac_cv_member_struct_stat_st_mtime_n = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIME_N 1
+_ACEOF
+
+
+fi
+
+
+
+{ echo "$as_me:$LINENO: checking for inode member of struct dirent" >&5
+echo $ECHO_N "checking for inode member of struct dirent... $ECHO_C" >&6; }
+if test "${apr_cv_dirent_inode+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+apr_cv_dirent_inode=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <dirent.h>
+
+int
+main ()
+{
+
+#ifdef d_ino
+#undef d_ino
+#endif
+struct dirent de; de.d_fileno;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ apr_cv_dirent_inode=d_fileno
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test "$apr_cv_dirent_inode" = "no"; then
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <dirent.h>
+
+int
+main ()
+{
+
+#ifdef d_fileno
+#undef d_fileno
+#endif
+struct dirent de; de.d_ino;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ apr_cv_dirent_inode=d_ino
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $apr_cv_dirent_inode" >&5
+echo "${ECHO_T}$apr_cv_dirent_inode" >&6; }
+if test "$apr_cv_dirent_inode" != "no"; then
+
+cat >>confdefs.h <<_ACEOF
+#define DIRENT_INODE $apr_cv_dirent_inode
+_ACEOF
+
+fi
+
+
+{ echo "$as_me:$LINENO: checking for file type member of struct dirent" >&5
+echo $ECHO_N "checking for file type member of struct dirent... $ECHO_C" >&6; }
+if test "${apr_cv_dirent_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+apr_cv_dirent_type=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <dirent.h>
+
+int
+main ()
+{
+
+struct dirent de; de.d_type = DT_REG;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ apr_cv_dirent_type=d_type
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $apr_cv_dirent_type" >&5
+echo "${ECHO_T}$apr_cv_dirent_type" >&6; }
+if test "$apr_cv_dirent_type" != "no"; then
+
+cat >>confdefs.h <<_ACEOF
+#define DIRENT_TYPE $apr_cv_dirent_type
+_ACEOF
+
+fi
+
+
echo "${nl}Checking for OS UUID Support..."
@@ -46508,9 +48205,9 @@ uint64_literal!$uint64_literal$ac_delim
stdint!$stdint$ac_delim
bigendian!$bigendian$ac_delim
aprlfs!$aprlfs$ac_delim
+ino_t_value!$ino_t_value$ac_delim
have_strnicmp!$have_strnicmp$ac_delim
have_strncasecmp!$have_strncasecmp$ac_delim
-have_stricmp!$have_stricmp$ac_delim
_ACEOF
if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -46552,6 +48249,7 @@ _ACEOF
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
cat >conf$$subs.sed <<_ACEOF
+have_stricmp!$have_stricmp$ac_delim
have_strcasecmp!$have_strcasecmp$ac_delim
have_strdup!$have_strdup$ac_delim
have_strstr!$have_strstr$ac_delim
@@ -46604,7 +48302,7 @@ LIBOBJS!$LIBOBJS$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 50; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 51; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/srclib/apr/configure.in b/srclib/apr/configure.in
index 15b44eb4..6b02ec8e 100644
--- a/srclib/apr/configure.in
+++ b/srclib/apr/configure.in
@@ -359,7 +359,7 @@ INSTALL_SUBDIRS="none"
OBJECTS_PLATFORM='$(OBJECTS_unix)'
case $host in
- i386-ibm-aix* | *-ibm-aix[1-2].* | *-ibm-aix3.* | *-ibm-aix4.1 | *-ibm-aix4.1.* | *-ibm-aix4.2 | *-ibm-aix4.2.*)
+ i386-ibm-aix* | *-ibm-aix[[1-2]].* | *-ibm-aix3.* | *-ibm-aix4.1 | *-ibm-aix4.1.* | *-ibm-aix4.2 | *-ibm-aix4.2.*)
OSDIR="aix"
APR_ADDTO(LDFLAGS,-lld)
eolstr="\\n"
@@ -929,6 +929,10 @@ AC_ARG_WITH(sendfile, [ --with-sendfile Override decision to use sendfi
sendfile="0"
fi
;;
+ *darwin*)
+ # darwin semantics in 9.0.0 appear to be fubar
+ sendfile="0"
+ ;;
esac
if test "$orig_sendfile" != "$sendfile"; then
echo "sendfile support disabled to avoid system problem"
@@ -966,8 +970,6 @@ AC_SUBST(mmap)
AC_SUBST(have_memmove)
APR_CHECK_SIGWAIT_ONE_ARG
-APR_CHECK_DIRENT_INODE
-APR_CHECK_DIRENT_TYPE
dnl ----------------------------- Checks for Any required Headers
AC_HEADER_STDC
@@ -1020,6 +1022,7 @@ APR_FLAG_HEADERS(
sys/file.h \
sys/ioctl.h \
sys/mman.h \
+ sys/param.h \
sys/poll.h \
sys/resource.h \
sys/select.h \
@@ -1299,6 +1302,24 @@ else
fi
AC_MSG_RESULT($off_t_value)
+# Regardless of whether _LARGEFILE64_SOURCE is used, on 32-bit
+# platforms _FILE_OFFSET_BITS will affect the size of ino_t and hence
+# the build-time ABI may be different from the apparent ABI when using
+# APR with another package which *does* define _FILE_OFFSET_BITS.
+# (Exactly as per the case above with off_t where LFS is *not* used)
+#
+# To be safe, hard-code apr_ino_t as 'unsigned long' iff that is
+# exactly the size of ino_t here; otherwise use ino_t as existing
+# releases did. To be correct, apr_ino_t should have been made an
+# ino64_t as apr_off_t is off64_t, but this can't be done now without
+# breaking ABI.
+ino_t_value=ino_t
+if test "$ac_cv_sizeof_long" = "4"; then
+ APR_CHECK_TYPES_COMPATIBLE(ino_t, unsigned long,
+ ino_t_value="unsigned long")
+fi
+AC_MSG_NOTICE([using $ino_t_value for ino_t])
+
APR_CHECK_SIZEOF_EXTENDED([#include <sys/types.h>], pid_t, 8)
if test "$ac_cv_sizeof_pid_t" = "$ac_cv_sizeof_short"; then
@@ -1340,7 +1361,7 @@ case $host in
;;
*aix4*|*aix5*)
ssize_t_fmt='#define APR_SSIZE_T_FMT "ld"'
- size_t_fmt='#define APR_SIZE_T_FMT "ld"'
+ size_t_fmt='#define APR_SIZE_T_FMT "lu"'
;;
*beos*)
ssize_t_fmt='#define APR_SSIZE_T_FMT "ld"'
@@ -1349,7 +1370,7 @@ case $host in
*apple-darwin*)
osver=`uname -r`
case $osver in
- [0-7].*)
+ [[0-7]].*)
ssize_t_fmt='#define APR_SSIZE_T_FMT "d"'
;;
*)
@@ -1381,6 +1402,7 @@ AC_SUBST(uint64_literal)
AC_SUBST(stdint)
AC_SUBST(bigendian)
AC_SUBST(aprlfs)
+AC_SUBST(ino_t_value)
dnl ----------------------------- Checking for string functions
AC_CHECK_FUNCS(strnicmp, have_strnicmp="1", have_strnicmp="0")
@@ -1429,11 +1451,26 @@ AC_ARG_ENABLE(dso,
], [dsotype=any])
if test "$dsotype" = "any"; then
- # Darwin:
- AC_CHECK_FUNC(NSLinkModule, [dsotype=dyld])
if test "$dsotype" = "any"; then
- # Original HP-UX:
- AC_CHECK_LIB(dld, shl_load, [dsotype=shl; APR_ADDTO(LIBS,-ldld)])
+ case $host in
+ *darwin[[0-8]]\.*)
+ # Original Darwin, not for 9.0!:
+ AC_CHECK_FUNC(NSLinkModule, [dsotype=dyld]);;
+ *-hpux[[1-9]]\.*|*-hpux1[[01]]*)
+ # shl is specific to hpux(?), and is suboptimal for 64 bit builds,
+ # and most unlikely to be the choice of 12.x developers.
+ AC_CHECK_LIB(dld, shl_load, [have_shl=1])
+ if test "$ac_cv_sizeof_voidp$have_shl" = "41"; then
+ dsotype=shl; APR_ADDTO(LIBS,-ldld)
+ fi;;
+ *-os2*)
+ # several 'other's below probably belong up here. If they always
+ # use a platform implementation and shouldn't test the dlopen/dlfcn
+ # features, then bring them up here.
+ # But if they -should- optionally use dlfcn, and/or need the config
+ # detection of dlopen/dlsym, do not move them up.
+ dsotype=other ;;
+ esac
fi
# Normal POSIX:
if test "$dsotype" = "any"; then
@@ -1457,7 +1494,13 @@ if test "$dsotype" = "any"; then
# Everything else:
if test "$dsotype" = "any"; then
case $host in
- *os390|*-os2*|*os400|*-aix*) dsotype=other ;;
+ *os390|*os400|*-aix*)
+ # Some -aix5 will use dl, no hassles. Keep that pattern here.
+ dsotype=other ;;
+ *-hpux*)
+ if test "$have_shl" = "1"; then
+ dsotype=shl; APR_ADDTO(LIBS,-ldld)
+ fi;;
esac
fi
fi
@@ -1819,6 +1862,25 @@ fi
AC_SUBST(rand)
+dnl ----------------------------- Checking for File Info Support
+echo "${nl}Checking for File Info Support..."
+AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_atimensec,
+struct stat.st_ctimensec, struct stat.st_mtimensec, struct stat.st_atim.tv_nsec,
+struct stat.st_ctim.tv_nsec, struct stat.st_mtim.tv_nsec,
+struct stat.st_atime_n, struct stat.st_ctime_n, struct stat.st_mtime_n],,,[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif])
+
+APR_CHECK_DIRENT_INODE
+APR_CHECK_DIRENT_TYPE
+
dnl ----------------------------- Checking for UUID Support
echo "${nl}Checking for OS UUID Support..."
diff --git a/srclib/apr/dso/os390/dso.c b/srclib/apr/dso/os390/dso.c
index 293d0653..034ffe84 100644
--- a/srclib/apr/dso/os390/dso.c
+++ b/srclib/apr/dso/os390/dso.c
@@ -63,7 +63,7 @@ APR_DECLARE(apr_status_t) apr_dso_load(apr_dso_handle_t **res_handle,
dllhandle *handle;
int rc;
- *res_handle = apr_pcalloc(ctx, sizeof(*res_handle));
+ *res_handle = apr_pcalloc(ctx, sizeof(**res_handle));
(*res_handle)->pool = ctx;
if ((handle = dllload(path)) != NULL) {
(*res_handle)->handle = handle;
diff --git a/srclib/apr/file_io/netware/filestat.c b/srclib/apr/file_io/netware/filestat.c
index 0293b973..b344e814 100644
--- a/srclib/apr/file_io/netware/filestat.c
+++ b/srclib/apr/file_io/netware/filestat.c
@@ -58,6 +58,7 @@ static void fill_out_finfo(apr_finfo_t *finfo, struct stat *info,
{
finfo->valid = APR_FINFO_MIN | APR_FINFO_IDENT | APR_FINFO_NLINK
| APR_FINFO_OWNER | APR_FINFO_PROT;
+
finfo->protection = apr_unix_mode2perms(info->st_mode);
finfo->filetype = filetype_from_mode(info->st_mode);
finfo->user = info->st_uid;
@@ -66,15 +67,19 @@ static void fill_out_finfo(apr_finfo_t *finfo, struct stat *info,
finfo->inode = info->st_ino;
finfo->device = info->st_dev;
finfo->nlink = info->st_nlink;
+
apr_time_ansi_put(&finfo->atime, info->st_atime.tv_sec);
apr_time_ansi_put(&finfo->mtime, info->st_mtime.tv_sec);
apr_time_ansi_put(&finfo->ctime, info->st_ctime.tv_sec);
- /* ### needs to be revisited
- * if (wanted & APR_FINFO_CSIZE) {
- * finfo->csize = info->st_blocks * 512;
- * finfo->valid |= APR_FINFO_CSIZE;
- * }
- */
+
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+#ifdef DEV_BSIZE
+ finfo->csize = (apr_off_t)info->st_blocks * (apr_off_t)DEV_BSIZE;
+#else
+ finfo->csize = (apr_off_t)info->st_blocks * (apr_off_t)512;
+#endif
+ finfo->valid |= APR_FINFO_CSIZE;
+#endif
}
apr_status_t apr_file_info_get_locked(apr_finfo_t *finfo, apr_int32_t wanted,
diff --git a/srclib/apr/file_io/unix/filestat.c b/srclib/apr/file_io/unix/filestat.c
index 2779152c..93b6a2b8 100644
--- a/srclib/apr/file_io/unix/filestat.c
+++ b/srclib/apr/file_io/unix/filestat.c
@@ -81,14 +81,40 @@ static void fill_out_finfo(apr_finfo_t *finfo, struct_stat *info,
finfo->device = info->st_dev;
finfo->nlink = info->st_nlink;
apr_time_ansi_put(&finfo->atime, info->st_atime);
+#ifdef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+ finfo->atime += info->st_atim.tv_nsec / APR_TIME_C(1000);
+#elif defined(HAVE_STRUCT_STAT_ST_ATIMENSEC)
+ finfo->atime += info->st_atimensec / APR_TIME_C(1000);
+#elif defined(HAVE_STRUCT_STAT_ST_ATIME_N)
+ finfo->ctime += info->st_atime_n / APR_TIME_C(1000);
+#endif
+
apr_time_ansi_put(&finfo->mtime, info->st_mtime);
+#ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
+ finfo->mtime += info->st_mtim.tv_nsec / APR_TIME_C(1000);
+#elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC)
+ finfo->mtime += info->st_mtimensec / APR_TIME_C(1000);
+#elif defined(HAVE_STRUCT_STAT_ST_MTIME_N)
+ finfo->ctime += info->st_mtime_n / APR_TIME_C(1000);
+#endif
+
apr_time_ansi_put(&finfo->ctime, info->st_ctime);
- /* ### needs to be revisited
- * if (wanted & APR_FINFO_CSIZE) {
- * finfo->csize = info->st_blocks * 512;
- * finfo->valid |= APR_FINFO_CSIZE;
- * }
- */
+#ifdef HAVE_STRUCT_STAT_ST_CTIM_TV_NSEC
+ finfo->ctime += info->st_ctim.tv_nsec / APR_TIME_C(1000);
+#elif defined(HAVE_STRUCT_STAT_ST_CTIMENSEC)
+ finfo->ctime += info->st_ctimensec / APR_TIME_C(1000);
+#elif defined(HAVE_STRUCT_STAT_ST_CTIME_N)
+ finfo->ctime += info->st_ctime_n / APR_TIME_C(1000);
+#endif
+
+#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
+#ifdef DEV_BSIZE
+ finfo->csize = (apr_off_t)info->st_blocks * (apr_off_t)DEV_BSIZE;
+#else
+ finfo->csize = (apr_off_t)info->st_blocks * (apr_off_t)512;
+#endif
+ finfo->valid |= APR_FINFO_CSIZE;
+#endif
}
apr_status_t apr_file_info_get_locked(apr_finfo_t *finfo, apr_int32_t wanted,
diff --git a/srclib/apr/file_io/win32/filedup.c b/srclib/apr/file_io/win32/filedup.c
index 69e4d913..1f3b6b0f 100644
--- a/srclib/apr/file_io/win32/filedup.c
+++ b/srclib/apr/file_io/win32/filedup.c
@@ -20,6 +20,8 @@
#include "apr_strings.h"
#include <string.h>
#include "apr_arch_inherit.h"
+#include <io.h> /* for [_open/_get]_osfhandle */
+
APR_DECLARE(apr_status_t) apr_file_dup(apr_file_t **new_file,
apr_file_t *old_file, apr_pool_t *p)
@@ -38,7 +40,7 @@ APR_DECLARE(apr_status_t) apr_file_dup(apr_file_t **new_file,
(*new_file) = (apr_file_t *) apr_pcalloc(p, sizeof(apr_file_t));
(*new_file)->filehand = newhand;
- (*new_file)->flags = old_file->flags & ~APR_INHERIT;
+ (*new_file)->flags = old_file->flags & ~(APR_STD_FLAGS | APR_INHERIT);
(*new_file)->pool = p;
(*new_file)->fname = apr_pstrdup(p, old_file->fname);
(*new_file)->append = old_file->append;
@@ -63,10 +65,6 @@ APR_DECLARE(apr_status_t) apr_file_dup(apr_file_t **new_file,
#endif /* !defined(_WIN32_WCE) */
}
-#define stdin_handle 0x01
-#define stdout_handle 0x02
-#define stderr_handle 0x04
-
APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file,
apr_file_t *old_file, apr_pool_t *p)
{
@@ -77,34 +75,81 @@ APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file,
HANDLE hproc = GetCurrentProcess();
HANDLE newhand = NULL;
apr_int32_t newflags;
-
- /* dup2 is not supported literaly with native Windows handles.
- * We can, however, emulate dup2 for the standard i/o handles,
- * and close and replace other handles with duped handles.
- * The os_handle will change, however.
- */
- if (new_file->filehand == GetStdHandle(STD_ERROR_HANDLE)) {
- stdhandle |= stderr_handle;
- }
- if (new_file->filehand == GetStdHandle(STD_OUTPUT_HANDLE)) {
- stdhandle |= stdout_handle;
- }
- if (new_file->filehand == GetStdHandle(STD_INPUT_HANDLE)) {
- stdhandle |= stdin_handle;
- }
-
- if (stdhandle) {
- if (!DuplicateHandle(hproc, old_file->filehand,
- hproc, &newhand, 0,
- TRUE, DUPLICATE_SAME_ACCESS)) {
- return apr_get_os_error();
+ int fd;
+
+ if (new_file->flags & APR_STD_FLAGS)
+ {
+ if ((new_file->flags & APR_STD_FLAGS) == APR_STDERR_FLAG)
+ {
+ /* Flush stderr and unset its buffer, then commit the fd-based buffer.
+ * This is typically a noop for Win2K/XP since services with NULL std
+ * handles [but valid FILE *'s, oddly enough], but is required
+ * for NT 4.0 and to use this code outside of services.
+ */
+ fflush(stderr);
+ setvbuf(stderr, NULL, _IONBF, 0);
+ _commit(2 /* stderr */);
+
+ /* Clone a handle can _close() without harming the source handle,
+ * open an MSVCRT-based pseudo-fd for the file handle, then dup2
+ * and close our temporary pseudo-fd once it's been duplicated.
+ * This will incidently keep the FILE-based stderr in sync.
+ * Note the apparently redundant _O_BINARY coersions are required.
+ * Note the _dup2 will close the previous std Win32 handle.
+ */
+ if (!DuplicateHandle(hproc, old_file->filehand, hproc, &newhand,
+ 0, FALSE, DUPLICATE_SAME_ACCESS)) {
+ return apr_get_os_error();
+ }
+ fd = _open_osfhandle((INT_PTR)newhand, _O_WRONLY | _O_BINARY);
+ _dup2(fd, 2);
+ _close(fd);
+ _setmode(2, _O_BINARY);
+
+ /* hPipeWrite was _close()'ed above, and _dup2()'ed
+ * to fd 2 creating a new, inherited Win32 handle.
+ * Recover that real handle from fd 2. Note that
+ * SetStdHandle(STD_ERROR_HANDLE, _get_osfhandle(2))
+ * is implicit in the dup2() call above
+ */
+ newhand = (HANDLE)_get_osfhandle(2);
}
- if (((stdhandle & stderr_handle) && !SetStdHandle(STD_ERROR_HANDLE, newhand)) ||
- ((stdhandle & stdout_handle) && !SetStdHandle(STD_OUTPUT_HANDLE, newhand)) ||
- ((stdhandle & stdin_handle) && !SetStdHandle(STD_INPUT_HANDLE, newhand))) {
- return apr_get_os_error();
+ else if ((new_file->flags & APR_STD_FLAGS) == APR_STDOUT_FLAG) {
+ /* For the process flow see the stderr case above */
+ fflush(stdout);
+ setvbuf(stdout, NULL, _IONBF, 0);
+ _commit(1 /* stdout */);
+
+ if (!DuplicateHandle(hproc, old_file->filehand, hproc, &newhand,
+ 0, FALSE, DUPLICATE_SAME_ACCESS)) {
+ return apr_get_os_error();
+ }
+ fd = _open_osfhandle((INT_PTR)newhand, _O_WRONLY | _O_BINARY);
+ _dup2(fd, 1);
+ _close(fd);
+ _setmode(1, _O_BINARY);
+ newhand = (HANDLE)_get_osfhandle(1);
+ }
+ else if ((new_file->flags & APR_STD_FLAGS) == APR_STDIN_FLAG) {
+ /* For the process flow see the stderr case above */
+ fflush(stdin);
+ setvbuf(stdin, NULL, _IONBF, 0);
+ _commit(0 /* stdin */);
+
+ if (!DuplicateHandle(hproc, old_file->filehand, hproc, &newhand,
+ 0, FALSE, DUPLICATE_SAME_ACCESS)) {
+ return apr_get_os_error();
+ }
+ fd = _open_osfhandle((INT_PTR)newhand, _O_RDONLY | _O_BINARY);
+ _dup2(fd, 0);
+ _close(fd);
+ _setmode(0, _O_BINARY);
+ newhand = (HANDLE)_get_osfhandle(0);
}
- newflags = old_file->flags | APR_INHERIT;
+ newflags = (new_file->flags & APR_STD_FLAGS)
+ | (old_file->flags & ~APR_STD_FLAGS) | APR_INHERIT;
+
+ /* No need to close the old file, _dup2() above did that for us */
}
else {
if (!DuplicateHandle(hproc, old_file->filehand,
@@ -112,11 +157,12 @@ APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file,
FALSE, DUPLICATE_SAME_ACCESS)) {
return apr_get_os_error();
}
- newflags = old_file->flags & ~APR_INHERIT;
- }
+ newflags = old_file->flags & ~(APR_STD_FLAGS | APR_INHERIT);
- if (new_file->filehand && (new_file->filehand != INVALID_HANDLE_VALUE)) {
- CloseHandle(new_file->filehand);
+ if (new_file->filehand
+ && (new_file->filehand != INVALID_HANDLE_VALUE)) {
+ CloseHandle(new_file->filehand);
+ }
}
new_file->flags = newflags;
diff --git a/srclib/apr/file_io/win32/open.c b/srclib/apr/file_io/win32/open.c
index b3a51767..6e8221c8 100644
--- a/srclib/apr/file_io/win32/open.c
+++ b/srclib/apr/file_io/win32/open.c
@@ -31,6 +31,7 @@
#endif
#include "apr_arch_misc.h"
#include "apr_arch_inherit.h"
+#include <io.h>
#if APR_HAS_UNICODE_FS
apr_status_t utf8_to_unicode_path(apr_wchar_t* retstr, apr_size_t retlen,
@@ -227,25 +228,34 @@ apr_status_t file_cleanup(void *thefile)
if (file->filehand != INVALID_HANDLE_VALUE) {
+ if (file->buffered) {
+ /* XXX: flush here is not mutex protected */
+ flush_rv = apr_file_flush((apr_file_t *)thefile);
+ }
+
/* In order to avoid later segfaults with handle 'reuse',
* we must protect against the case that a dup2'ed handle
* is being closed, and invalidate the corresponding StdHandle
+ * We also tell msvcrt when stdhandles are closed.
*/
- if (file->filehand == GetStdHandle(STD_ERROR_HANDLE)) {
- SetStdHandle(STD_ERROR_HANDLE, INVALID_HANDLE_VALUE);
- }
- if (file->filehand == GetStdHandle(STD_OUTPUT_HANDLE)) {
- SetStdHandle(STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE);
- }
- if (file->filehand == GetStdHandle(STD_INPUT_HANDLE)) {
- SetStdHandle(STD_INPUT_HANDLE, INVALID_HANDLE_VALUE);
+ if (file->flags & APR_STD_FLAGS)
+ {
+ if ((file->flags & APR_STD_FLAGS) == APR_STDERR_FLAG) {
+ _close(2);
+ SetStdHandle(STD_ERROR_HANDLE, INVALID_HANDLE_VALUE);
+ }
+ else if ((file->flags & APR_STD_FLAGS) == APR_STDOUT_FLAG) {
+ _close(1);
+ SetStdHandle(STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE);
+ }
+ else if ((file->flags & APR_STD_FLAGS) == APR_STDIN_FLAG) {
+ _close(0);
+ SetStdHandle(STD_INPUT_HANDLE, INVALID_HANDLE_VALUE);
+ }
}
+ else
+ CloseHandle(file->filehand);
- if (file->buffered) {
- /* XXX: flush here is not mutex protected */
- flush_rv = apr_file_flush((apr_file_t *)thefile);
- }
- CloseHandle(file->filehand);
file->filehand = INVALID_HANDLE_VALUE;
}
if (file->pOverlapped && file->pOverlapped->hEvent) {
@@ -574,15 +584,11 @@ APR_DECLARE(apr_status_t) apr_file_open_stderr(apr_file_t **thefile, apr_pool_t
apr_set_os_error(APR_SUCCESS);
file_handle = GetStdHandle(STD_ERROR_HANDLE);
- if (!file_handle || (file_handle == INVALID_HANDLE_VALUE)) {
- apr_status_t rv = apr_get_os_error();
- if (rv == APR_SUCCESS) {
- return APR_EINVAL;
- }
- return rv;
- }
+ if (!file_handle)
+ file_handle = INVALID_HANDLE_VALUE;
- return apr_os_file_put(thefile, &file_handle, 0, pool);
+ return apr_os_file_put(thefile, &file_handle,
+ APR_WRITE | APR_STDERR_FLAG, pool);
#endif
}
@@ -595,15 +601,11 @@ APR_DECLARE(apr_status_t) apr_file_open_stdout(apr_file_t **thefile, apr_pool_t
apr_set_os_error(APR_SUCCESS);
file_handle = GetStdHandle(STD_OUTPUT_HANDLE);
- if (!file_handle || (file_handle == INVALID_HANDLE_VALUE)) {
- apr_status_t rv = apr_get_os_error();
- if (rv == APR_SUCCESS) {
- return APR_EINVAL;
- }
- return rv;
- }
+ if (!file_handle)
+ file_handle = INVALID_HANDLE_VALUE;
- return apr_os_file_put(thefile, &file_handle, 0, pool);
+ return apr_os_file_put(thefile, &file_handle,
+ APR_WRITE | APR_STDOUT_FLAG, pool);
#endif
}
@@ -616,15 +618,11 @@ APR_DECLARE(apr_status_t) apr_file_open_stdin(apr_file_t **thefile, apr_pool_t *
apr_set_os_error(APR_SUCCESS);
file_handle = GetStdHandle(STD_INPUT_HANDLE);
- if (!file_handle || (file_handle == INVALID_HANDLE_VALUE)) {
- apr_status_t rv = apr_get_os_error();
- if (rv == APR_SUCCESS) {
- return APR_EINVAL;
- }
- return rv;
- }
+ if (!file_handle)
+ file_handle = INVALID_HANDLE_VALUE;
- return apr_os_file_put(thefile, &file_handle, 0, pool);
+ return apr_os_file_put(thefile, &file_handle,
+ APR_READ | APR_STDIN_FLAG, pool);
#endif
}
diff --git a/srclib/apr/file_io/win32/readwrite.c b/srclib/apr/file_io/win32/readwrite.c
index ac04d5a0..65bdc5df 100644
--- a/srclib/apr/file_io/win32/readwrite.c
+++ b/srclib/apr/file_io/win32/readwrite.c
@@ -348,7 +348,7 @@ APR_DECLARE(apr_status_t) apr_file_write(apr_file_t *thefile, const void *buf, a
rv = APR_SUCCESS;
break;
case WAIT_TIMEOUT:
- rv = APR_TIMEUP;
+ rv = (timeout_ms == 0) ? APR_EAGAIN : APR_TIMEUP;
break;
case WAIT_FAILED:
rv = apr_get_os_error();
diff --git a/srclib/apr/file_io/win32/seek.c b/srclib/apr/file_io/win32/seek.c
index 2566d061..98c5ea50 100644
--- a/srclib/apr/file_io/win32/seek.c
+++ b/srclib/apr/file_io/win32/seek.c
@@ -21,7 +21,7 @@
static apr_status_t setptr(apr_file_t *thefile, apr_off_t pos )
{
- apr_size_t newbufpos;
+ apr_off_t newbufpos;
apr_status_t rv;
DWORD rc;
@@ -37,10 +37,9 @@ static apr_status_t setptr(apr_file_t *thefile, apr_off_t pos )
/* We may be truncating to size here.
* XXX: testing an 'unsigned' as >= 0 below indicates a bug
*/
- newbufpos = (apr_size_t)(pos - (thefile->filePtr
- - thefile->dataRead));
+ newbufpos = pos - (thefile->filePtr - thefile->dataRead);
- if (newbufpos >= 0 && newbufpos <= thefile->dataRead) {
+ if (newbufpos >= 0 && newbufpos <= (apr_off_t)thefile->dataRead) {
thefile->bufpos = (apr_size_t)newbufpos;
rv = APR_SUCCESS;
} else {
diff --git a/srclib/apr/helpers/apr_rename.pl b/srclib/apr/helpers/apr_rename.pl
deleted file mode 100755
index 25b9d52d..00000000
--- a/srclib/apr/helpers/apr_rename.pl
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-use ExtUtils::MakeMaker qw(prompt);
-use File::Find;
-
-my $just_check = @ARGV ? $ARGV[0] eq '-c' : 0;
-shift if $just_check;
-my $dir = shift || '.';
-my %names;
-
-my $prefix = 'apr_';
-
-while (<DATA>) {
- chomp;
- my($old, $new) = grep { s/^$prefix//o } split;
- next unless $old and $new;
- $names{$old} = $new;
-}
-
-my $pattern = join '|', keys %names;
-#print "replacement pattern=$pattern\n";
-
-find sub {
- chomp;
- return unless /\.[ch]$/;
- my $file = "$File::Find::dir/$_";
- print "looking in $file\n";
-
- replace($_, !$just_check);
-
-}, $dir;
-
-sub replace {
- my($file, $replace) = @_;
- local *IN, *OUT;
- my @lines;
- my $found = 0;
-
- open IN, $file or die "open $file: $!";
-
- while (<IN>) {
- for (m/[^_\"]*$prefix($pattern)\b/og) {
- $found++;
- print " $file:$. apr_$_ -> apr_$names{$_}\n";
- }
- push @lines, $_ if $replace;
- }
-
- close IN;
-
- return unless $found and $replace;
-
-# my $ans = prompt("replace?", 'y');
-# return unless $ans =~ /^y/i;
-
- open OUT, ">$file" or die "open $file: $!";
-
- for (@lines) {
- unless (/^\#include/) {
- s/([^_\"]*$prefix)($pattern)\b/$1$names{$2}/og;
- }
- print OUT $_;
- }
-
- close OUT;
-}
-
-__DATA__
-apr_time_t:
-apr_implode_gmt apr_time_exp_gmt_get
-
-apr_socket_t:
-apr_close_socket apr_socket_close
-apr_create_socket apr_socket_create
-apr_get_sockaddr apr_socket_addr_get
-apr_get_socketdata apr_socket_data_get
-apr_set_socketdata apr_socket_data_set
-apr_shutdown apr_socket_shutdown
-apr_bind apr_socket_bind
-apr_listen apr_socket_listen
-apr_accept apr_socket_accept
-apr_connect apr_socket_connect
-apr_send apr_socket_send
-apr_sendv apr_socket_sendv
-apr_sendto apr_socket_sendto
-apr_recvfrom apr_socket_recvfrom
-apr_sendfile apr_socket_sendfile
-apr_recv apr_socket_recv
-
-apr_filepath_*:
-apr_filename_of_pathname apr_filepath_name_get
-
-apr_gid_t:
-apr_get_groupid apr_gid_get
-apr_get_groupname apr_gid_name_get
-apr_group_name_get apr_gid_name_get
-apr_compare_groups apr_gid_compare
-
-apr_uid_t:
-apr_get_home_directory apr_uid_homepath_get
-apr_get_userid apr_uid_get
-apr_current_userid apr_uid_current
-apr_compare_users apr_uid_compare
-apr_get_username apr_uid_name_get
-apr_compare_users apr_uid_compare
-
diff --git a/srclib/apr/include/apr.h.in b/srclib/apr/include/apr.h.in
index 1341bed7..a4bb922d 100644
--- a/srclib/apr/include/apr.h.in
+++ b/srclib/apr/include/apr.h.in
@@ -272,6 +272,14 @@ typedef @size_t_value@ apr_size_t;
typedef @ssize_t_value@ apr_ssize_t;
typedef @off_t_value@ apr_off_t;
typedef @socklen_t_value@ apr_socklen_t;
+typedef @ino_t_value@ apr_ino_t;
+
+/* As we don't want to break users who author for 1.2.x, we can't
+ * present this type until they have included apr_file_info.h
+ * where it was originally declared in release 1.2.0.
+ * Mask it from accedental misuse here.
+ */
+#define apr_ino_t apr_ino_t__requires__apr_file_info_h
#define APR_SIZEOF_VOIDP @voidp_size@
diff --git a/srclib/apr/include/apr.hnw b/srclib/apr/include/apr.hnw
index 6f1e1559..19992125 100644
--- a/srclib/apr/include/apr.hnw
+++ b/srclib/apr/include/apr.hnw
@@ -255,6 +255,14 @@ typedef int apr_socklen_t;
#else
typedef size_t apr_socklen_t;
#endif
+typedef apr_uint64_t apr_ino_t;
+
+/* As we don't want to break users who author for 1.2.x, we can't
+ * present this type until they have included apr_file_info.h
+ * where it was originally declared in release 1.2.0.
+ * Mask it from accedental misuse here.
+ */
+#define apr_ino_t apr_ino_t__requires__apr_file_info_h
/* Are we big endian? */
/* XXX: Fatal assumption on Alpha platforms */
diff --git a/srclib/apr/include/apr.hw b/srclib/apr/include/apr.hw
index 60940284..c382acdb 100644
--- a/srclib/apr/include/apr.hw
+++ b/srclib/apr/include/apr.hw
@@ -345,6 +345,14 @@ typedef __int64 apr_off_t;
typedef int apr_off_t;
#endif
typedef int apr_socklen_t;
+typedef apr_uint64_t apr_ino_t;
+
+/* As we don't want to break users who author for 1.2.x, we can't
+ * present this type until they have included apr_file_info.h
+ * where it was originally declared in release 1.2.0.
+ * Mask it from accedental misuse here.
+ */
+#define apr_ino_t apr_ino_t__requires__apr_file_info_h
/* Are we big endian? */
/* XXX: Fatal assumption on Alpha platforms */
diff --git a/srclib/apr/include/apr_file_info.h b/srclib/apr/include/apr_file_info.h
index 94146f0a..297b3815 100644
--- a/srclib/apr/include/apr_file_info.h
+++ b/srclib/apr/include/apr_file_info.h
@@ -125,22 +125,24 @@ typedef struct apr_dir_t apr_dir_t;
typedef apr_int32_t apr_fileperms_t;
#if (defined WIN32) || (defined NETWARE)
/**
- * Structure for determining the inode of the file.
- */
-typedef apr_uint64_t apr_ino_t;
-/**
* Structure for determining the device the file is on.
*/
typedef apr_uint32_t apr_dev_t;
#else
-/** The inode of the file. */
-typedef ino_t apr_ino_t;
/**
* Structure for determining the device the file is on.
*/
typedef dev_t apr_dev_t;
#endif
+/* See apr.h.in (.hw or .hnw) for the declaration of apr_ino_t,
+ * but as we don't want to break users who author for 1.2.x, we
+ * can't present this type until they have included apr_file_info.h
+ * where it was originally declared in release 1.2.0.
+ * Unmask it for use here.
+ */
+#undef apr_ino_t
+
/**
* @defgroup apr_file_stat Stat Functions
* @{
diff --git a/srclib/apr/include/apr_file_io.h b/srclib/apr/include/apr_file_io.h
index 7cf7df96..34d5b3a4 100644
--- a/srclib/apr/include/apr_file_io.h
+++ b/srclib/apr/include/apr_file_io.h
@@ -724,6 +724,8 @@ APR_DECLARE(apr_status_t) apr_dir_make_recursive(const char *path,
* Remove directory from the file system.
* @param path the path for the directory to be removed. (use / on all systems)
* @param pool the pool to use.
+ * @remark Removing a directory which is in-use (e.g., the current working
+ * directory, or during apr_dir_read, or with an open file) is not portable.
*/
APR_DECLARE(apr_status_t) apr_dir_remove(const char *path, apr_pool_t *pool);
diff --git a/srclib/apr/include/apr_network_io.h b/srclib/apr/include/apr_network_io.h
index 24708c55..2d50329d 100644
--- a/srclib/apr/include/apr_network_io.h
+++ b/srclib/apr/include/apr_network_io.h
@@ -507,7 +507,11 @@ APR_DECLARE(apr_status_t) apr_socket_sendto(apr_socket_t *sock,
apr_size_t *len);
/**
- * @param from The apr_sockaddr_t to fill in the recipient info
+ * Read data from a socket. On success, the address of the peer from
+ * which the data was sent is copied into the @param from parameter,
+ * and the @param len parameter is updated to give the number of bytes
+ * written to @param buf.
+ * @param from Updated with the address from which the data was received
* @param sock The socket to use
* @param flags The flags to use
* @param buf The buffer to use
diff --git a/srclib/apr/include/apr_shm.h b/srclib/apr/include/apr_shm.h
index 4875ee1f..2b1d50f6 100644
--- a/srclib/apr/include/apr_shm.h
+++ b/srclib/apr/include/apr_shm.h
@@ -71,13 +71,19 @@ APR_DECLARE(apr_status_t) apr_shm_create(apr_shm_t **m,
apr_pool_t *pool);
/**
- * Remove shared memory segment associated with a filename.
+ * Remove named resource associated with a shared memory segment,
+ * preventing attachments to the resource, but not destroying it.
* @param filename The filename associated with shared-memory segment which
* needs to be removed
* @param pool The pool used for file operations
* @remark This function is only supported on platforms which support
* name-based shared memory segments, and will return APR_ENOTIMPL on
- * platforms without such support.
+ * platforms without such support. Removing the file while the shm
+ * is in use is not entirely portable, caller may use this to enhance
+ * obscurity of the resource, but be prepared for the the call to fail,
+ * and for concurrent attempts to create a resource of the same name
+ * to also fail. The pool cleanup of apr_shm_create (apr_shm_destroy)
+ * also removes the named resource.
*/
APR_DECLARE(apr_status_t) apr_shm_remove(const char *filename,
apr_pool_t *pool);
diff --git a/srclib/apr/include/apr_version.h b/srclib/apr/include/apr_version.h
index 0f6d5c84..71859fd6 100644
--- a/srclib/apr/include/apr_version.h
+++ b/srclib/apr/include/apr_version.h
@@ -59,7 +59,7 @@
* The Patch Level never includes API changes, simply bug fixes.
* Reset to 0 when upgrading APR_MINOR_VERSION
*/
-#define APR_PATCH_VERSION 11
+#define APR_PATCH_VERSION 12
/**
* The symbol APR_IS_DEV_VERSION is only defined for internal,
diff --git a/srclib/apr/include/arch/unix/apr_arch_file_io.h b/srclib/apr/include/arch/unix/apr_arch_file_io.h
index 4311082e..4216e131 100644
--- a/srclib/apr/include/arch/unix/apr_arch_file_io.h
+++ b/srclib/apr/include/arch/unix/apr_arch_file_io.h
@@ -70,6 +70,10 @@
#ifdef BEOS
#include <kernel/OS.h>
#endif
+/* Hunting down DEV_BSIZE if not from dirent.h, sys/stat.h etc */
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
#if BEOS_BONE
# ifndef BONE7
diff --git a/srclib/apr/include/arch/unix/apr_private.h.in b/srclib/apr/include/arch/unix/apr_private.h.in
index 72d30658..94689637 100644
--- a/srclib/apr/include/arch/unix/apr_private.h.in
+++ b/srclib/apr/include/arch/unix/apr_private.h.in
@@ -452,6 +452,36 @@
/* Define if struct impreq was found */
#undef HAVE_STRUCT_IPMREQ
+/* Define to 1 if `st_atimensec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
+
+/* Define to 1 if `st_atime_n' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIME_N
+
+/* Define to 1 if `st_atim.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+
+/* Define to 1 if `st_blocks' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BLOCKS
+
+/* Define to 1 if `st_ctimensec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_CTIMENSEC
+
+/* Define to 1 if `st_ctime_n' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_CTIME_N
+
+/* Define to 1 if `st_ctim.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_CTIM_TV_NSEC
+
+/* Define to 1 if `st_mtimensec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIMENSEC
+
+/* Define to 1 if `st_mtime_n' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIME_N
+
+/* Define to 1 if `st_mtim.tv_nsec' is member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
+
/* Define to 1 if `tm_gmtoff' is member of `struct tm'. */
#undef HAVE_STRUCT_TM_TM_GMTOFF
@@ -479,6 +509,9 @@
/* Define to 1 if you have the <sys/mutex.h> header file. */
#undef HAVE_SYS_MUTEX_H
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
/* Define to 1 if you have the <sys/poll.h> header file. */
#undef HAVE_SYS_POLL_H
diff --git a/srclib/apr/include/arch/win32/apr_arch_file_io.h b/srclib/apr/include/arch/win32/apr_arch_file_io.h
index 66b86668..776dc169 100644
--- a/srclib/apr/include/arch/win32/apr_arch_file_io.h
+++ b/srclib/apr/include/arch/win32/apr_arch_file_io.h
@@ -97,8 +97,13 @@ void *res_name_from_filename(const char *file, int global, apr_pool_t *pool);
#define APR_OPENINFO 0x00100000 /* Open without READ or WRITE access */
#define APR_OPENLINK 0x00200000 /* Open a link itself, if supported */
#define APR_READCONTROL 0x00400000 /* Read the file's owner/perms */
-#define APR_WRITECONTROL 0x00800000 /* Modifythe file's owner/perms */
-#define APR_WRITEATTRS 0x01000000 /* Modify the file's attributes */
+#define APR_WRITECONTROL 0x00800000 /* Modify the file's owner/perms */
+/* #define APR_INHERIT 0x01000000 -- Defined in apr_arch_inherit.h! */
+#define APR_STDIN_FLAG 0x02000000 /* Obtained via apr_file_open_stdin() */
+#define APR_STDOUT_FLAG 0x04000000 /* Obtained via apr_file_open_stdout() */
+#define APR_STDERR_FLAG 0x06000000 /* Obtained via apr_file_open_stderr() */
+#define APR_STD_FLAGS (APR_STDIN_FLAG | APR_STDOUT_FLAG | APR_STDERR_FLAG)
+#define APR_WRITEATTRS 0x08000000 /* Modify the file's attributes */
/* Entries missing from the MSVC 5.0 Win32 SDK:
*/
diff --git a/srclib/apr/include/arch/win32/apr_arch_misc.h b/srclib/apr/include/arch/win32/apr_arch_misc.h
index 6db6a1b9..5113e955 100644
--- a/srclib/apr/include/arch/win32/apr_arch_misc.h
+++ b/srclib/apr/include/arch/win32/apr_arch_misc.h
@@ -291,16 +291,13 @@ APR_DECLARE_LATE_DLL_FUNC(DLL_NTDLL, DWORD, WINAPI, NtSetTimerResolution, 0, (
(ReqRes, Acquire, pNewRes));
#define SetTimerResolution apr_winapi_NtSetTimerResolution
-/* ### These are ULONG_PTR values, but that's int32 for all we care
- * until the Win64 port is prepared.
- */
typedef struct PBI {
- DWORD ExitStatus;
- PVOID PebBaseAddress;
- ULONG AffinityMask;
- LONG BasePriority;
- ULONG UniqueProcessId;
- ULONG InheritedFromUniqueProcessId;
+ LONG ExitStatus;
+ PVOID PebBaseAddress;
+ ULONG_PTR AffinityMask;
+ LONG BasePriority;
+ ULONG_PTR UniqueProcessId;
+ ULONG_PTR InheritedFromUniqueProcessId;
} PBI, *PPBI;
APR_DECLARE_LATE_DLL_FUNC(DLL_NTDLL, DWORD, WINAPI, NtQueryInformationProcess, 0, (
diff --git a/srclib/apr/libapr.dsp b/srclib/apr/libapr.dsp
index 373ac5a7..a92cf2b5 100644
--- a/srclib/apr/libapr.dsp
+++ b/srclib/apr/libapr.dsp
@@ -4,7 +4,7 @@
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-CFG=libapr - Win32 Debug
+CFG=libapr - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
@@ -13,12 +13,16 @@ CFG=libapr - Win32 Debug
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "libapr.mak" CFG="libapr - Win32 Debug"
+!MESSAGE NMAKE /f "libapr.mak" CFG="libapr - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libapr - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "libapr - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libapr - Win32 ReleaseNT" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libapr - Win32 DebugNT" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libapr - x64 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libapr - x64 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
@@ -43,19 +47,19 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /Oy- /Zi /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_EXPORT" /D "WIN32" /D "_WINDOWS" /Fd"Release\libapr_src" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_EXPORT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libapr_src" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG" /d "APR_VERSION_ONLY" /I "./include"
+# ADD RSC /l 0x409 /i "./include" /d "NDEBUG" /d "APR_VERSION_ONLY"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /opt:ref
-# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:".\Release\libapr-1.dll" /opt:ref
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:"Release\libapr-1.dll" /pdb:"Release\libapr-1.pdb" /implib:"Release\libapr-1.lib" /MACHINE:X86 /opt:ref
# Begin Special Build Tool
-TargetPath=.\Release\libapr-1.dll
+TargetPath=Release\libapr-1.dll
SOURCE="$(InputPath)"
PostBuild_Desc=Embed .manifest
PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
@@ -74,20 +78,148 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_EXPORT" /D "WIN32" /D "_WINDOWS" /Fd"Debug\libapr_src" /FD /c
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_EXPORT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libapr_src" /FD /EHsc /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "APR_VERSION_ONLY" /I "./include"
+# ADD RSC /l 0x409 /i "./include" /d "_DEBUG" /d "APR_VERSION_ONLY"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:".\Debug\libapr-1.dll"
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:"Debug\libapr-1.dll" /pdb:"Debug\libapr-1.pdb" /implib:"Debug\libapr-1.lib" /MACHINE:X86
# Begin Special Build Tool
-TargetPath=.\Debug\libapr-1.dll
+TargetPath=Debug\libapr-1.dll
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "libapr - Win32 ReleaseNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "NT\Release"
+# PROP BASE Intermediate_Dir "NT\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "NT\Release"
+# PROP Intermediate_Dir "NT\Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_EXPORT" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libapr_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /i "./include" /d "NDEBUG" /d "APR_VERSION_ONLY"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /opt:ref
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:"NT\Release\libapr-1.dll" /pdb:"NT\Release\libapr-1.pdb" /implib:"NT\Release\libapr-1.lib" /MACHINE:X86 /opt:ref
+# Begin Special Build Tool
+TargetPath=NT\Release\libapr.dll
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "libapr - Win32 DebugNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NT\Debug"
+# PROP BASE Intermediate_Dir "NT\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "NT\Debug"
+# PROP Intermediate_Dir "NT\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_EXPORT" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libapr_src" /FD /EHsc /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /i "./include" /d "_DEBUG" /d "APR_VERSION_ONLY"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:"NT\Debug\libapr-1.dll" /pdb:"NT\Debug\libapr-1.pdb" /implib:"NT\Debug\libapr-1.lib" /MACHINE:X86
+# Begin Special Build Tool
+TargetPath=NT\Debug\libapr-1.dll
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "libapr - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "x64\Release"
+# PROP BASE Intermediate_Dir "x64\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "x64\Release"
+# PROP Intermediate_Dir "x64\Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FD /c
+# ADD CPP /nologo /MD /W3 /Zi /O2 /Oy- /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "NDEBUG" /D "APR_DECLARE_EXPORT" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libapr_src" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /i "./include" /d "NDEBUG" /d "APR_VERSION_ONLY"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /opt:ref
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:"x64\Release\libapr-1.dll" /pdb:"x64\Release\libapr-1.pdb" /implib:"x64\Release\libapr-1.lib" /MACHINE:X64 /opt:ref
+# Begin Special Build Tool
+TargetPath=x64\Release\libapr-1.dll
+SOURCE="$(InputPath)"
+PostBuild_Desc=Embed .manifest
+PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "libapr - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "x64\Debug"
+# PROP BASE Intermediate_Dir "x64\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "x64\Debug"
+# PROP Intermediate_Dir "x64\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FD /EHsc /c
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "./include" /I "./include/arch" /I "./include/arch/win32" /I "./include/arch/unix" /D "_DEBUG" /D "APR_DECLARE_EXPORT" /D "WINNT" /D "WIN32" /D "_WINDOWS" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\libapr_src" /FD /EHsc /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o /win32 "NUL"
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /i "./include" /d "_DEBUG" /d "APR_VERSION_ONLY"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib ws2_32.lib mswsock.lib ole32.lib shell32.lib rpcrt4.lib /nologo /base:"0x6EEC0000" /subsystem:windows /dll /incremental:no /debug /out:"x64\Debug\libapr-1.dll" /pdb:"x64\Debug\libapr-1.pdb" /implib:"x64\Debug\libapr-1.lib" /MACHINE:X64
+# Begin Special Build Tool
+TargetPath=x64\Debug\libapr-1.dll
SOURCE="$(InputPath)"
PostBuild_Desc=Embed .manifest
PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
@@ -99,6 +231,10 @@ PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).ma
# Name "libapr - Win32 Release"
# Name "libapr - Win32 Debug"
+# Name "libapr - Win32 ReleaseNT"
+# Name "libapr - Win32 DebugNT"
+# Name "libapr - x64 Release"
+# Name "libapr - x64 Debug"
# Begin Group "Source Files"
# PROP Default_Filter ".c"
@@ -292,10 +428,6 @@ SOURCE=.\network_io\unix\inet_pton.c
# End Source File
# Begin Source File
-SOURCE=.\poll\unix\select.c
-# End Source File
-# Begin Source File
-
SOURCE=.\network_io\unix\multicast.c
# End Source File
# Begin Source File
@@ -323,6 +455,14 @@ SOURCE=.\network_io\win32\sockopt.c
SOURCE=.\passwd\apr_getpass.c
# End Source File
# End Group
+# Begin Group "poll"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\poll\unix\select.c
+# End Source File
+# End Group
# Begin Group "random"
# PROP Default_Filter ""
@@ -525,6 +665,46 @@ InputPath=.\include\apr.hw
# End Custom Build
+!ELSEIF "$(CFG)" == "libapr - Win32 ReleaseNT"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libapr - Win32 DebugNT"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libapr - x64 Release"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "libapr - x64 Debug"
+
+# Begin Custom Build - Creating apr.h from apr.hw
+InputPath=.\include\apr.hw
+
+".\include\apr.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ type .\include\apr.hw > .\include\apr.h
+
+# End Custom Build
+
!ENDIF
# End Source File
@@ -610,6 +790,10 @@ SOURCE=.\include\apr_proc_mutex.h
# End Source File
# Begin Source File
+SOURCE=.\include\apr_random.h
+# End Source File
+# Begin Source File
+
SOURCE=.\include\apr_ring.h
# End Source File
# Begin Source File
diff --git a/srclib/apr/memory/unix/apr_pools.c b/srclib/apr/memory/unix/apr_pools.c
index 4faf2aac..2e3d5378 100644
--- a/srclib/apr/memory/unix/apr_pools.c
+++ b/srclib/apr/memory/unix/apr_pools.c
@@ -62,16 +62,39 @@
/*
* Allocator
+ *
+ * @note The max_free_index and current_free_index fields are not really
+ * indices, but quantities of BOUNDARY_SIZE big memory blocks.
*/
struct apr_allocator_t {
+ /** largest used index into free[], always < MAX_INDEX */
apr_uint32_t max_index;
+ /** Total size (in BOUNDARY_SIZE multiples) of unused memory before
+ * blocks are given back. @see apr_allocator_max_free_set().
+ * @note Initialized to APR_ALLOCATOR_MAX_FREE_UNLIMITED,
+ * which means to never give back blocks.
+ */
apr_uint32_t max_free_index;
+ /**
+ * Memory size (in BOUNDARY_SIZE multiples) that currently must be freed
+ * before blocks are given back. Range: 0..max_free_index
+ */
apr_uint32_t current_free_index;
#if APR_HAS_THREADS
apr_thread_mutex_t *mutex;
#endif /* APR_HAS_THREADS */
apr_pool_t *owner;
+ /**
+ * Lists of free nodes. Slot 0 is used for oversized nodes,
+ * and the slots 1..MAX_INDEX-1 contain nodes of sizes
+ * (i+1) * BOUNDARY_SIZE. Example for BOUNDARY_INDEX == 12:
+ * slot 0: nodes larger than 81920
+ * slot 1: size 8192
+ * slot 2: size 12288
+ * ...
+ * slot 19: size 81920
+ */
apr_memnode_t *free[MAX_INDEX];
};
@@ -345,7 +368,10 @@ void allocator_free(apr_allocator_t *allocator, apr_memnode_t *node)
max_index = index;
}
allocator->free[index] = node;
- current_free_index -= index;
+ if (current_free_index >= index)
+ current_free_index -= index;
+ else
+ current_free_index = 0;
}
else {
/* This node is too large to keep in a specific size bucket,
@@ -353,7 +379,10 @@ void allocator_free(apr_allocator_t *allocator, apr_memnode_t *node)
*/
node->next = allocator->free[0];
allocator->free[0] = node;
- current_free_index -= index;
+ if (current_free_index >= index)
+ current_free_index -= index;
+ else
+ current_free_index = 0;
}
} while ((node = next) != NULL);
diff --git a/srclib/apr/misc/unix/rand.c b/srclib/apr/misc/unix/rand.c
index 7af77eb5..c1e1e8f6 100644
--- a/srclib/apr/misc/unix/rand.c
+++ b/srclib/apr/misc/unix/rand.c
@@ -101,7 +101,10 @@ APR_DECLARE(apr_status_t) apr_generate_random_bytes(unsigned char *buf,
if ((fd = open(DEV_RANDOM, O_RDONLY)) == -1)
return errno;
- rc = read(fd, buf, length);
+ do {
+ rc = read(fd, buf, length);
+ } while (rc == -1 && errno == EINTR);
+
if (rc < 0) {
int errnum = errno;
close(fd);
diff --git a/srclib/apr/misc/win32/env.c b/srclib/apr/misc/win32/env.c
index abb983d7..644f59b8 100644
--- a/srclib/apr/misc/win32/env.c
+++ b/srclib/apr/misc/win32/env.c
@@ -78,12 +78,9 @@ APR_DECLARE(apr_status_t) apr_env_get(char **value,
wvalue = apr_palloc(pool, size * sizeof(*wvalue));
size = GetEnvironmentVariableW(wenvvar, wvalue, size);
- if (size == 0)
- /* Mid-air collision?. Somebody must've changed the env. var. */
- return APR_INCOMPLETE;
inchars = wcslen(wvalue) + 1;
- outchars = 3 * inchars; /* Enougn for any UTF-8 representation */
+ outchars = 3 * inchars; /* Enough for any UTF-8 representation */
val = apr_palloc(pool, outchars);
status = apr_conv_ucs2_to_utf8(wvalue, &inchars, val, &outchars);
if (status)
diff --git a/srclib/apr/mmap/unix/common.c b/srclib/apr/mmap/unix/common.c
index a9789928..1172f3c8 100644
--- a/srclib/apr/mmap/unix/common.c
+++ b/srclib/apr/mmap/unix/common.c
@@ -32,8 +32,8 @@
APR_DECLARE(apr_status_t) apr_mmap_offset(void **addr, apr_mmap_t *mmap,
apr_off_t offset)
-{
- if (offset < 0 || offset > mmap->size)
+{
+ if (offset < 0 || (apr_size_t)offset > mmap->size)
return APR_EINVAL;
(*addr) = (char *) mmap->mm + offset;
diff --git a/srclib/apr/network_io/unix/inet_pton.c b/srclib/apr/network_io/unix/inet_pton.c
index 22b15390..d41f7496 100644
--- a/srclib/apr/network_io/unix/inet_pton.c
+++ b/srclib/apr/network_io/unix/inet_pton.c
@@ -223,8 +223,8 @@ inet_pton6(const char *src, unsigned char *dst)
* Since some memmove()'s erroneously fail to handle
* overlapping regions, we'll do the shift by hand.
*/
- const int n = tp - colonp;
- int i;
+ const apr_ssize_t n = tp - colonp;
+ apr_ssize_t i;
for (i = 1; i <= n; i++) {
endp[- i] = colonp[n - i];
diff --git a/srclib/apr/network_io/unix/multicast.c b/srclib/apr/network_io/unix/multicast.c
index df98b5a7..8e8ac5ce 100644
--- a/srclib/apr/network_io/unix/multicast.c
+++ b/srclib/apr/network_io/unix/multicast.c
@@ -57,11 +57,13 @@ static void fill_mip_v4(struct ip_mreq *mip, apr_sockaddr_t *mcast,
}
}
-#if APR_HAVE_IPV6
+/* This function is only interested in AF_INET6 sockets, so a noop
+ * "return 0" implementation for the !APR_HAVE_IPV6 build is
+ * sufficient. */
static unsigned int find_if_index(const apr_sockaddr_t *iface)
{
unsigned int index = 0;
-#ifdef HAVE_GETIFADDRS
+#if defined(HAVE_GETIFADDRS) && APR_HAVE_IPV6
struct ifaddrs *ifp, *ifs;
/**
@@ -92,6 +94,7 @@ static unsigned int find_if_index(const apr_sockaddr_t *iface)
return index;
}
+#if APR_HAVE_IPV6
static void fill_mip_v6(struct ipv6_mreq *mip, const apr_sockaddr_t *mcast,
const apr_sockaddr_t *iface)
{
@@ -203,7 +206,7 @@ static apr_status_t do_mcast(int type, apr_socket_t *sock,
fill_mip_v6(&mip6, mcast, iface);
if (setsockopt(sock->socketdes, IPPROTO_IPV6, type,
- &mip6, sizeof(mip6)) == -1) {
+ (const void *) &mip6, sizeof(mip6)) == -1) {
rv = errno;
}
}
@@ -237,7 +240,7 @@ static apr_status_t do_mcast_opt(int type, apr_socket_t *sock,
unsigned int loopopt = value;
type = IPV6_MULTICAST_LOOP;
if (setsockopt(sock->socketdes, IPPROTO_IPV6, type,
- &loopopt, sizeof(loopopt)) == -1) {
+ (const void *) &loopopt, sizeof(loopopt)) == -1) {
rv = errno;
}
}
@@ -323,7 +326,7 @@ APR_DECLARE(apr_status_t) apr_mcast_interface(apr_socket_t *sock,
else if (sock_is_ipv6(sock)) {
unsigned int idx = find_if_index(iface);
if (setsockopt(sock->socketdes, IPPROTO_IPV6, IPV6_MULTICAST_IF,
- &idx, sizeof(idx)) == -1) {
+ (const void *) &idx, sizeof(idx)) == -1) {
rv = errno;
}
}
diff --git a/srclib/apr/network_io/unix/sendrecv.c b/srclib/apr/network_io/unix/sendrecv.c
index ec33a326..beb281db 100644
--- a/srclib/apr/network_io/unix/sendrecv.c
+++ b/srclib/apr/network_io/unix/sendrecv.c
@@ -148,6 +148,8 @@ apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock,
apr_size_t *len)
{
apr_ssize_t rv;
+
+ from->salen = sizeof(from->sa);
do {
rv = recvfrom(sock->socketdes, buf, (*len), flags,
@@ -172,6 +174,9 @@ apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock,
return errno;
}
+ apr_sockaddr_vars_set(from, from->sa.sin.sin_family,
+ ntohs(from->sa.sin.sin_port));
+
(*len) = rv;
if (rv == 0 && sock->type == SOCK_STREAM) {
return APR_EOF;
diff --git a/srclib/apr/network_io/win32/sendrecv.c b/srclib/apr/network_io/win32/sendrecv.c
index faab51d4..80adccdd 100644
--- a/srclib/apr/network_io/win32/sendrecv.c
+++ b/srclib/apr/network_io/win32/sendrecv.c
@@ -190,12 +190,18 @@ APR_DECLARE(apr_status_t) apr_socket_recvfrom(apr_sockaddr_t *from,
{
apr_ssize_t rv;
+ from->salen = sizeof(from->sa);
+
rv = recvfrom(sock->socketdes, buf, (int)*len, flags,
(struct sockaddr*)&from->sa, &from->salen);
if (rv == SOCKET_ERROR) {
(*len) = 0;
return apr_get_netos_error();
}
+
+ apr_sockaddr_vars_set(from, from->sa.sin.sin_family,
+ ntohs(from->sa.sin.sin_port));
+
(*len) = rv;
if (rv == 0 && sock->type == SOCK_STREAM)
return APR_EOF;
diff --git a/srclib/apr/random/unix/apr_random.c b/srclib/apr/random/unix/apr_random.c
index f574b590..41887d4b 100644
--- a/srclib/apr/random/unix/apr_random.c
+++ b/srclib/apr/random/unix/apr_random.c
@@ -219,7 +219,7 @@ APR_DECLARE(void) apr_random_add_entropy(apr_random_t *g,const void *entropy_,
p->pool[p->bytes++] = entropy[n];
if (p->bytes == g->rehash_size) {
- unsigned int r;
+ apr_size_t r;
for (r = 0; r < p->bytes/2; r+=g->pool_hash->size)
hash(g->pool_hash,p->pool+r,p->pool+r*2,g->pool_hash->size*2);
@@ -246,7 +246,7 @@ static void apr_random_bytes(apr_random_t *g,unsigned char *random,
apr_size_t n;
for (n = 0; n < bytes; ) {
- int l;
+ apr_size_t l;
if (g->random_bytes == 0) {
apr_random_block(g,g->randomness);
diff --git a/srclib/apr/renames_pending b/srclib/apr/renames_pending
deleted file mode 100644
index ca007a72..00000000
--- a/srclib/apr/renames_pending
+++ /dev/null
@@ -1,39 +0,0 @@
-Pending symbol renames for APR [for some discussion yet]
-
-apr_file_info_t from apr_finfo_t
-apr_file_attrs_t from apr_fileattrs_t
-apr_file_seek_where_t from apr_seek_where_t
-
-#apr_filepath_name_get from apr_filename_of_pathname
-
-apr_lock_mech_e from apr_lockmech_e
-
-#apr_gid_get from apr_get_groupid
-#apr_gid_name_get from apr_get_groupname
-#apr_gid_name_get from apr_group_name_get
-#apr_gid_compare from apr_compare_groups
-
-#apr_socket_shutdown from apr_shutdown
-#apr_socket_bind from apr_bind
-#apr_socket_listen from apr_listen
-#apr_socket_accept from apr_accept
-#apr_socket_connect from apr_connect
-#apr_socket_send from apr_send
-#apr_socket_sendv from apr_sendv
-#apr_socket_sendto from apr_sendto
-#apr_socket_recvfrom from apr_recvfrom
-#apr_socket_sendfile from apr_sendfile
-#apr_socket_recv from apr_recv
-#apr_socket_inherit_set from apr_socket_set_inherit
-#apr_socket_inherit_unset from apr_socket_unset_inherit
-
-
-#apr_time_exp_gmt_get from apr_implode_gmt
-apr_time_interval_t from apr_interval_time_t
-apr_time_interval_short_t from apr_short_interval_time_t
-
-#apr_uid_homepath_get from apr_get_home_directory
-#apr_uid_get from apr_get_userid
-#apr_uid_current from apr_current_userid
-#apr_uid_compare from apr_compare_users
-#apr_uid_name_get from apr_get_username
diff --git a/srclib/apr/shmem/win32/shm.c b/srclib/apr/shmem/win32/shm.c
index a7260bdb..7bce1331 100644
--- a/srclib/apr/shmem/win32/shm.c
+++ b/srclib/apr/shmem/win32/shm.c
@@ -40,10 +40,10 @@ static apr_status_t shm_cleanup(void* shm)
apr_status_t rv = APR_SUCCESS;
apr_shm_t *m = shm;
- if (UnmapViewOfFile(m->memblk)) {
+ if (!UnmapViewOfFile(m->memblk)) {
rv = apr_get_os_error();
}
- if (CloseHandle(m->hMap)) {
+ if (!CloseHandle(m->hMap)) {
return (rv != APR_SUCCESS) ? rv : apr_get_os_error();
}
/* ### Do we want to make a point of unlinking m->file here?
diff --git a/srclib/apr/strings/apr_snprintf.c b/srclib/apr/strings/apr_snprintf.c
index 74bdb951..46673080 100644
--- a/srclib/apr/strings/apr_snprintf.c
+++ b/srclib/apr/strings/apr_snprintf.c
@@ -51,19 +51,19 @@ typedef enum {
#ifndef TRUE
#define TRUE 1
#endif
-#define NUL '\0'
-#define WIDE_INT long
-
-typedef WIDE_INT wide_int;
-typedef unsigned WIDE_INT u_wide_int;
-typedef apr_int64_t widest_int;
-#ifdef __TANDEM
-/* Although Tandem supports "long long" there is no unsigned variant. */
-typedef unsigned long u_widest_int;
-#else
-typedef apr_uint64_t u_widest_int;
+
+/* For APR 1.2.x only (solved globally in 1.3.0) to be portable
+ * to non-2's compliment architectures, fall through to the 64
+ * bit code path for the signed or unsigned value 0x...80000000
+ */
+#ifndef INT32_MIN
+#define INT32_MIN -(0x7fffffff)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX 0x7fffffff
#endif
-typedef int bool_int;
+
+#define NUL '\0'
#define S_NULL "(null)"
#define S_NULL_LEN 6
@@ -337,15 +337,14 @@ while (width > len)
* (conv_10_quad), the other when we don't (conv_10). We're assuming the
* latter is faster.
*/
-static char *conv_10(register wide_int num, register bool_int is_unsigned,
- register bool_int *is_negative, char *buf_end,
+static char *conv_10(register apr_int32_t num, register int is_unsigned,
+ register int *is_negative, char *buf_end,
register apr_size_t *len)
{
register char *p = buf_end;
- register u_wide_int magnitude;
+ register apr_uint32_t magnitude = num;
if (is_unsigned) {
- magnitude = (u_wide_int) num;
*is_negative = FALSE;
}
else {
@@ -361,19 +360,16 @@ static char *conv_10(register wide_int num, register bool_int is_unsigned,
* d. add 1
*/
if (*is_negative) {
- wide_int t = num + 1;
-
- magnitude = ((u_wide_int) -t) + 1;
+ apr_int32_t t = num + 1;
+ magnitude = ((apr_uint32_t) -t) + 1;
}
- else
- magnitude = (u_wide_int) num;
}
/*
* We use a do-while loop so that we write at least 1 digit
*/
do {
- register u_wide_int new_magnitude = magnitude / 10;
+ register apr_uint32_t new_magnitude = magnitude / 10;
*--p = (char) (magnitude - new_magnitude * 10 + '0');
magnitude = new_magnitude;
@@ -384,25 +380,23 @@ static char *conv_10(register wide_int num, register bool_int is_unsigned,
return (p);
}
-static char *conv_10_quad(widest_int num, register bool_int is_unsigned,
- register bool_int *is_negative, char *buf_end,
+static char *conv_10_quad(apr_int64_t num, register int is_unsigned,
+ register int *is_negative, char *buf_end,
register apr_size_t *len)
{
register char *p = buf_end;
- u_widest_int magnitude;
+ apr_uint64_t magnitude = num;
/*
* We see if we can use the faster non-quad version by checking the
* number against the largest long value it can be. If <=, we
* punt to the quicker version.
*/
- if (((u_widest_int)num <= (u_widest_int)ULONG_MAX && is_unsigned)
- || (num <= LONG_MAX && num >= LONG_MIN && !is_unsigned))
- return(conv_10( (wide_int)num, is_unsigned, is_negative,
- buf_end, len));
+ if ((magnitude <= APR_UINT32_MAX && is_unsigned)
+ || (num <= INT32_MAX && num >= INT32_MIN && !is_unsigned))
+ return(conv_10((apr_int32_t)num, is_unsigned, is_negative, buf_end, len));
if (is_unsigned) {
- magnitude = (u_widest_int) num;
*is_negative = FALSE;
}
else {
@@ -418,19 +412,16 @@ static char *conv_10_quad(widest_int num, register bool_int is_unsigned,
* d. add 1
*/
if (*is_negative) {
- widest_int t = num + 1;
-
- magnitude = ((u_widest_int) -t) + 1;
+ apr_int64_t t = num + 1;
+ magnitude = ((apr_uint64_t) -t) + 1;
}
- else
- magnitude = (u_widest_int) num;
}
/*
* We use a do-while loop so that we write at least 1 digit
*/
do {
- u_widest_int new_magnitude = magnitude / 10;
+ apr_uint64_t new_magnitude = magnitude / 10;
*--p = (char) (magnitude - new_magnitude * 10 + '0');
magnitude = new_magnitude;
@@ -441,13 +432,11 @@ static char *conv_10_quad(widest_int num, register bool_int is_unsigned,
return (p);
}
-
-
static char *conv_in_addr(struct in_addr *ia, char *buf_end, apr_size_t *len)
{
unsigned addr = ntohl(ia->s_addr);
char *p = buf_end;
- bool_int is_negative;
+ int is_negative;
apr_size_t sub_len;
p = conv_10((addr & 0x000000FF) , TRUE, &is_negative, p, &sub_len);
@@ -463,11 +452,12 @@ static char *conv_in_addr(struct in_addr *ia, char *buf_end, apr_size_t *len)
}
-
+/* Must be passed a buffer of size NUM_BUF_SIZE where buf_end points
+ * to 1 byte past the end of the buffer. */
static char *conv_apr_sockaddr(apr_sockaddr_t *sa, char *buf_end, apr_size_t *len)
{
char *p = buf_end;
- bool_int is_negative;
+ int is_negative;
apr_size_t sub_len;
char *ipaddr_str;
@@ -528,7 +518,7 @@ static char *conv_os_thread_t(apr_os_thread_t *tid, char *buf_end, apr_size_t *l
* in buf).
*/
static char *conv_fp(register char format, register double num,
- boolean_e add_dp, int precision, bool_int *is_negative,
+ boolean_e add_dp, int precision, int *is_negative,
char *buf, apr_size_t *len)
{
register char *s = buf;
@@ -584,12 +574,12 @@ static char *conv_fp(register char format, register double num,
if (format != 'f') {
char temp[EXPONENT_LENGTH]; /* for exponent conversion */
apr_size_t t_len;
- bool_int exponent_is_negative;
+ int exponent_is_negative;
*s++ = format; /* either e or E */
decimal_point--;
if (decimal_point != 0) {
- p = conv_10((wide_int) decimal_point, FALSE, &exponent_is_negative,
+ p = conv_10((apr_int32_t) decimal_point, FALSE, &exponent_is_negative,
&temp[EXPONENT_LENGTH], &t_len);
*s++ = exponent_is_negative ? '-' : '+';
@@ -626,7 +616,7 @@ static char *conv_fp(register char format, register double num,
* As with conv_10, we have a faster version which is used when
* the number isn't quad size.
*/
-static char *conv_p2(register u_wide_int num, register int nbits,
+static char *conv_p2(register apr_uint32_t num, register int nbits,
char format, char *buf_end, register apr_size_t *len)
{
register int mask = (1 << nbits) - 1;
@@ -645,7 +635,7 @@ static char *conv_p2(register u_wide_int num, register int nbits,
return (p);
}
-static char *conv_p2_quad(u_widest_int num, register int nbits,
+static char *conv_p2_quad(apr_uint64_t num, register int nbits,
char format, char *buf_end, register apr_size_t *len)
{
register int mask = (1 << nbits) - 1;
@@ -654,8 +644,8 @@ static char *conv_p2_quad(u_widest_int num, register int nbits,
static const char upper_digits[] = "0123456789ABCDEF";
register const char *digits = (format == 'X') ? upper_digits : low_digits;
- if (num <= ULONG_MAX)
- return(conv_p2((u_wide_int)num, nbits, format, buf_end, len));
+ if (num <= APR_UINT32_MAX)
+ return(conv_p2((apr_uint32_t)num, nbits, format, buf_end, len));
do {
*--p = digits[num & mask];
@@ -714,10 +704,10 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
char prefix_char;
double fp_num;
- widest_int i_quad = (widest_int) 0;
- u_widest_int ui_quad;
- wide_int i_num = (wide_int) 0;
- u_wide_int ui_num;
+ apr_int64_t i_quad = 0;
+ apr_uint64_t ui_quad;
+ apr_int32_t i_num = 0;
+ apr_uint32_t ui_num;
char num_buf[NUM_BUF_SIZE];
char char_buf[2]; /* for printing %% and %<unknown> */
@@ -735,7 +725,7 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
boolean_e print_blank;
boolean_e adjust_precision;
boolean_e adjust_width;
- bool_int is_negative;
+ int is_negative;
sp = vbuff->curpos;
bep = vbuff->endpos;
@@ -868,17 +858,17 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
switch (*fmt) {
case 'u':
if (var_type == IS_QUAD) {
- i_quad = va_arg(ap, u_widest_int);
+ i_quad = va_arg(ap, apr_uint64_t);
s = conv_10_quad(i_quad, 1, &is_negative,
&num_buf[NUM_BUF_SIZE], &s_len);
}
else {
if (var_type == IS_LONG)
- i_num = (wide_int) va_arg(ap, u_wide_int);
+ i_num = (apr_int32_t) va_arg(ap, apr_uint32_t);
else if (var_type == IS_SHORT)
- i_num = (wide_int) (unsigned short) va_arg(ap, unsigned int);
+ i_num = (apr_int32_t) (unsigned short) va_arg(ap, unsigned int);
else
- i_num = (wide_int) va_arg(ap, unsigned int);
+ i_num = (apr_int32_t) va_arg(ap, unsigned int);
s = conv_10(i_num, 1, &is_negative,
&num_buf[NUM_BUF_SIZE], &s_len);
}
@@ -888,17 +878,17 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
case 'd':
case 'i':
if (var_type == IS_QUAD) {
- i_quad = va_arg(ap, widest_int);
+ i_quad = va_arg(ap, apr_int64_t);
s = conv_10_quad(i_quad, 0, &is_negative,
&num_buf[NUM_BUF_SIZE], &s_len);
}
else {
if (var_type == IS_LONG)
- i_num = (wide_int) va_arg(ap, wide_int);
+ i_num = va_arg(ap, apr_int32_t);
else if (var_type == IS_SHORT)
- i_num = (wide_int) (short) va_arg(ap, int);
+ i_num = (short) va_arg(ap, int);
else
- i_num = (wide_int) va_arg(ap, int);
+ i_num = va_arg(ap, int);
s = conv_10(i_num, 0, &is_negative,
&num_buf[NUM_BUF_SIZE], &s_len);
}
@@ -915,17 +905,17 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
case 'o':
if (var_type == IS_QUAD) {
- ui_quad = va_arg(ap, u_widest_int);
+ ui_quad = va_arg(ap, apr_uint64_t);
s = conv_p2_quad(ui_quad, 3, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
}
else {
if (var_type == IS_LONG)
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
+ ui_num = va_arg(ap, apr_uint32_t);
else if (var_type == IS_SHORT)
- ui_num = (u_wide_int) (unsigned short) va_arg(ap, unsigned int);
+ ui_num = (unsigned short) va_arg(ap, unsigned int);
else
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
+ ui_num = va_arg(ap, unsigned int);
s = conv_p2(ui_num, 3, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
}
@@ -940,17 +930,17 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
case 'x':
case 'X':
if (var_type == IS_QUAD) {
- ui_quad = va_arg(ap, u_widest_int);
+ ui_quad = va_arg(ap, apr_uint64_t);
s = conv_p2_quad(ui_quad, 4, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
}
else {
if (var_type == IS_LONG)
- ui_num = (u_wide_int) va_arg(ap, u_wide_int);
+ ui_num = va_arg(ap, apr_uint32_t);
else if (var_type == IS_SHORT)
- ui_num = (u_wide_int) (unsigned short) va_arg(ap, unsigned int);
+ ui_num = (unsigned short) va_arg(ap, unsigned int);
else
- ui_num = (u_wide_int) va_arg(ap, unsigned int);
+ ui_num = va_arg(ap, unsigned int);
s = conv_p2(ui_num, 4, *fmt,
&num_buf[NUM_BUF_SIZE], &s_len);
}
@@ -1029,7 +1019,7 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
#endif
if (!s) {
s = conv_fp(*fmt, fp_num, alternate_form,
- (adjust_precision == NO) ? FLOAT_DIGITS : precision,
+ (int)((adjust_precision == NO) ? FLOAT_DIGITS : precision),
&is_negative, &num_buf[1], &s_len);
if (is_negative)
prefix_char = '-';
@@ -1050,7 +1040,7 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
/*
* * We use &num_buf[ 1 ], so that we have room for the sign
*/
- s = apr_gcvt(va_arg(ap, double), precision, &num_buf[1],
+ s = apr_gcvt(va_arg(ap, double), (int) precision, &num_buf[1],
alternate_form);
if (*s == '-')
prefix_char = *s++;
@@ -1088,7 +1078,7 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
case 'n':
if (var_type == IS_QUAD)
- *(va_arg(ap, widest_int *)) = cc;
+ *(va_arg(ap, apr_int64_t *)) = cc;
else if (var_type == IS_LONG)
*(va_arg(ap, long *)) = cc;
else if (var_type == IS_SHORT)
@@ -1112,14 +1102,14 @@ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *),
*/
case 'p':
#if APR_SIZEOF_VOIDP == 8
- if (sizeof(void *) <= sizeof(u_widest_int)) {
- ui_quad = (u_widest_int) va_arg(ap, void *);
+ if (sizeof(void *) <= sizeof(apr_uint64_t)) {
+ ui_quad = (apr_uint64_t) va_arg(ap, void *);
s = conv_p2_quad(ui_quad, 4, 'x',
&num_buf[NUM_BUF_SIZE], &s_len);
}
#else
- if (sizeof(void *) <= sizeof(u_wide_int)) {
- ui_num = (u_wide_int) va_arg(ap, void *);
+ if (sizeof(void *) <= sizeof(apr_uint32_t)) {
+ ui_num = (apr_uint32_t) va_arg(ap, void *);
s = conv_p2(ui_num, 4, 'x',
&num_buf[NUM_BUF_SIZE], &s_len);
}
diff --git a/srclib/apr/test/Makefile.in b/srclib/apr/test/Makefile.in
index 4e4640d6..a54117b5 100644
--- a/srclib/apr/test/Makefile.in
+++ b/srclib/apr/test/Makefile.in
@@ -4,23 +4,49 @@ VPATH = @srcdir@
# PROGRAMS includes all test programs built on this platform.
# STDTEST_PORTABLE
# test programs invoked via standard user interface, run on all platforms
+# TESTS
+# test modules invoked through the abts suite (./testall)
# STDTEST_NONPORTABLE
# test programs invoked via standard user interface, not portable
# OTHER_PROGRAMS
# programs such as sendfile, that have to be invoked in a special sequence
# or with special parameters
+# TESTALL_COMPONENTS
+# programs such as globalmutexchild which the various TESTS will invoke
+# to validate process creation, pipes, dso mechansims and so forth
STDTEST_PORTABLE = \
testlockperf@EXEEXT@ \
testmutexscope@EXEEXT@ \
testall@EXEEXT@
+TESTS = testtime.lo teststr.lo testvsn.lo testipsub.lo \
+ testmmap.lo testud.lo testtable.lo testsleep.lo testpools.lo \
+ testfmt.lo testfile.lo testdir.lo testfileinfo.lo testrand.lo \
+ testdso.lo testoc.lo testdup.lo testsockets.lo testproc.lo \
+ testpoll.lo testlock.lo testsockopt.lo testpipe.lo testthread.lo \
+ testhash.lo testargs.lo testnames.lo testuser.lo testpath.lo \
+ testenv.lo testprocmutex.lo testrand2.lo testfnmatch.lo \
+ testatomic.lo testflock.lo testshm.lo testsock.lo testglobalmutex.lo \
+ teststrnatcmp.lo testfilecopy.lo testtemp.lo testlfs.lo
+
OTHER_PROGRAMS = \
- sendfile@EXEEXT@ \
+ sendfile@EXEEXT@
+
+TESTALL_COMPONENTS = \
+ globalmutexchild@EXEEXT@ \
+ libmod_test.la \
+ mod_test.la \
+ occhild@EXEEXT@ \
+ proc_child@EXEEXT@ \
+ readchild@EXEEXT@ \
+ sockchild@EXEEXT@ \
testshmproducer@EXEEXT@ \
- testshmconsumer@EXEEXT@
+ testshmconsumer@EXEEXT@ \
+ tryread@EXEEXT@
-PROGRAMS = $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE) $(OTHER_PROGRAMS)
+PROGRAMS = $(TESTALL_COMPONENTS) $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE) \
+ $(OTHER_PROGRAMS)
TARGETS = $(PROGRAMS)
@@ -29,10 +55,9 @@ TARGETS = $(PROGRAMS)
LOCAL_LIBS=../lib@APR_LIBNAME@.la
-CLEAN_TARGETS = testfile.tmp mod_test.slo proc_child@EXEEXT@ occhild@EXEEXT@ \
- readchild@EXEEXT@ tryread@EXEEXT@ sockchild@EXEEXT@ \
- globalmutexchild@EXEEXT@ lfstests/large.bin \
+CLEAN_TARGETS = testfile.tmp lfstests/large.bin \
data/test*.txt data/test*.dat
+
CLEAN_SUBDIRS = internal
INCDIR=../include
@@ -40,78 +65,96 @@ INCLUDES=-I$(INCDIR) -I$(srcdir)/../include
# link programs using -no-install to get real executables not
# libtool wrapper scripts which link an executable when first run.
-LINK_PROG = $(LIBTOOL) $(LTFLAGS) --mode=link $(LT_LDFLAGS) $(COMPILE) @LT_NO_INSTALL@ $(ALL_LDFLAGS) -o $@
+LINK_PROG = $(LIBTOOL) $(LTFLAGS) --mode=link $(LT_LDFLAGS) $(COMPILE) \
+ @LT_NO_INSTALL@ $(ALL_LDFLAGS) -o $@
-check: $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE)
- for prog in $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE); do \
- ./$$prog; \
- if test $$? = 255; then \
- echo "$$prog failed"; \
- break; \
- fi; \
- done
+# STDTEST_PORTABLE;
-occhild@EXEEXT@: occhild.lo $(LOCAL_LIBS)
- $(LINK_PROG) occhild.lo $(LOCAL_LIBS) $(ALL_LIBS)
+abts.lo: $(srcdir)/abts.c $(srcdir)/abts.h $(srcdir)/abts_tests.h \
+ $(srcdir)/testutil.h
-sockchild@EXEEXT@: sockchild.lo $(LOCAL_LIBS)
- $(LINK_PROG) sockchild.lo $(LOCAL_LIBS) $(ALL_LIBS)
+testutil.lo: $(srcdir)/abts.c $(srcdir)/abts.h $(srcdir)/abts_tests.h \
+ $(srcdir)/testutil.h
-readchild@EXEEXT@: readchild.lo $(LOCAL_LIBS)
- $(LINK_PROG) readchild.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_testall = abts.lo testutil.lo $(TESTS) $(LOCAL_LIBS)
+testall@EXEEXT@: $(OBJECTS_testall)
+ $(LINK_PROG) $(OBJECTS_testall) $(ALL_LIBS)
+# For VPATH builds; where we have no ./data, copy us some data
+# if we wait until 'make check', then 'make; ./testall' fails;
+ if test ! -d "./data"; then cp -r $(srcdir)/data data; fi
-globalmutexchild@EXEEXT@: globalmutexchild.lo $(LOCAL_LIBS)
- $(LINK_PROG) globalmutexchild.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_testlockperf = testlockperf.lo $(LOCAL_LIBS)
+testlockperf@EXEEXT@: $(OBJECTS_testlockperf)
+ $(LINK_PROG) $(OBJECTS_testlockperf) $(ALL_LIBS)
-tryread@EXEEXT@: tryread.lo $(LOCAL_LIBS)
- $(LINK_PROG) tryread.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_testmutexscope = testmutexscope.lo $(LOCAL_LIBS)
+testmutexscope@EXEEXT@: $(OBJECTS_testmutexscope)
+ $(LINK_PROG) $(OBJECTS_testmutexscope) $(ALL_LIBS)
-proc_child@EXEEXT@: proc_child.lo $(LOCAL_LIBS)
- $(LINK_PROG) proc_child.lo $(LOCAL_LIBS) $(ALL_LIBS)
+# OTHER_PROGRAMS;
-# FIXME: -prefer-pic is only supported with libtool-1.4+
-mod_test.slo: $(srcdir)/mod_test.c
- $(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE) -prefer-pic -c $(srcdir)/mod_test.c && touch $@
+OBJECTS_sendfile = sendfile.lo $(LOCAL_LIBS)
+sendfile@EXEEXT@: $(OBJECTS_sendfile)
+ $(LINK_PROG) $(OBJECTS_sendfile) $(ALL_LIBS)
-mod_test.la: mod_test.slo $(LOCAL_LIBS)
- $(LIBTOOL) $(LTFLAGS) --mode=link $(COMPILE) -rpath `pwd` -avoid-version -module mod_test.lo $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@
+# TESTALL_COMPONENTS;
-libmod_test.la: mod_test.slo $(LOCAL_LIBS)
- $(LIBTOOL) $(LTFLAGS) --mode=link $(COMPILE) -rpath `pwd` -avoid-version mod_test.lo $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@ $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_globalmutexchild = globalmutexchild.lo $(LOCAL_LIBS)
+globalmutexchild@EXEEXT@: $(OBJECTS_globalmutexchild)
+ $(LINK_PROG) $(OBJECTS_globalmutexchild) $(ALL_LIBS)
-testlockperf@EXEEXT@: testlockperf.lo $(LOCAL_LIBS)
- $(LINK_PROG) testlockperf.lo $(LOCAL_LIBS) $(ALL_LIBS)
+# Note: -prefer-pic is only supported with libtool-1.4+
+mod_test.lo: $(srcdir)/mod_test.c
+ $(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE) -prefer-pic -o $@ \
+ -c $(srcdir)/mod_test.c
-sendfile@EXEEXT@: sendfile.lo $(LOCAL_LIBS)
- $(LINK_PROG) sendfile.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_mod_test = mod_test.lo
+mod_test.la: $(OBJECTS_mod_test)
+ $(LIBTOOL) $(LTFLAGS) --mode=link $(COMPILE) -rpath `pwd` -module \
+ -avoid-version $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@ \
+ $(OBJECTS_mod_test)
-testshmproducer@EXEEXT@: testshmproducer.lo $(LOCAL_LIBS)
- $(LINK_PROG) testshmproducer.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_libmod_test = mod_test.lo $(LOCAL_LIBS)
+libmod_test.la: $(OBJECTS_libmod_test)
+ $(LIBTOOL) $(LTFLAGS) --mode=link $(COMPILE) -rpath `pwd` \
+ -avoid-version $(LT_LDFLAGS) $(ALL_LDFLAGS) -o $@ \
+ $(OBJECTS_libmod_test) $(ALL_LIBS)
-testshmconsumer@EXEEXT@: testshmconsumer.lo $(LOCAL_LIBS)
- $(LINK_PROG) testshmconsumer.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_occhild = occhild.lo $(LOCAL_LIBS)
+occhild@EXEEXT@: $(OBJECTS_occhild)
+ $(LINK_PROG) $(OBJECTS_occhild) $(ALL_LIBS)
-testprocmutex@EXEEXT@: testprocmutex.lo $(LOCAL_LIBS)
- $(LINK_PROG) testprocmutex.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_proc_child = proc_child.lo $(LOCAL_LIBS)
+proc_child@EXEEXT@: $(OBJECTS_proc_child)
+ $(LINK_PROG) $(OBJECTS_proc_child) $(ALL_LIBS)
-testmutexscope@EXEEXT@: testmutexscope.lo $(LOCAL_LIBS)
- $(LINK_PROG) testmutexscope.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_readchild = readchild.lo $(LOCAL_LIBS)
+readchild@EXEEXT@: $(OBJECTS_readchild)
+ $(LINK_PROG) $(OBJECTS_readchild) $(ALL_LIBS)
-TESTS = testutil.lo testtime.lo teststr.lo testvsn.lo testipsub.lo \
- testmmap.lo testud.lo testtable.lo testsleep.lo testpools.lo \
- testfmt.lo testfile.lo testdir.lo testfileinfo.lo testrand.lo \
- testdso.lo testoc.lo testdup.lo testsockets.lo testproc.lo \
- testpoll.lo testlock.lo testsockopt.lo testpipe.lo testthread.lo \
- testhash.lo testargs.lo testnames.lo testuser.lo testpath.lo \
- testenv.lo testprocmutex.lo testrand2.lo testfnmatch.lo \
- testatomic.lo testflock.lo testshm.lo testsock.lo testglobalmutex.lo \
- teststrnatcmp.lo testfilecopy.lo testtemp.lo testlfs.lo
+OBJECTS_sockchild = sockchild.lo $(LOCAL_LIBS)
+sockchild@EXEEXT@: $(OBJECTS_sockchild)
+ $(LINK_PROG) $(OBJECTS_sockchild) $(ALL_LIBS)
+
+OBJECTS_testshmconsumer = testshmconsumer.lo $(LOCAL_LIBS)
+testshmconsumer@EXEEXT@: $(OBJECTS_testshmconsumer) $(LOCAL_LIBS)
+ $(LINK_PROG) $(OBJECTS_testshmconsumer) $(ALL_LIBS)
+
+OBJECTS_testshmproducer = testshmproducer.lo $(LOCAL_LIBS)
+testshmproducer@EXEEXT@: $(OBJECTS_testshmproducer)
+ $(LINK_PROG) $(OBJECTS_testshmproducer) $(ALL_LIBS)
-testall@EXEEXT@: $(TESTS) mod_test.la libmod_test.la occhild@EXEEXT@ \
- readchild@EXEEXT@ abts.lo proc_child@EXEEXT@ \
- tryread@EXEEXT@ sockchild@EXEEXT@ globalmutexchild@EXEEXT@ \
- $(LOCAL_LIBS)
- $(LINK_PROG) $(TESTS) abts.lo $(LOCAL_LIBS) $(ALL_LIBS)
+OBJECTS_tryread = tryread.lo $(LOCAL_LIBS)
+tryread@EXEEXT@: $(OBJECTS_tryread)
+ $(LINK_PROG) $(OBJECTS_tryread) $(ALL_LIBS)
+check: $(TESTALL_COMPONENTS) $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE)
+ for prog in $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE); do \
+ ./$$prog; \
+ if test $$? = 255; then \
+ echo "$$prog failed"; \
+ break; \
+ fi; \
+ done
# DO NOT REMOVE
diff --git a/srclib/apr/test/Makefile.win b/srclib/apr/test/Makefile.win
index 0594694d..019124fb 100644
--- a/srclib/apr/test/Makefile.win
+++ b/srclib/apr/test/Makefile.win
@@ -1,22 +1,113 @@
# PROGRAMS includes all test programs built on this platform.
# STDTEST_PORTABLE
# test programs invoked via standard user interface, run on all platforms
+# TESTS
+# test modules invoked through the abts suite (./testall)
# STDTEST_NONPORTABLE
# test programs invoked via standard user interface, not portable
# OTHER_PROGRAMS
# programs such as sendfile, that have to be invoked in a special sequence
# or with special parameters
+# TESTALL_COMPONENTS
+# programs such as globalmutexchild which the various TESTS will invoke
+# to validate process creation, pipes, dso mechansims and so forth
+
+# Windows Specific;
+# MODEL
+# dynamic or static - refers to which set of bindings are desired
+# and controls which libraries (apr-1 or libapr-1) will be linked.
+# OUTDIR
+# the library path of the libraries, and also the path within test/
+# where all of the tests for that library will be built
+
+!IFNDEF MODEL
+MODEL=dynamic
+!ENDIF
+
+INCDIR=../include
+
+!IFNDEF OUTDIR
+!IF "$(MODEL)" == "static"
+OUTDIR=LibR
+!ELSE
+OUTDIR=Release
+!ENDIF
+
+!IF [$(COMSPEC) /c cl /nologo /? | find "x64" >NUL ] == 0
+OUTDIR=x64\$(OUTDIR)
+!ENDIF
+!ENDIF
+
+!IF !EXIST("$(OUTDIR)\.")
+!IF ([$(COMSPEC) /C mkdir $(OUTDIR)] == 0)
+!ENDIF
+!ENDIF
+
+!IFNDEF INTDIR
+INTDIR=$(OUTDIR)
+!ELSE
+!IF !EXIST("$(INTDIR)\.")
+!IF ([$(COMSPEC) /C mkdir $(INTDIR)] == 0)
+!ENDIF
+!ENDIF
+!ENDIF
+
+!MESSAGE Building tests into $(OUTDIR) for $(MODEL)
STDTEST_PORTABLE = \
- testlockperf.exe \
- testshmproducer.exe \
- testshmconsumer.exe \
- testmutexscope.exe \
- testall.exe
+ $(OUTDIR)\testapp.exe \
+ $(OUTDIR)\testall.exe \
+ $(OUTDIR)\testlockperf.exe \
+ $(OUTDIR)\testmutexscope.exe
+
+OTHER_PROGRAMS = \
+ $(OUTDIR)\sendfile.exe
+
+TESTALL_COMPONENTS = \
+ $(OUTDIR)\mod_test.dll \
+ $(OUTDIR)\occhild.exe \
+ $(OUTDIR)\readchild.exe \
+ $(OUTDIR)\proc_child.exe \
+ $(OUTDIR)\tryread.exe \
+ $(OUTDIR)\sockchild.exe \
+ $(OUTDIR)\testshmproducer.exe \
+ $(OUTDIR)\testshmconsumer.exe \
+ $(OUTDIR)\globalmutexchild.exe
+
+ALL_TESTS = $(INTDIR)\testutil.obj $(INTDIR)\testtime.obj \
+ $(INTDIR)\teststr.obj $(INTDIR)\testvsn.obj \
+ $(INTDIR)\testipsub.obj $(INTDIR)\testmmap.obj \
+ $(INTDIR)\testud.obj $(INTDIR)\testtable.obj \
+ $(INTDIR)\testsleep.obj $(INTDIR)\testpools.obj \
+ $(INTDIR)\testfmt.obj $(INTDIR)\testfile.obj \
+ $(INTDIR)\testdir.obj $(INTDIR)\testfileinfo.obj \
+ $(INTDIR)\testrand.obj $(INTDIR)\testdso.obj \
+ $(INTDIR)\testoc.obj $(INTDIR)\testdup.obj \
+ $(INTDIR)\testsockets.obj $(INTDIR)\testproc.obj \
+ $(INTDIR)\testpoll.obj $(INTDIR)\testlock.obj \
+ $(INTDIR)\testsockopt.obj $(INTDIR)\testpipe.obj \
+ $(INTDIR)\testthread.obj $(INTDIR)\testhash.obj \
+ $(INTDIR)\testargs.obj $(INTDIR)\testnames.obj \
+ $(INTDIR)\testuser.obj $(INTDIR)\testpath.obj \
+ $(INTDIR)\testenv.obj $(INTDIR)\testprocmutex.obj \
+ $(INTDIR)\testfnmatch.obj $(INTDIR)\testatomic.obj \
+ $(INTDIR)\testflock.obj $(INTDIR)\testshm.obj \
+ $(INTDIR)\testsock.obj $(INTDIR)\testglobalmutex.obj \
+ $(INTDIR)\teststrnatcmp.obj $(INTDIR)\testfilecopy.obj \
+ $(INTDIR)\testtemp.obj $(INTDIR)\testlfs.obj \
+ $(INTDIR)\testrand2.obj
+
+CLEAN_DATA = testfile.tmp lfstests\large.bin \
+ data\testputs.txt data\testbigfprintf.dat \
+ data\testwritev.txt data\testwritev_full.txt \
+ data\testflush.dat data\testxthread.dat \
+ data\apr.testshm.shm
-OTHER_PROGRAMS = sendfile.exe
+CLEAN_BUILDDIRS = Debug Release LibD LibR 9x x64
-PROGRAMS = $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE) $(OTHER_PROGRAMS)
+TEST_SUBDIRS = internal
+
+PROGRAMS = $(TESTALL_COMPONENTS) $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE) $(OTHER_PROGRAMS)
TARGETS = $(PROGRAMS)
@@ -24,95 +115,142 @@ TARGETS = $(PROGRAMS)
ALL: $(TARGETS)
CL = cl.exe
+LD = link.exe
-CFLAGS = /nologo /c /MDd /W3 /Gm /EHsc /Zi /Od /D _DEBUG /D WIN32 /D APR_DECLARE_STATIC /FD
+!IF "$(MODEL)" == "static"
+LOCAL_LIB= ..\$(OUTDIR)\apr-1.lib
+APP_LIB= ..\build\$(OUTDIR)\apr_app-1.lib
+STATIC_CFLAGS = /D APR_DECLARE_STATIC
+!ELSE
+LOCAL_LIB= ..\$(OUTDIR)\libapr-1.lib
+APP_LIB= ..\build\$(OUTDIR)\libapr_app-1.lib
+STATIC_CFLAGS =
+!ENDIF
-.c.obj::
- $(CL) -c $< $(CFLAGS) $(INCLUDES)
+!IFDEF _DEBUG
+DEBUG_CFLAGS = /MDd
+!ELSE
+DEBUG_CFLAGS = /MD
+!ENDIF
-LOCAL_LIBS= ../LibD/apr-1.lib
-ALL_LIBS= kernel32.lib user32.lib advapi32.lib Rpcrt4.lib ws2_32.lib wsock32.lib ole32.lib
+INCLUDES=/I "$(INCDIR)"
+CFLAGS = /nologo /c /W3 /Gm /EHsc /Zi /Od $(INCLUDES) \
+ $(STATIC_CFLAGS) $(DEBUG_CFLAGS) /D "BINPATH=$(OUTDIR:\=/)" \
+ /D _DEBUG /D WIN32 /Fo"$(INTDIR)/" /FD
-CLEAN_TARGETS = testfile.tmp mod_test.dll proc_child.exe occhild.exe \
- readchild.exe tryread.exe sockchild.exe \
- globalmutexchild.exe lfstests/large.bin \
- data/testputs.txt data/testbigfprintf.dat data/testwritev.txt \
- data/testwritev_full.txt
-CLEAN_SUBDIRS = internal
+LD_LIBS = kernel32.lib advapi32.lib ws2_32.lib wsock32.lib \
+ ole32.lib shell32.lib rpcrt4.lib
-INCDIR=../include
-INCLUDES=/I "$(INCDIR)"
+LDFLAGS = /nologo /debug /subsystem:console /incremental:no
+SHLDFLAGS = /nologo /dll /debug /subsystem:windows /incremental:no
+
+.c{$(INTDIR)}.obj::
+ $(CL) $(CFLAGS) -c $< -Fd$(INTDIR)\ $(INCLUDES)
+
+# STDTEST_PORTABLE;
+
+$(OUTDIR)\testall.exe: $(ALL_TESTS) $(INTDIR)\abts.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
+
+$(OUTDIR)\testapp.exe: $(INTDIR)/testapp.obj $(LOCAL_LIB) $(APP_LIB)
+ $(LD) $(LDFLAGS) /entry:wmainCRTStartup /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;2
+
+$(OUTDIR)\testlockperf.exe: $(INTDIR)\testlockperf.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
+
+$(OUTDIR)\testmutexscope.exe: $(INTDIR)\testmutexscope.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
+
+# OTHER_PROGRAMS;
+
+$(OUTDIR)\sendfile.exe: $(INTDIR)\sendfile.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-# link programs using -no-install to get real executables not
-# libtool wrapper scripts which link an executable when first run.
-LINK_PROG = link.exe /nologo /debug /subsystem:console /incremental:no
-LINK_LIB = link.exe /nologo /dll /debug /subsystem:windows /incremental:no
+# TESTALL_COMPONENTS;
-check: $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE)
- for prog in $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE); do \
- ./$$prog; \
- if test $$? = 255; then \
- echo "$$prog failed"; \
- break; \
- fi; \
- done
+$(OUTDIR)\globalmutexchild.exe: $(INTDIR)\globalmutexchild.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-occhild.exe: occhild.obj $(LOCAL_LIBS)
- $(LINK_PROG) occhild.obj $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\mod_test.dll: $(INTDIR)/mod_test.obj $(LOCAL_LIB)
+ $(LD) $(SHLDFLAGS) /out:"$@" $** \
+ /export:print_hello /export:count_reps $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;2
-sockchild.exe: sockchild.obj $(LOCAL_LIBS)
- $(LINK_PROG) sockchild.obj $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\occhild.exe: $(INTDIR)\occhild.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-readchild.exe: readchild.obj $(LOCAL_LIBS)
- $(LINK_PROG) readchild.obj $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\proc_child.exe: $(INTDIR)\proc_child.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-globalmutexchild.exe: globalmutexchild.obj $(LOCAL_LIBS)
- $(LINK_PROG) globalmutexchild.obj $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\readchild.exe: $(INTDIR)\readchild.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-tryread.exe: tryread.obj $(LOCAL_LIBS)
- $(LINK_PROG) tryread.obj $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\sockchild.exe: $(INTDIR)\sockchild.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-proc_child.exe: proc_child.obj $(LOCAL_LIBS)
- $(LINK_PROG) proc_child.obj $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\testshmconsumer.exe: $(INTDIR)\testshmconsumer.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-# FIXME: -prefer-pic is only supported with libtool-1.4+
-mod_test.dll: mod_test.obj
- $(LINK_LIB) mod_test.obj /export:print_hello /export:count_reps $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\testshmproducer.exe: $(INTDIR)\testshmproducer.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-testlockperf.exe: testlockperf.obj $(LOCAL_LIBS)
- $(LINK_PROG) testlockperf.obj $(LOCAL_LIBS) $(ALL_LIBS)
+$(OUTDIR)\tryread.exe: $(INTDIR)\tryread.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
-sendfile.exe: sendfile.obj $(LOCAL_LIBS)
- $(LINK_PROG) sendfile.obj $(LOCAL_LIBS) $(ALL_LIBS)
-testshmproducer.exe: testshmproducer.obj $(LOCAL_LIBS)
- $(LINK_PROG) testshmproducer.obj $(LOCAL_LIBS) $(ALL_LIBS)
+cleandata:
+ @for %f in ($(CLEAN_DATA)) do @if EXIST %f del /f %f
-testshmconsumer.exe: testshmconsumer.obj $(LOCAL_LIBS)
- $(LINK_PROG) testshmconsumer.obj $(LOCAL_LIBS) $(ALL_LIBS)
+clean: cleandata
+ @if EXIST $(INTDIR)\. rmdir /s /q $(INTDIR)
+ @if EXIST $(OUTDIR)\. rmdir /s /q $(OUTDIR)
+ @for %d in ($(TEST_SUBDIRS)) do \
+ %COMSPEC% /c "cd %%d && $(MAKE) -f Makefile.win clean" \
-testprocmutex.exe: testprocmutex.obj $(LOCAL_LIBS)
- $(LINK_PROG) testprocmutex.obj $(LOCAL_LIBS) $(ALL_LIBS)
+cleanall:
+ @for %d in ($(CLEAN_BUILDDIRS) $(INTDIR) $(OUTDIR)) do \
+ @if EXIST %d\. rmdir /s /q %d
+ @for %d in ($(TEST_SUBDIRS)) do \
+ %COMSPEC% /c "cd %%d & $(MAKE) -f Makefile.win cleanall" \
-testmutexscope.exe: testmutexscope.obj $(LOCAL_LIBS)
- $(LINK_PROG) testmutexscope.obj $(LOCAL_LIBS) $(ALL_LIBS)
-TESTS = testutil.obj testtime.obj teststr.obj testvsn.obj testipsub.obj \
- testmmap.obj testud.obj testtable.obj testsleep.obj testpools.obj \
- testfmt.obj testfile.obj testdir.obj testfileinfo.obj testrand.obj \
- testdso.obj testoc.obj testdup.obj testsockets.obj testproc.obj \
- testpoll.obj testlock.obj testsockopt.obj testpipe.obj testthread.obj \
- testhash.obj testargs.obj testnames.obj testuser.obj testpath.obj \
- testenv.obj testprocmutex.obj testrand2.obj testfnmatch.obj \
- testatomic.obj testflock.obj testshm.obj testsock.obj testglobalmutex.obj \
- teststrnatcmp.obj testfilecopy.obj testtemp.obj testlfs.obj
+PATH=$(OUTDIR);..\$(OUTDIR);$(PATH)
-testall.exe: $(TESTS) mod_test.dll occhild.exe \
- readchild.exe abts.obj proc_child.exe \
- tryread.exe sockchild.exe globalmutexchild.exe \
- $(LOCAL_LIBS)
- $(LINK_PROG) /out:testall.exe $(TESTS) abts.obj $(LOCAL_LIBS) $(ALL_LIBS)
+check: $(TESTALL_COMPONENTS) $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE)
+ @for %p in ($(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE)) do @( \
+ echo Testing %p && %p -v || echo %p failed \
+ )
+checkall: check
+ @for %d in ($(TEST_SUBDIRS)) do \
+ %COMSPEC% /c "cd %%d && $(MAKE) -f Makefile.win check" \
# DO NOT REMOVE
diff --git a/srclib/apr/test/abts.c b/srclib/apr/test/abts.c
index 2905a259..d8cb2c9d 100644
--- a/srclib/apr/test/abts.c
+++ b/srclib/apr/test/abts.c
@@ -252,6 +252,22 @@ void abts_int_nequal(abts_case *tc, const int expected, const int actual, int li
}
}
+void abts_size_equal(abts_case *tc, size_t expected, size_t actual, int lineno)
+{
+ update_status();
+ if (tc->failed) return;
+
+ if (expected == actual) return;
+
+ tc->failed = TRUE;
+ if (verbose) {
+ /* Note that the comparison is type-exact, reporting must be a best-fit */
+ fprintf(stderr, "Line %d: expected %lu, but saw %lu\n", lineno,
+ (unsigned long)expected, (unsigned long)actual);
+ fflush(stderr);
+ }
+}
+
void abts_str_equal(abts_case *tc, const char *expected, const char *actual, int lineno)
{
update_status();
@@ -369,6 +385,9 @@ int main(int argc, const char *const argv[]) {
abts_suite *suite = NULL;
initialize();
+
+ quiet = !isatty(STDOUT_FILENO);
+
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-v")) {
verbose = 1;
diff --git a/srclib/apr/test/abts.h b/srclib/apr/test/abts.h
index 51123ff0..4d6470ae 100644
--- a/srclib/apr/test/abts.h
+++ b/srclib/apr/test/abts.h
@@ -21,6 +21,11 @@ extern "C" {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#ifdef WIN32
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
#ifndef ABTS_H
#define ABTS_H
@@ -73,6 +78,7 @@ void abts_true(abts_case *tc, int condition, int lineno);
void abts_fail(abts_case *tc, const char *message, int lineno);
void abts_not_impl(abts_case *tc, const char *message, int lineno);
void abts_assert(abts_case *tc, const char *message, int condition, int lineno);
+void abts_size_equal(abts_case *tc, size_t expected, size_t actual, int lineno);
/* Convenience macros. Ryan hates these! */
#define ABTS_INT_EQUAL(a, b, c) abts_int_equal(a, b, c, __LINE__)
@@ -86,6 +92,9 @@ void abts_assert(abts_case *tc, const char *message, int condition, int lineno);
#define ABTS_NOT_IMPL(a, b) abts_not_impl(a, b, __LINE__);
#define ABTS_ASSERT(a, b, c) abts_assert(a, b, c, __LINE__);
+#define ABTS_SIZE_EQUAL(a, b, c) abts_size_equal(a, b, c, __LINE__)
+
+
abts_suite *run_tests(abts_suite *suite);
abts_suite *run_tests1(abts_suite *suite);
diff --git a/srclib/apr/test/aprtest.def b/srclib/apr/test/aprtest.def
deleted file mode 100644
index bfea210d..00000000
--- a/srclib/apr/test/aprtest.def
+++ /dev/null
@@ -1,3 +0,0 @@
-MODULE LIBC.NLM
-MODULE APRLIB.NLM
-
diff --git a/srclib/apr/test/aprtest.dsp b/srclib/apr/test/aprtest.dsp
deleted file mode 100644
index 9d6994f5..00000000
--- a/srclib/apr/test/aprtest.dsp
+++ /dev/null
@@ -1,195 +0,0 @@
-# Microsoft Developer Studio Project File - Name="aprtest" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) External Target" 0x0106
-
-CFG=aprtest - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "aprtest.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "aprtest.mak" CFG="aprtest - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "aprtest - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "aprtest - Win32 Debug" (based on "Win32 (x86) External Target")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-
-!IF "$(CFG)" == "aprtest - Win32 Release"
-
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Cmd_Line "NMAKE /f Makefile"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "aprtest.exe"
-# PROP BASE Bsc_Name "aprtest.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Cmd_Line "NMAKE /f aprtest.win"
-# PROP Rebuild_Opt "/a"
-# PROP Bsc_Name ""
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "aprtest - Win32 Debug"
-
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Cmd_Line "NMAKE /f aprtest.mak"
-# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "aprtest.exe"
-# PROP BASE Bsc_Name "aprtest.bsc"
-# PROP BASE Target_Dir ""
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Cmd_Line "NMAKE /f aprtest.win"
-# PROP Rebuild_Opt "/a"
-# PROP Bsc_Name ""
-# PROP Target_Dir ""
-
-!ENDIF
-
-# Begin Target
-
-# Name "aprtest - Win32 Release"
-# Name "aprtest - Win32 Debug"
-
-!IF "$(CFG)" == "aprtest - Win32 Release"
-
-!ELSEIF "$(CFG)" == "aprtest - Win32 Debug"
-
-!ENDIF
-
-# Begin Group "Sources"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\abc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\client.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\mod_test.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\occhild.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\sendfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\server.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testargs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testcontext.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testdso.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testflock.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testlock.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testmmap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testnames.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testoc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testpath.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testpipe.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testproc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testshm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testsock.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testthread.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testtime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testucs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testuser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\testuuid.c
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\aprtest.win
-# End Source File
-# Begin Source File
-
-SOURCE=.\Makefile
-# End Source File
-# Begin Source File
-
-SOURCE=.\Makefile.in
-# End Source File
-# End Target
-# End Project
diff --git a/srclib/apr/test/aprtest.win b/srclib/apr/test/aprtest.win
deleted file mode 100644
index 85ad5b4d..00000000
--- a/srclib/apr/test/aprtest.win
+++ /dev/null
@@ -1,18 +0,0 @@
-# Note:
-#
-# You may need to modify the configuration of Build - Options - Directories
-# for the Executable path to include the perl interpreter within DevStudio.
-# E.g. add c:\program files\perl\bin to the list of directories
-
-!IF "$(TARGET)" == ""
-TARGET=ALL
-!ENDIF
-
-$(TARGET): Makefile
- $(MAKE) /nologo /f Makefile $(TARGET)
-
-Makefile: Makefile.in MakeWin32Make.awk
- awk -f MakeWin32Make.awk <Makefile.in >Makefile
-
-clean:
- del Makefile *.obj *.exe *.idb *.pdb
diff --git a/srclib/apr/test/internal/Makefile.win b/srclib/apr/test/internal/Makefile.win
new file mode 100644
index 00000000..9832b682
--- /dev/null
+++ b/srclib/apr/test/internal/Makefile.win
@@ -0,0 +1,109 @@
+# PROGRAMS includes all test programs built on this platform.
+# STDTEST_PORTABLE
+# test programs invoked via standard user interface, run on all platforms
+# STDTEST_NONPORTABLE
+# test programs invoked via standard user interface, not portable
+# OTHER_PROGRAMS
+# programs such as sendfile, that have to be invoked in a special sequence
+# or with special parameters
+
+!IFNDEF MODEL
+MODEL=dynamic
+!ENDIF
+
+INCDIR=../../include
+
+!IFNDEF OUTDIR
+!IF "$(MODEL)" == "static"
+OUTDIR=LibR
+!ELSE
+OUTDIR=Release
+!ENDIF
+
+!IF [$(COMSPEC) /c cl /nologo /? | find "x64" >NUL ] == 0
+OUTDIR=x64\$(OUTDIR)
+!ENDIF
+!ENDIF
+
+!IF !EXIST("$(OUTDIR)\.")
+!IF ([$(COMSPEC) /C mkdir $(OUTDIR)] == 0)
+!ENDIF
+!ENDIF
+
+!IFNDEF INTDIR
+INTDIR=$(OUTDIR)
+!ELSE
+!IF !EXIST("$(INTDIR)\.")
+!IF ([$(COMSPEC) /C mkdir $(INTDIR)] == 0)
+!ENDIF
+!ENDIF
+!ENDIF
+
+!MESSAGE Building tests into $(OUTDIR) for $(MODEL)
+
+NONPORTABLE = \
+ $(OUTDIR)\testucs.exe
+
+CLEAN_BUILDDIRS = Release Debug NT x64
+
+PROGRAMS =
+
+TARGETS = $(PROGRAMS) $(NONPORTABLE)
+
+# bring in rules.mk for standard functionality
+ALL: $(TARGETS)
+
+CL = cl.exe
+LD = link.exe
+
+!IF "$(MODEL)" == "static"
+LOCAL_LIB= ..\..\$(OUTDIR)\apr-1.lib
+STATIC_CFLAGS = /D APR_DECLARE_STATIC
+!ELSE
+LOCAL_LIB= ..\..\$(OUTDIR)\libapr-1.lib
+STATIC_CFLAGS =
+!ENDIF
+
+!IFDEF _DEBUG
+DEBUG_CFLAGS = /MDd
+!ELSE
+DEBUG_CFLAGS = /MD
+!ENDIF
+
+INCLUDES=/I "$(INCDIR)"
+
+CFLAGS = /nologo /c /W3 /Gm /EHsc /Zi /Od $(INCLUDES) \
+ $(STATIC_CFLAGS) $(DEBUG_CFLAGS) /D "BINPATH=$(OUTDIR:\=/)" \
+ /D _DEBUG /D WIN32 /Fo"$(INTDIR)/" /FD
+
+LD_LIBS = kernel32.lib advapi32.lib ws2_32.lib wsock32.lib \
+ ole32.lib shell32.lib rpcrt4.lib
+
+LDFLAGS = /nologo /debug /subsystem:console /incremental:no
+SHLDFLAGS = /nologo /dll /debug /subsystem:windows /incremental:no
+
+.c{$(INTDIR)}.obj:
+ $(CL) $(CFLAGS) -c $< -Fd$(INTDIR)\ $(INCLUDES)
+
+$(OUTDIR)\testucs.exe: $(INTDIR)\testucs.obj $(LOCAL_LIB)
+ $(LD) $(LDFLAGS) /out:"$@" $** $(LD_LIBS)
+ @if exist "$@.manifest" \
+ mt.exe -manifest "$@.manifest" -outputresource:$@;1
+
+
+clean:
+ @if EXIST $(INTDIR)\. rmdir /s /q $(INTDIR)
+ @if EXIST $(OUTDIR)\. rmdir /s /q $(OUTDIR)
+
+cleanall:
+ @for %d in ($(CLEAN_BUILDDIRS)) do @if EXIST %d\. rmdir /s /q %d
+
+
+PATH=$(OUTDIR);..\..\$(OUTDIR);$(PATH)
+
+check: $(NONPORTABLE)
+ @for %p in ($(NONPORTABLE)) do @( \
+ echo Testing %p && %p || echo %p failed \
+ )
+
+# DO NOT REMOVE
diff --git a/srclib/apr/test/internal/testucs.c b/srclib/apr/test/internal/testucs.c
index ca735d23..abfa2121 100644
--- a/srclib/apr/test/internal/testucs.c
+++ b/srclib/apr/test/internal/testucs.c
@@ -18,6 +18,7 @@
#include "arch/win32/apr_arch_utf8.h"
#include <wchar.h>
#include <string.h>
+#include <assert.h>
struct testval {
unsigned char n[8];
@@ -32,17 +33,18 @@ void displaynw(struct testval *f, struct testval *l)
int i;
for (i = 0; i < f->nl; ++i)
t += sprintf(t, "%02X ", f->n[i]);
- *(t++) = '-';
+ *(t++) = '-';
for (i = 0; i < l->nl; ++i)
t += sprintf(t, " %02X", l->n[i]);
*(t++) = ' ';
*(t++) = '=';
- *(t++) = ' ';
+ *(t++) = ' ';
for (i = 0; i < f->wl; ++i)
t += sprintf(t, "%04X ", f->w[i]);
*(t++) = '-';
for (i = 0; i < l->wl; ++i)
t += sprintf(t, " %04X", l->w[i]);
+ *t = '\0';
puts(x);
}
@@ -155,22 +157,143 @@ void test_wrange(struct testval *p)
}
/*
+ * Test every possible byte value.
+ * If the test passes or fails at this byte value we are done.
+ * Otherwise iterate test_nrange again, appending another byte.
+ */
+void test_ranges()
+{
+ struct testval ntest, wtest;
+ apr_status_t nrc, wrc;
+ apr_size_t inlen;
+ unsigned long matches = 0;
+
+ memset(&ntest, 0, sizeof(ntest));
+ ++ntest.nl;
+
+ memset(&wtest, 0, sizeof(wtest));
+ ++wtest.wl;
+
+ do {
+ do {
+ inlen = ntest.nl;
+ ntest.wl = sizeof(ntest.w) / 2;
+ nrc = apr_conv_utf8_to_ucs2(ntest.n, &inlen, ntest.w, &ntest.wl);
+ if (nrc == APR_SUCCESS) {
+ ntest.wl = (sizeof(ntest.w) / 2) - ntest.wl;
+ break;
+ }
+ if (nrc == APR_INCOMPLETE) {
+ ++ntest.nl;
+ if (ntest.nl > 6) {
+ printf ("\n\nUnexpected utf8 sequence of >6 bytes;\n");
+ exit(255);
+ }
+ continue;
+ }
+ else {
+ while (!(++ntest.n[ntest.nl - 1])) {
+ if (!(--ntest.nl))
+ break;
+ }
+ }
+ } while (ntest.nl);
+
+ do {
+ inlen = wtest.wl;
+ wtest.nl = sizeof(wtest.n);
+ wrc = apr_conv_ucs2_to_utf8(wtest.w, &inlen, wtest.n, &wtest.nl);
+ if (wrc == APR_SUCCESS) {
+ wtest.nl = sizeof(wtest.n) - wtest.nl;
+ break;
+ }
+ else {
+ if (!(++wtest.w[wtest.wl - 1])) {
+ if (wtest.wl == 1)
+ ++wtest.wl;
+ else
+ ++wtest.w[0];
+
+ /* On the second pass, ensure lead word is incomplete */
+ do {
+ inlen = 1;
+ wtest.nl = sizeof(wtest.n);
+ if (apr_conv_ucs2_to_utf8(wtest.w, &inlen, wtest.n, &wtest.nl)
+ == APR_INCOMPLETE)
+ break;
+ if (!(++wtest.w[0])) {
+ wtest.wl = 0;
+ break;
+ }
+ } while (1);
+ }
+ }
+ } while (wtest.wl);
+
+ if (!ntest.nl && !wtest.wl)
+ break;
+
+ /* Identical? */
+ if ((wtest.nl != ntest.nl)
+ || (memcmp(wtest.n, ntest.n, ntest.nl) != 0)
+ || (wtest.wl != ntest.wl)
+ || (memcmp(ntest.w, wtest.w, wtest.wl * 2) != 0)) {
+ printf ("\n\nMismatch of w/n conversion at;\n");
+ displaynw(&ntest, &wtest);
+ exit(255);
+ }
+ ++matches;
+
+ while (!(++ntest.n[ntest.nl - 1])) {
+ if (!(--ntest.nl))
+ break;
+ }
+
+ if (!(++wtest.w[wtest.wl - 1])) {
+ if (wtest.wl == 1)
+ ++wtest.wl;
+ else
+ ++wtest.w[0];
+
+ /* On the second pass, ensure lead word is incomplete */
+ do {
+ inlen = 1;
+ wtest.nl = sizeof(wtest.n);
+ if (apr_conv_ucs2_to_utf8(wtest.w, &inlen, wtest.n, &wtest.nl)
+ == APR_INCOMPLETE)
+ break;
+ if (!(++wtest.w[0])) {
+ wtest.wl = 0;
+ break;
+ }
+ } while (1);
+ }
+ } while (wtest.wl || ntest.nl);
+
+ printf ("\n\nutf8 and ucs2 sequences of %lu transformations matched OK.\n",
+ matches);
+}
+
+/*
* Syntax: testucs [w|n]
*
- * If arg is not recognized, run both tests.
+ * If no arg or arg is not recognized, run equality sequence test.
*/
int main(int argc, char **argv)
{
struct testval s;
memset (&s, 0, sizeof(s));
- if (argc < 2 || apr_tolower(*argv[1]) != 'w') {
+ if (argc >= 2 && apr_tolower(*argv[1]) != 'w') {
printf ("\n\nTesting Narrow Char Ranges\n");
test_nrange(&s);
}
- if (argc < 2 || apr_tolower(*argv[1]) != 'n') {
+ else if (argc >= 2 && apr_tolower(*argv[1]) != 'n') {
printf ("\n\nTesting Wide Char Ranges\n");
test_wrange(&s);
}
+ else {
+ test_ranges();
+ }
return 0;
}
diff --git a/srclib/apr/test/proc_child.c b/srclib/apr/test/proc_child.c
index 405bb7f5..6cfc8fc9 100644
--- a/srclib/apr/test/proc_child.c
+++ b/srclib/apr/test/proc_child.c
@@ -11,11 +11,11 @@
int main(void)
{
char buf[256];
- apr_ssize_t bytes;
+ int bytes;
- bytes = read(STDIN_FILENO, buf, 256);
+ bytes = (int)read(STDIN_FILENO, buf, 256);
if (bytes > 0)
- write(STDOUT_FILENO, buf, bytes);
+ write(STDOUT_FILENO, buf, (unsigned int)bytes);
return 0; /* just to keep the compiler happy */
}
diff --git a/srclib/apr/test/sockchild.c b/srclib/apr/test/sockchild.c
index 5c15d113..3803d00a 100644
--- a/srclib/apr/test/sockchild.c
+++ b/srclib/apr/test/sockchild.c
@@ -67,14 +67,14 @@ int main(int argc, char *argv[])
exit(-1);
}
- exit(length);
+ exit((int)length);
}
else if (!strcmp("write", argv[1])) {
apr_size_t length = strlen(DATASTR);
apr_socket_send(sock, DATASTR, &length);
apr_socket_close(sock);
- exit(length);
+ exit((int)length);
}
exit(-1);
}
diff --git a/srclib/apr/test/testall.dsw b/srclib/apr/test/testall.dsw
index f4be05d9..f9abcbc5 100644
--- a/srclib/apr/test/testall.dsw
+++ b/srclib/apr/test/testall.dsw
@@ -30,21 +30,6 @@ Package=<4>
###############################################################################
-Project: "testall"=".\testall.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name apr
- End Project Dependency
-}}}
-
-###############################################################################
-
Project: "libapr"="..\libapr.dsp" - Package Owner=<4>
Package=<5>
@@ -72,7 +57,7 @@ Package=<4>
###############################################################################
-Project: "testapp"=".\testapp.dsp" - Package Owner=<4>
+Project: "testdll"=".\testdll.dsp" - Package Owner=<4>
Package=<5>
{{{
@@ -81,16 +66,16 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name apr
+ Project_Dep_Name libapr
End Project Dependency
Begin Project Dependency
- Project_Dep_Name apr_app
+ Project_Dep_Name libapr_app
End Project Dependency
}}}
###############################################################################
-Project: "testappnt"=".\testappnt.dsp" - Package Owner=<4>
+Project: "testlib"=".\testlib.dsp" - Package Owner=<4>
Package=<5>
{{{
diff --git a/srclib/apr/test/testapp.dsp b/srclib/apr/test/testapp.dsp
deleted file mode 100644
index 153cbd36..00000000
--- a/srclib/apr/test/testapp.dsp
+++ /dev/null
@@ -1,102 +0,0 @@
-# Microsoft Developer Studio Project File - Name="testapp" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=testapp - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "testapp.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "testapp.mak" CFG="testapp - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "testapp - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "testapp - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "testapp - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "."
-# PROP BASE Intermediate_Dir "."
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "."
-# PROP Intermediate_Dir "."
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"./testapp" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# Begin Special Build Tool
-TargetPath=.\testapp.exe
-SOURCE="$(InputPath)"
-PostBuild_Desc=Embed .manifest
-PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "testapp - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "."
-# PROP BASE Intermediate_Dir "."
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "."
-# PROP Intermediate_Dir "."
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"./testapp" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# Begin Special Build Tool
-TargetPath=.\testapp.exe
-SOURCE="$(InputPath)"
-PostBuild_Desc=Embed .manifest
-PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "testapp - Win32 Release"
-# Name "testapp - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\testapp.c
-# End Source File
-# End Target
-# End Project
diff --git a/srclib/apr/test/testappnt.dsp b/srclib/apr/test/testappnt.dsp
deleted file mode 100644
index af21c294..00000000
--- a/srclib/apr/test/testappnt.dsp
+++ /dev/null
@@ -1,113 +0,0 @@
-# Microsoft Developer Studio Project File - Name="testappnt" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=testappnt - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "testappnt.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "testappnt.mak" CFG="testappnt - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "testappnt - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "testappnt - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "testappnt - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "."
-# PROP BASE Intermediate_Dir "."
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "."
-# PROP Intermediate_Dir "."
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "WINNT" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MD /W3 /O2 /I "../include" /D "NDEBUG" /D "WIN32" /D "WINNT" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"./testappnt" /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /entry:"wmainCRTStartup" /subsystem:console
-# Begin Special Build Tool
-TargetPath=.\testappnt.exe
-SOURCE="$(InputPath)"
-PostBuild_Desc=Embed .manifest
-PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "testappnt - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "."
-# PROP BASE Intermediate_Dir "."
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "."
-# PROP Intermediate_Dir "."
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /EHsc /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /FD /c
-# ADD CPP /nologo /MDd /W3 /EHsc /Zi /Od /I "../include" /D "_DEBUG" /D "WIN32" /D "WINNT" /D "_CONSOLE" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /Fd"./testappnt" /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /entry:"wmainCRTStartup" /subsystem:console /incremental:no /debug
-# Begin Special Build Tool
-TargetPath=.\testappnt.exe
-SOURCE="$(InputPath)"
-PostBuild_Desc=Embed .manifest
-PostBuild_Cmds=if exist $(TargetPath).manifest mt.exe -manifest $(TargetPath).manifest -outputresource:$(TargetPath);2
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "testappnt - Win32 Release"
-# Name "testappnt - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\testapp.c
-
-!IF "$(CFG)" == "testappnt - Win32 Release"
-
-# ADD CPP /Fo"testappnt"
-
-!ELSEIF "$(CFG)" == "testappnt - Win32 Debug"
-
-# ADD CPP /Fo"testappnt"
-
-!ENDIF
-
-# End Source File
-# End Target
-# End Project
diff --git a/srclib/apr/test/testatomic.c b/srclib/apr/test/testatomic.c
index 7fae5c75..b733db39 100644
--- a/srclib/apr/test/testatomic.c
+++ b/srclib/apr/test/testatomic.c
@@ -111,6 +111,39 @@ static void test_cas_notequal(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, 12, casval);
}
+static void test_casptr_equal(abts_case *tc, void *data)
+{
+ int a;
+ volatile void *target_ptr = NULL;
+ void *old_ptr;
+
+ old_ptr = apr_atomic_casptr(&target_ptr, &a, NULL);
+ ABTS_PTR_EQUAL(tc, NULL, old_ptr);
+ ABTS_PTR_EQUAL(tc, &a, (void *) target_ptr);
+}
+
+static void test_casptr_equal_nonnull(abts_case *tc, void *data)
+{
+ int a, b;
+ volatile void *target_ptr = &a;
+ void *old_ptr;
+
+ old_ptr = apr_atomic_casptr(&target_ptr, &b, &a);
+ ABTS_PTR_EQUAL(tc, &a, old_ptr);
+ ABTS_PTR_EQUAL(tc, &b, (void *) target_ptr);
+}
+
+static void test_casptr_notequal(abts_case *tc, void *data)
+{
+ int a, b;
+ volatile void *target_ptr = &a;
+ void *old_ptr;
+
+ old_ptr = apr_atomic_casptr(&target_ptr, &a, &b);
+ ABTS_PTR_EQUAL(tc, &a, old_ptr);
+ ABTS_PTR_EQUAL(tc, &a, (void *) target_ptr);
+}
+
static void test_add32(abts_case *tc, void *data)
{
apr_uint32_t oldval;
@@ -169,7 +202,7 @@ static void test_inc_neg1(abts_case *tc, void *data)
rv = apr_atomic_inc32(&y32);
- ABTS_ASSERT(tc, "apr_atomic_dec32 on zero returned zero.", rv == minus1);
+ ABTS_ASSERT(tc, "apr_atomic_inc32 on zero returned zero.", rv == minus1);
str = apr_psprintf(p, "zero wrap failed: -1 + 1 = %d", y32);
ABTS_ASSERT(tc, str, y32 == 0);
}
@@ -290,6 +323,9 @@ abts_suite *testatomic(abts_suite *suite)
abts_run_test(suite, test_cas_equal, NULL);
abts_run_test(suite, test_cas_equal_nonnull, NULL);
abts_run_test(suite, test_cas_notequal, NULL);
+ abts_run_test(suite, test_casptr_equal, NULL);
+ abts_run_test(suite, test_casptr_equal_nonnull, NULL);
+ abts_run_test(suite, test_casptr_notequal, NULL);
abts_run_test(suite, test_add32, NULL);
abts_run_test(suite, test_inc32, NULL);
abts_run_test(suite, test_set_add_inc_sub, NULL);
diff --git a/srclib/apr/test/testdll.dsp b/srclib/apr/test/testdll.dsp
new file mode 100644
index 00000000..dbeee8f9
--- /dev/null
+++ b/srclib/apr/test/testdll.dsp
@@ -0,0 +1,442 @@
+# Microsoft Developer Studio Project File - Name="testdll" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=testdll - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "testdll.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "testdll.mak" CFG="testdll - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "testdll - Win32 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testdll - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "testdll - Win32 ReleaseNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testdll - Win32 DebugNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testdll - x64 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testdll - x64 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF "$(CFG)" == "testdll - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=Release OUTDIR=Release MODEL=dynamic all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "Release\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=Release OUTDIR=Release MODEL=dynamic all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "Release\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testdll - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=Debug OUTDIR=Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "Debug\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=Debug OUTDIR=Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "Debug\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testdll - Win32 ReleaseNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Release OUTDIR=NT\Release MODEL=dynamic all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\Release\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Release OUTDIR=NT\Release MODEL=dynamic all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\Release\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testdll - Win32 DebugNT"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Debug OUTDIR=NT\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\Debug\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\Debug OUTDIR=NT\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\Debug\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testdll - x64 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Release OUTDIR=x64\Release MODEL=dynamic all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\Release\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Release OUTDIR=x64\Release MODEL=dynamic all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\Release\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "testdll - x64 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Debug OUTDIR=x64\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\Debug\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\Debug OUTDIR=x64\Debug MODEL=dynamic _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\Debug\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
+
+!ENDIF
+
+# Begin Target
+
+# Name "testdll - Win32 Release"
+# Name "testdll - Win32 Debug"
+# Name "testdll - Win32 ReleaseNT"
+# Name "testdll - Win32 DebugNT"
+# Name "testdll - x64 Release"
+# Name "testdll - x64 Debug"
+# Begin Group "testall Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Source File
+
+SOURCE=.\abts.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\abts.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\abts_tests.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testapp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testargs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testatomic.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdir.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdso.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testdup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testenv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testfile.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testfilecopy.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testfileinfo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testflock.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testflock.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testfmt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testfnmatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testglobalmutex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testglobalmutex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testhash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testipsub.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testlfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testlock.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testmmap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testnames.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testoc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testpath.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testpipe.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testpoll.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testpools.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testproc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testrand.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testrand2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testshm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testshm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testsleep.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testsock.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testsock.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testsockets.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testsockopt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\teststr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\teststrnatcmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testtable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testtemp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testthread.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testtime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testud.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testuser.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testutil.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testvsn.c
+# End Source File
+# End Group
+# Begin Group "Other Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Source File
+
+SOURCE=.\globalmutexchild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\mod_test.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\nw_misc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\occhild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\proc_child.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\readchild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\sendfile.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\sockchild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testlockperf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testmutexscope.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testprocmutex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testshmconsumer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testshmproducer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\tryread.c
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\Makefile.win
+# End Source File
+# End Target
+# End Project
diff --git a/srclib/apr/test/testdso.c b/srclib/apr/test/testdso.c
index b87bdf70..6ab94010 100644
--- a/srclib/apr/test/testdso.c
+++ b/srclib/apr/test/testdso.c
@@ -15,6 +15,7 @@
*/
+#include "apr.h"
#include "testutil.h"
#include "apr_general.h"
#include "apr_pools.h"
@@ -22,7 +23,6 @@
#include "apr_dso.h"
#include "apr_strings.h"
#include "apr_file_info.h"
-#include "apr.h"
#if APR_HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -31,10 +31,10 @@
#ifdef NETWARE
# define MOD_NAME "mod_test.nlm"
-#elif defined(BEOS)
+#elif defined(BEOS) || defined(__MVS__)
# define MOD_NAME "mod_test.so"
#elif defined(WIN32)
-# define MOD_NAME "mod_test.dll"
+# define MOD_NAME TESTBINPATH "mod_test.dll"
#elif defined(DARWIN)
# define MOD_NAME ".libs/mod_test.so"
# define LIB_NAME ".libs/libmod_test.dylib"
diff --git a/srclib/apr/test/testdup.c b/srclib/apr/test/testdup.c
index 9d064ec0..a7463379 100644
--- a/srclib/apr/test/testdup.c
+++ b/srclib/apr/test/testdup.c
@@ -76,7 +76,7 @@ static void test_file_readwrite(abts_case *tc, void *data)
rv = apr_file_write(file3, TEST, &txtlen);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, sizeof(TEST), txtlen);
+ ABTS_SIZE_EQUAL(tc, sizeof(TEST), txtlen);
fpos = 0;
rv = apr_file_seek(file1, APR_SET, &fpos);
@@ -128,6 +128,8 @@ static void test_dup2(abts_case *tc, void *data)
rv = apr_file_dup2(errfile, saveerr, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_PTR_NOTNULL(tc, errfile);
+
+ apr_file_close(saveerr);
}
static void test_dup2_readwrite(abts_case *tc, void *data)
@@ -161,7 +163,7 @@ static void test_dup2_readwrite(abts_case *tc, void *data)
txtlen = sizeof(TEST2);
rv = apr_file_write(errfile, TEST2, &txtlen);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, sizeof(TEST2), txtlen);
+ ABTS_SIZE_EQUAL(tc, sizeof(TEST2), txtlen);
fpos = 0;
rv = apr_file_seek(testfile, APR_SET, &fpos);
@@ -178,6 +180,8 @@ static void test_dup2_readwrite(abts_case *tc, void *data)
rv = apr_file_dup2(errfile, saveerr, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_PTR_NOTNULL(tc, errfile);
+
+ apr_file_close(saveerr);
}
abts_suite *testdup(abts_suite *suite)
diff --git a/srclib/apr/test/testfile.c b/srclib/apr/test/testfile.c
index 8f70823d..dbbc35da 100644
--- a/srclib/apr/test/testfile.c
+++ b/srclib/apr/test/testfile.c
@@ -85,7 +85,7 @@ static void test_read(abts_case *tc, void *data)
APR_ASSERT_SUCCESS(tc, "Opening test file " FILENAME, rv);
rv = apr_file_read(filetest, str, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(TESTSTR), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(TESTSTR), nbytes);
ABTS_STR_EQUAL(tc, TESTSTR, str);
apr_file_close(filetest);
@@ -103,7 +103,7 @@ static void test_readzero(abts_case *tc, void *data)
rv = apr_file_read(filetest, str, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, 0, nbytes);
+ ABTS_SIZE_EQUAL(tc, 0, nbytes);
apr_file_close(filetest);
}
@@ -232,7 +232,7 @@ static void test_seek(abts_case *tc, void *data)
rv = apr_file_read(filetest, str, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(TESTSTR), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(TESTSTR), nbytes);
ABTS_STR_EQUAL(tc, TESTSTR, str);
memset(str, 0, nbytes + 1);
@@ -242,7 +242,7 @@ static void test_seek(abts_case *tc, void *data)
rv = apr_file_read(filetest, str, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(TESTSTR) - 5, nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(TESTSTR) - 5, nbytes);
ABTS_STR_EQUAL(tc, TESTSTR + 5, str);
apr_file_close(filetest);
@@ -257,13 +257,13 @@ static void test_seek(abts_case *tc, void *data)
offset = -5;
rv = apr_file_seek(filetest, SEEK_END, &offset);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(TESTSTR) - 5, nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(TESTSTR) - 5, nbytes);
memset(str, 0, nbytes + 1);
nbytes = 256;
rv = apr_file_read(filetest, str, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, 5, nbytes);
+ ABTS_SIZE_EQUAL(tc, 5, nbytes);
ABTS_STR_EQUAL(tc, TESTSTR + strlen(TESTSTR) - 5, str);
apr_file_close(filetest);
@@ -428,7 +428,7 @@ static void test_bigread(abts_case *tc, void *data)
rv = apr_file_write(f, buf, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, APR_BUFFERSIZE, nbytes);
+ ABTS_SIZE_EQUAL(tc, APR_BUFFERSIZE, nbytes);
rv = apr_file_close(f);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
@@ -440,7 +440,7 @@ static void test_bigread(abts_case *tc, void *data)
nbytes = sizeof buf;
rv = apr_file_read(f, buf, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, APR_BUFFERSIZE, nbytes);
+ ABTS_SIZE_EQUAL(tc, APR_BUFFERSIZE, nbytes);
rv = apr_file_close(f);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
@@ -471,28 +471,28 @@ static void test_mod_neg(abts_case *tc, void *data)
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(s), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(s), nbytes);
for (i = 0; i < 7980; i++) {
s = "0";
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(s), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(s), nbytes);
}
s = "end456789\n";
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(s), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(s), nbytes);
for (i = 0; i < 10000; i++) {
s = "1";
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(s), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(s), nbytes);
}
rv = apr_file_close(f);
@@ -513,7 +513,7 @@ static void test_mod_neg(abts_case *tc, void *data)
nbytes = sizeof(buf);
rv = apr_file_read(f, buf, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, nbytes, sizeof(buf));
+ ABTS_SIZE_EQUAL(tc, nbytes, sizeof(buf));
cur = -((apr_off_t)nbytes - 7980);
rv = apr_file_seek(f, APR_CUR, &cur);
@@ -645,7 +645,7 @@ static void test_writev_full(abts_case *tc, void *data)
APR_ASSERT_SUCCESS(tc, "writev_full of size 5 to file",
apr_file_writev_full(f, vec, 5, &nbytes));
- ABTS_INT_EQUAL(tc, strlen(LINE1)*3 + strlen(LINE2)*2, nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(LINE1)*3 + strlen(LINE2)*2, nbytes);
APR_ASSERT_SUCCESS(tc, "close for writing",
apr_file_close(f));
@@ -743,7 +743,7 @@ static void test_truncate(abts_case *tc, void *data)
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(s), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen(s), nbytes);
rv = apr_file_close(f);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
diff --git a/srclib/apr/test/testflock.c b/srclib/apr/test/testflock.c
index 6eac94a7..f4350590 100644
--- a/srclib/apr/test/testflock.c
+++ b/srclib/apr/test/testflock.c
@@ -44,7 +44,7 @@ static int launch_reader(abts_case *tc)
args[0] = "tryread" EXTENSION;
args[1] = NULL;
- rv = apr_proc_create(&proc, "./tryread" EXTENSION, args, NULL, procattr, p);
+ rv = apr_proc_create(&proc, TESTBINPATH "tryread" EXTENSION, args, NULL, procattr, p);
APR_ASSERT_SUCCESS(tc, "Couldn't launch program", rv);
ABTS_ASSERT(tc, "wait for child process",
diff --git a/srclib/apr/test/testglobalmutex.c b/srclib/apr/test/testglobalmutex.c
index a10742d9..d6b716c0 100644
--- a/srclib/apr/test/testglobalmutex.c
+++ b/srclib/apr/test/testglobalmutex.c
@@ -41,7 +41,7 @@ static void launch_child(abts_case *tc, apr_lockmech_e mech,
args[0] = "globalmutexchild" EXTENSION;
args[1] = (const char*)apr_itoa(p, (int)mech);
args[2] = NULL;
- rv = apr_proc_create(proc, "./globalmutexchild" EXTENSION, args, NULL,
+ rv = apr_proc_create(proc, TESTBINPATH "globalmutexchild" EXTENSION, args, NULL,
procattr, p);
APR_ASSERT_SUCCESS(tc, "Couldn't launch program", rv);
}
diff --git a/srclib/apr/test/testhash.c b/srclib/apr/test/testhash.c
index c9b1cdb0..f844f906 100644
--- a/srclib/apr/test/testhash.c
+++ b/srclib/apr/test/testhash.c
@@ -21,22 +21,40 @@
#include "apr_pools.h"
#include "apr_hash.h"
-static void dump_hash(apr_pool_t *p, apr_hash_t *h, char *str)
+#define MAX_LTH 256
+#define MAX_DEPTH 11
+
+static int comp_string(const void *str1, const void *str2)
+{
+ return strcmp(str1,str2);
+}
+
+static void dump_hash(apr_pool_t *p, apr_hash_t *h, char str[][MAX_LTH])
{
apr_hash_index_t *hi;
char *val, *key;
apr_ssize_t len;
int i = 0;
- str[0] = '\0';
-
for (hi = apr_hash_first(p, h); hi; hi = apr_hash_next(hi)) {
apr_hash_this(hi,(void*) &key, &len, (void*) &val);
- apr_snprintf(str, 8196, "%sKey %s (%" APR_SSIZE_T_FMT ") Value %s\n",
- str, key, len, val);
+ str[i][0]='\0';
+ apr_snprintf(str[i], MAX_LTH, "%sKey %s (%" APR_SSIZE_T_FMT ") Value %s\n",
+ str[i], key, len, val);
i++;
}
- apr_snprintf(str, 8196, "%s#entries %d\n", str, i);
+ str[i][0]='\0';
+ apr_snprintf(str[i], MAX_LTH, "%s#entries %d\n", str[i], i);
+
+ /* Sort the result strings so that they can be checked for expected results easily,
+ * without having to worry about platform quirks
+ */
+ qsort(
+ str, /* Pointer to elements */
+ i, /* number of elements */
+ MAX_LTH, /* size of one element */
+ comp_string /* Pointer to comparison routine */
+ );
}
static void sum_hash(apr_pool_t *p, apr_hash_t *h, int *pcount, int *keySum, int *valSum)
@@ -159,7 +177,7 @@ static void key_space(abts_case *tc, void *data)
static void hash_traverse(abts_case *tc, void *data)
{
apr_hash_t *h;
- char str[8196];
+ char StrArray[MAX_DEPTH][MAX_LTH];
h = apr_hash_make(p);
ABTS_PTR_NOTNULL(tc, h);
@@ -174,15 +192,16 @@ static void hash_traverse(abts_case *tc, void *data)
apr_hash_set(h, "SAME2", APR_HASH_KEY_STRING, "same");
apr_hash_set(h, "OVERWRITE", APR_HASH_KEY_STRING, "Overwrite key");
- dump_hash(p, h, str);
- ABTS_STR_EQUAL(tc, "Key FOO1 (4) Value bar1\n"
- "Key FOO2 (4) Value bar2\n"
- "Key OVERWRITE (9) Value Overwrite key\n"
- "Key FOO3 (4) Value bar3\n"
- "Key SAME1 (5) Value same\n"
- "Key FOO4 (4) Value bar4\n"
- "Key SAME2 (5) Value same\n"
- "#entries 7\n", str);
+ dump_hash(p, h, StrArray);
+
+ ABTS_STR_EQUAL(tc, "Key FOO1 (4) Value bar1\n", StrArray[0]);
+ ABTS_STR_EQUAL(tc, "Key FOO2 (4) Value bar2\n", StrArray[1]);
+ ABTS_STR_EQUAL(tc, "Key FOO3 (4) Value bar3\n", StrArray[2]);
+ ABTS_STR_EQUAL(tc, "Key FOO4 (4) Value bar4\n", StrArray[3]);
+ ABTS_STR_EQUAL(tc, "Key OVERWRITE (9) Value Overwrite key\n", StrArray[4]);
+ ABTS_STR_EQUAL(tc, "Key SAME1 (5) Value same\n", StrArray[5]);
+ ABTS_STR_EQUAL(tc, "Key SAME2 (5) Value same\n", StrArray[6]);
+ ABTS_STR_EQUAL(tc, "#entries 7\n", StrArray[7]);
}
/* This is kind of a hack, but I am just keeping an existing test. This is
@@ -296,7 +315,7 @@ static void overlay_empty(abts_case *tc, void *data)
apr_hash_t *overlay = NULL;
apr_hash_t *result = NULL;
int count;
- char str[8196];
+ char StrArray[MAX_DEPTH][MAX_LTH];
base = apr_hash_make(p);
overlay = apr_hash_make(p);
@@ -314,13 +333,14 @@ static void overlay_empty(abts_case *tc, void *data)
count = apr_hash_count(result);
ABTS_INT_EQUAL(tc, 5, count);
- dump_hash(p, result, str);
- ABTS_STR_EQUAL(tc, "Key key1 (4) Value value1\n"
- "Key key2 (4) Value value2\n"
- "Key key3 (4) Value value3\n"
- "Key key4 (4) Value value4\n"
- "Key key5 (4) Value value5\n"
- "#entries 5\n", str);
+ dump_hash(p, result, StrArray);
+
+ ABTS_STR_EQUAL(tc, "Key key1 (4) Value value1\n", StrArray[0]);
+ ABTS_STR_EQUAL(tc, "Key key2 (4) Value value2\n", StrArray[1]);
+ ABTS_STR_EQUAL(tc, "Key key3 (4) Value value3\n", StrArray[2]);
+ ABTS_STR_EQUAL(tc, "Key key4 (4) Value value4\n", StrArray[3]);
+ ABTS_STR_EQUAL(tc, "Key key5 (4) Value value5\n", StrArray[4]);
+ ABTS_STR_EQUAL(tc, "#entries 5\n", StrArray[5]);
}
static void overlay_2unique(abts_case *tc, void *data)
@@ -329,7 +349,7 @@ static void overlay_2unique(abts_case *tc, void *data)
apr_hash_t *overlay = NULL;
apr_hash_t *result = NULL;
int count;
- char str[8196];
+ char StrArray[MAX_DEPTH][MAX_LTH];
base = apr_hash_make(p);
overlay = apr_hash_make(p);
@@ -353,21 +373,19 @@ static void overlay_2unique(abts_case *tc, void *data)
count = apr_hash_count(result);
ABTS_INT_EQUAL(tc, 10, count);
- dump_hash(p, result, str);
- /* I don't know why these are out of order, but they are. I would probably
- * consider this a bug, but others should comment.
- */
- ABTS_STR_EQUAL(tc, "Key base5 (5) Value value5\n"
- "Key overlay1 (8) Value value1\n"
- "Key overlay2 (8) Value value2\n"
- "Key overlay3 (8) Value value3\n"
- "Key overlay4 (8) Value value4\n"
- "Key overlay5 (8) Value value5\n"
- "Key base1 (5) Value value1\n"
- "Key base2 (5) Value value2\n"
- "Key base3 (5) Value value3\n"
- "Key base4 (5) Value value4\n"
- "#entries 10\n", str);
+ dump_hash(p, result, StrArray);
+
+ ABTS_STR_EQUAL(tc, "Key base1 (5) Value value1\n", StrArray[0]);
+ ABTS_STR_EQUAL(tc, "Key base2 (5) Value value2\n", StrArray[1]);
+ ABTS_STR_EQUAL(tc, "Key base3 (5) Value value3\n", StrArray[2]);
+ ABTS_STR_EQUAL(tc, "Key base4 (5) Value value4\n", StrArray[3]);
+ ABTS_STR_EQUAL(tc, "Key base5 (5) Value value5\n", StrArray[4]);
+ ABTS_STR_EQUAL(tc, "Key overlay1 (8) Value value1\n", StrArray[5]);
+ ABTS_STR_EQUAL(tc, "Key overlay2 (8) Value value2\n", StrArray[6]);
+ ABTS_STR_EQUAL(tc, "Key overlay3 (8) Value value3\n", StrArray[7]);
+ ABTS_STR_EQUAL(tc, "Key overlay4 (8) Value value4\n", StrArray[8]);
+ ABTS_STR_EQUAL(tc, "Key overlay5 (8) Value value5\n", StrArray[9]);
+ ABTS_STR_EQUAL(tc, "#entries 10\n", StrArray[10]);
}
static void overlay_same(abts_case *tc, void *data)
@@ -375,7 +393,7 @@ static void overlay_same(abts_case *tc, void *data)
apr_hash_t *base = NULL;
apr_hash_t *result = NULL;
int count;
- char str[8196];
+ char StrArray[MAX_DEPTH][MAX_LTH];
base = apr_hash_make(p);
ABTS_PTR_NOTNULL(tc, base);
@@ -391,16 +409,14 @@ static void overlay_same(abts_case *tc, void *data)
count = apr_hash_count(result);
ABTS_INT_EQUAL(tc, 5, count);
- dump_hash(p, result, str);
- /* I don't know why these are out of order, but they are. I would probably
- * consider this a bug, but others should comment.
- */
- ABTS_STR_EQUAL(tc, "Key base5 (5) Value value5\n"
- "Key base1 (5) Value value1\n"
- "Key base2 (5) Value value2\n"
- "Key base3 (5) Value value3\n"
- "Key base4 (5) Value value4\n"
- "#entries 5\n", str);
+ dump_hash(p, result, StrArray);
+
+ ABTS_STR_EQUAL(tc, "Key base1 (5) Value value1\n", StrArray[0]);
+ ABTS_STR_EQUAL(tc, "Key base2 (5) Value value2\n", StrArray[1]);
+ ABTS_STR_EQUAL(tc, "Key base3 (5) Value value3\n", StrArray[2]);
+ ABTS_STR_EQUAL(tc, "Key base4 (5) Value value4\n", StrArray[3]);
+ ABTS_STR_EQUAL(tc, "Key base5 (5) Value value5\n", StrArray[4]);
+ ABTS_STR_EQUAL(tc, "#entries 5\n", StrArray[5]);
}
abts_suite *testhash(abts_suite *suite)
diff --git a/srclib/apr/test/testipsub.c b/srclib/apr/test/testipsub.c
index 1411cd05..ea29487e 100644
--- a/srclib/apr/test/testipsub.c
+++ b/srclib/apr/test/testipsub.c
@@ -111,11 +111,13 @@ static void test_interesting_subnets(abts_case *tc, void *data)
char *in_subnet, *not_in_subnet;
} testcases[] =
{
- {"9.67", NULL, APR_INET, "9.67.113.15", "10.1.2.3"}
+ {"9.67", NULL, APR_INET, "9.67.113.15", "10.1.2.3"}
,{"9.67.0.0", "16", APR_INET, "9.67.113.15", "10.1.2.3"}
,{"9.67.0.0", "255.255.0.0", APR_INET, "9.67.113.15", "10.1.2.3"}
,{"9.67.113.99", "16", APR_INET, "9.67.113.15", "10.1.2.3"}
,{"9.67.113.99", "255.255.255.0", APR_INET, "9.67.113.15", "10.1.2.3"}
+ ,{"127", NULL, APR_INET, "127.0.0.1", "10.1.2.3"}
+ ,{"127.0.0.1", "8", APR_INET, "127.0.0.1", "10.1.2.3"}
#if APR_HAVE_IPV6
,{"fe80::", "8", APR_INET6, "fe80::1", "ff01::1"}
,{"ff01::", "8", APR_INET6, "ff01::1", "fe80::1"}
@@ -134,6 +136,8 @@ static void test_interesting_subnets(abts_case *tc, void *data)
ABTS_TRUE(tc, rv == APR_SUCCESS);
rv = apr_sockaddr_info_get(&sa, testcases[i].in_subnet, testcases[i].family, 0, 0, p);
ABTS_TRUE(tc, rv == APR_SUCCESS);
+ ABTS_TRUE(tc, sa != NULL);
+ if (!sa) continue;
rc = apr_ipsubnet_test(ipsub, sa);
ABTS_TRUE(tc, rc != 0);
rv = apr_sockaddr_info_get(&sa, testcases[i].not_in_subnet, testcases[i].family, 0, 0, p);
diff --git a/srclib/apr/test/testall.dsp b/srclib/apr/test/testlib.dsp
index 8689b877..faf2528b 100644
--- a/srclib/apr/test/testall.dsp
+++ b/srclib/apr/test/testlib.dsp
@@ -1,24 +1,28 @@
-# Microsoft Developer Studio Project File - Name="testall" - Package Owner=<4>
+# Microsoft Developer Studio Project File - Name="testlib" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) External Target" 0x0106
-CFG=testall - Win32 Debug
+CFG=testlib - Win32 Release
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
-!MESSAGE NMAKE /f "testall.mak".
+!MESSAGE NMAKE /f "testlib.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
-!MESSAGE NMAKE /f "testall.mak" CFG="testall - Win32 Debug"
+!MESSAGE NMAKE /f "testlib.mak" CFG="testlib - Win32 Release"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
-!MESSAGE "testall - Win32 Release" (based on "Win32 (x86) External Target")
-!MESSAGE "testall - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "testlib - Win32 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testlib - Win32 Debug" (based on "Win32 (x86) External Target")
+!MESSAGE "testlib - Win32 ReleaseNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testlib - Win32 DebugNT" (based on "Win32 (x86) External Target")
+!MESSAGE "testlib - x64 Release" (based on "Win32 (x86) External Target")
+!MESSAGE "testlib - x64 Debug" (based on "Win32 (x86) External Target")
!MESSAGE
# Begin Project
@@ -26,100 +30,156 @@ CFG=testall - Win32 Debug
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
-!IF "$(CFG)" == "testall - Win32 Release"
+!IF "$(CFG)" == "testlib - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir ""
# PROP BASE Intermediate_Dir ""
-# PROP BASE Cmd_Line "NMAKE /f Makefile.win all"
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=LibR OUTDIR=LibR MODEL=static all check"
# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "testall.exe"
-# PROP BASE Bsc_Name "testall.bsc"
+# PROP BASE Target_File "LibR\testall.exe"
+# PROP BASE Bsc_Name ""
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir ""
# PROP Intermediate_Dir ""
-# PROP Cmd_Line "NMAKE /f Makefile.win all"
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=LibR OUTDIR=LibR MODEL=static all check"
# PROP Rebuild_Opt "/a"
-# PROP Target_File "testall.exe"
+# PROP Target_File "LibR\testall.exe"
# PROP Bsc_Name ""
# PROP Target_Dir ""
-!ELSEIF "$(CFG)" == "testall - Win32 Debug"
+!ELSEIF "$(CFG)" == "testlib - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir ""
# PROP BASE Intermediate_Dir ""
-# PROP BASE Cmd_Line "NMAKE /f Makefile.win all"
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=LibD OUTDIR=LibD MODEL=static _DEBUG=1 all check"
# PROP BASE Rebuild_Opt "/a"
-# PROP BASE Target_File "testall.exe"
-# PROP BASE Bsc_Name "testall.bsc"
+# PROP BASE Target_File "LibD\testall.exe"
+# PROP BASE Bsc_Name ""
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir ""
# PROP Intermediate_Dir ""
-# PROP Cmd_Line "NMAKE /f Makefile.win all"
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=LibD OUTDIR=LibD MODEL=static _DEBUG=1 all check"
# PROP Rebuild_Opt "/a"
-# PROP Target_File "testall.exe"
+# PROP Target_File "LibD\testall.exe"
# PROP Bsc_Name ""
# PROP Target_Dir ""
-!ENDIF
-
-# Begin Target
+!ELSEIF "$(CFG)" == "testlib - Win32 ReleaseNT"
-# Name "testall - Win32 Release"
-# Name "testall - Win32 Debug"
-
-!IF "$(CFG)" == "testall - Win32 Release"
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibR OUTDIR=NT\LibR MODEL=static all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\LibR\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibR OUTDIR=NT\LibR MODEL=static all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\LibR\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
-!ELSEIF "$(CFG)" == "testall - Win32 Debug"
+!ELSEIF "$(CFG)" == "testlib - Win32 DebugNT"
-!ENDIF
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibD OUTDIR=NT\LibD MODEL=static _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "NT\LibD\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=NT\LibD OUTDIR=NT\LibD MODEL=static _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "NT\LibD\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
-# Begin Source File
+!ELSEIF "$(CFG)" == "testlib - x64 Release"
-SOURCE=.\abts.c
-# End Source File
-# Begin Source File
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibR OUTDIR=x64\LibR MODEL=static all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\LibR\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibR OUTDIR=x64\LibR MODEL=static all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\LibR\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
-SOURCE=.\globalmutexchild.c
-# End Source File
-# Begin Source File
+!ELSEIF "$(CFG)" == "testlib - x64 Debug"
-SOURCE=.\Makefile.win
-# End Source File
-# Begin Source File
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ""
+# PROP BASE Intermediate_Dir ""
+# PROP BASE Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibD OUTDIR=x64\LibD MODEL=static _DEBUG=1 all check"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "x64\LibD\testall.exe"
+# PROP BASE Bsc_Name ""
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Cmd_Line "NMAKE /f Makefile.win INTDIR=x64\LibD OUTDIR=x64\LibD MODEL=static _DEBUG=1 all check"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "x64\LibD\testall.exe"
+# PROP Bsc_Name ""
+# PROP Target_Dir ""
-SOURCE=.\mod_test.c
-# End Source File
-# Begin Source File
+!ENDIF
-SOURCE=.\nw_misc.c
-# End Source File
-# Begin Source File
+# Begin Target
-SOURCE=.\occhild.c
-# End Source File
-# Begin Source File
+# Name "testlib - Win32 Release"
+# Name "testlib - Win32 Debug"
+# Name "testlib - Win32 ReleaseNT"
+# Name "testlib - Win32 DebugNT"
+# Name "testlib - x64 Release"
+# Name "testlib - x64 Debug"
+# Begin Group "testall Source Files"
-SOURCE=.\proc_child.c
-# End Source File
+# PROP Default_Filter ".c"
# Begin Source File
-SOURCE=.\readchild.c
+SOURCE=.\abts.c
# End Source File
# Begin Source File
-SOURCE=.\sendfile.c
+SOURCE=.\abts.h
# End Source File
# Begin Source File
-SOURCE=.\sockchild.c
+SOURCE=.\abts_tests.h
# End Source File
# Begin Source File
@@ -167,6 +227,10 @@ SOURCE=.\testflock.c
# End Source File
# Begin Source File
+SOURCE=.\testflock.h
+# End Source File
+# Begin Source File
+
SOURCE=.\testfmt.c
# End Source File
# Begin Source File
@@ -179,6 +243,10 @@ SOURCE=.\testglobalmutex.c
# End Source File
# Begin Source File
+SOURCE=.\testglobalmutex.h
+# End Source File
+# Begin Source File
+
SOURCE=.\testhash.c
# End Source File
# Begin Source File
@@ -195,18 +263,10 @@ SOURCE=.\testlock.c
# End Source File
# Begin Source File
-SOURCE=.\testlockperf.c
-# End Source File
-# Begin Source File
-
SOURCE=.\testmmap.c
# End Source File
# Begin Source File
-SOURCE=.\testmutexscope.c
-# End Source File
-# Begin Source File
-
SOURCE=.\testnames.c
# End Source File
# Begin Source File
@@ -235,10 +295,6 @@ SOURCE=.\testproc.c
# End Source File
# Begin Source File
-SOURCE=.\testprocmutex.c
-# End Source File
-# Begin Source File
-
SOURCE=.\testrand.c
# End Source File
# Begin Source File
@@ -251,19 +307,19 @@ SOURCE=.\testshm.c
# End Source File
# Begin Source File
-SOURCE=.\testshmconsumer.c
+SOURCE=.\testshm.h
# End Source File
# Begin Source File
-SOURCE=.\testshmproducer.c
+SOURCE=.\testsleep.c
# End Source File
# Begin Source File
-SOURCE=.\testsleep.c
+SOURCE=.\testsock.c
# End Source File
# Begin Source File
-SOURCE=.\testsock.c
+SOURCE=.\testsock.h
# End Source File
# Begin Source File
@@ -311,11 +367,76 @@ SOURCE=.\testutil.c
# End Source File
# Begin Source File
+SOURCE=.\testutil.h
+# End Source File
+# Begin Source File
+
SOURCE=.\testvsn.c
# End Source File
+# End Group
+# Begin Group "Other Source Files"
+
+# PROP Default_Filter ".c"
+# Begin Source File
+
+SOURCE=.\globalmutexchild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\mod_test.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\nw_misc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\occhild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\proc_child.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\readchild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\sendfile.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\sockchild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testlockperf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testmutexscope.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testprocmutex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testshmconsumer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\testshmproducer.c
+# End Source File
# Begin Source File
SOURCE=.\tryread.c
# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\Makefile.win
+# End Source File
# End Target
# End Project
diff --git a/srclib/apr/test/testlockperf.c b/srclib/apr/test/testlockperf.c
index e0bf75ae..f673e5f7 100644
--- a/srclib/apr/test/testlockperf.c
+++ b/srclib/apr/test/testlockperf.c
@@ -38,6 +38,7 @@ int main(void)
#define MAX_COUNTER 1000000
#define MAX_THREADS 6
+static int verbose = 0;
static long mutex_counter;
static apr_thread_mutex_t *thread_lock;
@@ -244,7 +245,10 @@ int main(int argc, const char * const *argv)
exit(-1);
}
- while ((rv = apr_getopt(opt, "f:", &optchar, &optarg)) == APR_SUCCESS) {
+ while ((rv = apr_getopt(opt, "vf:", &optchar, &optarg)) == APR_SUCCESS) {
+ if (optchar == 'v') {
+ verbose = 1;
+ }
if (optchar == 'f') {
lockname = optarg;
}
diff --git a/srclib/apr/test/testmmap.c b/srclib/apr/test/testmmap.c
index 61b7481e..6e901380 100644
--- a/srclib/apr/test/testmmap.c
+++ b/srclib/apr/test/testmmap.c
@@ -39,8 +39,8 @@ static void not_implemented(abts_case *tc, void *data)
static apr_mmap_t *themmap = NULL;
static apr_file_t *thefile = NULL;
static char *file1;
-static apr_finfo_t finfo;
-static int fsize;
+static apr_finfo_t thisfinfo;
+static apr_size_t thisfsize;
static void create_filename(abts_case *tc, void *data)
{
@@ -82,16 +82,16 @@ static void test_get_filesize(abts_case *tc, void *data)
{
apr_status_t rv;
- rv = apr_file_info_get(&finfo, APR_FINFO_NORM, thefile);
+ rv = apr_file_info_get(&thisfinfo, APR_FINFO_NORM, thefile);
ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
- ABTS_ASSERT(tc, "File size mismatch", fsize == finfo.size);
+ ABTS_ASSERT(tc, "File size mismatch", thisfsize == thisfinfo.size);
}
static void test_mmap_create(abts_case *tc, void *data)
{
apr_status_t rv;
- rv = apr_mmap_create(&themmap, thefile, 0, (apr_size_t) finfo.size,
+ rv = apr_mmap_create(&themmap, thefile, 0, (apr_size_t) thisfinfo.size,
APR_MMAP_READ, p);
ABTS_PTR_NOTNULL(tc, themmap);
ABTS_INT_EQUAL(tc, rv, APR_SUCCESS);
@@ -102,10 +102,10 @@ static void test_mmap_contents(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, themmap);
ABTS_PTR_NOTNULL(tc, themmap->mm);
- ABTS_INT_EQUAL(tc, fsize, themmap->size);
+ ABTS_SIZE_EQUAL(tc, thisfsize, themmap->size);
/* Must use nEquals since the string is not guaranteed to be NULL terminated */
- ABTS_STR_NEQUAL(tc, themmap->mm, TEST_STRING, fsize);
+ ABTS_STR_NEQUAL(tc, themmap->mm, TEST_STRING, thisfsize);
}
static void test_mmap_delete(abts_case *tc, void *data)
@@ -126,7 +126,7 @@ static void test_mmap_offset(abts_case *tc, void *data)
rv = apr_mmap_offset(&addr, themmap, 5);
/* Must use nEquals since the string is not guaranteed to be NULL terminated */
- ABTS_STR_NEQUAL(tc, addr, TEST_STRING + 5, fsize-5);
+ ABTS_STR_NEQUAL(tc, addr, TEST_STRING + 5, thisfsize-5);
}
#endif
@@ -135,7 +135,7 @@ abts_suite *testmmap(abts_suite *suite)
suite = ADD_SUITE(suite)
#if APR_HAS_MMAP
- fsize = strlen(TEST_STRING);
+ thisfsize = strlen(TEST_STRING);
abts_run_test(suite, create_filename, NULL);
abts_run_test(suite, test_file_open, NULL);
diff --git a/srclib/apr/test/testmutexscope.c b/srclib/apr/test/testmutexscope.c
index 0ea08cc6..5318a27c 100644
--- a/srclib/apr/test/testmutexscope.c
+++ b/srclib/apr/test/testmutexscope.c
@@ -96,6 +96,7 @@ static void * APR_THREAD_FUNC eachThread(apr_thread_t *id, void *p)
assert(apr_thread_mutex_lock(thread_mutex) == APR_SUCCESS);
assert(apr_thread_mutex_unlock(thread_mutex) == APR_SUCCESS);
lock_release(test_mode);
+ apr_thread_exit(id, 0);
return NULL;
}
diff --git a/srclib/apr/test/testnames.c b/srclib/apr/test/testnames.c
index fca79f3e..a96a9b2f 100644
--- a/srclib/apr/test/testnames.c
+++ b/srclib/apr/test/testnames.c
@@ -228,13 +228,18 @@ static void root_from_cwd_and_back(abts_case *tc, void *data)
const char *path = "//";
char *origpath;
char *testpath;
+ int hadfailed;
ABTS_INT_EQUAL(tc, APR_SUCCESS, apr_filepath_get(&origpath, 0, p));
path = origpath;
rv = apr_filepath_root(&root, &path, APR_FILEPATH_TRUENAME, p);
#if defined(WIN32) || defined(OS2)
- ABTS_INT_EQUAL(tc, origpath[0], root[0]);
+ hadfailed = tc->failed;
+ /* It appears some mingw/cygwin and more modern builds can return
+ * a lowercase drive designation, but we canonicalize to uppercase
+ */
+ ABTS_INT_EQUAL(tc, toupper(origpath[0]), root[0]);
ABTS_INT_EQUAL(tc, ':', root[1]);
ABTS_INT_EQUAL(tc, '/', root[2]);
ABTS_INT_EQUAL(tc, 0, root[3]);
@@ -262,7 +267,16 @@ static void root_from_cwd_and_back(abts_case *tc, void *data)
| APR_FILEPATH_NOTABOVEROOT
| APR_FILEPATH_NOTRELATIVE, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ hadfailed = tc->failed;
+ /* The API doesn't promise equality!!!
+ * apr_filepath_get never promised a canonical filepath.
+ * We'll emit noise under verbose so the user is aware,
+ * but translate this back to success.
+ */
ABTS_STR_EQUAL(tc, origpath, testpath);
+#if defined(WIN32) || defined(OS2) || defined(NETWARE)
+ if (!hadfailed) tc->failed = 0;
+#endif
}
diff --git a/srclib/apr/test/testoc.c b/srclib/apr/test/testoc.c
index 9dbaff8c..a5342b1f 100644
--- a/srclib/apr/test/testoc.c
+++ b/srclib/apr/test/testoc.c
@@ -73,7 +73,7 @@ static void test_child_kill(abts_case *tc, void *data)
APR_NO_PIPE);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- rv = apr_proc_create(&newproc, "./occhild" EXTENSION, args, NULL, procattr, p);
+ rv = apr_proc_create(&newproc, TESTBINPATH "occhild" EXTENSION, args, NULL, procattr, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_PTR_NOTNULL(tc, newproc.in);
ABTS_PTR_EQUAL(tc, NULL, newproc.out);
diff --git a/srclib/apr/test/testpipe.c b/srclib/apr/test/testpipe.c
index db3c77ff..d60707a3 100644
--- a/srclib/apr/test/testpipe.c
+++ b/srclib/apr/test/testpipe.c
@@ -94,7 +94,7 @@ static void read_write(abts_case *tc, void *data)
if (!rv) {
rv = apr_file_read(readp, buf, &nbytes);
ABTS_INT_EQUAL(tc, 1, APR_STATUS_IS_TIMEUP(rv));
- ABTS_INT_EQUAL(tc, 0, nbytes);
+ ABTS_SIZE_EQUAL(tc, 0, nbytes);
}
}
@@ -113,14 +113,14 @@ static void read_write_notimeout(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, writep);
rv = apr_file_write(writep, buf, &nbytes);
- ABTS_INT_EQUAL(tc, strlen("this is a test"), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen("this is a test"), nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
nbytes = 256;
input = apr_pcalloc(p, nbytes + 1);
rv = apr_file_read(readp, input, &nbytes);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen("this is a test"), nbytes);
+ ABTS_SIZE_EQUAL(tc, strlen("this is a test"), nbytes);
ABTS_STR_EQUAL(tc, "this is a test", input);
}
@@ -151,7 +151,7 @@ static void test_pipe_writefull(abts_case *tc, void *data)
args[0] = "readchild" EXTENSION;
args[1] = NULL;
- rv = apr_proc_create(&proc, "./readchild" EXTENSION, args, NULL, procattr, p);
+ rv = apr_proc_create(&proc, TESTBINPATH "readchild" EXTENSION, args, NULL, procattr, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
rv = apr_file_pipe_timeout_set(proc.in, apr_time_from_sec(10));
diff --git a/srclib/apr/test/testpoll.c b/srclib/apr/test/testpoll.c
index 36dd8a06..f4ca8258 100644
--- a/srclib/apr/test/testpoll.c
+++ b/srclib/apr/test/testpoll.c
@@ -90,7 +90,7 @@ static void send_msg(apr_socket_t **sockarray, apr_sockaddr_t **sas, int which,
rv = apr_socket_sendto(sockarray[which], sas[which], 0, "hello", &len);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen("hello"), len);
+ ABTS_SIZE_EQUAL(tc, strlen("hello"), len);
}
static void recv_msg(apr_socket_t **sockarray, int which, apr_pool_t *p,
@@ -107,7 +107,7 @@ static void recv_msg(apr_socket_t **sockarray, int which, apr_pool_t *p,
rv = apr_socket_recvfrom(recsa, sockarray[which], 0, buffer, &buflen);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen("hello"), buflen);
+ ABTS_SIZE_EQUAL(tc, strlen("hello"), buflen);
ABTS_STR_EQUAL(tc, "hello", buffer);
}
diff --git a/srclib/apr/test/testproc.c b/srclib/apr/test/testproc.c
index b025c8e5..4791b928 100644
--- a/srclib/apr/test/testproc.c
+++ b/srclib/apr/test/testproc.c
@@ -50,7 +50,7 @@ static void test_create_proc(abts_case *tc, void *data)
args[0] = "proc_child" EXTENSION;
args[1] = NULL;
- rv = apr_proc_create(&newproc, "../proc_child" EXTENSION, args, NULL,
+ rv = apr_proc_create(&newproc, "../" TESTBINPATH "proc_child" EXTENSION, args, NULL,
attr, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
@@ -59,7 +59,7 @@ static void test_create_proc(abts_case *tc, void *data)
length = strlen(TESTSTR);
rv = apr_file_write(testfile, TESTSTR, &length);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, strlen(TESTSTR), length);
+ ABTS_SIZE_EQUAL(tc, strlen(TESTSTR), length);
testfile = newproc.out;
length = 256;
@@ -126,7 +126,7 @@ static void test_file_redir(abts_case *tc, void *data)
args[0] = "proc_child";
args[1] = NULL;
- rv = apr_proc_create(&newproc, "../proc_child" EXTENSION, args, NULL,
+ rv = apr_proc_create(&newproc, "../" TESTBINPATH "proc_child" EXTENSION, args, NULL,
attr, p);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
diff --git a/srclib/apr/test/testshm.c b/srclib/apr/test/testshm.c
index 3691dd52..ab9b76c2 100644
--- a/srclib/apr/test/testshm.c
+++ b/srclib/apr/test/testshm.c
@@ -83,7 +83,7 @@ static void test_check_size(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, shm);
retsize = apr_shm_size_get(shm);
- ABTS_INT_EQUAL(tc, SHARED_SIZE, retsize);
+ ABTS_SIZE_EQUAL(tc, SHARED_SIZE, retsize);
rv = apr_shm_destroy(shm);
APR_ASSERT_SUCCESS(tc, "Error destroying shared memory block", rv);
@@ -177,7 +177,7 @@ static void test_named(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, shm);
retsize = apr_shm_size_get(shm);
- ABTS_INT_EQUAL(tc, SHARED_SIZE, retsize);
+ ABTS_SIZE_EQUAL(tc, SHARED_SIZE, retsize);
boxes = apr_shm_baseaddr_get(shm);
ABTS_PTR_NOTNULL(tc, boxes);
@@ -187,7 +187,7 @@ static void test_named(abts_case *tc, void *data)
APR_ASSERT_SUCCESS(tc, "Couldn't create attr1", rv);
args[0] = apr_pstrdup(p, "testshmproducer" EXTENSION);
args[1] = NULL;
- rv = apr_proc_create(&pidproducer, "./testshmproducer" EXTENSION, args,
+ rv = apr_proc_create(&pidproducer, TESTBINPATH "testshmproducer" EXTENSION, args,
NULL, attr1, p);
APR_ASSERT_SUCCESS(tc, "Couldn't launch producer", rv);
@@ -195,7 +195,7 @@ static void test_named(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, attr2);
APR_ASSERT_SUCCESS(tc, "Couldn't create attr2", rv);
args[0] = apr_pstrdup(p, "testshmconsumer" EXTENSION);
- rv = apr_proc_create(&pidconsumer, "./testshmconsumer" EXTENSION, args,
+ rv = apr_proc_create(&pidconsumer, TESTBINPATH "testshmconsumer" EXTENSION, args,
NULL, attr2, p);
APR_ASSERT_SUCCESS(tc, "Couldn't launch consumer", rv);
@@ -221,7 +221,7 @@ static void test_named(abts_case *tc, void *data)
static void test_named_remove(abts_case *tc, void *data)
{
apr_status_t rv;
- apr_shm_t *shm;
+ apr_shm_t *shm, *shm2;
apr_shm_remove(SHARED_FILENAME, p);
@@ -233,20 +233,29 @@ static void test_named_remove(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, shm);
rv = apr_shm_remove(SHARED_FILENAME, p);
- APR_ASSERT_SUCCESS(tc, "Error removing shared memory block", rv);
- if (rv != APR_SUCCESS) {
- return ;
- }
- rv = apr_shm_create(&shm, SHARED_SIZE, SHARED_FILENAME, p);
- APR_ASSERT_SUCCESS(tc, "Error allocating shared memory block", rv);
- if (rv != APR_SUCCESS) {
- return;
+ /* On platforms which acknowledge the removal of the shared resource,
+ * ensure another of the same name may be created after removal;
+ */
+ if (rv == APR_SUCCESS)
+ {
+ rv = apr_shm_create(&shm2, SHARED_SIZE, SHARED_FILENAME, p);
+ APR_ASSERT_SUCCESS(tc, "Error allocating shared memory block", rv);
+ if (rv != APR_SUCCESS) {
+ return;
+ }
+ ABTS_PTR_NOTNULL(tc, shm2);
+
+ rv = apr_shm_destroy(shm2);
+ APR_ASSERT_SUCCESS(tc, "Error destroying shared memory block", rv);
}
- ABTS_PTR_NOTNULL(tc, shm);
rv = apr_shm_destroy(shm);
APR_ASSERT_SUCCESS(tc, "Error destroying shared memory block", rv);
+
+ /* Now ensure no named resource remains which we may attach to */
+ rv = apr_shm_attach(&shm, SHARED_FILENAME, p);
+ ABTS_TRUE(tc, rv != 0);
}
#endif
diff --git a/srclib/apr/test/testsock.c b/srclib/apr/test/testsock.c
index 7c1759e9..2ca31137 100644
--- a/srclib/apr/test/testsock.c
+++ b/srclib/apr/test/testsock.c
@@ -43,7 +43,7 @@ static void launch_child(abts_case *tc, apr_proc_t *proc, const char *arg1, apr_
args[0] = "sockchild" EXTENSION;
args[1] = arg1;
args[2] = NULL;
- rv = apr_proc_create(proc, "./sockchild" EXTENSION, args, NULL,
+ rv = apr_proc_create(proc, TESTBINPATH "sockchild" EXTENSION, args, NULL,
procattr, p);
APR_ASSERT_SUCCESS(tc, "Couldn't launch program", rv);
}
@@ -133,7 +133,7 @@ static void test_send(abts_case *tc, void *data)
apr_socket_send(sock2, DATASTR, &length);
/* Make sure that the client received the data we sent */
- ABTS_INT_EQUAL(tc, strlen(DATASTR), wait_child(tc, &proc));
+ ABTS_SIZE_EQUAL(tc, strlen(DATASTR), wait_child(tc, &proc));
rv = apr_socket_close(sock2);
APR_ASSERT_SUCCESS(tc, "Problem closing connected socket", rv);
@@ -167,7 +167,7 @@ static void test_recv(abts_case *tc, void *data)
/* Make sure that the server received the data we sent */
ABTS_STR_EQUAL(tc, DATASTR, datastr);
- ABTS_INT_EQUAL(tc, strlen(datastr), wait_child(tc, &proc));
+ ABTS_SIZE_EQUAL(tc, strlen(datastr), wait_child(tc, &proc));
rv = apr_socket_close(sock2);
APR_ASSERT_SUCCESS(tc, "Problem closing connected socket", rv);
diff --git a/srclib/apr/test/testsockets.c b/srclib/apr/test/testsockets.c
index 934cd410..b5741a85 100644
--- a/srclib/apr/test/testsockets.c
+++ b/srclib/apr/test/testsockets.c
@@ -59,15 +59,21 @@ static void udp_socket(abts_case *tc, void *data)
/* On recent Linux systems, whilst IPv6 is always supported by glibc,
* socket(AF_INET6, ...) calls will fail with EAFNOSUPPORT if the
* "ipv6" kernel module is not loaded. */
-#ifdef EAFNOSUPPORT
+#if defined(WSAEAFNOSUPPORT)
+#define V6_NOT_ENABLED(e) ((e) == APR_OS_START_SYSERR + WSAEAFNOSUPPORT)
+#elif defined(SOCEAFNOSUPPORT)
+#define V6_NOT_ENABLED(e) ((e) == APR_OS_START_SYSERR + SOCEAFNOSUPPORT)
+#elif defined(EAFNOSUPPORT)
#define V6_NOT_ENABLED(e) ((e) == EAFNOSUPPORT)
+#elif !APR_HAVE_IPV6
+#define V6_NOT_ENABLED(e) (1)
#else
-#define V6_NOT_ENABLED(e) (0)
+#error MUST have an EAFNOSUPPORT class of error code to enable IPv6!
#endif
+#if APR_HAVE_IPV6
static void tcp6_socket(abts_case *tc, void *data)
{
-#if APR_HAVE_IPV6
apr_status_t rv;
apr_socket_t *sock = NULL;
@@ -79,14 +85,10 @@ static void tcp6_socket(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_PTR_NOTNULL(tc, sock);
apr_socket_close(sock);
-#else
- ABTS_NOT_IMPL(tc, "IPv6");
-#endif
}
static void udp6_socket(abts_case *tc, void *data)
{
-#if APR_HAVE_IPV6
apr_status_t rv;
apr_socket_t *sock = NULL;
@@ -98,12 +100,11 @@ static void udp6_socket(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
ABTS_PTR_NOTNULL(tc, sock);
apr_socket_close(sock);
-#else
- ABTS_NOT_IMPL(tc, "IPv6");
-#endif
}
+#endif
-static void sendto_receivefrom_helper(abts_case *tc, const char *addr, int family)
+static void sendto_receivefrom_helper(abts_case *tc, const char *addr,
+ int family)
{
apr_status_t rv;
apr_socket_t *sock = NULL;
@@ -117,6 +118,12 @@ static void sendto_receivefrom_helper(abts_case *tc, const char *addr, int famil
apr_size_t len = 30;
rv = apr_socket_create(&sock, family, SOCK_DGRAM, 0, p);
+#if APR_HAVE_IPV6
+ if ((family == APR_INET6) && V6_NOT_ENABLED(rv)) {
+ ABTS_NOT_IMPL(tc, "IPv6 not enabled");
+ return;
+ }
+#endif
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
if (rv != APR_SUCCESS)
return;
@@ -148,12 +155,24 @@ static void sendto_receivefrom_helper(abts_case *tc, const char *addr, int famil
len = STRLEN;
rv = apr_socket_sendto(sock2, to, 0, sendbuf, &len);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, STRLEN, len);
+ ABTS_SIZE_EQUAL(tc, STRLEN, len);
+
+ /* fill the "from" sockaddr with a random address from another
+ * family to ensure that recvfrom sets it up properly. */
+#if APR_HAVE_IPV6
+ if (family == APR_INET)
+ rv = apr_sockaddr_info_get(&from, "3ffE:816e:abcd:1234::1",
+ APR_INET6, 4242, 0, p);
+ else
+#else
+ rv = apr_sockaddr_info_get(&from, "127.1.2.3", APR_INET, 4242, 0, p);
+#endif
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
len = 80;
rv = apr_socket_recvfrom(from, sock, 0, recvbuf, &len);
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
- ABTS_INT_EQUAL(tc, STRLEN, len);
+ ABTS_SIZE_EQUAL(tc, STRLEN, len);
ABTS_STR_EQUAL(tc, "APR_INET, SOCK_DGRAM", recvbuf);
apr_sockaddr_ip_get(&ip_addr, from);
@@ -167,11 +186,21 @@ static void sendto_receivefrom_helper(abts_case *tc, const char *addr, int famil
static void sendto_receivefrom(abts_case *tc, void *data)
{
+ int failed;
+ sendto_receivefrom_helper(tc, "127.0.0.1", APR_INET);
+ failed = tc->failed; tc->failed = 0;
+ ABTS_TRUE(tc, !failed);
+}
+
#if APR_HAVE_IPV6
+static void sendto_receivefrom6(abts_case *tc, void *data)
+{
+ int failed;
sendto_receivefrom_helper(tc, "::1", APR_INET6);
-#endif
- sendto_receivefrom_helper(tc, "127.0.0.1", APR_INET);
+ failed = tc->failed; tc->failed = 0;
+ ABTS_TRUE(tc, !failed);
}
+#endif
static void socket_userdata(abts_case *tc, void *data)
{
@@ -205,10 +234,14 @@ abts_suite *testsockets(abts_suite *suite)
abts_run_test(suite, tcp_socket, NULL);
abts_run_test(suite, udp_socket, NULL);
+ abts_run_test(suite, sendto_receivefrom, NULL);
+
+#if APR_HAVE_IPV6
abts_run_test(suite, tcp6_socket, NULL);
abts_run_test(suite, udp6_socket, NULL);
- abts_run_test(suite, sendto_receivefrom, NULL);
+ abts_run_test(suite, sendto_receivefrom6, NULL);
+#endif
abts_run_test(suite, socket_userdata, NULL);
diff --git a/srclib/apr/test/testutil.h b/srclib/apr/test/testutil.h
index 96394c5e..6d7639bc 100644
--- a/srclib/apr/test/testutil.h
+++ b/srclib/apr/test/testutil.h
@@ -15,12 +15,22 @@
*/
#include "apr_pools.h"
+#include "apr_general.h"
#include "abts.h"
#ifndef APR_TEST_UTIL
#define APR_TEST_UTIL
-/* XXX FIXME */
+#ifdef WIN32
+#ifdef BINPATH
+#define TESTBINPATH APR_STRINGIFY(BINPATH) "/"
+#else
+#define TESTBINPATH ""
+#endif
+#else
+#define TESTBINPATH "./"
+#endif
+
#ifdef WIN32
#define EXTENSION ".exe"
#elif NETWARE
diff --git a/srclib/apr/threadproc/win32/proc.c b/srclib/apr/threadproc/win32/proc.c
index 7533ad7b..aa85fe4d 100644
--- a/srclib/apr/threadproc/win32/proc.c
+++ b/srclib/apr/threadproc/win32/proc.c
@@ -32,6 +32,10 @@
#include <process.h>
#endif
+/* We have very carefully excluded volumes of definitions from the
+ * Microsoft Platform SDK, which kill the build time performance.
+ * These the sole constants we borrow from WinBase.h and WinUser.h
+ */
#ifndef LOGON32_LOGON_NETWORK
#define LOGON32_LOGON_NETWORK 3
#endif
@@ -83,20 +87,66 @@ APR_DECLARE(apr_status_t) apr_procattr_io_set(apr_procattr_t *attr,
in = APR_READ_BLOCK;
else if (in == APR_PARENT_BLOCK)
in = APR_WRITE_BLOCK;
- stat = apr_create_nt_pipe(&attr->child_in, &attr->parent_in, in,
- attr->pool);
+
+ stat = apr_create_nt_pipe(&attr->child_in, &attr->parent_in,
+ in, attr->pool);
+ if (stat == APR_SUCCESS) {
+ switch (in) {
+ case APR_FULL_BLOCK:
+ break;
+ case APR_READ_BLOCK:
+ apr_file_pipe_timeout_set(attr->parent_in, 0);
+ break;
+ case APR_WRITE_BLOCK:
+ apr_file_pipe_timeout_set(attr->child_in, 0);
+ break;
+ default:
+ apr_file_pipe_timeout_set(attr->child_in, 0);
+ apr_file_pipe_timeout_set(attr->parent_in, 0);
+ }
+ }
if (stat == APR_SUCCESS)
stat = apr_file_inherit_unset(attr->parent_in);
}
if (out && stat == APR_SUCCESS) {
- stat = apr_create_nt_pipe(&attr->parent_out, &attr->child_out, out,
- attr->pool);
+ stat = apr_create_nt_pipe(&attr->parent_out, &attr->child_out,
+ out, attr->pool);
+ if (stat == APR_SUCCESS) {
+ switch (out) {
+ case APR_FULL_BLOCK:
+ break;
+ case APR_PARENT_BLOCK:
+ apr_file_pipe_timeout_set(attr->child_out, 0);
+ break;
+ case APR_CHILD_BLOCK:
+ apr_file_pipe_timeout_set(attr->parent_out, 0);
+ break;
+ default:
+ apr_file_pipe_timeout_set(attr->child_out, 0);
+ apr_file_pipe_timeout_set(attr->parent_out, 0);
+ }
+ }
if (stat == APR_SUCCESS)
stat = apr_file_inherit_unset(attr->parent_out);
}
if (err && stat == APR_SUCCESS) {
- stat = apr_create_nt_pipe(&attr->parent_err, &attr->child_err, err,
- attr->pool);
+ stat = apr_create_nt_pipe(&attr->parent_err, &attr->child_err,
+ err, attr->pool);
+ if (stat == APR_SUCCESS) {
+ switch (err) {
+ case APR_FULL_BLOCK:
+ break;
+ case APR_PARENT_BLOCK:
+ apr_file_pipe_timeout_set(attr->child_err, 0);
+ break;
+ case APR_CHILD_BLOCK:
+ apr_file_pipe_timeout_set(attr->parent_err, 0);
+ break;
+ default:
+ apr_file_pipe_timeout_set(attr->child_err, 0);
+ apr_file_pipe_timeout_set(attr->parent_err, 0);
+ }
+ }
if (stat == APR_SUCCESS)
stat = apr_file_inherit_unset(attr->parent_err);
}
@@ -776,46 +826,49 @@ APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new,
si.dwFlags |= STARTF_USESTDHANDLES;
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
+ if (GetHandleInformation(si.hStdInput, &stdin_reset)
+ && (stdin_reset &= HANDLE_FLAG_INHERIT))
+ SetHandleInformation(si.hStdInput,
+ HANDLE_FLAG_INHERIT, 0);
+
if (attr->child_in && attr->child_in->filehand)
{
- if (GetHandleInformation(si.hStdInput,
- &stdin_reset)
- && (stdin_reset &= HANDLE_FLAG_INHERIT))
- SetHandleInformation(si.hStdInput,
- HANDLE_FLAG_INHERIT, 0);
-
si.hStdInput = attr->child_in->filehand;
SetHandleInformation(si.hStdInput, HANDLE_FLAG_INHERIT,
HANDLE_FLAG_INHERIT);
}
+ else
+ si.hStdInput = INVALID_HANDLE_VALUE;
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
+ if (GetHandleInformation(si.hStdOutput, &stdout_reset)
+ && (stdout_reset &= HANDLE_FLAG_INHERIT))
+ SetHandleInformation(si.hStdOutput,
+ HANDLE_FLAG_INHERIT, 0);
+
if (attr->child_out && attr->child_out->filehand)
{
- if (GetHandleInformation(si.hStdOutput,
- &stdout_reset)
- && (stdout_reset &= HANDLE_FLAG_INHERIT))
- SetHandleInformation(si.hStdOutput,
- HANDLE_FLAG_INHERIT, 0);
-
si.hStdOutput = attr->child_out->filehand;
SetHandleInformation(si.hStdOutput, HANDLE_FLAG_INHERIT,
HANDLE_FLAG_INHERIT);
}
+ else
+ si.hStdOutput = INVALID_HANDLE_VALUE;
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
+ if (GetHandleInformation(si.hStdError, &stderr_reset)
+ && (stderr_reset &= HANDLE_FLAG_INHERIT))
+ SetHandleInformation(si.hStdError,
+ HANDLE_FLAG_INHERIT, 0);
+
if (attr->child_err && attr->child_err->filehand)
{
- if (GetHandleInformation(si.hStdError,
- &stderr_reset)
- && (stderr_reset &= HANDLE_FLAG_INHERIT))
- SetHandleInformation(si.hStdError,
- HANDLE_FLAG_INHERIT, 0);
-
si.hStdError = attr->child_err->filehand;
SetHandleInformation(si.hStdError, HANDLE_FLAG_INHERIT,
- HANDLE_FLAG_INHERIT);
+ HANDLE_FLAG_INHERIT);
}
+ else
+ si.hStdError = INVALID_HANDLE_VALUE;
}
if (attr->user_token) {
/* XXX: for terminal services, handles can't be cannot be
diff --git a/srclib/apr/threadproc/win32/thread.c b/srclib/apr/threadproc/win32/thread.c
index bb378559..dd7c09a8 100644
--- a/srclib/apr/threadproc/win32/thread.c
+++ b/srclib/apr/threadproc/win32/thread.c
@@ -108,7 +108,7 @@ APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new,
*/
#ifndef _WIN32_WCE
if ((handle = (HANDLE)_beginthreadex(NULL,
- attr && attr->stacksize > 0 ? attr->stacksize : 0,
+ (DWORD) (attr ? attr->stacksize : 0),
(unsigned int (APR_THREAD_FUNC *)(void *))dummy_worker,
(*new), 0, &temp)) == 0) {
return APR_FROM_OS_ERROR(_doserrno);
diff --git a/support/ab.c b/support/ab.c
index 7efff314..5adf5a5b 100644
--- a/support/ab.c
+++ b/support/ab.c
@@ -1147,7 +1147,7 @@ static void start_connect(struct connection * c)
SSL_set_connect_state(c->ssl);
if (verbosity >= 4) {
BIO_set_callback(bio, ssl_print_cb);
- BIO_set_callback_arg(bio, bio_err);
+ BIO_set_callback_arg(bio, (void *)bio_err);
}
} else {
c->ssl = NULL;
diff --git a/support/ab.dsp b/support/ab.dsp
index d078ae2c..5c67d097 100644
--- a/support/ab.dsp
+++ b/support/ab.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\ab.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\ab.exe
SOURCE="$(InputPath)"
diff --git a/support/abs.dsp b/support/abs.dsp
index f00d3062..1e7ed1df 100644
--- a/support/abs.dsp
+++ b/support/abs.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /libpath:"../srclib/openssl/out32dll"
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /debug /libpath:"../srclib/openssl/out32dll" /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /libpath:"../srclib/openssl/out32dll"
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /debug /libpath:"../srclib/openssl/out32dll" /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\abs.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /debug /libpath:"../srclib/openssl/out32dll"
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /debug /libpath:"../srclib/openssl/out32dll"
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /debug /libpath:"../srclib/openssl/out32dll"
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib ssleay32.lib libeay32.lib /nologo /subsystem:console /incremental:no /debug /libpath:"../srclib/openssl/out32dll"
# Begin Special Build Tool
TargetPath=.\Debug\abs.exe
SOURCE="$(InputPath)"
diff --git a/support/htcacheclean.dsp b/support/htcacheclean.dsp
index 7e6a5fc7..ccca4b25 100644
--- a/support/htcacheclean.dsp
+++ b/support/htcacheclean.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\htcacheclean.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\htcacheclean.exe
SOURCE="$(InputPath)"
diff --git a/support/htdbm.dsp b/support/htdbm.dsp
index 7c530d00..541e330b 100644
--- a/support/htdbm.dsp
+++ b/support/htdbm.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\htdbm.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\htdbm.exe
SOURCE="$(InputPath)"
diff --git a/support/htdigest.dsp b/support/htdigest.dsp
index 4e3a42f7..1f235f7d 100644
--- a/support/htdigest.dsp
+++ b/support/htdigest.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\htdigest.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\htdigest.exe
SOURCE="$(InputPath)"
diff --git a/support/htpasswd.dsp b/support/htpasswd.dsp
index 7074ba3c..871316f6 100644
--- a/support/htpasswd.dsp
+++ b/support/htpasswd.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\htpasswd.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\htpasswd.exe
SOURCE="$(InputPath)"
diff --git a/support/httxt2dbm.c b/support/httxt2dbm.c
index ea61b39c..efe493af 100644
--- a/support/httxt2dbm.c
+++ b/support/httxt2dbm.c
@@ -183,7 +183,7 @@ int main(int argc, const char *const argv[])
apr_file_t *infile;
apr_dbm_t *outdbm;
- apr_initialize();
+ apr_app_initialize(&argc, &argv, NULL);
atexit(apr_terminate);
verbose = 0;
diff --git a/support/httxt2dbm.dsp b/support/httxt2dbm.dsp
index 5f180cb7..f6b36ae0 100644
--- a/support/httxt2dbm.dsp
+++ b/support/httxt2dbm.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\httxt2dbm.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\httxt2dbm.exe
SOURCE="$(InputPath)"
diff --git a/support/logresolve.dsp b/support/logresolve.dsp
index 10a0dd21..ac404dbc 100644
--- a/support/logresolve.dsp
+++ b/support/logresolve.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\logresolve.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\logresolve.exe
SOURCE="$(InputPath)"
diff --git a/support/rotatelogs.c b/support/rotatelogs.c
index c6f99049..a408540a 100644
--- a/support/rotatelogs.c
+++ b/support/rotatelogs.c
@@ -42,6 +42,7 @@
#include "apr_file_info.h"
#include "apr_general.h"
#include "apr_time.h"
+#include "apr_getopt.h"
#if APR_HAVE_STDLIB_H
#include <stdlib.h>
@@ -60,6 +61,37 @@
#define MAX_PATH 1024
#endif
+static void usage(const char *argv0, const char *reason)
+{
+ if (reason) {
+ fprintf(stderr, "%s\n", reason);
+ }
+ fprintf(stderr,
+ "Usage: %s [-l] <logfile> "
+ "{<rotation time in seconds>|<rotation size in megabytes>} "
+ "[offset minutes from UTC]\n\n",
+ argv0);
+#ifdef OS2
+ fprintf(stderr,
+ "Add this:\n\nTransferLog \"|%s.exe /some/where 86400\"\n\n",
+ argv0);
+#else
+ fprintf(stderr,
+ "Add this:\n\nTransferLog \"|%s /some/where 86400\"\n\n",
+ argv0);
+ fprintf(stderr,
+ "or \n\nTransferLog \"|%s /some/where 5M\"\n\n", argv0);
+#endif
+ fprintf(stderr,
+ "to httpd.conf. The generated name will be /some/where.nnnn "
+ "where nnnn is the\nsystem time at which the log nominally "
+ "starts (N.B. if using a rotation time,\nthe time will always "
+ "be a multiple of the rotation time, so you can synchronize\n"
+ "cron scripts with it). At the end of each rotation time or "
+ "when the file size\nis reached a new log is started.\n");
+ exit(1);
+}
+
int main (int argc, const char * const argv[])
{
char buf[BUFSIZE], buf2[MAX_PATH], errbuf[ERRMSGSZ];
@@ -73,71 +105,58 @@ int main (int argc, const char * const argv[])
const char *szLogRoot;
apr_file_t *f_stdin, *nLogFD = NULL, *nLogFDprev = NULL;
apr_pool_t *pool;
+ apr_getopt_t *opt;
+ apr_status_t rv;
+ char c;
+ const char *optarg;
char *ptr = NULL;
- int argBase = 0;
- int argFile = 1;
- int argIntv = 2;
- int argOffset = 3;
apr_app_initialize(&argc, &argv, NULL);
atexit(apr_terminate);
apr_pool_create(&pool, NULL);
- if ((argc > 2) && (strcmp(argv[1], "-l") == 0)) {
- argBase++;
- argFile += argBase;
- argIntv += argBase;
- argOffset += argBase;
- use_localtime = 1;
+ apr_getopt_init(&opt, pool, argc, argv);
+ while ((rv = apr_getopt(opt, "l", &c, &optarg)) == APR_SUCCESS) {
+ switch (c) {
+ case 'l':
+ use_localtime = 1;
+ break;
+ }
}
- if (argc < (argBase + 3) || argc > (argBase + 4)) {
- fprintf(stderr,
- "Usage: %s [-l] <logfile> <rotation time in seconds> "
- "[offset minutes from UTC] or <rotation size in megabytes>\n\n",
- argv[0]);
-#ifdef OS2
- fprintf(stderr,
- "Add this:\n\nTransferLog \"|%s.exe /some/where 86400\"\n\n",
- argv[0]);
-#else
- fprintf(stderr,
- "Add this:\n\nTransferLog \"|%s /some/where 86400\"\n\n",
- argv[0]);
- fprintf(stderr,
- "or \n\nTransferLog \"|%s /some/where 5M\"\n\n", argv[0]);
-#endif
- fprintf(stderr,
- "to httpd.conf. The generated name will be /some/where.nnnn "
- "where nnnn is the\nsystem time at which the log nominally "
- "starts (N.B. if using a rotation time,\nthe time will always "
- "be a multiple of the rotation time, so you can synchronize\n"
- "cron scripts with it). At the end of each rotation time or "
- "when the file size\nis reached a new log is started.\n");
- exit(1);
+
+ if (rv != APR_EOF) {
+ usage(argv[0], NULL /* specific error message already issued */ );
+ }
+
+ if (opt->ind + 2 != argc && opt->ind + 3 != argc) {
+ usage(argv[0], "Incorrect number of arguments");
}
- szLogRoot = argv[argFile];
+ szLogRoot = argv[opt->ind++];
- ptr = strchr(argv[argIntv], 'M');
- if (ptr) {
+ ptr = strchr(argv[opt->ind], 'M');
+ if (ptr) { /* rotation based on file size */
if (*(ptr+1) == '\0') {
- sRotation = atoi(argv[argIntv]) * 1048576;
+ sRotation = atoi(argv[opt->ind]) * 1048576;
}
if (sRotation == 0) {
- fprintf(stderr, "Invalid rotation size parameter\n");
- exit(1);
+ usage(argv[0], "Invalid rotation size parameter");
}
}
- else {
- if (argc >= (argBase + 4)) {
- utc_offset = atoi(argv[argOffset]) * 60;
- }
- tRotation = atoi(argv[argIntv]);
+ else { /* rotation based on elapsed time */
+ tRotation = atoi(argv[opt->ind]);
if (tRotation <= 0) {
- fprintf(stderr, "Rotation time must be > 0\n");
- exit(6);
+ usage(argv[0], "Invalid rotation time parameter");
}
}
+ opt->ind++;
+
+ if (opt->ind < argc) { /* have UTC offset */
+ if (use_localtime) {
+ usage(argv[0], "UTC offset parameter is not valid with -l");
+ }
+ utc_offset = atoi(argv[opt->ind]) * 60;
+ }
use_strftime = (strchr(szLogRoot, '%') != NULL);
if (apr_file_open_stdin(&f_stdin, pool) != APR_SUCCESS) {
@@ -194,7 +213,16 @@ int main (int argc, const char * const argv[])
tLogStart = (now / tRotation) * tRotation;
}
else {
- tLogStart = (int)apr_time_sec(apr_time_now());
+ if (use_localtime) {
+ /* Check for our UTC offset before using it, since it might
+ * change if there's a switch between standard and daylight
+ * savings time.
+ */
+ apr_time_exp_t lt;
+ apr_time_exp_lt(&lt, apr_time_now());
+ utc_offset = lt.tm_gmtoff;
+ }
+ tLogStart = (int)apr_time_sec(apr_time_now()) + utc_offset;
}
if (use_strftime) {
diff --git a/support/rotatelogs.dsp b/support/rotatelogs.dsp
index c0bb1a84..5a043208 100644
--- a/support/rotatelogs.dsp
+++ b/support/rotatelogs.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\rotatelogs.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib advapi32.lib wsock32.lib ws2_32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\rotatelogs.exe
SOURCE="$(InputPath)"
diff --git a/support/win32/ApacheMonitor.c b/support/win32/ApacheMonitor.c
index 128d9cc2..fa5a3f89 100644
--- a/support/win32/ApacheMonitor.c
+++ b/support/win32/ApacheMonitor.c
@@ -186,15 +186,12 @@ void am_DisconnectComputer(LPSTR szComputerName)
free(g_stComputers[i].szComputerName);
RegCloseKey(g_stComputers[i].hRegistry);
for (j = i; j < MAX_APACHE_COMPUTERS - 1; j++) {
- g_stComputers[i].szComputerName= g_stComputers[i+1].szComputerName;
- g_stComputers[i].hRegistry = g_stComputers[i+1].hRegistry;
- }
- for (i = j; i < MAX_APACHE_COMPUTERS; i++) {
- g_stComputers[i].szComputerName = NULL;
- g_stComputers[i].hRegistry = NULL;
+ g_stComputers[j].szComputerName= g_stComputers[j+1].szComputerName;
+ g_stComputers[j].hRegistry = g_stComputers[j+1].hRegistry;
}
+ g_stComputers[j].szComputerName = NULL;
+ g_stComputers[j].hRegistry = NULL;
}
-
}
@@ -1048,8 +1045,8 @@ BOOL GetApacheServicesStatus()
}
}
++computers;
+ RegCloseKey(hKey);
}
- RegCloseKey(hKey);
FindRunningServices();
return TRUE;
}
diff --git a/support/win32/wintty.dsp b/support/win32/wintty.dsp
index 95de23a2..8d5b9df6 100644
--- a/support/win32/wintty.dsp
+++ b/support/win32/wintty.dsp
@@ -49,8 +49,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /debug /opt:ref
+# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console
+# ADD LINK32 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /opt:ref
# Begin Special Build Tool
TargetPath=.\Release\wintty.exe
SOURCE="$(InputPath)"
@@ -79,8 +79,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /incremental:no /debug
-# ADD LINK32 kernel32.lib user32.lib advapi32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD BASE LINK32 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
+# ADD LINK32 kernel32.lib user32.lib advapi32.lib shell32.lib /nologo /subsystem:console /incremental:no /debug
# Begin Special Build Tool
TargetPath=.\Debug\wintty.exe
SOURCE="$(InputPath)"