Version in base suite: 2.4.51-1~deb11u1 Base version: apache2_2.4.51-1~deb11u1 Target version: apache2_2.4.52-1~deb11u2 Base file: /srv/ftp-master.debian.org/ftp/pool/main/a/apache2/apache2_2.4.51-1~deb11u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/a/apache2/apache2_2.4.52-1~deb11u2.dsc /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/002.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/003/003_img.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/004/gophertiles.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/ant.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/asf_logo.png |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js.br |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/min.css.br |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/mrunit.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/search_box_icon.png |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/small-logo.png |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/synapse.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/pyhttpd/htdocs/test1/002.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/pyhttpd/htdocs/test1/003/003_img.jpg |binary /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/pyhttpd/htdocs/test1/004/gophertiles.jpg |binary apache2-2.4.52/.travis.yml | 116 apache2-2.4.52/CHANGES | 118 apache2-2.4.52/acinclude.m4 | 18 apache2-2.4.52/configure | 9959 +++++----- apache2-2.4.52/configure.in | 4 apache2-2.4.52/debian/changelog | 18 apache2-2.4.52/debian/patches/fhs_compliance.patch | 26 apache2-2.4.52/debian/patches/fix-2.4.52-regression.patch | 107 apache2-2.4.52/debian/patches/series | 1 apache2-2.4.52/debian/patches/suexec-custom.patch | 32 apache2-2.4.52/docs/manual/convenience.map | 24 apache2-2.4.52/docs/manual/mod/directives.html.de | 16 apache2-2.4.52/docs/manual/mod/directives.html.en | 16 apache2-2.4.52/docs/manual/mod/directives.html.es | 16 apache2-2.4.52/docs/manual/mod/directives.html.fr.utf8 | 16 apache2-2.4.52/docs/manual/mod/directives.html.ja.utf8 | 16 apache2-2.4.52/docs/manual/mod/directives.html.ko.euc-kr | 16 apache2-2.4.52/docs/manual/mod/directives.html.tr.utf8 | 16 apache2-2.4.52/docs/manual/mod/directives.html.zh-cn.utf8 | 16 apache2-2.4.52/docs/manual/mod/index.html.de | 5 apache2-2.4.52/docs/manual/mod/index.html.en | 5 apache2-2.4.52/docs/manual/mod/index.html.es | 5 apache2-2.4.52/docs/manual/mod/index.html.fr.utf8 | 5 apache2-2.4.52/docs/manual/mod/index.html.ja.utf8 | 5 apache2-2.4.52/docs/manual/mod/index.html.ko.euc-kr | 5 apache2-2.4.52/docs/manual/mod/index.html.tr.utf8 | 5 apache2-2.4.52/docs/manual/mod/index.html.zh-cn.utf8 | 5 apache2-2.4.52/docs/manual/mod/mod_md.html.en | 41 apache2-2.4.52/docs/manual/mod/mod_md.html.fr.utf8 | 47 apache2-2.4.52/docs/manual/mod/mod_proxy.html.en | 27 apache2-2.4.52/docs/manual/mod/mod_proxy.html.fr.utf8 | 2 apache2-2.4.52/docs/manual/mod/mod_substitute.html.fr.utf8 | 2 apache2-2.4.52/docs/manual/mod/mod_tls.html | 5 apache2-2.4.52/docs/manual/mod/mod_tls.html.en | 657 apache2-2.4.52/docs/manual/mod/quickreference.html.de | 654 apache2-2.4.52/docs/manual/mod/quickreference.html.en | 652 apache2-2.4.52/docs/manual/mod/quickreference.html.es | 652 apache2-2.4.52/docs/manual/mod/quickreference.html.fr.utf8 | 662 apache2-2.4.52/docs/manual/mod/quickreference.html.ja.utf8 | 640 apache2-2.4.52/docs/manual/mod/quickreference.html.ko.euc-kr | 650 apache2-2.4.52/docs/manual/mod/quickreference.html.tr.utf8 | 660 apache2-2.4.52/docs/manual/mod/quickreference.html.zh-cn.utf8 | 652 apache2-2.4.52/docs/manual/sitemap.html.de | 1 apache2-2.4.52/docs/manual/sitemap.html.en | 1 apache2-2.4.52/docs/manual/sitemap.html.es | 1 apache2-2.4.52/docs/manual/sitemap.html.fr.utf8 | 1 apache2-2.4.52/docs/manual/sitemap.html.ja.utf8 | 1 apache2-2.4.52/docs/manual/sitemap.html.ko.euc-kr | 1 apache2-2.4.52/docs/manual/sitemap.html.tr.utf8 | 1 apache2-2.4.52/docs/manual/sitemap.html.zh-cn.utf8 | 1 apache2-2.4.52/docs/manual/style/version.ent | 2 apache2-2.4.52/httpd.spec | 2 apache2-2.4.52/include/ap_config_auto.h.in | 101 apache2-2.4.52/include/ap_mmn.h | 8 apache2-2.4.52/include/ap_release.h | 2 apache2-2.4.52/include/http_protocol.h | 7 apache2-2.4.52/include/http_ssl.h | 16 apache2-2.4.52/modules/dav/main/mod_dav.h | 34 apache2-2.4.52/modules/dav/main/props.c | 21 apache2-2.4.52/modules/dav/main/util.c | 59 apache2-2.4.52/modules/http/http_filters.c | 3 apache2-2.4.52/modules/http/http_request.c | 2 apache2-2.4.52/modules/http2/h2_request.c | 2 apache2-2.4.52/modules/http2/h2_session.c | 15 apache2-2.4.52/modules/http2/h2_version.h | 4 apache2-2.4.52/modules/http2/h2_workers.c | 2 apache2-2.4.52/modules/lua/lua_request.c | 1 apache2-2.4.52/modules/md/md.h | 28 apache2-2.4.52/modules/md/md_acme.c | 59 apache2-2.4.52/modules/md/md_acme.h | 22 apache2-2.4.52/modules/md/md_acme_acct.c | 306 apache2-2.4.52/modules/md/md_acme_acct.h | 26 apache2-2.4.52/modules/md/md_acme_authz.c | 16 apache2-2.4.52/modules/md/md_acme_drive.c | 43 apache2-2.4.52/modules/md/md_acme_order.c | 15 apache2-2.4.52/modules/md/md_acme_order.h | 3 apache2-2.4.52/modules/md/md_acmev2_drive.c | 28 apache2-2.4.52/modules/md/md_core.c | 84 apache2-2.4.52/modules/md/md_crypt.c | 91 apache2-2.4.52/modules/md/md_crypt.h | 3 apache2-2.4.52/modules/md/md_jws.c | 112 apache2-2.4.52/modules/md/md_jws.h | 25 apache2-2.4.52/modules/md/md_reg.c | 56 apache2-2.4.52/modules/md/md_status.c | 102 apache2-2.4.52/modules/md/md_store_fs.c | 17 apache2-2.4.52/modules/md/md_version.h | 4 apache2-2.4.52/modules/md/mod_md.c | 29 apache2-2.4.52/modules/md/mod_md_config.c | 87 apache2-2.4.52/modules/md/mod_md_config.h | 4 apache2-2.4.52/modules/md/mod_md_status.c | 53 apache2-2.4.52/modules/proxy/mod_proxy.c | 43 apache2-2.4.52/modules/proxy/mod_proxy.h | 4 apache2-2.4.52/modules/proxy/mod_proxy_balancer.c | 8 apache2-2.4.52/modules/proxy/mod_proxy_connect.c | 2 apache2-2.4.52/modules/proxy/mod_proxy_http.c | 29 apache2-2.4.52/modules/proxy/mod_proxy_uwsgi.c | 12 apache2-2.4.52/modules/proxy/proxy_util.c | 71 apache2-2.4.52/modules/ssl/ssl_engine_init.c | 127 apache2-2.4.52/modules/ssl/ssl_engine_io.c | 40 apache2-2.4.52/modules/ssl/ssl_engine_kernel.c | 24 apache2-2.4.52/modules/ssl/ssl_engine_log.c | 12 apache2-2.4.52/modules/ssl/ssl_private.h | 26 apache2-2.4.52/modules/tls/Makefile.in | 20 apache2-2.4.52/modules/tls/config2.m4 | 159 apache2-2.4.52/modules/tls/mod_tls.c | 288 apache2-2.4.52/modules/tls/mod_tls.h | 19 apache2-2.4.52/modules/tls/tls_cache.c | 310 apache2-2.4.52/modules/tls/tls_cache.h | 63 apache2-2.4.52/modules/tls/tls_cert.c | 564 apache2-2.4.52/modules/tls/tls_cert.h | 211 apache2-2.4.52/modules/tls/tls_conf.c | 780 apache2-2.4.52/modules/tls/tls_conf.h | 185 apache2-2.4.52/modules/tls/tls_core.c | 1433 + apache2-2.4.52/modules/tls/tls_core.h | 184 apache2-2.4.52/modules/tls/tls_filter.c | 1017 + apache2-2.4.52/modules/tls/tls_filter.h | 90 apache2-2.4.52/modules/tls/tls_ocsp.c | 120 apache2-2.4.52/modules/tls/tls_ocsp.h | 47 apache2-2.4.52/modules/tls/tls_proto.c | 603 apache2-2.4.52/modules/tls/tls_proto.h | 124 apache2-2.4.52/modules/tls/tls_util.c | 367 apache2-2.4.52/modules/tls/tls_util.h | 157 apache2-2.4.52/modules/tls/tls_var.c | 397 apache2-2.4.52/modules/tls/tls_var.h | 39 apache2-2.4.52/modules/tls/tls_version.h | 39 apache2-2.4.52/server/connection.c | 13 apache2-2.4.52/server/mpm/event/event.c | 118 apache2-2.4.52/server/mpm/mpmt_os2/mpmt_os2.c | 6 apache2-2.4.52/server/mpm/prefork/prefork.c | 1 apache2-2.4.52/server/mpm/worker/worker.c | 41 apache2-2.4.52/server/protocol.c | 23 apache2-2.4.52/server/util_filter.c | 5 apache2-2.4.52/test/Makefile.in | 6 apache2-2.4.52/test/README.pytest | 127 apache2-2.4.52/test/README.travis | 19 apache2-2.4.52/test/conftest.py | 12 apache2-2.4.52/test/modules/core/__init__.py | 1 apache2-2.4.52/test/modules/core/conftest.py | 44 apache2-2.4.52/test/modules/core/test_001_encoding.py | 93 apache2-2.4.52/test/modules/http2/conf/httpd.conf.template | 53 apache2-2.4.52/test/modules/http2/conf/mime.types | 1588 - apache2-2.4.52/test/modules/http2/conf/test.conf | 1 apache2-2.4.52/test/modules/http2/config.ini.in | 29 apache2-2.4.52/test/modules/http2/conftest.py | 27 apache2-2.4.52/test/modules/http2/data/nghttp-output-100k-1.txt | 1153 - apache2-2.4.52/test/modules/http2/data/nghttp-output-10k-1.txt | 166 apache2-2.4.52/test/modules/http2/data/nghttp-output-1k-1.txt | 68 apache2-2.4.52/test/modules/http2/env.py | 141 apache2-2.4.52/test/modules/http2/h2_certs.py | 444 apache2-2.4.52/test/modules/http2/h2_conf.py | 163 apache2-2.4.52/test/modules/http2/h2_curl.py | 133 apache2-2.4.52/test/modules/http2/h2_env.py | 632 apache2-2.4.52/test/modules/http2/h2_nghttp.py | 288 apache2-2.4.52/test/modules/http2/h2_result.py | 71 apache2-2.4.52/test/modules/http2/htdocs/alive.json | 4 apache2-2.4.52/test/modules/http2/htdocs/cgi/echo.py | 1 apache2-2.4.52/test/modules/http2/htdocs/forbidden.html | 11 apache2-2.4.52/test/modules/http2/htdocs/index.html | 9 apache2-2.4.52/test/modules/http2/htdocs/test1/001.html | 10 apache2-2.4.52/test/modules/http2/htdocs/test1/003.html | 11 apache2-2.4.52/test/modules/http2/htdocs/test1/004.html | 23 apache2-2.4.52/test/modules/http2/htdocs/test1/006.html | 23 apache2-2.4.52/test/modules/http2/htdocs/test1/006/006.css | 21 apache2-2.4.52/test/modules/http2/htdocs/test1/006/006.js | 31 apache2-2.4.52/test/modules/http2/htdocs/test1/006/header.html | 1 apache2-2.4.52/test/modules/http2/htdocs/test1/007.html | 21 apache2-2.4.52/test/modules/http2/htdocs/test1/007/007.py | 29 apache2-2.4.52/test/modules/http2/htdocs/test1/009.py | 21 apache2-2.4.52/test/modules/http2/htdocs/test1/alive.json | 5 apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js | 278 apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/default.css | 676 apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/defaulten.css | 2284 -- apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/defaulten.js | 674 apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/jquery-2.js | 4 apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/min.css | 1 apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/styles.css | 131 apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org.html | 899 apache2-2.4.52/test/modules/http2/htdocs/test1/index.html | 46 apache2-2.4.52/test/modules/http2/htdocs/test2/006/006.css | 21 apache2-2.4.52/test/modules/http2/htdocs/test2/alive.json | 4 apache2-2.4.52/test/modules/http2/test_000_infra.py | 17 apache2-2.4.52/test/modules/http2/test_001_httpd_alive.py | 23 apache2-2.4.52/test/modules/http2/test_002_curl_basics.py | 66 apache2-2.4.52/test/modules/http2/test_003_get.py | 88 apache2-2.4.52/test/modules/http2/test_004_post.py | 101 apache2-2.4.52/test/modules/http2/test_005_files.py | 47 apache2-2.4.52/test/modules/http2/test_005_status.py | 70 apache2-2.4.52/test/modules/http2/test_006_assets.py | 16 apache2-2.4.52/test/modules/http2/test_100_conn_reuse.py | 28 apache2-2.4.52/test/modules/http2/test_101_ssl_reneg.py | 87 apache2-2.4.52/test/modules/http2/test_102_require.py | 14 apache2-2.4.52/test/modules/http2/test_103_upgrade.py | 40 apache2-2.4.52/test/modules/http2/test_104_padding.py | 51 apache2-2.4.52/test/modules/http2/test_105_timeout.py | 38 apache2-2.4.52/test/modules/http2/test_106_shutdown.py | 37 apache2-2.4.52/test/modules/http2/test_200_header_invalid.py | 60 apache2-2.4.52/test/modules/http2/test_201_header_conditional.py | 28 apache2-2.4.52/test/modules/http2/test_202_trailer.py | 16 apache2-2.4.52/test/modules/http2/test_203_encoding.py | 105 apache2-2.4.52/test/modules/http2/test_300_interim.py | 16 apache2-2.4.52/test/modules/http2/test_400_push.py | 72 apache2-2.4.52/test/modules/http2/test_401_early_hints.py | 18 apache2-2.4.52/test/modules/http2/test_500_proxy.py | 34 apache2-2.4.52/test/modules/http2/test_501_proxy_serverheader.py | 36 apache2-2.4.52/test/modules/http2/test_600_h2proxy.py | 9 apache2-2.4.52/test/modules/http2/test_700_load_get.py | 20 apache2-2.4.52/test/modules/http2/test_710_load_post_static.py | 13 apache2-2.4.52/test/modules/http2/test_711_load_post_cgi.py | 13 apache2-2.4.52/test/modules/http2/test_712_buffering.py | 17 apache2-2.4.52/test/modules/md/conftest.py | 89 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/accounts/ACME-localhost-0000/account.json | 6 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/accounts/ACME-localhost-0000/account.pem | 54 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/archive/7007-1502285564.org.1/md.json | 18 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/domains/7007-1502285564.org/cert.pem | 32 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/domains/7007-1502285564.org/chain.pem | 27 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/domains/7007-1502285564.org/md.json | 23 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/domains/7007-1502285564.org/pkey.pem | 52 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/httpd.json | 6 apache2-2.4.52/test/modules/md/data/store_migrate/1.0/sample1/md_store.json | 7 apache2-2.4.52/test/modules/md/data/test_920/002.pubcert | 58 apache2-2.4.52/test/modules/md/data/test_conf_validate/test_014.conf | 8 apache2-2.4.52/test/modules/md/data/test_drive/test1.example.org.conf | 6 apache2-2.4.52/test/modules/md/data/test_roundtrip/temp.conf | 27 apache2-2.4.52/test/modules/md/dns01.py | 62 apache2-2.4.52/test/modules/md/http_challenge_foobar.py | 27 apache2-2.4.52/test/modules/md/md_acme.py | 125 apache2-2.4.52/test/modules/md/md_cert_util.py | 239 apache2-2.4.52/test/modules/md/md_certs.py | 444 apache2-2.4.52/test/modules/md/md_conf.py | 81 apache2-2.4.52/test/modules/md/md_env.py | 605 apache2-2.4.52/test/modules/md/message.py | 26 apache2-2.4.52/test/modules/md/msg_fail_on.py | 28 apache2-2.4.52/test/modules/md/notifail.py | 16 apache2-2.4.52/test/modules/md/notify.py | 18 apache2-2.4.52/test/modules/md/pebble/pebble-eab.json.template | 16 apache2-2.4.52/test/modules/md/pebble/pebble.json.template | 12 apache2-2.4.52/test/modules/md/test_001_store.py | 213 apache2-2.4.52/test/modules/md/test_010_store_migrate.py | 43 apache2-2.4.52/test/modules/md/test_100_reg_add.py | 152 apache2-2.4.52/test/modules/md/test_110_reg_update.py | 273 apache2-2.4.52/test/modules/md/test_120_reg_list.py | 87 apache2-2.4.52/test/modules/md/test_202_acmev2_regs.py | 132 apache2-2.4.52/test/modules/md/test_300_conf_validate.py | 344 apache2-2.4.52/test/modules/md/test_310_conf_store.py | 850 apache2-2.4.52/test/modules/md/test_502_acmev2_drive.py | 549 apache2-2.4.52/test/modules/md/test_602_roundtrip.py | 143 apache2-2.4.52/test/modules/md/test_702_auto.py | 753 apache2-2.4.52/test/modules/md/test_720_wildcard.py | 233 apache2-2.4.52/test/modules/md/test_730_static.py | 117 apache2-2.4.52/test/modules/md/test_740_acme_errors.py | 72 apache2-2.4.52/test/modules/md/test_741_setup_errors.py | 48 apache2-2.4.52/test/modules/md/test_750_eab.py | 337 apache2-2.4.52/test/modules/md/test_751_sectigo.py | 181 apache2-2.4.52/test/modules/md/test_752_zerossl.py | 202 apache2-2.4.52/test/modules/md/test_800_must_staple.py | 84 apache2-2.4.52/test/modules/md/test_801_stapling.py | 391 apache2-2.4.52/test/modules/md/test_810_ec.py | 153 apache2-2.4.52/test/modules/md/test_900_notify.py | 122 apache2-2.4.52/test/modules/md/test_901_message.py | 297 apache2-2.4.52/test/modules/md/test_910_cleanups.py | 54 apache2-2.4.52/test/modules/md/test_920_status.py | 241 apache2-2.4.52/test/modules/tls/conf.py | 61 apache2-2.4.52/test/modules/tls/conftest.py | 39 apache2-2.4.52/test/modules/tls/env.py | 186 apache2-2.4.52/test/modules/tls/htdocs/a.mod-tls.test/index.json | 3 apache2-2.4.52/test/modules/tls/htdocs/a.mod-tls.test/vars.py | 36 apache2-2.4.52/test/modules/tls/htdocs/b.mod-tls.test/dir1/vars.py | 23 apache2-2.4.52/test/modules/tls/htdocs/b.mod-tls.test/index.json | 3 apache2-2.4.52/test/modules/tls/htdocs/b.mod-tls.test/resp-jitter.py | 23 apache2-2.4.52/test/modules/tls/htdocs/b.mod-tls.test/vars.py | 35 apache2-2.4.52/test/modules/tls/htdocs/index.html | 9 apache2-2.4.52/test/modules/tls/htdocs/index.json | 3 apache2-2.4.52/test/modules/tls/test_01_apache.py | 14 apache2-2.4.52/test/modules/tls/test_02_conf.py | 138 apache2-2.4.52/test/modules/tls/test_03_sni.py | 73 apache2-2.4.52/test/modules/tls/test_04_get.py | 67 apache2-2.4.52/test/modules/tls/test_05_proto.py | 67 apache2-2.4.52/test/modules/tls/test_06_ciphers.py | 209 apache2-2.4.52/test/modules/tls/test_07_alpn.py | 43 apache2-2.4.52/test/modules/tls/test_08_vars.py | 63 apache2-2.4.52/test/modules/tls/test_09_timeout.py | 43 apache2-2.4.52/test/modules/tls/test_10_session_id.py | 50 apache2-2.4.52/test/modules/tls/test_11_md.py | 37 apache2-2.4.52/test/modules/tls/test_12_cauth.py | 235 apache2-2.4.52/test/modules/tls/test_13_proxy.py | 40 apache2-2.4.52/test/modules/tls/test_14_proxy_ssl.py | 78 apache2-2.4.52/test/modules/tls/test_15_proxy_tls.py | 89 apache2-2.4.52/test/modules/tls/test_16_proxy_mixed.py | 43 apache2-2.4.52/test/modules/tls/test_17_proxy_machine_cert.py | 69 apache2-2.4.52/test/pyhttpd/certs.py | 476 apache2-2.4.52/test/pyhttpd/conf.py | 198 apache2-2.4.52/test/pyhttpd/conf/httpd.conf.template | 60 apache2-2.4.52/test/pyhttpd/conf/mime.types | 1588 + apache2-2.4.52/test/pyhttpd/conf/stop.conf.template | 46 apache2-2.4.52/test/pyhttpd/conf/test.conf | 1 apache2-2.4.52/test/pyhttpd/config.ini.in | 30 apache2-2.4.52/test/pyhttpd/curl.py | 133 apache2-2.4.52/test/pyhttpd/env.py | 706 apache2-2.4.52/test/pyhttpd/htdocs/alive.json | 4 apache2-2.4.52/test/pyhttpd/htdocs/forbidden.html | 11 apache2-2.4.52/test/pyhttpd/htdocs/index.html | 9 apache2-2.4.52/test/pyhttpd/htdocs/test1/001.html | 10 apache2-2.4.52/test/pyhttpd/htdocs/test1/003.html | 11 apache2-2.4.52/test/pyhttpd/htdocs/test1/004.html | 23 apache2-2.4.52/test/pyhttpd/htdocs/test1/006.html | 23 apache2-2.4.52/test/pyhttpd/htdocs/test1/006/006.css | 21 apache2-2.4.52/test/pyhttpd/htdocs/test1/006/006.js | 31 apache2-2.4.52/test/pyhttpd/htdocs/test1/006/header.html | 1 apache2-2.4.52/test/pyhttpd/htdocs/test1/007.html | 21 apache2-2.4.52/test/pyhttpd/htdocs/test1/007/007.py | 29 apache2-2.4.52/test/pyhttpd/htdocs/test1/009.py | 21 apache2-2.4.52/test/pyhttpd/htdocs/test1/alive.json | 5 apache2-2.4.52/test/pyhttpd/htdocs/test1/index.html | 46 apache2-2.4.52/test/pyhttpd/htdocs/test2/006/006.css | 21 apache2-2.4.52/test/pyhttpd/htdocs/test2/alive.json | 4 apache2-2.4.52/test/pyhttpd/log.py | 163 apache2-2.4.52/test/pyhttpd/nghttp.py | 289 apache2-2.4.52/test/pyhttpd/result.py | 80 apache2-2.4.52/test/travis_before_linux.sh | 29 apache2-2.4.52/test/travis_run_linux.sh | 86 334 files changed, 33609 insertions(+), 18124 deletions(-) diff -Nru apache2-2.4.51/.travis.yml apache2-2.4.52/.travis.yml --- apache2-2.4.51/.travis.yml 2021-09-03 08:33:22.000000000 +0000 +++ apache2-2.4.52/.travis.yml 2021-12-16 09:25:18.000000000 +0000 @@ -107,11 +107,11 @@ - name: Linux Ubuntu, Shared MPMs, all-modules env: CONFIG="--enable-mods-shared=reallyall --enable-mpms-shared=all" # ------------------------------------------------------------------------- - - name: Linux Ubuntu, GCC 7 maintainer-mode w/-Werror + - name: Linux Ubuntu, GCC 7 maintainer-mode w/-Werror, install + VPATH os: linux env: CONFIG="--enable-mods-shared=reallyall --enable-maintainer-mode" NOTEST_CFLAGS='-Werror -O2' CC=gcc-7 - SKIP_TESTING=1 + TEST_VPATH=1 TEST_INSTALL=1 SKIP_TESTING=1 # ------------------------------------------------------------------------- - name: Linux Ubuntu, Event MPM, all-modules, mod_cgid only env: CONFIG="--enable-mods-shared=reallyall --with-mpm=event --disable-cgi" @@ -264,6 +264,118 @@ TEST_MALLOC=1 TEST_SSL=1 CLEAR_CACHE=1 # ------------------------------------------------------------------------- + - name: Linux Ubuntu, APR trunk, minimal module set, OpenSSL 3.x + if: *condition_not_24x + env: APR_VERSION=trunk APR_CONFIG="--without-pgsql --without-mysql --without-odbc --with-crypto" + CONFIG="--enable-mods-shared=ssl --with-mpm=event" + TEST_SSL=1 TEST_OPENSSL3=3.0.1 + # ------------------------------------------------------------------------- + - if: *condition_24x_only + name: Linux Ubuntu, APR 1.7, minimal module set, OpenSSL 3.x + env: APR_VERSION=1.7.0 + APU_VERSION=1.6.1 APU_CONFIG="--without-pgsql --without-mysql --without-odbc --with-crypto" + CONFIG="--enable-mods-shared=ssl --with-mpm=event" + TEST_SSL=1 TEST_OPENSSL3=3.0.1 + # ------------------------------------------------------------------------- + - name: Linux Ubuntu, MPMs [event, worker], core + HTTP/2 test suite + dist: focal + env: APR_VERSION=1.7.0 + APU_VERSION=1.6.1 APU_CONFIG="--with-crypto" + CONFIG="--enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=all" + NO_TEST_FRAMEWORK=1 TEST_INSTALL=1 TEST_H2=1 TEST_CORE=1 + addons: + apt: + sources: + - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe' + packages: + - cpanminus + - libtool-bin + - libapr1-dev + - libaprutil1-dev + - perl-doc + - liblua5.3-dev + - libbrotli-dev + - libcurl4-openssl-dev + - libsystemd-dev + - libnghttp2-dev + - libjansson-dev + - libpcre2-dev + - libldap2-dev + - ldap-utils + - gdb + - curl + - python3-pytest + - nghttp2-client + - python3-cryptography + - python3-requests + # ------------------------------------------------------------------------- + - name: Linux Ubuntu, event MPM, ACME test suite + dist: focal + env: APR_VERSION=1.7.0 + APU_VERSION=1.6.1 APU_CONFIG="--with-crypto" + CONFIG="--enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=event" + NO_TEST_FRAMEWORK=1 TEST_INSTALL=1 TEST_MD=1 + addons: + apt: + sources: + - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe' + packages: + - cpanminus + - libtool-bin + - libapr1-dev + - libaprutil1-dev + - perl-doc + - liblua5.3-dev + - libbrotli-dev + - libcurl4-openssl-dev + - libsystemd-dev + - libnghttp2-dev + - libjansson-dev + - libpcre2-dev + - libldap2-dev + - ldap-utils + - gdb + - curl + - python3-pytest + - nghttp2-client + - python3-cryptography + - python3-requests + - golang-1.14 + # ------------------------------------------------------------------------- + - name: Linux Ubuntu, event MPM, MOD_TLS test suite + dist: focal + env: APR_VERSION=1.7.0 + APU_VERSION=1.6.1 APU_CONFIG="--with-crypto" + CONFIG="--enable-mods-shared=reallyall --with-mpm=event --enable-mpms-shared=event" + NO_TEST_FRAMEWORK=1 TEST_INSTALL=1 TEST_MOD_TLS=1 + addons: + apt: + sources: + - sourceline: 'deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe' + packages: + - cpanminus + - libtool-bin + - libapr1-dev + - libaprutil1-dev + - perl-doc + - liblua5.3-dev + - libbrotli-dev + - libcurl4-openssl-dev + - libsystemd-dev + - libnghttp2-dev + - libjansson-dev + - libpcre2-dev + - libldap2-dev + - ldap-utils + - gdb + - curl + - python3-pytest + - nghttp2-client + - python3-cryptography + - python3-requests + - cargo + - cbindgen + # ------------------------------------------------------------------------- - name: Linux Ubuntu, APR 1.7.0, APR-util 1.6.1, LDAP env: APR_VERSION=1.7.0 APU_VERSION=1.6.1 APU_CONFIG="--with-crypto --with-ldap" diff -Nru apache2-2.4.51/CHANGES apache2-2.4.52/CHANGES --- apache2-2.4.51/CHANGES 2021-10-07 12:27:43.000000000 +0000 +++ apache2-2.4.52/CHANGES 2021-12-14 15:35:56.000000000 +0000 @@ -1,6 +1,124 @@ -*- coding: utf-8 -*- +Changes with Apache 2.4.52 + + *) http: Enforce that fully qualified uri-paths not to be forward-proxied + have an http(s) scheme, and that the ones to be forward proxied have a + hostname, per HTTP specifications. [Ruediger Pluem, Yann Ylavic] + + *) OpenSSL autoconf detection improvement: pick up openssl.pc in the + specified openssl path. [Joe Orton] + + *) mod_proxy_connect, mod_proxy: Do not change the status code after we + already sent it to the client. + + *) mod_http: Correctly sent a 100 Continue status code when sending an interim + response as result of an Expect: 100-Continue in the request and not the + current status code of the request. PR 65725 [Ruediger Pluem] + + *) mod_dav: Some DAV extensions, like CalDAV, specify both document + elements and property elements that need to be taken into account + when generating a property. The document element and property element + are made available in the dav_liveprop_elem structure by calling + dav_get_liveprop_element(). [Graham Leggett] + + *) mod_dav: Add utility functions dav_validate_root_ns(), + dav_find_child_ns(), dav_find_next_ns(), dav_find_attr_ns() and + dav_find_attr() so that other modules get to play too. + [Graham Leggett] + + *) mpm_event: Restart stopping of idle children after a load peak. PR 65626. + [Yann Ylavic, Ruediger Pluem] + + *) mod_http2: fixes 2 regressions in server limit handling. + 1. When reaching server limits, such as MaxRequestsPerChild, the + HTTP/2 connection send a GOAWAY frame much too early on new + connections, leading to invalid protocol state and a client + failing the request. See PR65731. + The module now initializes the HTTP/2 protocol correctly and + allows the client to submit one request before the shutdown + via a GOAWAY frame is being announced. + 2. A regression in v1.15.24 was fixed that could lead to httpd + child processes not being terminated on a graceful reload or + when reaching MaxConnectionsPerChild. When unprocessed h2 + requests were queued at the time, these could stall. + See . + [Stefan Eissing] + + *) mod_ssl: Add build support for OpenSSL v3. [Rainer Jung, + Stefan Fritsch, Yann Ylavic, Stefan Eissing, Joe Orton, + Giovanni Bechis] + + *) mod_proxy_connect: Honor the smallest of the backend or client timeout + while tunneling. [Yann Ylavic] + + *) mod_proxy: SetEnv proxy-nohalfclose (or alike) allows to disable TCP + half-close forwarding when tunneling protocols. [Yann Ylavic] + + *) core: Be safe with ap_lingering_close() called with a socket NULL-ed by + a third-party module. PR 65627. + [acmondor , Yann Ylavic] + + *) mod_md: Fix memory leak in case of failures to load the private key. + PR 65620 [ Filipe Casal ] + + *) mod_md: adding v2.4.8 with the following changes + - Added support for ACME External Account Binding (EAB). + Use the new directive `MDExternalAccountBinding` to provide the + server with the value for key identifier and hmac as provided by + your CA. + While working on some servers, EAB handling is not uniform + across CAs. First tests with a Sectigo Certificate Manager in + demo mode are successful. But ZeroSSL, for example, seems to + regard EAB values as a one-time-use-only thing, which makes them + fail if you create a seconde account or retry the creation of the + first account with the same EAB. + - The directive 'MDCertificateAuthority' now checks if its parameter + is a http/https url or one of a set of known names. Those are + 'LetsEncrypt', 'LetsEncrypt-Test', 'Buypass' and 'Buypass-Test' + for now and they are not case-sensitive. + The default of LetsEncrypt is unchanged. + - `MDContactEmail` can now be specified inside a `` + section. + - Treating 401 HTTP status codes for orders like 403, since some ACME + servers seem to prefer that for accessing oders from other accounts. + - When retrieving certificate chains, try to read the repsonse even + if the HTTP Content-Type is unrecognized. + - Fixed a bug that reset the error counter of a certificate renewal + and prevented the increasing delays in further attempts. + - Fixed the renewal process giving up every time on an already existing + order with some invalid domains. Now, if such are seen in a previous + order, a new order is created for a clean start over again. + See + - Fixed a mixup in md-status handler when static certificate files + and renewal was configured at the same time. + + *) mod_md: values for External Account Binding (EAB) can + now also be configured to be read from a separate JSON + file. This allows to keep server configuration permissions + world readable without exposing secrets. + [Stefan Eissing] + + *) mod_proxy_uwsgi: Remove duplicate slashes at the beginning of PATH_INFO. + PR 65616. [Ruediger Pluem] + Changes with Apache 2.4.51 + *) SECURITY: CVE-2021-42013: Path Traversal and Remote Code + Execution in Apache HTTP Server 2.4.49 and 2.4.50 (incomplete + fix of CVE-2021-41773) (cve.mitre.org) + It was found that the fix for CVE-2021-41773 in Apache HTTP + Server 2.4.50 was insufficient. An attacker could use a path + traversal attack to map URLs to files outside the directories + configured by Alias-like directives. + If files outside of these directories are not protected by the + usual default configuration "require all denied", these requests + can succeed. If CGI scripts are also enabled for these aliased + pathes, this could allow for remote code execution. + This issue only affects Apache 2.4.49 and Apache 2.4.50 and not + earlier versions. + Credits: Reported by Juan Escobar from Dreamlab Technologies, + Fernando Muñoz from NULL Life CTF Team, and Shungo Kumasaka + *) core: Add ap_unescape_url_ex() for better decoding control, and deprecate unused AP_NORMALIZE_DROP_PARAMETERS flag. [Yann Ylavic, Ruediger Pluem, Stefan Eissing, Joe Orton] diff -Nru apache2-2.4.51/acinclude.m4 apache2-2.4.52/acinclude.m4 --- apache2-2.4.51/acinclude.m4 2020-09-15 07:19:13.000000000 +0000 +++ apache2-2.4.52/acinclude.m4 2021-12-13 19:30:46.000000000 +0000 @@ -517,12 +517,18 @@ dnl Before doing anything else, load in pkg-config variables if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - if test "x$ap_openssl_base" != "x" -a \ - -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then - dnl Ensure that the given path is used by pkg-config too, otherwise - dnl the system openssl.pc might be picked up instead. - PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" - export PKG_CONFIG_PATH + if test "x$ap_openssl_base" != "x"; then + if test -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then + dnl Ensure that the given path is used by pkg-config too, otherwise + dnl the system openssl.pc might be picked up instead. + PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + elif test -f "${ap_openssl_base}/lib64/pkgconfig/openssl.pc"; then + dnl Ensure that the given path is used by pkg-config too, otherwise + dnl the system openssl.pc might be picked up instead. + PKG_CONFIG_PATH="${ap_openssl_base}/lib64/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + fi fi AC_ARG_ENABLE(ssl-staticlib-deps,APACHE_HELP_STRING(--enable-ssl-staticlib-deps,[link mod_ssl with dependencies of OpenSSL's static libraries (as indicated by "pkg-config --static"). Must be specified in addition to --enable-ssl.]), [ if test "$enableval" = "yes"; then diff -Nru apache2-2.4.51/configure apache2-2.4.52/configure --- apache2-2.4.51/configure 2021-10-07 13:12:21.000000000 +0000 +++ apache2-2.4.52/configure 2021-12-16 13:49:07.000000000 +0000 @@ -1,9 +1,10 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. +# Generated by GNU Autoconf 2.71. # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -14,14 +15,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -31,46 +34,46 @@ fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -79,13 +82,6 @@ fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -94,8 +90,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -107,30 +107,10 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -152,20 +132,22 @@ exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -185,42 +167,53 @@ as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -228,14 +221,21 @@ esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -253,18 +253,19 @@ exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -291,6 +292,7 @@ } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -308,6 +310,14 @@ as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -322,7 +332,7 @@ as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -331,7 +341,7 @@ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -370,12 +380,13 @@ # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -387,18 +398,27 @@ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -410,9 +430,9 @@ as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -439,7 +459,7 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -483,7 +503,7 @@ s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -497,6 +517,10 @@ exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -510,6 +534,13 @@ ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -575,52 +606,48 @@ MAKEFLAGS= # Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= +PACKAGE_NAME='' +PACKAGE_TARNAME='' +PACKAGE_VERSION='' +PACKAGE_STRING='' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' ac_unique_file="ABOUT_APACHE" enable_option_checking=no ac_default_prefix=/usr/local/apache2 # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include +#include +#ifdef HAVE_STDIO_H +# include #endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif #ifdef HAVE_UNISTD_H # include #endif" +ac_header_c_list= ac_subst_vars='LTLIBOBJS LIBOBJS ap_make_delimiter @@ -724,6 +751,7 @@ MOD_MPM_EVENT_LDADD MPM_LIB MPM_SUBDIRS +MOD_TLS_LDADD MOD_LBMETHOD_HEARTBEAT_LDADD MOD_LBMETHOD_BYBUSYNESS_LDADD MOD_LBMETHOD_BYTRAFFIC_LDADD @@ -948,6 +976,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -1120,6 +1149,8 @@ enable_lbmethod_bytraffic enable_lbmethod_bybusyness enable_lbmethod_heartbeat +enable_tls +with_rustls with_mpm enable_mpms_shared enable_unixd @@ -1208,6 +1239,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1237,8 +1269,6 @@ *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -1279,9 +1309,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1305,9 +1335,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1460,6 +1490,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1509,9 +1548,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1525,9 +1564,9 @@ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1571,9 +1610,9 @@ *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1589,7 +1628,7 @@ case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1597,7 +1636,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1653,7 +1692,7 @@ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1750,6 +1789,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1990,6 +2030,11 @@ Apache proxy Load balancing by busyness --enable-lbmethod-heartbeat Apache proxy Load balancing from Heartbeats + --enable-tls TLS protocol handling using rustls. Implemented by + mod_tls. This module requires a librustls + installation. See --with-rustls on how to manage + non-standard locations. This module is usually + linked shared and requires loading. --enable-mpms-shared=MPM-LIST Space-separated list of MPM modules to enable for dynamic loading. MPM-LIST=list | "all" @@ -2045,6 +2090,7 @@ --with-nghttp2=PATH nghttp2 installation directory --with-jansson=PATH jansson installation directory --with-curl=PATH curl installation directory + --with-rustls=PATH rustls installation directory --with-mpm=MPM Choose the process model for Apache to use by default. MPM={event|worker|prefork|winnt} This will be statically linked as the only available MPM @@ -2093,9 +2139,9 @@ case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -2123,7 +2169,8 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -2131,7 +2178,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -2141,9 +2188,9 @@ if $ac_init_version; then cat <<\_ACEOF configure -generated by GNU Autoconf 2.69 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -2160,14 +2207,14 @@ ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2175,14 +2222,15 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2204,7 +2252,7 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2212,14 +2260,15 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2229,135 +2278,6 @@ } # ac_fn_c_try_cpp -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in @@ -2365,26 +2285,28 @@ ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile @@ -2395,14 +2317,14 @@ ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2410,17 +2332,18 @@ cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - }; then : + } +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -2441,11 +2364,12 @@ ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -2453,16 +2377,9 @@ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif + which can conflict with char $2 (); below. */ +#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -2480,47 +2397,94 @@ #endif int -main () +main (void) { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR +# ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () +# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. +ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +printf %s "checking whether $as_decl_name is declared... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + eval ac_save_FLAGS=\$$6 + as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { #ifndef $as_decl_name #ifdef __cplusplus @@ -2534,27 +2498,50 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + eval $6=\$ac_save_FLAGS + fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_decl +} # ac_fn_check_decl +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2587,8 +2574,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2623,7 +2614,7 @@ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2658,11 +2649,13 @@ # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2673,8 +2666,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2698,7 +2691,7 @@ ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2706,14 +2699,14 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2721,15 +2714,15 @@ do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2737,8 +2730,8 @@ echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2752,63 +2745,48 @@ # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2818,19 +2796,436 @@ # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" +as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" +as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" + +# Auxiliary files required by this configure script. +ac_aux_files="config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/build" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -2841,12 +3236,12 @@ eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2855,24 +3250,24 @@ ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2882,11 +3277,12 @@ fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2902,34 +3298,6 @@ ac_config_headers="$ac_config_headers include/ap_config_auto.h" -ac_aux_dir= -for ac_dir in build "$srcdir"/build; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in build \"$srcdir\"/build" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - abs_srcdir=`(cd $srcdir && pwd)` @@ -3069,7 +3437,8 @@ # Check whether --enable-layout was given. -if test "${enable_layout+set}" = set; then : +if test ${enable_layout+y} +then : enableval=$enable_layout; LAYOUT=$enableval @@ -3139,10 +3508,10 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for chosen layout" >&5 -$as_echo_n "checking for chosen layout... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $layout_name" >&5 -$as_echo "$layout_name" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for chosen layout" >&5 +printf %s "checking for chosen layout... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $layout_name" >&5 +printf "%s\n" "$layout_name" >&6; } @@ -3944,11 +4313,12 @@ nl=' ' - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mkdir -p" >&5 -$as_echo_n "checking for working mkdir -p... " >&6; } -if ${ac_cv_mkdir_p+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mkdir -p" >&5 +printf %s "checking for working mkdir -p... " >&6; } +if test ${ac_cv_mkdir_p+y} +then : + printf %s "(cached) " >&6 +else $as_nop test -d conftestdir && rm -rf conftestdir mkdir -p conftestdir/somedir >/dev/null 2>&1 @@ -3960,8 +4330,8 @@ rm -rf conftestdir fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_p" >&5 -$as_echo "$ac_cv_mkdir_p" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_p" >&5 +printf "%s\n" "$ac_cv_mkdir_p" >&6; } if test "$ac_cv_mkdir_p" = "yes"; then mkdir_p="mkdir -p" else @@ -3969,11 +4339,12 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST @@ -3981,10 +4352,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP @@ -3993,13 +4369,13 @@ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4027,16 +4403,17 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else @@ -4047,10 +4424,15 @@ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP @@ -4059,13 +4441,13 @@ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 - $as_echo_n 0123456789 >"conftest.in" + printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val @@ -4094,8 +4476,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" @@ -4106,26 +4488,30 @@ -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -4144,21 +4530,22 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -4177,21 +4564,22 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +printf %s "checking target system type... " >&6; } +if test ${ac_cv_target+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 + ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +printf "%s\n" "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; @@ -4220,16 +4608,17 @@ orig_prefix="$prefix" -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Apache Portable Runtime library..." >&5 -$as_echo "$as_me: Configuring Apache Portable Runtime library..." >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring Apache Portable Runtime library..." >&5 +printf "%s\n" "$as_me: Configuring Apache Portable Runtime library..." >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} # Check whether --with-included-apr was given. -if test "${with_included_apr+set}" = set; then : +if test ${with_included_apr+y} +then : withval=$with_included_apr; fi @@ -4265,11 +4654,12 @@ esac done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for APR" >&5 -$as_echo_n "checking for APR... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for APR" >&5 +printf %s "checking for APR... " >&6; } # Check whether --with-apr was given. -if test "${with_apr+set}" = set; then : +if test ${with_apr+y} +then : withval=$with_apr; if test "$withval" = "no" || test "$withval" = "yes"; then as_fn_error $? "--with-apr requires a directory or file to be provided" "$LINENO" 5 @@ -4287,16 +4677,16 @@ version=`$apr_config --version` case x${version} in x1.[0-3].*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 -$as_echo "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 +printf "%s\n" "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} apr_acceptable=no ;; esac unset version if test "$apr_acceptable" != "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Found APR in $apr_config, but we think it is considered unacceptable" >&5 -$as_echo "$as_me: WARNING: Found APR in $apr_config, but we think it is considered unacceptable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Found APR in $apr_config, but we think it is considered unacceptable" >&5 +printf "%s\n" "$as_me: WARNING: Found APR in $apr_config, but we think it is considered unacceptable" >&2;} continue fi apr_found="yes" @@ -4313,8 +4703,8 @@ version=`$apr_config --version` case x${version} in x1.[0-3].*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 -$as_echo "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 +printf "%s\n" "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} apr_acceptable=no ;; esac @@ -4329,7 +4719,7 @@ as_fn_error $? "the --with-apr parameter is incorrect. It must specify an install prefix, a build directory, or an apr-config file." "$LINENO" 5 fi -else +else $as_nop if test -n "1" && test "1" = "1"; then for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config @@ -4342,16 +4732,16 @@ version=`$apr_config --version` case x${version} in x1.[0-3].*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 -$as_echo "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 +printf "%s\n" "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} apr_acceptable=no ;; esac unset version if test "$apr_acceptable" != "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: skipped APR at $apr_config, version not acceptable" >&5 -$as_echo "$as_me: WARNING: skipped APR at $apr_config, version not acceptable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: skipped APR at $apr_config, version not acceptable" >&5 +printf "%s\n" "$as_me: WARNING: skipped APR at $apr_config, version not acceptable" >&2;} continue fi apr_found="yes" @@ -4366,16 +4756,16 @@ version=`$apr_config --version` case x${version} in x1.[0-3].*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 -$as_echo "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: APR version 1.4.0 or later is required, found $version" >&5 +printf "%s\n" "$as_me: WARNING: APR version 1.4.0 or later is required, found $version" >&2;} apr_acceptable=no ;; esac unset version if test "$apr_acceptable" != "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: skipped APR at $apr_config, version not acceptable" >&5 -$as_echo "$as_me: WARNING: skipped APR at $apr_config, version not acceptable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: skipped APR at $apr_config, version not acceptable" >&5 +printf "%s\n" "$as_me: WARNING: skipped APR at $apr_config, version not acceptable" >&2;} continue fi apr_found="yes" @@ -4410,8 +4800,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $apr_found" >&5 -$as_echo "$apr_found" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $apr_found" >&5 +printf "%s\n" "$apr_found" >&6; } fi @@ -4449,8 +4839,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -4480,15 +4870,15 @@ /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -4502,8 +4892,8 @@ fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -4561,16 +4951,16 @@ # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -4670,12 +5060,12 @@ apr_major_version=`echo ${APR_VERSION} | sed 's,\..*,,'` APR_CONFIG="$APR_BINDIR/apr-${apr_major_version}-config" -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Apache Portable Runtime Utility library..." >&5 -$as_echo "$as_me: Configuring Apache Portable Runtime Utility library..." >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring Apache Portable Runtime Utility library..." >&5 +printf "%s\n" "$as_me: Configuring Apache Portable Runtime Utility library..." >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} if test "x${apr_major_version}" = "x2"; then apu_found=obsolete @@ -4711,11 +5101,12 @@ esac done - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for APR-util" >&5 -$as_echo_n "checking for APR-util... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for APR-util" >&5 +printf %s "checking for APR-util... " >&6; } # Check whether --with-apr-util was given. -if test "${with_apr_util+set}" = set; then : +if test ${with_apr_util+y} +then : withval=$with_apr_util; if test "$withval" = "no" || test "$withval" = "yes"; then as_fn_error $? "--with-apr-util requires a directory or file to be provided" "$LINENO" 5 @@ -4743,7 +5134,7 @@ as_fn_error $? "the --with-apr-util parameter is incorrect. It must specify an install prefix, a build directory, or an apu-config file." "$LINENO" 5 fi -else +else $as_nop if test -n "1" && test "1" = "1"; then for apu_temp_apu_config_file in $apu_temp_acceptable_apu_config @@ -4790,8 +5181,8 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $apu_found" >&5 -$as_echo "$apu_found" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $apu_found" >&5 +printf "%s\n" "$apu_found" >&6; } fi @@ -4840,8 +5231,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -4871,15 +5262,15 @@ /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -4893,8 +5284,8 @@ fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -4952,16 +5343,16 @@ # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi @@ -4972,8 +5363,8 @@ fi if test "$apu_found" = "obsolete"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: APR-util obsoleted, woohoo" >&5 -$as_echo "$as_me: APR-util obsoleted, woohoo" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: APR-util obsoleted, woohoo" >&5 +printf "%s\n" "$as_me: APR-util obsoleted, woohoo" >&6;} else if test "x$LDFLAGS" = "x"; then @@ -5003,6 +5394,15 @@ APU_CONFIG="$APU_BINDIR/apu-`echo ${APU_VERSION} | sed 's,\..*,,'`-config" fi + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5011,11 +5411,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -5023,11 +5424,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5038,11 +5443,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5051,11 +5456,12 @@ ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -5063,11 +5469,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5078,11 +5488,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -5090,8 +5500,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -5104,11 +5514,12 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -5116,11 +5527,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5131,11 +5546,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5144,11 +5559,12 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -5157,15 +5573,19 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5181,18 +5601,18 @@ # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5203,11 +5623,12 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -5215,11 +5636,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5230,11 +5655,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5247,11 +5672,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -5259,11 +5685,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5274,11 +5704,11 @@ fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5290,8 +5720,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -5299,25 +5729,129 @@ fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -5327,7 +5861,7 @@ cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -5335,7 +5869,7 @@ /* end confdefs.h. */ int -main () +main (void) { ; @@ -5347,9 +5881,9 @@ # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -5370,11 +5904,12 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -5391,7 +5926,7 @@ # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -5407,44 +5942,46 @@ done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -5458,15 +5995,15 @@ * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -5475,7 +6012,7 @@ /* end confdefs.h. */ #include int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -5487,8 +6024,8 @@ ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -5496,10 +6033,10 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -5507,39 +6044,40 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -5553,11 +6091,12 @@ *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -5566,31 +6105,32 @@ break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -5600,29 +6140,33 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -5631,57 +6175,60 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -5696,94 +6243,144 @@ CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi ac_ext=c @@ -5797,40 +6394,36 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -5842,10 +6435,11 @@ /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -5855,7 +6449,8 @@ done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : break fi @@ -5867,29 +6462,24 @@ else ac_cv_prog_CPP=$CPP fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif +#include Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : -else +else $as_nop # Broken: fails on valid input. continue fi @@ -5901,10 +6491,11 @@ /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : +if ac_fn_c_try_cpp "$LINENO" +then : # Broken: success on invalid input. continue -else +else $as_nop # Passes both tests. ac_preproc_ok=: break @@ -5914,11 +6505,12 @@ done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : +if $ac_preproc_ok +then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -5930,182 +6522,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if ${ac_cv_prog_cc_c99+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -#include - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} - -int -main () -{ - - // Check bool. - _Bool success = false; - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : - -fi - if test "x${cache_file}" = "x/dev/null"; then @@ -6116,18 +6532,20 @@ # Check whether --with-pcre was given. -if test "${with_pcre+set}" = set; then : +if test ${with_pcre+y} +then : withval=$with_pcre; fi # Extract the first word of "pcre-config", so it can be a program name with args. set dummy pcre-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PCRE_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PCRE_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PCRE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PCRE_CONFIG="$PCRE_CONFIG" # Let the user override the test with a path. @@ -6137,11 +6555,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PCRE_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PCRE_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6154,11 +6576,11 @@ fi PCRE_CONFIG=$ac_cv_path_PCRE_CONFIG if test -n "$PCRE_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCRE_CONFIG" >&5 -$as_echo "$PCRE_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PCRE_CONFIG" >&5 +printf "%s\n" "$PCRE_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6177,8 +6599,8 @@ as_fn_error $? "Need at least pcre version 6.0" "$LINENO" 5 ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: Using external PCRE library from $PCRE_CONFIG" >&5 -$as_echo "$as_me: Using external PCRE library from $PCRE_CONFIG" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using external PCRE library from $PCRE_CONFIG" >&5 +printf "%s\n" "$as_me: Using external PCRE library from $PCRE_CONFIG" >&6;} if test "x$PCRE_INCLUDES" = "x"; then test "x$silent" != "xyes" && echo " setting PCRE_INCLUDES to \"`$PCRE_CONFIG --cflags`\"" @@ -6229,12 +6651,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuring Apache httpd..." >&5 -$as_echo "$as_me: Configuring Apache httpd..." >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring Apache httpd..." >&5 +printf "%s\n" "$as_me: Configuring Apache httpd..." >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} @@ -6373,12 +6795,12 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: Applying OS-specific hints for httpd..." >&5 -$as_echo "$as_me: Applying OS-specific hints for httpd..." >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Applying OS-specific hints for httpd..." >&5 +printf "%s\n" "$as_me: Applying OS-specific hints for httpd..." >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} case $host in *os2*) @@ -6543,11 +6965,12 @@ # Extract the first word of "rm", so it can be a program name with args. set dummy rm; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_RM+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_RM+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $RM in [\\/]* | ?:[\\/]*) ac_cv_path_RM="$RM" # Let the user override the test with a path. @@ -6557,11 +6980,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_RM="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6573,21 +7000,22 @@ fi RM=$ac_cv_path_RM if test -n "$RM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 -$as_echo "$RM" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +printf "%s\n" "$RM" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKGCONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PKGCONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PKGCONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path. @@ -6597,11 +7025,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PKGCONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6613,21 +7045,22 @@ fi PKGCONFIG=$ac_cv_path_PKGCONFIG if test -n "$PKGCONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 -$as_echo "$PKGCONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5 +printf "%s\n" "$PKGCONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "rsync", so it can be a program name with args. set dummy rsync; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_RSYNC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_RSYNC+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $RSYNC in [\\/]* | ?:[\\/]*) ac_cv_path_RSYNC="$RSYNC" # Let the user override the test with a path. @@ -6637,11 +7070,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_RSYNC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_RSYNC="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6653,21 +7090,22 @@ fi RSYNC=$ac_cv_path_RSYNC if test -n "$RSYNC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RSYNC" >&5 -$as_echo "$RSYNC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RSYNC" >&5 +printf "%s\n" "$RSYNC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # Extract the first word of "svn", so it can be a program name with args. set dummy svn; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_SVN+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_SVN+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $SVN in [\\/]* | ?:[\\/]*) ac_cv_path_SVN="$SVN" # Let the user override the test with a path. @@ -6677,11 +7115,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_SVN="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_SVN="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6693,11 +7135,11 @@ fi SVN=$ac_cv_path_SVN if test -n "$SVN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SVN" >&5 -$as_echo "$SVN" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SVN" >&5 +printf "%s\n" "$SVN" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6705,11 +7147,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else @@ -6717,11 +7160,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6732,36 +7179,37 @@ fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -6769,11 +7217,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6784,11 +7236,11 @@ fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6797,11 +7249,12 @@ ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -6809,11 +7262,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6824,11 +7281,11 @@ fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -6836,8 +7293,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -6850,11 +7307,12 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_LYNX_PATH+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LYNX_PATH+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$LYNX_PATH"; then ac_cv_prog_LYNX_PATH="$LYNX_PATH" # Let the user override the test. else @@ -6862,11 +7320,15 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LYNX_PATH="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6877,11 +7339,11 @@ fi LYNX_PATH=$ac_cv_prog_LYNX_PATH if test -n "$LYNX_PATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LYNX_PATH" >&5 -$as_echo "$LYNX_PATH" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LYNX_PATH" >&5 +printf "%s\n" "$LYNX_PATH" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6904,204 +7366,184 @@ +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done + + + -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else + + + + +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : + +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h + +fi + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test ${ac_cv_safe_to_define___extensions__+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -#include +# define __EXTENSIONS__ 1 + $ac_includes_default int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_safe_to_define___extensions__=yes +else $as_nop + ac_cv_safe_to_define___extensions__=no fi -rm -f conftest* - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 +printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } +if test ${ac_cv_should_define__xopen_source+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_should_define__xopen_source=no + if test $ac_cv_header_wchar_h = yes +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* + #include + mbstate_t x; +int +main (void) +{ -fi + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) + #define _XOPEN_SOURCE 500 + #include + mbstate_t x; int -main () +main (void) { - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; + + ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_should_define__xopen_source=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi - +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 +printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } -$as_echo "#define STDC_HEADERS 1" >>confdefs.h + printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h -fi + printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h -fi + printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h -done + printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h + printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h + printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = xyes; then : - MINIX=yes -else - MINIX= -fi + printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h - if test "$MINIX" = yes; then + printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h -$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h -$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h + printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h -$as_echo "#define _MINIX 1" >>confdefs.h + printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h - fi + if test $ac_cv_header_minix_config_h = yes +then : + MINIX=yes + printf "%s\n" "#define _MINIX 1" >>confdefs.h + printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 -$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if ${ac_cv_safe_to_define___extensions__+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -# define __EXTENSIONS__ 1 - $ac_includes_default -int -main () -{ + printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_safe_to_define___extensions__=yes -else - ac_cv_safe_to_define___extensions__=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else $as_nop + MINIX= fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 -$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } - test $ac_cv_safe_to_define___extensions__ = yes && - $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + if test $ac_cv_safe_to_define___extensions__ = yes +then : + printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h - $as_echo "#define _ALL_SOURCE 1" >>confdefs.h - - $as_echo "#define _GNU_SOURCE 1" >>confdefs.h - - $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h +fi + if test $ac_cv_should_define__xopen_source = yes +then : + printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 -$as_echo_n "checking for library containing strerror... " >&6; } -if ${ac_cv_search_strerror+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 +printf %s "checking for library containing strerror... " >&6; } +if test ${ac_cv_search_strerror+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7109,46 +7551,48 @@ /* 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 strerror (); int -main () +main (void) { return strerror (); ; return 0; } _ACEOF -for ac_lib in '' cposix; do +for ac_lib in '' cposix +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_strerror=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_strerror+:} false; then : + if test ${ac_cv_search_strerror+y} +then : break fi done -if ${ac_cv_search_strerror+:} false; then : +if test ${ac_cv_search_strerror+y} +then : -else +else $as_nop ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 -$as_echo "$ac_cv_search_strerror" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 +printf "%s\n" "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -7164,14 +7608,16 @@ + ap_ckver_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS `$apr_config --includes`" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for APR version 1.3.0 or later" >&5 -$as_echo_n "checking for APR version 1.3.0 or later... " >&6; } -if ${ap_cv_aprver13+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for APR version 1.3.0 or later" >&5 +printf %s "checking for APR version 1.3.0 or later... " >&6; } +if test ${ap_cv_aprver13+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7183,16 +7629,17 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "good" >/dev/null 2>&1; then : + $EGREP "good" >/dev/null 2>&1 +then : ap_cv_aprver13=yes -else +else $as_nop ap_cv_aprver13=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_cv_aprver13" >&5 -$as_echo "$ap_cv_aprver13" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_cv_aprver13" >&5 +printf "%s\n" "$ap_cv_aprver13" >&6; } if test "$ap_cv_aprver13" = "yes"; then : @@ -7224,11 +7671,12 @@ ap_ckver_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS `$apu_config --includes`" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for APR-util version 1.3.0 or later" >&5 -$as_echo_n "checking for APR-util version 1.3.0 or later... " >&6; } -if ${ap_cv_apuver13+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for APR-util version 1.3.0 or later" >&5 +printf %s "checking for APR-util version 1.3.0 or later... " >&6; } +if test ${ap_cv_apuver13+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7240,16 +7688,17 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "good" >/dev/null 2>&1; then : + $EGREP "good" >/dev/null 2>&1 +then : ap_cv_apuver13=yes -else +else $as_nop ap_cv_apuver13=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_cv_apuver13" >&5 -$as_echo "$ap_cv_apuver13" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_cv_apuver13" >&5 +printf "%s\n" "$ap_cv_apuver13" >&6; } if test "$ap_cv_apuver13" = "yes"; then : @@ -7275,11 +7724,12 @@ ap_ckver_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS `$apu_config --includes`" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for APR-util version 1.3.0 or later" >&5 -$as_echo_n "checking for APR-util version 1.3.0 or later... " >&6; } -if ${ap_cv_apuver13+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for APR-util version 1.3.0 or later" >&5 +printf %s "checking for APR-util version 1.3.0 or later... " >&6; } +if test ${ap_cv_apuver13+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7291,16 +7741,17 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "good" >/dev/null 2>&1; then : + $EGREP "good" >/dev/null 2>&1 +then : ap_cv_apuver13=yes -else +else $as_nop ap_cv_apuver13=no fi -rm -f conftest* +rm -rf conftest* fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_cv_apuver13" >&5 -$as_echo "$ap_cv_apuver13" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_cv_apuver13" >&5 +printf "%s\n" "$ap_cv_apuver13" >&6; } if test "$ap_cv_apuver13" = "yes"; then : @@ -7329,16 +7780,16 @@ EOF MKDEP="true" for i in "$CC -MM" "$CC -M" "$CPP -MM" "$CPP -M" "cpp -M"; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $i can create proper make dependencies" >&5 -$as_echo_n "checking if $i can create proper make dependencies... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $i can create proper make dependencies" >&5 +printf %s "checking if $i can create proper make dependencies... " >&6; } if $i conftest.c 2>/dev/null | grep 'conftest.o: conftest.c' >/dev/null; then MKDEP=$i - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } break; fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } done rm -f conftest.c fi @@ -7350,149 +7801,162 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include +# Autoupdate added the next two lines to ensure that your configure +# script's behavior did not change. They are probably safe to remove. -int -main () -{ +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - ac_cv_header_stdc=no + ac_cv_path_EGREP=$EGREP fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : -else - ac_cv_header_stdc=no + fi fi -rm -f conftest* +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" -fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : +ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" +if test "x$ac_cv_header_string_h" = xyes +then : + printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h -else - ac_cv_header_stdc=no fi -rm -f conftest* +ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default" +if test "x$ac_cv_header_limits_h" = xyes +then : + printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h -else - ac_cv_header_stdc=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_fn_c_check_header_compile "$LINENO" "pwd.h" "ac_cv_header_pwd_h" "$ac_includes_default" +if test "x$ac_cv_header_pwd_h" = xyes +then : + printf "%s\n" "#define HAVE_PWD_H 1" >>confdefs.h + fi +ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default" +if test "x$ac_cv_header_grp_h" = xyes +then : + printf "%s\n" "#define HAVE_GRP_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default" +if test "x$ac_cv_header_strings_h" = xyes +then : + printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +ac_fn_c_check_header_compile "$LINENO" "sys/prctl.h" "ac_cv_header_sys_prctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_prctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PRCTL_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "sys/processor.h" "ac_cv_header_sys_processor_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_processor_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PROCESSOR_H 1" >>confdefs.h -for ac_header in \ -string.h \ -limits.h \ -unistd.h \ -sys/socket.h \ -pwd.h \ -grp.h \ -strings.h \ -sys/prctl.h \ -sys/processor.h \ -sys/sem.h \ -sys/sdt.h \ -sys/loadavg.h +fi +ac_fn_c_check_header_compile "$LINENO" "sys/sem.h" "ac_cv_header_sys_sem_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sem_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SEM_H 1" >>confdefs.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_header_compile "$LINENO" "sys/sdt.h" "ac_cv_header_sys_sdt_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sdt_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SDT_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "sys/loadavg.h" "ac_cv_header_sys_loadavg_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_loadavg_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_LOADAVG_H 1" >>confdefs.h -done +fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 -$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } -if ${ac_cv_header_sys_wait_h+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if test ${ac_cv_header_sys_wait_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -7505,7 +7969,7 @@ #endif int -main () +main (void) { int s; wait (&s); @@ -7514,33 +7978,35 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_header_sys_wait_h=yes -else +else $as_nop ac_cv_header_sys_wait_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 -$as_echo "$ac_cv_header_sys_wait_h" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then -$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h +printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if ${ac_cv_c_const+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +printf %s "checking for an ANSI C-conforming const... " >&6; } +if test ${ac_cv_c_const+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __cplusplus @@ -7553,7 +8019,7 @@ /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. + /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ @@ -7581,7 +8047,7 @@ iptr p = 0; ++p; } - { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; @@ -7597,29 +8063,31 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_c_const=yes -else +else $as_nop ac_cv_c_const=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +printf "%s\n" "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then -$as_echo "#define const /**/" >>confdefs.h +printf "%s\n" "#define const /**/" >>confdefs.h fi saved_LIBS="$LIBS" LIBS="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 -$as_echo_n "checking for library containing sqrt... " >&6; } -if ${ac_cv_search_sqrt+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 +printf %s "checking for library containing sqrt... " >&6; } +if test ${ac_cv_search_sqrt+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7627,46 +8095,48 @@ /* 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 sqrt (); int -main () +main (void) { return sqrt (); ; return 0; } _ACEOF -for ac_lib in '' m; do +for ac_lib in '' m +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_sqrt=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_sqrt+:} false; then : + if test ${ac_cv_search_sqrt+y} +then : break fi done -if ${ac_cv_search_sqrt+:} false; then : +if test ${ac_cv_search_sqrt+y} +then : -else +else $as_nop ac_cv_search_sqrt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 -$as_echo "$ac_cv_search_sqrt" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 +printf "%s\n" "$ac_cv_search_sqrt" >&6; } ac_res=$ac_cv_search_sqrt -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -7680,11 +8150,12 @@ saved_LIBS="$LIBS" LIBS="" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 -$as_echo_n "checking for library containing crypt... " >&6; } -if ${ac_cv_search_crypt+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5 +printf %s "checking for library containing crypt... " >&6; } +if test ${ac_cv_search_crypt+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7692,46 +8163,48 @@ /* 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 crypt (); int -main () +main (void) { return crypt (); ; return 0; } _ACEOF -for ac_lib in '' crypt; do +for ac_lib in '' crypt +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_crypt=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_crypt+:} false; then : + if test ${ac_cv_search_crypt+y} +then : break fi done -if ${ac_cv_search_crypt+:} false; then : +if test ${ac_cv_search_crypt+y} +then : -else +else $as_nop ac_cv_search_crypt=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 -$as_echo "$ac_cv_search_crypt" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5 +printf "%s\n" "$ac_cv_search_crypt" >&6; } ac_res=$ac_cv_search_crypt -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -7744,39 +8217,74 @@ LIBS="$saved_LIBS" -for ac_func in \ -getpwnam \ -getgrnam \ -initgroups \ -bindprocessor \ -prctl \ -timegm \ -getpgid \ -fopen64 \ -getloadavg +ac_fn_c_check_func "$LINENO" "getpwnam" "ac_cv_func_getpwnam" +if test "x$ac_cv_func_getpwnam" = xyes +then : + printf "%s\n" "#define HAVE_GETPWNAM 1" >>confdefs.h -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "getgrnam" "ac_cv_func_getgrnam" +if test "x$ac_cv_func_getgrnam" = xyes +then : + printf "%s\n" "#define HAVE_GETGRNAM 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "initgroups" "ac_cv_func_initgroups" +if test "x$ac_cv_func_initgroups" = xyes +then : + printf "%s\n" "#define HAVE_INITGROUPS 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "bindprocessor" "ac_cv_func_bindprocessor" +if test "x$ac_cv_func_bindprocessor" = xyes +then : + printf "%s\n" "#define HAVE_BINDPROCESSOR 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "prctl" "ac_cv_func_prctl" +if test "x$ac_cv_func_prctl" = xyes +then : + printf "%s\n" "#define HAVE_PRCTL 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" +if test "x$ac_cv_func_timegm" = xyes +then : + printf "%s\n" "#define HAVE_TIMEGM 1" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for void pointer length" >&5 -$as_echo_n "checking for void pointer length... " >&6; } -if ${ap_cv_void_ptr_lt_long+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +fi +ac_fn_c_check_func "$LINENO" "getpgid" "ac_cv_func_getpgid" +if test "x$ac_cv_func_getpgid" = xyes +then : + printf "%s\n" "#define HAVE_GETPGID 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "fopen64" "ac_cv_func_fopen64" +if test "x$ac_cv_func_fopen64" = xyes +then : + printf "%s\n" "#define HAVE_FOPEN64 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "getloadavg" "ac_cv_func_getloadavg" +if test "x$ac_cv_func_getloadavg" = xyes +then : + printf "%s\n" "#define HAVE_GETLOADAVG 1" >>confdefs.h + +fi + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for void pointer length" >&5 +printf %s "checking for void pointer length... " >&6; } +if test ${ap_cv_void_ptr_lt_long+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ap_cv_void_ptr_lt_long=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7785,9 +8293,10 @@ return sizeof(void *) < sizeof(long); } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ap_cv_void_ptr_lt_long=no -else +else $as_nop ap_cv_void_ptr_lt_long=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7795,22 +8304,24 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_cv_void_ptr_lt_long" >&5 -$as_echo "$ap_cv_void_ptr_lt_long" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_cv_void_ptr_lt_long" >&5 +printf "%s\n" "$ap_cv_void_ptr_lt_long" >&6; } if test "$ap_cv_void_ptr_lt_long" = "yes"; then as_fn_error $? "Size of \"void *\" is less than size of \"long\"" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettid()" >&5 -$as_echo_n "checking for gettid()... " >&6; } -if ${ac_cv_gettid+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gettid()" >&5 +printf %s "checking for gettid()... " >&6; } +if test ${ac_cv_gettid+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "$cross_compiling" = yes +then : ac_cv_gettid=no -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GNU_SOURCE @@ -7820,9 +8331,10 @@ int main(int argc, char **argv) { pid_t t = syscall(SYS_gettid); return t == -1 ? 1 : 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_gettid=yes -else +else $as_nop ac_cv_gettid=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -7830,43 +8342,45 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gettid" >&5 -$as_echo "$ac_cv_gettid" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gettid" >&5 +printf "%s\n" "$ac_cv_gettid" >&6; } if test "$ac_cv_gettid" = "yes"; then -$as_echo "#define HAVE_GETTID 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETTID 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for tm_gmtoff in struct tm" >&5 -$as_echo_n "checking for tm_gmtoff in struct tm... " >&6; } -if ${ac_cv_struct_tm_gmtoff+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tm_gmtoff in struct tm" >&5 +printf %s "checking for tm_gmtoff in struct tm... " >&6; } +if test ${ac_cv_struct_tm_gmtoff+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main () +main (void) { struct tm tm; tm.tm_gmtoff; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_struct_tm_gmtoff=yes -else +else $as_nop ac_cv_struct_tm_gmtoff=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_gmtoff" >&5 -$as_echo "$ac_cv_struct_tm_gmtoff" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_gmtoff" >&5 +printf "%s\n" "$ac_cv_struct_tm_gmtoff" >&6; } if test "$ac_cv_struct_tm_gmtoff" = "yes"; then -$as_echo "#define HAVE_GMTOFF 1" >>confdefs.h +printf "%s\n" "#define HAVE_GMTOFF 1" >>confdefs.h fi @@ -7878,11 +8392,12 @@ elif test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd-daemon; then SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd-daemon` else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_notify in -lsystemd-daemon" >&5 -$as_echo_n "checking for sd_notify in -lsystemd-daemon... " >&6; } -if ${ac_cv_lib_systemd_daemon_sd_notify+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sd_notify in -lsystemd-daemon" >&5 +printf %s "checking for sd_notify in -lsystemd-daemon... " >&6; } +if test ${ac_cv_lib_systemd_daemon_sd_notify+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsystemd-daemon $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -7891,53 +8406,47 @@ /* 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 sd_notify (); int -main () +main (void) { return sd_notify (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_systemd_daemon_sd_notify=yes -else +else $as_nop ac_cv_lib_systemd_daemon_sd_notify=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_systemd_daemon_sd_notify" >&5 -$as_echo "$ac_cv_lib_systemd_daemon_sd_notify" >&6; } -if test "x$ac_cv_lib_systemd_daemon_sd_notify" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_systemd_daemon_sd_notify" >&5 +printf "%s\n" "$ac_cv_lib_systemd_daemon_sd_notify" >&6; } +if test "x$ac_cv_lib_systemd_daemon_sd_notify" = xyes +then : SYSTEMD_LIBS="-lsystemd-daemon" fi fi if test -n "$SYSTEMD_LIBS"; then - for ac_header in systemd/sd-daemon.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-daemon.h" "ac_cv_header_systemd_sd_daemon_h" "$ac_includes_default" -if test "x$ac_cv_header_systemd_sd_daemon_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYSTEMD_SD_DAEMON_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "systemd/sd-daemon.h" "ac_cv_header_systemd_sd_daemon_h" "$ac_includes_default" +if test "x$ac_cv_header_systemd_sd_daemon_h" = xyes +then : + printf "%s\n" "#define HAVE_SYSTEMD_SD_DAEMON_H 1" >>confdefs.h fi -done - if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support systemd." >&5 -$as_echo "$as_me: WARNING: Your system does not support systemd." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support systemd." >&5 +printf "%s\n" "$as_me: WARNING: Your system does not support systemd." >&2;} else -$as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h +printf "%s\n" "#define HAVE_SYSTEMD 1" >>confdefs.h fi fi @@ -7969,25 +8478,28 @@ # Check whether --with-port was given. -if test "${with_port+set}" = set; then : +if test ${with_port+y} +then : withval=$with_port; if test "$withval" = "yes"; then as_fn_error $? "'option --with-port requires a value (the TCP port number)'" "$LINENO" 5; else PORT="$withval"; fi -else +else $as_nop PORT=80 fi # Check whether --with-sslport was given. -if test "${with_sslport+set}" = set; then : +if test ${with_sslport+y} +then : withval=$with_sslport; if test "$withval" = "yes"; then as_fn_error $? "'option --with-sslport requires a value (the SSL TCP port number)'" "$LINENO" 5; else SSLPORT="$withval"; fi -else +else $as_nop SSLPORT=443 fi DTRACE=true # Check whether --enable-dtrace was given. -if test "${enable_dtrace+set}" = set; then : +if test ${enable_dtrace+y} +then : enableval=$enable_dtrace; enable_dtrace=$enableval if test "$enableval" = "yes"; then @@ -8015,7 +8527,7 @@ as_fn_error $? "'DTrace Support in the build system is not complete. Patches Welcome!'" "$LINENO" 5 fi -else +else $as_nop enable_dtrace=no @@ -8028,7 +8540,7 @@ *-solaris2*) if test $enable_dtrace = "yes" -a "$ac_cv_header_sys_sdt_h" = "yes"; then -$as_echo "#define AP_ENABLE_DTRACE 1" >>confdefs.h +printf "%s\n" "#define AP_ENABLE_DTRACE 1" >>confdefs.h DTRACE="/usr/sbin/dtrace $DTRACEFLAGS" test -f include/apache_probes.h || $DTRACE -h -s apache_probes.d -o include/apache_probes.h @@ -8042,11 +8554,12 @@ # Check whether --enable-hook-probes was given. -if test "${enable_hook_probes+set}" = set; then : +if test ${enable_hook_probes+y} +then : enableval=$enable_hook_probes; if test "$enableval" = "yes"; then -$as_echo "#define AP_HOOK_PROBES_ENABLED 1" >>confdefs.h +printf "%s\n" "#define AP_HOOK_PROBES_ENABLED 1" >>confdefs.h if test "x$INTERNAL_CPPFLAGS" = "x"; then @@ -8074,24 +8587,26 @@ fi # Check whether --enable-exception-hook was given. -if test "${enable_exception_hook+set}" = set; then : +if test ${enable_exception_hook+y} +then : enableval=$enable_exception_hook; if test "$enableval" = "yes"; then -$as_echo "#define AP_ENABLE_EXCEPTION_HOOK 1" >>confdefs.h +printf "%s\n" "#define AP_ENABLE_EXCEPTION_HOOK 1" >>confdefs.h fi fi # Check whether --enable-load-all-modules was given. -if test "${enable_load_all_modules+set}" = set; then : +if test ${enable_load_all_modules+y} +then : enableval=$enable_load_all_modules; LOAD_ALL_MODULES=$enableval - { $as_echo "$as_me:${as_lineno-$LINENO}: Setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&5 -$as_echo "$as_me: Setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&5 +printf "%s\n" "$as_me: Setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&6;} -else +else $as_nop LOAD_ALL_MODULES="no" @@ -8099,7 +8614,8 @@ # Check whether --enable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then : +if test ${enable_maintainer_mode+y} +then : enableval=$enable_maintainer_mode; if test "$enableval" = "yes"; then @@ -8127,11 +8643,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -std=c89" >&5 -$as_echo_n "checking whether gcc accepts -std=c89... " >&6; } -if ${ac_cv_gcc__std_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -std=c89" >&5 +printf %s "checking whether gcc accepts -std=c89... " >&6; } +if test ${ac_cv_gcc__std_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -std=c89 -Wno-strict-prototypes" @@ -8139,24 +8656,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__std_c89=yes -else +else $as_nop ac_cv_gcc__std_c89=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__std_c89" >&5 -$as_echo "$ac_cv_gcc__std_c89" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__std_c89" >&5 +printf "%s\n" "$ac_cv_gcc__std_c89" >&6; } if test "$ac_cv_gcc__std_c89" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8186,11 +8704,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Werror" >&5 -$as_echo_n "checking whether gcc accepts -Werror... " >&6; } -if ${ac_cv_gcc__Werror+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Werror" >&5 +printf %s "checking whether gcc accepts -Werror... " >&6; } +if test ${ac_cv_gcc__Werror+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wno-strict-prototypes" @@ -8198,24 +8717,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Werror=yes -else +else $as_nop ac_cv_gcc__Werror=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Werror" >&5 -$as_echo "$ac_cv_gcc__Werror" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Werror" >&5 +printf "%s\n" "$ac_cv_gcc__Werror" >&6; } if test "$ac_cv_gcc__Werror" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8245,11 +8765,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wall" >&5 -$as_echo_n "checking whether gcc accepts -Wall... " >&6; } -if ${ac_cv_gcc__Wall+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wall" >&5 +printf %s "checking whether gcc accepts -Wall... " >&6; } +if test ${ac_cv_gcc__Wall+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall -Wno-strict-prototypes" @@ -8257,24 +8778,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wall=yes -else +else $as_nop ac_cv_gcc__Wall=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wall" >&5 -$as_echo "$ac_cv_gcc__Wall" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wall" >&5 +printf "%s\n" "$ac_cv_gcc__Wall" >&6; } if test "$ac_cv_gcc__Wall" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8304,11 +8826,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wstrict-prototypes" >&5 -$as_echo_n "checking whether gcc accepts -Wstrict-prototypes... " >&6; } -if ${ac_cv_gcc__Wstrict_prototypes+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wstrict-prototypes" >&5 +printf %s "checking whether gcc accepts -Wstrict-prototypes... " >&6; } +if test ${ac_cv_gcc__Wstrict_prototypes+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wstrict-prototypes -Wno-strict-prototypes" @@ -8316,24 +8839,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wstrict_prototypes=yes -else +else $as_nop ac_cv_gcc__Wstrict_prototypes=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wstrict_prototypes" >&5 -$as_echo "$ac_cv_gcc__Wstrict_prototypes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wstrict_prototypes" >&5 +printf "%s\n" "$ac_cv_gcc__Wstrict_prototypes" >&6; } if test "$ac_cv_gcc__Wstrict_prototypes" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8363,11 +8887,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-prototypes" >&5 -$as_echo_n "checking whether gcc accepts -Wmissing-prototypes... " >&6; } -if ${ac_cv_gcc__Wmissing_prototypes+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-prototypes" >&5 +printf %s "checking whether gcc accepts -Wmissing-prototypes... " >&6; } +if test ${ac_cv_gcc__Wmissing_prototypes+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wmissing-prototypes -Wno-strict-prototypes" @@ -8375,24 +8900,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wmissing_prototypes=yes -else +else $as_nop ac_cv_gcc__Wmissing_prototypes=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_prototypes" >&5 -$as_echo "$ac_cv_gcc__Wmissing_prototypes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_prototypes" >&5 +printf "%s\n" "$ac_cv_gcc__Wmissing_prototypes" >&6; } if test "$ac_cv_gcc__Wmissing_prototypes" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8422,11 +8948,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-declarations" >&5 -$as_echo_n "checking whether gcc accepts -Wmissing-declarations... " >&6; } -if ${ac_cv_gcc__Wmissing_declarations+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-declarations" >&5 +printf %s "checking whether gcc accepts -Wmissing-declarations... " >&6; } +if test ${ac_cv_gcc__Wmissing_declarations+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wmissing-declarations -Wno-strict-prototypes" @@ -8434,24 +8961,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wmissing_declarations=yes -else +else $as_nop ac_cv_gcc__Wmissing_declarations=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_declarations" >&5 -$as_echo "$ac_cv_gcc__Wmissing_declarations" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_declarations" >&5 +printf "%s\n" "$ac_cv_gcc__Wmissing_declarations" >&6; } if test "$ac_cv_gcc__Wmissing_declarations" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8481,11 +9009,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 -$as_echo_n "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } -if ${ac_cv_gcc__Wdeclaration_after_statement+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 +printf %s "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } +if test ${ac_cv_gcc__Wdeclaration_after_statement+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wdeclaration-after-statement -Wno-strict-prototypes" @@ -8493,24 +9022,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wdeclaration_after_statement=yes -else +else $as_nop ac_cv_gcc__Wdeclaration_after_statement=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wdeclaration_after_statement" >&5 -$as_echo "$ac_cv_gcc__Wdeclaration_after_statement" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wdeclaration_after_statement" >&5 +printf "%s\n" "$ac_cv_gcc__Wdeclaration_after_statement" >&6; } if test "$ac_cv_gcc__Wdeclaration_after_statement" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8540,11 +9070,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wpointer-arith" >&5 -$as_echo_n "checking whether gcc accepts -Wpointer-arith... " >&6; } -if ${ac_cv_gcc__Wpointer_arith+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wpointer-arith" >&5 +printf %s "checking whether gcc accepts -Wpointer-arith... " >&6; } +if test ${ac_cv_gcc__Wpointer_arith+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wpointer-arith -Wno-strict-prototypes" @@ -8552,24 +9083,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wpointer_arith=yes -else +else $as_nop ac_cv_gcc__Wpointer_arith=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wpointer_arith" >&5 -$as_echo "$ac_cv_gcc__Wpointer_arith" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wpointer_arith" >&5 +printf "%s\n" "$ac_cv_gcc__Wpointer_arith" >&6; } if test "$ac_cv_gcc__Wpointer_arith" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8599,11 +9131,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat" >&5 -$as_echo_n "checking whether gcc accepts -Wformat... " >&6; } -if ${ac_cv_gcc__Wformat+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat" >&5 +printf %s "checking whether gcc accepts -Wformat... " >&6; } +if test ${ac_cv_gcc__Wformat+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wformat -Wno-strict-prototypes" @@ -8611,24 +9144,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wformat=yes -else +else $as_nop ac_cv_gcc__Wformat=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat" >&5 -$as_echo "$ac_cv_gcc__Wformat" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat" >&5 +printf "%s\n" "$ac_cv_gcc__Wformat" >&6; } if test "$ac_cv_gcc__Wformat" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8658,11 +9192,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat-security" >&5 -$as_echo_n "checking whether gcc accepts -Wformat-security... " >&6; } -if ${ac_cv_gcc__Wformat_security+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat-security" >&5 +printf %s "checking whether gcc accepts -Wformat-security... " >&6; } +if test ${ac_cv_gcc__Wformat_security+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wformat-security -Wno-strict-prototypes" @@ -8670,24 +9205,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wformat_security=yes -else +else $as_nop ac_cv_gcc__Wformat_security=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat_security" >&5 -$as_echo "$ac_cv_gcc__Wformat_security" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat_security" >&5 +printf "%s\n" "$ac_cv_gcc__Wformat_security" >&6; } if test "$ac_cv_gcc__Wformat_security" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8717,11 +9253,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wunused" >&5 -$as_echo_n "checking whether gcc accepts -Wunused... " >&6; } -if ${ac_cv_gcc__Wunused+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wunused" >&5 +printf %s "checking whether gcc accepts -Wunused... " >&6; } +if test ${ac_cv_gcc__Wunused+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wunused -Wno-strict-prototypes" @@ -8729,24 +9266,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wunused=yes -else +else $as_nop ac_cv_gcc__Wunused=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wunused" >&5 -$as_echo "$ac_cv_gcc__Wunused" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wunused" >&5 +printf "%s\n" "$ac_cv_gcc__Wunused" >&6; } if test "$ac_cv_gcc__Wunused" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8798,20 +9336,21 @@ fi if test "x$enable_load_all_modules" = "x"; then LOAD_ALL_MODULES=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: Maintainer mode setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&5 -$as_echo "$as_me: Maintainer mode setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Maintainer mode setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&5 +printf "%s\n" "$as_me: Maintainer mode setting \"LOAD_ALL_MODULES\" to $LOAD_ALL_MODULES" >&6;} fi if test "x$enable_bucketeer" = "x"; then enable_bucketeer=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: Maintainer mode setting \"enable_bucketeer\" to yes" >&5 -$as_echo "$as_me: Maintainer mode setting \"enable_bucketeer\" to yes" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Maintainer mode setting \"enable_bucketeer\" to yes" >&5 +printf "%s\n" "$as_me: Maintainer mode setting \"enable_bucketeer\" to yes" >&6;} fi fi fi # Check whether --enable-debugger-mode was given. -if test "${enable_debugger_mode+set}" = set; then : +if test ${enable_debugger_mode+y} +then : enableval=$enable_debugger_mode; if test "$enableval" = "yes"; then @@ -8839,11 +9378,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -O0" >&5 -$as_echo_n "checking whether gcc accepts -O0... " >&6; } -if ${ac_cv_gcc__O0+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -O0" >&5 +printf %s "checking whether gcc accepts -O0... " >&6; } +if test ${ac_cv_gcc__O0+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -O0 -Wno-strict-prototypes" @@ -8851,24 +9391,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__O0=yes -else +else $as_nop ac_cv_gcc__O0=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__O0" >&5 -$as_echo "$ac_cv_gcc__O0" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__O0" >&5 +printf "%s\n" "$ac_cv_gcc__O0" >&6; } if test "$ac_cv_gcc__O0" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8898,11 +9439,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wall" >&5 -$as_echo_n "checking whether gcc accepts -Wall... " >&6; } -if ${ac_cv_gcc__Wall+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wall" >&5 +printf %s "checking whether gcc accepts -Wall... " >&6; } +if test ${ac_cv_gcc__Wall+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall -Wno-strict-prototypes" @@ -8910,24 +9452,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wall=yes -else +else $as_nop ac_cv_gcc__Wall=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wall" >&5 -$as_echo "$ac_cv_gcc__Wall" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wall" >&5 +printf "%s\n" "$ac_cv_gcc__Wall" >&6; } if test "$ac_cv_gcc__Wall" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -8957,11 +9500,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wstrict-prototypes" >&5 -$as_echo_n "checking whether gcc accepts -Wstrict-prototypes... " >&6; } -if ${ac_cv_gcc__Wstrict_prototypes+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wstrict-prototypes" >&5 +printf %s "checking whether gcc accepts -Wstrict-prototypes... " >&6; } +if test ${ac_cv_gcc__Wstrict_prototypes+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wstrict-prototypes -Wno-strict-prototypes" @@ -8969,24 +9513,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wstrict_prototypes=yes -else +else $as_nop ac_cv_gcc__Wstrict_prototypes=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wstrict_prototypes" >&5 -$as_echo "$ac_cv_gcc__Wstrict_prototypes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wstrict_prototypes" >&5 +printf "%s\n" "$ac_cv_gcc__Wstrict_prototypes" >&6; } if test "$ac_cv_gcc__Wstrict_prototypes" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9016,11 +9561,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-prototypes" >&5 -$as_echo_n "checking whether gcc accepts -Wmissing-prototypes... " >&6; } -if ${ac_cv_gcc__Wmissing_prototypes+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-prototypes" >&5 +printf %s "checking whether gcc accepts -Wmissing-prototypes... " >&6; } +if test ${ac_cv_gcc__Wmissing_prototypes+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wmissing-prototypes -Wno-strict-prototypes" @@ -9028,24 +9574,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wmissing_prototypes=yes -else +else $as_nop ac_cv_gcc__Wmissing_prototypes=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_prototypes" >&5 -$as_echo "$ac_cv_gcc__Wmissing_prototypes" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_prototypes" >&5 +printf "%s\n" "$ac_cv_gcc__Wmissing_prototypes" >&6; } if test "$ac_cv_gcc__Wmissing_prototypes" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9075,11 +9622,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-declarations" >&5 -$as_echo_n "checking whether gcc accepts -Wmissing-declarations... " >&6; } -if ${ac_cv_gcc__Wmissing_declarations+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-declarations" >&5 +printf %s "checking whether gcc accepts -Wmissing-declarations... " >&6; } +if test ${ac_cv_gcc__Wmissing_declarations+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wmissing-declarations -Wno-strict-prototypes" @@ -9087,24 +9635,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wmissing_declarations=yes -else +else $as_nop ac_cv_gcc__Wmissing_declarations=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_declarations" >&5 -$as_echo "$ac_cv_gcc__Wmissing_declarations" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wmissing_declarations" >&5 +printf "%s\n" "$ac_cv_gcc__Wmissing_declarations" >&6; } if test "$ac_cv_gcc__Wmissing_declarations" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9134,11 +9683,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 -$as_echo_n "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } -if ${ac_cv_gcc__Wdeclaration_after_statement+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 +printf %s "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } +if test ${ac_cv_gcc__Wdeclaration_after_statement+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wdeclaration-after-statement -Wno-strict-prototypes" @@ -9146,24 +9696,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wdeclaration_after_statement=yes -else +else $as_nop ac_cv_gcc__Wdeclaration_after_statement=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wdeclaration_after_statement" >&5 -$as_echo "$ac_cv_gcc__Wdeclaration_after_statement" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wdeclaration_after_statement" >&5 +printf "%s\n" "$ac_cv_gcc__Wdeclaration_after_statement" >&6; } if test "$ac_cv_gcc__Wdeclaration_after_statement" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9193,11 +9744,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Werror=declaration-after-statement" >&5 -$as_echo_n "checking whether gcc accepts -Werror=declaration-after-statement... " >&6; } -if ${ac_cv_gcc__Werror_declaration_after_statement+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Werror=declaration-after-statement" >&5 +printf %s "checking whether gcc accepts -Werror=declaration-after-statement... " >&6; } +if test ${ac_cv_gcc__Werror_declaration_after_statement+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror=declaration-after-statement -Wno-strict-prototypes" @@ -9205,24 +9757,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Werror_declaration_after_statement=yes -else +else $as_nop ac_cv_gcc__Werror_declaration_after_statement=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Werror_declaration_after_statement" >&5 -$as_echo "$ac_cv_gcc__Werror_declaration_after_statement" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Werror_declaration_after_statement" >&5 +printf "%s\n" "$ac_cv_gcc__Werror_declaration_after_statement" >&6; } if test "$ac_cv_gcc__Werror_declaration_after_statement" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9252,11 +9805,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wpointer-arith" >&5 -$as_echo_n "checking whether gcc accepts -Wpointer-arith... " >&6; } -if ${ac_cv_gcc__Wpointer_arith+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wpointer-arith" >&5 +printf %s "checking whether gcc accepts -Wpointer-arith... " >&6; } +if test ${ac_cv_gcc__Wpointer_arith+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wpointer-arith -Wno-strict-prototypes" @@ -9264,24 +9818,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wpointer_arith=yes -else +else $as_nop ac_cv_gcc__Wpointer_arith=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wpointer_arith" >&5 -$as_echo "$ac_cv_gcc__Wpointer_arith" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wpointer_arith" >&5 +printf "%s\n" "$ac_cv_gcc__Wpointer_arith" >&6; } if test "$ac_cv_gcc__Wpointer_arith" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9311,11 +9866,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat" >&5 -$as_echo_n "checking whether gcc accepts -Wformat... " >&6; } -if ${ac_cv_gcc__Wformat+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat" >&5 +printf %s "checking whether gcc accepts -Wformat... " >&6; } +if test ${ac_cv_gcc__Wformat+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wformat -Wno-strict-prototypes" @@ -9323,24 +9879,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wformat=yes -else +else $as_nop ac_cv_gcc__Wformat=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat" >&5 -$as_echo "$ac_cv_gcc__Wformat" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat" >&5 +printf "%s\n" "$ac_cv_gcc__Wformat" >&6; } if test "$ac_cv_gcc__Wformat" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9370,11 +9927,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat-security" >&5 -$as_echo_n "checking whether gcc accepts -Wformat-security... " >&6; } -if ${ac_cv_gcc__Wformat_security+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wformat-security" >&5 +printf %s "checking whether gcc accepts -Wformat-security... " >&6; } +if test ${ac_cv_gcc__Wformat_security+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wformat-security -Wno-strict-prototypes" @@ -9382,24 +9940,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Wformat_security=yes -else +else $as_nop ac_cv_gcc__Wformat_security=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat_security" >&5 -$as_echo "$ac_cv_gcc__Wformat_security" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Wformat_security" >&5 +printf "%s\n" "$ac_cv_gcc__Wformat_security" >&6; } if test "$ac_cv_gcc__Wformat_security" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9429,11 +9988,12 @@ if test "$GCC" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Werror=format-security" >&5 -$as_echo_n "checking whether gcc accepts -Werror=format-security... " >&6; } -if ${ac_cv_gcc__Werror_format_security+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Werror=format-security" >&5 +printf %s "checking whether gcc accepts -Werror=format-security... " >&6; } +if test ${ac_cv_gcc__Werror_format_security+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror=format-security -Wno-strict-prototypes" @@ -9441,24 +10001,25 @@ /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_gcc__Werror_format_security=yes -else +else $as_nop ac_cv_gcc__Werror_format_security=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$save_CFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Werror_format_security" >&5 -$as_echo "$ac_cv_gcc__Werror_format_security" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc__Werror_format_security" >&5 +printf "%s\n" "$ac_cv_gcc__Werror_format_security" >&6; } if test "$ac_cv_gcc__Werror_format_security" = "yes" ; then if test "x$NOTEST_CFLAGS" = "x"; then @@ -9513,31 +10074,35 @@ fi # Check whether --enable-pie was given. -if test "${enable_pie+set}" = set; then : +if test ${enable_pie+y} +then : enableval=$enable_pie; fi if test "$enable_pie" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts PIE flags" >&5 -$as_echo_n "checking whether $CC accepts PIE flags... " >&6; } -if ${ap_cv_cc_pie+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts PIE flags" >&5 +printf %s "checking whether $CC accepts PIE flags... " >&6; } +if test ${ap_cv_cc_pie+y} +then : + printf %s "(cached) " >&6 +else $as_nop save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS -fPIE" LDFLAGS="$LDFLAGS -pie" - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : ap_cv_cc_pie=yes -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ static int foo[30000]; int main () { return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ap_cv_cc_pie=yes -else +else $as_nop ap_cv_cc_pie=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -9548,8 +10113,8 @@ LDFLAGS=$save_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_cv_cc_pie" >&5 -$as_echo "$ap_cv_cc_pie" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_cv_cc_pie" >&5 +printf "%s\n" "$ap_cv_cc_pie" >&6; } if test "$ap_cv_cc_pie" = "yes"; then PICFLAGS="-fPIE" PILDFLAGS="-pie" @@ -9584,25 +10149,27 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_define_APR_HAS_DSO=yes -else +else $as_nop ac_cv_define_APR_HAS_DSO=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS=$apr_old_cppflags if test $ac_cv_define_APR_HAS_DSO = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Missing DSO support - building static modules by default." >&5 -$as_echo "$as_me: WARNING: Missing DSO support - building static modules by default." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Missing DSO support - building static modules by default." >&5 +printf "%s\n" "$as_me: WARNING: Missing DSO support - building static modules by default." >&2;} module_default=static fi # Check whether --enable-modules was given. -if test "${enable_modules+set}" = set; then : +if test ${enable_modules+y} +then : enableval=$enable_modules; if test "$enableval" = "none"; then module_default=no @@ -9623,7 +10190,8 @@ # Check whether --enable-mods-shared was given. -if test "${enable_mods_shared+set}" = set; then : +if test ${enable_mods_shared+y} +then : enableval=$enable_mods_shared; for i in $enableval; do if test "$i" = "all" -o "$i" = "most" -o "$i" = "few" -o "$i" = "reallyall" @@ -9640,7 +10208,8 @@ # Check whether --enable-mods-static was given. -if test "${enable_mods_static+set}" = set; then : +if test ${enable_mods_static+y} +then : enableval=$enable_mods_static; for i in $enableval; do if test "$i" = "all" -o "$i" = "most" -o "$i" = "few" -o "$i" = "reallyall"; then @@ -9672,12 +10241,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_file" >&5 -$as_echo_n "checking whether to enable mod_authn_file... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_file" >&5 +printf %s "checking whether to enable mod_authn_file... " >&6; } # Check whether --enable-authn-file was given. -if test "${enable_authn_file+set}" = set; then : +if test ${enable_authn_file+y} +then : enableval=$enable_authn_file; force_authn_file=$enableval -else +else $as_nop enable_authn_file=yes fi @@ -9733,8 +10303,8 @@ if test "$enable_authn_file" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authn_file$_apmod_extra_msg" >&5 -$as_echo "$enable_authn_file$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authn_file$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authn_file$_apmod_extra_msg" >&6; } if test "$enable_authn_file" != "no"; then case "$enable_authn_file" in static*) @@ -9813,12 +10383,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_dbm" >&5 -$as_echo_n "checking whether to enable mod_authn_dbm... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_dbm" >&5 +printf %s "checking whether to enable mod_authn_dbm... " >&6; } # Check whether --enable-authn-dbm was given. -if test "${enable_authn_dbm+set}" = set; then : +if test ${enable_authn_dbm+y} +then : enableval=$enable_authn_dbm; force_authn_dbm=$enableval -else +else $as_nop enable_authn_dbm=most fi @@ -9874,8 +10445,8 @@ if test "$enable_authn_dbm" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authn_dbm$_apmod_extra_msg" >&5 -$as_echo "$enable_authn_dbm$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authn_dbm$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authn_dbm$_apmod_extra_msg" >&6; } if test "$enable_authn_dbm" != "no"; then case "$enable_authn_dbm" in static*) @@ -9954,12 +10525,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_anon" >&5 -$as_echo_n "checking whether to enable mod_authn_anon... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_anon" >&5 +printf %s "checking whether to enable mod_authn_anon... " >&6; } # Check whether --enable-authn-anon was given. -if test "${enable_authn_anon+set}" = set; then : +if test ${enable_authn_anon+y} +then : enableval=$enable_authn_anon; force_authn_anon=$enableval -else +else $as_nop enable_authn_anon=most fi @@ -10015,8 +10587,8 @@ if test "$enable_authn_anon" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authn_anon$_apmod_extra_msg" >&5 -$as_echo "$enable_authn_anon$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authn_anon$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authn_anon$_apmod_extra_msg" >&6; } if test "$enable_authn_anon" != "no"; then case "$enable_authn_anon" in static*) @@ -10095,12 +10667,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_dbd" >&5 -$as_echo_n "checking whether to enable mod_authn_dbd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_dbd" >&5 +printf %s "checking whether to enable mod_authn_dbd... " >&6; } # Check whether --enable-authn-dbd was given. -if test "${enable_authn_dbd+set}" = set; then : +if test ${enable_authn_dbd+y} +then : enableval=$enable_authn_dbd; force_authn_dbd=$enableval -else +else $as_nop enable_authn_dbd=most fi @@ -10156,8 +10729,8 @@ if test "$enable_authn_dbd" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authn_dbd$_apmod_extra_msg" >&5 -$as_echo "$enable_authn_dbd$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authn_dbd$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authn_dbd$_apmod_extra_msg" >&6; } if test "$enable_authn_dbd" != "no"; then case "$enable_authn_dbd" in static*) @@ -10236,12 +10809,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_socache" >&5 -$as_echo_n "checking whether to enable mod_authn_socache... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_socache" >&5 +printf %s "checking whether to enable mod_authn_socache... " >&6; } # Check whether --enable-authn-socache was given. -if test "${enable_authn_socache+set}" = set; then : +if test ${enable_authn_socache+y} +then : enableval=$enable_authn_socache; force_authn_socache=$enableval -else +else $as_nop enable_authn_socache=most fi @@ -10297,8 +10871,8 @@ if test "$enable_authn_socache" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authn_socache$_apmod_extra_msg" >&5 -$as_echo "$enable_authn_socache$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authn_socache$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authn_socache$_apmod_extra_msg" >&6; } if test "$enable_authn_socache" != "no"; then case "$enable_authn_socache" in static*) @@ -10378,12 +10952,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_core" >&5 -$as_echo_n "checking whether to enable mod_authn_core... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authn_core" >&5 +printf %s "checking whether to enable mod_authn_core... " >&6; } # Check whether --enable-authn-core was given. -if test "${enable_authn_core+set}" = set; then : +if test ${enable_authn_core+y} +then : enableval=$enable_authn_core; force_authn_core=$enableval -else +else $as_nop enable_authn_core=yes fi @@ -10439,8 +11014,8 @@ if test "$enable_authn_core" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authn_core$_apmod_extra_msg" >&5 -$as_echo "$enable_authn_core$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authn_core$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authn_core$_apmod_extra_msg" >&6; } if test "$enable_authn_core" != "no"; then case "$enable_authn_core" in static*) @@ -10520,12 +11095,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_host" >&5 -$as_echo_n "checking whether to enable mod_authz_host... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_host" >&5 +printf %s "checking whether to enable mod_authz_host... " >&6; } # Check whether --enable-authz-host was given. -if test "${enable_authz_host+set}" = set; then : +if test ${enable_authz_host+y} +then : enableval=$enable_authz_host; force_authz_host=$enableval -else +else $as_nop enable_authz_host=yes fi @@ -10581,8 +11157,8 @@ if test "$enable_authz_host" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authz_host$_apmod_extra_msg" >&5 -$as_echo "$enable_authz_host$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authz_host$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authz_host$_apmod_extra_msg" >&6; } if test "$enable_authz_host" != "no"; then case "$enable_authz_host" in static*) @@ -10661,12 +11237,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_groupfile" >&5 -$as_echo_n "checking whether to enable mod_authz_groupfile... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_groupfile" >&5 +printf %s "checking whether to enable mod_authz_groupfile... " >&6; } # Check whether --enable-authz-groupfile was given. -if test "${enable_authz_groupfile+set}" = set; then : +if test ${enable_authz_groupfile+y} +then : enableval=$enable_authz_groupfile; force_authz_groupfile=$enableval -else +else $as_nop enable_authz_groupfile=yes fi @@ -10722,8 +11299,8 @@ if test "$enable_authz_groupfile" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authz_groupfile$_apmod_extra_msg" >&5 -$as_echo "$enable_authz_groupfile$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authz_groupfile$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authz_groupfile$_apmod_extra_msg" >&6; } if test "$enable_authz_groupfile" != "no"; then case "$enable_authz_groupfile" in static*) @@ -10802,12 +11379,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_user" >&5 -$as_echo_n "checking whether to enable mod_authz_user... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_user" >&5 +printf %s "checking whether to enable mod_authz_user... " >&6; } # Check whether --enable-authz-user was given. -if test "${enable_authz_user+set}" = set; then : +if test ${enable_authz_user+y} +then : enableval=$enable_authz_user; force_authz_user=$enableval -else +else $as_nop enable_authz_user=yes fi @@ -10863,8 +11441,8 @@ if test "$enable_authz_user" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authz_user$_apmod_extra_msg" >&5 -$as_echo "$enable_authz_user$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authz_user$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authz_user$_apmod_extra_msg" >&6; } if test "$enable_authz_user" != "no"; then case "$enable_authz_user" in static*) @@ -10943,12 +11521,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_dbm" >&5 -$as_echo_n "checking whether to enable mod_authz_dbm... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_dbm" >&5 +printf %s "checking whether to enable mod_authz_dbm... " >&6; } # Check whether --enable-authz-dbm was given. -if test "${enable_authz_dbm+set}" = set; then : +if test ${enable_authz_dbm+y} +then : enableval=$enable_authz_dbm; force_authz_dbm=$enableval -else +else $as_nop enable_authz_dbm=most fi @@ -11004,8 +11583,8 @@ if test "$enable_authz_dbm" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authz_dbm$_apmod_extra_msg" >&5 -$as_echo "$enable_authz_dbm$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authz_dbm$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authz_dbm$_apmod_extra_msg" >&6; } if test "$enable_authz_dbm" != "no"; then case "$enable_authz_dbm" in static*) @@ -11084,12 +11663,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_owner" >&5 -$as_echo_n "checking whether to enable mod_authz_owner... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_owner" >&5 +printf %s "checking whether to enable mod_authz_owner... " >&6; } # Check whether --enable-authz-owner was given. -if test "${enable_authz_owner+set}" = set; then : +if test ${enable_authz_owner+y} +then : enableval=$enable_authz_owner; force_authz_owner=$enableval -else +else $as_nop enable_authz_owner=most fi @@ -11145,8 +11725,8 @@ if test "$enable_authz_owner" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authz_owner$_apmod_extra_msg" >&5 -$as_echo "$enable_authz_owner$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authz_owner$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authz_owner$_apmod_extra_msg" >&6; } if test "$enable_authz_owner" != "no"; then case "$enable_authz_owner" in static*) @@ -11225,12 +11805,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_dbd" >&5 -$as_echo_n "checking whether to enable mod_authz_dbd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_dbd" >&5 +printf %s "checking whether to enable mod_authz_dbd... " >&6; } # Check whether --enable-authz-dbd was given. -if test "${enable_authz_dbd+set}" = set; then : +if test ${enable_authz_dbd+y} +then : enableval=$enable_authz_dbd; force_authz_dbd=$enableval -else +else $as_nop enable_authz_dbd=most fi @@ -11286,8 +11867,8 @@ if test "$enable_authz_dbd" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authz_dbd$_apmod_extra_msg" >&5 -$as_echo "$enable_authz_dbd$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authz_dbd$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authz_dbd$_apmod_extra_msg" >&6; } if test "$enable_authz_dbd" != "no"; then case "$enable_authz_dbd" in static*) @@ -11367,12 +11948,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_core" >&5 -$as_echo_n "checking whether to enable mod_authz_core... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authz_core" >&5 +printf %s "checking whether to enable mod_authz_core... " >&6; } # Check whether --enable-authz-core was given. -if test "${enable_authz_core+set}" = set; then : +if test ${enable_authz_core+y} +then : enableval=$enable_authz_core; force_authz_core=$enableval -else +else $as_nop enable_authz_core=yes fi @@ -11428,8 +12010,8 @@ if test "$enable_authz_core" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authz_core$_apmod_extra_msg" >&5 -$as_echo "$enable_authz_core$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authz_core$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authz_core$_apmod_extra_msg" >&6; } if test "$enable_authz_core" != "no"; then case "$enable_authz_core" in static*) @@ -11509,12 +12091,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authnz_ldap" >&5 -$as_echo_n "checking whether to enable mod_authnz_ldap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authnz_ldap" >&5 +printf %s "checking whether to enable mod_authnz_ldap... " >&6; } # Check whether --enable-authnz-ldap was given. -if test "${enable_authnz_ldap+set}" = set; then : +if test ${enable_authnz_ldap+y} +then : enableval=$enable_authnz_ldap; force_authnz_ldap=$enableval -else +else $as_nop enable_authnz_ldap=most fi @@ -11568,16 +12151,17 @@ enable_authnz_ldap=no fi if test "$enable_authnz_ldap" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap support in apr/apr-util" >&5 -$as_echo_n "checking for ldap support in apr/apr-util... " >&6; } -if ${ac_cv_APR_HAS_LDAP+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ldap support in apr/apr-util" >&5 +printf %s "checking for ldap support in apr/apr-util... " >&6; } +if test ${ac_cv_APR_HAS_LDAP+y} +then : + printf %s "(cached) " >&6 +else $as_nop apache_old_cppflags="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCLUDES" @@ -11591,18 +12175,19 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_APR_HAS_LDAP=yes -else +else $as_nop ac_cv_APR_HAS_LDAP=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS="$apache_old_cppflags" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_APR_HAS_LDAP" >&5 -$as_echo "$ac_cv_APR_HAS_LDAP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_APR_HAS_LDAP" >&5 +printf "%s\n" "$ac_cv_APR_HAS_LDAP" >&6; } if test "$ac_cv_APR_HAS_LDAP" = "yes" ; then if test -z "$apu_config" ; then @@ -11633,14 +12218,14 @@ else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: apr/apr-util is compiled without ldap support" >&5 -$as_echo "$as_me: WARNING: apr/apr-util is compiled without ldap support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: apr/apr-util is compiled without ldap support" >&5 +printf "%s\n" "$as_me: WARNING: apr/apr-util is compiled without ldap support" >&2;} enable_authnz_ldap=no fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authnz_ldap" >&5 -$as_echo_n "checking whether to enable mod_authnz_ldap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authnz_ldap" >&5 +printf %s "checking whether to enable mod_authnz_ldap... " >&6; } if test "$enable_authnz_ldap" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -11649,8 +12234,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authnz_ldap$_apmod_extra_msg" >&5 -$as_echo "$enable_authnz_ldap$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authnz_ldap$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authnz_ldap$_apmod_extra_msg" >&6; } if test "$enable_authnz_ldap" != "no"; then case "$enable_authnz_ldap" in static*) @@ -11730,12 +12315,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authnz_fcgi" >&5 -$as_echo_n "checking whether to enable mod_authnz_fcgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_authnz_fcgi" >&5 +printf %s "checking whether to enable mod_authnz_fcgi... " >&6; } # Check whether --enable-authnz-fcgi was given. -if test "${enable_authnz_fcgi+set}" = set; then : +if test ${enable_authnz_fcgi+y} +then : enableval=$enable_authnz_fcgi; force_authnz_fcgi=$enableval -else +else $as_nop enable_authnz_fcgi=no fi @@ -11791,8 +12377,8 @@ if test "$enable_authnz_fcgi" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_authnz_fcgi$_apmod_extra_msg" >&5 -$as_echo "$enable_authnz_fcgi$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_authnz_fcgi$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_authnz_fcgi$_apmod_extra_msg" >&6; } if test "$enable_authnz_fcgi" != "no"; then case "$enable_authnz_fcgi" in static*) @@ -11872,12 +12458,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_access_compat" >&5 -$as_echo_n "checking whether to enable mod_access_compat... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_access_compat" >&5 +printf %s "checking whether to enable mod_access_compat... " >&6; } # Check whether --enable-access-compat was given. -if test "${enable_access_compat+set}" = set; then : +if test ${enable_access_compat+y} +then : enableval=$enable_access_compat; force_access_compat=$enableval -else +else $as_nop enable_access_compat=yes fi @@ -11933,8 +12520,8 @@ if test "$enable_access_compat" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_access_compat$_apmod_extra_msg" >&5 -$as_echo "$enable_access_compat$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_access_compat$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_access_compat$_apmod_extra_msg" >&6; } if test "$enable_access_compat" != "no"; then case "$enable_access_compat" in static*) @@ -12015,12 +12602,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_basic" >&5 -$as_echo_n "checking whether to enable mod_auth_basic... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_basic" >&5 +printf %s "checking whether to enable mod_auth_basic... " >&6; } # Check whether --enable-auth-basic was given. -if test "${enable_auth_basic+set}" = set; then : +if test ${enable_auth_basic+y} +then : enableval=$enable_auth_basic; force_auth_basic=$enableval -else +else $as_nop enable_auth_basic=yes fi @@ -12076,8 +12664,8 @@ if test "$enable_auth_basic" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_auth_basic$_apmod_extra_msg" >&5 -$as_echo "$enable_auth_basic$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_auth_basic$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_auth_basic$_apmod_extra_msg" >&6; } if test "$enable_auth_basic" != "no"; then case "$enable_auth_basic" in static*) @@ -12156,12 +12744,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_form" >&5 -$as_echo_n "checking whether to enable mod_auth_form... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_form" >&5 +printf %s "checking whether to enable mod_auth_form... " >&6; } # Check whether --enable-auth-form was given. -if test "${enable_auth_form+set}" = set; then : +if test ${enable_auth_form+y} +then : enableval=$enable_auth_form; force_auth_form=$enableval -else +else $as_nop enable_auth_form=most fi @@ -12217,8 +12806,8 @@ if test "$enable_auth_form" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_auth_form$_apmod_extra_msg" >&5 -$as_echo "$enable_auth_form$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_auth_form$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_auth_form$_apmod_extra_msg" >&6; } if test "$enable_auth_form" != "no"; then case "$enable_auth_form" in static*) @@ -12297,12 +12886,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_digest" >&5 -$as_echo_n "checking whether to enable mod_auth_digest... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_digest" >&5 +printf %s "checking whether to enable mod_auth_digest... " >&6; } # Check whether --enable-auth-digest was given. -if test "${enable_auth_digest+set}" = set; then : +if test ${enable_auth_digest+y} +then : enableval=$enable_auth_digest; force_auth_digest=$enableval -else +else $as_nop enable_auth_digest=most fi @@ -12356,8 +12946,8 @@ enable_auth_digest=no fi if test "$enable_auth_digest" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : @@ -12373,12 +12963,13 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_define_APR_HAS_RANDOM=yes -else +else $as_nop ac_cv_define_APR_HAS_RANDOM=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS=$apr_old_cppflags @@ -12389,8 +12980,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_digest" >&5 -$as_echo_n "checking whether to enable mod_auth_digest... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_auth_digest" >&5 +printf %s "checking whether to enable mod_auth_digest... " >&6; } if test "$enable_auth_digest" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -12399,8 +12990,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_auth_digest$_apmod_extra_msg" >&5 -$as_echo "$enable_auth_digest$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_auth_digest$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_auth_digest$_apmod_extra_msg" >&6; } if test "$enable_auth_digest" != "no"; then case "$enable_auth_digest" in static*) @@ -12480,12 +13071,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_allowmethods" >&5 -$as_echo_n "checking whether to enable mod_allowmethods... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_allowmethods" >&5 +printf %s "checking whether to enable mod_allowmethods... " >&6; } # Check whether --enable-allowmethods was given. -if test "${enable_allowmethods+set}" = set; then : +if test ${enable_allowmethods+y} +then : enableval=$enable_allowmethods; force_allowmethods=$enableval -else +else $as_nop enable_allowmethods=most fi @@ -12541,8 +13133,8 @@ if test "$enable_allowmethods" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_allowmethods$_apmod_extra_msg" >&5 -$as_echo "$enable_allowmethods$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_allowmethods$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_allowmethods$_apmod_extra_msg" >&6; } if test "$enable_allowmethods" != "no"; then case "$enable_allowmethods" in static*) @@ -12677,12 +13269,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_isapi" >&5 -$as_echo_n "checking whether to enable mod_isapi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_isapi" >&5 +printf %s "checking whether to enable mod_isapi... " >&6; } # Check whether --enable-isapi was given. -if test "${enable_isapi+set}" = set; then : +if test ${enable_isapi+y} +then : enableval=$enable_isapi; force_isapi=$enableval -else +else $as_nop enable_isapi=no fi @@ -12738,8 +13331,8 @@ if test "$enable_isapi" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_isapi$_apmod_extra_msg" >&5 -$as_echo "$enable_isapi$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_isapi$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_isapi$_apmod_extra_msg" >&6; } if test "$enable_isapi" != "no"; then case "$enable_isapi" in static*) @@ -12852,12 +13445,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_file_cache" >&5 -$as_echo_n "checking whether to enable mod_file_cache... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_file_cache" >&5 +printf %s "checking whether to enable mod_file_cache... " >&6; } # Check whether --enable-file-cache was given. -if test "${enable_file_cache+set}" = set; then : +if test ${enable_file_cache+y} +then : enableval=$enable_file_cache; force_file_cache=$enableval -else +else $as_nop enable_file_cache=most fi @@ -12913,8 +13507,8 @@ if test "$enable_file_cache" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_file_cache$_apmod_extra_msg" >&5 -$as_echo "$enable_file_cache$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_file_cache$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_file_cache$_apmod_extra_msg" >&6; } if test "$enable_file_cache" != "no"; then case "$enable_file_cache" in static*) @@ -13007,12 +13601,13 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache" >&5 -$as_echo_n "checking whether to enable mod_cache... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache" >&5 +printf %s "checking whether to enable mod_cache... " >&6; } # Check whether --enable-cache was given. -if test "${enable_cache+set}" = set; then : +if test ${enable_cache+y} +then : enableval=$enable_cache; force_cache=$enableval -else +else $as_nop enable_cache=most fi @@ -13068,8 +13663,8 @@ if test "$enable_cache" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cache$_apmod_extra_msg" >&5 -$as_echo "$enable_cache$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cache$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cache$_apmod_extra_msg" >&6; } if test "$enable_cache" != "no"; then case "$enable_cache" in static*) @@ -13148,12 +13743,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache_disk" >&5 -$as_echo_n "checking whether to enable mod_cache_disk... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache_disk" >&5 +printf %s "checking whether to enable mod_cache_disk... " >&6; } # Check whether --enable-cache-disk was given. -if test "${enable_cache_disk+set}" = set; then : +if test ${enable_cache_disk+y} +then : enableval=$enable_cache_disk; force_cache_disk=$enableval -else +else $as_nop enable_cache_disk=most fi @@ -13207,21 +13803,21 @@ enable_cache_disk=no fi if test "$enable_cache_disk" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_cache" = "no" ; then enable_cache_disk=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_cache is disabled but required for mod_cache_disk\"" >&5 -$as_echo "$as_me: WARNING: \"mod_cache is disabled but required for mod_cache_disk\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_cache is disabled but required for mod_cache_disk\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_cache is disabled but required for mod_cache_disk\"" >&2;} elif test "$enable_cache_disk" = "static" && test "$enable_cache" != "static" ; then enable_cache_disk=$enable_cache - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_cache_disk shared because mod_cache is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_cache_disk shared because mod_cache is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_cache_disk shared because mod_cache is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_cache_disk shared because mod_cache is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache_disk" >&5 -$as_echo_n "checking whether to enable mod_cache_disk... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache_disk" >&5 +printf %s "checking whether to enable mod_cache_disk... " >&6; } if test "$enable_cache_disk" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -13230,8 +13826,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cache_disk$_apmod_extra_msg" >&5 -$as_echo "$enable_cache_disk$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cache_disk$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cache_disk$_apmod_extra_msg" >&6; } if test "$enable_cache_disk" != "no"; then case "$enable_cache_disk" in static*) @@ -13310,12 +13906,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache_socache" >&5 -$as_echo_n "checking whether to enable mod_cache_socache... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cache_socache" >&5 +printf %s "checking whether to enable mod_cache_socache... " >&6; } # Check whether --enable-cache-socache was given. -if test "${enable_cache_socache+set}" = set; then : +if test ${enable_cache_socache+y} +then : enableval=$enable_cache_socache; force_cache_socache=$enableval -else +else $as_nop enable_cache_socache=most fi @@ -13371,8 +13968,8 @@ if test "$enable_cache_socache" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cache_socache$_apmod_extra_msg" >&5 -$as_echo "$enable_cache_socache$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cache_socache$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cache_socache$_apmod_extra_msg" >&6; } if test "$enable_cache_socache" != "no"; then case "$enable_cache_socache" in static*) @@ -13454,12 +14051,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_shmcb" >&5 -$as_echo_n "checking whether to enable mod_socache_shmcb... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_shmcb" >&5 +printf %s "checking whether to enable mod_socache_shmcb... " >&6; } # Check whether --enable-socache-shmcb was given. -if test "${enable_socache_shmcb+set}" = set; then : +if test ${enable_socache_shmcb+y} +then : enableval=$enable_socache_shmcb; force_socache_shmcb=$enableval -else +else $as_nop enable_socache_shmcb=most fi @@ -13515,8 +14113,8 @@ if test "$enable_socache_shmcb" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_socache_shmcb$_apmod_extra_msg" >&5 -$as_echo "$enable_socache_shmcb$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_socache_shmcb$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_socache_shmcb$_apmod_extra_msg" >&6; } if test "$enable_socache_shmcb" != "no"; then case "$enable_socache_shmcb" in static*) @@ -13595,12 +14193,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_dbm" >&5 -$as_echo_n "checking whether to enable mod_socache_dbm... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_dbm" >&5 +printf %s "checking whether to enable mod_socache_dbm... " >&6; } # Check whether --enable-socache-dbm was given. -if test "${enable_socache_dbm+set}" = set; then : +if test ${enable_socache_dbm+y} +then : enableval=$enable_socache_dbm; force_socache_dbm=$enableval -else +else $as_nop enable_socache_dbm=most fi @@ -13656,8 +14255,8 @@ if test "$enable_socache_dbm" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_socache_dbm$_apmod_extra_msg" >&5 -$as_echo "$enable_socache_dbm$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_socache_dbm$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_socache_dbm$_apmod_extra_msg" >&6; } if test "$enable_socache_dbm" != "no"; then case "$enable_socache_dbm" in static*) @@ -13736,12 +14335,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_memcache" >&5 -$as_echo_n "checking whether to enable mod_socache_memcache... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_memcache" >&5 +printf %s "checking whether to enable mod_socache_memcache... " >&6; } # Check whether --enable-socache-memcache was given. -if test "${enable_socache_memcache+set}" = set; then : +if test ${enable_socache_memcache+y} +then : enableval=$enable_socache_memcache; force_socache_memcache=$enableval -else +else $as_nop enable_socache_memcache=most fi @@ -13797,8 +14397,8 @@ if test "$enable_socache_memcache" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_socache_memcache$_apmod_extra_msg" >&5 -$as_echo "$enable_socache_memcache$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_socache_memcache$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_socache_memcache$_apmod_extra_msg" >&6; } if test "$enable_socache_memcache" != "no"; then case "$enable_socache_memcache" in static*) @@ -13877,12 +14477,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_redis" >&5 -$as_echo_n "checking whether to enable mod_socache_redis... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_redis" >&5 +printf %s "checking whether to enable mod_socache_redis... " >&6; } # Check whether --enable-socache-redis was given. -if test "${enable_socache_redis+set}" = set; then : +if test ${enable_socache_redis+y} +then : enableval=$enable_socache_redis; force_socache_redis=$enableval -else +else $as_nop enable_socache_redis=most fi @@ -13938,8 +14539,8 @@ if test "$enable_socache_redis" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_socache_redis$_apmod_extra_msg" >&5 -$as_echo "$enable_socache_redis$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_socache_redis$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_socache_redis$_apmod_extra_msg" >&6; } if test "$enable_socache_redis" != "no"; then case "$enable_socache_redis" in static*) @@ -14018,12 +14619,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_dc" >&5 -$as_echo_n "checking whether to enable mod_socache_dc... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_dc" >&5 +printf %s "checking whether to enable mod_socache_dc... " >&6; } # Check whether --enable-socache-dc was given. -if test "${enable_socache_dc+set}" = set; then : +if test ${enable_socache_dc+y} +then : enableval=$enable_socache_dc; force_socache_dc=$enableval -else +else $as_nop enable_socache_dc=no fi @@ -14077,8 +14679,8 @@ enable_socache_dc=no fi if test "$enable_socache_dc" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : @@ -14089,11 +14691,12 @@ ap_distcache_ldflags="" ap_distcache_with="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided distcache base" >&5 -$as_echo_n "checking for user-provided distcache base... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided distcache base" >&5 +printf %s "checking for user-provided distcache base... " >&6; } # Check whether --with-distcache was given. -if test "${with_distcache+set}" = set; then : +if test ${with_distcache+y} +then : withval=$with_distcache; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_distcache_with="yes" @@ -14103,11 +14706,11 @@ fi if test "x$ap_distcache_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_distcache_base" >&5 -$as_echo "$ap_distcache_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_distcache_base" >&5 +printf "%s\n" "$ap_distcache_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -14244,26 +14847,24 @@ fi fi - for ac_header in distcache/dc_client.h + for ac_header in distcache/dc_client.h do : - ac_fn_c_check_header_mongrel "$LINENO" "distcache/dc_client.h" "ac_cv_header_distcache_dc_client_h" "$ac_includes_default" -if test "x$ac_cv_header_distcache_dc_client_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DISTCACHE_DC_CLIENT_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "distcache/dc_client.h" "ac_cv_header_distcache_dc_client_h" "$ac_includes_default" +if test "x$ac_cv_header_distcache_dc_client_h" = xyes +then : + printf "%s\n" "#define HAVE_DISTCACHE_DC_CLIENT_H 1" >>confdefs.h ap_distcache_found="yes" fi done - if test "$ap_distcache_found" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for distcache version" >&5 -$as_echo_n "checking for distcache version... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for distcache version" >&5 +printf %s "checking for distcache version... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #if DISTCACHE_CLIENT_API != 0x0001 @@ -14273,25 +14874,26 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ap_distcache_found="no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_distcache_found" >&5 -$as_echo "$ap_distcache_found" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_distcache_found" >&5 +printf "%s\n" "$ap_distcache_found" >&6; } fi if test "$ap_distcache_found" != "yes"; then if test "x$ap_distcache_with" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ...No distcache detected" >&5 -$as_echo "$as_me: WARNING: ...No distcache detected" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ...No distcache detected" >&5 +printf "%s\n" "$as_me: WARNING: ...No distcache detected" >&2;} else as_fn_error $? "...No distcache detected" "$LINENO" 5 fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for distcache libraries" >&5 -$as_echo_n "checking for distcache libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for distcache libraries" >&5 +printf %s "checking for distcache libraries... " >&6; } ap_distcache_libs="-ldistcache -lnal" if test "x$LIBS" = "x"; then @@ -14319,26 +14921,27 @@ /* end confdefs.h. */ #include int -main () +main (void) { DC_CTX *foo = DC_CTX_new((const char *)0,0); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : -else +else $as_nop ap_distcache_found="no" fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_distcache_found" >&5 -$as_echo "$ap_distcache_found" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_distcache_found" >&5 +printf "%s\n" "$ap_distcache_found" >&6; } if test "$ap_distcache_found" != "yes"; then if test "x$ap_distcache_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ... Error, distcache libraries were missing or unusable" >&5 -$as_echo "$as_me: WARNING: ... Error, distcache libraries were missing or unusable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ... Error, distcache libraries were missing or unusable" >&5 +printf "%s\n" "$as_me: WARNING: ... Error, distcache libraries were missing or unusable" >&2;} else as_fn_error $? "... Error, distcache libraries were missing or unusable" "$LINENO" 5 fi @@ -14372,7 +14975,7 @@ fi -$as_echo "#define HAVE_DISTCACHE 1" >>confdefs.h +printf "%s\n" "#define HAVE_DISTCACHE 1" >>confdefs.h else enable_socache_dc=no @@ -14382,8 +14985,8 @@ : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_dc" >&5 -$as_echo_n "checking whether to enable mod_socache_dc... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_socache_dc" >&5 +printf %s "checking whether to enable mod_socache_dc... " >&6; } if test "$enable_socache_dc" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -14392,8 +14995,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_socache_dc$_apmod_extra_msg" >&5 -$as_echo "$enable_socache_dc$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_socache_dc$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_socache_dc$_apmod_extra_msg" >&6; } if test "$enable_socache_dc" != "no"; then case "$enable_socache_dc" in static*) @@ -14540,12 +15143,13 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_define_APR_HAS_DSO=yes -else +else $as_nop ac_cv_define_APR_HAS_DSO=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS=$apr_old_cppflags @@ -14610,12 +15214,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_so" >&5 -$as_echo_n "checking whether to enable mod_so... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_so" >&5 +printf %s "checking whether to enable mod_so... " >&6; } # Check whether --enable-so was given. -if test "${enable_so+set}" = set; then : +if test ${enable_so+y} +then : enableval=$enable_so; force_so=$enableval -else +else $as_nop enable_so=$enable_so fi @@ -14671,8 +15276,8 @@ if test "$enable_so" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_so$_apmod_extra_msg" >&5 -$as_echo "$enable_so$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_so$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_so$_apmod_extra_msg" >&6; } if test "$enable_so" != "no"; then case "$enable_so" in static*) @@ -14752,12 +15357,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_watchdog" >&5 -$as_echo_n "checking whether to enable mod_watchdog... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_watchdog" >&5 +printf %s "checking whether to enable mod_watchdog... " >&6; } # Check whether --enable-watchdog was given. -if test "${enable_watchdog+set}" = set; then : +if test ${enable_watchdog+y} +then : enableval=$enable_watchdog; force_watchdog=$enableval -else +else $as_nop enable_watchdog=most fi @@ -14811,8 +15417,8 @@ enable_watchdog=no fi if test "$enable_watchdog" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : @@ -14828,24 +15434,25 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_define_APR_HAS_THREADS=yes -else +else $as_nop ac_cv_define_APR_HAS_THREADS=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS=$apr_old_cppflags if test $ac_cv_define_APR_HAS_THREADS = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: mod_watchdog requires apr to be built with --enable-threads" >&5 -$as_echo "$as_me: WARNING: mod_watchdog requires apr to be built with --enable-threads" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: mod_watchdog requires apr to be built with --enable-threads" >&5 +printf "%s\n" "$as_me: WARNING: mod_watchdog requires apr to be built with --enable-threads" >&2;} enable_watchdog=no fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_watchdog" >&5 -$as_echo_n "checking whether to enable mod_watchdog... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_watchdog" >&5 +printf %s "checking whether to enable mod_watchdog... " >&6; } if test "$enable_watchdog" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -14854,8 +15461,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_watchdog$_apmod_extra_msg" >&5 -$as_echo "$enable_watchdog$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_watchdog$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_watchdog$_apmod_extra_msg" >&6; } if test "$enable_watchdog" != "no"; then case "$enable_watchdog" in static*) @@ -14935,12 +15542,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_macro" >&5 -$as_echo_n "checking whether to enable mod_macro... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_macro" >&5 +printf %s "checking whether to enable mod_macro... " >&6; } # Check whether --enable-macro was given. -if test "${enable_macro+set}" = set; then : +if test ${enable_macro+y} +then : enableval=$enable_macro; force_macro=$enableval -else +else $as_nop enable_macro=most fi @@ -14996,8 +15604,8 @@ if test "$enable_macro" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_macro$_apmod_extra_msg" >&5 -$as_echo "$enable_macro$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_macro$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_macro$_apmod_extra_msg" >&6; } if test "$enable_macro" != "no"; then case "$enable_macro" in static*) @@ -15131,12 +15739,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dbd" >&5 -$as_echo_n "checking whether to enable mod_dbd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dbd" >&5 +printf %s "checking whether to enable mod_dbd... " >&6; } # Check whether --enable-dbd was given. -if test "${enable_dbd+set}" = set; then : +if test ${enable_dbd+y} +then : enableval=$enable_dbd; force_dbd=$enableval -else +else $as_nop enable_dbd=most fi @@ -15192,8 +15801,8 @@ if test "$enable_dbd" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dbd$_apmod_extra_msg" >&5 -$as_echo "$enable_dbd$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_dbd$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_dbd$_apmod_extra_msg" >&6; } if test "$enable_dbd" != "no"; then case "$enable_dbd" in static*) @@ -15327,12 +15936,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_bucketeer" >&5 -$as_echo_n "checking whether to enable mod_bucketeer... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_bucketeer" >&5 +printf %s "checking whether to enable mod_bucketeer... " >&6; } # Check whether --enable-bucketeer was given. -if test "${enable_bucketeer+set}" = set; then : +if test ${enable_bucketeer+y} +then : enableval=$enable_bucketeer; force_bucketeer=$enableval -else +else $as_nop enable_bucketeer=no fi @@ -15388,8 +15998,8 @@ if test "$enable_bucketeer" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_bucketeer$_apmod_extra_msg" >&5 -$as_echo "$enable_bucketeer$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_bucketeer$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_bucketeer$_apmod_extra_msg" >&6; } if test "$enable_bucketeer" != "no"; then case "$enable_bucketeer" in static*) @@ -15468,12 +16078,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dumpio" >&5 -$as_echo_n "checking whether to enable mod_dumpio... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dumpio" >&5 +printf %s "checking whether to enable mod_dumpio... " >&6; } # Check whether --enable-dumpio was given. -if test "${enable_dumpio+set}" = set; then : +if test ${enable_dumpio+y} +then : enableval=$enable_dumpio; force_dumpio=$enableval -else +else $as_nop enable_dumpio=most fi @@ -15529,8 +16140,8 @@ if test "$enable_dumpio" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dumpio$_apmod_extra_msg" >&5 -$as_echo "$enable_dumpio$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_dumpio$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_dumpio$_apmod_extra_msg" >&6; } if test "$enable_dumpio" != "no"; then case "$enable_dumpio" in static*) @@ -15643,12 +16254,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_echo" >&5 -$as_echo_n "checking whether to enable mod_echo... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_echo" >&5 +printf %s "checking whether to enable mod_echo... " >&6; } # Check whether --enable-echo was given. -if test "${enable_echo+set}" = set; then : +if test ${enable_echo+y} +then : enableval=$enable_echo; force_echo=$enableval -else +else $as_nop enable_echo=maybe-all fi @@ -15704,8 +16316,8 @@ if test "$enable_echo" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_echo$_apmod_extra_msg" >&5 -$as_echo "$enable_echo$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_echo$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_echo$_apmod_extra_msg" >&6; } if test "$enable_echo" != "no"; then case "$enable_echo" in static*) @@ -15817,12 +16429,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_example_hooks" >&5 -$as_echo_n "checking whether to enable mod_example_hooks... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_example_hooks" >&5 +printf %s "checking whether to enable mod_example_hooks... " >&6; } # Check whether --enable-example-hooks was given. -if test "${enable_example_hooks+set}" = set; then : +if test ${enable_example_hooks+y} +then : enableval=$enable_example_hooks; force_example_hooks=$enableval -else +else $as_nop enable_example_hooks=no fi @@ -15878,8 +16491,8 @@ if test "$enable_example_hooks" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_example_hooks$_apmod_extra_msg" >&5 -$as_echo "$enable_example_hooks$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_example_hooks$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_example_hooks$_apmod_extra_msg" >&6; } if test "$enable_example_hooks" != "no"; then case "$enable_example_hooks" in static*) @@ -15958,12 +16571,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_case_filter" >&5 -$as_echo_n "checking whether to enable mod_case_filter... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_case_filter" >&5 +printf %s "checking whether to enable mod_case_filter... " >&6; } # Check whether --enable-case-filter was given. -if test "${enable_case_filter+set}" = set; then : +if test ${enable_case_filter+y} +then : enableval=$enable_case_filter; force_case_filter=$enableval -else +else $as_nop enable_case_filter=no fi @@ -16019,8 +16633,8 @@ if test "$enable_case_filter" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_case_filter$_apmod_extra_msg" >&5 -$as_echo "$enable_case_filter$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_case_filter$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_case_filter$_apmod_extra_msg" >&6; } if test "$enable_case_filter" != "no"; then case "$enable_case_filter" in static*) @@ -16099,12 +16713,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_case_filter_in" >&5 -$as_echo_n "checking whether to enable mod_case_filter_in... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_case_filter_in" >&5 +printf %s "checking whether to enable mod_case_filter_in... " >&6; } # Check whether --enable-case-filter-in was given. -if test "${enable_case_filter_in+set}" = set; then : +if test ${enable_case_filter_in+y} +then : enableval=$enable_case_filter_in; force_case_filter_in=$enableval -else +else $as_nop enable_case_filter_in=no fi @@ -16160,8 +16775,8 @@ if test "$enable_case_filter_in" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_case_filter_in$_apmod_extra_msg" >&5 -$as_echo "$enable_case_filter_in$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_case_filter_in$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_case_filter_in$_apmod_extra_msg" >&6; } if test "$enable_case_filter_in" != "no"; then case "$enable_case_filter_in" in static*) @@ -16240,12 +16855,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_example_ipc" >&5 -$as_echo_n "checking whether to enable mod_example_ipc... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_example_ipc" >&5 +printf %s "checking whether to enable mod_example_ipc... " >&6; } # Check whether --enable-example-ipc was given. -if test "${enable_example_ipc+set}" = set; then : +if test ${enable_example_ipc+y} +then : enableval=$enable_example_ipc; force_example_ipc=$enableval -else +else $as_nop enable_example_ipc=no fi @@ -16301,8 +16917,8 @@ if test "$enable_example_ipc" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_example_ipc$_apmod_extra_msg" >&5 -$as_echo "$enable_example_ipc$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_example_ipc$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_example_ipc$_apmod_extra_msg" >&6; } if test "$enable_example_ipc" != "no"; then case "$enable_example_ipc" in static*) @@ -16447,12 +17063,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_buffer" >&5 -$as_echo_n "checking whether to enable mod_buffer... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_buffer" >&5 +printf %s "checking whether to enable mod_buffer... " >&6; } # Check whether --enable-buffer was given. -if test "${enable_buffer+set}" = set; then : +if test ${enable_buffer+y} +then : enableval=$enable_buffer; force_buffer=$enableval -else +else $as_nop enable_buffer=most fi @@ -16508,8 +17125,8 @@ if test "$enable_buffer" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_buffer$_apmod_extra_msg" >&5 -$as_echo "$enable_buffer$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_buffer$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_buffer$_apmod_extra_msg" >&6; } if test "$enable_buffer" != "no"; then case "$enable_buffer" in static*) @@ -16588,12 +17205,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_data" >&5 -$as_echo_n "checking whether to enable mod_data... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_data" >&5 +printf %s "checking whether to enable mod_data... " >&6; } # Check whether --enable-data was given. -if test "${enable_data+set}" = set; then : +if test ${enable_data+y} +then : enableval=$enable_data; force_data=$enableval -else +else $as_nop enable_data=maybe-all fi @@ -16649,8 +17267,8 @@ if test "$enable_data" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_data$_apmod_extra_msg" >&5 -$as_echo "$enable_data$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_data$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_data$_apmod_extra_msg" >&6; } if test "$enable_data" != "no"; then case "$enable_data" in static*) @@ -16729,12 +17347,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ratelimit" >&5 -$as_echo_n "checking whether to enable mod_ratelimit... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ratelimit" >&5 +printf %s "checking whether to enable mod_ratelimit... " >&6; } # Check whether --enable-ratelimit was given. -if test "${enable_ratelimit+set}" = set; then : +if test ${enable_ratelimit+y} +then : enableval=$enable_ratelimit; force_ratelimit=$enableval -else +else $as_nop enable_ratelimit=most fi @@ -16790,8 +17409,8 @@ if test "$enable_ratelimit" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ratelimit$_apmod_extra_msg" >&5 -$as_echo "$enable_ratelimit$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_ratelimit$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_ratelimit$_apmod_extra_msg" >&6; } if test "$enable_ratelimit" != "no"; then case "$enable_ratelimit" in static*) @@ -16870,12 +17489,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_reqtimeout" >&5 -$as_echo_n "checking whether to enable mod_reqtimeout... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_reqtimeout" >&5 +printf %s "checking whether to enable mod_reqtimeout... " >&6; } # Check whether --enable-reqtimeout was given. -if test "${enable_reqtimeout+set}" = set; then : +if test ${enable_reqtimeout+y} +then : enableval=$enable_reqtimeout; force_reqtimeout=$enableval -else +else $as_nop enable_reqtimeout=yes fi @@ -16931,8 +17551,8 @@ if test "$enable_reqtimeout" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_reqtimeout$_apmod_extra_msg" >&5 -$as_echo "$enable_reqtimeout$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_reqtimeout$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_reqtimeout$_apmod_extra_msg" >&6; } if test "$enable_reqtimeout" != "no"; then case "$enable_reqtimeout" in static*) @@ -17011,12 +17631,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ext_filter" >&5 -$as_echo_n "checking whether to enable mod_ext_filter... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ext_filter" >&5 +printf %s "checking whether to enable mod_ext_filter... " >&6; } # Check whether --enable-ext-filter was given. -if test "${enable_ext_filter+set}" = set; then : +if test ${enable_ext_filter+y} +then : enableval=$enable_ext_filter; force_ext_filter=$enableval -else +else $as_nop enable_ext_filter=most fi @@ -17072,8 +17693,8 @@ if test "$enable_ext_filter" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ext_filter$_apmod_extra_msg" >&5 -$as_echo "$enable_ext_filter$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_ext_filter$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_ext_filter$_apmod_extra_msg" >&6; } if test "$enable_ext_filter" != "no"; then case "$enable_ext_filter" in static*) @@ -17152,12 +17773,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_request" >&5 -$as_echo_n "checking whether to enable mod_request... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_request" >&5 +printf %s "checking whether to enable mod_request... " >&6; } # Check whether --enable-request was given. -if test "${enable_request+set}" = set; then : +if test ${enable_request+y} +then : enableval=$enable_request; force_request=$enableval -else +else $as_nop enable_request=most fi @@ -17213,8 +17835,8 @@ if test "$enable_request" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_request$_apmod_extra_msg" >&5 -$as_echo "$enable_request$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_request$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_request$_apmod_extra_msg" >&6; } if test "$enable_request" != "no"; then case "$enable_request" in static*) @@ -17293,12 +17915,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_include" >&5 -$as_echo_n "checking whether to enable mod_include... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_include" >&5 +printf %s "checking whether to enable mod_include... " >&6; } # Check whether --enable-include was given. -if test "${enable_include+set}" = set; then : +if test ${enable_include+y} +then : enableval=$enable_include; force_include=$enableval -else +else $as_nop enable_include=most fi @@ -17354,8 +17977,8 @@ if test "$enable_include" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_include$_apmod_extra_msg" >&5 -$as_echo "$enable_include$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_include$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_include$_apmod_extra_msg" >&6; } if test "$enable_include" != "no"; then case "$enable_include" in static*) @@ -17434,12 +18057,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_filter" >&5 -$as_echo_n "checking whether to enable mod_filter... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_filter" >&5 +printf %s "checking whether to enable mod_filter... " >&6; } # Check whether --enable-filter was given. -if test "${enable_filter+set}" = set; then : +if test ${enable_filter+y} +then : enableval=$enable_filter; force_filter=$enableval -else +else $as_nop enable_filter=yes fi @@ -17495,8 +18119,8 @@ if test "$enable_filter" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_filter$_apmod_extra_msg" >&5 -$as_echo "$enable_filter$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_filter$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_filter$_apmod_extra_msg" >&6; } if test "$enable_filter" != "no"; then case "$enable_filter" in static*) @@ -17575,12 +18199,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_reflector" >&5 -$as_echo_n "checking whether to enable mod_reflector... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_reflector" >&5 +printf %s "checking whether to enable mod_reflector... " >&6; } # Check whether --enable-reflector was given. -if test "${enable_reflector+set}" = set; then : +if test ${enable_reflector+y} +then : enableval=$enable_reflector; force_reflector=$enableval -else +else $as_nop enable_reflector=maybe-all fi @@ -17636,8 +18261,8 @@ if test "$enable_reflector" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_reflector$_apmod_extra_msg" >&5 -$as_echo "$enable_reflector$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_reflector$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_reflector$_apmod_extra_msg" >&6; } if test "$enable_reflector" != "no"; then case "$enable_reflector" in static*) @@ -17716,12 +18341,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_substitute" >&5 -$as_echo_n "checking whether to enable mod_substitute... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_substitute" >&5 +printf %s "checking whether to enable mod_substitute... " >&6; } # Check whether --enable-substitute was given. -if test "${enable_substitute+set}" = set; then : +if test ${enable_substitute+y} +then : enableval=$enable_substitute; force_substitute=$enableval -else +else $as_nop enable_substitute=most fi @@ -17777,8 +18403,8 @@ if test "$enable_substitute" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_substitute$_apmod_extra_msg" >&5 -$as_echo "$enable_substitute$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_substitute$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_substitute$_apmod_extra_msg" >&6; } if test "$enable_substitute" != "no"; then case "$enable_substitute" in static*) @@ -17859,12 +18485,13 @@ sed_obj="mod_sed.lo sed0.lo sed1.lo regexp.lo" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_sed" >&5 -$as_echo_n "checking whether to enable mod_sed... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_sed" >&5 +printf %s "checking whether to enable mod_sed... " >&6; } # Check whether --enable-sed was given. -if test "${enable_sed+set}" = set; then : +if test ${enable_sed+y} +then : enableval=$enable_sed; force_sed=$enableval -else +else $as_nop enable_sed=most fi @@ -17918,8 +18545,8 @@ enable_sed=no fi if test "$enable_sed" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : if test "x$enable_sed" = "xshared"; then @@ -17949,8 +18576,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_sed" >&5 -$as_echo_n "checking whether to enable mod_sed... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_sed" >&5 +printf %s "checking whether to enable mod_sed... " >&6; } if test "$enable_sed" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -17959,8 +18586,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_sed$_apmod_extra_msg" >&5 -$as_echo "$enable_sed$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_sed$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_sed$_apmod_extra_msg" >&6; } if test "$enable_sed" != "no"; then case "$enable_sed" in static*) @@ -18043,12 +18670,13 @@ # mod_charset_lite can be very useful on an ebcdic system, # so include it by default - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_charset_lite" >&5 -$as_echo_n "checking whether to enable mod_charset_lite... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_charset_lite" >&5 +printf %s "checking whether to enable mod_charset_lite... " >&6; } # Check whether --enable-charset-lite was given. -if test "${enable_charset_lite+set}" = set; then : +if test ${enable_charset_lite+y} +then : enableval=$enable_charset_lite; force_charset_lite=$enableval -else +else $as_nop enable_charset_lite=yes fi @@ -18104,8 +18732,8 @@ if test "$enable_charset_lite" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_charset_lite$_apmod_extra_msg" >&5 -$as_echo "$enable_charset_lite$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_charset_lite$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_charset_lite$_apmod_extra_msg" >&6; } if test "$enable_charset_lite" != "no"; then case "$enable_charset_lite" in static*) @@ -18185,12 +18813,13 @@ else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_charset_lite" >&5 -$as_echo_n "checking whether to enable mod_charset_lite... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_charset_lite" >&5 +printf %s "checking whether to enable mod_charset_lite... " >&6; } # Check whether --enable-charset-lite was given. -if test "${enable_charset_lite+set}" = set; then : +if test ${enable_charset_lite+y} +then : enableval=$enable_charset_lite; force_charset_lite=$enableval -else +else $as_nop enable_charset_lite=maybe-all fi @@ -18246,8 +18875,8 @@ if test "$enable_charset_lite" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_charset_lite$_apmod_extra_msg" >&5 -$as_echo "$enable_charset_lite$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_charset_lite$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_charset_lite$_apmod_extra_msg" >&6; } if test "$enable_charset_lite" != "no"; then case "$enable_charset_lite" in static*) @@ -18329,12 +18958,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_deflate" >&5 -$as_echo_n "checking whether to enable mod_deflate... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_deflate" >&5 +printf %s "checking whether to enable mod_deflate... " >&6; } # Check whether --enable-deflate was given. -if test "${enable_deflate+set}" = set; then : +if test ${enable_deflate+y} +then : enableval=$enable_deflate; force_deflate=$enableval -else +else $as_nop enable_deflate=most fi @@ -18388,13 +19018,14 @@ enable_deflate=no fi if test "$enable_deflate" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : # Check whether --with-z was given. -if test "${with_z+set}" = set; then : +if test ${with_z+y} +then : withval=$with_z; if test "x$withval" != "xyes" && test "x$withval" != "x"; then ap_zlib_base="$withval" @@ -18404,11 +19035,12 @@ fi if test "x$ap_zlib_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlib location" >&5 -$as_echo_n "checking for zlib location... " >&6; } - if ${ap_cv_zlib+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zlib location" >&5 +printf %s "checking for zlib location... " >&6; } + if test ${ap_cv_zlib+y} +then : + printf %s "(cached) " >&6 +else $as_nop for dir in /usr/local /usr ; do if test -d $dir && test -f $dir/include/zlib.h; then @@ -18422,11 +19054,11 @@ ap_zlib_base=$ap_cv_zlib if test "x$ap_zlib_base" = "x"; then enable_deflate=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +printf "%s\n" "not found" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_zlib_base" >&5 -$as_echo "$ap_zlib_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_zlib_base" >&5 +printf "%s\n" "$ap_zlib_base" >&6; } fi fi if test "$enable_deflate" != "no"; then @@ -18586,22 +19218,23 @@ done fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlib library" >&5 -$as_echo_n "checking for zlib library... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zlib library" >&5 +printf %s "checking for zlib library... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { int i = Z_OK; ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 -$as_echo "found" >&6; } +if ac_fn_c_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5 +printf "%s\n" "found" >&6; } if test "x$MOD_DEFLATE_LDADD" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_DEFLATE_LDADD to \"$ap_zlib_ldflags -lz\"" @@ -18623,19 +19256,19 @@ done fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +printf "%s\n" "not found" >&6; } enable_deflate=no if test "x$ap_zlib_with" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ... Error, zlib was missing or unusable" >&5 -$as_echo "$as_me: WARNING: ... Error, zlib was missing or unusable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ... Error, zlib was missing or unusable" >&5 +printf "%s\n" "$as_me: WARNING: ... Error, zlib was missing or unusable" >&2;} else as_fn_error $? "... Error, zlib was missing or unusable" "$LINENO" 5 fi fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext INCLUDES=$ap_save_includes LDFLAGS=$ap_save_ldflags @@ -18663,8 +19296,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_deflate" >&5 -$as_echo_n "checking whether to enable mod_deflate... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_deflate" >&5 +printf %s "checking whether to enable mod_deflate... " >&6; } if test "$enable_deflate" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -18673,8 +19306,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_deflate$_apmod_extra_msg" >&5 -$as_echo "$enable_deflate$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_deflate$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_deflate$_apmod_extra_msg" >&6; } if test "$enable_deflate" != "no"; then case "$enable_deflate" in static*) @@ -18756,12 +19389,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_xml2enc" >&5 -$as_echo_n "checking whether to enable mod_xml2enc... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_xml2enc" >&5 +printf %s "checking whether to enable mod_xml2enc... " >&6; } # Check whether --enable-xml2enc was given. -if test "${enable_xml2enc+set}" = set; then : +if test ${enable_xml2enc+y} +then : enableval=$enable_xml2enc; force_xml2enc=$enableval -else +else $as_nop enable_xml2enc=maybe-all fi @@ -18815,28 +19449,30 @@ enable_xml2enc=no fi if test "$enable_xml2enc" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 -$as_echo_n "checking for libxml2... " >&6; } -if ${ac_cv_libxml2+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 +printf %s "checking for libxml2... " >&6; } +if test ${ac_cv_libxml2+y} +then : + printf %s "(cached) " >&6 +else $as_nop # Check whether --with-libxml2 was given. -if test "${with_libxml2+set}" = set; then : +if test ${with_libxml2+y} +then : withval=$with_libxml2; test_paths="${with_libxml2}/include/libxml2 ${with_libxml2}/include ${with_libxml2}" -else +else $as_nop test_paths="/usr/include/libxml2 /usr/local/include/libxml2 /usr/include /usr/local/include" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 -$as_echo_n "checking for libxml2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 +printf %s "checking for libxml2... " >&6; } xml2_path="" for x in ${test_paths}; do if test -f "${x}/libxml/parser.h"; then @@ -18852,8 +19488,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxml2" >&5 -$as_echo "$ac_cv_libxml2" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxml2" >&5 +printf "%s\n" "$ac_cv_libxml2" >&6; } if test "$ac_cv_libxml2" = "yes" ; then @@ -18903,8 +19539,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_xml2enc" >&5 -$as_echo_n "checking whether to enable mod_xml2enc... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_xml2enc" >&5 +printf %s "checking whether to enable mod_xml2enc... " >&6; } if test "$enable_xml2enc" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -18913,8 +19549,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_xml2enc$_apmod_extra_msg" >&5 -$as_echo "$enable_xml2enc$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_xml2enc$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_xml2enc$_apmod_extra_msg" >&6; } if test "$enable_xml2enc" != "no"; then case "$enable_xml2enc" in static*) @@ -18993,12 +19629,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_html" >&5 -$as_echo_n "checking whether to enable mod_proxy_html... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_html" >&5 +printf %s "checking whether to enable mod_proxy_html... " >&6; } # Check whether --enable-proxy-html was given. -if test "${enable_proxy_html+set}" = set; then : +if test ${enable_proxy_html+y} +then : enableval=$enable_proxy_html; force_proxy_html=$enableval -else +else $as_nop enable_proxy_html=maybe-all fi @@ -19052,28 +19689,30 @@ enable_proxy_html=no fi if test "$enable_proxy_html" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 -$as_echo_n "checking for libxml2... " >&6; } -if ${ac_cv_libxml2+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 +printf %s "checking for libxml2... " >&6; } +if test ${ac_cv_libxml2+y} +then : + printf %s "(cached) " >&6 +else $as_nop # Check whether --with-libxml2 was given. -if test "${with_libxml2+set}" = set; then : +if test ${with_libxml2+y} +then : withval=$with_libxml2; test_paths="${with_libxml2}/include/libxml2 ${with_libxml2}/include ${with_libxml2}" -else +else $as_nop test_paths="/usr/include/libxml2 /usr/local/include/libxml2 /usr/include /usr/local/include" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 -$as_echo_n "checking for libxml2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml2" >&5 +printf %s "checking for libxml2... " >&6; } xml2_path="" for x in ${test_paths}; do if test -f "${x}/libxml/parser.h"; then @@ -19089,8 +19728,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxml2" >&5 -$as_echo "$ac_cv_libxml2" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxml2" >&5 +printf "%s\n" "$ac_cv_libxml2" >&6; } if test "$ac_cv_libxml2" = "yes" ; then @@ -19141,8 +19780,8 @@ : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_html" >&5 -$as_echo_n "checking whether to enable mod_proxy_html... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_html" >&5 +printf %s "checking whether to enable mod_proxy_html... " >&6; } if test "$enable_proxy_html" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -19151,8 +19790,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_html$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_html$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_html$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_html$_apmod_extra_msg" >&6; } if test "$enable_proxy_html" != "no"; then case "$enable_proxy_html" in static*) @@ -19232,12 +19871,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_brotli" >&5 -$as_echo_n "checking whether to enable mod_brotli... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_brotli" >&5 +printf %s "checking whether to enable mod_brotli... " >&6; } # Check whether --enable-brotli was given. -if test "${enable_brotli+set}" = set; then : +if test ${enable_brotli+y} +then : enableval=$enable_brotli; force_brotli=$enableval -else +else $as_nop enable_brotli=most fi @@ -19291,13 +19931,14 @@ enable_brotli=no fi if test "$enable_brotli" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : # Check whether --with-brotli was given. -if test "${with_brotli+set}" = set; then : +if test ${with_brotli+y} +then : withval=$with_brotli; if test "$withval" != "yes" -a "x$withval" != "x"; then ap_brotli_base="$withval" @@ -19330,13 +19971,13 @@ done fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Brotli library >= 0.6.0 via prefix" >&5 -$as_echo_n "checking for Brotli library >= 0.6.0 via prefix... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Brotli library >= 0.6.0 via prefix" >&5 +printf %s "checking for Brotli library >= 0.6.0 via prefix... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { const uint8_t *o = BrotliEncoderTakeOutput((BrotliEncoderState*)0, (size_t*)0); @@ -19345,32 +19986,33 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ap_brotli_found=yes ap_brotli_cflags="-I${ap_brotli_base}/include" ap_brotli_libs="-L${ap_brotli_base}/lib -lbrotlienc -lbrotlicommon" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CPPFLAGS=$ap_save_cppflags else if test -n "$PKGCONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Brotli library >= 0.6.0 via pkg-config" >&5 -$as_echo_n "checking for Brotli library >= 0.6.0 via pkg-config... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Brotli library >= 0.6.0 via pkg-config" >&5 +printf %s "checking for Brotli library >= 0.6.0 via pkg-config... " >&6; } if $PKGCONFIG --exists "libbrotlienc >= 0.6.0"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } ap_brotli_found=yes ap_brotli_cflags=`$PKGCONFIG libbrotlienc --cflags` ap_brotli_libs=`$PKGCONFIG libbrotlienc --libs` else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi fi @@ -19448,8 +20090,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_brotli" >&5 -$as_echo_n "checking whether to enable mod_brotli... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_brotli" >&5 +printf %s "checking whether to enable mod_brotli... " >&6; } if test "$enable_brotli" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -19458,8 +20100,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_brotli$_apmod_extra_msg" >&5 -$as_echo "$enable_brotli$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_brotli$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_brotli$_apmod_extra_msg" >&6; } if test "$enable_brotli" != "no"; then case "$enable_brotli" in static*) @@ -19601,12 +20243,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_http" >&5 -$as_echo_n "checking whether to enable mod_http... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_http" >&5 +printf %s "checking whether to enable mod_http... " >&6; } # Check whether --enable-http was given. -if test "${enable_http+set}" = set; then : +if test ${enable_http+y} +then : enableval=$enable_http; force_http=$enableval -else +else $as_nop enable_http=static fi @@ -19662,8 +20305,8 @@ if test "$enable_http" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_http$_apmod_extra_msg" >&5 -$as_echo "$enable_http$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_http$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_http$_apmod_extra_msg" >&6; } if test "$enable_http" != "no"; then case "$enable_http" in static*) @@ -19742,12 +20385,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_mime" >&5 -$as_echo_n "checking whether to enable mod_mime... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_mime" >&5 +printf %s "checking whether to enable mod_mime... " >&6; } # Check whether --enable-mime was given. -if test "${enable_mime+set}" = set; then : +if test ${enable_mime+y} +then : enableval=$enable_mime; force_mime=$enableval -else +else $as_nop enable_mime=yes fi @@ -19803,8 +20447,8 @@ if test "$enable_mime" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_mime$_apmod_extra_msg" >&5 -$as_echo "$enable_mime$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_mime$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_mime$_apmod_extra_msg" >&6; } if test "$enable_mime" != "no"; then case "$enable_mime" in static*) @@ -19918,12 +20562,13 @@ ldap_objects="util_ldap.lo util_ldap_cache.lo util_ldap_cache_mgr.lo" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ldap" >&5 -$as_echo_n "checking whether to enable mod_ldap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ldap" >&5 +printf %s "checking whether to enable mod_ldap... " >&6; } # Check whether --enable-ldap was given. -if test "${enable_ldap+set}" = set; then : +if test ${enable_ldap+y} +then : enableval=$enable_ldap; force_ldap=$enableval -else +else $as_nop enable_ldap=most fi @@ -19977,16 +20622,17 @@ enable_ldap=no fi if test "$enable_ldap" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ldap support in apr/apr-util" >&5 -$as_echo_n "checking for ldap support in apr/apr-util... " >&6; } -if ${ac_cv_APR_HAS_LDAP+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ldap support in apr/apr-util" >&5 +printf %s "checking for ldap support in apr/apr-util... " >&6; } +if test ${ac_cv_APR_HAS_LDAP+y} +then : + printf %s "(cached) " >&6 +else $as_nop apache_old_cppflags="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCLUDES" @@ -20000,18 +20646,19 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_APR_HAS_LDAP=yes -else +else $as_nop ac_cv_APR_HAS_LDAP=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS="$apache_old_cppflags" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_APR_HAS_LDAP" >&5 -$as_echo "$ac_cv_APR_HAS_LDAP" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_APR_HAS_LDAP" >&5 +printf "%s\n" "$ac_cv_APR_HAS_LDAP" >&6; } if test "$ac_cv_APR_HAS_LDAP" = "yes" ; then if test -z "$apu_config" ; then @@ -20042,14 +20689,14 @@ else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: apr/apr-util is compiled without ldap support" >&5 -$as_echo "$as_me: WARNING: apr/apr-util is compiled without ldap support" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: apr/apr-util is compiled without ldap support" >&5 +printf "%s\n" "$as_me: WARNING: apr/apr-util is compiled without ldap support" >&2;} enable_ldap=no fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ldap" >&5 -$as_echo_n "checking whether to enable mod_ldap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ldap" >&5 +printf %s "checking whether to enable mod_ldap... " >&6; } if test "$enable_ldap" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -20058,8 +20705,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ldap$_apmod_extra_msg" >&5 -$as_echo "$enable_ldap$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_ldap$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_ldap$_apmod_extra_msg" >&6; } if test "$enable_ldap" != "no"; then case "$enable_ldap" in static*) @@ -20194,12 +20841,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_log_config" >&5 -$as_echo_n "checking whether to enable mod_log_config... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_log_config" >&5 +printf %s "checking whether to enable mod_log_config... " >&6; } # Check whether --enable-log-config was given. -if test "${enable_log_config+set}" = set; then : +if test ${enable_log_config+y} +then : enableval=$enable_log_config; force_log_config=$enableval -else +else $as_nop enable_log_config=yes fi @@ -20255,8 +20903,8 @@ if test "$enable_log_config" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_log_config$_apmod_extra_msg" >&5 -$as_echo "$enable_log_config$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_log_config$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_log_config$_apmod_extra_msg" >&6; } if test "$enable_log_config" != "no"; then case "$enable_log_config" in static*) @@ -20335,12 +20983,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_log_debug" >&5 -$as_echo_n "checking whether to enable mod_log_debug... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_log_debug" >&5 +printf %s "checking whether to enable mod_log_debug... " >&6; } # Check whether --enable-log-debug was given. -if test "${enable_log_debug+set}" = set; then : +if test ${enable_log_debug+y} +then : enableval=$enable_log_debug; force_log_debug=$enableval -else +else $as_nop enable_log_debug=most fi @@ -20396,8 +21045,8 @@ if test "$enable_log_debug" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_log_debug$_apmod_extra_msg" >&5 -$as_echo "$enable_log_debug$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_log_debug$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_log_debug$_apmod_extra_msg" >&6; } if test "$enable_log_debug" != "no"; then case "$enable_log_debug" in static*) @@ -20476,12 +21125,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_log_forensic" >&5 -$as_echo_n "checking whether to enable mod_log_forensic... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_log_forensic" >&5 +printf %s "checking whether to enable mod_log_forensic... " >&6; } # Check whether --enable-log-forensic was given. -if test "${enable_log_forensic+set}" = set; then : +if test ${enable_log_forensic+y} +then : enableval=$enable_log_forensic; force_log_forensic=$enableval -else +else $as_nop enable_log_forensic=maybe-all fi @@ -20537,8 +21187,8 @@ if test "$enable_log_forensic" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_log_forensic$_apmod_extra_msg" >&5 -$as_echo "$enable_log_forensic$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_log_forensic$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_log_forensic$_apmod_extra_msg" >&6; } if test "$enable_log_forensic" != "no"; then case "$enable_log_forensic" in static*) @@ -20643,12 +21293,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_logio" >&5 -$as_echo_n "checking whether to enable mod_logio... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_logio" >&5 +printf %s "checking whether to enable mod_logio... " >&6; } # Check whether --enable-logio was given. -if test "${enable_logio+set}" = set; then : +if test ${enable_logio+y} +then : enableval=$enable_logio; force_logio=$enableval -else +else $as_nop enable_logio=most fi @@ -20704,8 +21355,8 @@ if test "$enable_logio" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_logio$_apmod_extra_msg" >&5 -$as_echo "$enable_logio$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_logio$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_logio$_apmod_extra_msg" >&6; } if test "$enable_logio" != "no"; then case "$enable_logio" in static*) @@ -20845,12 +21496,13 @@ lua_objects="lua_apr.lo lua_config.lo mod_lua.lo lua_request.lo lua_vmprep.lo lua_dbd.lo lua_passwd.lo" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lua" >&5 -$as_echo_n "checking whether to enable mod_lua... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lua" >&5 +printf %s "checking whether to enable mod_lua... " >&6; } # Check whether --enable-lua was given. -if test "${enable_lua+set}" = set; then : +if test ${enable_lua+y} +then : enableval=$enable_lua; force_lua=$enableval -else +else $as_nop enable_lua=maybe-all fi @@ -20904,16 +21556,17 @@ enable_lua=no fi if test "$enable_lua" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : # Check whether --with-lua was given. -if test "${with_lua+set}" = set; then : +if test ${with_lua+y} +then : withval=$with_lua; lua_path="$withval" -else +else $as_nop : fi @@ -20930,18 +21583,19 @@ LUA_LIBS="`$PKGCONFIG --libs $pklua`" LUA_CFLAGS="`$PKGCONFIG --cflags $pklua`" LUA_VERSION="`$PKGCONFIG --modversion $pklua`" - { $as_echo "$as_me:${as_lineno-$LINENO}: using Lua $LUA_VERSION configuration from pkg-config" >&5 -$as_echo "$as_me: using Lua $LUA_VERSION configuration from pkg-config" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using Lua $LUA_VERSION configuration from pkg-config" >&5 +printf "%s\n" "$as_me: using Lua $LUA_VERSION configuration from pkg-config" >&6;} break fi done if test -z "$LUA_VERSION"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 -$as_echo_n "checking for pow in -lm... " >&6; } -if ${ac_cv_lib_m_pow+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 +printf %s "checking for pow in -lm... " >&6; } +if test ${ac_cv_lib_m_pow+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20950,38 +21604,38 @@ /* 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 pow (); int -main () +main (void) { return pow (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_m_pow=yes -else +else $as_nop ac_cv_lib_m_pow=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 -$as_echo "$ac_cv_lib_m_pow" >&6; } -if test "x$ac_cv_lib_m_pow" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 +printf "%s\n" "$ac_cv_lib_m_pow" >&6; } +if test "x$ac_cv_lib_m_pow" = xyes +then : lib_m="-lm" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 -$as_echo_n "checking for sqrt in -lm... " >&6; } -if ${ac_cv_lib_m_sqrt+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 +printf %s "checking for sqrt in -lm... " >&6; } +if test ${ac_cv_lib_m_sqrt+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -20990,48 +21644,48 @@ /* 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 sqrt (); int -main () +main (void) { return sqrt (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_m_sqrt=yes -else +else $as_nop ac_cv_lib_m_sqrt=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 -$as_echo "$ac_cv_lib_m_sqrt" >&6; } -if test "x$ac_cv_lib_m_sqrt" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 +printf "%s\n" "$ac_cv_lib_m_sqrt" >&6; } +if test "x$ac_cv_lib_m_sqrt" = xyes +then : lib_m="-lm" fi for x in $test_paths ; do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.4" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua-5.4... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.4" >&5 +printf %s "checking for lua.h in ${x}/include/lua-5.4... " >&6; } if test -f ${x}/include/lua-5.4/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua-5.4 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.4" >&5 -$as_echo_n "checking for luaL_newstate in -llua-5.4... " >&6; } -if ${ac_cv_lib_lua_5_4_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.4" >&5 +printf %s "checking for luaL_newstate in -llua-5.4... " >&6; } +if test ${ac_cv_lib_lua_5_4_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua-5.4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21040,30 +21694,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_5_4_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_5_4_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_4_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_5_4_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_5_4_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_4_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_5_4_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_5_4_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua-5.4 -llua-5.4 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21100,24 +21753,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.4" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua5.4... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.4" >&5 +printf %s "checking for lua.h in ${x}/include/lua5.4... " >&6; } if test -f ${x}/include/lua5.4/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.4" >&5 -$as_echo_n "checking for luaL_newstate in -llua5.4... " >&6; } -if ${ac_cv_lib_lua5_4_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.4" >&5 +printf %s "checking for luaL_newstate in -llua5.4... " >&6; } +if test ${ac_cv_lib_lua5_4_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua5.4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21126,30 +21780,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua5_4_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua5_4_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_4_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua5_4_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua5_4_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_4_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua5_4_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua5_4_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib -llua5.4 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21186,24 +21839,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua54" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua54... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua54" >&5 +printf %s "checking for lua.h in ${x}/include/lua54... " >&6; } if test -f ${x}/include/lua54/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua54 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 -$as_echo_n "checking for luaL_newstate in -llua... " >&6; } -if ${ac_cv_lib_lua_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 +printf %s "checking for luaL_newstate in -llua... " >&6; } +if test ${ac_cv_lib_lua_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21212,30 +21866,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua54 -llua $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21272,25 +21925,26 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.3" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua-5.3... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.3" >&5 +printf %s "checking for lua.h in ${x}/include/lua-5.3... " >&6; } if test -f ${x}/include/lua-5.3/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua-5.3 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.3" >&5 -$as_echo_n "checking for luaL_newstate in -llua-5.3... " >&6; } -if ${ac_cv_lib_lua_5_3_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.3" >&5 +printf %s "checking for luaL_newstate in -llua-5.3... " >&6; } +if test ${ac_cv_lib_lua_5_3_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua-5.3 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21299,30 +21953,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_5_3_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_5_3_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_3_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_5_3_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_5_3_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_3_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_5_3_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_5_3_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua-5.3 -llua-5.3 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21359,24 +22012,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.3" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua5.3... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.3" >&5 +printf %s "checking for lua.h in ${x}/include/lua5.3... " >&6; } if test -f ${x}/include/lua5.3/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.3" >&5 -$as_echo_n "checking for luaL_newstate in -llua5.3... " >&6; } -if ${ac_cv_lib_lua5_3_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.3" >&5 +printf %s "checking for luaL_newstate in -llua5.3... " >&6; } +if test ${ac_cv_lib_lua5_3_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua5.3 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21385,30 +22039,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua5_3_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua5_3_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_3_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua5_3_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua5_3_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_3_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua5_3_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua5_3_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib -llua5.3 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21445,24 +22098,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua53" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua53... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua53" >&5 +printf %s "checking for lua.h in ${x}/include/lua53... " >&6; } if test -f ${x}/include/lua53/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua53 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 -$as_echo_n "checking for luaL_newstate in -llua... " >&6; } -if ${ac_cv_lib_lua_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 +printf %s "checking for luaL_newstate in -llua... " >&6; } +if test ${ac_cv_lib_lua_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21471,30 +22125,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua53 -llua $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21531,25 +22184,26 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include" >&5 -$as_echo_n "checking for lua.h in ${x}/include... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include" >&5 +printf %s "checking for lua.h in ${x}/include... " >&6; } if test -f ${x}/include/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 -$as_echo_n "checking for luaL_newstate in -llua... " >&6; } -if ${ac_cv_lib_lua_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 +printf %s "checking for luaL_newstate in -llua... " >&6; } +if test ${ac_cv_lib_lua_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21558,30 +22212,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib -llua $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21618,25 +22271,26 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.2" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua-5.2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.2" >&5 +printf %s "checking for lua.h in ${x}/include/lua-5.2... " >&6; } if test -f ${x}/include/lua-5.2/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua-5.2 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.2" >&5 -$as_echo_n "checking for luaL_newstate in -llua-5.2... " >&6; } -if ${ac_cv_lib_lua_5_2_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.2" >&5 +printf %s "checking for luaL_newstate in -llua-5.2... " >&6; } +if test ${ac_cv_lib_lua_5_2_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua-5.2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21645,30 +22299,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_5_2_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_5_2_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_2_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_5_2_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_5_2_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_2_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_5_2_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_5_2_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua-5.2 -llua-5.2 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21705,24 +22358,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.2" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua5.2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.2" >&5 +printf %s "checking for lua.h in ${x}/include/lua5.2... " >&6; } if test -f ${x}/include/lua5.2/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.2" >&5 -$as_echo_n "checking for luaL_newstate in -llua5.2... " >&6; } -if ${ac_cv_lib_lua5_2_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.2" >&5 +printf %s "checking for luaL_newstate in -llua5.2... " >&6; } +if test ${ac_cv_lib_lua5_2_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua5.2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21731,30 +22385,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua5_2_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua5_2_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_2_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua5_2_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua5_2_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_2_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua5_2_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua5_2_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib -llua5.2 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21791,24 +22444,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua52" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua52... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua52" >&5 +printf %s "checking for lua.h in ${x}/include/lua52... " >&6; } if test -f ${x}/include/lua52/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua52 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 -$as_echo_n "checking for luaL_newstate in -llua... " >&6; } -if ${ac_cv_lib_lua_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 +printf %s "checking for luaL_newstate in -llua... " >&6; } +if test ${ac_cv_lib_lua_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21817,30 +22471,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua52 -llua $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21877,25 +22530,26 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.1" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua-5.1... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua-5.1" >&5 +printf %s "checking for lua.h in ${x}/include/lua-5.1... " >&6; } if test -f ${x}/include/lua-5.1/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua-5.1 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.1" >&5 -$as_echo_n "checking for luaL_newstate in -llua-5.1... " >&6; } -if ${ac_cv_lib_lua_5_1_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua-5.1" >&5 +printf %s "checking for luaL_newstate in -llua-5.1... " >&6; } +if test ${ac_cv_lib_lua_5_1_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua-5.1 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21904,30 +22558,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_5_1_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_5_1_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_1_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_5_1_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_5_1_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_5_1_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_5_1_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_5_1_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua-5.1 -llua-5.1 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -21964,24 +22617,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.1" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua5.1... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua5.1" >&5 +printf %s "checking for lua.h in ${x}/include/lua5.1... " >&6; } if test -f ${x}/include/lua5.1/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.1" >&5 -$as_echo_n "checking for luaL_newstate in -llua5.1... " >&6; } -if ${ac_cv_lib_lua5_1_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua5.1" >&5 +printf %s "checking for luaL_newstate in -llua5.1... " >&6; } +if test ${ac_cv_lib_lua5_1_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua5.1 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -21990,30 +22644,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua5_1_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua5_1_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_1_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua5_1_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua5_1_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua5_1_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua5_1_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua5_1_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib -llua5.1 $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -22050,24 +22703,25 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua51" >&5 -$as_echo_n "checking for lua.h in ${x}/include/lua51... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lua.h in ${x}/include/lua51" >&5 +printf %s "checking for lua.h in ${x}/include/lua51... " >&6; } if test -f ${x}/include/lua51/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } save_CFLAGS=$CFLAGS save_LDFLAGS=$LDFLAGS CFLAGS="$CFLAGS" LDFLAGS="-L${x}/lib/lua51 $LDFLAGS $lib_m" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 -$as_echo_n "checking for luaL_newstate in -llua... " >&6; } -if ${ac_cv_lib_lua_luaL_newstate+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for luaL_newstate in -llua" >&5 +printf %s "checking for luaL_newstate in -llua... " >&6; } +if test ${ac_cv_lib_lua_luaL_newstate+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-llua $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -22076,30 +22730,29 @@ /* 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 luaL_newstate (); int -main () +main (void) { return luaL_newstate (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_lua_luaL_newstate=yes -else +else $as_nop ac_cv_lib_lua_luaL_newstate=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 -$as_echo "$ac_cv_lib_lua_luaL_newstate" >&6; } -if test "x$ac_cv_lib_lua_luaL_newstate" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lua_luaL_newstate" >&5 +printf "%s\n" "$ac_cv_lib_lua_luaL_newstate" >&6; } +if test "x$ac_cv_lib_lua_luaL_newstate" = xyes +then : LUA_LIBS="-L${x}/lib/lua51 -llua $lib_m" if test "x$ap_platform_runtime_link_flag" != "x"; then @@ -22136,8 +22789,8 @@ break fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi done @@ -22147,20 +22800,21 @@ if test -z "${LUA_LIBS}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Lua 5.4 5.3 5.2 or 5.1 library not found." >&5 -$as_echo "$as_me: WARNING: *** Lua 5.4 5.3 5.2 or 5.1 library not found." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** Lua 5.4 5.3 5.2 or 5.1 library not found." >&5 +printf "%s\n" "$as_me: WARNING: *** Lua 5.4 5.3 5.2 or 5.1 library not found." >&2;} enable_lua="no" if test -z "${lua_path}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Lua 5.4 5.3 5.2 or 5.1 library is required" >&5 -$as_echo "$as_me: WARNING: Lua 5.4 5.3 5.2 or 5.1 library is required" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Lua 5.4 5.3 5.2 or 5.1 library is required" >&5 +printf "%s\n" "$as_me: WARNING: Lua 5.4 5.3 5.2 or 5.1 library is required" >&2;} else as_fn_error $? "Lua 5.4 5.3 5.2 or 5.1 library is required" "$LINENO" 5 fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: using '${LUA_LIBS}' for Lua Library" >&5 -$as_echo "$as_me: using '${LUA_LIBS}' for Lua Library" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using '${LUA_LIBS}' for Lua Library" >&5 +printf "%s\n" "$as_me: using '${LUA_LIBS}' for Lua Library" >&6;} # Check whether --enable-luajit was given. -if test "${enable_luajit+set}" = set; then : +if test ${enable_luajit+y} +then : enableval=$enable_luajit; if test "$enableval" = "yes"; then @@ -22237,8 +22891,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lua" >&5 -$as_echo_n "checking whether to enable mod_lua... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lua" >&5 +printf %s "checking whether to enable mod_lua... " >&6; } if test "$enable_lua" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -22247,8 +22901,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lua$_apmod_extra_msg" >&5 -$as_echo "$enable_lua$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lua$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_lua$_apmod_extra_msg" >&6; } if test "$enable_lua" != "no"; then case "$enable_lua" in static*) @@ -22383,12 +23037,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_env" >&5 -$as_echo_n "checking whether to enable mod_env... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_env" >&5 +printf %s "checking whether to enable mod_env... " >&6; } # Check whether --enable-env was given. -if test "${enable_env+set}" = set; then : +if test ${enable_env+y} +then : enableval=$enable_env; force_env=$enableval -else +else $as_nop enable_env=yes fi @@ -22444,8 +23099,8 @@ if test "$enable_env" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_env$_apmod_extra_msg" >&5 -$as_echo "$enable_env$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_env$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_env$_apmod_extra_msg" >&6; } if test "$enable_env" != "no"; then case "$enable_env" in static*) @@ -22524,12 +23179,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_mime_magic" >&5 -$as_echo_n "checking whether to enable mod_mime_magic... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_mime_magic" >&5 +printf %s "checking whether to enable mod_mime_magic... " >&6; } # Check whether --enable-mime-magic was given. -if test "${enable_mime_magic+set}" = set; then : +if test ${enable_mime_magic+y} +then : enableval=$enable_mime_magic; force_mime_magic=$enableval -else +else $as_nop enable_mime_magic=maybe-all fi @@ -22585,8 +23241,8 @@ if test "$enable_mime_magic" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_mime_magic$_apmod_extra_msg" >&5 -$as_echo "$enable_mime_magic$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_mime_magic$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_mime_magic$_apmod_extra_msg" >&6; } if test "$enable_mime_magic" != "no"; then case "$enable_mime_magic" in static*) @@ -22665,12 +23321,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cern_meta" >&5 -$as_echo_n "checking whether to enable mod_cern_meta... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cern_meta" >&5 +printf %s "checking whether to enable mod_cern_meta... " >&6; } # Check whether --enable-cern-meta was given. -if test "${enable_cern_meta+set}" = set; then : +if test ${enable_cern_meta+y} +then : enableval=$enable_cern_meta; force_cern_meta=$enableval -else +else $as_nop enable_cern_meta=no fi @@ -22726,8 +23383,8 @@ if test "$enable_cern_meta" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cern_meta$_apmod_extra_msg" >&5 -$as_echo "$enable_cern_meta$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cern_meta$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cern_meta$_apmod_extra_msg" >&6; } if test "$enable_cern_meta" != "no"; then case "$enable_cern_meta" in static*) @@ -22806,12 +23463,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_expires" >&5 -$as_echo_n "checking whether to enable mod_expires... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_expires" >&5 +printf %s "checking whether to enable mod_expires... " >&6; } # Check whether --enable-expires was given. -if test "${enable_expires+set}" = set; then : +if test ${enable_expires+y} +then : enableval=$enable_expires; force_expires=$enableval -else +else $as_nop enable_expires=most fi @@ -22867,8 +23525,8 @@ if test "$enable_expires" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_expires$_apmod_extra_msg" >&5 -$as_echo "$enable_expires$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_expires$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_expires$_apmod_extra_msg" >&6; } if test "$enable_expires" != "no"; then case "$enable_expires" in static*) @@ -22947,12 +23605,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_headers" >&5 -$as_echo_n "checking whether to enable mod_headers... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_headers" >&5 +printf %s "checking whether to enable mod_headers... " >&6; } # Check whether --enable-headers was given. -if test "${enable_headers+set}" = set; then : +if test ${enable_headers+y} +then : enableval=$enable_headers; force_headers=$enableval -else +else $as_nop enable_headers=yes fi @@ -23008,8 +23667,8 @@ if test "$enable_headers" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_headers$_apmod_extra_msg" >&5 -$as_echo "$enable_headers$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_headers$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_headers$_apmod_extra_msg" >&6; } if test "$enable_headers" != "no"; then case "$enable_headers" in static*) @@ -23088,12 +23747,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ident" >&5 -$as_echo_n "checking whether to enable mod_ident... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ident" >&5 +printf %s "checking whether to enable mod_ident... " >&6; } # Check whether --enable-ident was given. -if test "${enable_ident+set}" = set; then : +if test ${enable_ident+y} +then : enableval=$enable_ident; force_ident=$enableval -else +else $as_nop enable_ident=no fi @@ -23149,8 +23809,8 @@ if test "$enable_ident" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ident$_apmod_extra_msg" >&5 -$as_echo "$enable_ident$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_ident$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_ident$_apmod_extra_msg" >&6; } if test "$enable_ident" != "no"; then case "$enable_ident" in static*) @@ -23230,12 +23890,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_usertrack" >&5 -$as_echo_n "checking whether to enable mod_usertrack... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_usertrack" >&5 +printf %s "checking whether to enable mod_usertrack... " >&6; } # Check whether --enable-usertrack was given. -if test "${enable_usertrack+set}" = set; then : +if test ${enable_usertrack+y} +then : enableval=$enable_usertrack; force_usertrack=$enableval -else +else $as_nop enable_usertrack=maybe-all fi @@ -23289,37 +23950,28 @@ enable_usertrack=no fi if test "$enable_usertrack" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - for ac_header in sys/times.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_times_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_TIMES_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_times_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIMES_H 1" >>confdefs.h fi -done - - for ac_func in times -do : ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_TIMES 1 -_ACEOF +if test "x$ac_cv_func_times" = xyes +then : + printf "%s\n" "#define HAVE_TIMES 1" >>confdefs.h fi -done : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_usertrack" >&5 -$as_echo_n "checking whether to enable mod_usertrack... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_usertrack" >&5 +printf %s "checking whether to enable mod_usertrack... " >&6; } if test "$enable_usertrack" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -23328,8 +23980,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_usertrack$_apmod_extra_msg" >&5 -$as_echo "$enable_usertrack$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_usertrack$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_usertrack$_apmod_extra_msg" >&6; } if test "$enable_usertrack" != "no"; then case "$enable_usertrack" in static*) @@ -23409,12 +24061,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_unique_id" >&5 -$as_echo_n "checking whether to enable mod_unique_id... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_unique_id" >&5 +printf %s "checking whether to enable mod_unique_id... " >&6; } # Check whether --enable-unique-id was given. -if test "${enable_unique_id+set}" = set; then : +if test ${enable_unique_id+y} +then : enableval=$enable_unique_id; force_unique_id=$enableval -else +else $as_nop enable_unique_id=most fi @@ -23470,8 +24123,8 @@ if test "$enable_unique_id" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_unique_id$_apmod_extra_msg" >&5 -$as_echo "$enable_unique_id$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_unique_id$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_unique_id$_apmod_extra_msg" >&6; } if test "$enable_unique_id" != "no"; then case "$enable_unique_id" in static*) @@ -23550,12 +24203,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_setenvif" >&5 -$as_echo_n "checking whether to enable mod_setenvif... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_setenvif" >&5 +printf %s "checking whether to enable mod_setenvif... " >&6; } # Check whether --enable-setenvif was given. -if test "${enable_setenvif+set}" = set; then : +if test ${enable_setenvif+y} +then : enableval=$enable_setenvif; force_setenvif=$enableval -else +else $as_nop enable_setenvif=yes fi @@ -23611,8 +24265,8 @@ if test "$enable_setenvif" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_setenvif$_apmod_extra_msg" >&5 -$as_echo "$enable_setenvif$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_setenvif$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_setenvif$_apmod_extra_msg" >&6; } if test "$enable_setenvif" != "no"; then case "$enable_setenvif" in static*) @@ -23691,12 +24345,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_version" >&5 -$as_echo_n "checking whether to enable mod_version... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_version" >&5 +printf %s "checking whether to enable mod_version... " >&6; } # Check whether --enable-version was given. -if test "${enable_version+set}" = set; then : +if test ${enable_version+y} +then : enableval=$enable_version; force_version=$enableval -else +else $as_nop enable_version=yes fi @@ -23752,8 +24407,8 @@ if test "$enable_version" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_version$_apmod_extra_msg" >&5 -$as_echo "$enable_version$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_version$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_version$_apmod_extra_msg" >&6; } if test "$enable_version" != "no"; then case "$enable_version" in static*) @@ -23832,12 +24487,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_remoteip" >&5 -$as_echo_n "checking whether to enable mod_remoteip... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_remoteip" >&5 +printf %s "checking whether to enable mod_remoteip... " >&6; } # Check whether --enable-remoteip was given. -if test "${enable_remoteip+set}" = set; then : +if test ${enable_remoteip+y} +then : enableval=$enable_remoteip; force_remoteip=$enableval -else +else $as_nop enable_remoteip=most fi @@ -23893,8 +24549,8 @@ if test "$enable_remoteip" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_remoteip$_apmod_extra_msg" >&5 -$as_echo "$enable_remoteip$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_remoteip$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_remoteip$_apmod_extra_msg" >&6; } if test "$enable_remoteip" != "no"; then case "$enable_remoteip" in static*) @@ -24007,12 +24663,13 @@ proxy_objs="mod_proxy.lo proxy_util.lo" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy" >&5 -$as_echo_n "checking whether to enable mod_proxy... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy" >&5 +printf %s "checking whether to enable mod_proxy... " >&6; } # Check whether --enable-proxy was given. -if test "${enable_proxy+set}" = set; then : +if test ${enable_proxy+y} +then : enableval=$enable_proxy; force_proxy=$enableval -else +else $as_nop enable_proxy=most fi @@ -24068,8 +24725,8 @@ if test "$enable_proxy" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy$_apmod_extra_msg" >&6; } if test "$enable_proxy" != "no"; then case "$enable_proxy" in static*) @@ -24186,12 +24843,13 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_connect" >&5 -$as_echo_n "checking whether to enable mod_proxy_connect... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_connect" >&5 +printf %s "checking whether to enable mod_proxy_connect... " >&6; } # Check whether --enable-proxy-connect was given. -if test "${enable_proxy_connect+set}" = set; then : +if test ${enable_proxy_connect+y} +then : enableval=$enable_proxy_connect; force_proxy_connect=$enableval -else +else $as_nop enable_proxy_connect=most fi @@ -24245,21 +24903,21 @@ enable_proxy_connect=no fi if test "$enable_proxy_connect" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_connect=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_connect\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_connect\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_connect\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_connect\"" >&2;} elif test "$enable_proxy_connect" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_connect=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_connect shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_connect shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_connect shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_connect shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_connect" >&5 -$as_echo_n "checking whether to enable mod_proxy_connect... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_connect" >&5 +printf %s "checking whether to enable mod_proxy_connect... " >&6; } if test "$enable_proxy_connect" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -24268,8 +24926,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_connect$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_connect$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_connect$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_connect$_apmod_extra_msg" >&6; } if test "$enable_proxy_connect" != "no"; then case "$enable_proxy_connect" in static*) @@ -24348,12 +25006,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ftp" >&5 -$as_echo_n "checking whether to enable mod_proxy_ftp... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ftp" >&5 +printf %s "checking whether to enable mod_proxy_ftp... " >&6; } # Check whether --enable-proxy-ftp was given. -if test "${enable_proxy_ftp+set}" = set; then : +if test ${enable_proxy_ftp+y} +then : enableval=$enable_proxy_ftp; force_proxy_ftp=$enableval -else +else $as_nop enable_proxy_ftp=most fi @@ -24407,21 +25066,21 @@ enable_proxy_ftp=no fi if test "$enable_proxy_ftp" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_ftp=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_ftp\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_ftp\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_ftp\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_ftp\"" >&2;} elif test "$enable_proxy_ftp" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_ftp=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_ftp shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_ftp shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_ftp shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_ftp shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ftp" >&5 -$as_echo_n "checking whether to enable mod_proxy_ftp... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ftp" >&5 +printf %s "checking whether to enable mod_proxy_ftp... " >&6; } if test "$enable_proxy_ftp" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -24430,8 +25089,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_ftp$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_ftp$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_ftp$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_ftp$_apmod_extra_msg" >&6; } if test "$enable_proxy_ftp" != "no"; then case "$enable_proxy_ftp" in static*) @@ -24510,12 +25169,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http" >&5 -$as_echo_n "checking whether to enable mod_proxy_http... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http" >&5 +printf %s "checking whether to enable mod_proxy_http... " >&6; } # Check whether --enable-proxy-http was given. -if test "${enable_proxy_http+set}" = set; then : +if test ${enable_proxy_http+y} +then : enableval=$enable_proxy_http; force_proxy_http=$enableval -else +else $as_nop enable_proxy_http=most fi @@ -24569,21 +25229,21 @@ enable_proxy_http=no fi if test "$enable_proxy_http" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_http=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_http\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_http\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_http\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_http\"" >&2;} elif test "$enable_proxy_http" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_http=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_http shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_http shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_http shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_http shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http" >&5 -$as_echo_n "checking whether to enable mod_proxy_http... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http" >&5 +printf %s "checking whether to enable mod_proxy_http... " >&6; } if test "$enable_proxy_http" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -24592,8 +25252,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_http$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_http$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_http$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_http$_apmod_extra_msg" >&6; } if test "$enable_proxy_http" != "no"; then case "$enable_proxy_http" in static*) @@ -24672,12 +25332,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fcgi" >&5 -$as_echo_n "checking whether to enable mod_proxy_fcgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fcgi" >&5 +printf %s "checking whether to enable mod_proxy_fcgi... " >&6; } # Check whether --enable-proxy-fcgi was given. -if test "${enable_proxy_fcgi+set}" = set; then : +if test ${enable_proxy_fcgi+y} +then : enableval=$enable_proxy_fcgi; force_proxy_fcgi=$enableval -else +else $as_nop enable_proxy_fcgi=most fi @@ -24731,21 +25392,21 @@ enable_proxy_fcgi=no fi if test "$enable_proxy_fcgi" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_fcgi=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_fcgi\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_fcgi\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_fcgi\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_fcgi\"" >&2;} elif test "$enable_proxy_fcgi" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_fcgi=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_fcgi shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_fcgi shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_fcgi shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_fcgi shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fcgi" >&5 -$as_echo_n "checking whether to enable mod_proxy_fcgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fcgi" >&5 +printf %s "checking whether to enable mod_proxy_fcgi... " >&6; } if test "$enable_proxy_fcgi" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -24754,8 +25415,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_fcgi$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_fcgi$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_fcgi$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_fcgi$_apmod_extra_msg" >&6; } if test "$enable_proxy_fcgi" != "no"; then case "$enable_proxy_fcgi" in static*) @@ -24834,12 +25495,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_scgi" >&5 -$as_echo_n "checking whether to enable mod_proxy_scgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_scgi" >&5 +printf %s "checking whether to enable mod_proxy_scgi... " >&6; } # Check whether --enable-proxy-scgi was given. -if test "${enable_proxy_scgi+set}" = set; then : +if test ${enable_proxy_scgi+y} +then : enableval=$enable_proxy_scgi; force_proxy_scgi=$enableval -else +else $as_nop enable_proxy_scgi=most fi @@ -24893,21 +25555,21 @@ enable_proxy_scgi=no fi if test "$enable_proxy_scgi" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_scgi=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_scgi\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_scgi\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_scgi\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_scgi\"" >&2;} elif test "$enable_proxy_scgi" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_scgi=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_scgi shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_scgi shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_scgi shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_scgi shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_scgi" >&5 -$as_echo_n "checking whether to enable mod_proxy_scgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_scgi" >&5 +printf %s "checking whether to enable mod_proxy_scgi... " >&6; } if test "$enable_proxy_scgi" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -24916,8 +25578,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_scgi$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_scgi$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_scgi$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_scgi$_apmod_extra_msg" >&6; } if test "$enable_proxy_scgi" != "no"; then case "$enable_proxy_scgi" in static*) @@ -24996,12 +25658,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_uwsgi" >&5 -$as_echo_n "checking whether to enable mod_proxy_uwsgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_uwsgi" >&5 +printf %s "checking whether to enable mod_proxy_uwsgi... " >&6; } # Check whether --enable-proxy-uwsgi was given. -if test "${enable_proxy_uwsgi+set}" = set; then : +if test ${enable_proxy_uwsgi+y} +then : enableval=$enable_proxy_uwsgi; force_proxy_uwsgi=$enableval -else +else $as_nop enable_proxy_uwsgi=most fi @@ -25055,21 +25718,21 @@ enable_proxy_uwsgi=no fi if test "$enable_proxy_uwsgi" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_uwsgi=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_uwsgi\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_uwsgi\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_uwsgi\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_uwsgi\"" >&2;} elif test "$enable_proxy_uwsgi" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_uwsgi=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_uwsgi shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_uwsgi shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_uwsgi shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_uwsgi shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_uwsgi" >&5 -$as_echo_n "checking whether to enable mod_proxy_uwsgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_uwsgi" >&5 +printf %s "checking whether to enable mod_proxy_uwsgi... " >&6; } if test "$enable_proxy_uwsgi" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -25078,8 +25741,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_uwsgi$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_uwsgi$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_uwsgi$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_uwsgi$_apmod_extra_msg" >&6; } if test "$enable_proxy_uwsgi" != "no"; then case "$enable_proxy_uwsgi" in static*) @@ -25157,13 +25820,94 @@ fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +(void) strchr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +extern void ac_decl (int, char *); + +int +main (void) +{ +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x +then : + ac_cv_c_undeclared_builtin_options='none needed' +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg +fi + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See \`config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac + - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fdpass" >&5 -$as_echo_n "checking whether to enable mod_proxy_fdpass... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fdpass" >&5 +printf %s "checking whether to enable mod_proxy_fdpass... " >&6; } # Check whether --enable-proxy-fdpass was given. -if test "${enable_proxy_fdpass+set}" = set; then : +if test ${enable_proxy_fdpass+y} +then : enableval=$enable_proxy_fdpass; force_proxy_fdpass=$enableval -else +else $as_nop enable_proxy_fdpass=most fi @@ -25217,36 +25961,36 @@ enable_proxy_fdpass=no fi if test "$enable_proxy_fdpass" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_fdpass=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_fdpass\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_fdpass\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_fdpass\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_fdpass\"" >&2;} elif test "$enable_proxy_fdpass" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_fdpass=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_fdpass shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_fdpass shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_fdpass shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_fdpass shared because mod_proxy is built shared\"" >&2;} else - ac_fn_c_check_decl "$LINENO" "CMSG_DATA" "ac_cv_have_decl_CMSG_DATA" " + ac_fn_check_decl "$LINENO" "CMSG_DATA" "ac_cv_have_decl_CMSG_DATA" " #include #include -" -if test "x$ac_cv_have_decl_CMSG_DATA" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_CMSG_DATA" = xyes +then : fi - if test $ac_cv_have_decl_CMSG_DATA = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support CMSG_DATA." >&5 -$as_echo "$as_me: WARNING: Your system does not support CMSG_DATA." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support CMSG_DATA." >&5 +printf "%s\n" "$as_me: WARNING: Your system does not support CMSG_DATA." >&2;} enable_proxy_fdpass=no fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fdpass" >&5 -$as_echo_n "checking whether to enable mod_proxy_fdpass... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_fdpass" >&5 +printf %s "checking whether to enable mod_proxy_fdpass... " >&6; } if test "$enable_proxy_fdpass" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -25255,8 +25999,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_fdpass$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_fdpass$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_fdpass$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_fdpass$_apmod_extra_msg" >&6; } if test "$enable_proxy_fdpass" != "no"; then case "$enable_proxy_fdpass" in static*) @@ -25335,12 +26079,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_wstunnel" >&5 -$as_echo_n "checking whether to enable mod_proxy_wstunnel... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_wstunnel" >&5 +printf %s "checking whether to enable mod_proxy_wstunnel... " >&6; } # Check whether --enable-proxy-wstunnel was given. -if test "${enable_proxy_wstunnel+set}" = set; then : +if test ${enable_proxy_wstunnel+y} +then : enableval=$enable_proxy_wstunnel; force_proxy_wstunnel=$enableval -else +else $as_nop enable_proxy_wstunnel=most fi @@ -25394,21 +26139,21 @@ enable_proxy_wstunnel=no fi if test "$enable_proxy_wstunnel" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_wstunnel=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_wstunnel\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_wstunnel\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_wstunnel\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_wstunnel\"" >&2;} elif test "$enable_proxy_wstunnel" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_wstunnel=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_wstunnel shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_wstunnel shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_wstunnel shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_wstunnel shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_wstunnel" >&5 -$as_echo_n "checking whether to enable mod_proxy_wstunnel... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_wstunnel" >&5 +printf %s "checking whether to enable mod_proxy_wstunnel... " >&6; } if test "$enable_proxy_wstunnel" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -25417,8 +26162,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_wstunnel$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_wstunnel$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_wstunnel$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_wstunnel$_apmod_extra_msg" >&6; } if test "$enable_proxy_wstunnel" != "no"; then case "$enable_proxy_wstunnel" in static*) @@ -25497,12 +26242,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ajp" >&5 -$as_echo_n "checking whether to enable mod_proxy_ajp... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ajp" >&5 +printf %s "checking whether to enable mod_proxy_ajp... " >&6; } # Check whether --enable-proxy-ajp was given. -if test "${enable_proxy_ajp+set}" = set; then : +if test ${enable_proxy_ajp+y} +then : enableval=$enable_proxy_ajp; force_proxy_ajp=$enableval -else +else $as_nop enable_proxy_ajp=most fi @@ -25556,21 +26302,21 @@ enable_proxy_ajp=no fi if test "$enable_proxy_ajp" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_ajp=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_ajp\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_ajp\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_ajp\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_ajp\"" >&2;} elif test "$enable_proxy_ajp" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_ajp=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_ajp shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_ajp shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_ajp shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_ajp shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ajp" >&5 -$as_echo_n "checking whether to enable mod_proxy_ajp... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_ajp" >&5 +printf %s "checking whether to enable mod_proxy_ajp... " >&6; } if test "$enable_proxy_ajp" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -25579,8 +26325,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_ajp$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_ajp$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_ajp$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_ajp$_apmod_extra_msg" >&6; } if test "$enable_proxy_ajp" != "no"; then case "$enable_proxy_ajp" in static*) @@ -25659,12 +26405,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_balancer" >&5 -$as_echo_n "checking whether to enable mod_proxy_balancer... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_balancer" >&5 +printf %s "checking whether to enable mod_proxy_balancer... " >&6; } # Check whether --enable-proxy-balancer was given. -if test "${enable_proxy_balancer+set}" = set; then : +if test ${enable_proxy_balancer+y} +then : enableval=$enable_proxy_balancer; force_proxy_balancer=$enableval -else +else $as_nop enable_proxy_balancer=most fi @@ -25718,21 +26465,21 @@ enable_proxy_balancer=no fi if test "$enable_proxy_balancer" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_balancer=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_balancer\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_balancer\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_balancer\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_balancer\"" >&2;} elif test "$enable_proxy_balancer" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_balancer=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_balancer shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_balancer shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_balancer shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_balancer shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_balancer" >&5 -$as_echo_n "checking whether to enable mod_proxy_balancer... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_balancer" >&5 +printf %s "checking whether to enable mod_proxy_balancer... " >&6; } if test "$enable_proxy_balancer" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -25741,8 +26488,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_balancer$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_balancer$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_balancer$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_balancer$_apmod_extra_msg" >&6; } if test "$enable_proxy_balancer" != "no"; then case "$enable_proxy_balancer" in static*) @@ -25822,12 +26569,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_express" >&5 -$as_echo_n "checking whether to enable mod_proxy_express... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_express" >&5 +printf %s "checking whether to enable mod_proxy_express... " >&6; } # Check whether --enable-proxy-express was given. -if test "${enable_proxy_express+set}" = set; then : +if test ${enable_proxy_express+y} +then : enableval=$enable_proxy_express; force_proxy_express=$enableval -else +else $as_nop enable_proxy_express=most fi @@ -25881,21 +26629,21 @@ enable_proxy_express=no fi if test "$enable_proxy_express" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_express=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_express\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_express\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_express\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_express\"" >&2;} elif test "$enable_proxy_express" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_express=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_express shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_express shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_express shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_express shared because mod_proxy is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_express" >&5 -$as_echo_n "checking whether to enable mod_proxy_express... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_express" >&5 +printf %s "checking whether to enable mod_proxy_express... " >&6; } if test "$enable_proxy_express" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -25904,8 +26652,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_express$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_express$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_express$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_express$_apmod_extra_msg" >&6; } if test "$enable_proxy_express" != "no"; then case "$enable_proxy_express" in static*) @@ -25984,12 +26732,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_hcheck" >&5 -$as_echo_n "checking whether to enable mod_proxy_hcheck... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_hcheck" >&5 +printf %s "checking whether to enable mod_proxy_hcheck... " >&6; } # Check whether --enable-proxy-hcheck was given. -if test "${enable_proxy_hcheck+set}" = set; then : +if test ${enable_proxy_hcheck+y} +then : enableval=$enable_proxy_hcheck; force_proxy_hcheck=$enableval -else +else $as_nop enable_proxy_hcheck=most fi @@ -26043,29 +26792,29 @@ enable_proxy_hcheck=no fi if test "$enable_proxy_hcheck" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_hcheck=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_hcheck\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_hcheck\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_hcheck\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_hcheck\"" >&2;} elif test "$enable_proxy_hcheck" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_hcheck=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_hcheck shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_hcheck shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_hcheck shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_hcheck shared because mod_proxy is built shared\"" >&2;} elif test "$enable_watchdog" = "no" ; then enable_proxy_hcheck=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_watchdog is disabled but required for mod_proxy_hcheck\"" >&5 -$as_echo "$as_me: WARNING: \"mod_watchdog is disabled but required for mod_proxy_hcheck\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_watchdog is disabled but required for mod_proxy_hcheck\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_watchdog is disabled but required for mod_proxy_hcheck\"" >&2;} elif test "$enable_proxy_hcheck" = "static" && test "$enable_watchdog" != "static" ; then enable_proxy_hcheck=$enable_watchdog - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_hcheck shared because mod_watchdog is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_hcheck shared because mod_watchdog is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_hcheck shared because mod_watchdog is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_hcheck shared because mod_watchdog is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_hcheck" >&5 -$as_echo_n "checking whether to enable mod_proxy_hcheck... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_hcheck" >&5 +printf %s "checking whether to enable mod_proxy_hcheck... " >&6; } if test "$enable_proxy_hcheck" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -26074,8 +26823,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_hcheck$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_hcheck$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_hcheck$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_hcheck$_apmod_extra_msg" >&6; } if test "$enable_proxy_hcheck" != "no"; then case "$enable_proxy_hcheck" in static*) @@ -26235,12 +26984,13 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session" >&5 -$as_echo_n "checking whether to enable mod_session... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session" >&5 +printf %s "checking whether to enable mod_session... " >&6; } # Check whether --enable-session was given. -if test "${enable_session+set}" = set; then : +if test ${enable_session+y} +then : enableval=$enable_session; force_session=$enableval -else +else $as_nop enable_session=most fi @@ -26296,8 +27046,8 @@ if test "$enable_session" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_session$_apmod_extra_msg" >&5 -$as_echo "$enable_session$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_session$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_session$_apmod_extra_msg" >&6; } if test "$enable_session" != "no"; then case "$enable_session" in static*) @@ -26376,12 +27126,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_cookie" >&5 -$as_echo_n "checking whether to enable mod_session_cookie... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_cookie" >&5 +printf %s "checking whether to enable mod_session_cookie... " >&6; } # Check whether --enable-session-cookie was given. -if test "${enable_session_cookie+set}" = set; then : +if test ${enable_session_cookie+y} +then : enableval=$enable_session_cookie; force_session_cookie=$enableval -else +else $as_nop enable_session_cookie=$session_mods_enable fi @@ -26435,21 +27186,21 @@ enable_session_cookie=no fi if test "$enable_session_cookie" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_session" = "no" ; then enable_session_cookie=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_session is disabled but required for mod_session_cookie\"" >&5 -$as_echo "$as_me: WARNING: \"mod_session is disabled but required for mod_session_cookie\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_session is disabled but required for mod_session_cookie\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_session is disabled but required for mod_session_cookie\"" >&2;} elif test "$enable_session_cookie" = "static" && test "$enable_session" != "static" ; then enable_session_cookie=$enable_session - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_session_cookie shared because mod_session is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_session_cookie shared because mod_session is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_session_cookie shared because mod_session is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_session_cookie shared because mod_session is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_cookie" >&5 -$as_echo_n "checking whether to enable mod_session_cookie... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_cookie" >&5 +printf %s "checking whether to enable mod_session_cookie... " >&6; } if test "$enable_session_cookie" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -26458,8 +27209,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_session_cookie$_apmod_extra_msg" >&5 -$as_echo "$enable_session_cookie$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_session_cookie$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_session_cookie$_apmod_extra_msg" >&6; } if test "$enable_session_cookie" != "no"; then case "$enable_session_cookie" in static*) @@ -26550,7 +27301,7 @@ /* end confdefs.h. */ #include int -main () +main (void) { #if APU_HAVE_CRYPTO == 0 @@ -26561,16 +27312,17 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ap_HAVE_APR_CRYPTO="yes" -else +else $as_nop ap_HAVE_APR_CRYPTO="no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CPPFLAGS="$saved_CPPFLAGS" if test $ap_HAVE_APR_CRYPTO = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your APR does not include SSL/EVP support. To enable it: configure --with-crypto" >&5 -$as_echo "$as_me: WARNING: Your APR does not include SSL/EVP support. To enable it: configure --with-crypto" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Your APR does not include SSL/EVP support. To enable it: configure --with-crypto" >&5 +printf "%s\n" "$as_me: WARNING: Your APR does not include SSL/EVP support. To enable it: configure --with-crypto" >&2;} if test "$enable_session_crypto" != "" -a "$enable_session_crypto" != "no"; then as_fn_error $? "mod_session_crypto cannot be enabled" "$LINENO" 5 fi @@ -26578,12 +27330,13 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_crypto" >&5 -$as_echo_n "checking whether to enable mod_session_crypto... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_crypto" >&5 +printf %s "checking whether to enable mod_session_crypto... " >&6; } # Check whether --enable-session-crypto was given. -if test "${enable_session_crypto+set}" = set; then : +if test ${enable_session_crypto+y} +then : enableval=$enable_session_crypto; force_session_crypto=$enableval -else +else $as_nop enable_session_crypto=$session_mods_enable_crypto fi @@ -26637,16 +27390,16 @@ enable_session_crypto=no fi if test "$enable_session_crypto" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_session" = "no" ; then enable_session_crypto=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_session is disabled but required for mod_session_crypto\"" >&5 -$as_echo "$as_me: WARNING: \"mod_session is disabled but required for mod_session_crypto\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_session is disabled but required for mod_session_crypto\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_session is disabled but required for mod_session_crypto\"" >&2;} elif test "$enable_session_crypto" = "static" && test "$enable_session" != "static" ; then enable_session_crypto=$enable_session - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_session_crypto shared because mod_session is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_session_crypto shared because mod_session is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_session_crypto shared because mod_session is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_session_crypto shared because mod_session is built shared\"" >&2;} else if test "$session_mods_enable_crypto" = "no" ; then @@ -26654,8 +27407,8 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_crypto" >&5 -$as_echo_n "checking whether to enable mod_session_crypto... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_crypto" >&5 +printf %s "checking whether to enable mod_session_crypto... " >&6; } if test "$enable_session_crypto" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -26664,8 +27417,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_session_crypto$_apmod_extra_msg" >&5 -$as_echo "$enable_session_crypto$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_session_crypto$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_session_crypto$_apmod_extra_msg" >&6; } if test "$enable_session_crypto" != "no"; then case "$enable_session_crypto" in static*) @@ -26745,12 +27498,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_dbd" >&5 -$as_echo_n "checking whether to enable mod_session_dbd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_dbd" >&5 +printf %s "checking whether to enable mod_session_dbd... " >&6; } # Check whether --enable-session-dbd was given. -if test "${enable_session_dbd+set}" = set; then : +if test ${enable_session_dbd+y} +then : enableval=$enable_session_dbd; force_session_dbd=$enableval -else +else $as_nop enable_session_dbd=$session_mods_enable fi @@ -26804,21 +27558,21 @@ enable_session_dbd=no fi if test "$enable_session_dbd" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_session" = "no" ; then enable_session_dbd=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_session is disabled but required for mod_session_dbd\"" >&5 -$as_echo "$as_me: WARNING: \"mod_session is disabled but required for mod_session_dbd\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_session is disabled but required for mod_session_dbd\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_session is disabled but required for mod_session_dbd\"" >&2;} elif test "$enable_session_dbd" = "static" && test "$enable_session" != "static" ; then enable_session_dbd=$enable_session - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_session_dbd shared because mod_session is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_session_dbd shared because mod_session is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_session_dbd shared because mod_session is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_session_dbd shared because mod_session is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_dbd" >&5 -$as_echo_n "checking whether to enable mod_session_dbd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_session_dbd" >&5 +printf %s "checking whether to enable mod_session_dbd... " >&6; } if test "$enable_session_dbd" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -26827,8 +27581,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_session_dbd$_apmod_extra_msg" >&5 -$as_echo "$enable_session_dbd$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_session_dbd$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_session_dbd$_apmod_extra_msg" >&6; } if test "$enable_session_dbd" != "no"; then case "$enable_session_dbd" in static*) @@ -26964,12 +27718,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_slotmem_shm" >&5 -$as_echo_n "checking whether to enable mod_slotmem_shm... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_slotmem_shm" >&5 +printf %s "checking whether to enable mod_slotmem_shm... " >&6; } # Check whether --enable-slotmem-shm was given. -if test "${enable_slotmem_shm+set}" = set; then : +if test ${enable_slotmem_shm+y} +then : enableval=$enable_slotmem_shm; force_slotmem_shm=$enableval -else +else $as_nop enable_slotmem_shm=most fi @@ -27025,8 +27780,8 @@ if test "$enable_slotmem_shm" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_slotmem_shm$_apmod_extra_msg" >&5 -$as_echo "$enable_slotmem_shm$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_slotmem_shm$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_slotmem_shm$_apmod_extra_msg" >&6; } if test "$enable_slotmem_shm" != "no"; then case "$enable_slotmem_shm" in static*) @@ -27105,12 +27860,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_slotmem_plain" >&5 -$as_echo_n "checking whether to enable mod_slotmem_plain... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_slotmem_plain" >&5 +printf %s "checking whether to enable mod_slotmem_plain... " >&6; } # Check whether --enable-slotmem-plain was given. -if test "${enable_slotmem_plain+set}" = set; then : +if test ${enable_slotmem_plain+y} +then : enableval=$enable_slotmem_plain; force_slotmem_plain=$enableval -else +else $as_nop enable_slotmem_plain=maybe-all fi @@ -27166,8 +27922,8 @@ if test "$enable_slotmem_plain" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_slotmem_plain$_apmod_extra_msg" >&5 -$as_echo "$enable_slotmem_plain$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_slotmem_plain$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_slotmem_plain$_apmod_extra_msg" >&6; } if test "$enable_slotmem_plain" != "no"; then case "$enable_slotmem_plain" in static*) @@ -27280,12 +28036,13 @@ ssl_objs="mod_ssl.lo ssl_engine_config.lo ssl_engine_init.lo ssl_engine_io.lo ssl_engine_kernel.lo ssl_engine_log.lo ssl_engine_mutex.lo ssl_engine_pphrase.lo ssl_engine_rand.lo ssl_engine_vars.lo ssl_scache.lo ssl_util_stapling.lo ssl_util.lo ssl_util_ssl.lo ssl_engine_ocsp.lo ssl_util_ocsp.lo " - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ssl" >&5 -$as_echo_n "checking whether to enable mod_ssl... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ssl" >&5 +printf %s "checking whether to enable mod_ssl... " >&6; } # Check whether --enable-ssl was given. -if test "${enable_ssl+set}" = set; then : +if test ${enable_ssl+y} +then : enableval=$enable_ssl; force_ssl=$enableval -else +else $as_nop enable_ssl=most fi @@ -27339,16 +28096,17 @@ enable_ssl=no fi if test "$enable_ssl" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL" >&5 -$as_echo_n "checking for OpenSSL... " >&6; } -if ${ac_cv_openssl+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL" >&5 +printf %s "checking for OpenSSL... " >&6; } +if test ${ac_cv_openssl+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_openssl=no ap_openssl_found="" @@ -27357,11 +28115,12 @@ ap_openssl_mod_cflags="" ap_openssl_mod_ldflags="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided OpenSSL base directory" >&5 -$as_echo_n "checking for user-provided OpenSSL base directory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided OpenSSL base directory" >&5 +printf %s "checking for user-provided OpenSSL base directory... " >&6; } # Check whether --with-ssl was given. -if test "${with_ssl+set}" = set; then : +if test ${with_ssl+y} +then : withval=$with_ssl; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_openssl_base="`cd $withval ; pwd`" @@ -27370,11 +28129,11 @@ fi if test "x$ap_openssl_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_openssl_base" >&5 -$as_echo "$ap_openssl_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_openssl_base" >&5 +printf "%s\n" "$ap_openssl_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -27383,13 +28142,18 @@ if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - if test "x$ap_openssl_base" != "x" -a \ - -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then - PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" - export PKG_CONFIG_PATH + if test "x$ap_openssl_base" != "x"; then + if test -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then + PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + elif test -f "${ap_openssl_base}/lib64/pkgconfig/openssl.pc"; then + PKG_CONFIG_PATH="${ap_openssl_base}/lib64/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + fi fi # Check whether --enable-ssl-staticlib-deps was given. -if test "${enable_ssl_staticlib_deps+set}" = set; then : +if test ${enable_ssl_staticlib_deps+y} +then : enableval=$enable_ssl_staticlib_deps; if test "$enableval" = "yes"; then PKGCONFIG_LIBOPTS="--static" @@ -27706,13 +28470,13 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version >= 0.9.8a" >&5 -$as_echo_n "checking for OpenSSL version >= 0.9.8a... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version >= 0.9.8a" >&5 +printf %s "checking for OpenSSL version >= 0.9.8a... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #if !defined(OPENSSL_VERSION_NUMBER) @@ -27725,15 +28489,16 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 -$as_echo "OK" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } ac_cv_openssl=yes -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 -$as_echo "FAILED" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$ac_cv_openssl" = "xyes"; then ap_openssl_libs="${ap_openssl_libs:--lssl -lcrypto} `$apr_config --libs`" @@ -27793,61 +28558,59 @@ liberrors="" - for ac_header in openssl/engine.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "openssl/engine.h" "ac_cv_header_openssl_engine_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_engine_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_ENGINE_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "openssl/engine.h" "ac_cv_header_openssl_engine_h" "$ac_includes_default" +if test "x$ac_cv_header_openssl_engine_h" = xyes +then : + printf "%s\n" "#define HAVE_OPENSSL_ENGINE_H 1" >>confdefs.h fi -done - for ac_func in SSL_CTX_new + for ac_func in SSL_CTX_new do : ac_fn_c_check_func "$LINENO" "SSL_CTX_new" "ac_cv_func_SSL_CTX_new" -if test "x$ac_cv_func_SSL_CTX_new" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SSL_CTX_NEW 1 -_ACEOF +if test "x$ac_cv_func_SSL_CTX_new" = xyes +then : + printf "%s\n" "#define HAVE_SSL_CTX_NEW 1" >>confdefs.h -else +else $as_nop liberrors="yes" fi + done + ac_fn_c_check_func "$LINENO" "OPENSSL_init_ssl" "ac_cv_func_OPENSSL_init_ssl" +if test "x$ac_cv_func_OPENSSL_init_ssl" = xyes +then : + printf "%s\n" "#define HAVE_OPENSSL_INIT_SSL 1" >>confdefs.h - for ac_func in OPENSSL_init_ssl -do : - ac_fn_c_check_func "$LINENO" "OPENSSL_init_ssl" "ac_cv_func_OPENSSL_init_ssl" -if test "x$ac_cv_func_OPENSSL_init_ssl" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_INIT_SSL 1 -_ACEOF +fi + + ac_fn_c_check_func "$LINENO" "ENGINE_init" "ac_cv_func_ENGINE_init" +if test "x$ac_cv_func_ENGINE_init" = xyes +then : + printf "%s\n" "#define HAVE_ENGINE_INIT 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "ENGINE_load_builtin_engines" "ac_cv_func_ENGINE_load_builtin_engines" +if test "x$ac_cv_func_ENGINE_load_builtin_engines" = xyes +then : + printf "%s\n" "#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1" >>confdefs.h - for ac_func in ENGINE_init ENGINE_load_builtin_engines RAND_egd -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "RAND_egd" "ac_cv_func_RAND_egd" +if test "x$ac_cv_func_RAND_egd" = xyes +then : + printf "%s\n" "#define HAVE_RAND_EGD 1" >>confdefs.h fi -done if test "x$liberrors" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL libraries are unusable" >&5 -$as_echo "$as_me: WARNING: OpenSSL libraries are unusable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL libraries are unusable" >&5 +printf "%s\n" "$as_me: WARNING: OpenSSL libraries are unusable" >&2;} fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL version is too old" >&5 -$as_echo "$as_me: WARNING: OpenSSL version is too old" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL version is too old" >&5 +printf "%s\n" "$as_me: WARNING: OpenSSL version is too old" >&2;} fi CPPFLAGS="$saved_CPPFLAGS" @@ -27858,11 +28621,11 @@ ap_openssl_mod_ldflags=$MOD_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_openssl" >&5 -$as_echo "$ac_cv_openssl" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_openssl" >&5 +printf "%s\n" "$ac_cv_openssl" >&6; } if test "x$ac_cv_openssl" = "xyes"; then -$as_echo "#define HAVE_OPENSSL 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPENSSL 1" >>confdefs.h if test "x$MOD_LDFLAGS" = "x"; then @@ -27939,8 +28702,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ssl" >&5 -$as_echo_n "checking whether to enable mod_ssl... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_ssl" >&5 +printf %s "checking whether to enable mod_ssl... " >&6; } if test "$enable_ssl" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -27949,8 +28712,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_ssl$_apmod_extra_msg" >&5 -$as_echo "$enable_ssl$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_ssl$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_ssl$_apmod_extra_msg" >&6; } if test "$enable_ssl" != "no"; then case "$enable_ssl" in static*) @@ -28086,12 +28849,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_hook_export" >&5 -$as_echo_n "checking whether to enable mod_optional_hook_export... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_hook_export" >&5 +printf %s "checking whether to enable mod_optional_hook_export... " >&6; } # Check whether --enable-optional-hook-export was given. -if test "${enable_optional_hook_export+set}" = set; then : +if test ${enable_optional_hook_export+y} +then : enableval=$enable_optional_hook_export; force_optional_hook_export=$enableval -else +else $as_nop enable_optional_hook_export=no fi @@ -28147,8 +28911,8 @@ if test "$enable_optional_hook_export" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_optional_hook_export$_apmod_extra_msg" >&5 -$as_echo "$enable_optional_hook_export$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_optional_hook_export$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_optional_hook_export$_apmod_extra_msg" >&6; } if test "$enable_optional_hook_export" != "no"; then case "$enable_optional_hook_export" in static*) @@ -28227,12 +28991,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_hook_import" >&5 -$as_echo_n "checking whether to enable mod_optional_hook_import... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_hook_import" >&5 +printf %s "checking whether to enable mod_optional_hook_import... " >&6; } # Check whether --enable-optional-hook-import was given. -if test "${enable_optional_hook_import+set}" = set; then : +if test ${enable_optional_hook_import+y} +then : enableval=$enable_optional_hook_import; force_optional_hook_import=$enableval -else +else $as_nop enable_optional_hook_import=no fi @@ -28288,8 +29053,8 @@ if test "$enable_optional_hook_import" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_optional_hook_import$_apmod_extra_msg" >&5 -$as_echo "$enable_optional_hook_import$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_optional_hook_import$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_optional_hook_import$_apmod_extra_msg" >&6; } if test "$enable_optional_hook_import" != "no"; then case "$enable_optional_hook_import" in static*) @@ -28368,12 +29133,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_fn_import" >&5 -$as_echo_n "checking whether to enable mod_optional_fn_import... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_fn_import" >&5 +printf %s "checking whether to enable mod_optional_fn_import... " >&6; } # Check whether --enable-optional-fn-import was given. -if test "${enable_optional_fn_import+set}" = set; then : +if test ${enable_optional_fn_import+y} +then : enableval=$enable_optional_fn_import; force_optional_fn_import=$enableval -else +else $as_nop enable_optional_fn_import=no fi @@ -28429,8 +29195,8 @@ if test "$enable_optional_fn_import" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_optional_fn_import$_apmod_extra_msg" >&5 -$as_echo "$enable_optional_fn_import$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_optional_fn_import$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_optional_fn_import$_apmod_extra_msg" >&6; } if test "$enable_optional_fn_import" != "no"; then case "$enable_optional_fn_import" in static*) @@ -28509,12 +29275,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_fn_export" >&5 -$as_echo_n "checking whether to enable mod_optional_fn_export... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_optional_fn_export" >&5 +printf %s "checking whether to enable mod_optional_fn_export... " >&6; } # Check whether --enable-optional-fn-export was given. -if test "${enable_optional_fn_export+set}" = set; then : +if test ${enable_optional_fn_export+y} +then : enableval=$enable_optional_fn_export; force_optional_fn_export=$enableval -else +else $as_nop enable_optional_fn_export=no fi @@ -28570,8 +29337,8 @@ if test "$enable_optional_fn_export" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_optional_fn_export$_apmod_extra_msg" >&5 -$as_echo "$enable_optional_fn_export$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_optional_fn_export$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_optional_fn_export$_apmod_extra_msg" >&6; } if test "$enable_optional_fn_export" != "no"; then case "$enable_optional_fn_export" in static*) @@ -28651,12 +29418,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dialup" >&5 -$as_echo_n "checking whether to enable mod_dialup... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dialup" >&5 +printf %s "checking whether to enable mod_dialup... " >&6; } # Check whether --enable-dialup was given. -if test "${enable_dialup+set}" = set; then : +if test ${enable_dialup+y} +then : enableval=$enable_dialup; force_dialup=$enableval -else +else $as_nop enable_dialup=maybe-all fi @@ -28712,8 +29480,8 @@ if test "$enable_dialup" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dialup$_apmod_extra_msg" >&5 -$as_echo "$enable_dialup$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_dialup$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_dialup$_apmod_extra_msg" >&6; } if test "$enable_dialup" != "no"; then case "$enable_dialup" in static*) @@ -28833,8 +29601,8 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for target platform" >&5 -$as_echo_n "checking for target platform... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for target platform" >&5 +printf %s "checking for target platform... " >&6; } case $host in *pc-os2-emx*) @@ -28858,8 +29626,8 @@ OS_DIR=$OS;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $OS" >&5 -$as_echo "$OS" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OS" >&5 +printf "%s\n" "$OS" >&6; } APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES os/${OS_DIR}/Makefile" @@ -28890,11 +29658,12 @@ if test "$OS" = "unix" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rlim_t" >&5 -$as_echo_n "checking for rlim_t... " >&6; } -if ${ac_cv_type_rlim_t+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rlim_t" >&5 +printf %s "checking for rlim_t... " >&6; } +if test ${ac_cv_type_rlim_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -28904,113 +29673,114 @@ #include int -main () +main (void) { rlim_t spoon; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_type_rlim_t=yes -else +else $as_nop ac_cv_type_rlim_t=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_rlim_t" >&5 -$as_echo "$ac_cv_type_rlim_t" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_rlim_t" >&5 +printf "%s\n" "$ac_cv_type_rlim_t" >&6; } if test "$ac_cv_type_rlim_t" = "no" ; then -$as_echo "#define rlim_t int" >>confdefs.h +printf "%s\n" "#define rlim_t int" >>confdefs.h fi - for ac_header in sys/time.h sys/resource.h sys/sem.h sys/ipc.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_time_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_resource_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h -done +fi +ac_fn_c_check_header_compile "$LINENO" "sys/sem.h" "ac_cv_header_sys_sem_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sem_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SEM_H 1" >>confdefs.h +fi +ac_fn_c_check_header_compile "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ipc_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IPC_H 1" >>confdefs.h + +fi - for ac_func in setsid killpg -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + + ac_fn_c_check_func "$LINENO" "setsid" "ac_cv_func_setsid" +if test "x$ac_cv_func_setsid" = xyes +then : + printf "%s\n" "#define HAVE_SETSID 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "killpg" "ac_cv_func_killpg" +if test "x$ac_cv_func_killpg" = xyes +then : + printf "%s\n" "#define HAVE_KILLPG 1" >>confdefs.h fi +fi -for ac_header in bstring.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + +ac_fn_c_check_header_compile "$LINENO" "bstring.h" "ac_cv_header_bstring_h" "$ac_includes_default" +if test "x$ac_cv_header_bstring_h" = xyes +then : + printf "%s\n" "#define HAVE_BSTRING_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h -done +fi -for ac_func in syslog -do : - ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog" -if test "x$ac_cv_func_syslog" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYSLOG 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog" +if test "x$ac_cv_func_syslog" = xyes +then : + printf "%s\n" "#define HAVE_SYSLOG 1" >>confdefs.h fi -done - for ac_header in sys/times.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_times_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SYS_TIMES_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_times_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIMES_H 1" >>confdefs.h fi -done - - for ac_func in times -do : - ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_TIMES 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" +if test "x$ac_cv_func_times" = xyes +then : + printf "%s\n" "#define HAVE_TIMES 1" >>confdefs.h fi -done # util_expr needs header files in server source dir @@ -29050,12 +29820,13 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_define_APR_HAS_THREADS=yes -else +else $as_nop ac_cv_define_APR_HAS_THREADS=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS=$apr_old_cppflags @@ -29072,11 +29843,12 @@ esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether APR supports thread-safe pollsets" >&5 -$as_echo_n "checking whether APR supports thread-safe pollsets... " >&6; } -if ${ac_cv_have_threadsafe_pollset+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether APR supports thread-safe pollsets" >&5 +printf %s "checking whether APR supports thread-safe pollsets... " >&6; } +if test ${ac_cv_have_threadsafe_pollset+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $host in *-apple-darwin[1-9].*) @@ -29088,17 +29860,24 @@ ;; esac - for ac_func in kqueue port_create epoll_create -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "kqueue" "ac_cv_func_kqueue" +if test "x$ac_cv_func_kqueue" = xyes +then : + printf "%s\n" "#define HAVE_KQUEUE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "port_create" "ac_cv_func_port_create" +if test "x$ac_cv_func_port_create" = xyes +then : + printf "%s\n" "#define HAVE_PORT_CREATE 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "epoll_create" "ac_cv_func_epoll_create" +if test "x$ac_cv_func_epoll_create" = xyes +then : + printf "%s\n" "#define HAVE_EPOLL_CREATE 1" >>confdefs.h fi -done if test "$ac_cv_func_kqueue$ac_cv_func_port_create$ac_cv_func_epoll_create" != "nonono"; then ac_cv_have_threadsafe_pollset=yes @@ -29107,8 +29886,8 @@ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_threadsafe_pollset" >&5 -$as_echo "$ac_cv_have_threadsafe_pollset" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_threadsafe_pollset" >&5 +printf "%s\n" "$ac_cv_have_threadsafe_pollset" >&6; } case $APR_VERSION in 1.4*) @@ -29174,26 +29953,26 @@ fi } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if event MPM supports this platform" >&5 -$as_echo_n "checking if event MPM supports this platform... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if event MPM supports this platform" >&5 +printf %s "checking if event MPM supports this platform... " >&6; } if test $forking_mpms_supported != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - This is not a forking platform" >&5 -$as_echo "no - This is not a forking platform" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - This is not a forking platform" >&5 +printf "%s\n" "no - This is not a forking platform" >&6; } elif test $ac_cv_define_APR_HAS_THREADS != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - APR does not support threads" >&5 -$as_echo "no - APR does not support threads" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - APR does not support threads" >&5 +printf "%s\n" "no - APR does not support threads" >&6; } elif test $have_threaded_sig_graceful != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - SIG_GRACEFUL cannot be used with a threaded MPM" >&5 -$as_echo "no - SIG_GRACEFUL cannot be used with a threaded MPM" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - SIG_GRACEFUL cannot be used with a threaded MPM" >&5 +printf "%s\n" "no - SIG_GRACEFUL cannot be used with a threaded MPM" >&6; } elif test $ac_cv_have_threadsafe_pollset != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - APR_POLLSET_THREADSAFE is not supported" >&5 -$as_echo "no - APR_POLLSET_THREADSAFE is not supported" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - APR_POLLSET_THREADSAFE is not supported" >&5 +printf "%s\n" "no - APR_POLLSET_THREADSAFE is not supported" >&6; } elif test $apr_has_skiplist != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - APR skiplist is not available" >&5 -$as_echo "no - APR skiplist is not available" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - APR skiplist is not available" >&5 +printf "%s\n" "no - APR skiplist is not available" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } if test "yes" = "yes"; then eval "ap_supported_mpm_event=shared" @@ -29207,12 +29986,12 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if mpmt_os2 MPM supports this platform" >&5 -$as_echo_n "checking if mpmt_os2 MPM supports this platform... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if mpmt_os2 MPM supports this platform" >&5 +printf %s "checking if mpmt_os2 MPM supports this platform... " >&6; } case $host in *os2-emx*) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } if test "no" = "yes"; then eval "ap_supported_mpm_mpmt_os2=shared" @@ -29226,19 +30005,19 @@ ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if prefork MPM supports this platform" >&5 -$as_echo_n "checking if prefork MPM supports this platform... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if prefork MPM supports this platform" >&5 +printf %s "checking if prefork MPM supports this platform... " >&6; } if test $forking_mpms_supported != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - This is not a forking platform" >&5 -$as_echo "no - This is not a forking platform" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - This is not a forking platform" >&5 +printf "%s\n" "no - This is not a forking platform" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } if test "yes" = "yes"; then eval "ap_supported_mpm_prefork=shared" @@ -29252,12 +30031,12 @@ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if WinNT MPM supports this platform" >&5 -$as_echo_n "checking if WinNT MPM supports this platform... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if WinNT MPM supports this platform" >&5 +printf %s "checking if WinNT MPM supports this platform... " >&6; } case $host in *mingw32*) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } if test "no" = "yes"; then eval "ap_supported_mpm_winnt=shared" @@ -29271,25 +30050,25 @@ ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if worker MPM supports this platform" >&5 -$as_echo_n "checking if worker MPM supports this platform... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if worker MPM supports this platform" >&5 +printf %s "checking if worker MPM supports this platform... " >&6; } if test $forking_mpms_supported != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - This is not a forking platform" >&5 -$as_echo "no - This is not a forking platform" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - This is not a forking platform" >&5 +printf "%s\n" "no - This is not a forking platform" >&6; } elif test $ac_cv_define_APR_HAS_THREADS != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - APR does not support threads" >&5 -$as_echo "no - APR does not support threads" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - APR does not support threads" >&5 +printf "%s\n" "no - APR does not support threads" >&6; } elif test $have_threaded_sig_graceful != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - SIG_GRACEFUL cannot be used with a threaded MPM" >&5 -$as_echo "no - SIG_GRACEFUL cannot be used with a threaded MPM" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - SIG_GRACEFUL cannot be used with a threaded MPM" >&5 +printf "%s\n" "no - SIG_GRACEFUL cannot be used with a threaded MPM" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } if test "yes" = "yes"; then eval "ap_supported_mpm_worker=shared" @@ -29315,7 +30094,8 @@ fcgistarter_LTFLAGS="" # Check whether --enable-static-support was given. -if test "${enable_static_support+set}" = set; then : +if test ${enable_static_support+y} +then : enableval=$enable_static_support; if test "$enableval" = "yes" ; then @@ -29534,7 +30314,8 @@ # Check whether --enable-static-htpasswd was given. -if test "${enable_static_htpasswd+set}" = set; then : +if test ${enable_static_htpasswd+y} +then : enableval=$enable_static_htpasswd; if test "$enableval" = "yes" ; then @@ -29589,7 +30370,8 @@ # Check whether --enable-static-htdigest was given. -if test "${enable_static_htdigest+set}" = set; then : +if test ${enable_static_htdigest+y} +then : enableval=$enable_static_htdigest; if test "$enableval" = "yes" ; then @@ -29644,7 +30426,8 @@ # Check whether --enable-static-rotatelogs was given. -if test "${enable_static_rotatelogs+set}" = set; then : +if test ${enable_static_rotatelogs+y} +then : enableval=$enable_static_rotatelogs; if test "$enableval" = "yes" ; then @@ -29699,7 +30482,8 @@ # Check whether --enable-static-logresolve was given. -if test "${enable_static_logresolve+set}" = set; then : +if test ${enable_static_logresolve+y} +then : enableval=$enable_static_logresolve; if test "$enableval" = "yes" ; then @@ -29754,7 +30538,8 @@ # Check whether --enable-static-htdbm was given. -if test "${enable_static_htdbm+set}" = set; then : +if test ${enable_static_htdbm+y} +then : enableval=$enable_static_htdbm; if test "$enableval" = "yes" ; then @@ -29809,7 +30594,8 @@ # Check whether --enable-static-ab was given. -if test "${enable_static_ab+set}" = set; then : +if test ${enable_static_ab+y} +then : enableval=$enable_static_ab; if test "$enableval" = "yes" ; then @@ -29864,7 +30650,8 @@ # Check whether --enable-static-checkgid was given. -if test "${enable_static_checkgid+set}" = set; then : +if test ${enable_static_checkgid+y} +then : enableval=$enable_static_checkgid; if test "$enableval" = "yes" ; then @@ -29919,7 +30706,8 @@ # Check whether --enable-static-htcacheclean was given. -if test "${enable_static_htcacheclean+set}" = set; then : +if test ${enable_static_htcacheclean+y} +then : enableval=$enable_static_htcacheclean; if test "$enableval" = "yes" ; then @@ -29974,7 +30762,8 @@ # Check whether --enable-static-httxt2dbm was given. -if test "${enable_static_httxt2dbm+set}" = set; then : +if test ${enable_static_httxt2dbm+y} +then : enableval=$enable_static_httxt2dbm; if test "$enableval" = "yes" ; then @@ -30029,7 +30818,8 @@ # Check whether --enable-static-fcgistarter was given. -if test "${enable_static_fcgistarter+set}" = set; then : +if test ${enable_static_fcgistarter+y} +then : enableval=$enable_static_fcgistarter; if test "$enableval" = "yes" ; then @@ -30144,12 +30934,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_http2" >&5 -$as_echo_n "checking whether to enable mod_http2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_http2" >&5 +printf %s "checking whether to enable mod_http2... " >&6; } # Check whether --enable-http2 was given. -if test "${enable_http2+set}" = set; then : +if test ${enable_http2+y} +then : enableval=$enable_http2; force_http2=$enableval -else +else $as_nop enable_http2=most fi @@ -30203,16 +30994,17 @@ enable_http2=no fi if test "$enable_http2" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL" >&5 -$as_echo_n "checking for OpenSSL... " >&6; } -if ${ac_cv_openssl+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL" >&5 +printf %s "checking for OpenSSL... " >&6; } +if test ${ac_cv_openssl+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_openssl=no ap_openssl_found="" @@ -30221,11 +31013,12 @@ ap_openssl_mod_cflags="" ap_openssl_mod_ldflags="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided OpenSSL base directory" >&5 -$as_echo_n "checking for user-provided OpenSSL base directory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided OpenSSL base directory" >&5 +printf %s "checking for user-provided OpenSSL base directory... " >&6; } # Check whether --with-ssl was given. -if test "${with_ssl+set}" = set; then : +if test ${with_ssl+y} +then : withval=$with_ssl; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_openssl_base="`cd $withval ; pwd`" @@ -30234,11 +31027,11 @@ fi if test "x$ap_openssl_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_openssl_base" >&5 -$as_echo "$ap_openssl_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_openssl_base" >&5 +printf "%s\n" "$ap_openssl_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -30247,13 +31040,18 @@ if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - if test "x$ap_openssl_base" != "x" -a \ - -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then - PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" - export PKG_CONFIG_PATH + if test "x$ap_openssl_base" != "x"; then + if test -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then + PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + elif test -f "${ap_openssl_base}/lib64/pkgconfig/openssl.pc"; then + PKG_CONFIG_PATH="${ap_openssl_base}/lib64/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + fi fi # Check whether --enable-ssl-staticlib-deps was given. -if test "${enable_ssl_staticlib_deps+set}" = set; then : +if test ${enable_ssl_staticlib_deps+y} +then : enableval=$enable_ssl_staticlib_deps; if test "$enableval" = "yes"; then PKGCONFIG_LIBOPTS="--static" @@ -30570,13 +31368,13 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version >= 0.9.8a" >&5 -$as_echo_n "checking for OpenSSL version >= 0.9.8a... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version >= 0.9.8a" >&5 +printf %s "checking for OpenSSL version >= 0.9.8a... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #if !defined(OPENSSL_VERSION_NUMBER) @@ -30589,15 +31387,16 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 -$as_echo "OK" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } ac_cv_openssl=yes -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 -$as_echo "FAILED" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$ac_cv_openssl" = "xyes"; then ap_openssl_libs="${ap_openssl_libs:--lssl -lcrypto} `$apr_config --libs`" @@ -30657,61 +31456,59 @@ liberrors="" - for ac_header in openssl/engine.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "openssl/engine.h" "ac_cv_header_openssl_engine_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_engine_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_ENGINE_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "openssl/engine.h" "ac_cv_header_openssl_engine_h" "$ac_includes_default" +if test "x$ac_cv_header_openssl_engine_h" = xyes +then : + printf "%s\n" "#define HAVE_OPENSSL_ENGINE_H 1" >>confdefs.h fi -done - for ac_func in SSL_CTX_new + for ac_func in SSL_CTX_new do : ac_fn_c_check_func "$LINENO" "SSL_CTX_new" "ac_cv_func_SSL_CTX_new" -if test "x$ac_cv_func_SSL_CTX_new" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SSL_CTX_NEW 1 -_ACEOF +if test "x$ac_cv_func_SSL_CTX_new" = xyes +then : + printf "%s\n" "#define HAVE_SSL_CTX_NEW 1" >>confdefs.h -else +else $as_nop liberrors="yes" fi + done + ac_fn_c_check_func "$LINENO" "OPENSSL_init_ssl" "ac_cv_func_OPENSSL_init_ssl" +if test "x$ac_cv_func_OPENSSL_init_ssl" = xyes +then : + printf "%s\n" "#define HAVE_OPENSSL_INIT_SSL 1" >>confdefs.h - for ac_func in OPENSSL_init_ssl -do : - ac_fn_c_check_func "$LINENO" "OPENSSL_init_ssl" "ac_cv_func_OPENSSL_init_ssl" -if test "x$ac_cv_func_OPENSSL_init_ssl" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_INIT_SSL 1 -_ACEOF +fi + + ac_fn_c_check_func "$LINENO" "ENGINE_init" "ac_cv_func_ENGINE_init" +if test "x$ac_cv_func_ENGINE_init" = xyes +then : + printf "%s\n" "#define HAVE_ENGINE_INIT 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "ENGINE_load_builtin_engines" "ac_cv_func_ENGINE_load_builtin_engines" +if test "x$ac_cv_func_ENGINE_load_builtin_engines" = xyes +then : + printf "%s\n" "#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1" >>confdefs.h - for ac_func in ENGINE_init ENGINE_load_builtin_engines RAND_egd -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "RAND_egd" "ac_cv_func_RAND_egd" +if test "x$ac_cv_func_RAND_egd" = xyes +then : + printf "%s\n" "#define HAVE_RAND_EGD 1" >>confdefs.h fi -done if test "x$liberrors" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL libraries are unusable" >&5 -$as_echo "$as_me: WARNING: OpenSSL libraries are unusable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL libraries are unusable" >&5 +printf "%s\n" "$as_me: WARNING: OpenSSL libraries are unusable" >&2;} fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL version is too old" >&5 -$as_echo "$as_me: WARNING: OpenSSL version is too old" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL version is too old" >&5 +printf "%s\n" "$as_me: WARNING: OpenSSL version is too old" >&2;} fi CPPFLAGS="$saved_CPPFLAGS" @@ -30722,11 +31519,11 @@ ap_openssl_mod_ldflags=$MOD_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_openssl" >&5 -$as_echo "$ac_cv_openssl" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_openssl" >&5 +printf "%s\n" "$ac_cv_openssl" >&6; } if test "x$ac_cv_openssl" = "xyes"; then -$as_echo "#define HAVE_OPENSSL 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPENSSL 1" >>confdefs.h if test "x$MOD_LDFLAGS" = "x"; then @@ -30797,22 +31594,24 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2" >&5 -$as_echo_n "checking for nghttp2... " >&6; } -if ${ac_cv_nghttp2+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nghttp2" >&5 +printf %s "checking for nghttp2... " >&6; } +if test ${ac_cv_nghttp2+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_nghttp2=no ap_nghttp2_found="" ap_nghttp2_base="" ap_nghttp2_libs="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided nghttp2 base directory" >&5 -$as_echo_n "checking for user-provided nghttp2 base directory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided nghttp2 base directory" >&5 +printf %s "checking for user-provided nghttp2 base directory... " >&6; } # Check whether --with-nghttp2 was given. -if test "${with_nghttp2+set}" = set; then : +if test ${with_nghttp2+y} +then : withval=$with_nghttp2; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_nghttp2_base="`cd $withval ; pwd`" @@ -30821,11 +31620,11 @@ fi if test "x$ap_nghttp2_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_nghttp2_base" >&5 -$as_echo "$ap_nghttp2_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_nghttp2_base" >&5 +printf "%s\n" "$ap_nghttp2_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -30834,8 +31633,8 @@ if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 -$as_echo_n "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 +printf %s "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } if test "x$ap_nghttp2_base" != "x" ; then if test -f "${ap_nghttp2_base}/lib/pkgconfig/libnghttp2.pc"; then PKG_CONFIG_PATH="${ap_nghttp2_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" @@ -30846,7 +31645,8 @@ fi fi # Check whether --enable-nghttp2-staticlib-deps was given. -if test "${enable_nghttp2_staticlib_deps+set}" = set; then : +if test ${enable_nghttp2_staticlib_deps+y} +then : enableval=$enable_nghttp2_staticlib_deps; if test "$enableval" = "yes"; then PKGCONFIG_LIBOPTS="--static" @@ -31121,13 +31921,13 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2 version >= 1.2.1" >&5 -$as_echo_n "checking for nghttp2 version >= 1.2.1... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nghttp2 version >= 1.2.1" >&5 +printf %s "checking for nghttp2 version >= 1.2.1... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #if !defined(NGHTTP2_VERSION_NUM) @@ -31140,15 +31940,16 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 -$as_echo "OK" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } ac_cv_nghttp2=yes -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 -$as_echo "FAILED" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$ac_cv_nghttp2" = "xyes"; then ap_nghttp2_libs="${ap_nghttp2_libs:--lnghttp2} `$apr_config --libs`" @@ -31196,59 +31997,54 @@ liberrors="" - for ac_header in nghttp2/nghttp2.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default" -if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_NGHTTP2_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default" +if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_NGHTTP2_H 1" >>confdefs.h fi -done - for ac_func in nghttp2_session_server_new2 + for ac_func in nghttp2_session_server_new2 do : ac_fn_c_check_func "$LINENO" "nghttp2_session_server_new2" "ac_cv_func_nghttp2_session_server_new2" -if test "x$ac_cv_func_nghttp2_session_server_new2" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_SERVER_NEW2 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_server_new2" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_SERVER_NEW2 1" >>confdefs.h -else +else $as_nop liberrors="yes" fi -done +done if test "x$liberrors" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 library is unusable" >&5 -$as_echo "$as_me: WARNING: nghttp2 library is unusable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 library is unusable" >&5 +printf "%s\n" "$as_me: WARNING: nghttp2 library is unusable" >&2;} fi - for ac_func in nghttp2_stream_get_weight + + for ac_func in nghttp2_stream_get_weight do : ac_fn_c_check_func "$LINENO" "nghttp2_stream_get_weight" "ac_cv_func_nghttp2_stream_get_weight" -if test "x$ac_cv_func_nghttp2_stream_get_weight" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_STREAM_GET_WEIGHT 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_stream_get_weight" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_STREAM_GET_WEIGHT 1" >>confdefs.h -else +else $as_nop liberrors="yes" fi -done +done if test "x$liberrors" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version >= 1.3.0 is required" >&5 -$as_echo "$as_me: WARNING: nghttp2 version >= 1.3.0 is required" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version >= 1.3.0 is required" >&5 +printf "%s\n" "$as_me: WARNING: nghttp2 version >= 1.3.0 is required" >&2;} fi - for ac_func in nghttp2_session_change_stream_priority + + for ac_func in nghttp2_session_change_stream_priority do : ac_fn_c_check_func "$LINENO" "nghttp2_session_change_stream_priority" "ac_cv_func_nghttp2_session_change_stream_priority" -if test "x$ac_cv_func_nghttp2_session_change_stream_priority" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_CHANGE_STREAM_PRIORITY 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_change_stream_priority" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_CHANGE_STREAM_PRIORITY 1" >>confdefs.h if test "x$MOD_CPPFLAGS" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_CPPFLAGS to \""-DH2_NG2_CHANGE_PRIO"\"" @@ -31271,15 +32067,15 @@ fi fi + done - for ac_func in nghttp2_session_callbacks_set_on_invalid_header_callback + for ac_func in nghttp2_session_callbacks_set_on_invalid_header_callback do : ac_fn_c_check_func "$LINENO" "nghttp2_session_callbacks_set_on_invalid_header_callback" "ac_cv_func_nghttp2_session_callbacks_set_on_invalid_header_callback" -if test "x$ac_cv_func_nghttp2_session_callbacks_set_on_invalid_header_callback" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_CALLBACKS_SET_ON_INVALID_HEADER_CALLBACK 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_callbacks_set_on_invalid_header_callback" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_CALLBACKS_SET_ON_INVALID_HEADER_CALLBACK 1" >>confdefs.h if test "x$MOD_CPPFLAGS" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_CPPFLAGS to \""-DH2_NG2_INVALID_HEADER_CB"\"" @@ -31302,15 +32098,15 @@ fi fi + done - for ac_func in nghttp2_session_get_stream_local_window_size + for ac_func in nghttp2_session_get_stream_local_window_size do : ac_fn_c_check_func "$LINENO" "nghttp2_session_get_stream_local_window_size" "ac_cv_func_nghttp2_session_get_stream_local_window_size" -if test "x$ac_cv_func_nghttp2_session_get_stream_local_window_size" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_GET_STREAM_LOCAL_WINDOW_SIZE 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_get_stream_local_window_size" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_GET_STREAM_LOCAL_WINDOW_SIZE 1" >>confdefs.h if test "x$MOD_CPPFLAGS" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_CPPFLAGS to \""-DH2_NG2_LOCAL_WIN_SIZE"\"" @@ -31333,11 +32129,11 @@ fi fi -done +done else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version is too old" >&5 -$as_echo "$as_me: WARNING: nghttp2 version is too old" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version is too old" >&5 +printf "%s\n" "$as_me: WARNING: nghttp2 version is too old" >&2;} fi CPPFLAGS="$saved_CPPFLAGS" @@ -31345,11 +32141,11 @@ LDFLAGS="$saved_LDFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_nghttp2" >&5 -$as_echo "$ac_cv_nghttp2" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_nghttp2" >&5 +printf "%s\n" "$ac_cv_nghttp2" >&6; } if test "x$ac_cv_nghttp2" = "xyes"; then -$as_echo "#define HAVE_NGHTTP2 1" >>confdefs.h +printf "%s\n" "#define HAVE_NGHTTP2 1" >>confdefs.h fi @@ -31384,8 +32180,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_http2" >&5 -$as_echo_n "checking whether to enable mod_http2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_http2" >&5 +printf %s "checking whether to enable mod_http2... " >&6; } if test "$enable_http2" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -31394,8 +32190,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_http2$_apmod_extra_msg" >&5 -$as_echo "$enable_http2$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_http2$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_http2$_apmod_extra_msg" >&6; } if test "$enable_http2" != "no"; then case "$enable_http2" in static*) @@ -31483,12 +32279,13 @@ proxy_http2_objs="mod_proxy_http2.lo h2_proxy_session.lo h2_proxy_util.lo " - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http2" >&5 -$as_echo_n "checking whether to enable mod_proxy_http2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http2" >&5 +printf %s "checking whether to enable mod_proxy_http2... " >&6; } # Check whether --enable-proxy-http2 was given. -if test "${enable_proxy_http2+set}" = set; then : +if test ${enable_proxy_http2+y} +then : enableval=$enable_proxy_http2; force_proxy_http2=$enableval -else +else $as_nop enable_proxy_http2=no fi @@ -31542,35 +32339,37 @@ enable_proxy_http2=no fi if test "$enable_proxy_http2" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy" = "no" ; then enable_proxy_http2=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_http2\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_http2\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy is disabled but required for mod_proxy_http2\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy is disabled but required for mod_proxy_http2\"" >&2;} elif test "$enable_proxy_http2" = "static" && test "$enable_proxy" != "static" ; then enable_proxy_http2=$enable_proxy - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_http2 shared because mod_proxy is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_proxy_http2 shared because mod_proxy is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_proxy_http2 shared because mod_proxy is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_proxy_http2 shared because mod_proxy is built shared\"" >&2;} else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2" >&5 -$as_echo_n "checking for nghttp2... " >&6; } -if ${ac_cv_nghttp2+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nghttp2" >&5 +printf %s "checking for nghttp2... " >&6; } +if test ${ac_cv_nghttp2+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_nghttp2=no ap_nghttp2_found="" ap_nghttp2_base="" ap_nghttp2_libs="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided nghttp2 base directory" >&5 -$as_echo_n "checking for user-provided nghttp2 base directory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided nghttp2 base directory" >&5 +printf %s "checking for user-provided nghttp2 base directory... " >&6; } # Check whether --with-nghttp2 was given. -if test "${with_nghttp2+set}" = set; then : +if test ${with_nghttp2+y} +then : withval=$with_nghttp2; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_nghttp2_base="`cd $withval ; pwd`" @@ -31579,11 +32378,11 @@ fi if test "x$ap_nghttp2_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_nghttp2_base" >&5 -$as_echo "$ap_nghttp2_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_nghttp2_base" >&5 +printf "%s\n" "$ap_nghttp2_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -31592,8 +32391,8 @@ if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 -$as_echo_n "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 +printf %s "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } if test "x$ap_nghttp2_base" != "x" ; then if test -f "${ap_nghttp2_base}/lib/pkgconfig/libnghttp2.pc"; then PKG_CONFIG_PATH="${ap_nghttp2_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" @@ -31604,7 +32403,8 @@ fi fi # Check whether --enable-nghttp2-staticlib-deps was given. -if test "${enable_nghttp2_staticlib_deps+set}" = set; then : +if test ${enable_nghttp2_staticlib_deps+y} +then : enableval=$enable_nghttp2_staticlib_deps; if test "$enableval" = "yes"; then PKGCONFIG_LIBOPTS="--static" @@ -31879,13 +32679,13 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2 version >= 1.2.1" >&5 -$as_echo_n "checking for nghttp2 version >= 1.2.1... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nghttp2 version >= 1.2.1" >&5 +printf %s "checking for nghttp2 version >= 1.2.1... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #if !defined(NGHTTP2_VERSION_NUM) @@ -31898,15 +32698,16 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 -$as_echo "OK" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } ac_cv_nghttp2=yes -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 -$as_echo "FAILED" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$ac_cv_nghttp2" = "xyes"; then ap_nghttp2_libs="${ap_nghttp2_libs:--lnghttp2} `$apr_config --libs`" @@ -31954,59 +32755,54 @@ liberrors="" - for ac_header in nghttp2/nghttp2.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default" -if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_NGHTTP2_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "nghttp2/nghttp2.h" "ac_cv_header_nghttp2_nghttp2_h" "$ac_includes_default" +if test "x$ac_cv_header_nghttp2_nghttp2_h" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_NGHTTP2_H 1" >>confdefs.h fi -done - for ac_func in nghttp2_session_server_new2 + for ac_func in nghttp2_session_server_new2 do : ac_fn_c_check_func "$LINENO" "nghttp2_session_server_new2" "ac_cv_func_nghttp2_session_server_new2" -if test "x$ac_cv_func_nghttp2_session_server_new2" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_SERVER_NEW2 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_server_new2" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_SERVER_NEW2 1" >>confdefs.h -else +else $as_nop liberrors="yes" fi -done +done if test "x$liberrors" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 library is unusable" >&5 -$as_echo "$as_me: WARNING: nghttp2 library is unusable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 library is unusable" >&5 +printf "%s\n" "$as_me: WARNING: nghttp2 library is unusable" >&2;} fi - for ac_func in nghttp2_stream_get_weight + + for ac_func in nghttp2_stream_get_weight do : ac_fn_c_check_func "$LINENO" "nghttp2_stream_get_weight" "ac_cv_func_nghttp2_stream_get_weight" -if test "x$ac_cv_func_nghttp2_stream_get_weight" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_STREAM_GET_WEIGHT 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_stream_get_weight" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_STREAM_GET_WEIGHT 1" >>confdefs.h -else +else $as_nop liberrors="yes" fi -done +done if test "x$liberrors" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version >= 1.3.0 is required" >&5 -$as_echo "$as_me: WARNING: nghttp2 version >= 1.3.0 is required" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version >= 1.3.0 is required" >&5 +printf "%s\n" "$as_me: WARNING: nghttp2 version >= 1.3.0 is required" >&2;} fi - for ac_func in nghttp2_session_change_stream_priority + + for ac_func in nghttp2_session_change_stream_priority do : ac_fn_c_check_func "$LINENO" "nghttp2_session_change_stream_priority" "ac_cv_func_nghttp2_session_change_stream_priority" -if test "x$ac_cv_func_nghttp2_session_change_stream_priority" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_CHANGE_STREAM_PRIORITY 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_change_stream_priority" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_CHANGE_STREAM_PRIORITY 1" >>confdefs.h if test "x$MOD_CPPFLAGS" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_CPPFLAGS to \""-DH2_NG2_CHANGE_PRIO"\"" @@ -32029,15 +32825,15 @@ fi fi + done - for ac_func in nghttp2_session_callbacks_set_on_invalid_header_callback + for ac_func in nghttp2_session_callbacks_set_on_invalid_header_callback do : ac_fn_c_check_func "$LINENO" "nghttp2_session_callbacks_set_on_invalid_header_callback" "ac_cv_func_nghttp2_session_callbacks_set_on_invalid_header_callback" -if test "x$ac_cv_func_nghttp2_session_callbacks_set_on_invalid_header_callback" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_CALLBACKS_SET_ON_INVALID_HEADER_CALLBACK 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_callbacks_set_on_invalid_header_callback" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_CALLBACKS_SET_ON_INVALID_HEADER_CALLBACK 1" >>confdefs.h if test "x$MOD_CPPFLAGS" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_CPPFLAGS to \""-DH2_NG2_INVALID_HEADER_CB"\"" @@ -32060,15 +32856,15 @@ fi fi + done - for ac_func in nghttp2_session_get_stream_local_window_size + for ac_func in nghttp2_session_get_stream_local_window_size do : ac_fn_c_check_func "$LINENO" "nghttp2_session_get_stream_local_window_size" "ac_cv_func_nghttp2_session_get_stream_local_window_size" -if test "x$ac_cv_func_nghttp2_session_get_stream_local_window_size" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_NGHTTP2_SESSION_GET_STREAM_LOCAL_WINDOW_SIZE 1 -_ACEOF +if test "x$ac_cv_func_nghttp2_session_get_stream_local_window_size" = xyes +then : + printf "%s\n" "#define HAVE_NGHTTP2_SESSION_GET_STREAM_LOCAL_WINDOW_SIZE 1" >>confdefs.h if test "x$MOD_CPPFLAGS" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_CPPFLAGS to \""-DH2_NG2_LOCAL_WIN_SIZE"\"" @@ -32091,11 +32887,11 @@ fi fi -done +done else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version is too old" >&5 -$as_echo "$as_me: WARNING: nghttp2 version is too old" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: nghttp2 version is too old" >&5 +printf "%s\n" "$as_me: WARNING: nghttp2 version is too old" >&2;} fi CPPFLAGS="$saved_CPPFLAGS" @@ -32103,11 +32899,11 @@ LDFLAGS="$saved_LDFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_nghttp2" >&5 -$as_echo "$ac_cv_nghttp2" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_nghttp2" >&5 +printf "%s\n" "$ac_cv_nghttp2" >&6; } if test "x$ac_cv_nghttp2" = "xyes"; then -$as_echo "#define HAVE_NGHTTP2 1" >>confdefs.h +printf "%s\n" "#define HAVE_NGHTTP2 1" >>confdefs.h fi @@ -32142,8 +32938,8 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http2" >&5 -$as_echo_n "checking whether to enable mod_proxy_http2... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_proxy_http2" >&5 +printf %s "checking whether to enable mod_proxy_http2... " >&6; } if test "$enable_proxy_http2" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -32152,8 +32948,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_http2$_apmod_extra_msg" >&5 -$as_echo "$enable_proxy_http2$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_proxy_http2$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_proxy_http2$_apmod_extra_msg" >&6; } if test "$enable_proxy_http2" != "no"; then case "$enable_proxy_http2" in static*) @@ -32298,12 +33094,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_md" >&5 -$as_echo_n "checking whether to enable mod_md... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_md" >&5 +printf %s "checking whether to enable mod_md... " >&6; } # Check whether --enable-md was given. -if test "${enable_md+set}" = set; then : +if test ${enable_md+y} +then : enableval=$enable_md; force_md=$enableval -else +else $as_nop enable_md=most fi @@ -32357,16 +33154,17 @@ enable_md=no fi if test "$enable_md" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL" >&5 -$as_echo_n "checking for OpenSSL... " >&6; } -if ${ac_cv_openssl+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL" >&5 +printf %s "checking for OpenSSL... " >&6; } +if test ${ac_cv_openssl+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_openssl=no ap_openssl_found="" @@ -32375,11 +33173,12 @@ ap_openssl_mod_cflags="" ap_openssl_mod_ldflags="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided OpenSSL base directory" >&5 -$as_echo_n "checking for user-provided OpenSSL base directory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided OpenSSL base directory" >&5 +printf %s "checking for user-provided OpenSSL base directory... " >&6; } # Check whether --with-ssl was given. -if test "${with_ssl+set}" = set; then : +if test ${with_ssl+y} +then : withval=$with_ssl; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_openssl_base="`cd $withval ; pwd`" @@ -32388,11 +33187,11 @@ fi if test "x$ap_openssl_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_openssl_base" >&5 -$as_echo "$ap_openssl_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_openssl_base" >&5 +printf "%s\n" "$ap_openssl_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -32401,13 +33200,18 @@ if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - if test "x$ap_openssl_base" != "x" -a \ - -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then - PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" - export PKG_CONFIG_PATH + if test "x$ap_openssl_base" != "x"; then + if test -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then + PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + elif test -f "${ap_openssl_base}/lib64/pkgconfig/openssl.pc"; then + PKG_CONFIG_PATH="${ap_openssl_base}/lib64/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + fi fi # Check whether --enable-ssl-staticlib-deps was given. -if test "${enable_ssl_staticlib_deps+set}" = set; then : +if test ${enable_ssl_staticlib_deps+y} +then : enableval=$enable_ssl_staticlib_deps; if test "$enableval" = "yes"; then PKGCONFIG_LIBOPTS="--static" @@ -32724,13 +33528,13 @@ fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version >= 0.9.8a" >&5 -$as_echo_n "checking for OpenSSL version >= 0.9.8a... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenSSL version >= 0.9.8a" >&5 +printf %s "checking for OpenSSL version >= 0.9.8a... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #if !defined(OPENSSL_VERSION_NUMBER) @@ -32743,15 +33547,16 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 -$as_echo "OK" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } ac_cv_openssl=yes -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 -$as_echo "FAILED" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$ac_cv_openssl" = "xyes"; then ap_openssl_libs="${ap_openssl_libs:--lssl -lcrypto} `$apr_config --libs`" @@ -32811,61 +33616,59 @@ liberrors="" - for ac_header in openssl/engine.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "openssl/engine.h" "ac_cv_header_openssl_engine_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_engine_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_ENGINE_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "openssl/engine.h" "ac_cv_header_openssl_engine_h" "$ac_includes_default" +if test "x$ac_cv_header_openssl_engine_h" = xyes +then : + printf "%s\n" "#define HAVE_OPENSSL_ENGINE_H 1" >>confdefs.h fi -done - for ac_func in SSL_CTX_new + for ac_func in SSL_CTX_new do : ac_fn_c_check_func "$LINENO" "SSL_CTX_new" "ac_cv_func_SSL_CTX_new" -if test "x$ac_cv_func_SSL_CTX_new" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SSL_CTX_NEW 1 -_ACEOF +if test "x$ac_cv_func_SSL_CTX_new" = xyes +then : + printf "%s\n" "#define HAVE_SSL_CTX_NEW 1" >>confdefs.h -else +else $as_nop liberrors="yes" fi + done + ac_fn_c_check_func "$LINENO" "OPENSSL_init_ssl" "ac_cv_func_OPENSSL_init_ssl" +if test "x$ac_cv_func_OPENSSL_init_ssl" = xyes +then : + printf "%s\n" "#define HAVE_OPENSSL_INIT_SSL 1" >>confdefs.h - for ac_func in OPENSSL_init_ssl -do : - ac_fn_c_check_func "$LINENO" "OPENSSL_init_ssl" "ac_cv_func_OPENSSL_init_ssl" -if test "x$ac_cv_func_OPENSSL_init_ssl" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_INIT_SSL 1 -_ACEOF +fi + + ac_fn_c_check_func "$LINENO" "ENGINE_init" "ac_cv_func_ENGINE_init" +if test "x$ac_cv_func_ENGINE_init" = xyes +then : + printf "%s\n" "#define HAVE_ENGINE_INIT 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "ENGINE_load_builtin_engines" "ac_cv_func_ENGINE_load_builtin_engines" +if test "x$ac_cv_func_ENGINE_load_builtin_engines" = xyes +then : + printf "%s\n" "#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1" >>confdefs.h - for ac_func in ENGINE_init ENGINE_load_builtin_engines RAND_egd -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "RAND_egd" "ac_cv_func_RAND_egd" +if test "x$ac_cv_func_RAND_egd" = xyes +then : + printf "%s\n" "#define HAVE_RAND_EGD 1" >>confdefs.h fi -done if test "x$liberrors" != "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL libraries are unusable" >&5 -$as_echo "$as_me: WARNING: OpenSSL libraries are unusable" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL libraries are unusable" >&5 +printf "%s\n" "$as_me: WARNING: OpenSSL libraries are unusable" >&2;} fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL version is too old" >&5 -$as_echo "$as_me: WARNING: OpenSSL version is too old" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: OpenSSL version is too old" >&5 +printf "%s\n" "$as_me: WARNING: OpenSSL version is too old" >&2;} fi CPPFLAGS="$saved_CPPFLAGS" @@ -32876,11 +33679,11 @@ ap_openssl_mod_ldflags=$MOD_LDFLAGS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_openssl" >&5 -$as_echo "$ac_cv_openssl" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_openssl" >&5 +printf "%s\n" "$ac_cv_openssl" >&6; } if test "x$ac_cv_openssl" = "xyes"; then -$as_echo "#define HAVE_OPENSSL 1" >>confdefs.h +printf "%s\n" "#define HAVE_OPENSSL 1" >>confdefs.h if test "x$MOD_LDFLAGS" = "x"; then @@ -32927,28 +33730,30 @@ fi if test "x$ac_cv_openssl" = "xno" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libssl (or compatible) not found" >&5 -$as_echo "$as_me: WARNING: libssl (or compatible) not found" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libssl (or compatible) not found" >&5 +printf "%s\n" "$as_me: WARNING: libssl (or compatible) not found" >&2;} enable_md=no fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jansson" >&5 -$as_echo_n "checking for jansson... " >&6; } -if ${ac_cv_jansson+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for jansson" >&5 +printf %s "checking for jansson... " >&6; } +if test ${ac_cv_jansson+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_jansson=no ap_jansson_found="" ap_jansson_base="" ap_jansson_libs="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided jansson base directory" >&5 -$as_echo_n "checking for user-provided jansson base directory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided jansson base directory" >&5 +printf %s "checking for user-provided jansson base directory... " >&6; } # Check whether --with-jansson was given. -if test "${with_jansson+set}" = set; then : +if test ${with_jansson+y} +then : withval=$with_jansson; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_jansson_base="`cd $withval ; pwd`" @@ -32957,11 +33762,11 @@ fi if test "x$ap_jansson_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_jansson_base" >&5 -$as_echo "$ap_jansson_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_jansson_base" >&5 +printf "%s\n" "$ap_jansson_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -32970,8 +33775,8 @@ if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 -$as_echo_n "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 +printf %s "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } if test "x$ap_jansson_base" != "x" ; then if test -f "${ap_jansson_base}/lib/pkgconfig/libjansson.pc"; then PKG_CONFIG_PATH="${ap_jansson_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" @@ -32982,7 +33787,8 @@ fi fi # Check whether --enable-jansson-staticlib-deps was given. -if test "${enable_jansson_staticlib_deps+set}" = set; then : +if test ${enable_jansson_staticlib_deps+y} +then : enableval=$enable_jansson_staticlib_deps; if test "$enableval" = "yes"; then PKGCONFIG_LIBOPTS="--static" @@ -33263,22 +34069,23 @@ /* end confdefs.h. */ #include int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 -$as_echo "OK" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } ac_cv_jansson=yes -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 -$as_echo "FAILED" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$ac_cv_jansson" = "xyes"; then ap_jansson_libs="${ap_jansson_libs:--ljansson} `$apr_config --libs`" @@ -33331,37 +34138,39 @@ LDFLAGS="$saved_LDFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_jansson" >&5 -$as_echo "$ac_cv_jansson" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_jansson" >&5 +printf "%s\n" "$ac_cv_jansson" >&6; } if test "x$ac_cv_jansson" = "xyes"; then -$as_echo "#define HAVE_JANSSON 1" >>confdefs.h +printf "%s\n" "#define HAVE_JANSSON 1" >>confdefs.h fi if test "x$ac_cv_jansson" != "xyes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libjansson not found" >&5 -$as_echo "$as_me: WARNING: libjansson not found" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libjansson not found" >&5 +printf "%s\n" "$as_me: WARNING: libjansson not found" >&2;} enable_md=no fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl" >&5 -$as_echo_n "checking for curl... " >&6; } -if ${ac_cv_curl+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for curl" >&5 +printf %s "checking for curl... " >&6; } +if test ${ac_cv_curl+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_curl=no ap_curl_found="" ap_curl_base="" ap_curl_libs="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for user-provided curl base directory" >&5 -$as_echo_n "checking for user-provided curl base directory... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided curl base directory" >&5 +printf %s "checking for user-provided curl base directory... " >&6; } # Check whether --with-curl was given. -if test "${with_curl+set}" = set; then : +if test ${with_curl+y} +then : withval=$with_curl; if test "x$withval" != "xyes" -a "x$withval" != "x"; then ap_curl_base="`cd $withval ; pwd`" @@ -33370,11 +34179,11 @@ fi if test "x$ap_curl_base" = "x"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ap_curl_base" >&5 -$as_echo "$ap_curl_base" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_curl_base" >&5 +printf "%s\n" "$ap_curl_base" >&6; } fi saved_CPPFLAGS="$CPPFLAGS" @@ -33383,8 +34192,8 @@ if test -n "$PKGCONFIG"; then saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 -$as_echo_n "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 +printf %s "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } if test "x$ap_curl_base" != "x" ; then if test -f "${ap_curl_base}/lib/pkgconfig/libcurl.pc"; then PKG_CONFIG_PATH="${ap_curl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" @@ -33395,7 +34204,8 @@ fi fi # Check whether --enable-curl-staticlib-deps was given. -if test "${enable_curl_staticlib_deps+set}" = set; then : +if test ${enable_curl_staticlib_deps+y} +then : enableval=$enable_curl_staticlib_deps; if test "$enableval" = "yes"; then PKGCONFIG_LIBOPTS="--static" @@ -33670,26 +34480,21 @@ fi fi - for ac_header in curl/curl.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "curl/curl.h" "ac_cv_header_curl_curl_h" "$ac_includes_default" -if test "x$ac_cv_header_curl_curl_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CURL_CURL_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "curl/curl.h" "ac_cv_header_curl_curl_h" "$ac_includes_default" +if test "x$ac_cv_header_curl_curl_h" = xyes +then : + printf "%s\n" "#define HAVE_CURL_CURL_H 1" >>confdefs.h fi -done - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl version >= 7.29" >&5 -$as_echo_n "checking for curl version >= 7.29... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for curl version >= 7.29" >&5 +printf %s "checking for curl version >= 7.29... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main () +main (void) { #if !defined(LIBCURL_VERSION_MAJOR) @@ -33705,15 +34510,16 @@ return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 -$as_echo "OK" >&6; } +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } ac_cv_curl=yes -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 -$as_echo "FAILED" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "x$ac_cv_curl" = "xyes"; then ap_curl_libs="${ap_curl_libs:--lcurl} `$apr_config --libs`" @@ -33766,27 +34572,27 @@ LDFLAGS="$saved_LDFLAGS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_curl" >&5 -$as_echo "$ac_cv_curl" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_curl" >&5 +printf "%s\n" "$ac_cv_curl" >&6; } if test "x$ac_cv_curl" = "xyes"; then -$as_echo "#define HAVE_CURL 1" >>confdefs.h +printf "%s\n" "#define HAVE_CURL 1" >>confdefs.h fi if test "x$ac_cv_curl" != "xyes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libcurl not found" >&5 -$as_echo "$as_me: WARNING: libcurl not found" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libcurl not found" >&5 +printf "%s\n" "$as_me: WARNING: libcurl not found" >&2;} enable_md=no fi - for ac_func in arc4random_buf + + for ac_func in arc4random_buf do : ac_fn_c_check_func "$LINENO" "arc4random_buf" "ac_cv_func_arc4random_buf" -if test "x$ac_cv_func_arc4random_buf" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ARC4RANDOM_BUF 1 -_ACEOF +if test "x$ac_cv_func_arc4random_buf" = xyes +then : + printf "%s\n" "#define HAVE_ARC4RANDOM_BUF 1" >>confdefs.h if test "x$MOD_CPPFLAGS" = "x"; then test "x$silent" != "xyes" && echo " setting MOD_CPPFLAGS to \""-DMD_HAVE_ARC4RANDOM"\"" @@ -33809,8 +34615,8 @@ fi fi -done +done if test "x$enable_md" = "xshared"; then @@ -33837,8 +34643,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_md" >&5 -$as_echo_n "checking whether to enable mod_md... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_md" >&5 +printf %s "checking whether to enable mod_md... " >&6; } if test "$enable_md" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -33847,8 +34653,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_md$_apmod_extra_msg" >&5 -$as_echo "$enable_md$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_md$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_md$_apmod_extra_msg" >&6; } if test "$enable_md" != "no"; then case "$enable_md" in static*) @@ -33960,12 +34766,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_byrequests" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_byrequests... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_byrequests" >&5 +printf %s "checking whether to enable mod_lbmethod_byrequests... " >&6; } # Check whether --enable-lbmethod-byrequests was given. -if test "${enable_lbmethod_byrequests+set}" = set; then : +if test ${enable_lbmethod_byrequests+y} +then : enableval=$enable_lbmethod_byrequests; force_lbmethod_byrequests=$enableval -else +else $as_nop enable_lbmethod_byrequests=$enable_proxy_balancer fi @@ -34019,21 +34826,21 @@ enable_lbmethod_byrequests=no fi if test "$enable_lbmethod_byrequests" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy_balancer" = "no" ; then enable_lbmethod_byrequests=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_byrequests\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_byrequests\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_byrequests\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_byrequests\"" >&2;} elif test "$enable_lbmethod_byrequests" = "static" && test "$enable_proxy_balancer" != "static" ; then enable_lbmethod_byrequests=$enable_proxy_balancer - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_byrequests shared because mod_proxy_balancer is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_lbmethod_byrequests shared because mod_proxy_balancer is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_byrequests shared because mod_proxy_balancer is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_lbmethod_byrequests shared because mod_proxy_balancer is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_byrequests" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_byrequests... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_byrequests" >&5 +printf %s "checking whether to enable mod_lbmethod_byrequests... " >&6; } if test "$enable_lbmethod_byrequests" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -34042,8 +34849,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_byrequests$_apmod_extra_msg" >&5 -$as_echo "$enable_lbmethod_byrequests$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_byrequests$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_lbmethod_byrequests$_apmod_extra_msg" >&6; } if test "$enable_lbmethod_byrequests" != "no"; then case "$enable_lbmethod_byrequests" in static*) @@ -34122,12 +34929,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bytraffic" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_bytraffic... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bytraffic" >&5 +printf %s "checking whether to enable mod_lbmethod_bytraffic... " >&6; } # Check whether --enable-lbmethod-bytraffic was given. -if test "${enable_lbmethod_bytraffic+set}" = set; then : +if test ${enable_lbmethod_bytraffic+y} +then : enableval=$enable_lbmethod_bytraffic; force_lbmethod_bytraffic=$enableval -else +else $as_nop enable_lbmethod_bytraffic=$enable_proxy_balancer fi @@ -34181,21 +34989,21 @@ enable_lbmethod_bytraffic=no fi if test "$enable_lbmethod_bytraffic" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy_balancer" = "no" ; then enable_lbmethod_bytraffic=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bytraffic\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bytraffic\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bytraffic\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bytraffic\"" >&2;} elif test "$enable_lbmethod_bytraffic" = "static" && test "$enable_proxy_balancer" != "static" ; then enable_lbmethod_bytraffic=$enable_proxy_balancer - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_bytraffic shared because mod_proxy_balancer is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_lbmethod_bytraffic shared because mod_proxy_balancer is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_bytraffic shared because mod_proxy_balancer is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_lbmethod_bytraffic shared because mod_proxy_balancer is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bytraffic" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_bytraffic... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bytraffic" >&5 +printf %s "checking whether to enable mod_lbmethod_bytraffic... " >&6; } if test "$enable_lbmethod_bytraffic" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -34204,8 +35012,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_bytraffic$_apmod_extra_msg" >&5 -$as_echo "$enable_lbmethod_bytraffic$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_bytraffic$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_lbmethod_bytraffic$_apmod_extra_msg" >&6; } if test "$enable_lbmethod_bytraffic" != "no"; then case "$enable_lbmethod_bytraffic" in static*) @@ -34284,12 +35092,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bybusyness" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_bybusyness... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bybusyness" >&5 +printf %s "checking whether to enable mod_lbmethod_bybusyness... " >&6; } # Check whether --enable-lbmethod-bybusyness was given. -if test "${enable_lbmethod_bybusyness+set}" = set; then : +if test ${enable_lbmethod_bybusyness+y} +then : enableval=$enable_lbmethod_bybusyness; force_lbmethod_bybusyness=$enableval -else +else $as_nop enable_lbmethod_bybusyness=$enable_proxy_balancer fi @@ -34343,21 +35152,21 @@ enable_lbmethod_bybusyness=no fi if test "$enable_lbmethod_bybusyness" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy_balancer" = "no" ; then enable_lbmethod_bybusyness=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bybusyness\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bybusyness\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bybusyness\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_bybusyness\"" >&2;} elif test "$enable_lbmethod_bybusyness" = "static" && test "$enable_proxy_balancer" != "static" ; then enable_lbmethod_bybusyness=$enable_proxy_balancer - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_bybusyness shared because mod_proxy_balancer is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_lbmethod_bybusyness shared because mod_proxy_balancer is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_bybusyness shared because mod_proxy_balancer is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_lbmethod_bybusyness shared because mod_proxy_balancer is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bybusyness" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_bybusyness... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_bybusyness" >&5 +printf %s "checking whether to enable mod_lbmethod_bybusyness... " >&6; } if test "$enable_lbmethod_bybusyness" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -34366,8 +35175,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_bybusyness$_apmod_extra_msg" >&5 -$as_echo "$enable_lbmethod_bybusyness$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_bybusyness$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_lbmethod_bybusyness$_apmod_extra_msg" >&6; } if test "$enable_lbmethod_bybusyness" != "no"; then case "$enable_lbmethod_bybusyness" in static*) @@ -34446,12 +35255,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_heartbeat" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_heartbeat... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_heartbeat" >&5 +printf %s "checking whether to enable mod_lbmethod_heartbeat... " >&6; } # Check whether --enable-lbmethod-heartbeat was given. -if test "${enable_lbmethod_heartbeat+set}" = set; then : +if test ${enable_lbmethod_heartbeat+y} +then : enableval=$enable_lbmethod_heartbeat; force_lbmethod_heartbeat=$enableval -else +else $as_nop enable_lbmethod_heartbeat=$enable_proxy_balancer fi @@ -34505,21 +35315,21 @@ enable_lbmethod_heartbeat=no fi if test "$enable_lbmethod_heartbeat" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_proxy_balancer" = "no" ; then enable_lbmethod_heartbeat=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_heartbeat\"" >&5 -$as_echo "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_heartbeat\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_heartbeat\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_proxy_balancer is disabled but required for mod_lbmethod_heartbeat\"" >&2;} elif test "$enable_lbmethod_heartbeat" = "static" && test "$enable_proxy_balancer" != "static" ; then enable_lbmethod_heartbeat=$enable_proxy_balancer - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_heartbeat shared because mod_proxy_balancer is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_lbmethod_heartbeat shared because mod_proxy_balancer is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_lbmethod_heartbeat shared because mod_proxy_balancer is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_lbmethod_heartbeat shared because mod_proxy_balancer is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_heartbeat" >&5 -$as_echo_n "checking whether to enable mod_lbmethod_heartbeat... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_lbmethod_heartbeat" >&5 +printf %s "checking whether to enable mod_lbmethod_heartbeat... " >&6; } if test "$enable_lbmethod_heartbeat" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -34528,8 +35338,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_heartbeat$_apmod_extra_msg" >&5 -$as_echo "$enable_lbmethod_heartbeat$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lbmethod_heartbeat$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_lbmethod_heartbeat$_apmod_extra_msg" >&6; } if test "$enable_lbmethod_heartbeat" != "no"; then case "$enable_lbmethod_heartbeat" in static*) @@ -34627,38 +35437,629 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which MPM to use by default" >&5 -$as_echo_n "checking which MPM to use by default... " >&6; } + + + current_dir=tls + modpath_current=modules/tls + modpath_static= + modpath_shared= + for var in CFLAGS CXXFLAGS CPPFLAGS LDFLAGS LIBS INCLUDES; do + eval MOD_$var= + done + test -d tls || $srcdir/build/mkdir.sh $modpath_current + > $modpath_current/modules.mk + + +tls_objs="mod_tls.lo tls_cache.lo tls_cert.lo tls_conf.lo tls_core.lo tls_filter.lo tls_ocsp.lo tls_proto.lo tls_util.lo tls_var.lo " + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_tls" >&5 +printf %s "checking whether to enable mod_tls... " >&6; } + # Check whether --enable-tls was given. +if test ${enable_tls+y} +then : + enableval=$enable_tls; force_tls=$enableval +else $as_nop + enable_tls=most +fi + + _apmod_extra_msg="" + case "$enable_tls" in + yes|static|shared) + _apmod_required="yes" + ;; + *) + _apmod_required="no" + ;; + esac + if test "$enable_tls" = "static" -o "$enable_tls" = "shared"; then + : + elif test "$enable_tls" = "yes"; then + enable_tls=$module_default + elif test "$enable_tls" = "few"; then + if test "$module_selection" = "few" -o "$module_selection" = "most" -o \ + "$module_selection" = "all" -o "$module_selection" = "reallyall" + then + enable_tls=$module_default + else + enable_tls=no + fi + _apmod_extra_msg=" ($module_selection)" + elif test "$enable_tls" = "most"; then + if test "$module_selection" = "most" -o "$module_selection" = "all" -o \ + "$module_selection" = "reallyall" + then + enable_tls=$module_default + else + enable_tls=no + fi + _apmod_extra_msg=" ($module_selection)" + elif test "$enable_tls" = "all" -o "$enable_tls" = "maybe-all"; then + if test "$module_selection" = "all" -o "$module_selection" = "reallyall" + then + enable_tls=$module_default + _apmod_extra_msg=" ($module_selection)" + else + enable_tls=no + fi + elif test "$enable_tls" = "reallyall" -o "$enable_tls" = "no" ; then + if test "$module_selection" = "reallyall" -a "$force_tls" != "no" ; then + enable_tls=$module_default + _apmod_extra_msg=" ($module_selection)" + else + enable_tls=no + fi + else + enable_tls=no + fi + if test "$enable_tls" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } + : + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rustls" >&5 +printf %s "checking for rustls... " >&6; } +if test ${ac_cv_rustls+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + ac_cv_rustls=no + ap_rustls_found="" + ap_rustls_base="" + ap_rustls_libs="" + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for user-provided rustls base directory" >&5 +printf %s "checking for user-provided rustls base directory... " >&6; } + +# Check whether --with-rustls was given. +if test ${with_rustls+y} +then : + withval=$with_rustls; + if test "x$withval" != "xyes" -a "x$withval" != "x"; then + ap_rustls_base="`cd $withval ; pwd`" + fi + +fi + + if test "x$ap_rustls_base" = "x"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ap_rustls_base" >&5 +printf "%s\n" "$ap_rustls_base" >&6; } + fi + + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + saved_LDFLAGS="$LDFLAGS" + + if test -n "$PKGCONFIG"; then + saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pkg-config along $PKG_CONFIG_PATH" >&5 +printf %s "checking for pkg-config along $PKG_CONFIG_PATH... " >&6; } + if test "x$ap_rustls_base" != "x" ; then + if test -f "${ap_rustls_base}/lib/pkgconfig/librustls.pc"; then + PKG_CONFIG_PATH="${ap_rustls_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + elif test -f "${ap_rustls_base}/lib64/pkgconfig/librustls.pc"; then + PKG_CONFIG_PATH="${ap_rustls_base}/lib64/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + fi + fi + ap_rustls_libs="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-l --silence-errors librustls`" + if test $? -eq 0; then + ap_rustls_found="yes" + pkglookup="`$PKGCONFIG --cflags-only-I librustls`" + + if test "x$CPPFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"$pkglookup\"" + CPPFLAGS="$pkglookup" + else + apr_addto_bugger="$pkglookup" + 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$MOD_CFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting MOD_CFLAGS to \"$pkglookup\"" + MOD_CFLAGS="$pkglookup" + else + apr_addto_bugger="$pkglookup" + for i in $apr_addto_bugger; do + apr_addto_duplicate="0" + for j in $MOD_CFLAGS; 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 MOD_CFLAGS" + MOD_CFLAGS="$MOD_CFLAGS $i" + fi + done + fi + + pkglookup="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-L librustls`" + + if test "x$LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$pkglookup\"" + LDFLAGS="$pkglookup" + else + apr_addto_bugger="$pkglookup" + 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 + + + if test "x$MOD_LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting MOD_LDFLAGS to \"$pkglookup\"" + MOD_LDFLAGS="$pkglookup" + else + apr_addto_bugger="$pkglookup" + for i in $apr_addto_bugger; do + apr_addto_duplicate="0" + for j in $MOD_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 MOD_LDFLAGS" + MOD_LDFLAGS="$MOD_LDFLAGS $i" + fi + done + fi + + pkglookup="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-other librustls`" + + if test "x$LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$pkglookup\"" + LDFLAGS="$pkglookup" + else + apr_addto_bugger="$pkglookup" + 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 + + + if test "x$MOD_LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting MOD_LDFLAGS to \"$pkglookup\"" + MOD_LDFLAGS="$pkglookup" + else + apr_addto_bugger="$pkglookup" + for i in $apr_addto_bugger; do + apr_addto_duplicate="0" + for j in $MOD_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 MOD_LDFLAGS" + MOD_LDFLAGS="$MOD_LDFLAGS $i" + fi + done + fi + + fi + PKG_CONFIG_PATH="$saved_PKG_CONFIG_PATH" + fi + + if test "x$ap_rustls_base" != "x" -a "x$ap_rustls_found" = "x"; then + + if test "x$CPPFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting CPPFLAGS to \"-I$ap_rustls_base/include\"" + CPPFLAGS="-I$ap_rustls_base/include" + else + apr_addto_bugger="-I$ap_rustls_base/include" + 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$MOD_CFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting MOD_CFLAGS to \"-I$ap_rustls_base/include\"" + MOD_CFLAGS="-I$ap_rustls_base/include" + else + apr_addto_bugger="-I$ap_rustls_base/include" + for i in $apr_addto_bugger; do + apr_addto_duplicate="0" + for j in $MOD_CFLAGS; 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 MOD_CFLAGS" + MOD_CFLAGS="$MOD_CFLAGS $i" + fi + done + fi + + + if test "x$LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting LDFLAGS to \"-L$ap_rustls_base/lib\"" + LDFLAGS="-L$ap_rustls_base/lib" + else + apr_addto_bugger="-L$ap_rustls_base/lib" + 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 + + + if test "x$MOD_LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting MOD_LDFLAGS to \"-L$ap_rustls_base/lib\"" + MOD_LDFLAGS="-L$ap_rustls_base/lib" + else + apr_addto_bugger="-L$ap_rustls_base/lib" + for i in $apr_addto_bugger; do + apr_addto_duplicate="0" + for j in $MOD_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 MOD_LDFLAGS" + MOD_LDFLAGS="$MOD_LDFLAGS $i" + fi + done + fi + + if test "x$ap_platform_runtime_link_flag" != "x"; then + + if test "x$LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting LDFLAGS to \"$ap_platform_runtime_link_flag$ap_rustls_base/lib\"" + LDFLAGS="$ap_platform_runtime_link_flag$ap_rustls_base/lib" + else + apr_addto_bugger="$ap_platform_runtime_link_flag$ap_rustls_base/lib" + 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 + + + if test "x$MOD_LDFLAGS" = "x"; then + test "x$silent" != "xyes" && echo " setting MOD_LDFLAGS to \"$ap_platform_runtime_link_flag$ap_rustls_base/lib\"" + MOD_LDFLAGS="$ap_platform_runtime_link_flag$ap_rustls_base/lib" + else + apr_addto_bugger="$ap_platform_runtime_link_flag$ap_rustls_base/lib" + for i in $apr_addto_bugger; do + apr_addto_duplicate="0" + for j in $MOD_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 MOD_LDFLAGS" + MOD_LDFLAGS="$MOD_LDFLAGS $i" + fi + done + fi + + fi + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rustls version >= 0.8.2" >&5 +printf %s "checking for rustls version >= 0.8.2... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ + +rustls_version(); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OK" >&5 +printf "%s\n" "OK" >&6; } + ac_cv_rustls=yes +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FAILED" >&5 +printf "%s\n" "FAILED" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + LDFLAGS="$saved_LDFLAGS" + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rustls" >&5 +printf "%s\n" "$ac_cv_rustls" >&6; } + if test "x$ac_cv_rustls" = "xyes"; then + +printf "%s\n" "#define HAVE_RUSTLS 1" >>confdefs.h + + fi + + if test "$ac_cv_rustls" = "yes" ; then + if test "x$enable_tls" = "xshared"; then + case `uname` in + "Darwin") + MOD_TLS_LINK_LIBS="-lrustls -framework Security -framework Foundation" + ;; + *) + MOD_TLS_LINK_LIBS="-lrustls" + ;; + esac + # The only symbol which needs to be exported is the module + # structure, so ask libtool to hide everything else: + + if test "x$MOD_TLS_LDADD" = "x"; then + test "x$silent" != "xyes" && echo " setting MOD_TLS_LDADD to \"$MOD_TLS_LINK_LIBS -export-symbols-regex tls_module\"" + MOD_TLS_LDADD="$MOD_TLS_LINK_LIBS -export-symbols-regex tls_module" + else + apr_addto_bugger="$MOD_TLS_LINK_LIBS -export-symbols-regex tls_module" + for i in $apr_addto_bugger; do + apr_addto_duplicate="0" + for j in $MOD_TLS_LDADD; 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 MOD_TLS_LDADD" + MOD_TLS_LDADD="$MOD_TLS_LDADD $i" + fi + done + fi + + fi + else + enable_tls=no + fi + + : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_tls" >&5 +printf %s "checking whether to enable mod_tls... " >&6; } + if test "$enable_tls" = "no"; then + if test "$_apmod_required" = "no"; then + _apmod_extra_msg=" (disabled)" + else + as_fn_error $? "mod_tls has been requested but can not be built due to prerequisite failures" "$LINENO" 5 + fi + fi + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_tls$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_tls$_apmod_extra_msg" >&6; } + if test "$enable_tls" != "no"; then + case "$enable_tls" in + static*) + MODLIST="$MODLIST tls" + if test "tls" = "so"; then + sharedobjs=yes + fi + shared="";; + *) + sharedobjs=yes + shared=yes + DSO_MODULES="$DSO_MODULES tls" + if test "most" = "yes" ; then + ENABLED_DSO_MODULES="${ENABLED_DSO_MODULES},tls" + fi + ;; + esac + + + if test -z "$tls_objs"; then + objects="mod_tls.lo" + else + objects="$tls_objs" + 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_tls.la" + BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname" + modpath_static="$modpath_static $libname" + cat >>$modpath_current/modules.mk<>$modpath_current/modules.mk<> $modpath_current/modules.mk + echo "static = $modpath_static" >> $modpath_current/modules.mk + echo "shared = $modpath_shared" >> $modpath_current/modules.mk + for var in CFLAGS CXXFLAGS CPPFLAGS LDFLAGS LIBS INCLUDES; do + if eval val=\"\$MOD_$var\"; test -n "$val"; then + echo "MOD_$var = $val" >> $modpath_current/modules.mk + fi + done + if test ! -z "$modpath_static" -o ! -z "$modpath_shared"; then + MODULE_DIRS="$MODULE_DIRS $current_dir" + else + MODULE_CLEANDIRS="$MODULE_CLEANDIRS $current_dir" + fi + + APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES $modpath_current/Makefile" + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which MPM to use by default" >&5 +printf %s "checking which MPM to use by default... " >&6; } # Check whether --with-mpm was given. -if test "${with_mpm+set}" = set; then : +if test ${with_mpm+y} +then : withval=$with_mpm; default_mpm=$withval - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 -$as_echo "$withval" >&6; }; + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 +printf "%s\n" "$withval" >&6; }; -else +else $as_nop if ap_mpm_is_supported "winnt"; then default_mpm=winnt - { $as_echo "$as_me:${as_lineno-$LINENO}: result: winnt" >&5 -$as_echo "winnt" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: winnt" >&5 +printf "%s\n" "winnt" >&6; } elif ap_mpm_is_supported "mpmt_os2"; then default_mpm=mpmt_os2 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: mpmt_os2" >&5 -$as_echo "mpmt_os2" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: mpmt_os2" >&5 +printf "%s\n" "mpmt_os2" >&6; } elif ap_mpm_is_supported "event"; then default_mpm=event - { $as_echo "$as_me:${as_lineno-$LINENO}: result: event" >&5 -$as_echo "event" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: event" >&5 +printf "%s\n" "event" >&6; } elif ap_mpm_is_supported "worker"; then default_mpm=worker - { $as_echo "$as_me:${as_lineno-$LINENO}: result: worker - event is not supported" >&5 -$as_echo "worker - event is not supported" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: worker - event is not supported" >&5 +printf "%s\n" "worker - event is not supported" >&6; } else default_mpm=prefork - { $as_echo "$as_me:${as_lineno-$LINENO}: result: prefork - event and worker are not supported" >&5 -$as_echo "prefork - event and worker are not supported" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: prefork - event and worker are not supported" >&5 +printf "%s\n" "prefork - event and worker are not supported" >&6; } fi fi @@ -34674,7 +36075,8 @@ # Check whether --enable-mpms-shared was given. -if test "${enable_mpms_shared+set}" = set; then : +if test ${enable_mpms_shared+y} +then : enableval=$enable_mpms_shared; if test "$enableval" = "no"; then mpm_build=static @@ -34715,7 +36117,7 @@ done fi -else +else $as_nop mpm_build=static fi @@ -34830,16 +36232,12 @@ fi fi - for ac_func in pthread_kill -do : - ac_fn_c_check_func "$LINENO" "pthread_kill" "ac_cv_func_pthread_kill" -if test "x$ac_cv_func_pthread_kill" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PTHREAD_KILL 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "pthread_kill" "ac_cv_func_pthread_kill" +if test "x$ac_cv_func_pthread_kill" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_KILL 1" >>confdefs.h fi -done fi @@ -35057,16 +36455,12 @@ fi fi - for ac_func in pthread_kill -do : - ac_fn_c_check_func "$LINENO" "pthread_kill" "ac_cv_func_pthread_kill" -if test "x$ac_cv_func_pthread_kill" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PTHREAD_KILL 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "pthread_kill" "ac_cv_func_pthread_kill" +if test "x$ac_cv_func_pthread_kill" = xyes +then : + printf "%s\n" "#define HAVE_PTHREAD_KILL 1" >>confdefs.h fi -done fi @@ -35094,12 +36488,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_unixd" >&5 -$as_echo_n "checking whether to enable mod_unixd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_unixd" >&5 +printf %s "checking whether to enable mod_unixd... " >&6; } # Check whether --enable-unixd was given. -if test "${enable_unixd+set}" = set; then : +if test ${enable_unixd+y} +then : enableval=$enable_unixd; force_unixd=$enableval -else +else $as_nop enable_unixd=$unixd_mods_enable fi @@ -35155,8 +36550,8 @@ if test "$enable_unixd" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_unixd$_apmod_extra_msg" >&5 -$as_echo "$enable_unixd$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_unixd$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_unixd$_apmod_extra_msg" >&6; } if test "$enable_unixd" != "no"; then case "$enable_unixd" in static*) @@ -35235,12 +36630,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_privileges" >&5 -$as_echo_n "checking whether to enable mod_privileges... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_privileges" >&5 +printf %s "checking whether to enable mod_privileges... " >&6; } # Check whether --enable-privileges was given. -if test "${enable_privileges+set}" = set; then : +if test ${enable_privileges+y} +then : enableval=$enable_privileges; force_privileges=$enableval -else +else $as_nop enable_privileges=no fi @@ -35294,33 +36690,31 @@ enable_privileges=no fi if test "$enable_privileges" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : - for ac_header in priv.h + for ac_header in priv.h do : - ac_fn_c_check_header_mongrel "$LINENO" "priv.h" "ac_cv_header_priv_h" "$ac_includes_default" -if test "x$ac_cv_header_priv_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PRIV_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "priv.h" "ac_cv_header_priv_h" "$ac_includes_default" +if test "x$ac_cv_header_priv_h" = xyes +then : + printf "%s\n" "#define HAVE_PRIV_H 1" >>confdefs.h ap_HAVE_PRIV_H="yes" -else +else $as_nop ap_HAVE_PRIV_H="no" fi done - if test $ap_HAVE_PRIV_H = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support privileges." >&5 -$as_echo "$as_me: WARNING: Your system does not support privileges." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support privileges." >&5 +printf "%s\n" "$as_me: WARNING: Your system does not support privileges." >&2;} enable_privileges="no" fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_privileges" >&5 -$as_echo_n "checking whether to enable mod_privileges... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_privileges" >&5 +printf %s "checking whether to enable mod_privileges... " >&6; } if test "$enable_privileges" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -35329,8 +36723,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_privileges$_apmod_extra_msg" >&5 -$as_echo "$enable_privileges$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_privileges$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_privileges$_apmod_extra_msg" >&6; } if test "$enable_privileges" != "no"; then case "$enable_privileges" in static*) @@ -35410,12 +36804,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_systemd" >&5 -$as_echo_n "checking whether to enable mod_systemd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_systemd" >&5 +printf %s "checking whether to enable mod_systemd... " >&6; } # Check whether --enable-systemd was given. -if test "${enable_systemd+set}" = set; then : +if test ${enable_systemd+y} +then : enableval=$enable_systemd; force_systemd=$enableval -else +else $as_nop enable_systemd=no fi @@ -35469,13 +36864,13 @@ enable_systemd=no fi if test "$enable_systemd" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support systemd." >&5 -$as_echo "$as_me: WARNING: Your system does not support systemd." >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Your system does not support systemd." >&5 +printf "%s\n" "$as_me: WARNING: Your system does not support systemd." >&2;} enable_systemd="no" else @@ -35502,8 +36897,8 @@ fi : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_systemd" >&5 -$as_echo_n "checking whether to enable mod_systemd... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_systemd" >&5 +printf %s "checking whether to enable mod_systemd... " >&6; } if test "$enable_systemd" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -35512,8 +36907,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_systemd$_apmod_extra_msg" >&5 -$as_echo "$enable_systemd$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_systemd$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_systemd$_apmod_extra_msg" >&6; } if test "$enable_systemd" != "no"; then case "$enable_systemd" in static*) @@ -35658,12 +37053,13 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_heartbeat" >&5 -$as_echo_n "checking whether to enable mod_heartbeat... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_heartbeat" >&5 +printf %s "checking whether to enable mod_heartbeat... " >&6; } # Check whether --enable-heartbeat was given. -if test "${enable_heartbeat+set}" = set; then : +if test ${enable_heartbeat+y} +then : enableval=$enable_heartbeat; force_heartbeat=$enableval -else +else $as_nop enable_heartbeat=maybe-all fi @@ -35717,21 +37113,21 @@ enable_heartbeat=no fi if test "$enable_heartbeat" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_watchdog" = "no" ; then enable_heartbeat=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_watchdog is disabled but required for mod_heartbeat\"" >&5 -$as_echo "$as_me: WARNING: \"mod_watchdog is disabled but required for mod_heartbeat\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_watchdog is disabled but required for mod_heartbeat\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_watchdog is disabled but required for mod_heartbeat\"" >&2;} elif test "$enable_heartbeat" = "static" && test "$enable_watchdog" != "static" ; then enable_heartbeat=$enable_watchdog - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_heartbeat shared because mod_watchdog is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_heartbeat shared because mod_watchdog is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_heartbeat shared because mod_watchdog is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_heartbeat shared because mod_watchdog is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_heartbeat" >&5 -$as_echo_n "checking whether to enable mod_heartbeat... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_heartbeat" >&5 +printf %s "checking whether to enable mod_heartbeat... " >&6; } if test "$enable_heartbeat" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -35740,8 +37136,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_heartbeat$_apmod_extra_msg" >&5 -$as_echo "$enable_heartbeat$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_heartbeat$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_heartbeat$_apmod_extra_msg" >&6; } if test "$enable_heartbeat" != "no"; then case "$enable_heartbeat" in static*) @@ -35820,12 +37216,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_heartmonitor" >&5 -$as_echo_n "checking whether to enable mod_heartmonitor... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_heartmonitor" >&5 +printf %s "checking whether to enable mod_heartmonitor... " >&6; } # Check whether --enable-heartmonitor was given. -if test "${enable_heartmonitor+set}" = set; then : +if test ${enable_heartmonitor+y} +then : enableval=$enable_heartmonitor; force_heartmonitor=$enableval -else +else $as_nop enable_heartmonitor=maybe-all fi @@ -35881,8 +37278,8 @@ if test "$enable_heartmonitor" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_heartmonitor$_apmod_extra_msg" >&5 -$as_echo "$enable_heartmonitor$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_heartmonitor$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_heartmonitor$_apmod_extra_msg" >&6; } if test "$enable_heartmonitor" != "no"; then case "$enable_heartmonitor" in static*) @@ -36002,12 +37399,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav" >&5 -$as_echo_n "checking whether to enable mod_dav... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav" >&5 +printf %s "checking whether to enable mod_dav... " >&6; } # Check whether --enable-dav was given. -if test "${enable_dav+set}" = set; then : +if test ${enable_dav+y} +then : enableval=$enable_dav; force_dav=$enableval -else +else $as_nop enable_dav=$dav_enable fi @@ -36063,8 +37461,8 @@ if test "$enable_dav" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dav$_apmod_extra_msg" >&5 -$as_echo "$enable_dav$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_dav$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_dav$_apmod_extra_msg" >&6; } if test "$enable_dav" != "no"; then case "$enable_dav" in static*) @@ -36203,12 +37601,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_status" >&5 -$as_echo_n "checking whether to enable mod_status... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_status" >&5 +printf %s "checking whether to enable mod_status... " >&6; } # Check whether --enable-status was given. -if test "${enable_status+set}" = set; then : +if test ${enable_status+y} +then : enableval=$enable_status; force_status=$enableval -else +else $as_nop enable_status=yes fi @@ -36264,8 +37663,8 @@ if test "$enable_status" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_status$_apmod_extra_msg" >&5 -$as_echo "$enable_status$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_status$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_status$_apmod_extra_msg" >&6; } if test "$enable_status" != "no"; then case "$enable_status" in static*) @@ -36344,12 +37743,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_autoindex" >&5 -$as_echo_n "checking whether to enable mod_autoindex... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_autoindex" >&5 +printf %s "checking whether to enable mod_autoindex... " >&6; } # Check whether --enable-autoindex was given. -if test "${enable_autoindex+set}" = set; then : +if test ${enable_autoindex+y} +then : enableval=$enable_autoindex; force_autoindex=$enableval -else +else $as_nop enable_autoindex=yes fi @@ -36405,8 +37805,8 @@ if test "$enable_autoindex" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_autoindex$_apmod_extra_msg" >&5 -$as_echo "$enable_autoindex$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_autoindex$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_autoindex$_apmod_extra_msg" >&6; } if test "$enable_autoindex" != "no"; then case "$enable_autoindex" in static*) @@ -36485,12 +37885,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_asis" >&5 -$as_echo_n "checking whether to enable mod_asis... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_asis" >&5 +printf %s "checking whether to enable mod_asis... " >&6; } # Check whether --enable-asis was given. -if test "${enable_asis+set}" = set; then : +if test ${enable_asis+y} +then : enableval=$enable_asis; force_asis=$enableval -else +else $as_nop enable_asis=maybe-all fi @@ -36546,8 +37947,8 @@ if test "$enable_asis" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_asis$_apmod_extra_msg" >&5 -$as_echo "$enable_asis$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_asis$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_asis$_apmod_extra_msg" >&6; } if test "$enable_asis" != "no"; then case "$enable_asis" in static*) @@ -36626,12 +38027,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_info" >&5 -$as_echo_n "checking whether to enable mod_info... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_info" >&5 +printf %s "checking whether to enable mod_info... " >&6; } # Check whether --enable-info was given. -if test "${enable_info+set}" = set; then : +if test ${enable_info+y} +then : enableval=$enable_info; force_info=$enableval -else +else $as_nop enable_info=most fi @@ -36687,8 +38089,8 @@ if test "$enable_info" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_info$_apmod_extra_msg" >&5 -$as_echo "$enable_info$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_info$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_info$_apmod_extra_msg" >&6; } if test "$enable_info" != "no"; then case "$enable_info" in static*) @@ -36767,12 +38169,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_suexec" >&5 -$as_echo_n "checking whether to enable mod_suexec... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_suexec" >&5 +printf %s "checking whether to enable mod_suexec... " >&6; } # Check whether --enable-suexec was given. -if test "${enable_suexec+set}" = set; then : +if test ${enable_suexec+y} +then : enableval=$enable_suexec; force_suexec=$enableval -else +else $as_nop enable_suexec=no fi @@ -36826,14 +38229,14 @@ enable_suexec=no fi if test "$enable_suexec" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : other_targets=suexec : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_suexec" >&5 -$as_echo_n "checking whether to enable mod_suexec... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_suexec" >&5 +printf %s "checking whether to enable mod_suexec... " >&6; } if test "$enable_suexec" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -36842,8 +38245,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_suexec$_apmod_extra_msg" >&5 -$as_echo "$enable_suexec$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_suexec$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_suexec$_apmod_extra_msg" >&6; } if test "$enable_suexec" != "no"; then case "$enable_suexec" in static*) @@ -36938,12 +38341,13 @@ if test $cgid_needed = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgid" >&5 -$as_echo_n "checking whether to enable mod_cgid... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgid" >&5 +printf %s "checking whether to enable mod_cgid... " >&6; } # Check whether --enable-cgid was given. -if test "${enable_cgid+set}" = set; then : +if test ${enable_cgid+y} +then : enableval=$enable_cgid; force_cgid=$enableval -else +else $as_nop enable_cgid=most fi @@ -36997,8 +38401,8 @@ enable_cgid=no fi if test "$enable_cgid" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } : case $host in @@ -37013,13 +38417,13 @@ patch_id="120664" ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown platform" >&5 -$as_echo "$as_me: WARNING: Unknown platform" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Unknown platform" >&5 +printf "%s\n" "$as_me: WARNING: Unknown platform" >&2;} patch_id="120664" ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris patch $patch_id" >&5 -$as_echo_n "checking for Solaris patch $patch_id... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris patch $patch_id" >&5 +printf %s "checking for Solaris patch $patch_id... " >&6; } showrev -p | grep "$patch_id" >/dev/null 2>&1 if test $? -eq 1; then as_fn_error $? "Please apply either patch # 120664 (Sparc) or # 120665 (x86). @@ -37030,8 +38434,8 @@ - switch to the prefork MPM For more info: " "$LINENO" 5 else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi ;; esac @@ -37039,8 +38443,8 @@ esac : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgid" >&5 -$as_echo_n "checking whether to enable mod_cgid... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgid" >&5 +printf %s "checking whether to enable mod_cgid... " >&6; } if test "$enable_cgid" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -37049,8 +38453,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cgid$_apmod_extra_msg" >&5 -$as_echo "$enable_cgid$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cgid$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cgid$_apmod_extra_msg" >&6; } if test "$enable_cgid" != "no"; then case "$enable_cgid" in static*) @@ -37129,12 +38533,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgi" >&5 -$as_echo_n "checking whether to enable mod_cgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgi" >&5 +printf %s "checking whether to enable mod_cgi... " >&6; } # Check whether --enable-cgi was given. -if test "${enable_cgi+set}" = set; then : +if test ${enable_cgi+y} +then : enableval=$enable_cgi; force_cgi=$enableval -else +else $as_nop enable_cgi=no fi @@ -37190,8 +38595,8 @@ if test "$enable_cgi" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cgi$_apmod_extra_msg" >&5 -$as_echo "$enable_cgi$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cgi$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cgi$_apmod_extra_msg" >&6; } if test "$enable_cgi" != "no"; then case "$enable_cgi" in static*) @@ -37271,12 +38676,13 @@ else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgi" >&5 -$as_echo_n "checking whether to enable mod_cgi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgi" >&5 +printf %s "checking whether to enable mod_cgi... " >&6; } # Check whether --enable-cgi was given. -if test "${enable_cgi+set}" = set; then : +if test ${enable_cgi+y} +then : enableval=$enable_cgi; force_cgi=$enableval -else +else $as_nop enable_cgi=most fi @@ -37332,8 +38738,8 @@ if test "$enable_cgi" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cgi$_apmod_extra_msg" >&5 -$as_echo "$enable_cgi$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cgi$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cgi$_apmod_extra_msg" >&6; } if test "$enable_cgi" != "no"; then case "$enable_cgi" in static*) @@ -37412,12 +38818,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgid" >&5 -$as_echo_n "checking whether to enable mod_cgid... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_cgid" >&5 +printf %s "checking whether to enable mod_cgid... " >&6; } # Check whether --enable-cgid was given. -if test "${enable_cgid+set}" = set; then : +if test ${enable_cgid+y} +then : enableval=$enable_cgid; force_cgid=$enableval -else +else $as_nop enable_cgid=no fi @@ -37473,8 +38880,8 @@ if test "$enable_cgid" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cgid$_apmod_extra_msg" >&5 -$as_echo "$enable_cgid$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_cgid$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_cgid$_apmod_extra_msg" >&6; } if test "$enable_cgid" != "no"; then case "$enable_cgid" in static*) @@ -37718,12 +39125,13 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_fs" >&5 -$as_echo_n "checking whether to enable mod_dav_fs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_fs" >&5 +printf %s "checking whether to enable mod_dav_fs... " >&6; } # Check whether --enable-dav-fs was given. -if test "${enable_dav_fs+set}" = set; then : +if test ${enable_dav_fs+y} +then : enableval=$enable_dav_fs; force_dav_fs=$enableval -else +else $as_nop enable_dav_fs=$dav_fs_enable fi @@ -37777,21 +39185,21 @@ enable_dav_fs=no fi if test "$enable_dav_fs" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_dav" = "no" ; then enable_dav_fs=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_dav is disabled but required for mod_dav_fs\"" >&5 -$as_echo "$as_me: WARNING: \"mod_dav is disabled but required for mod_dav_fs\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_dav is disabled but required for mod_dav_fs\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_dav is disabled but required for mod_dav_fs\"" >&2;} elif test "$enable_dav_fs" = "static" && test "$enable_dav" != "static" ; then enable_dav_fs=$enable_dav - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_dav_fs shared because mod_dav is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_dav_fs shared because mod_dav is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_dav_fs shared because mod_dav is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_dav_fs shared because mod_dav is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_fs" >&5 -$as_echo_n "checking whether to enable mod_dav_fs... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_fs" >&5 +printf %s "checking whether to enable mod_dav_fs... " >&6; } if test "$enable_dav_fs" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -37800,8 +39208,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dav_fs$_apmod_extra_msg" >&5 -$as_echo "$enable_dav_fs$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_dav_fs$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_dav_fs$_apmod_extra_msg" >&6; } if test "$enable_dav_fs" != "no"; then case "$enable_dav_fs" in static*) @@ -37923,12 +39331,13 @@ esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_lock" >&5 -$as_echo_n "checking whether to enable mod_dav_lock... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_lock" >&5 +printf %s "checking whether to enable mod_dav_lock... " >&6; } # Check whether --enable-dav-lock was given. -if test "${enable_dav_lock+set}" = set; then : +if test ${enable_dav_lock+y} +then : enableval=$enable_dav_lock; force_dav_lock=$enableval -else +else $as_nop enable_dav_lock=maybe-all fi @@ -37982,21 +39391,21 @@ enable_dav_lock=no fi if test "$enable_dav_lock" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 -$as_echo "checking dependencies" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking dependencies" >&5 +printf "%s\n" "checking dependencies" >&6; } if test "$enable_dav" = "no" ; then enable_dav_lock=no - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_dav is disabled but required for mod_dav_lock\"" >&5 -$as_echo "$as_me: WARNING: \"mod_dav is disabled but required for mod_dav_lock\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"mod_dav is disabled but required for mod_dav_lock\"" >&5 +printf "%s\n" "$as_me: WARNING: \"mod_dav is disabled but required for mod_dav_lock\"" >&2;} elif test "$enable_dav_lock" = "static" && test "$enable_dav" != "static" ; then enable_dav_lock=$enable_dav - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_dav_lock shared because mod_dav is built shared\"" >&5 -$as_echo "$as_me: WARNING: \"building mod_dav_lock shared because mod_dav is built shared\"" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"building mod_dav_lock shared because mod_dav is built shared\"" >&5 +printf "%s\n" "$as_me: WARNING: \"building mod_dav_lock shared because mod_dav is built shared\"" >&2;} else : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_lock" >&5 -$as_echo_n "checking whether to enable mod_dav_lock... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dav_lock" >&5 +printf %s "checking whether to enable mod_dav_lock... " >&6; } if test "$enable_dav_lock" = "no"; then if test "$_apmod_required" = "no"; then _apmod_extra_msg=" (disabled)" @@ -38005,8 +39414,8 @@ fi fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dav_lock$_apmod_extra_msg" >&5 -$as_echo "$enable_dav_lock$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_dav_lock$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_dav_lock$_apmod_extra_msg" >&6; } if test "$enable_dav_lock" != "no"; then case "$enable_dav_lock" in static*) @@ -38104,11 +39513,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for extra modules" >&5 -$as_echo_n "checking for extra modules... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for extra modules" >&5 +printf %s "checking for extra modules... " >&6; } # Check whether --with-module was given. -if test "${with_module+set}" = set; then : +if test ${with_module+y} +then : withval=$with_module; withval=`echo $withval | sed -e 's/,/ /g'` for mod in $withval @@ -38158,13 +39568,13 @@ done if test ! -z "$EXTRA_MODLIST"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: added:$EXTRA_MODLIST" >&5 -$as_echo "added:$EXTRA_MODLIST" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: added:$EXTRA_MODLIST" >&5 +printf "%s\n" "added:$EXTRA_MODLIST" >&6; } fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } fi @@ -38184,12 +39594,13 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_vhost_alias" >&5 -$as_echo_n "checking whether to enable mod_vhost_alias... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_vhost_alias" >&5 +printf %s "checking whether to enable mod_vhost_alias... " >&6; } # Check whether --enable-vhost-alias was given. -if test "${enable_vhost_alias+set}" = set; then : +if test ${enable_vhost_alias+y} +then : enableval=$enable_vhost_alias; force_vhost_alias=$enableval -else +else $as_nop enable_vhost_alias=most fi @@ -38245,8 +39656,8 @@ if test "$enable_vhost_alias" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_vhost_alias$_apmod_extra_msg" >&5 -$as_echo "$enable_vhost_alias$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_vhost_alias$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_vhost_alias$_apmod_extra_msg" >&6; } if test "$enable_vhost_alias" != "no"; then case "$enable_vhost_alias" in static*) @@ -38325,12 +39736,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_negotiation" >&5 -$as_echo_n "checking whether to enable mod_negotiation... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_negotiation" >&5 +printf %s "checking whether to enable mod_negotiation... " >&6; } # Check whether --enable-negotiation was given. -if test "${enable_negotiation+set}" = set; then : +if test ${enable_negotiation+y} +then : enableval=$enable_negotiation; force_negotiation=$enableval -else +else $as_nop enable_negotiation=most fi @@ -38386,8 +39798,8 @@ if test "$enable_negotiation" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_negotiation$_apmod_extra_msg" >&5 -$as_echo "$enable_negotiation$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_negotiation$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_negotiation$_apmod_extra_msg" >&6; } if test "$enable_negotiation" != "no"; then case "$enable_negotiation" in static*) @@ -38466,12 +39878,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dir" >&5 -$as_echo_n "checking whether to enable mod_dir... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_dir" >&5 +printf %s "checking whether to enable mod_dir... " >&6; } # Check whether --enable-dir was given. -if test "${enable_dir+set}" = set; then : +if test ${enable_dir+y} +then : enableval=$enable_dir; force_dir=$enableval -else +else $as_nop enable_dir=yes fi @@ -38527,8 +39940,8 @@ if test "$enable_dir" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_dir$_apmod_extra_msg" >&5 -$as_echo "$enable_dir$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_dir$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_dir$_apmod_extra_msg" >&6; } if test "$enable_dir" != "no"; then case "$enable_dir" in static*) @@ -38607,12 +40020,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_imagemap" >&5 -$as_echo_n "checking whether to enable mod_imagemap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_imagemap" >&5 +printf %s "checking whether to enable mod_imagemap... " >&6; } # Check whether --enable-imagemap was given. -if test "${enable_imagemap+set}" = set; then : +if test ${enable_imagemap+y} +then : enableval=$enable_imagemap; force_imagemap=$enableval -else +else $as_nop enable_imagemap=no fi @@ -38668,8 +40082,8 @@ if test "$enable_imagemap" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_imagemap$_apmod_extra_msg" >&5 -$as_echo "$enable_imagemap$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_imagemap$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_imagemap$_apmod_extra_msg" >&6; } if test "$enable_imagemap" != "no"; then case "$enable_imagemap" in static*) @@ -38748,12 +40162,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_actions" >&5 -$as_echo_n "checking whether to enable mod_actions... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_actions" >&5 +printf %s "checking whether to enable mod_actions... " >&6; } # Check whether --enable-actions was given. -if test "${enable_actions+set}" = set; then : +if test ${enable_actions+y} +then : enableval=$enable_actions; force_actions=$enableval -else +else $as_nop enable_actions=most fi @@ -38809,8 +40224,8 @@ if test "$enable_actions" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_actions$_apmod_extra_msg" >&5 -$as_echo "$enable_actions$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_actions$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_actions$_apmod_extra_msg" >&6; } if test "$enable_actions" != "no"; then case "$enable_actions" in static*) @@ -38889,12 +40304,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_speling" >&5 -$as_echo_n "checking whether to enable mod_speling... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_speling" >&5 +printf %s "checking whether to enable mod_speling... " >&6; } # Check whether --enable-speling was given. -if test "${enable_speling+set}" = set; then : +if test ${enable_speling+y} +then : enableval=$enable_speling; force_speling=$enableval -else +else $as_nop enable_speling=most fi @@ -38950,8 +40366,8 @@ if test "$enable_speling" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_speling$_apmod_extra_msg" >&5 -$as_echo "$enable_speling$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_speling$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_speling$_apmod_extra_msg" >&6; } if test "$enable_speling" != "no"; then case "$enable_speling" in static*) @@ -39030,12 +40446,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_userdir" >&5 -$as_echo_n "checking whether to enable mod_userdir... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_userdir" >&5 +printf %s "checking whether to enable mod_userdir... " >&6; } # Check whether --enable-userdir was given. -if test "${enable_userdir+set}" = set; then : +if test ${enable_userdir+y} +then : enableval=$enable_userdir; force_userdir=$enableval -else +else $as_nop enable_userdir=most fi @@ -39091,8 +40508,8 @@ if test "$enable_userdir" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_userdir$_apmod_extra_msg" >&5 -$as_echo "$enable_userdir$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_userdir$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_userdir$_apmod_extra_msg" >&6; } if test "$enable_userdir" != "no"; then case "$enable_userdir" in static*) @@ -39171,12 +40588,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_alias" >&5 -$as_echo_n "checking whether to enable mod_alias... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_alias" >&5 +printf %s "checking whether to enable mod_alias... " >&6; } # Check whether --enable-alias was given. -if test "${enable_alias+set}" = set; then : +if test ${enable_alias+y} +then : enableval=$enable_alias; force_alias=$enableval -else +else $as_nop enable_alias=yes fi @@ -39232,8 +40650,8 @@ if test "$enable_alias" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_alias$_apmod_extra_msg" >&5 -$as_echo "$enable_alias$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_alias$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_alias$_apmod_extra_msg" >&6; } if test "$enable_alias" != "no"; then case "$enable_alias" in static*) @@ -39312,12 +40730,13 @@ fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_rewrite" >&5 -$as_echo_n "checking whether to enable mod_rewrite... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable mod_rewrite" >&5 +printf %s "checking whether to enable mod_rewrite... " >&6; } # Check whether --enable-rewrite was given. -if test "${enable_rewrite+set}" = set; then : +if test ${enable_rewrite+y} +then : enableval=$enable_rewrite; force_rewrite=$enableval -else +else $as_nop enable_rewrite=most fi @@ -39373,8 +40792,8 @@ if test "$enable_rewrite" != "no"; then : fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rewrite$_apmod_extra_msg" >&5 -$as_echo "$enable_rewrite$_apmod_extra_msg" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_rewrite$_apmod_extra_msg" >&5 +printf "%s\n" "$enable_rewrite$_apmod_extra_msg" >&6; } if test "$enable_rewrite" != "no"; then case "$enable_rewrite" in static*) @@ -39663,10 +41082,11 @@ # Check whether --with-program-name was given. -if test "${with_program_name+set}" = set; then : +if test ${with_program_name+y} +then : withval=$with_program_name; progname="$withval" -else +else $as_nop progname="httpd" fi @@ -39675,12 +41095,11 @@ # SuExec parameters # Check whether --with-suexec-bin was given. -if test "${with_suexec_bin+set}" = set; then : +if test ${with_suexec_bin+y} +then : withval=$with_suexec_bin; -cat >>confdefs.h <<_ACEOF -#define SUEXEC_BIN "$withval" -_ACEOF +printf "%s\n" "#define SUEXEC_BIN \"$withval\"" >>confdefs.h fi @@ -39688,75 +41107,69 @@ # Check whether --with-suexec-caller was given. -if test "${with_suexec_caller+set}" = set; then : +if test ${with_suexec_caller+y} +then : withval=$with_suexec_caller; -cat >>confdefs.h <<_ACEOF -#define AP_HTTPD_USER "$withval" -_ACEOF +printf "%s\n" "#define AP_HTTPD_USER \"$withval\"" >>confdefs.h fi # Check whether --with-suexec-userdir was given. -if test "${with_suexec_userdir+set}" = set; then : +if test ${with_suexec_userdir+y} +then : withval=$with_suexec_userdir; -cat >>confdefs.h <<_ACEOF -#define AP_USERDIR_SUFFIX "$withval" -_ACEOF +printf "%s\n" "#define AP_USERDIR_SUFFIX \"$withval\"" >>confdefs.h fi # Check whether --with-suexec-docroot was given. -if test "${with_suexec_docroot+set}" = set; then : +if test ${with_suexec_docroot+y} +then : withval=$with_suexec_docroot; -cat >>confdefs.h <<_ACEOF -#define AP_DOC_ROOT "$withval" -_ACEOF +printf "%s\n" "#define AP_DOC_ROOT \"$withval\"" >>confdefs.h fi # Check whether --with-suexec-uidmin was given. -if test "${with_suexec_uidmin+set}" = set; then : +if test ${with_suexec_uidmin+y} +then : withval=$with_suexec_uidmin; -cat >>confdefs.h <<_ACEOF -#define AP_UID_MIN $withval -_ACEOF +printf "%s\n" "#define AP_UID_MIN $withval" >>confdefs.h fi # Check whether --with-suexec-gidmin was given. -if test "${with_suexec_gidmin+set}" = set; then : +if test ${with_suexec_gidmin+y} +then : withval=$with_suexec_gidmin; -cat >>confdefs.h <<_ACEOF -#define AP_GID_MIN $withval -_ACEOF +printf "%s\n" "#define AP_GID_MIN $withval" >>confdefs.h fi # Check whether --with-suexec-logfile was given. -if test "${with_suexec_logfile+set}" = set; then : +if test ${with_suexec_logfile+y} +then : withval=$with_suexec_logfile; if test "x$withval" = "xyes"; then as_fn_error $? "log filename required for --with-suexec-logfile option" "$LINENO" 5 elif test "x$withval" != "xno"; then -cat >>confdefs.h <<_ACEOF -#define AP_LOG_EXEC "$withval" -_ACEOF +printf "%s\n" "#define AP_LOG_EXEC \"$withval\"" >>confdefs.h fi @@ -39765,30 +41178,31 @@ # Check whether --with-suexec-syslog was given. -if test "${with_suexec_syslog+set}" = set; then : +if test ${with_suexec_syslog+y} +then : withval=$with_suexec_syslog; if test $withval = "yes"; then if test "x${with_suexec_logfile}" != "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: hint: use \"--without-suexec-logfile --with-suexec-syslog\"" >&5 -$as_echo "$as_me: hint: use \"--without-suexec-logfile --with-suexec-syslog\"" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hint: use \"--without-suexec-logfile --with-suexec-syslog\"" >&5 +printf "%s\n" "$as_me: hint: use \"--without-suexec-logfile --with-suexec-syslog\"" >&6;} as_fn_error $? "suexec does not support both logging to file and syslog" "$LINENO" 5 fi - for ac_func in vsyslog + + for ac_func in vsyslog do : ac_fn_c_check_func "$LINENO" "vsyslog" "ac_cv_func_vsyslog" -if test "x$ac_cv_func_vsyslog" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_VSYSLOG 1 -_ACEOF +if test "x$ac_cv_func_vsyslog" = xyes +then : + printf "%s\n" "#define HAVE_VSYSLOG 1" >>confdefs.h -else +else $as_nop as_fn_error $? "cannot support syslog from suexec without vsyslog()" "$LINENO" 5 fi -done +done -$as_echo "#define AP_LOG_SYSLOG 1" >>confdefs.h +printf "%s\n" "#define AP_LOG_SYSLOG 1" >>confdefs.h fi @@ -39798,35 +41212,34 @@ # Check whether --with-suexec-safepath was given. -if test "${with_suexec_safepath+set}" = set; then : +if test ${with_suexec_safepath+y} +then : withval=$with_suexec_safepath; -cat >>confdefs.h <<_ACEOF -#define AP_SAFE_PATH "$withval" -_ACEOF +printf "%s\n" "#define AP_SAFE_PATH \"$withval\"" >>confdefs.h fi # Check whether --with-suexec-umask was given. -if test "${with_suexec_umask+set}" = set; then : +if test ${with_suexec_umask+y} +then : withval=$with_suexec_umask; -cat >>confdefs.h <<_ACEOF -#define AP_SUEXEC_UMASK 0$withval -_ACEOF +printf "%s\n" "#define AP_SUEXEC_UMASK 0$withval" >>confdefs.h fi INSTALL_SUEXEC=setuid # Check whether --enable-suexec-capabilities was given. -if test "${enable_suexec_capabilities+set}" = set; then : +if test ${enable_suexec_capabilities+y} +then : enableval=$enable_suexec_capabilities; INSTALL_SUEXEC=caps -$as_echo "#define AP_SUEXEC_CAPABILITIES 1" >>confdefs.h +printf "%s\n" "#define AP_SUEXEC_CAPABILITIES 1" >>confdefs.h fi @@ -39854,18 +41267,18 @@ -$as_echo "#define AP_USING_AUTOCONF 1" >>confdefs.h +printf "%s\n" "#define AP_USING_AUTOCONF 1" >>confdefs.h if test "$SINGLE_LISTEN_UNSERIALIZED_ACCEPT" = "1"; then -$as_echo "#define SINGLE_LISTEN_UNSERIALIZED_ACCEPT 1" >>confdefs.h +printf "%s\n" "#define SINGLE_LISTEN_UNSERIALIZED_ACCEPT 1" >>confdefs.h fi if test "$AP_NONBLOCK_WHEN_MULTI_LISTEN" = "1"; then -$as_echo "#define AP_NONBLOCK_WHEN_MULTI_LISTEN 1" >>confdefs.h +printf "%s\n" "#define AP_NONBLOCK_WHEN_MULTI_LISTEN 1" >>confdefs.h fi @@ -39882,22 +41295,24 @@ _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1 +then : ac_cv_define_APR_HAVE_IPV6=yes -else +else $as_nop ac_cv_define_APR_HAVE_IPV6=no fi -rm -f conftest* +rm -rf conftest* CPPFLAGS=$apr_old_cppflags # Check whether --enable-v4-mapped was given. -if test "${enable_v4_mapped+set}" = set; then : +if test ${enable_v4_mapped+y} +then : enableval=$enable_v4_mapped; v4mapped=$enableval -else +else $as_nop case $host in *freebsd[1234].*) @@ -39919,7 +41334,7 @@ if test $v4mapped = "yes" -a $ac_cv_define_APR_HAVE_IPV6 = "yes"; then -$as_echo "#define AP_ENABLE_V4_MAPPED 1" >>confdefs.h +printf "%s\n" "#define AP_ENABLE_V4_MAPPED 1" >>confdefs.h fi @@ -39940,18 +41355,18 @@ fi if test -d ./test/modules/http2; then - APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES test/modules/http2/Makefile" + APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES test/Makefile" - ac_config_files="$ac_config_files test/modules/http2/config.ini" + ac_config_files="$ac_config_files test/pyhttpd/config.ini" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: Restore user-defined environment settings..." >&5 -$as_echo "$as_me: Restore user-defined environment settings..." >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Restore user-defined environment settings..." >&5 +printf "%s\n" "$as_me: Restore user-defined environment settings..." >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} APACHE_CONF_SEL_CC=${CC} APACHE_CONF_SEL_CFLAGS="${CFLAGS} ${EXTRA_CFLAGS} ${NOTEST_CFLAGS}" @@ -40075,12 +41490,12 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: Construct makefiles and header files..." >&5 -$as_echo "$as_me: Construct makefiles and header files..." >&6;} -{ $as_echo "$as_me:${as_lineno-$LINENO}: " >&5 -$as_echo "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Construct makefiles and header files..." >&5 +printf "%s\n" "$as_me: Construct makefiles and header files..." >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: " >&5 +printf "%s\n" "$as_me: " >&6;} @@ -40410,8 +41825,8 @@ abs_srcdir="`(cd $srcdir && pwd)`" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating config_vars.mk" >&5 -$as_echo "$as_me: creating config_vars.mk" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating config_vars.mk" >&5 +printf "%s\n" "$as_me: creating config_vars.mk" >&6;} test -d build || $mkdir_p build > build/config_vars.mk for i in $APACHE_VAR_SUBST; do @@ -40433,19 +41848,13 @@ ap_prefix="${ap_cur}" -cat >>confdefs.h <<_ACEOF -#define HTTPD_ROOT "${ap_prefix}" -_ACEOF +printf "%s\n" "#define HTTPD_ROOT \"${ap_prefix}\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define SERVER_CONFIG_FILE "${rel_sysconfdir}/${progname}.conf" -_ACEOF +printf "%s\n" "#define SERVER_CONFIG_FILE \"${rel_sysconfdir}/${progname}.conf\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define AP_TYPES_CONFIG_FILE "${rel_sysconfdir}/mime.types" -_ACEOF +printf "%s\n" "#define AP_TYPES_CONFIG_FILE \"${rel_sysconfdir}/mime.types\"" >>confdefs.h perlbin=`$ac_aux_dir/PrintPath perl` @@ -40506,8 +41915,8 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -40537,15 +41946,15 @@ /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -40559,8 +41968,8 @@ fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -40577,7 +41986,7 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -40593,8 +42002,8 @@ ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -40617,14 +42026,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -40634,46 +42045,46 @@ fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -40682,13 +42093,6 @@ fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -40697,8 +42101,12 @@ for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -40710,30 +42118,10 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -40746,13 +42134,14 @@ as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -40779,18 +42168,20 @@ { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -40802,12 +42193,13 @@ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -40838,7 +42230,7 @@ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -40860,6 +42252,10 @@ as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -40873,6 +42269,12 @@ ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -40914,7 +42316,7 @@ as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -40923,7 +42325,7 @@ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -40986,7 +42388,7 @@ # values after options handling. ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -41048,14 +42450,16 @@ Report bugs to the package provider." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.69, +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -41093,15 +42497,15 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -41109,7 +42513,7 @@ --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -41118,7 +42522,7 @@ as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -41146,7 +42550,7 @@ if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -41160,7 +42564,7 @@ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -41181,7 +42585,7 @@ do case $ac_config_target in "include/ap_config_auto.h") CONFIG_HEADERS="$CONFIG_HEADERS include/ap_config_auto.h" ;; - "test/modules/http2/config.ini") CONFIG_FILES="$CONFIG_FILES test/modules/http2/config.ini" ;; + "test/pyhttpd/config.ini") CONFIG_FILES="$CONFIG_FILES test/pyhttpd/config.ini" ;; "docs/conf/httpd.conf") CONFIG_FILES="$CONFIG_FILES docs/conf/httpd.conf" ;; "docs/conf/extra/httpd-autoindex.conf") CONFIG_FILES="$CONFIG_FILES docs/conf/extra/httpd-autoindex.conf" ;; "docs/conf/extra/httpd-dav.conf") CONFIG_FILES="$CONFIG_FILES docs/conf/extra/httpd-dav.conf" ;; @@ -41219,9 +42623,9 @@ # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -41557,7 +42961,7 @@ esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -41565,17 +42969,17 @@ # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -41592,7 +42996,7 @@ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -41616,9 +43020,9 @@ case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -41671,8 +43075,8 @@ case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -41714,9 +43118,9 @@ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -41732,27 +43136,27 @@ # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac @@ -41793,11 +43197,11 @@ $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: summary of build options: +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: summary of build options: Server Version: ${HTTPD_VERSION} Install prefix: ${prefix} @@ -41808,7 +43212,7 @@ LIBS: ${APACHE_CONF_SEL_LIBS} C preprocessor: ${APACHE_CONF_SEL_CPP} " >&5 -$as_echo "$as_me: summary of build options: +printf "%s\n" "$as_me: summary of build options: Server Version: ${HTTPD_VERSION} Install prefix: ${prefix} @@ -41819,3 +43223,4 @@ LIBS: ${APACHE_CONF_SEL_LIBS} C preprocessor: ${APACHE_CONF_SEL_CPP} " >&6;} + diff -Nru apache2-2.4.51/configure.in apache2-2.4.52/configure.in --- apache2-2.4.51/configure.in 2021-09-23 08:56:33.000000000 +0000 +++ apache2-2.4.52/configure.in 2021-12-14 11:26:52.000000000 +0000 @@ -844,8 +844,8 @@ APACHE_FAST_OUTPUT(test/Makefile) fi if test -d ./test/modules/http2; then - APACHE_FAST_OUTPUT(test/modules/http2/Makefile) - AC_CONFIG_FILES([test/modules/http2/config.ini]) + APACHE_FAST_OUTPUT(test/Makefile) + AC_CONFIG_FILES([test/pyhttpd/config.ini]) fi dnl ## Finalize the variables diff -Nru apache2-2.4.51/debian/changelog apache2-2.4.52/debian/changelog --- apache2-2.4.51/debian/changelog 2021-10-07 17:49:44.000000000 +0000 +++ apache2-2.4.52/debian/changelog 2022-01-03 21:27:14.000000000 +0000 @@ -1,6 +1,22 @@ +apache2 (2.4.52-1~deb11u2) bullseye-security; urgency=medium + + * Fix 2.4.52 regression + + -- Yadd Mon, 03 Jan 2022 22:27:14 +0100 + +apache2 (2.4.52-1~deb11u1) bullseye-security; urgency=medium + + * New upstream version 2.4.52 (Closes: CVE-2021-44224, CVE-2021-44790) + * Refresh patches + + -- Yadd Mon, 20 Dec 2021 18:15:18 +0100 + apache2 (2.4.51-1~deb11u1) bullseye-security; urgency=medium - * New upstream version 2.4.51 (Closes: CVE-2021-41773, CVE-2021-42013) + * Update upstream GPG keys + * New upstream version 2.4.51. Closes: CVE-2021-33193, CVE-2021-34798, + CVE-2021-36160, CVE-2021-39275, CVE-2021-40438, CVE-2021-41524, + CVE-2021-41773, CVE-2021-42013) * Refresh patches -- Yadd Thu, 07 Oct 2021 19:49:44 +0200 diff -Nru apache2-2.4.51/debian/patches/fhs_compliance.patch apache2-2.4.52/debian/patches/fhs_compliance.patch --- apache2-2.4.51/debian/patches/fhs_compliance.patch 2021-10-05 19:47:13.000000000 +0000 +++ apache2-2.4.52/debian/patches/fhs_compliance.patch 2021-12-28 17:26:14.000000000 +0000 @@ -1,30 +1,28 @@ Description: Fix up FHS file locations for apache2 droppings. Forwarded: not-needed Author: Adam Conrad -Last-Update: 2012-02-25 +Reviewed-By: Yadd +Last-Update: 2021-12-20 + --- a/configure +++ b/configure -@@ -40434,17 +40434,17 @@ +@@ -41848,13 +41848,13 @@ + ap_prefix="${ap_cur}" - cat >>confdefs.h <<_ACEOF --#define HTTPD_ROOT "${ap_prefix}" -+#define HTTPD_ROOT "/etc/apache2" - _ACEOF +-printf "%s\n" "#define HTTPD_ROOT \"${ap_prefix}\"" >>confdefs.h ++printf "%s\n" "#define HTTPD_ROOT \"/etc/apache2\"" >>confdefs.h - cat >>confdefs.h <<_ACEOF --#define SERVER_CONFIG_FILE "${rel_sysconfdir}/${progname}.conf" -+#define SERVER_CONFIG_FILE "${progname}.conf" - _ACEOF +-printf "%s\n" "#define SERVER_CONFIG_FILE \"${rel_sysconfdir}/${progname}.conf\"" >>confdefs.h ++printf "%s\n" "#define SERVER_CONFIG_FILE \"${progname}.conf\"" >>confdefs.h - cat >>confdefs.h <<_ACEOF --#define AP_TYPES_CONFIG_FILE "${rel_sysconfdir}/mime.types" -+#define AP_TYPES_CONFIG_FILE "mime.types" - _ACEOF +-printf "%s\n" "#define AP_TYPES_CONFIG_FILE \"${rel_sysconfdir}/mime.types\"" >>confdefs.h ++printf "%s\n" "#define AP_TYPES_CONFIG_FILE \"mime.types\"" >>confdefs.h + perlbin=`$ac_aux_dir/PrintPath perl` --- a/configure.in +++ b/configure.in @@ -878,11 +878,11 @@ diff -Nru apache2-2.4.51/debian/patches/fix-2.4.52-regression.patch apache2-2.4.52/debian/patches/fix-2.4.52-regression.patch --- apache2-2.4.51/debian/patches/fix-2.4.52-regression.patch 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/debian/patches/fix-2.4.52-regression.patch 2022-01-03 21:23:36.000000000 +0000 @@ -0,0 +1,107 @@ +Description: Fix a possible listener deadlock + When the listener starts accepting more connections than the number of workers + already started (due to scheduling), the listening sockets gets disabled (per + AH03269) but nothing was re-enabling them before the end of the connections, + despite the creation of more idle/available workers in the meantime. + In the wost case there is no idle worker when the listener accepts the first + connection thus nothing to wake up the listener blocked in poll() with no + socket, hence a deadlock. + . + Fix this by waking up the listener when a worker becomes idle and this unblocks + connections_above_limit(). This is also worthwhile when all the workers are + started (fully initialized runtime) since the number of idle workers is a + condition for connections_above_limit() anyway so the sooner the listeners are + re-enabled the better (the other condition is the number of connections which + is unblocked appropriately by decrement_connection_count() already). + . + Also when a child exists with ps->quiescing == 1 and it's caught by + server_main_loop() before perform_idle_server_maintenance(), active_daemons was + not decrement as needed (including accross restarts), leading to an invalid + active_daemons accounting. + . + * server/mpm/event/event.c(should_enable_listensocks): + New helper that returns whether listenning sockets can be poll()ed again. + . + * server/mpm/event/event.c(decrement_connection_count, listener_thread): + Use should_enable_listensocks() where previously open-coded. + . + * server/mpm/event/event.c(worker_thread): + Wake up the listener when is_idle => 1 and should_enable_listensocks(). + Have a single point of exit when workers_may_exit to make sure that the + wake always occurs (even when exiting). + . + * server/mpm/event/event.c(server_main_loop): + Decrement active_daemons not only when !ps->quiescing but also when + ps->quiescing == 1, i.e. all the cases not handled by + perform_idle_server_maintenance() already. +Author: ylavic +Origin: upstream, https://svn.apache.org/viewvc?view=revision&revision=1896505 +Forwarded: not-needed +Reviewed-By: Yadd +Last-Update: 2022-01-03 + +--- a/server/mpm/event/event.c ++++ b/server/mpm/event/event.c +@@ -528,6 +528,11 @@ + return 1; + } + ++static APR_INLINE int should_enable_listensocks(void) ++{ ++ return !dying && listeners_disabled() && !connections_above_limit(NULL); ++} ++ + static void close_socket_nonblocking_(apr_socket_t *csd, + const char *from, int line) + { +@@ -774,7 +779,7 @@ + is_last_connection = !apr_atomic_dec32(&connection_count); + if (listener_is_wakeable + && ((is_last_connection && listener_may_exit) +- || (listeners_disabled() && !connections_above_limit(NULL)))) { ++ || should_enable_listensocks())) { + apr_pollset_wakeup(event_pollset); + } + if (dying) { +@@ -2002,9 +2007,7 @@ + } + } + +- if (listeners_disabled() +- && !workers_were_busy +- && !connections_above_limit(NULL)) { ++ if (!workers_were_busy && should_enable_listensocks()) { + enable_listensocks(); + } + } /* listener main loop */ +@@ -2066,7 +2069,7 @@ + ap_update_child_status_from_indexes(process_slot, thread_slot, + SERVER_STARTING, NULL); + +- while (!workers_may_exit) { ++ for (;;) { + apr_socket_t *csd = NULL; + event_conn_state_t *cs; + timer_event_t *te = NULL; +@@ -2081,6 +2084,12 @@ + signal_threads(ST_GRACEFUL); + break; + } ++ /* A new idler may have changed connections_above_limit(), ++ * let the listener know and decide. ++ */ ++ if (listener_is_wakeable && should_enable_listensocks()) { ++ apr_pollset_wakeup(event_pollset); ++ } + is_idle = 1; + } + +@@ -3045,7 +3054,7 @@ + + event_note_child_killed(child_slot, 0, 0); + ps = &ap_scoreboard_image->parent[child_slot]; +- if (!ps->quiescing) ++ if (ps->quiescing != 2) + retained->active_daemons--; + ps->quiescing = 0; + /* NOTE: We don't dec in the (child_slot < 0) case! */ diff -Nru apache2-2.4.51/debian/patches/series apache2-2.4.52/debian/patches/series --- apache2-2.4.51/debian/patches/series 2021-10-07 17:49:44.000000000 +0000 +++ apache2-2.4.52/debian/patches/series 2022-01-03 21:24:59.000000000 +0000 @@ -4,6 +4,7 @@ customize_apxs.patch build_suexec-custom.patch reproducible_builds.diff +fix-2.4.52-regression.patch # This patch is applied manually #suexec-custom.patch diff -Nru apache2-2.4.51/debian/patches/suexec-custom.patch apache2-2.4.52/debian/patches/suexec-custom.patch --- apache2-2.4.51/debian/patches/suexec-custom.patch 2020-09-01 12:50:51.000000000 +0000 +++ apache2-2.4.52/debian/patches/suexec-custom.patch 2021-12-28 17:26:14.000000000 +0000 @@ -2,8 +2,6 @@ Forwarded: not-needed Author: Stefan Fritsch Last-Update: 2018-07-17 -diff --git a/support/suexec-custom.c b/support/suexec-custom.c -index f3811a97..30bb644b 100644 --- a/support/suexec-custom.c +++ b/support/suexec-custom.c @@ -29,6 +29,7 @@ @@ -22,7 +20,7 @@ #if APR_HAVE_UNISTD_H #include #endif -@@ -222,6 +224,26 @@ static void log_no_err(const char *fmt,...) +@@ -222,6 +224,26 @@ return; } @@ -48,8 +46,8 @@ + static void clean_env(void) { - char pathbuf[512]; -@@ -288,6 +310,11 @@ int main(int argc, char *argv[]) + char **cleanenv; +@@ -286,6 +308,11 @@ struct stat dir_info; /* directory info holder */ struct stat prg_info; /* program info holder */ int cwdh; /* handle to cwd */ @@ -61,7 +59,7 @@ /* * Start with a "clean" environment -@@ -317,15 +344,10 @@ int main(int argc, char *argv[]) +@@ -315,15 +342,10 @@ || (! strcmp(AP_HTTPD_USER, pw->pw_name))) #endif /* _OSD_POSIX */ ) { @@ -78,17 +76,17 @@ #if defined(AP_LOG_SYSLOG) fprintf(stderr, " -D AP_LOG_SYSLOG\n"); #elif defined(AP_LOG_EXEC) -@@ -339,9 +361,6 @@ int main(int argc, char *argv[]) - #endif +@@ -338,9 +360,6 @@ #ifdef AP_UID_MIN fprintf(stderr, " -D AP_UID_MIN=%d\n", AP_UID_MIN); --#endif + #endif -#ifdef AP_USERDIR_SUFFIX - fprintf(stderr, " -D AP_USERDIR_SUFFIX=\"%s\"\n", AP_USERDIR_SUFFIX); - #endif +-#endif exit(0); } -@@ -357,23 +376,6 @@ int main(int argc, char *argv[]) + /* +@@ -355,23 +374,6 @@ target_gname = argv[2]; cmd = argv[3]; @@ -112,11 +110,10 @@ /* * Check for a leading '/' (absolute path) in the command to be executed, -@@ -397,6 +399,59 @@ int main(int argc, char *argv[]) - userdir = 1; +@@ -396,6 +398,59 @@ } -+ /* + /* + * Check to see if the user running this program + * is the user allowed to do so as defined in + * SUEXEC_CONFIG_DIR/username @@ -169,10 +166,11 @@ + } + } + - /* ++ /* * Error out if the target username is invalid. */ -@@ -538,7 +593,7 @@ int main(int argc, char *argv[]) + if (strspn(target_uname, "1234567890") != strlen(target_uname)) { +@@ -538,7 +593,7 @@ if (userdir) { if (((chdir(target_homedir)) != 0) || @@ -181,7 +179,7 @@ ((getcwd(dwd, AP_MAXPATH)) == NULL) || ((fchdir(cwdh)) != 0)) { log_err("cannot get docroot information (%s)\n", target_homedir); -@@ -546,7 +601,7 @@ int main(int argc, char *argv[]) +@@ -546,7 +601,7 @@ } } else { diff -Nru apache2-2.4.51/docs/manual/convenience.map apache2-2.4.52/docs/manual/convenience.map --- apache2-2.4.51/docs/manual/convenience.map 2020-06-10 21:25:03.000000000 +0000 +++ apache2-2.4.52/docs/manual/convenience.map 2021-12-16 13:44:25.000000000 +0000 @@ -166,6 +166,7 @@ charsetdefault mod/mod_charset_lite.html#charsetdefault charsetoptions mod/mod_charset_lite.html#charsetoptions charsetsourceenc mod/mod_charset_lite.html#charsetsourceenc +checkbasenamematch mod/mod_speling.html#checkbasenamematch checkcaseonly mod/mod_speling.html#checkcaseonly checkspelling mod/mod_speling.html#checkspelling chrootdir mod/mod_unixd.html#chrootdir @@ -243,6 +244,8 @@ filterprotocol mod/mod_filter.html#filterprotocol filterprovider mod/mod_filter.html#filterprovider filtertrace mod/mod_filter.html#filtertrace +flushmaxpipelined mod/core.html#flushmaxpipelined +flushmaxthreshold mod/core.html#flushmaxthreshold forcelanguagepriority mod/mod_negotiation.html#forcelanguagepriority forcetype mod/core.html#forcetype forensiclog mod/mod_log_forensic.html#forensiclog @@ -258,6 +261,7 @@ h2maxworkers mod/mod_http2.html#h2maxworkers h2minworkers mod/mod_http2.html#h2minworkers h2moderntlsonly mod/mod_http2.html#h2moderntlsonly +h2outputbuffering mod/mod_http2.html#h2outputbuffering h2padding mod/mod_http2.html#h2padding h2push mod/mod_http2.html#h2push h2pushdiarysize mod/mod_http2.html#h2pushdiarysize @@ -355,6 +359,7 @@ luahookinsertfilter mod/mod_lua.html#luahookinsertfilter luahooklog mod/mod_lua.html#luahooklog luahookmaptostorage mod/mod_lua.html#luahookmaptostorage +luahookpretranslate mod/mod_lua.html#luahookpretranslate luahooktranslatename mod/mod_lua.html#luahooktranslatename luahooktypechecker mod/mod_lua.html#luahooktypechecker luainherit mod/mod_lua.html#luainherit @@ -391,6 +396,7 @@ mdchallengedns01 mod/mod_md.html#mdchallengedns01 mdcontactemail mod/mod_md.html#mdcontactemail mddrivemode mod/mod_md.html#mddrivemode +mdexternalaccountbinding mod/mod_md.html#mdexternalaccountbinding mdhttpproxy mod/mod_md.html#mdhttpproxy mdmember mod/mod_md.html#mdmember mdmembers mod/mod_md.html#mdmembers @@ -491,7 +497,9 @@ proxystatus mod/mod_proxy.html#proxystatus proxytimeout mod/mod_proxy.html#proxytimeout proxyvia mod/mod_proxy.html#proxyvia +proxywebsocketfallbacktoproxyhttp mod/mod_proxy_wstunnel.html#proxywebsocketfallbacktoproxyhttp qualifyredirecturl mod/core.html#qualifyredirecturl +readbuffersize mod/core.html#readbuffersize readmename mod/mod_autoindex.html#readmename receivebuffersize mod/mpm_common.html#receivebuffersize redirect mod/mod_alias.html#redirect @@ -664,6 +672,7 @@ sslverifydepth mod/mod_ssl.html#sslverifydepth startservers mod/mpm_common.html#startservers startthreads mod/mpm_common.html#startthreads +stricthostcheck mod/core.html#stricthostcheck substitute mod/mod_substitute.html#substitute substituteinheritbefore mod/mod_substitute.html#substituteinheritbefore substitutemaxlinelength mod/mod_substitute.html#substitutemaxlinelength @@ -673,6 +682,21 @@ threadsperchild mod/mpm_common.html#threadsperchild threadstacksize mod/mpm_common.html#threadstacksize timeout mod/core.html#timeout +tlscertificate mod/mod_tls.html#tlscertificate +tlsciphersprefer mod/mod_tls.html#tlsciphersprefer +tlscipherssuppress mod/mod_tls.html#tlscipherssuppress +tlsengine mod/mod_tls.html#tlsengine +tlshonorclientorder mod/mod_tls.html#tlshonorclientorder +tlsoptions mod/mod_tls.html#tlsoptions +tlsprotocol mod/mod_tls.html#tlsprotocol +tlsproxyca mod/mod_tls.html#tlsproxyca +tlsproxycipherprefer mod/mod_tls.html#tlsproxycipherprefer +tlsproxyciphersuppress mod/mod_tls.html#tlsproxyciphersuppress +tlsproxyengine mod/mod_tls.html#tlsproxyengine +tlsproxymachinecertificate mod/mod_tls.html#tlsproxymachinecertificate +tlsproxyprotocol mod/mod_tls.html#tlsproxyprotocol +tlssessioncache mod/mod_tls.html#tlssessioncache +tlsstrictsni mod/mod_tls.html#tlsstrictsni traceenable mod/core.html#traceenable transferlog mod/mod_log_config.html#transferlog typesconfig mod/mod_mime.html#typesconfig diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.de apache2-2.4.52/docs/manual/mod/directives.html.de --- apache2-2.4.51/docs/manual/mod/directives.html.de 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.de 2021-12-16 13:44:25.000000000 +0000 @@ -438,6 +438,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -723,6 +724,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.en apache2-2.4.52/docs/manual/mod/directives.html.en --- apache2-2.4.51/docs/manual/mod/directives.html.en 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.en 2021-12-16 13:44:25.000000000 +0000 @@ -439,6 +439,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -724,6 +725,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.es apache2-2.4.52/docs/manual/mod/directives.html.es --- apache2-2.4.51/docs/manual/mod/directives.html.es 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.es 2021-12-16 13:44:25.000000000 +0000 @@ -441,6 +441,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -726,6 +727,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.fr.utf8 apache2-2.4.52/docs/manual/mod/directives.html.fr.utf8 --- apache2-2.4.51/docs/manual/mod/directives.html.fr.utf8 2021-10-02 13:21:37.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.fr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -439,6 +439,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -724,6 +725,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.ja.utf8 apache2-2.4.52/docs/manual/mod/directives.html.ja.utf8 --- apache2-2.4.51/docs/manual/mod/directives.html.ja.utf8 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.ja.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -436,6 +436,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -721,6 +722,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.ko.euc-kr apache2-2.4.52/docs/manual/mod/directives.html.ko.euc-kr --- apache2-2.4.51/docs/manual/mod/directives.html.ko.euc-kr 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.ko.euc-kr 2021-12-16 13:44:25.000000000 +0000 @@ -436,6 +436,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -721,6 +722,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.tr.utf8 apache2-2.4.52/docs/manual/mod/directives.html.tr.utf8 --- apache2-2.4.51/docs/manual/mod/directives.html.tr.utf8 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.tr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -435,6 +435,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -720,6 +721,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/directives.html.zh-cn.utf8 apache2-2.4.52/docs/manual/mod/directives.html.zh-cn.utf8 --- apache2-2.4.51/docs/manual/mod/directives.html.zh-cn.utf8 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/directives.html.zh-cn.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -434,6 +434,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -719,6 +720,21 @@
  • ThreadsPerChild
  • ThreadStackSize
  • TimeOut
  • +
  • TLSCertificate
  • +
  • TLSCiphersPrefer
  • +
  • TLSCiphersSuppress
  • +
  • TLSEngine
  • +
  • TLSHonorClientOrder
  • +
  • TLSOptions
  • +
  • TLSProtocol
  • +
  • TLSProxyCA
  • +
  • TLSProxyCipherPrefer
  • +
  • TLSProxyCipherSuppress
  • +
  • TLSProxyEngine
  • +
  • TLSProxyMachineCertificate
  • +
  • TLSProxyProtocol
  • +
  • TLSSessionCache
  • +
  • TLSStrictSNI
  • TraceEnable
  • TransferLog
  • TypesConfig
  • diff -Nru apache2-2.4.51/docs/manual/mod/index.html.de apache2-2.4.52/docs/manual/mod/index.html.de --- apache2-2.4.51/docs/manual/mod/index.html.de 2021-09-16 07:58:22.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.de 2021-12-16 13:44:25.000000000 +0000 @@ -72,7 +72,7 @@
    top

    Andere Module

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    Group authorizations based on host (name or IP address)
    mod_actions
    Dieses Modul ermöglicht die Ausführung von CGI-Skripten @@ -246,6 +246,9 @@
    mod_suexec
    Allows CGI scripts to run as a specified user and Group
    mod_systemd
    Provides better support for systemd integration
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    Provides an environment variable with a unique identifier for each request
    mod_unixd
    Basic (required) security for Unix-family platforms.
    diff -Nru apache2-2.4.51/docs/manual/mod/index.html.en apache2-2.4.52/docs/manual/mod/index.html.en --- apache2-2.4.51/docs/manual/mod/index.html.en 2021-04-22 06:43:44.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.en 2021-12-16 13:44:25.000000000 +0000 @@ -69,7 +69,7 @@
    top

    Other Modules

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    Group authorizations based on host (name or IP address)
    mod_actions
    Execute CGI scripts based on media type or request method.
    @@ -242,6 +242,9 @@
    mod_suexec
    Allows CGI scripts to run as a specified user and Group
    mod_systemd
    Provides better support for systemd integration
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    Provides an environment variable with a unique identifier for each request
    mod_unixd
    Basic (required) security for Unix-family platforms.
    diff -Nru apache2-2.4.51/docs/manual/mod/index.html.es apache2-2.4.52/docs/manual/mod/index.html.es --- apache2-2.4.51/docs/manual/mod/index.html.es 2021-09-16 07:58:22.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.es 2021-12-16 13:44:25.000000000 +0000 @@ -74,7 +74,7 @@
    top

    Otros Módulos

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    Group authorizations based on host (name or IP address)
    mod_actions
    Execute CGI scripts based on media type or request method.
    @@ -247,6 +247,9 @@
    mod_suexec
    Allows CGI scripts to run as a specified user and Group
    mod_systemd
    Provides better support for systemd integration
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    Provides an environment variable with a unique identifier for each request
    mod_unixd
    Basic (required) security for Unix-family platforms.
    diff -Nru apache2-2.4.51/docs/manual/mod/index.html.fr.utf8 apache2-2.4.52/docs/manual/mod/index.html.fr.utf8 --- apache2-2.4.51/docs/manual/mod/index.html.fr.utf8 2021-01-23 14:39:00.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.fr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -70,7 +70,7 @@
    top

    Autres Modules

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    Autorisations de groupe Ă  base de nom d'hĂ´te (nom ou adresse IP)
    mod_actions
    Exécution des scripts CGI en fonction du @@ -286,6 +286,9 @@
    mod_suexec
    Permet l'exécution des scripts CGI sous l'utilisateur et le groupe spécifiés
    mod_systemd
    Fournit un support amélioré pour l'intégration de systemd
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    Fournit une variable d'environnement contenant un identifiant unique pour chaque requĂŞte
    mod_unixd
    Sécurité de base (nécessaire) pour les plates-formes de la diff -Nru apache2-2.4.51/docs/manual/mod/index.html.ja.utf8 apache2-2.4.52/docs/manual/mod/index.html.ja.utf8 --- apache2-2.4.51/docs/manual/mod/index.html.ja.utf8 2021-04-22 06:43:44.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.ja.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -67,7 +67,7 @@
    top

    ä»–ă®ă˘ă‚¸ăĄăĽă«

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    ă›ă‚ąă (ĺŤĺ‰Ťă‚‚ă—ăŹăŻ IP アă‰ă¬ă‚ą) ă«ĺźşăĄă„ăźă‚°ă«ăĽă—承認
    mod_actions
    ăˇă‡ă‚Łă‚˘ă‚żă‚¤ă—ă‚„ăŞă‚Żă‚¨ă‚ąăăˇă‚˝ăă‰ă«ĺżśă㦠CGI ă‚ąă‚ŻăŞă—ăを実行ă™ă‚‹ć©źč˝ă‚’ćŹäľ›
    @@ -231,6 +231,9 @@
    mod_substitute
    Perform search and replace operations on response bodies
    mod_suexec
    指定ă•ă‚Śăźă¦ăĽă‚¶ă¨ă‚°ă«ăĽă—㧠CGI ă‚ąă‚ŻăŞă—ăを実行ă™ă‚‹
    mod_systemd
    Provides better support for systemd integration
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    ăťă‚Śăžă‚Śă®ăŞă‚Żă‚¨ă‚ąăă«ĺŻľă™ă‚‹ä¸€ć„ŹăŞč­ĺĄĺ­ă®ĺ…ĄăŁăźç’°ĺ˘ĺ¤‰ć•°ă‚’ ćŹäľ›ă™ă‚‹
    mod_unixd
    Basic (required) security for Unix-family platforms.
    diff -Nru apache2-2.4.51/docs/manual/mod/index.html.ko.euc-kr apache2-2.4.52/docs/manual/mod/index.html.ko.euc-kr --- apache2-2.4.51/docs/manual/mod/index.html.ko.euc-kr 2021-04-22 06:43:44.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.ko.euc-kr 2021-12-16 13:44:25.000000000 +0000 @@ -67,7 +67,7 @@
    top

    ´Ů¸Ą ¸đµâ

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    Group authorizations based on host (name or IP address)
    mod_actions
    ŔĚ ¸đµâŔş ąĚµđľîÁľ·ůłŞ żäĂ»¸ŢĽ­µĺżˇ µű¶ó CGI @@ -228,6 +228,9 @@
    mod_substitute
    Perform search and replace operations on response bodies
    mod_suexec
    CGI ˝şĹ©¸łĆ®¸¦ ĆŻÁ¤ »çżëŔÚżÍ ±×·ě ±ÇÇŃŔ¸·Î ˝ÇÇŕÇŃ´Ů
    mod_systemd
    Provides better support for systemd integration
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    °˘ żäĂ»¸¶´Ů ŔŻŔĎÇŃ ˝Äş°ŔÚ¸¦ °ˇÁö´Â ČŻ°ćşŻĽö¸¦ Á¦°řÇŃ´Ů
    mod_unixd
    Basic (required) security for Unix-family platforms.
    diff -Nru apache2-2.4.51/docs/manual/mod/index.html.tr.utf8 apache2-2.4.52/docs/manual/mod/index.html.tr.utf8 --- apache2-2.4.51/docs/manual/mod/index.html.tr.utf8 2021-04-18 08:57:41.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.tr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -65,7 +65,7 @@
    top

    DiÄźer ModĂĽller

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    Group authorizations based on host (name or IP address)
    mod_actions
    Execute CGI scripts based on media type or request method.
    @@ -236,6 +236,9 @@
    mod_suexec
    CGI betiklerinin belli bir kullanıcı ve grubun aidiyetinde çalışmasını mümkün kılar.
    mod_systemd
    Provides better support for systemd integration
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    Provides an environment variable with a unique identifier for each request
    mod_unixd
    Unix ailesi platformlar için temel (gerekli) güvenlik.
    diff -Nru apache2-2.4.51/docs/manual/mod/index.html.zh-cn.utf8 apache2-2.4.52/docs/manual/mod/index.html.zh-cn.utf8 --- apache2-2.4.51/docs/manual/mod/index.html.zh-cn.utf8 2021-04-22 06:43:44.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/index.html.zh-cn.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -64,7 +64,7 @@
    top

    ĺ…¶ĺ®ć¨ˇĺť—

    -

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  U  |  V  |  W  |  X 

    +

     A  |  B  |  C  |  D  |  E  |  F  |  H  |  I  |  L  |  M  |  N  |  P  |  R  |  S  |  T  |  U  |  V  |  W  |  X 

    mod_access_compat
    Group authorizations based on host (name or IP address)
    mod_actions
    Execute CGI scripts based on media type or request method.
    @@ -237,6 +237,9 @@
    mod_suexec
    Allows CGI scripts to run as a specified user and Group
    mod_systemd
    Provides better support for systemd integration
    +
    mod_tls
    TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    mod_unique_id
    Provides an environment variable with a unique identifier for each request
    mod_unixd
    Basic (required) security for Unix-family platforms.
    diff -Nru apache2-2.4.51/docs/manual/mod/mod_md.html.en apache2-2.4.52/docs/manual/mod/mod_md.html.en --- apache2-2.4.51/docs/manual/mod/mod_md.html.en 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/mod_md.html.en 2021-12-16 13:44:25.000000000 +0000 @@ -300,6 +300,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -634,6 +635,46 @@

    +
    top
    +

    MDExternalAccountBinding Directive

    + + + + + + + +
    Description:
    Syntax:MDExternalAccountBinding key-id hmac-64 | none | file
    Default:MDExternalAccountBinding none
    Context:server config
    Status:Experimental
    Module:mod_md
    +

    + Configure values for ACME "External Account Binding", a feature + of the ACME standard that allows clients to bind registrations + to an existing customer account on ACME servers. +

    +

    + Let's Encrypt does not require those, but other ACME CAs do. + Check with your ACME CA if you need those and how to obtain the + values. They are two strings, a key identifier and a base64 encoded + 'hmac' value. +

    +

    + You can configure those globally or for a specific MDomain. Since + these values allow anyone to register under the same account, it is + adivsable to give the configuration file restricted permissions, + e.g. root only. +

    +

    + The value can also be taken from a JSON file, to keep more open + permissions on the server configuration and restrict the ones on that + file. The JSON itself is: +

    +

    EAB JSON Example file

    {"kid": "kid-1", "hmac": "zWND..."}
    +
    +

    + If you change EAB values, the new ones will be used when the next + certificate renewal is due. +

    + +
    top

    MDHttpProxy Directive

    diff -Nru apache2-2.4.51/docs/manual/mod/mod_md.html.fr.utf8 apache2-2.4.52/docs/manual/mod/mod_md.html.fr.utf8 --- apache2-2.4.51/docs/manual/mod/mod_md.html.fr.utf8 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/mod_md.html.fr.utf8 2021-12-04 15:20:36.000000000 +0000 @@ -345,6 +345,7 @@
  • MDChallengeDns01
  • MDContactEmail
  • MDDriveMode
  • +
  • MDExternalAccountBinding
  • MDHttpProxy
  • MDMember
  • MDMembers
  • @@ -726,6 +727,52 @@
    top
    +
    + + + + + + +
    Description:
    Syntaxe:MDExternalAccountBinding key-id hmac-64 | none | file
    DĂ©faut:MDExternalAccountBinding none
    Contexte:configuration globale
    Statut:Expérimental
    Module:mod_md
    +

    + Cette directive permet de définir des valeurs pour associer des + comptes externes avec ACME ("External Account Binding") ; c'est + une fonctionnalité de la norme ACME qui permet à des clients + d'associer des inscriptions à un compte client existant sur les + serveurs ACME. +

    +

    + Certains CAs ACME ont besoin de ces valeurs, mais ce n'est pas + le cas pour Let's Encrypt. VĂ©rifiez avec votre CA ACME si vous + avez besoin de ces valeurs et la manière de les obtenir. Ces + dernières se composent de deux chaĂ®nes : un identifiant de clĂ© + et une valeur 'hmac' codĂ©e en base64. +

    +

    + Vous pouvez définir ces valeurs de manière globale ou pour un + MDomain spécifique. Comme ces valeurs permettent à n'importe qui + de s'inscrire sous le même compte, il est conseillé de + restreindre les permissions d'accès au fichier de configuration + (à root seulement, par exemple). +

    +

    + Les valeurs peuvent aussi ĂŞtre extraites d'un fichier JSON pour + conserver l'ouverture des permissions au niveau de la + configuration du serveur et restreindre celles de ce fichier. Le + fichier JSON sera du style : +

    +

    Exemple de fichier EAB JSON

    {"kid": "kid-1", "hmac": "zWND..."}
    +
    +

    + Si vous modifiez les valeurs EAB, ce sont les nouvelles valeurs + qui seront utilisées lors du prochain renouvellement de + certificat. +

    + +
    +
    top

    Directive MDHttpProxy

    + + +
    Description:Spécifie un serveur mandataire pour les connexions diff -Nru apache2-2.4.51/docs/manual/mod/mod_proxy.html.en apache2-2.4.52/docs/manual/mod/mod_proxy.html.en --- apache2-2.4.51/docs/manual/mod/mod_proxy.html.en 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/mod_proxy.html.en 2021-12-16 13:44:25.000000000 +0000 @@ -1387,6 +1387,33 @@

    Protocol accepted in the Upgrade header by mod_proxy_wstunnel. See the documentation of this module for more details.

    mapping-

    Type of mapping between the path and the url. + This determines the normalization and/or (non-)decoding that mod_proxy + will apply to the requested uri-path before matching the path. If + a mapping matches, it's committed to the uri-path such that all the directory + contexts that use a path (like <Location>) will be matched using the + same mapping.

    +

    mapping=encoded prevents the %-decoding of the uri-path so + that one can match for instance /some%2furi%2fpath%2fwith%2fslash in a + ProxyPass or in a <Location> context.

    +

    mapping=servlet refers to the normalization defined by the Servlet + specification, which is for instance applied by Apache Tomcat for servlet containers + (notably the path parameters are ignored for the mapping). An uri-path like + /some;foo/path is then mapped as /some/path hence matches:

    +

    <Location /some/path> or:

    +

    ProxyPass "/some/path" "https://tomcat.example.com/some/path"

    +

    regardless of the requested path parameters.

    +

    Note

    +

    It is recommended to use the same mapping on the Apache httpd side than the one + used on the backend side. For instance when configuring authorizations in + <Location> blocks for paths that are mapped by mod_proxy + to some servlet containers (like applications running on Apache Tomcat), one should + use the mapping=servlet setting to prevent path parameters and alike from + interfering with the authorizations that are to be enforced in by the Apache httpd.

    +
    +
    diff -Nru apache2-2.4.51/docs/manual/mod/mod_proxy.html.fr.utf8 apache2-2.4.52/docs/manual/mod/mod_proxy.html.fr.utf8 --- apache2-2.4.51/docs/manual/mod/mod_proxy.html.fr.utf8 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/mod_proxy.html.fr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -30,6 +30,8 @@  fr  |  ja 

    +
    Cette traduction peut être périmée. Vérifiez la version + anglaise pour les changements récents.
    diff -Nru apache2-2.4.51/docs/manual/mod/mod_substitute.html.fr.utf8 apache2-2.4.52/docs/manual/mod/mod_substitute.html.fr.utf8 --- apache2-2.4.51/docs/manual/mod/mod_substitute.html.fr.utf8 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/mod_substitute.html.fr.utf8 2021-12-04 15:20:36.000000000 +0000 @@ -98,7 +98,7 @@

    substitution peut contenir du texte et des références arrières d'expressions rationnelles.

    -

    Exemple

    <Location "/>
    +    

    Exemple

    <Location "/">
         AddOutputFilterByType SUBSTITUTE text/html
         Substitute "s/foo/bar/ni"
     </Location>
    diff -Nru apache2-2.4.51/docs/manual/mod/mod_tls.html apache2-2.4.52/docs/manual/mod/mod_tls.html --- apache2-2.4.51/docs/manual/mod/mod_tls.html 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/mod_tls.html 2021-12-16 13:44:25.000000000 +0000 @@ -0,0 +1,5 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: mod_tls.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 diff -Nru apache2-2.4.51/docs/manual/mod/mod_tls.html.en apache2-2.4.52/docs/manual/mod/mod_tls.html.en --- apache2-2.4.51/docs/manual/mod/mod_tls.html.en 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/mod_tls.html.en 2021-12-16 13:44:25.000000000 +0000 @@ -0,0 +1,657 @@ + + + + + +mod_tls - Apache HTTP Server Version 2.4 + + + + + + + + +
    <-
    + +
    +

    Apache Module mod_tls

    +
    +

    Available Languages:  en 

    +
    +
    Description:Serveur mandataire/passerelle multi-protocole
    Statut:Extension
    Identificateur de Module:proxy_module
    + + + +
    Description:TLS v1.2 and v1.3 implemented in memory-safe Rust via + the rustls library +
    Status:Experimental
    Module Identifier:tls_module
    Source File:mod_tls.c
    Compatibility:Available in version 2.4.52 and later
    +

    Summary

    + +

    + mod_tls is an alternative to mod_ssl for providing https to a server. + It's feature set is a subset, described in more detail below. It can + be used as a companion to mod_ssl, e.g. both modules can be loaded at + the same time. +

    + mod_tls, being written in C, used the Rust implementation of TLS named + rustls via its C interface + rustls-ffi. This gives + memory safe cryptography and protocol handling at comparable + performance. +

    + It can be configured for frontend and backend connections. The configuration + directive have been kept mostly similar to mod_ssl ones. +

    + +
    Support Apache!

    Topics

    +
      +
    • TLS in a VirtualHost context
    • +
    • Feature Comparison with mod_ssl
    • +
    • TLS Protocols
    • +
    • TLS Ciphers
    • +
    • Virtual Hosts
    • +
    • ACME Certificates
    • +
    • OCSP Stapling
    • +
    • TLS Variables
    • +
    • Client Certificates
    • +

    Directives

    + +

    Bugfix checklist

    See also

    +
    +
    top
    +
    +

    TLS in a VirtualHost context

    + +
    Listen 443
    +TLSEngine 443
    +
    +<VirtualHost *:443>
    +  ServerName example.net
    +  TLSCertificate file_with_certificate.pem file_with_key.pem
    +  ...
    +</VirtualHost>
    + +

    + The above is a minimal configuration. Instead of enabling mod_tls + in every virtual host, the port for incoming TLS connections is + specified. +

    + You cannot mix virtual hosts with mod_ssl and mod_tls on the same + port. It's either or. SNI and ALPN are supported. You may use several + virtual hosts on the same port and a mix of protocols like http/1.1 + and h2. +

    +
    top
    +
    +

    Feature Comparison with mod_ssl

    +

    + The table below gives a comparison of feature between + mod_ssl and mod_tls. If a feature of mod_ssl is no listed here, + it is not supported by mod_tls. The one difference, probably most relevant + is the lack for client certificate support in the current version of + mod_tls. +

    + + + + + + + + + + + + + + + + + + + + + + + +
    Featuremod_sslmod_tlsComment
    Frontend TLSyesyes
    Backend TLSyesyes
    TLS v1.3yes*yes*)with recent OpenSSL
    TLS v1.2yesyes
    TLS v1.0yes*no*)if enabled in OpenSSL
    SNI Virtual Hostsyesyes
    Client Certificatesyesno
    Machine Certificates for Backendyesyes
    OCSP Staplingyesyes**)via mod_md
    Backend OCSP checkyesno**)stapling will be verified
    TLS version to allowmin-maxmin
    TLS ciphersexclusive listpreferred/suppressed
    TLS cipher orderingclient/serverclient/server
    TLS sessionsyesyes
    SNI strictnessdefault nodefault yes
    Option EnvVarsexhaustivelimited**)see var list
    Option ExportCertDataclient+serverserver
    Backend CAfile/dirfile
    Revocation CRLsyesno
    TLS Renegotiationyes*no*)in TLS v1.2
    Encrypted Cert Keysyesno
    +

    +

    +
    top
    +
    +

    TLS Protocols

    +

    + mod_tls supports TLS protocol version 1.2 and 1.3. Should there ever be + a version 1.4 and rustls supports it, it will be available as well. +

    +

    + In mod_tls, you configure the minimum version to use, never the maximum: +

    +
    TLSProtocol TLSv1.3+
    + +

    + This allows only version 1.3 and whatever may be its successor one day when talking + to your server or to a particular virtual host. +

    +
    top
    +
    +

    TLS Ciphers

    +

    + The list of TLS ciphers supported in the rustls library, + can be found here. All TLS v1.3 + ciphers are supported. For TLS v1.2, only ciphers that rustls considers + secure are available. +

    + mod_tls supports the following names for TLS ciphers: +

    +
      +
    1. + The IANA assigned name + which uses `_` to separate parts. Example: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 +
    2. +
    3. + The OpenSSL name, using `-` as separator (for 1.2). Example: ECDHE-ECDSA-AES256-SHA384. + Such names often appear in documentation. `mod_tls` defines them for all TLS v1.2 ciphers. + For TLS v1.3 ciphers, names starting with TLS13_ are also supported. +
    4. +
    5. + The IANA assigned identifier, + which is a 16-bit numeric value. Example: 0xc024. + You can use this in configurations as TLS_CIPHER_0xc024. +
    6. +
    +

    + You can configure a preference for ciphers, which means they will be used + for clients that support them. If you do not configure a preference, rustls + will use the one that it considers best. This is recommended. +

    +

    + Should you nevertheless have the need to prefer one cipher over another, you + may configure it like this: +

    +
    TLSCiphersPrefer ECDHE-ECDSA-AES256-SHA384
    +# or several
    +TLSCiphersPrefer ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305
    + +

    + If you name a cipher that is unknown, the configuration will fail. + If you name a cipher is not supported by rustls (or no + longer supported in an updated version of rustls for security + reasons), mod_tls will log a WARNING, but continue to work. +

    +

    + A similar mechanism exists, if you want to disable a particular cipher: +

    +
    TLSCipherSuppress ECDHE-ECDSA-AES256-SHA384
    + +

    + A suppressed cipher will not longer be used. + If you name a cipher that is unknown, the configuration will fail. + If you name a cipher is not supported by rustls (or no + longer supported in an updated version of rustls for security + reasons), mod_tls will log a WARNING, but continue to work. +

    +
    top
    +
    +

    Virtual Hosts

    +

    + mod_tls uses the SNI (Server Name Indicator) to select one of the + configured virtual hosts that match the port being served. Should + the client not provide an SNI, the first configured + virtual host will be selected. If the client does provide + an SNI (as all today's clients do), it must match one + virtual host (ServerName or ServerAlias) + or the connection will fail. +

    +

    + As with mod_ssl, you may specify ciphers and protocol + versions for the base server (global) and/or individual virtual hosts + that are selected via SNI by the client. +

    +
    Listen 443
    +TLSEngine 443
    +
    +<VirtualHost *:443>
    +  ServerName example1.net
    +  TLSCertificate example1-cert.pem
    +  ...
    +</VirtualHost>
    +
    +<VirtualHost *:443>
    +  ServerName example2.net
    +  TLSCertificate example2-cert.pem
    +  ...
    +  TLSProtocol v1.3+
    +</VirtualHost>
    + +

    + The example above show different TLS settings for virtual hosts on the + same port. This is supported. example1 can be contacted via + all TLS versions and example2 only allows v1.3 or later. +

    +
    top
    +
    +

    ACME Certificates

    +

    + ACME certificates via mod_md are supported, just as + for mod_ssl. A minimal configuration: +

    +
    Listen 443
    +TLSEngine 443
    +MDomain example.net
    +
    +<VirtualHost *:443>
    +  ServerName example.net
    +  ...
    +</VirtualHost>
    + +
    top
    +
    +

    OCSP Stapling

    +

    + mod_tls has no own implementation to retrieve OCSP information for + a certificate. However, it will use such for Stapling if it is provided + by mod_md. See mod_md's documentation + on how to enable this. +

    +
    top
    +
    +

    TLS Variables

    +

    + Via the directive TLSOptions, several variables + are placed into the environment of requests and can be inspected, for + example in a CGI script. +

    +

    + The variable names are given by mod_ssl. Note that these + are only a subset of the many variables that mod_ssl exposes. +

    + + + + + + + + + + + + + +
    VariableTLSOptionDescription
    SSL_TLS_SNI*the server name indicator (SNI) send by the client
    SSL_PROTOCOL*the TLS protocol negotiated
    SSL_CIPHER*the name of the TLS cipher negotiated
    SSL_VERSION_INTERFACEStdEnvVarsthe module version
    SSL_VERSION_LIBRARYStdEnvVarsthe rustls-ffi version
    SSL_SECURE_RENEGStdEnvVarsalways `false`
    SSL_COMPRESS_METHODStdEnvVarsalways `false`
    SSL_CIPHER_EXPORTStdEnvVarsalways `false`
    SSL_CLIENT_VERIFYStdEnvVarsalways `false`
    SSL_SESSION_RESUMEDStdEnvVarseither `Resumed` if a known TLS session id was presented by the client or `Initial` otherwise
    SSL_SERVER_CERTExportCertDatathe selected server certificate in PEM format
    +

    + The variable SSL_SESSION_ID is intentionally not supported as + it contains sensitive information. +

    +
    top
    +
    +

    Client Certificates

    +

    + While rustls supports client certificates in principle, parts + of the infrastructure to make use of these in a server are not + offered. +

    +

    + Among these features are: revocation lists, inspection of certificate + extensions and the matched issuer chain for OCSP validation. Without these, + revocation of client certificates is not possible. Offering authentication + without revocation is not considered an option. +

    +

    + Work will continue on this and client certificate support may become + available in a future release. +

    +
    +
    top
    +

    TLSCertificate Directive

    + + + + + + +
    Description:adds a certificate and key (PEM encoded) to a server/virtual host.
    Syntax:TLSCertificate cert_file [key_file]
    Context:server config, virtual host
    Status:Experimental
    Module:mod_tls
    +

    + If you do not specify a separate key file, the key is assumed to also be + found in the first file. You may add more than one certificate to a + server/virtual host. The first certificate suitable for a client is then chosen. +

    + The path can be specified relative to the server root. +

    + +
    +
    top
    +

    TLSCiphersPrefer Directive

    + + + + + + +
    Description:defines ciphers that are preferred.
    Syntax:TLSCiphersPrefer cipher(-list)
    Context:server config, virtual host
    Status:Experimental
    Module:mod_tls
    +

    + This will not disable any ciphers supported by `rustls`. If you + specify a cipher that is completely unknown, the configuration will + fail. If you specify a cipher that is known but not supported by `rustls`, + a warning will be logged but the server will continue. +

    +

    +

    Example

    TLSCiphersPrefer ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305
    +
    +

    + The example gives 2 ciphers preference over others, in the + order they are mentioned. +

    + +
    +
    top
    +

    TLSCiphersSuppress Directive

    + + + + + + +
    Description:defines ciphers that are not to be used.
    Syntax:TLSCiphersSuppress cipher(-list)
    Context:server config, virtual host
    Status:Experimental
    Module:mod_tls
    +

    + This will not disable any unmentioned ciphers supported by `rustls`. + If you specify a cipher that is completely unknown, the configuration will fail. + If you specify a cipher that is known but not supported by `rustls`, + a warning will be logged but the server will continue. +

    +

    +

    Example

    TLSCiphersSuppress ECDHE-ECDSA-CHACHA20-POLY1305
    +
    +

    + The example removes a cipher for use in connections. +

    + +
    +
    top
    +

    TLSEngine Directive

    + + + + + + +
    Description:defines on which address+port the module shall handle incoming connections.
    Syntax:TLSEngine [address:]port
    Context:server config
    Status:Experimental
    Module:mod_tls
    +

    + This is set on a global level, not in individual `VirtualHost`s. + It will affect all `VirtualHost` that match the specified address/port. + You can use `TLSEngine` several times to use more than one address/port. +

    +

    +

    Example

    TLSEngine 443
    +
    +

    + The example tells mod_tls to handle incoming connection on port 443 for + all listeners. +

    + +
    +
    top
    +

    TLSHonorClientOrder Directive

    + + + + + + +
    Description:
    Syntax:TLSHonorClientOrder on|off
    Context:server config, virtual host
    Status:Experimental
    Module:mod_tls
    +

    + TLSHonorClientOrder determines if the order of ciphers + supported by the client is honored. This is `on` by default. +

    +

    + +
    +
    top
    +

    TLSOptions Directive

    + + + + + + +
    Description:enables SSL variables for requests.
    Syntax:TLSOptions [+|-]option
    Context:server config, virtual host, directory, .htaccess
    Status:Experimental
    Module:mod_tls
    +

    + TLSOptions is analog to `SSLOptions` in mod_ssl. + It can be set per directory/location and `option` can be: +

    +
      +
    • `StdEnvVars`: adds more variables to the requests environment, + as forwarded for example to CGI processing and other applications. +
    • +
    • `ExportCertData`: adds certificate related variables to the request environment. +
    • +
    • `Defaults`: resets all options to their default values.
    • +
    +

    + Adding variables to a request environment adds overhead, especially + when certificates need to be inspected and fields extracted. + Therefore most variables are not set by default. +

    +

    + You can configure `TLSOptions` per location or generally on a + server/virtual host. Prefixing an option with `-` disables this + option while leaving others unchanged. + A `+` prefix is the same as writing the option without one. +

    +

    + The `Defaults` value can be used to reset any options that are + inherited from other locations or the virtual host/server. +

    +

    Example

    <Location /myplace/app>
    +  TLSOptions Defaults StdEnvVars
    +  ...
    +</Location>
    +
    + +
    +
    top
    +

    TLSProtocol Directive

    + + + + + + +
    Description:specifies the minimum version of the TLS protocol to use.
    Syntax:TLSProtocol version+
    Context:server config, virtual host
    Status:Experimental
    Module:mod_tls
    +

    + The default is `v1.2+`. Settings this to `v1.3+` would disable TLSv1.2. +

    + +
    +
    top
    +

    TLSProxyCA Directive

    + + + + + + +
    Description:sets the root certificates to validate the backend server with.
    Syntax:TLSProxyCA file.pem
    Context:server config, virtual host, proxy section
    Status:Experimental
    Module:mod_tls
    +

    + `TLSProxyEngine on|off` is analog to `SSLProxyCACertificatePath` in mod_ssl. +

    + +
    +
    top
    +

    TLSProxyCipherPrefer Directive

    + + + + + + +
    Description:defines ciphers that are preferred for a proxy connection.
    Syntax:TLSProxyCipherPrefer cipher(-list)
    Context:server config, virtual host, proxy section
    Status:Experimental
    Module:mod_tls
    +

    + This will not disable any ciphers supported by `rustls`. + If you specify a cipher that is completely unknown, the configuration will fail. + If you specify a cipher that is known but not supported by `rustls`, + a warning will be logged but the server will continue. +

    + +
    +
    top
    +

    TLSProxyCipherSuppress Directive

    + + + + + + +
    Description:defines ciphers that are not to be used for a proxy connection.
    Syntax:TLSProxyCipherSuppress cipher(-list)
    Context:server config, virtual host, proxy section
    Status:Experimental
    Module:mod_tls
    +

    + This will not disable any unmentioned ciphers supported by `rustls`. + If you specify a cipher that is completely unknown, the configuration will fail. + If you specify a cipher that is known but not supported by `rustls`, + a warning will be logged but the server will continue. +

    + +
    +
    top
    +

    TLSProxyEngine Directive

    + + + + + + +
    Description:enables TLS for backend connections.
    Syntax:TLSProxyEngine on|off
    Context:server config, virtual host, proxy section
    Status:Experimental
    Module:mod_tls
    +

    + `TLSProxyEngine on|off` is analog to `SSLProxyEngine` in mod_ssl. +

    + This can be used in a server/virtual host or `<Proxy>` section to + enable the module for outgoing connections using `mod_proxy`. +

    + +
    +
    top
    +

    TLSProxyMachineCertificate Directive

    + + + + + + +
    Description:adds a certificate and key file (PEM encoded) to a proxy setup.
    Syntax:TLSProxyMachineCertificate cert_file [key_file]
    Context:server config, virtual host, proxy section
    Status:Experimental
    Module:mod_tls
    +

    + The certificate is used to authenticate against a proxied backend server. +

    + If you do not specify a separate key file, the key is assumed to also be + found in the first file. You may add more than one certificate to a proxy + setup. The first certificate suitable for a proxy connection to a backend + is then chosen by rustls. +

    +

    + The path can be specified relative to the server root. +

    + +
    +
    top
    +

    TLSProxyProtocol Directive

    + + + + + + +
    Description:specifies the minimum version of the TLS protocol to use in proxy connections.
    Syntax:TLSProxyProtocol version+
    Context:server config, virtual host, proxy section
    Status:Experimental
    Module:mod_tls
    +

    + The default is `v1.2+`. Settings this to `v1.3+` would disable TLSv1.2. +

    + +
    +
    top
    +

    TLSSessionCache Directive

    + + + + + + +
    Description:specifies the cache for TLS session resumption.
    Syntax:TLSSessionCache cache-spec
    Context:server config
    Status:Experimental
    Module:mod_tls
    +

    + This uses a cache on the server side to allow clients to resume connections. +

    + You can set this to `none` or define a cache as in the `SSLSessionCache` + directive of mod_ssl. +

    + If not configured, `mod_tls` will try to create a shared memory cache on its own, + using `shmcb:tls/session-cache` as specification. + Should that fail, a warning is logged, but the server continues. +

    + +
    +
    top
    +

    TLSStrictSNI Directive

    + + + + + + +
    Description:enforces exact matches of client server indicators (SNI) against host names.
    Syntax:TLSStrictSNI on|off
    Context:server config
    Status:Experimental
    Module:mod_tls
    +

    + Client connections using SNI will be unsuccessful if no match is found. This is `on` by default. +

    + +
    + +
    +

    Available Languages:  en 

    +
    top

    Comments

    Notice:
    This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.
    +
    + \ No newline at end of file diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.de apache2-2.4.52/docs/manual/mod/quickreference.html.de --- apache2-2.4.51/docs/manual/mod/quickreference.html.de 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.de 2021-12-16 13:44:25.000000000 +0000 @@ -715,452 +715,468 @@ MDChallengeDns01 path-to-commandsX- MDContactEmail addresssX- MDDriveMode always|auto|manual auto sXformer name of MDRenewMode. -MDHttpProxy urlsXDefine a proxy for outgoing connections. -MDMember hostnamesXAdditional hostname for the managed domain. -MDMembers auto|manual auto sXControl if the alias domain names are automatically added. -MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains -MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. -MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. -MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. -MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. -MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. -MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. -MDRenewWindow duration 33% sXControl when a certificate will be renewed. -MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. -MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. -MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. -MDStapling on|off off sXEnable stapling for all or a particular MDomain. -MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. -MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. -MDStoreDir path md sXPath on the local file system to store the Managed Domains data. -MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. -MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections -MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. +MDExternalAccountBinding key-id hmac-64 | none | file none sX- +MDHttpProxy urlsXDefine a proxy for outgoing connections. +MDMember hostnamesXAdditional hostname for the managed domain. +MDMembers auto|manual auto sXControl if the alias domain names are automatically added. +MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains +MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. +MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. +MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. +MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. +MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. +MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. +MDRenewWindow duration 33% sXControl when a certificate will be renewed. +MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. +MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. +MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. +MDStapling on|off off sXEnable stapling for all or a particular MDomain. +MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. +MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. +MDStoreDir path md sXPath on the local file system to store the Managed Domains data. +MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. +MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections +MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. -MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers -MetaDir directory .web svdhEName of the directory to find CERN-style meta information +MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers +MetaDir directory .web svdhEName of the directory to find CERN-style meta information files -MetaFiles on|off off svdhEActivates CERN meta-file processing -MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style +MetaFiles on|off off svdhEActivates CERN meta-file processing +MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style meta information -MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents +MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents using the specified magic file -MinSpareServers Anzahl 5 sMMinimale Anzahl der unbeschäftigten Kindprozesse des +MinSpareServers Anzahl 5 sMMinimale Anzahl der unbeschäftigten Kindprozesse des Servers -MinSpareThreads AnzahlsMMinimale Anzahl unbeschäftigter Threads, die zur +MinSpareThreads AnzahlsMMinimale Anzahl unbeschäftigter Threads, die zur Bedienung von Anfragespitzen zur Verfügung stehen -MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time -ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate -ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info +MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time +ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate +ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info components as part of the filename -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for a matching file with MultiViews -Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all +Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all or specified mutexes -NameVirtualHost Adresse[:Port]sCBestimmt eine IP-Adresse für den Betrieb namensbasierter +NameVirtualHost Adresse[:Port]sCBestimmt eine IP-Adresse für den Betrieb namensbasierter virtueller Hosts -NoProxy host [host] ...svEHosts, domains, or networks that will be connected to +NoProxy host [host] ...svEHosts, domains, or networks that will be connected to directly -NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates -NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request -Options - [+|-]Option [[+|-]Option] ... All svdhCDefiniert, welche Eigenschaften oder Funktionen in einem +NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates +NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request +Options + [+|-]Option [[+|-]Option] ... All svdhCDefiniert, welche Eigenschaften oder Funktionen in einem bestimmten Verzeichnis verfügbar sind - Order ordering Deny,Allow dhEControls the default access state and the order in which + Order ordering Deny,Allow dhEControls the default access state and the order in which Allow and Deny are evaluated. -OutputSed sed-commanddhXSed command for filtering response content -PassEnv env-variable [env-variable] -...svdhBPasses environment variables from the shell -PidFile Dateiname logs/httpd.pid sMDatei, in welcher der Server die Prozess-ID des Daemons +OutputSed sed-commanddhXSed command for filtering response content +PassEnv env-variable [env-variable] +...svdhBPasses environment variables from the shell +PidFile Dateiname logs/httpd.pid sMDatei, in welcher der Server die Prozess-ID des Daemons ablegt -PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against +PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against malicious privileges-aware code. -Protocol protocolsvCProtocol for a listening socket -ProtocolEcho On|Off Off svXTurn the echo server on or off -Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host -ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation -<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources -Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server -ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers -ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a +Protocol protocolsvCProtocol for a listening socket +ProtocolEcho On|Off Off svXTurn the echo server on or off +Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host +ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation +<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources +Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server +ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers +ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a response -ProxyBlock *|word|host|domain -[word|host|domain] ...svEWords, hosts, or domains that are banned from being +ProxyBlock *|word|host|domain +[word|host|domain] ...svEWords, hosts, or domains that are banned from being proxied -ProxyDomain DomainsvEDefault domain name for proxied requests -ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content -ProxyExpressDBMFile pathnamesvEPathname to DBM file. -ProxyExpressDBMType type default svEDBM type of file. -ProxyExpressEnable on|off off svEEnable the module functionality. -ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application -ProxyFCGISetEnvIf conditional-expression +ProxyDomain DomainsvEDefault domain name for proxied requests +ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content +ProxyExpressDBMFile pathnamesvEPathname to DBM file. +ProxyExpressDBMType type default svEDBM type of file. +ProxyExpressEnable on|off off svEEnable the module functionality. +ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up -ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings -ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server -ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing -ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response -ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters -ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers -ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and + [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up +ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings +ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server +ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing +ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response +ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters +ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers +ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and stylesheets. -ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. -ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. -ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. -ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, +ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. +ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. +ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. +ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, and scripting events. -ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. -ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of +ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. +ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of ProxyHTMLURLMap rules. -ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. -ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML +ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. +ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML <head> sections. -ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. -ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links -ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer -<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched +ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. +ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links +ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer +<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched proxied resources -ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded +ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded through -ProxyPass [path] !|url [key=value - [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space -ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server -ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations -ProxyPassMatch [regex] !|url [key=value - [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions -ProxyPassReverse [path] url -[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse +ProxyPass [path] !|url [key=value + [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space +ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server +ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations +ProxyPassMatch [regex] !|url [key=value + [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions +ProxyPassReverse [path] url +[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse proxied server -ProxyPassReverseCookieDomain internal-domain -public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- +ProxyPassReverseCookieDomain internal-domain +public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- proxied server -ProxyPassReverseCookiePath internal-path -public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- +ProxyPassReverseCookiePath internal-path +public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- proxied server -ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy +ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy request -ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP +ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP connections -ProxyRemote match remote-serversvERemote proxy used to handle certain requests -ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular +ProxyRemote match remote-serversvERemote proxy used to handle certain requests +ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular expressions -ProxyRequests On|Off Off svEEnables forward (standard) proxy requests -ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the +ProxyRequests On|Off Off svEEnables forward (standard) proxy requests +ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the backend -ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response +ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response header -ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters -ProxySourceAddress addresssvESet local IP address for outgoing proxy connections -ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status -ProxyTimeout secondssvENetwork timeout for proxied requests -ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response +ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters +ProxySourceAddress addresssvESet local IP address for outgoing proxy connections +ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status +ProxyTimeout secondssvENetwork timeout for proxied requests +ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response header for proxied requests -ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request -QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is +ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request +QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is fully qualified -ReadBufferSize bytes 8192 svdCSize of the buffers used to read data -ReadmeName filenamesvdhBName of the file that will be inserted at the end +ReadBufferSize bytes 8192 svdCSize of the buffers used to read data +ReadmeName filenamesvdhBName of the file that will be inserted at the end of the index listing -ReceiveBufferSize bytes 0 sMTCP receive buffer size -Redirect [status] [URL-path] -URLsvdhBSends an external redirect asking the client to fetch +ReceiveBufferSize bytes 0 sMTCP receive buffer size +Redirect [status] [URL-path] +URLsvdhBSends an external redirect asking the client to fetch a different URL -RedirectMatch [status] regex -URLsvdhBSends an external redirect based on a regular expression match +RedirectMatch [status] regex +URLsvdhBSends an external redirect based on a regular expression match of the current URL -RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch +RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch a different URL -RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch +RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch a different URL -RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) -RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) -ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers -RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes -RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods -RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses -RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses -RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks -RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoveCharset extension [extension] -...vdhBRemoves any character set associations for a set of file +RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) +RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) +ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers +RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes +RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods +RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses +RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses +RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks +RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoveCharset extension [extension] +...vdhBRemoves any character set associations for a set of file extensions -RemoveEncoding extension [extension] -...vdhBRemoves any content encoding associations for a set of file +RemoveEncoding extension [extension] +...vdhBRemoves any content encoding associations for a set of file extensions -RemoveHandler extension [extension] -...vdhBRemoves any handler associations for a set of file +RemoveHandler extension [extension] +...vdhBRemoves any handler associations for a set of file extensions -RemoveInputFilter extension [extension] -...vdhBRemoves any input filter associations for a set of file +RemoveInputFilter extension [extension] +...vdhBRemoves any input filter associations for a set of file extensions -RemoveLanguage extension [extension] -...vdhBRemoves any language associations for a set of file +RemoveLanguage extension [extension] +...vdhBRemoves any language associations for a set of file extensions -RemoveOutputFilter extension [extension] -...vdhBRemoves any output filter associations for a set of file +RemoveOutputFilter extension [extension] +...vdhBRemoves any output filter associations for a set of file extensions -RemoveType extension [extension] -...vdhBRemoves any content type associations for a set of file +RemoveType extension [extension] +...vdhBRemoves any content type associations for a set of file extensions -RequestHeader add|append|edit|edit*|merge|set|setifempty|unset +RequestHeader add|append|edit|edit*|merge|set|setifempty|unset header [[expr=]value [replacement] [early|env=[!]varname|expr=expression]] -svdhEConfigure HTTP request headers -RequestReadTimeout +svdhEConfigure HTTP request headers +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] - handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving + handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving the request headers and/or body from client. -Require [not] entity-name - [entity-name] ...dhBTests whether an authenticated user is authorized by +Require [not] entity-name + [entity-name] ...dhBTests whether an authenticated user is authorized by an authorization provider. -<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none +<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none must fail and at least one must succeed for the enclosing directive to succeed. -<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one +<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one must succeed for the enclosing directive to succeed. -<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none +<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none must succeed for the enclosing directive to not fail. -RewriteBase URL-pathdhESets the base URL for per-directory rewrites - RewriteCond - TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place +RewriteBase URL-pathdhESets the base URL for per-directory rewrites + RewriteCond + TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place -RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine -RewriteMap MapName MapType:MapSource +RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine +RewriteMap MapName MapType:MapSource [MapTypeOptions] -svEDefines a mapping function for key-lookup -RewriteOptions OptionssvdhESets some special options for the rewrite engine -RewriteRule - Pattern Substitution [flags]svdhEDefines rules for the rewriting engine -RLimitCPU Sekunden|max [Sekunden|max]svdhCBegrenzt den CPU-Verbrauch von Prozessen, die von +svEDefines a mapping function for key-lookup +RewriteOptions OptionssvdhESets some special options for the rewrite engine +RewriteRule + Pattern Substitution [flags]svdhEDefines rules for the rewriting engine +RLimitCPU Sekunden|max [Sekunden|max]svdhCBegrenzt den CPU-Verbrauch von Prozessen, die von Apache-Kindprozessen gestartet wurden -RLimitMEM Bytes|max [Bytes|max]svdhCBegrenzt den Speicherverbrauch von Prozessen, die von +RLimitMEM Bytes|max [Bytes|max]svdhCBegrenzt den Speicherverbrauch von Prozessen, die von Apache-Kindprozessen gestartet wurden -RLimitNPROC Zahl|max [Zahl|max]svdhCBegrenzt die Anzahl der Prozesse, die von Prozessen gestartet +RLimitNPROC Zahl|max [Zahl|max]svdhCBegrenzt die Anzahl der Prozesse, die von Prozessen gestartet werden können, der ihrerseits von Apache-Kinprozessen gestartet wurden -Satisfy Any|All All dhEInteraction between host-level access control and +Satisfy Any|All All dhEInteraction between host-level access control and user authentication -ScoreBoardFile Dateipfad logs/apache_status sMAblageort der Datei, die zur Speicherung von Daten zur +ScoreBoardFile Dateipfad logs/apache_status sMAblageort der Datei, die zur Speicherung von Daten zur Koordinierung der Kindprozesse verwendet wird -Script Methode CGI-SkriptsvdBAktiviert ein CGI-Skript für eine bestimmte +Script Methode CGI-SkriptsvdBAktiviert ein CGI-Skript für eine bestimmte Anfragemethode. -ScriptAlias [URL-path] -file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the +ScriptAlias [URL-path] +file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the target as a CGI script -ScriptAliasMatch regex -file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression +ScriptAliasMatch regex +file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression and designates the target as a CGI script -ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCMethode zur Ermittlung des Interpreters von +ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCMethode zur Ermittlung des Interpreters von CGI-Skripten -ScriptLog file-pathsvBLocation of the CGI script error logfile -ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded +ScriptLog file-pathsvBLocation of the CGI script error logfile +ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded in the scriptlog -ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile -ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with +ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile +ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with the cgi daemon -SecureListen [IP-address:]portnumber -Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port -SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters +SecureListen [IP-address:]portnumber +Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port +SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters of a request or the last 63, assuming the request itself is greater than 63 chars. -SendBufferSize Bytes 0 sMGröße des TCP-Puffers -ServerAdmin E-Mail-Adresse|URLsvCE-Mail-Adresse, die der Server in Fehlermeldungen einfügt, +SendBufferSize Bytes 0 sMGröße des TCP-Puffers +ServerAdmin E-Mail-Adresse|URLsvCE-Mail-Adresse, die der Server in Fehlermeldungen einfügt, welche an den Client gesendet werden -ServerAlias Hostname [Hostname] ...vCAlternativer Name für einen Host, der verwendet wird, wenn +ServerAlias Hostname [Hostname] ...vCAlternativer Name für einen Host, der verwendet wird, wenn Anfragen einem namensbasierten virtuellen Host zugeordnet werden -ServerLimit AnzahlsMObergrenze für die konfigurierbare Anzahl von +ServerLimit AnzahlsMObergrenze für die konfigurierbare Anzahl von Prozessen -ServerName -voll-qualifizierter-Domainname[:port]svCRechnername und Port, die der Server dazu verwendet, sich +ServerName +voll-qualifizierter-Domainname[:port]svCRechnername und Port, die der Server dazu verwendet, sich selbst zu identifizieren -ServerPath URL-PfadvCVeralteter URL-Pfad für einen namensbasierten +ServerPath URL-PfadvCVeralteter URL-Pfad für einen namensbasierten virtuellen Host, auf den von einem inkompatiblen Browser zugegriffen wird -ServerRoot Verzeichnis /usr/local/apache sCBasisverzeichnis der Serverinstallation -ServerSignature On|Off|EMail Off svdhCKonfiguriert die Fußzeile von servergenerierten +ServerRoot Verzeichnis /usr/local/apache sCBasisverzeichnis der Serverinstallation +ServerSignature On|Off|EMail Off svdhCKonfiguriert die Fußzeile von servergenerierten Dokumenten -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCKonfiguriert den HTTP-Response-Header +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCKonfiguriert den HTTP-Response-Header Server -Session On|Off Off svdhEEnables a session for the current directory or location -SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session -SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session -SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers -SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session -SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session -SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session -SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session -SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID -SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID -SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers -SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database -SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database -SessionDBDPerUser On|Off Off svdhEEnable a per user session -SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database -SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database -SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the +Session On|Off Off svdhEEnables a session for the current directory or location +SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session +SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session +SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers +SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session +SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session +SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session +SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session +SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID +SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID +SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers +SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database +SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database +SessionDBDPerUser On|Off Off svdhEEnable a per user session +SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database +SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database +SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the HTTP_SESSION environment variable -SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored -SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without +SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored +SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without the session being updated -SessionHeader headersvdhEImport session updates from a given HTTP response header -SessionInclude pathsvdhEDefine URL prefixes for which a session is valid -SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session -SetEnv env-variable [value]svdhBSets environment variables -SetEnvIf attribute +SessionHeader headersvdhEImport session updates from a given HTTP response header +SessionInclude pathsvdhEDefine URL prefixes for which a session is valid +SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session +SetEnv env-variable [value]svdhBSets environment variables +SetEnvIf attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request -SetEnvIfExpr expr +SetEnvIfExpr expr [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression -SetEnvIfNoCase attribute regex + [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression +SetEnvIfNoCase attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request without respect to case -SetHandler Handlername|NonesvdhCErzwingt die Verarbeitung aller passenden Dateien durch +SetHandler Handlername|NonesvdhCErzwingt die Verarbeitung aller passenden Dateien durch einen Handler -SetInputFilter Filter[;Filter...]svdhCBestimmt die Filter, die Client-Anfragen und POST-Eingaben +SetInputFilter Filter[;Filter...]svdhCBestimmt die Filter, die Client-Anfragen und POST-Eingaben verarbeiten -SetOutputFilter Filter[;Filter...]svdhCBestimmt die Filter, die Antworten des Servers verarbeiten -SSIEndTag tag "-->" svBString that ends an include element -SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI +SetOutputFilter Filter[;Filter...]svdhCBestimmt die Filter, die Antworten des Servers verarbeiten +SSIEndTag tag "-->" svBString that ends an include element +SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI error -SSIETag on|off off dhBControls whether ETags are generated by the server. -SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the +SSIETag on|off off dhBControls whether ETags are generated by the server. +SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the server. -SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. -SSIStartTag tag "<!--#" svBString that starts an include element -SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are +SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. +SSIStartTag tag "<!--#" svBString that starts an include element +SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are displayed -SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed -SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed +SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Client Auth -SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Client Auth -SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for defining acceptable CA names -SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for defining acceptable CA names -SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking -SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking +SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Client Auth -SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Client Auth -SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates -SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier -SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file -SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL +SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates +SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier +SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file +SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL handshake -SSLCompression on|off off svEEnable compression on the SSL level -SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator -SSLEngine on|off|optional off svESSL Engine Operation Switch -SSLFIPS on|off off sESSL FIPS mode Switch -SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order -SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation -SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation -SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain -SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification -SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation -SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests -SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates -SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries -SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses -SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation -SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries -SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API -SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options -SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private +SSLCompression on|off off svEEnable compression on the SSL level +SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator +SSLEngine on|off|optional off svESSL Engine Operation Switch +SSLFIPS on|off off sESSL FIPS mode Switch +SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order +SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation +SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation +SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain +SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification +SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation +SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests +SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates +SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries +SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses +SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation +SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries +SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API +SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options +SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private keys -SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions -SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions +SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth -SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth +SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field +SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field -SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired +SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired -SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates +SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL proxy handshake -SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch -SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate -SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy -SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy -SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage -SSLProxyVerify level none svEType of remote server Certificate verification -SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server +SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch +SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate +SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy +SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy +SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage +SSLProxyVerify level none svEType of remote server Certificate verification +SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server Certificate verification -SSLRandomSeed context source -[bytes]sEPseudo Random Number Generator (PRNG) seeding +SSLRandomSeed context source +[bytes]sEPseudo Random Number Generator (PRNG) seeding source -SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer -SSLRequire expressiondhEAllow access only when an arbitrarily complex +SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer +SSLRequire expressiondhEAllow access only when an arbitrarily complex boolean expression is true -SSLRequireSSLdhEDeny access when SSL is not used for the +SSLRequireSSLdhEDeny access when SSL is not used for the HTTP request -SSLSessionCache type none sEType of the global/inter-process SSL Session +SSLSessionCache type none sEType of the global/inter-process SSL Session Cache -SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires +SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires in the Session Cache -SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets -SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets -SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed -SSLSRPVerifierFile file-pathsvEPath to SRP verifier file -SSLStaplingCache typesEConfigures the OCSP stapling cache -SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache -SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries -SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension -SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries -SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses -SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation -SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client -SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache -SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual +SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets +SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets +SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed +SSLSRPVerifierFile file-pathsvEPath to SRP verifier file +SSLStaplingCache typesEConfigures the OCSP stapling cache +SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache +SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries +SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension +SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries +SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses +SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation +SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client +SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache +SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual host. -SSLUserName varnamesdhEVariable name to determine user name -SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake -SSLVerifyClient level none svdhEType of Client Certificate verification -SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client +SSLUserName varnamesdhEVariable name to determine user name +SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake +SSLVerifyClient level none svdhEType of Client Certificate verification +SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client Certificate verification -StartServers AnzahlsMAnzahl der Kindprozesse des Servers, die beim Start erstellt +StartServers AnzahlsMAnzahl der Kindprozesse des Servers, die beim Start erstellt werden -StartThreads AnzahlsMAnzahl der Threads, die beim Start erstellt werden -StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be +StartThreads AnzahlsMAnzahl der Threads, die beim Start erstellt werden +StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be listed enumerated in the virtual host handling the request -Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content -SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns -SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size -Suexec On|OffsBEnable or disable the suEXEC feature -SuexecUserGroup User GroupsvEUser and group for CGI programs to run as -ThreadLimit AnzahlsMBestimmt die Obergrenze der konfigurierbaren Anzahl von Threads +Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content +SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns +SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size +Suexec On|OffsBEnable or disable the suEXEC feature +SuexecUserGroup User GroupsvEUser and group for CGI programs to run as +ThreadLimit AnzahlsMBestimmt die Obergrenze der konfigurierbaren Anzahl von Threads pro Kindprozess -ThreadsPerChild AnzahlsMAnzahl der Threads, die mit jedem Kindprozess gestartet +ThreadsPerChild AnzahlsMAnzahl der Threads, die mit jedem Kindprozess gestartet werden -ThreadStackSize sizesMDie Größe des Stacks in Bytes, der von Threads +ThreadStackSize sizesMDie Größe des Stacks in Bytes, der von Threads verwendet wird, die Client-Verbindungen bearbeiten. -TimeOut Sekunden 60 sCZeitspanne, die der Server auf verschiedene Ereignisse wartet, +TimeOut Sekunden 60 sCZeitspanne, die der Server auf verschiedene Ereignisse wartet, bevor er die Anfrage abbricht +TLSCertificate cert_file [key_file]svXadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)svXdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)svXdefines ciphers that are not to be used. +TLSEngine [address:]portsXdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offsvX- +TLSOptions [+|-]optionsvdhXenables SSL variables for requests. +TLSProtocol version+svXspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemsvXsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)svXdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)svXdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offsvXenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]svXadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+svXspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsXspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsXenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on sCLegt das Verhalten von TRACE-Anfragen fest TransferLog file|pipesvBSpecify location of a log file TypesConfig file-path conf/mime.types sBThe location of the mime.types file diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.en apache2-2.4.52/docs/manual/mod/quickreference.html.en --- apache2-2.4.51/docs/manual/mod/quickreference.html.en 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.en 2021-12-16 13:44:25.000000000 +0000 @@ -708,445 +708,461 @@ MDChallengeDns01 path-to-commandsX- MDContactEmail addresssX- MDDriveMode always|auto|manual auto sXformer name of MDRenewMode. -MDHttpProxy urlsXDefine a proxy for outgoing connections. -MDMember hostnamesXAdditional hostname for the managed domain. -MDMembers auto|manual auto sXControl if the alias domain names are automatically added. -MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains -MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. -MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. -MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. -MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. -MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. -MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. -MDRenewWindow duration 33% sXControl when a certificate will be renewed. -MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. -MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. -MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. -MDStapling on|off off sXEnable stapling for all or a particular MDomain. -MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. -MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. -MDStoreDir path md sXPath on the local file system to store the Managed Domains data. -MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. -MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections -MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. +MDExternalAccountBinding key-id hmac-64 | none | file none sX- +MDHttpProxy urlsXDefine a proxy for outgoing connections. +MDMember hostnamesXAdditional hostname for the managed domain. +MDMembers auto|manual auto sXControl if the alias domain names are automatically added. +MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains +MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. +MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. +MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. +MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. +MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. +MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. +MDRenewWindow duration 33% sXControl when a certificate will be renewed. +MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. +MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. +MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. +MDStapling on|off off sXEnable stapling for all or a particular MDomain. +MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. +MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. +MDStoreDir path md sXPath on the local file system to store the Managed Domains data. +MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. +MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections +MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. -MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers -MetaDir directory .web svdhEName of the directory to find CERN-style meta information +MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers +MetaDir directory .web svdhEName of the directory to find CERN-style meta information files -MetaFiles on|off off svdhEActivates CERN meta-file processing -MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style +MetaFiles on|off off svdhEActivates CERN meta-file processing +MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style meta information -MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents +MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents using the specified magic file -MinSpareServers number 5 sMMinimum number of idle child server processes -MinSpareThreads numbersMMinimum number of idle threads available to handle request +MinSpareServers number 5 sMMinimum number of idle child server processes +MinSpareThreads numbersMMinimum number of idle threads available to handle request spikes -MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time -ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate -ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info +MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time +ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate +ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info components as part of the filename -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for a matching file with MultiViews -Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all +Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all or specified mutexes -NameVirtualHost addr[:port]sCDEPRECATED: Designates an IP address for name-virtual +NameVirtualHost addr[:port]sCDEPRECATED: Designates an IP address for name-virtual hosting -NoProxy host [host] ...svEHosts, domains, or networks that will be connected to +NoProxy host [host] ...svEHosts, domains, or networks that will be connected to directly -NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates -NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request -Options - [+|-]option [[+|-]option] ... FollowSymlinks svdhCConfigures what features are available in a particular +NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates +NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request +Options + [+|-]option [[+|-]option] ... FollowSymlinks svdhCConfigures what features are available in a particular directory - Order ordering Deny,Allow dhEControls the default access state and the order in which + Order ordering Deny,Allow dhEControls the default access state and the order in which Allow and Deny are evaluated. -OutputSed sed-commanddhXSed command for filtering response content -PassEnv env-variable [env-variable] -...svdhBPasses environment variables from the shell -PidFile filename logs/httpd.pid sMFile where the server records the process ID +OutputSed sed-commanddhXSed command for filtering response content +PassEnv env-variable [env-variable] +...svdhBPasses environment variables from the shell +PidFile filename logs/httpd.pid sMFile where the server records the process ID of the daemon -PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against +PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against malicious privileges-aware code. -Protocol protocolsvCProtocol for a listening socket -ProtocolEcho On|Off Off svXTurn the echo server on or off -Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host -ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation -<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources -Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server -ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers -ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a +Protocol protocolsvCProtocol for a listening socket +ProtocolEcho On|Off Off svXTurn the echo server on or off +Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host +ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation +<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources +Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server +ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers +ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a response -ProxyBlock *|word|host|domain -[word|host|domain] ...svEWords, hosts, or domains that are banned from being +ProxyBlock *|word|host|domain +[word|host|domain] ...svEWords, hosts, or domains that are banned from being proxied -ProxyDomain DomainsvEDefault domain name for proxied requests -ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content -ProxyExpressDBMFile pathnamesvEPathname to DBM file. -ProxyExpressDBMType type default svEDBM type of file. -ProxyExpressEnable on|off off svEEnable the module functionality. -ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application -ProxyFCGISetEnvIf conditional-expression +ProxyDomain DomainsvEDefault domain name for proxied requests +ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content +ProxyExpressDBMFile pathnamesvEPathname to DBM file. +ProxyExpressDBMType type default svEDBM type of file. +ProxyExpressEnable on|off off svEEnable the module functionality. +ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up -ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings -ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server -ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing -ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response -ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters -ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers -ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and + [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up +ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings +ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server +ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing +ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response +ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters +ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers +ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and stylesheets. -ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. -ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. -ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. -ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, +ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. +ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. +ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. +ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, and scripting events. -ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. -ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of +ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. +ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of ProxyHTMLURLMap rules. -ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. -ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML +ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. +ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML <head> sections. -ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. -ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links -ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer -<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched +ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. +ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links +ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer +<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched proxied resources -ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded +ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded through -ProxyPass [path] !|url [key=value - [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space -ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server -ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations -ProxyPassMatch [regex] !|url [key=value - [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions -ProxyPassReverse [path] url -[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse +ProxyPass [path] !|url [key=value + [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space +ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server +ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations +ProxyPassMatch [regex] !|url [key=value + [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions +ProxyPassReverse [path] url +[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse proxied server -ProxyPassReverseCookieDomain internal-domain -public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- +ProxyPassReverseCookieDomain internal-domain +public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- proxied server -ProxyPassReverseCookiePath internal-path -public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- +ProxyPassReverseCookiePath internal-path +public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- proxied server -ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy +ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy request -ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP +ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP connections -ProxyRemote match remote-serversvERemote proxy used to handle certain requests -ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular +ProxyRemote match remote-serversvERemote proxy used to handle certain requests +ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular expressions -ProxyRequests On|Off Off svEEnables forward (standard) proxy requests -ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the +ProxyRequests On|Off Off svEEnables forward (standard) proxy requests +ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the backend -ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response +ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response header -ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters -ProxySourceAddress addresssvESet local IP address for outgoing proxy connections -ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status -ProxyTimeout secondssvENetwork timeout for proxied requests -ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response +ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters +ProxySourceAddress addresssvESet local IP address for outgoing proxy connections +ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status +ProxyTimeout secondssvENetwork timeout for proxied requests +ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response header for proxied requests -ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request -QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is +ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request +QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is fully qualified -ReadBufferSize bytes 8192 svdCSize of the buffers used to read data -ReadmeName filenamesvdhBName of the file that will be inserted at the end +ReadBufferSize bytes 8192 svdCSize of the buffers used to read data +ReadmeName filenamesvdhBName of the file that will be inserted at the end of the index listing -ReceiveBufferSize bytes 0 sMTCP receive buffer size -Redirect [status] [URL-path] -URLsvdhBSends an external redirect asking the client to fetch +ReceiveBufferSize bytes 0 sMTCP receive buffer size +Redirect [status] [URL-path] +URLsvdhBSends an external redirect asking the client to fetch a different URL -RedirectMatch [status] regex -URLsvdhBSends an external redirect based on a regular expression match +RedirectMatch [status] regex +URLsvdhBSends an external redirect based on a regular expression match of the current URL -RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch +RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch a different URL -RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch +RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch a different URL -RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) -RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) -ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers -RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes -RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods -RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses -RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses -RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks -RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoveCharset extension [extension] -...vdhBRemoves any character set associations for a set of file +RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) +RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) +ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers +RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes +RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods +RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses +RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses +RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks +RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoveCharset extension [extension] +...vdhBRemoves any character set associations for a set of file extensions -RemoveEncoding extension [extension] -...vdhBRemoves any content encoding associations for a set of file +RemoveEncoding extension [extension] +...vdhBRemoves any content encoding associations for a set of file extensions -RemoveHandler extension [extension] -...vdhBRemoves any handler associations for a set of file +RemoveHandler extension [extension] +...vdhBRemoves any handler associations for a set of file extensions -RemoveInputFilter extension [extension] -...vdhBRemoves any input filter associations for a set of file +RemoveInputFilter extension [extension] +...vdhBRemoves any input filter associations for a set of file extensions -RemoveLanguage extension [extension] -...vdhBRemoves any language associations for a set of file +RemoveLanguage extension [extension] +...vdhBRemoves any language associations for a set of file extensions -RemoveOutputFilter extension [extension] -...vdhBRemoves any output filter associations for a set of file +RemoveOutputFilter extension [extension] +...vdhBRemoves any output filter associations for a set of file extensions -RemoveType extension [extension] -...vdhBRemoves any content type associations for a set of file +RemoveType extension [extension] +...vdhBRemoves any content type associations for a set of file extensions -RequestHeader add|append|edit|edit*|merge|set|setifempty|unset +RequestHeader add|append|edit|edit*|merge|set|setifempty|unset header [[expr=]value [replacement] [early|env=[!]varname|expr=expression]] -svdhEConfigure HTTP request headers -RequestReadTimeout +svdhEConfigure HTTP request headers +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] - handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving + handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving the request headers and/or body from client. -Require [not] entity-name - [entity-name] ...dhBTests whether an authenticated user is authorized by +Require [not] entity-name + [entity-name] ...dhBTests whether an authenticated user is authorized by an authorization provider. -<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none +<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none must fail and at least one must succeed for the enclosing directive to succeed. -<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one +<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one must succeed for the enclosing directive to succeed. -<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none +<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none must succeed for the enclosing directive to not fail. -RewriteBase URL-pathdhESets the base URL for per-directory rewrites - RewriteCond - TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place +RewriteBase URL-pathdhESets the base URL for per-directory rewrites + RewriteCond + TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place -RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine -RewriteMap MapName MapType:MapSource +RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine +RewriteMap MapName MapType:MapSource [MapTypeOptions] -svEDefines a mapping function for key-lookup -RewriteOptions OptionssvdhESets some special options for the rewrite engine -RewriteRule - Pattern Substitution [flags]svdhEDefines rules for the rewriting engine -RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched +svEDefines a mapping function for key-lookup +RewriteOptions OptionssvdhESets some special options for the rewrite engine +RewriteRule + Pattern Substitution [flags]svdhEDefines rules for the rewriting engine +RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched by Apache httpd children -RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched +RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched by Apache httpd children -RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by +RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by processes launched by Apache httpd children -Satisfy Any|All All dhEInteraction between host-level access control and +Satisfy Any|All All dhEInteraction between host-level access control and user authentication -ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for +ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for the child processes -Script method cgi-scriptsvdBActivates a CGI script for a particular request +Script method cgi-scriptsvdBActivates a CGI script for a particular request method. -ScriptAlias [URL-path] -file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the +ScriptAlias [URL-path] +file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the target as a CGI script -ScriptAliasMatch regex -file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression +ScriptAliasMatch regex +file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression and designates the target as a CGI script -ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI +ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI scripts -ScriptLog file-pathsvBLocation of the CGI script error logfile -ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded +ScriptLog file-pathsvBLocation of the CGI script error logfile +ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded in the scriptlog -ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile -ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with +ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile +ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with the cgi daemon -SecureListen [IP-address:]portnumber -Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port -SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters +SecureListen [IP-address:]portnumber +Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port +SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters of a request or the last 63, assuming the request itself is greater than 63 chars. -SendBufferSize bytes 0 sMTCP buffer size -ServerAdmin email-address|URLsvCEmail address that the server includes in error +SendBufferSize bytes 0 sMTCP buffer size +ServerAdmin email-address|URLsvCEmail address that the server includes in error messages sent to the client -ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests +ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests to name-virtual hosts -ServerLimit numbersMUpper limit on configurable number of processes -ServerName [scheme://]domain-name|ip-address[:port]svCHostname and port that the server uses to identify +ServerLimit numbersMUpper limit on configurable number of processes +ServerName [scheme://]domain-name|ip-address[:port]svCHostname and port that the server uses to identify itself -ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that +ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that is accessed by an incompatible browser -ServerRoot directory-path /usr/local/apache sCBase directory for the server installation -ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response +ServerRoot directory-path /usr/local/apache sCBase directory for the server installation +ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response header -Session On|Off Off svdhEEnables a session for the current directory or location -SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session -SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session -SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers -SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session -SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session -SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session -SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session -SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID -SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID -SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers -SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database -SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database -SessionDBDPerUser On|Off Off svdhEEnable a per user session -SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database -SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database -SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the +Session On|Off Off svdhEEnables a session for the current directory or location +SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session +SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session +SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers +SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session +SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session +SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session +SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session +SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID +SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID +SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers +SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database +SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database +SessionDBDPerUser On|Off Off svdhEEnable a per user session +SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database +SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database +SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the HTTP_SESSION environment variable -SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored -SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without +SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored +SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without the session being updated -SessionHeader headersvdhEImport session updates from a given HTTP response header -SessionInclude pathsvdhEDefine URL prefixes for which a session is valid -SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session -SetEnv env-variable [value]svdhBSets environment variables -SetEnvIf attribute +SessionHeader headersvdhEImport session updates from a given HTTP response header +SessionInclude pathsvdhEDefine URL prefixes for which a session is valid +SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session +SetEnv env-variable [value]svdhBSets environment variables +SetEnvIf attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request -SetEnvIfExpr expr +SetEnvIfExpr expr [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression -SetEnvIfNoCase attribute regex + [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression +SetEnvIfNoCase attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request without respect to case -SetHandler handler-name|none|expressionsvdhCForces all matching files to be processed by a +SetHandler handler-name|none|expressionsvdhCForces all matching files to be processed by a handler -SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST +SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST input -SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the +SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the server -SSIEndTag tag "-->" svBString that ends an include element -SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI +SSIEndTag tag "-->" svBString that ends an include element +SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI error -SSIETag on|off off dhBControls whether ETags are generated by the server. -SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the +SSIETag on|off off dhBControls whether ETags are generated by the server. +SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the server. -SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. -SSIStartTag tag "<!--#" svBString that starts an include element -SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are +SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. +SSIStartTag tag "<!--#" svBString that starts an include element +SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are displayed -SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed -SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed +SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Client Auth -SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Client Auth -SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for defining acceptable CA names -SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for defining acceptable CA names -SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking -SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking +SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Client Auth -SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Client Auth -SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates -SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier -SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file -SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL +SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates +SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier +SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file +SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL handshake -SSLCompression on|off off svEEnable compression on the SSL level -SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator -SSLEngine on|off|optional off svESSL Engine Operation Switch -SSLFIPS on|off off sESSL FIPS mode Switch -SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order -SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation -SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation -SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain -SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification -SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation -SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests -SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates -SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries -SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses -SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation -SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries -SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API -SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options -SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private +SSLCompression on|off off svEEnable compression on the SSL level +SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator +SSLEngine on|off|optional off svESSL Engine Operation Switch +SSLFIPS on|off off sESSL FIPS mode Switch +SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order +SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation +SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation +SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain +SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification +SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation +SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests +SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates +SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries +SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses +SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation +SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries +SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API +SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options +SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private keys -SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions -SSLProxyCACertificateFile file-pathsvpEFile of concatenated PEM-encoded CA Certificates +SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions +SSLProxyCACertificateFile file-pathsvpEFile of concatenated PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCACertificatePath directory-pathsvpEDirectory of PEM-encoded CA Certificates for +SSLProxyCACertificatePath directory-pathsvpEDirectory of PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCARevocationCheck chain|leaf|none none svpEEnable CRL-based revocation checking for Remote Server Auth -SSLProxyCARevocationFile file-pathsvpEFile of concatenated PEM-encoded CA CRLs for +SSLProxyCARevocationCheck chain|leaf|none none svpEEnable CRL-based revocation checking for Remote Server Auth +SSLProxyCARevocationFile file-pathsvpEFile of concatenated PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCARevocationPath directory-pathsvpEDirectory of PEM-encoded CA CRLs for +SSLProxyCARevocationPath directory-pathsvpEDirectory of PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCheckPeerCN on|off on svpEWhether to check the remote server certificate's CN field +SSLProxyCheckPeerCN on|off on svpEWhether to check the remote server certificate's CN field -SSLProxyCheckPeerExpire on|off on svpEWhether to check if remote server certificate is expired +SSLProxyCheckPeerExpire on|off on svpEWhether to check if remote server certificate is expired -SSLProxyCheckPeerName on|off on svpEConfigure host name checking for remote server certificates +SSLProxyCheckPeerName on|off on svpEConfigure host name checking for remote server certificates -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svpECipher Suite available for negotiation in SSL +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svpECipher Suite available for negotiation in SSL proxy handshake -SSLProxyEngine on|off off svpESSL Proxy Engine Operation Switch -SSLProxyMachineCertificateChainFile filenamesvpEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate -SSLProxyMachineCertificateFile filenamesvpEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy -SSLProxyMachineCertificatePath directorysvpEDirectory of PEM-encoded client certificates and keys to be used by the proxy -SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svpEConfigure usable SSL protocol flavors for proxy usage -SSLProxyVerify level none svpEType of remote server Certificate verification -SSLProxyVerifyDepth number 1 svpEMaximum depth of CA Certificates in Remote Server +SSLProxyEngine on|off off svpESSL Proxy Engine Operation Switch +SSLProxyMachineCertificateChainFile filenamesvpEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate +SSLProxyMachineCertificateFile filenamesvpEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy +SSLProxyMachineCertificatePath directorysvpEDirectory of PEM-encoded client certificates and keys to be used by the proxy +SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svpEConfigure usable SSL protocol flavors for proxy usage +SSLProxyVerify level none svpEType of remote server Certificate verification +SSLProxyVerifyDepth number 1 svpEMaximum depth of CA Certificates in Remote Server Certificate verification -SSLRandomSeed context source -[bytes]sEPseudo Random Number Generator (PRNG) seeding +SSLRandomSeed context source +[bytes]sEPseudo Random Number Generator (PRNG) seeding source -SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer -SSLRequire expressiondhEAllow access only when an arbitrarily complex +SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer +SSLRequire expressiondhEAllow access only when an arbitrarily complex boolean expression is true -SSLRequireSSLdhEDeny access when SSL is not used for the +SSLRequireSSLdhEDeny access when SSL is not used for the HTTP request -SSLSessionCache type none sEType of the global/inter-process SSL Session +SSLSessionCache type none sEType of the global/inter-process SSL Session Cache -SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires +SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires in the Session Cache -SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets -SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets -SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed -SSLSRPVerifierFile file-pathsvEPath to SRP verifier file -SSLStaplingCache typesEConfigures the OCSP stapling cache -SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache -SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries -SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension -SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries -SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses -SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation -SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client -SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache -SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual +SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets +SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets +SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed +SSLSRPVerifierFile file-pathsvEPath to SRP verifier file +SSLStaplingCache typesEConfigures the OCSP stapling cache +SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache +SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries +SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension +SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries +SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses +SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation +SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client +SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache +SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual host. -SSLUserName varnamesdhEVariable name to determine user name -SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake -SSLVerifyClient level none svdhEType of Client Certificate verification -SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client +SSLUserName varnamesdhEVariable name to determine user name +SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake +SSLVerifyClient level none svdhEType of Client Certificate verification +SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client Certificate verification -StartServers numbersMNumber of child server processes created at startup -StartThreads numbersMNumber of threads created on startup -StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be +StartServers numbersMNumber of child server processes created at startup +StartThreads numbersMNumber of threads created on startup +StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be listed enumerated in the virtual host handling the request -Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content -SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns -SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size -Suexec On|OffsBEnable or disable the suEXEC feature -SuexecUserGroup User GroupsvEUser and group for CGI programs to run as -ThreadLimit numbersMSets the upper limit on the configurable number of threads +Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content +SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns +SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size +Suexec On|OffsBEnable or disable the suEXEC feature +SuexecUserGroup User GroupsvEUser and group for CGI programs to run as +ThreadLimit numbersMSets the upper limit on the configurable number of threads per child process -ThreadsPerChild numbersMNumber of threads created by each child process -ThreadStackSize sizesMThe size in bytes of the stack used by threads handling +ThreadsPerChild numbersMNumber of threads created by each child process +ThreadStackSize sizesMThe size in bytes of the stack used by threads handling client connections -TimeOut seconds 60 svCAmount of time the server will wait for +TimeOut seconds 60 svCAmount of time the server will wait for certain events before failing a request +TLSCertificate cert_file [key_file]svXadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)svXdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)svXdefines ciphers that are not to be used. +TLSEngine [address:]portsXdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offsvX- +TLSOptions [+|-]optionsvdhXenables SSL variables for requests. +TLSProtocol version+svXspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemsvpXsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)svpXdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)svpXdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offsvpXenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]svpXadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+svpXspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsXspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsXenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on svCDetermines the behavior on TRACE requests TransferLog file|pipesvBSpecify location of a log file TypesConfig file-path conf/mime.types sBThe location of the mime.types file diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.es apache2-2.4.52/docs/manual/mod/quickreference.html.es --- apache2-2.4.51/docs/manual/mod/quickreference.html.es 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.es 2021-12-16 13:44:25.000000000 +0000 @@ -711,445 +711,461 @@ MDChallengeDns01 path-to-commandsX- MDContactEmail addresssX- MDDriveMode always|auto|manual auto sXformer name of MDRenewMode. -MDHttpProxy urlsXDefine a proxy for outgoing connections. -MDMember hostnamesXAdditional hostname for the managed domain. -MDMembers auto|manual auto sXControl if the alias domain names are automatically added. -MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains -MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. -MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. -MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. -MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. -MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. -MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. -MDRenewWindow duration 33% sXControl when a certificate will be renewed. -MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. -MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. -MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. -MDStapling on|off off sXEnable stapling for all or a particular MDomain. -MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. -MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. -MDStoreDir path md sXPath on the local file system to store the Managed Domains data. -MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. -MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections -MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. +MDExternalAccountBinding key-id hmac-64 | none | file none sX- +MDHttpProxy urlsXDefine a proxy for outgoing connections. +MDMember hostnamesXAdditional hostname for the managed domain. +MDMembers auto|manual auto sXControl if the alias domain names are automatically added. +MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains +MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. +MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. +MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. +MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. +MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. +MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. +MDRenewWindow duration 33% sXControl when a certificate will be renewed. +MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. +MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. +MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. +MDStapling on|off off sXEnable stapling for all or a particular MDomain. +MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. +MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. +MDStoreDir path md sXPath on the local file system to store the Managed Domains data. +MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. +MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections +MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. -MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers -MetaDir directory .web svdhEName of the directory to find CERN-style meta information +MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers +MetaDir directory .web svdhEName of the directory to find CERN-style meta information files -MetaFiles on|off off svdhEActivates CERN meta-file processing -MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style +MetaFiles on|off off svdhEActivates CERN meta-file processing +MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style meta information -MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents +MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents using the specified magic file -MinSpareServers number 5 sMMinimum number of idle child server processes -MinSpareThreads numbersMMinimum number of idle threads available to handle request +MinSpareServers number 5 sMMinimum number of idle child server processes +MinSpareThreads numbersMMinimum number of idle threads available to handle request spikes -MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time -ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate -ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info +MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time +ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate +ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info components as part of the filename -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for a matching file with MultiViews -Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all +Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all or specified mutexes -NameVirtualHost addr[:port]sCDesignates an IP address for name-virtual +NameVirtualHost addr[:port]sCDesignates an IP address for name-virtual hosting -NoProxy host [host] ...svEHosts, domains, or networks that will be connected to +NoProxy host [host] ...svEHosts, domains, or networks that will be connected to directly -NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates -NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request -Options - [+|-]option [[+|-]option] ... All svdhCConfigures what features are available in a particular +NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates +NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request +Options + [+|-]option [[+|-]option] ... All svdhCConfigures what features are available in a particular directory - Order ordering Deny,Allow dhEControls the default access state and the order in which + Order ordering Deny,Allow dhEControls the default access state and the order in which Allow and Deny are evaluated. -OutputSed sed-commanddhXSed command for filtering response content -PassEnv env-variable [env-variable] -...svdhBPasses environment variables from the shell -PidFile filename logs/httpd.pid sMFile where the server records the process ID +OutputSed sed-commanddhXSed command for filtering response content +PassEnv env-variable [env-variable] +...svdhBPasses environment variables from the shell +PidFile filename logs/httpd.pid sMFile where the server records the process ID of the daemon -PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against +PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against malicious privileges-aware code. -Protocol protocolsvCProtocol for a listening socket -ProtocolEcho On|Off Off svXTurn the echo server on or off -Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host -ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation -<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources -Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server -ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers -ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a +Protocol protocolsvCProtocol for a listening socket +ProtocolEcho On|Off Off svXTurn the echo server on or off +Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host +ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation +<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources +Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server +ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers +ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a response -ProxyBlock *|word|host|domain -[word|host|domain] ...svEWords, hosts, or domains that are banned from being +ProxyBlock *|word|host|domain +[word|host|domain] ...svEWords, hosts, or domains that are banned from being proxied -ProxyDomain DomainsvEDefault domain name for proxied requests -ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content -ProxyExpressDBMFile pathnamesvEPathname to DBM file. -ProxyExpressDBMType type default svEDBM type of file. -ProxyExpressEnable on|off off svEEnable the module functionality. -ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application -ProxyFCGISetEnvIf conditional-expression +ProxyDomain DomainsvEDefault domain name for proxied requests +ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content +ProxyExpressDBMFile pathnamesvEPathname to DBM file. +ProxyExpressDBMType type default svEDBM type of file. +ProxyExpressEnable on|off off svEEnable the module functionality. +ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up -ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings -ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server -ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing -ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response -ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters -ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers -ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and + [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up +ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings +ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server +ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing +ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response +ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters +ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers +ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and stylesheets. -ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. -ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. -ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. -ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, +ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. +ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. +ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. +ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, and scripting events. -ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. -ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of +ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. +ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of ProxyHTMLURLMap rules. -ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. -ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML +ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. +ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML <head> sections. -ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. -ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links -ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer -<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched +ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. +ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links +ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer +<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched proxied resources -ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded +ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded through -ProxyPass [path] !|url [key=value - [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space -ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server -ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations -ProxyPassMatch [regex] !|url [key=value - [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions -ProxyPassReverse [path] url -[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse +ProxyPass [path] !|url [key=value + [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space +ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server +ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations +ProxyPassMatch [regex] !|url [key=value + [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions +ProxyPassReverse [path] url +[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse proxied server -ProxyPassReverseCookieDomain internal-domain -public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- +ProxyPassReverseCookieDomain internal-domain +public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- proxied server -ProxyPassReverseCookiePath internal-path -public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- +ProxyPassReverseCookiePath internal-path +public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- proxied server -ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy +ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy request -ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP +ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP connections -ProxyRemote match remote-serversvERemote proxy used to handle certain requests -ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular +ProxyRemote match remote-serversvERemote proxy used to handle certain requests +ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular expressions -ProxyRequests On|Off Off svEEnables forward (standard) proxy requests -ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the +ProxyRequests On|Off Off svEEnables forward (standard) proxy requests +ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the backend -ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response +ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response header -ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters -ProxySourceAddress addresssvESet local IP address for outgoing proxy connections -ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status -ProxyTimeout secondssvENetwork timeout for proxied requests -ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response +ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters +ProxySourceAddress addresssvESet local IP address for outgoing proxy connections +ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status +ProxyTimeout secondssvENetwork timeout for proxied requests +ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response header for proxied requests -ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request -QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is +ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request +QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is fully qualified -ReadBufferSize bytes 8192 svdCSize of the buffers used to read data -ReadmeName filenamesvdhBName of the file that will be inserted at the end +ReadBufferSize bytes 8192 svdCSize of the buffers used to read data +ReadmeName filenamesvdhBName of the file that will be inserted at the end of the index listing -ReceiveBufferSize bytes 0 sMTCP receive buffer size -Redirect [status] [URL-path] -URLsvdhBSends an external redirect asking the client to fetch +ReceiveBufferSize bytes 0 sMTCP receive buffer size +Redirect [status] [URL-path] +URLsvdhBSends an external redirect asking the client to fetch a different URL -RedirectMatch [status] regex -URLsvdhBSends an external redirect based on a regular expression match +RedirectMatch [status] regex +URLsvdhBSends an external redirect based on a regular expression match of the current URL -RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch +RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch a different URL -RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch +RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch a different URL -RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) -RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) -ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers -RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes -RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods -RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses -RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses -RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks -RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoveCharset extension [extension] -...vdhBRemoves any character set associations for a set of file +RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) +RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) +ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers +RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes +RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods +RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses +RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses +RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks +RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoveCharset extension [extension] +...vdhBRemoves any character set associations for a set of file extensions -RemoveEncoding extension [extension] -...vdhBRemoves any content encoding associations for a set of file +RemoveEncoding extension [extension] +...vdhBRemoves any content encoding associations for a set of file extensions -RemoveHandler extension [extension] -...vdhBRemoves any handler associations for a set of file +RemoveHandler extension [extension] +...vdhBRemoves any handler associations for a set of file extensions -RemoveInputFilter extension [extension] -...vdhBRemoves any input filter associations for a set of file +RemoveInputFilter extension [extension] +...vdhBRemoves any input filter associations for a set of file extensions -RemoveLanguage extension [extension] -...vdhBRemoves any language associations for a set of file +RemoveLanguage extension [extension] +...vdhBRemoves any language associations for a set of file extensions -RemoveOutputFilter extension [extension] -...vdhBRemoves any output filter associations for a set of file +RemoveOutputFilter extension [extension] +...vdhBRemoves any output filter associations for a set of file extensions -RemoveType extension [extension] -...vdhBRemoves any content type associations for a set of file +RemoveType extension [extension] +...vdhBRemoves any content type associations for a set of file extensions -RequestHeader add|append|edit|edit*|merge|set|setifempty|unset +RequestHeader add|append|edit|edit*|merge|set|setifempty|unset header [[expr=]value [replacement] [early|env=[!]varname|expr=expression]] -svdhEConfigure HTTP request headers -RequestReadTimeout +svdhEConfigure HTTP request headers +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] - handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving + handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving the request headers and/or body from client. -Require [not] entity-name - [entity-name] ...dhBTests whether an authenticated user is authorized by +Require [not] entity-name + [entity-name] ...dhBTests whether an authenticated user is authorized by an authorization provider. -<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none +<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none must fail and at least one must succeed for the enclosing directive to succeed. -<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one +<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one must succeed for the enclosing directive to succeed. -<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none +<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none must succeed for the enclosing directive to not fail. -RewriteBase URL-pathdhESets the base URL for per-directory rewrites - RewriteCond - TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place +RewriteBase URL-pathdhESets the base URL for per-directory rewrites + RewriteCond + TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place -RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine -RewriteMap MapName MapType:MapSource +RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine +RewriteMap MapName MapType:MapSource [MapTypeOptions] -svEDefines a mapping function for key-lookup -RewriteOptions OptionssvdhESets some special options for the rewrite engine -RewriteRule - Pattern Substitution [flags]svdhEDefines rules for the rewriting engine -RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched +svEDefines a mapping function for key-lookup +RewriteOptions OptionssvdhESets some special options for the rewrite engine +RewriteRule + Pattern Substitution [flags]svdhEDefines rules for the rewriting engine +RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched by Apache httpd children -RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched +RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched by Apache httpd children -RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by +RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by processes launched by Apache httpd children -Satisfy Any|All All dhEInteraction between host-level access control and +Satisfy Any|All All dhEInteraction between host-level access control and user authentication -ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for +ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for the child processes -Script method cgi-scriptsvdBActivates a CGI script for a particular request +Script method cgi-scriptsvdBActivates a CGI script for a particular request method. -ScriptAlias [URL-path] -file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the +ScriptAlias [URL-path] +file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the target as a CGI script -ScriptAliasMatch regex -file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression +ScriptAliasMatch regex +file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression and designates the target as a CGI script -ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI +ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI scripts -ScriptLog file-pathsvBLocation of the CGI script error logfile -ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded +ScriptLog file-pathsvBLocation of the CGI script error logfile +ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded in the scriptlog -ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile -ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with +ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile +ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with the cgi daemon -SecureListen [IP-address:]portnumber -Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port -SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters +SecureListen [IP-address:]portnumber +Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port +SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters of a request or the last 63, assuming the request itself is greater than 63 chars. -SendBufferSize bytes 0 sMTCP buffer size -ServerAdmin email-address|URLsvCEmail address that the server includes in error +SendBufferSize bytes 0 sMTCP buffer size +ServerAdmin email-address|URLsvCEmail address that the server includes in error messages sent to the client -ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests +ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests to name-virtual hosts -ServerLimit numbersMUpper limit on configurable number of processes -ServerName [scheme://]fully-qualified-domain-name[:port]svCHostname and port that the server uses to identify +ServerLimit numbersMUpper limit on configurable number of processes +ServerName [scheme://]fully-qualified-domain-name[:port]svCHostname and port that the server uses to identify itself -ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that +ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that is accessed by an incompatible browser -ServerRoot directory-path /usr/local/apache sCBase directory for the server installation -ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response +ServerRoot directory-path /usr/local/apache sCBase directory for the server installation +ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response header -Session On|Off Off svdhEEnables a session for the current directory or location -SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session -SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session -SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers -SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session -SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session -SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session -SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session -SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID -SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID -SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers -SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database -SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database -SessionDBDPerUser On|Off Off svdhEEnable a per user session -SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database -SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database -SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the +Session On|Off Off svdhEEnables a session for the current directory or location +SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session +SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session +SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers +SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session +SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session +SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session +SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session +SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID +SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID +SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers +SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database +SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database +SessionDBDPerUser On|Off Off svdhEEnable a per user session +SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database +SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database +SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the HTTP_SESSION environment variable -SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored -SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without +SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored +SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without the session being updated -SessionHeader headersvdhEImport session updates from a given HTTP response header -SessionInclude pathsvdhEDefine URL prefixes for which a session is valid -SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session -SetEnv env-variable [value]svdhBSets environment variables -SetEnvIf attribute +SessionHeader headersvdhEImport session updates from a given HTTP response header +SessionInclude pathsvdhEDefine URL prefixes for which a session is valid +SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session +SetEnv env-variable [value]svdhBSets environment variables +SetEnvIf attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request -SetEnvIfExpr expr +SetEnvIfExpr expr [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression -SetEnvIfNoCase attribute regex + [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression +SetEnvIfNoCase attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request without respect to case -SetHandler handler-name|NonesvdhCForces all matching files to be processed by a +SetHandler handler-name|NonesvdhCForces all matching files to be processed by a handler -SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST +SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST input -SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the +SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the server -SSIEndTag tag "-->" svBString that ends an include element -SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI +SSIEndTag tag "-->" svBString that ends an include element +SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI error -SSIETag on|off off dhBControls whether ETags are generated by the server. -SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the +SSIETag on|off off dhBControls whether ETags are generated by the server. +SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the server. -SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. -SSIStartTag tag "<!--#" svBString that starts an include element -SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are +SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. +SSIStartTag tag "<!--#" svBString that starts an include element +SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are displayed -SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed -SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed +SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Client Auth -SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Client Auth -SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for defining acceptable CA names -SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for defining acceptable CA names -SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking -SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking +SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Client Auth -SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Client Auth -SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates -SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier -SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file -SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL +SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates +SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier +SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file +SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL handshake -SSLCompression on|off off svEEnable compression on the SSL level -SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator -SSLEngine on|off|optional off svESSL Engine Operation Switch -SSLFIPS on|off off sESSL FIPS mode Switch -SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order -SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation -SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation -SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain -SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification -SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation -SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests -SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates -SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries -SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses -SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation -SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries -SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API -SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options -SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private +SSLCompression on|off off svEEnable compression on the SSL level +SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator +SSLEngine on|off|optional off svESSL Engine Operation Switch +SSLFIPS on|off off sESSL FIPS mode Switch +SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order +SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation +SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation +SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain +SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification +SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation +SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests +SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates +SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries +SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses +SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation +SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries +SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API +SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options +SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private keys -SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions -SSLProxyCACertificateFile file-pathsvpEFile of concatenated PEM-encoded CA Certificates +SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions +SSLProxyCACertificateFile file-pathsvpEFile of concatenated PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCACertificatePath directory-pathsvpEDirectory of PEM-encoded CA Certificates for +SSLProxyCACertificatePath directory-pathsvpEDirectory of PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCARevocationCheck chain|leaf|none none svpEEnable CRL-based revocation checking for Remote Server Auth -SSLProxyCARevocationFile file-pathsvpEFile of concatenated PEM-encoded CA CRLs for +SSLProxyCARevocationCheck chain|leaf|none none svpEEnable CRL-based revocation checking for Remote Server Auth +SSLProxyCARevocationFile file-pathsvpEFile of concatenated PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCARevocationPath directory-pathsvpEDirectory of PEM-encoded CA CRLs for +SSLProxyCARevocationPath directory-pathsvpEDirectory of PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCheckPeerCN on|off on svpEWhether to check the remote server certificate's CN field +SSLProxyCheckPeerCN on|off on svpEWhether to check the remote server certificate's CN field -SSLProxyCheckPeerExpire on|off on svpEWhether to check if remote server certificate is expired +SSLProxyCheckPeerExpire on|off on svpEWhether to check if remote server certificate is expired -SSLProxyCheckPeerName on|off on svpEConfigure host name checking for remote server certificates +SSLProxyCheckPeerName on|off on svpEConfigure host name checking for remote server certificates -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svpECipher Suite available for negotiation in SSL +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svpECipher Suite available for negotiation in SSL proxy handshake -SSLProxyEngine on|off off svpESSL Proxy Engine Operation Switch -SSLProxyMachineCertificateChainFile filenamesvpEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate -SSLProxyMachineCertificateFile filenamesvpEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy -SSLProxyMachineCertificatePath directorysvpEDirectory of PEM-encoded client certificates and keys to be used by the proxy -SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svpEConfigure usable SSL protocol flavors for proxy usage -SSLProxyVerify level none svpEType of remote server Certificate verification -SSLProxyVerifyDepth number 1 svpEMaximum depth of CA Certificates in Remote Server +SSLProxyEngine on|off off svpESSL Proxy Engine Operation Switch +SSLProxyMachineCertificateChainFile filenamesvpEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate +SSLProxyMachineCertificateFile filenamesvpEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy +SSLProxyMachineCertificatePath directorysvpEDirectory of PEM-encoded client certificates and keys to be used by the proxy +SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svpEConfigure usable SSL protocol flavors for proxy usage +SSLProxyVerify level none svpEType of remote server Certificate verification +SSLProxyVerifyDepth number 1 svpEMaximum depth of CA Certificates in Remote Server Certificate verification -SSLRandomSeed context source -[bytes]sEPseudo Random Number Generator (PRNG) seeding +SSLRandomSeed context source +[bytes]sEPseudo Random Number Generator (PRNG) seeding source -SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer -SSLRequire expressiondhEAllow access only when an arbitrarily complex +SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer +SSLRequire expressiondhEAllow access only when an arbitrarily complex boolean expression is true -SSLRequireSSLdhEDeny access when SSL is not used for the +SSLRequireSSLdhEDeny access when SSL is not used for the HTTP request -SSLSessionCache type none sEType of the global/inter-process SSL Session +SSLSessionCache type none sEType of the global/inter-process SSL Session Cache -SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires +SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires in the Session Cache -SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets -SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets -SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed -SSLSRPVerifierFile file-pathsvEPath to SRP verifier file -SSLStaplingCache typesEConfigures the OCSP stapling cache -SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache -SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries -SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension -SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries -SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses -SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation -SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client -SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache -SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual +SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets +SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets +SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed +SSLSRPVerifierFile file-pathsvEPath to SRP verifier file +SSLStaplingCache typesEConfigures the OCSP stapling cache +SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache +SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries +SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension +SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries +SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses +SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation +SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client +SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache +SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual host. -SSLUserName varnamesdhEVariable name to determine user name -SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake -SSLVerifyClient level none svdhEType of Client Certificate verification -SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client +SSLUserName varnamesdhEVariable name to determine user name +SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake +SSLVerifyClient level none svdhEType of Client Certificate verification +SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client Certificate verification -StartServers numbersMNumber of child server processes created at startup -StartThreads numbersMNumber of threads created on startup -StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be +StartServers numbersMNumber of child server processes created at startup +StartThreads numbersMNumber of threads created on startup +StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be listed enumerated in the virtual host handling the request -Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content -SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns -SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size -Suexec On|OffsBEnable or disable the suEXEC feature -SuexecUserGroup User GroupsvEUser and group for CGI programs to run as -ThreadLimit numbersMSets the upper limit on the configurable number of threads +Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content +SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns +SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size +Suexec On|OffsBEnable or disable the suEXEC feature +SuexecUserGroup User GroupsvEUser and group for CGI programs to run as +ThreadLimit numbersMSets the upper limit on the configurable number of threads per child process -ThreadsPerChild numbersMNumber of threads created by each child process -ThreadStackSize sizesMThe size in bytes of the stack used by threads handling +ThreadsPerChild numbersMNumber of threads created by each child process +ThreadStackSize sizesMThe size in bytes of the stack used by threads handling client connections -TimeOut seconds 60 svCAmount of time the server will wait for +TimeOut seconds 60 svCAmount of time the server will wait for certain events before failing a request +TLSCertificate cert_file [key_file]svXadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)svXdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)svXdefines ciphers that are not to be used. +TLSEngine [address:]portsXdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offsvX- +TLSOptions [+|-]optionsvdhXenables SSL variables for requests. +TLSProtocol version+svXspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemsvpXsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)svpXdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)svpXdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offsvpXenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]svpXadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+svpXspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsXspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsXenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on sCDetermines the behaviour on TRACE requests TransferLog file|pipesvBSpecify location of a log file TypesConfig file-path conf/mime.types sBThe location of the mime.types file diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.fr.utf8 apache2-2.4.52/docs/manual/mod/quickreference.html.fr.utf8 --- apache2-2.4.51/docs/manual/mod/quickreference.html.fr.utf8 2021-10-02 13:21:37.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.fr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -892,585 +892,601 @@ MDChallengeDns01 path-to-commandsX- MDContactEmail addresssX- MDDriveMode always|auto|manual auto sXAncien nom de MDRenewMode. -MDHttpProxy urlsXSpécifie un serveur mandataire pour les connexions +MDExternalAccountBinding key-id hmac-64 | none | file none sX- +MDHttpProxy urlsXSpécifie un serveur mandataire pour les connexions sortantes. -MDMember hostnamesXNom d'hôte additionnel pour le domaine géré. -MDMembers auto|manual auto sXDéfinit si les alias de noms de domaines sont +MDMember hostnamesXNom d'hôte additionnel pour le domaine géré. +MDMembers auto|manual auto sXDéfinit si les alias de noms de domaines sont automatiquement ajoutés. -MDMessageCmd path-to-cmd optional-argssXGère les évènements pour les domaines gérés -MDMustStaple on|off off sXDéfinit si les nouveaux certificats doivent avoir le +MDMessageCmd path-to-cmd optional-argssXGère les évènements pour les domaines gérés +MDMustStaple on|off off sXDéfinit si les nouveaux certificats doivent avoir le drapeau OCSP Must Staple activé. -MDNotifyCmd path [ args ]sXLance un programme lorsqu'un domaine géré est opérationnel. -MDomain dns-name [ other-dns-name... ] [auto|manual]sXDéfinit une liste de noms de domaines qui appartiennent à +MDNotifyCmd path [ args ]sXLance un programme lorsqu'un domaine géré est opérationnel. +MDomain dns-name [ other-dns-name... ] [auto|manual]sXDéfinit une liste de noms de domaines qui appartiennent à un groupe. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXConteneur de directives à appliquer à un ou plusieurs +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXConteneur de directives à appliquer à un ou plusieurs domaines gérés. -MDPortMap map1 [ map2 ] http:80 https:443 sXMappage des ports externes avec les ports internes pour +MDPortMap map1 [ map2 ] http:80 https:443 sXMappage des ports externes avec les ports internes pour vérifier à qui appartient le domaine. -MDPrivateKeys type [ params... ] RSA 2048 sXDéfinit le type et la taille des clés privées générées. -MDRenewMode always|auto|manual auto sXContrôle le renouvellement des certificats. -MDRenewWindow duration 33% sXDéfinit le moment auquel un certificat doit être renouvelé. -MDRequireHttps off|temporary|permanent off sXRedirige le trafic http: vers https: pour les domaines +MDPrivateKeys type [ params... ] RSA 2048 sXDéfinit le type et la taille des clés privées générées. +MDRenewMode always|auto|manual auto sXContrôle le renouvellement des certificats. +MDRenewWindow duration 33% sXDéfinit le moment auquel un certificat doit être renouvelé. +MDRequireHttps off|temporary|permanent off sXRedirige le trafic http: vers https: pour les domaines gérés. -MDServerStatus on|off on sXDéfinit si les informations à propos des domaines gérés +MDServerStatus on|off on sXDéfinit si les informations à propos des domaines gérés sont ajoutés ou non à server-status. -MDStapleOthers on|off on sXActive l'agrafage pour les certificats non gérés par +MDStapleOthers on|off on sXActive l'agrafage pour les certificats non gérés par mod_md. -MDStapling on|off off sXActive l'agrafage pour un ou plusieurs domaines. -MDStaplingKeepResponse duration 7d sXContrôle la durée au bout de laquelle les anciennes +MDStapling on|off off sXActive l'agrafage pour un ou plusieurs domaines. +MDStaplingKeepResponse duration 7d sXContrôle la durée au bout de laquelle les anciennes réponses doivent être supprimées. -MDStaplingRenewWindow duration 33% sXContrôle l'ancienneté des réponses OCSP au dela de laquelle +MDStaplingRenewWindow duration 33% sXContrôle l'ancienneté des réponses OCSP au dela de laquelle ces dernières seront renouvelées. -MDStoreDir path md sXChemin dans le système de fichiers local du répertoire où +MDStoreDir path md sXChemin dans le système de fichiers local du répertoire où seront stockées les données à propos des domaines gérés. -MDWarnWindow duration 10% sXDéfinit la fenêtre de temps pendant laquelle vous serez +MDWarnWindow duration 10% sXDéfinit la fenêtre de temps pendant laquelle vous serez informé de l'expiration prochaine d'un certificat. -MemcacheConnTTL num[units] 15s svEDurée de conservation des connexions inactives -MergeSlashes ON|OFF ON svCFusion des slashes consécutifs dans les URLs par le serveur. +MemcacheConnTTL num[units] 15s svEDurée de conservation des connexions inactives +MergeSlashes ON|OFF ON svCFusion des slashes consécutifs dans les URLs par le serveur. -MergeTrailers [on|off] off svCDétermine si les données supplémentaires (trailers) sont +MergeTrailers [on|off] off svCDétermine si les données supplémentaires (trailers) sont fusionnées avec les en-têtes -MetaDir répertoire .web svdhELe nom du répertoire où trouver les fichiers de +MetaDir répertoire .web svdhELe nom du répertoire où trouver les fichiers de métainformations dans le style du CERN -MetaFiles on|off off svdhEActive le traitement des métafichiers du CERN -MetaSuffix suffixe .meta svdhESuffixe du fichier contenant les métainformations dans le +MetaFiles on|off off svdhEActive le traitement des métafichiers du CERN +MetaSuffix suffixe .meta svdhESuffixe du fichier contenant les métainformations dans le style du CERN -MimeMagicFile chemin-fichiersvEActive la détermination du type MIME en se basant sur le +MimeMagicFile chemin-fichiersvEActive la détermination du type MIME en se basant sur le contenu du fichier et en utilisant le fichier magique spécifié -MinSpareServers nombre 5 sMNombre minimum de processus serveurs enfants +MinSpareServers nombre 5 sMNombre minimum de processus serveurs enfants inactifs -MinSpareThreads nombresMNombre minimum de threads inactifs qui seront disponibles +MinSpareThreads nombresMNombre minimum de threads inactifs qui seront disponibles pour pouvoir traiter les pics de requêtes -MMapFile chemin fichier [chemin fichier] ...sXCharge au démarrage une liste de fichiers en mémoire -ModemStandard V.21|V.26bis|V.32|V.34|V.92dXStandard de modem à simuler -ModMimeUsePathInfo On|Off Off dBIndique à mod_mime de traiter les éléments +MMapFile chemin fichier [chemin fichier] ...sXCharge au démarrage une liste de fichiers en mémoire +ModemStandard V.21|V.26bis|V.32|V.34|V.92dXStandard de modem à simuler +ModMimeUsePathInfo On|Off Off dBIndique à mod_mime de traiter les éléments de path_info en tant que parties du nom de fichier -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly svdhBLes types de fichiers qui seront inclus lors d'une +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly svdhBLes types de fichiers qui seront inclus lors d'une recherche de correspondance de fichier avec les vues multiples (MultiViews) -Mutex mécanisme [default|nom-mutex] ... [OmitPID] default sCDéfinit les mécanismes de mutex et le repertoire du fichier +Mutex mécanisme [default|nom-mutex] ... [OmitPID] default sCDéfinit les mécanismes de mutex et le repertoire du fichier verrou pour tous les mutex ou seulement les mutex spécifiés -NameVirtualHost adresse[:port]sCOBSOLETE : Définit une adresse IP pour les serveurs virtuels à base de +NameVirtualHost adresse[:port]sCOBSOLETE : Définit une adresse IP pour les serveurs virtuels à base de nom -NoProxy domaine [domaine] ...svEServeurs, domaines ou réseaux auquels on se connectera +NoProxy domaine [domaine] ...svEServeurs, domaines ou réseaux auquels on se connectera directement -NWSSLTrustedCerts nom-fichier -[nom-fichier] ...sBListe de certificats clients supplémentaires -NWSSLUpgradeable [adresse-IP:]num-portsBPermet de promouvoir une connexion non SSL au statut de +NWSSLTrustedCerts nom-fichier +[nom-fichier] ...sBListe de certificats clients supplémentaires +NWSSLUpgradeable [adresse-IP:]num-portsBPermet de promouvoir une connexion non SSL au statut de connexion SSL à la demande -Options - [+|-]option [[+|-]option] ... FollowSymlinks svdhCDéfinit les fonctionnalités disponibles pour un répertoire +Options + [+|-]option [[+|-]option] ... FollowSymlinks svdhCDéfinit les fonctionnalités disponibles pour un répertoire particulier - Order ordre Deny,Allow dhEDéfinit le statut d'accès par défaut et l'ordre dans lequel + Order ordre Deny,Allow dhEDéfinit le statut d'accès par défaut et l'ordre dans lequel les directives Allow et Deny sont évaluées. -OutputSed commande-seddhCommande sed pour le filtrage des contenus de type +OutputSed commande-seddhCommande sed pour le filtrage des contenus de type réponse -PassEnv var-env [var-env] -...svdhBTransmet des variables d'environnement depuis le +PassEnv var-env [var-env] +...svdhBTransmet des variables d'environnement depuis le shell -PidFile nom fichier logs/httpd.pid sMFicher dans lequel le serveur enregistre l'identificateur +PidFile nom fichier logs/httpd.pid sMFicher dans lequel le serveur enregistre l'identificateur de processus du démon -PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXFait un compromis entre d'une part l'efficacité et la +PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXFait un compromis entre d'une part l'efficacité et la vitesse de traitement et d'autre part la sécurité à l'encontre des codes malicieux supportant les privilèges. -Protocol protocolesvCProtocole pour une socket d'écoute -ProtocolEcho On|Off Off svXActive ou désactive le serveur d'écho -Protocols protocole ... http/1.1 svCProtocoles disponibles pour un serveur virtuel ou non -ProtocolsHonorOrder On|Off On svCDétermine qui du client ou du serveur détermine l'ordre +Protocol protocolesvCProtocole pour une socket d'écoute +ProtocolEcho On|Off Off svXActive ou désactive le serveur d'écho +Protocols protocole ... http/1.1 svCProtocoles disponibles pour un serveur virtuel ou non +ProtocolsHonorOrder On|Off On svCDétermine qui du client ou du serveur détermine l'ordre des protocoles au cours de la négociation de la connexion -<Proxy url-avec-jokers> ...</Proxy>svEConteneur de directives s'appliquant à des ressources +<Proxy url-avec-jokers> ...</Proxy>svEConteneur de directives s'appliquant à des ressources mandatées -Proxy100Continue Off|On On svdETransmission du message "100-continue" au serveur d'origine -ProxyAddHeaders Off|On On svdEAjoute des informations à propos du mandataire aux +Proxy100Continue Off|On On svdETransmission du message "100-continue" au serveur d'origine +ProxyAddHeaders Off|On On svdEAjoute des informations à propos du mandataire aux en-têtes X-Forwarded-* -ProxyBadHeader IsError|Ignore|StartBody IsError svEDétermine la manière de traiter les lignes d'en-tête +ProxyBadHeader IsError|Ignore|StartBody IsError svEDétermine la manière de traiter les lignes d'en-tête incorrectes d'une réponse -ProxyBlock *|terme|serveur|domaine -[terme|serveur|domaine] ...svETermes, serveurs ou domaines bloqués par le +ProxyBlock *|terme|serveur|domaine +[terme|serveur|domaine] ...svETermes, serveurs ou domaines bloqués par le mandataire -ProxyDomain DomainesvENom de domaine par défaut pour les requêtes +ProxyDomain DomainesvENom de domaine par défaut pour les requêtes mandatées -ProxyErrorOverride Off|On [code ...] Off svdEOutrepasser les pages d'erreur pour les contenus +ProxyErrorOverride Off|On [code ...] Off svdEOutrepasser les pages d'erreur pour les contenus mandatés -ProxyExpressDBMFile pathnamesvEChemin du fichier DBM. -ProxyExpressDBMType type default svEType de fichier DBM. -ProxyExpressEnable on|off off svEActive la fonctionnalité du module. -ProxyFCGIBackendType FPM|GENERIC FPM svdhESpécifie le type de l'application FastCGI d'arrière-plan -ProxyFCGISetEnvIf conditional-expression +ProxyExpressDBMFile pathnamesvEChemin du fichier DBM. +ProxyExpressDBMType type default svEType de fichier DBM. +ProxyExpressEnable on|off off svEActive la fonctionnalité du module. +ProxyFCGIBackendType FPM|GENERIC FPM svdhESpécifie le type de l'application FastCGI d'arrière-plan +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]svdhEPermet d'adapter la valeur des variables envoyées aux serveurs + [value-expression]svdhEPermet d'adapter la valeur des variables envoyées aux serveurs FastCGI -ProxyFtpDirCharset character_set ISO-8859-1 svdEDéfinit le jeu de caractères des listings FTP +ProxyFtpDirCharset character_set ISO-8859-1 svdEDéfinit le jeu de caractères des listings FTP mandatés -ProxyFtpEscapeWildcards on|off on svdELes caractères génériques dans les noms de fichiers +ProxyFtpEscapeWildcards on|off on svdELes caractères génériques dans les noms de fichiers doivent-ils être échappés lorsqu'ils sont envoyés au serveur FTP ? -ProxyFtpListOnWildcard on|off on svdELes caractères génériques dans les noms de fichiers +ProxyFtpListOnWildcard on|off on svdELes caractères génériques dans les noms de fichiers demandés doivent-ils déclencher l'affichage d'un listing ? -ProxyHCExpr name {ap_expr expression}svECrée et nomme une expression conditionnelle à utiliser pour +ProxyHCExpr name {ap_expr expression}svECrée et nomme une expression conditionnelle à utiliser pour déterminer la santé d'un serveur d'arrière-plan en fonction de sa valeur -ProxyHCTemplate name parameter=setting [...]svECrée et nomme un modèle permettant de définir différents +ProxyHCTemplate name parameter=setting [...]svECrée et nomme un modèle permettant de définir différents paramètres de check up -ProxyHCTPsize size 16 sEDéfinit la taille totale, pour l'ensemble du +ProxyHCTPsize size 16 sEDéfinit la taille totale, pour l'ensemble du serveur, du jeu de threads utilisé pour le check up des équipiers -ProxyHTMLBufSize nb-octets 8192 svdBDéfinit l'incrément de la taille du tampon, ainsi que sa +ProxyHTMLBufSize nb-octets 8192 svdBDéfinit l'incrément de la taille du tampon, ainsi que sa taille initiale, pour la mise en tampon des scripts en ligne et des feuilles de style. -ProxyHTMLCharsetOut jeu-de-caractères | *svdBSpécifie un jeu de caractères pour la sortie de +ProxyHTMLCharsetOut jeu-de-caractères | *svdBSpécifie un jeu de caractères pour la sortie de mod_proxy_html. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    svdBDéfinit une déclaration de type de document HTML ou XHTML. -ProxyHTMLEnable On|Off Off svdBPermet d'activer/désactiver le filtre proxy_html. -ProxyHTMLEvents attribut [attribut ...]svdBSpécifie les attributs à traiter comme des évènements de +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    svdBDĂ©finit une dĂ©claration de type de document HTML ou XHTML. +ProxyHTMLEnable On|Off Off svdBPermet d'activer/dĂ©sactiver le filtre proxy_html. +ProxyHTMLEvents attribut [attribut ...]svdBSpĂ©cifie les attributs Ă  traiter comme des Ă©vènements de type scripting. -ProxyHTMLExtended On|Off Off svdBDĂ©termine si l'on doit corriger les liens dans les scripts +ProxyHTMLExtended On|Off Off svdBDĂ©termine si l'on doit corriger les liens dans les scripts en ligne, les feuilles de style et les Ă©vènements de type scripting. -ProxyHTMLFixups [lowercase] [dospath] [reset]svdBCorrige les erreurs HTML simples. -ProxyHTMLInterp On|Off Off svdBActive la rĂ©interprĂ©tation des règles +ProxyHTMLFixups [lowercase] [dospath] [reset]svdBCorrige les erreurs HTML simples. +ProxyHTMLInterp On|Off Off svdBActive la rĂ©interprĂ©tation des règles ProxyHTMLURLMap pour chaque requĂŞte. -ProxyHTMLLinks Ă©lĂ©ment attribut [attribut2 ...]svdBSpĂ©cifie les Ă©lĂ©ments HTML dont les attributs d'URL doivent +ProxyHTMLLinks Ă©lĂ©ment attribut [attribut2 ...]svdBSpĂ©cifie les Ă©lĂ©ments HTML dont les attributs d'URL doivent ĂŞtre rĂ©Ă©crits. -ProxyHTMLMeta On|Off Off svdBActive ou dĂ©sactive une prĂ©interprĂ©tation supplĂ©mentaire +ProxyHTMLMeta On|Off Off svdBActive ou dĂ©sactive une prĂ©interprĂ©tation supplĂ©mentaire des mĂ©tadonnĂ©es dans les sections HTML <head>. -ProxyHTMLStripComments On|Off Off svdBDĂ©termine si les commentaires HTML doivent ĂŞtre supprimĂ©s. -ProxyHTMLURLMap modèle-source modèle-cible [drapeaux] [cond]svdBDĂ©finit une règle de rĂ©Ă©criture des liens HTML -ProxyIOBufferSize octets 8192 svEDĂ©termine la taille du tampon interne de transfert de +ProxyHTMLStripComments On|Off Off svdBDĂ©termine si les commentaires HTML doivent ĂŞtre supprimĂ©s. +ProxyHTMLURLMap modèle-source modèle-cible [drapeaux] [cond]svdBDĂ©finit une règle de rĂ©Ă©criture des liens HTML +ProxyIOBufferSize octets 8192 svEDĂ©termine la taille du tampon interne de transfert de donnĂ©es -<ProxyMatch regex> ...</ProxyMatch>svEConteneur de directives s'appliquant Ă  des ressources +<ProxyMatch regex> ...</ProxyMatch>svEConteneur de directives s'appliquant Ă  des ressources mandatĂ©es correspondant Ă  une expression rationnelle -ProxyMaxForwards nombre -1 svENombre maximum de mandataires Ă  travers lesquelles une +ProxyMaxForwards nombre -1 svENombre maximum de mandataires Ă  travers lesquelles une requĂŞte peut ĂŞtre redirigĂ©e -ProxyPass [chemin] !|url [clĂ©=valeur - [clĂ©=valeur ...]] [nocanon] [interpolate] [noquery]svdERĂ©fĂ©rencer des serveurs distants depuis +ProxyPass [chemin] !|url [clĂ©=valeur + [clĂ©=valeur ...]] [nocanon] [interpolate] [noquery]svdERĂ©fĂ©rencer des serveurs distants depuis l'espace d'URLs du serveur local -ProxyPassInherit On|Off On svEHĂ©ritage des directives ProxyPass dĂ©finies au niveau du +ProxyPassInherit On|Off On svEHĂ©ritage des directives ProxyPass dĂ©finies au niveau du serveur principal -ProxyPassInterpolateEnv On|Off Off svdEActive l'interpolation des variables d'environnement dans +ProxyPassInterpolateEnv On|Off Off svdEActive l'interpolation des variables d'environnement dans les configurations de mandataires inverses -ProxyPassMatch [regex] !|url +ProxyPassMatch [regex] !|url [clĂ©=valeur - [clĂ©=valeur ...]]svdEFait correspondre des serveurs distants dans l'espace d'URL + [clĂ©=valeur ...]]svdEFait correspondre des serveurs distants dans l'espace d'URL du serveur local en utilisant des expressions rationnelles -ProxyPassReverse [chemin] url -[interpolate]svdEAjuste l'URL dans les en-tĂŞtes de la rĂ©ponse HTTP envoyĂ©e +ProxyPassReverse [chemin] url +[interpolate]svdEAjuste l'URL dans les en-tĂŞtes de la rĂ©ponse HTTP envoyĂ©e par un serveur mandatĂ© en inverse -ProxyPassReverseCookieDomain domaine-interne -domaine-public [interpolate]svdEAjuste la chaĂ®ne correspondant au domaine dans les en-tĂŞtes +ProxyPassReverseCookieDomain domaine-interne +domaine-public [interpolate]svdEAjuste la chaĂ®ne correspondant au domaine dans les en-tĂŞtes Set-Cookie en provenance d'un serveur mandatĂ© -ProxyPassReverseCookiePath chemin-interne -chemin-public [interpolate]svdEAjuste la chaĂ®ne correspondant au chemin dans les en-tĂŞtes +ProxyPassReverseCookiePath chemin-interne +chemin-public [interpolate]svdEAjuste la chaĂ®ne correspondant au chemin dans les en-tĂŞtes Set-Cookie en provenance d'un serveur mandatĂ© -ProxyPreserveHost On|Off Off svdEUtilise l'en-tĂŞte de requĂŞte entrante Host pour la requĂŞte +ProxyPreserveHost On|Off Off svdEUtilise l'en-tĂŞte de requĂŞte entrante Host pour la requĂŞte du mandataire -ProxyReceiveBufferSize octets 0 svETaille du tampon rĂ©seau pour les connexions mandatĂ©es HTTP +ProxyReceiveBufferSize octets 0 svETaille du tampon rĂ©seau pour les connexions mandatĂ©es HTTP et FTP -ProxyRemote comparaison serveur-distantsvEMandataire distant Ă  utiliser pour traiter certaines +ProxyRemote comparaison serveur-distantsvEMandataire distant Ă  utiliser pour traiter certaines requĂŞtes -ProxyRemoteMatch regex serveur-distantsvELe mandataire distant Ă  utiliser pour traiter les requĂŞtes +ProxyRemoteMatch regex serveur-distantsvELe mandataire distant Ă  utiliser pour traiter les requĂŞtes correspondant Ă  une expression rationnelle -ProxyRequests On|Off Off svEActive la fonctionnalitĂ© (standard) de mandataire +ProxyRequests On|Off Off svEActive la fonctionnalitĂ© (standard) de mandataire direct -ProxySCGIInternalRedirect On|Off|Headername On svdEActive ou dĂ©sactive les rĂ©ponses de redirection interne en +ProxySCGIInternalRedirect On|Off|Headername On svdEActive ou dĂ©sactive les rĂ©ponses de redirection interne en provenance du serveur cible. -ProxySCGISendfile On|Off|nom-en-tĂŞte Off svdEActive l'Ă©valuation du pseudo en-tĂŞte de rĂ©ponse +ProxySCGISendfile On|Off|nom-en-tĂŞte Off svdEActive l'Ă©valuation du pseudo en-tĂŞte de rĂ©ponse X-Sendfile -ProxySet url clĂ©=valeur [clĂ©=valeur ...]svdEDĂ©finit diffĂ©rents paramètres relatifs Ă  la rĂ©partition de +ProxySet url clĂ©=valeur [clĂ©=valeur ...]svdEDĂ©finit diffĂ©rents paramètres relatifs Ă  la rĂ©partition de charge des mandataires et aux membres des groupes de rĂ©partition de charge -ProxySourceAddress adressesvEDĂ©finit l'adresse IP locale pour les connexions mandatĂ©es +ProxySourceAddress adressesvEDĂ©finit l'adresse IP locale pour les connexions mandatĂ©es sortantes -ProxyStatus Off|On|Full Off svEAffiche l'Ă©tat du rĂ©partiteur de charge du mandataire dans +ProxyStatus Off|On|Full Off svEAffiche l'Ă©tat du rĂ©partiteur de charge du mandataire dans mod_status -ProxyTimeout secondessvEDĂ©lai d'attente rĂ©seau pour les requĂŞtes +ProxyTimeout secondessvEDĂ©lai d'attente rĂ©seau pour les requĂŞtes mandatĂ©es -ProxyVia On|Off|Full|Block Off svEInformation fournie dans l'en-tĂŞte de rĂ©ponse HTTP +ProxyVia On|Off|Full|Block Off svEInformation fournie dans l'en-tĂŞte de rĂ©ponse HTTP Via pour les requĂŞtes mandatĂ©es -ProxyWebsocketFallbackToProxyHttp On|Off On svEDemande Ă  ce module de laisser mod_proxy_http +ProxyWebsocketFallbackToProxyHttp On|Off On svEDemande Ă  ce module de laisser mod_proxy_http gĂ©rer la requĂŞte -QualifyRedirectURL On|Off Off svdCVĂ©rifie si la variable d'environnement REDIRECT_URL est +QualifyRedirectURL On|Off Off svdCVĂ©rifie si la variable d'environnement REDIRECT_URL est pleinement qualifiĂ©e -ReadBufferSize bytes 8192 svdCTaille des tampons utilisĂ©s pour lire les donnĂ©es -ReadmeName nom-fichiersvdhBNom du fichier dont le contenu sera insĂ©rĂ© Ă  la fin de +ReadBufferSize bytes 8192 svdCTaille des tampons utilisĂ©s pour lire les donnĂ©es +ReadmeName nom-fichiersvdhBNom du fichier dont le contenu sera insĂ©rĂ© Ă  la fin de l'index -ReceiveBufferSize octets 0 sMTaille du tampon TCP en entrĂ©e -Redirect [Ă©tat] [URL-path] -URLsvdhBEnvoie une redirection externe demandant au client +ReceiveBufferSize octets 0 sMTaille du tampon TCP en entrĂ©e +Redirect [Ă©tat] [URL-path] +URLsvdhBEnvoie une redirection externe demandant au client d'effectuer une autre requĂŞte avec une URL diffĂ©rente -RedirectMatch [Ă©tat] regex -URLsvdhBEnvoie une redirection externe faisant appel aux +RedirectMatch [Ă©tat] regex +URLsvdhBEnvoie une redirection externe faisant appel aux expressions rationnelles pour la mise en correspondance de l'URL courante -RedirectPermanent chemin URL URLsvdhBEnvoie une redirection externe permanente demandant au +RedirectPermanent chemin URL URLsvdhBEnvoie une redirection externe permanente demandant au client d'effectuer une nouvelle requĂŞte avec une URL diffĂ©rente -RedirectTemp chemin URL URLsvdhBEnvoie une redirection externe temporaire demandant au +RedirectTemp chemin URL URLsvdhBEnvoie une redirection externe temporaire demandant au client d'effectuer une nouvelle requĂŞte avec une URL diffĂ©rente -RedisConnPoolTTL num[units] 15s svEDurĂ©e de vie du jeu de connexions avec le(s) serveur(s) Redis. -RedisTimeout num[units] 5s svEDurĂ©e maximale de lecture/Ă©criture sur la connexion avec le(s) +RedisConnPoolTTL num[units] 15s svEDurĂ©e de vie du jeu de connexions avec le(s) serveur(s) Redis. +RedisTimeout num[units] 5s svEDurĂ©e maximale de lecture/Ă©criture sur la connexion avec le(s) serveur(s) Redis. -ReflectorHeader en-tĂŞte-entrĂ©e [en-tĂŞte-sortie]svdhBRenvoie un en-tĂŞte d'entrĂ©e dans les en-tĂŞtes de sortie -RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCConfiguration des options globales par dĂ©faut pour les +ReflectorHeader en-tĂŞte-entrĂ©e [en-tĂŞte-sortie]svdhBRenvoie un en-tĂŞte d'entrĂ©e dans les en-tĂŞtes de sortie +RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCConfiguration des options globales par dĂ©faut pour les expressions rationnelles -RegisterHttpMethod mĂ©thode [mĂ©thode [...]]sCEnregistrement de mĂ©thodes HTTP non standards -RemoteIPHeader en-tĂŞtesvBDĂ©finit le champ d'en-tĂŞte qui contiendra les adresses IP +RegisterHttpMethod mĂ©thode [mĂ©thode [...]]sCEnregistrement de mĂ©thodes HTTP non standards +RemoteIPHeader en-tĂŞtesvBDĂ©finit le champ d'en-tĂŞte qui contiendra les adresses IP du client -RemoteIPInternalProxy -ip-mandataire|ip-mandataire/sous-rĂ©seau|nom-hĂ´te ...svBDĂ©clare les adresses IP intranet clients comme dignes de +RemoteIPInternalProxy +ip-mandataire|ip-mandataire/sous-rĂ©seau|nom-hĂ´te ...svBDĂ©clare les adresses IP intranet clients comme dignes de confiance pour prĂ©senter la valeur RemoteIPHeader -RemoteIPInternalProxyList nom-fichiersvBDĂ©clare les adresses IP intranet clients comme dignes de +RemoteIPInternalProxyList nom-fichiersvBDĂ©clare les adresses IP intranet clients comme dignes de confiance pour prĂ©senter la valeur RemoteIPHeader -RemoteIPProxiesHeader Nom_en-tĂŞtesvBDĂ©clare le champ d'en-tĂŞte qui contiendra toutes les +RemoteIPProxiesHeader Nom_en-tĂŞtesvBDĂ©clare le champ d'en-tĂŞte qui contiendra toutes les adresses IP intermĂ©diaires -RemoteIPProxyProtocol On|OffsvBActive ou dĂ©sactive la gestion du protocole PROXY -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDĂ©sactive la prise en compte de l'en-tĂŞte PROXY pour certains hĂ´tes +RemoteIPProxyProtocol On|OffsvBActive ou dĂ©sactive la gestion du protocole PROXY +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDĂ©sactive la prise en compte de l'en-tĂŞte PROXY pour certains hĂ´tes ou rĂ©seaux -RemoteIPTrustedProxy -ip-mandataire|ip-mandataire/sous-rĂ©seau|nom-hĂ´te ...svBDĂ©clare les adresses IP clientes de l'intranet dignes de +RemoteIPTrustedProxy +ip-mandataire|ip-mandataire/sous-rĂ©seau|nom-hĂ´te ...svBDĂ©clare les adresses IP clientes de l'intranet dignes de confiance pour prĂ©senter la valeur RemoteIPHeader -RemoteIPTrustedProxyList nom-fichiersvBDĂ©clare les adresses IP intranet clients comme dignes de +RemoteIPTrustedProxyList nom-fichiersvBDĂ©clare les adresses IP intranet clients comme dignes de confiance pour prĂ©senter la valeur RemoteIPHeader -RemoveCharset extension [extension] -...vdhBSupprime toute association de jeu de caractères pour un +RemoveCharset extension [extension] +...vdhBSupprime toute association de jeu de caractères pour un ensemble d'extensions de noms de fichiers -RemoveEncoding extension [extension] -...vdhBSupprime toute association de codage de contenu pour un +RemoveEncoding extension [extension] +...vdhBSupprime toute association de codage de contenu pour un ensemble d'extensions de noms de fichiers -RemoveHandler extension [extension] -...vdhBSupprime toute association de gestionnaire Ă  un ensemble +RemoveHandler extension [extension] +...vdhBSupprime toute association de gestionnaire Ă  un ensemble d'extensions de noms de fichiers -RemoveInputFilter extension [extension] -...vdhBSupprime toute association de filtre en entrĂ©e Ă  un +RemoveInputFilter extension [extension] +...vdhBSupprime toute association de filtre en entrĂ©e Ă  un ensemble d'extensions de noms de fichiers -RemoveLanguage extension [extension] -...vdhBSupprime toute association de langue Ă  un ensemble +RemoveLanguage extension [extension] +...vdhBSupprime toute association de langue Ă  un ensemble d'extensions de noms de fichiers -RemoveOutputFilter extension [extension] -...vdhBSupprime toute association de filtre en sortie Ă  un +RemoveOutputFilter extension [extension] +...vdhBSupprime toute association de filtre en sortie Ă  un ensemble d'extensions de noms de fichiers -RemoveType extension [extension] -...vdhBSupprime toute association de type de contenu Ă  un ensemble +RemoveType extension [extension] +...vdhBSupprime toute association de type de contenu Ă  un ensemble d'extensions de noms de fichiers -RequestHeader add|append|edit|edit*|merge|set|setifempty|unset +RequestHeader add|append|edit|edit*|merge|set|setifempty|unset en-tĂŞte [[expr=]valeur [remplacement] [early|env=[!]variable|expr=expression]] -svdhEConfigure les en-tĂŞtes d'une requĂŞte HTTP -RequestReadTimeout +svdhEConfigure les en-tĂŞtes d'une requĂŞte HTTP +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=MinRate] [body=timeout[-maxtimeout][,MinRate=MinRate] - handshake=0 header= +svEDĂ©finit des dĂ©lais maximums pour la nĂ©gociation TLS, la rĂ©ception + handshake=0 header= +svEDĂ©finit des dĂ©lais maximums pour la nĂ©gociation TLS, la rĂ©ception des en-tĂŞtes et/ou corps des requĂŞtes en provenance du client. -Require [not] nom-entitĂ© [nom-entitĂ©] -...dhBVĂ©rifie si un utilisateur authentifiĂ© a une +Require [not] nom-entitĂ© [nom-entitĂ©] +...dhBVĂ©rifie si un utilisateur authentifiĂ© a une autorisation d'accès accordĂ©e par un fournisseur d'autorisation. -<RequireAll> ... </RequireAll>dhBRegroupe plusieurs directives d'autorisation dont aucune ne +<RequireAll> ... </RequireAll>dhBRegroupe plusieurs directives d'autorisation dont aucune ne doit Ă©chouer et dont au moins une doit retourner un rĂ©sultat positif pour que la directive globale retourne elle-mĂŞme un rĂ©sultat positif. -<RequireAny> ... </RequireAny>dhBRegroupe des directives d'autorisation dont au moins une +<RequireAny> ... </RequireAny>dhBRegroupe des directives d'autorisation dont au moins une doit retourner un rĂ©sultat positif pour que la directive globale retourne elle-mĂŞme un rĂ©sultat positif. -<RequireNone> ... </RequireNone>dhBRegroupe des directives d'autorisation dont aucune ne doit +<RequireNone> ... </RequireNone>dhBRegroupe des directives d'autorisation dont aucune ne doit retourner un rĂ©sultat positif pour que la directive globale n'Ă©choue pas. -RewriteBase chemin_URLdhEDĂ©finit l'URL de base pour les rĂ©Ă©critures au niveau +RewriteBase chemin_URLdhEDĂ©finit l'URL de base pour les rĂ©Ă©critures au niveau rĂ©pertoire - RewriteCond - chaĂ®ne_de_test expression_de_comparaison [drapeaux]svdhEDĂ©finit une condition qui devra ĂŞtre satisfaite pour que + RewriteCond + chaĂ®ne_de_test expression_de_comparaison [drapeaux]svdhEDĂ©finit une condition qui devra ĂŞtre satisfaite pour que la rĂ©Ă©criture soit effectuĂ©e -RewriteEngine on|off off svdhEActive ou dĂ©sactive l'exĂ©cution du +RewriteEngine on|off off svdhEActive ou dĂ©sactive l'exĂ©cution du moteur de rĂ©Ă©criture -RewriteMap MapName MapType:MapSource [MapTypeOptions] -svEDĂ©finit une fonction de mise en correspondance pour la +RewriteMap MapName MapType:MapSource [MapTypeOptions] +svEDĂ©finit une fonction de mise en correspondance pour la recherche de mots-clĂ©s -RewriteOptions OptionssvdhEConfigure certaines options spĂ©ciales +RewriteOptions OptionssvdhEConfigure certaines options spĂ©ciales pour le moteur de rĂ©Ă©criture -RewriteRule - Modèle Substitution [drapeaux]svdhEDĂ©finit les règles pour le moteur de rĂ©Ă©criture -RLimitCPU secondes|max [secondes|max]svdhCLimite le temps CPU allouĂ© aux processus initiĂ©s par les +RewriteRule + Modèle Substitution [drapeaux]svdhEDĂ©finit les règles pour le moteur de rĂ©Ă©criture +RLimitCPU secondes|max [secondes|max]svdhCLimite le temps CPU allouĂ© aux processus initiĂ©s par les processus enfants d'Apache httpd -RLimitMEM octets|max [octets|max]svdhCLimite la mĂ©moire allouĂ©e aux processus initiĂ©s par les +RLimitMEM octets|max [octets|max]svdhCLimite la mĂ©moire allouĂ©e aux processus initiĂ©s par les processus enfants d'Apache httpd -RLimitNPROC nombre|max [nombre|max]svdhCLimite le nombre de processus qui peuvent ĂŞtre initiĂ©s par +RLimitNPROC nombre|max [nombre|max]svdhCLimite le nombre de processus qui peuvent ĂŞtre initiĂ©s par les processus initiĂ©s par les processus enfants d'Apache httpd -Satisfy Any|All All dhEInteraction entre le contrĂ´le d'accès en fonction de l'hĂ´te +Satisfy Any|All All dhEInteraction entre le contrĂ´le d'accès en fonction de l'hĂ´te et l'authentification utilisateur -ScoreBoardFile chemin fichier logs/apache_runtime +sMChemin du fichier oĂą sont stockĂ©es les donnĂ©es concernant +ScoreBoardFile chemin fichier logs/apache_runtime +sMChemin du fichier oĂą sont stockĂ©es les donnĂ©es concernant la coordination des processus enfants -Script mĂ©thode script cgisvdBActive un script CGI dans le cas d'une mĂ©thode de requĂŞte +Script mĂ©thode script cgisvdBActive un script CGI dans le cas d'une mĂ©thode de requĂŞte particulière. -ScriptAlias [chemin URL] -chemin fichier|chemin rĂ©pertoiresvdBFait correspondre une URL Ă  une zone du système de fichiers +ScriptAlias [chemin URL] +chemin fichier|chemin rĂ©pertoiresvdBFait correspondre une URL Ă  une zone du système de fichiers et dĂ©signe la cible comme script CGI -ScriptAliasMatch regex -chemin fichier|chemin rĂ©pertoiresvBFait correspondre une URL Ă  une zone du système de fichiers +ScriptAliasMatch regex +chemin fichier|chemin rĂ©pertoiresvBFait correspondre une URL Ă  une zone du système de fichiers en faisant appel aux expressions rationnelles et en dĂ©signant la cible comme un script CGI -ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCPermet de localiser l'interprĂ©teur des scripts +ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCPermet de localiser l'interprĂ©teur des scripts CGI -ScriptLog chemin fichiersvBChemin du fichier journal des erreurs du script +ScriptLog chemin fichiersvBChemin du fichier journal des erreurs du script CGI -ScriptLogBuffer octets 1024 svBTaille maximale des requĂŞtes PUT ou POST qui seront +ScriptLogBuffer octets 1024 svBTaille maximale des requĂŞtes PUT ou POST qui seront enregistrĂ©es dans le journal du script -ScriptLogLength octets 10385760 svBTaille maximale du fichier journal des scripts +ScriptLogLength octets 10385760 svBTaille maximale du fichier journal des scripts CGI -ScriptSock chemin fichier cgisock sBLe prĂ©fixe du nom de fichier du socket Ă  utiliser pour +ScriptSock chemin fichier cgisock sBLe prĂ©fixe du nom de fichier du socket Ă  utiliser pour communiquer avec le dĂ©mon CGI -SecureListen [adresse-IP:]num-port -nom-certificat [MUTUAL]sBActive le chiffrement SSL pour le port +SecureListen [adresse-IP:]num-port +nom-certificat [MUTUAL]sBActive le chiffrement SSL pour le port spĂ©cifiĂ© -SeeRequestTail On|Off Off sCDĂ©termine si mod_status affiche les 63 premiers caractères +SeeRequestTail On|Off Off sCDĂ©termine si mod_status affiche les 63 premiers caractères d'une requĂŞte ou les 63 derniers, en supposant que la requĂŞte elle-mĂŞme possède plus de 63 caractères. -SendBufferSize octets 0 sMTaille du tampon TCP en sortie -ServerAdmin adresse Ă©lectronique|URLsvCL'adresse Ă©lectronique que le serveur inclut dans les +SendBufferSize octets 0 sMTaille du tampon TCP en sortie +ServerAdmin adresse Ă©lectronique|URLsvCL'adresse Ă©lectronique que le serveur inclut dans les messages d'erreur envoyĂ©s au client -ServerAlias nom serveur [nom serveur] -...vCAutres noms d'un serveur utilisables pour atteindre des +ServerAlias nom serveur [nom serveur] +...vCAutres noms d'un serveur utilisables pour atteindre des serveurs virtuels Ă  base de nom -ServerLimit nombresMLimite supĂ©rieure de la dĂ©finition du nombre de +ServerLimit nombresMLimite supĂ©rieure de la dĂ©finition du nombre de processus -ServerName -[protocole://]nom-de-domaine|adresse-ip[:port]svCNom d'hĂ´te et port que le serveur utilise pour +ServerName +[protocole://]nom-de-domaine|adresse-ip[:port]svCNom d'hĂ´te et port que le serveur utilise pour s'authentifier lui-mĂŞme -ServerPath chemin d'URLvCNom de chemin d'URL hĂ©ritĂ© pour un serveur virtuel Ă  base +ServerPath chemin d'URLvCNom de chemin d'URL hĂ©ritĂ© pour un serveur virtuel Ă  base de nom accĂ©dĂ© par un navigateur incompatible -ServerRoot chemin de rĂ©pertoire /usr/local/apache sCRacine du rĂ©pertoire d'installation du +ServerRoot chemin de rĂ©pertoire /usr/local/apache sCRacine du rĂ©pertoire d'installation du serveur -ServerSignature On|Off|EMail Off svdhCDĂ©finit un pied de page pour les documents gĂ©nĂ©rĂ©s par le +ServerSignature On|Off|EMail Off svdhCDĂ©finit un pied de page pour les documents gĂ©nĂ©rĂ©s par le serveur -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigure l'en-tĂŞte Server de la rĂ©ponse +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigure l'en-tĂŞte Server de la rĂ©ponse HTTP -Session On|Off Off svdhEOuvre une session pour le contexte courant -SessionCookieName nom attributssvdhENom et attributs du cookie RFC2109 dans lequel la session +Session On|Off Off svdhEOuvre une session pour le contexte courant +SessionCookieName nom attributssvdhENom et attributs du cookie RFC2109 dans lequel la session est stockĂ©e -SessionCookieName2 nom attributssvdhENom et attributs pour le cookie RFC2965 dans lequel est +SessionCookieName2 nom attributssvdhENom et attributs pour le cookie RFC2965 dans lequel est stockĂ©e la session -SessionCookieRemove On|Off Off svdhEDĂ©termine si les cookies de session doivent ĂŞtre supprimĂ©s +SessionCookieRemove On|Off Off svdhEDĂ©termine si les cookies de session doivent ĂŞtre supprimĂ©s des en-tĂŞtes HTTP entrants -SessionCryptoCipher algorithme aes256 svdhXL'algorithme Ă  utiliser pour le chiffrement de la session -SessionCryptoDriver nom [param[=valeur]]sXLe pilote de chiffrement Ă  utiliser pour chiffrer les +SessionCryptoCipher algorithme aes256 svdhXL'algorithme Ă  utiliser pour le chiffrement de la session +SessionCryptoDriver nom [param[=valeur]]sXLe pilote de chiffrement Ă  utiliser pour chiffrer les sessions -SessionCryptoPassphrase secret [ secret ... ] svdhXLa clĂ© utilisĂ©e pour chiffrer la session -SessionCryptoPassphraseFile nom-fichiersvdXLe fichier contenant les clĂ©s utilisĂ©es pour chiffrer la +SessionCryptoPassphrase secret [ secret ... ] svdhXLa clĂ© utilisĂ©e pour chiffrer la session +SessionCryptoPassphraseFile nom-fichiersvdXLe fichier contenant les clĂ©s utilisĂ©es pour chiffrer la session -SessionDBDCookieName nom attributssvdhENom et attributs du cookie RFC2109 qui contient +SessionDBDCookieName nom attributssvdhENom et attributs du cookie RFC2109 qui contient l'identifiant de session -SessionDBDCookieName2 nom attributssvdhENom et attributs du cookie RFC2965 qui contient +SessionDBDCookieName2 nom attributssvdhENom et attributs du cookie RFC2965 qui contient l'identifiant de session -SessionDBDCookieRemove On|Off On svdhEDĂ©termine si les cookies de session doivent ĂŞtre supprimĂ©s +SessionDBDCookieRemove On|Off On svdhEDĂ©termine si les cookies de session doivent ĂŞtre supprimĂ©s des en-tĂŞtes HTTP entrants -SessionDBDDeleteLabel Ă©tiquette deletesession svdhELa requĂŞte SQL Ă  utiliser pour supprimer des sessions de la +SessionDBDDeleteLabel Ă©tiquette deletesession svdhELa requĂŞte SQL Ă  utiliser pour supprimer des sessions de la base de donnĂ©es -SessionDBDInsertLabel Ă©tiquette insertsession svdhELa requĂŞte SQL Ă  utiliser pour insĂ©rer des sessions dans la +SessionDBDInsertLabel Ă©tiquette insertsession svdhELa requĂŞte SQL Ă  utiliser pour insĂ©rer des sessions dans la base de donnĂ©es -SessionDBDPerUser On|Off Off svdhEActive une session propre Ă  un utilisateur -SessionDBDSelectLabel Ă©tiquette selectsession svdhELa requĂŞte SQL Ă  utiliser pour sĂ©lectionner des sessions +SessionDBDPerUser On|Off Off svdhEActive une session propre Ă  un utilisateur +SessionDBDSelectLabel Ă©tiquette selectsession svdhELa requĂŞte SQL Ă  utiliser pour sĂ©lectionner des sessions dans la base de donnĂ©es -SessionDBDUpdateLabel Ă©tiquette updatesession svdhELa requĂŞte SQL Ă  utiliser pour mettre Ă  jour des sessions +SessionDBDUpdateLabel Ă©tiquette updatesession svdhELa requĂŞte SQL Ă  utiliser pour mettre Ă  jour des sessions prĂ©existantes dans la base de donnĂ©es -SessionEnv On|Off Off svdhEDĂ©finit si le contenu de la session doit ĂŞtre enregistrĂ© +SessionEnv On|Off Off svdhEDĂ©finit si le contenu de la session doit ĂŞtre enregistrĂ© dans la variable d'environnement HTTP_SESSION -SessionExclude cheminsvdhEDĂ©finit les prĂ©fixes d'URLs pour lesquels une session sera +SessionExclude cheminsvdhEDĂ©finit les prĂ©fixes d'URLs pour lesquels une session sera ignorĂ©e -SessionExpiryUpdateInterval interval 0 (mise Ă  jour syst +svdhEDĂ©finit le nombre de secondes dont la durĂ©e d'expiration d'une +SessionExpiryUpdateInterval interval 0 (mise Ă  jour syst +svdhEDĂ©finit le nombre de secondes dont la durĂ©e d'expiration d'une session peut changer sans que cette session soit mise Ă  jour -SessionHeader en-tĂŞtesvdhEImportation des mises Ă  jour de session depuis l'en-tĂŞte de +SessionHeader en-tĂŞtesvdhEImportation des mises Ă  jour de session depuis l'en-tĂŞte de rĂ©ponse HTTP spĂ©cifiĂ© -SessionInclude cheminsvdhEDĂ©finit les prĂ©fixes d'URL pour lesquels une session est +SessionInclude cheminsvdhEDĂ©finit les prĂ©fixes d'URL pour lesquels une session est valide -SessionMaxAge durĂ©e de vie maximale 0 svdhEDĂ©finit une durĂ©e de vie maximale pour la session en +SessionMaxAge durĂ©e de vie maximale 0 svdhEDĂ©finit une durĂ©e de vie maximale pour la session en secondes -SetEnv var-env [valeur]svdhBDĂ©finit des variables d'environnement -SetEnvIf attribut +SetEnv var-env [valeur]svdhBDĂ©finit des variables d'environnement +SetEnvIf attribut regex [!]env-variable[=valeur] - [[!]env-variable[=valeur]] ...svdhBDĂ©finit des variables d'environnement en fonction des + [[!]env-variable[=valeur]] ...svdhBDĂ©finit des variables d'environnement en fonction des attributs de la requĂŞte -SetEnvIfExpr expr +SetEnvIfExpr expr [!]env-variable[=valeur] - [[!]env-variable[=valeur]] ...svdhBDĂ©finit des variables d'environnement en fonction d'une expression ap_expr -SetEnvIfNoCase attribut regex + [[!]env-variable[=valeur]] ...svdhBDĂ©finit des variables d'environnement en fonction d'une expression ap_expr +SetEnvIfNoCase attribut regex [!]env-variable[=valeur] - [[!]env-variable[=valeur]] ...svdhBDĂ©finit des variables d'environnement en fonction des + [[!]env-variable[=valeur]] ...svdhBDĂ©finit des variables d'environnement en fonction des attributs de la requĂŞte sans tenir compte de la casse -SetHandler handler-name|none|expressionsvdhCForce le traitement des fichiers spĂ©cifiĂ©s par un +SetHandler handler-name|none|expressionsvdhCForce le traitement des fichiers spĂ©cifiĂ©s par un gestionnaire particulier -SetInputFilter filtre[;filtre...]svdhCDĂ©finit les filtres par lesquels vont passer les requĂŞtes +SetInputFilter filtre[;filtre...]svdhCDĂ©finit les filtres par lesquels vont passer les requĂŞtes client et les donnĂ©es POST -SetOutputFilter filtre[;filtre...]svdhCDĂ©finit les filtres par lesquels vont passer les rĂ©ponses +SetOutputFilter filtre[;filtre...]svdhCDĂ©finit les filtres par lesquels vont passer les rĂ©ponses du serveur -SSIEndTag tag "-->" svBChaĂ®ne qui termine l'Ă©lĂ©ment include -SSIErrorMsg message "[an error occurred +svdhBMessage d'erreur affichĂ© lorsqu'une erreur SSI +SSIEndTag tag "-->" svBChaĂ®ne qui termine l'Ă©lĂ©ment include +SSIErrorMsg message "[an error occurred +svdhBMessage d'erreur affichĂ© lorsqu'une erreur SSI survient -SSIETag on|off off dhBDĂ©finit si des en-tĂŞtes ETags sont gĂ©nĂ©rĂ©s par le serveur. -SSILastModified on|off off dhBDĂ©finit si des en-tĂŞtes Last-Modified sont +SSIETag on|off off dhBDĂ©finit si des en-tĂŞtes ETags sont gĂ©nĂ©rĂ©s par le serveur. +SSILastModified on|off off dhBDĂ©finit si des en-tĂŞtes Last-Modified sont gĂ©nĂ©rĂ©s par le serveur. -SSILegacyExprParser on|off off dhBActive le mode de compatibilitĂ© pour les expressions +SSILegacyExprParser on|off off dhBActive le mode de compatibilitĂ© pour les expressions conditionnelles. -SSIStartTag tag "<!--#" svBChaĂ®ne qui marque le dĂ©but d'un Ă©lĂ©ment +SSIStartTag tag "<!--#" svBChaĂ®ne qui marque le dĂ©but d'un Ă©lĂ©ment include -SSITimeFormat chaĂ®ne de formatage "%A, %d-%b-%Y %H:%M +svdhBConfiguration du format d'affichage des dates -SSIUndefinedEcho chaĂ®ne "(none)" svdhBChaĂ®ne Ă  afficher lorsqu'on tente d'extraire le contenu +SSITimeFormat chaĂ®ne de formatage "%A, %d-%b-%Y %H:%M +svdhBConfiguration du format d'affichage des dates +SSIUndefinedEcho chaĂ®ne "(none)" svdhBChaĂ®ne Ă  afficher lorsqu'on tente d'extraire le contenu d'une variable non dĂ©finie -SSLCACertificateFile file-pathsvEFichier contenant une concatĂ©nation des certificats de CA +SSLCACertificateFile file-pathsvEFichier contenant une concatĂ©nation des certificats de CA codĂ©s en PEM pour l'authentification des clients -SSLCACertificatePath chemin-rĂ©pertoiresvERĂ©pertoire des certificats de CA codĂ©s en PEM pour +SSLCACertificatePath chemin-rĂ©pertoiresvERĂ©pertoire des certificats de CA codĂ©s en PEM pour l'authentification des clients -SSLCADNRequestFile file-pathsvEFichier contenant la concatĂ©nation des certificats de CA +SSLCADNRequestFile file-pathsvEFichier contenant la concatĂ©nation des certificats de CA codĂ©s en PEM pour la dĂ©finition de noms de CA acceptables -SSLCADNRequestPath chemin-rĂ©pertoiresvERĂ©pertoire contenant des fichiers de certificats de CA +SSLCADNRequestPath chemin-rĂ©pertoiresvERĂ©pertoire contenant des fichiers de certificats de CA codĂ©s en PEM pour la dĂ©finition de noms de CA acceptables -SSLCARevocationCheck chain|leaf|none [flags ...] none svEActive la vĂ©rification des rĂ©vocations basĂ©e sur les CRL -SSLCARevocationFile file-pathsvEFichier contenant la concatĂ©nation des CRLs des CA codĂ©s en +SSLCARevocationCheck chain|leaf|none [flags ...] none svEActive la vĂ©rification des rĂ©vocations basĂ©e sur les CRL +SSLCARevocationFile file-pathsvEFichier contenant la concatĂ©nation des CRLs des CA codĂ©s en PEM pour l'authentification des clients -SSLCARevocationPath chemin-rĂ©pertoiresvERĂ©pertoire des CRLs de CA codĂ©s en PEM pour +SSLCARevocationPath chemin-rĂ©pertoiresvERĂ©pertoire des CRLs de CA codĂ©s en PEM pour l'authentification des clients -SSLCertificateChainFile file-pathsvEFichier contenant les certificats de CA du serveur codĂ©s en +SSLCertificateChainFile file-pathsvEFichier contenant les certificats de CA du serveur codĂ©s en PEM -SSLCertificateFile file-path|certidsvEFichier de donnĂ©es contenant les informations de certificat X.509 du serveur +SSLCertificateFile file-path|certidsvEFichier de donnĂ©es contenant les informations de certificat X.509 du serveur codĂ©es au format PEM ou identificateur de jeton -SSLCertificateKeyFile file-path|keyidsvEFichier contenant la clĂ© privĂ©e du serveur codĂ©e en +SSLCertificateKeyFile file-path|keyidsvEFichier contenant la clĂ© privĂ©e du serveur codĂ©e en PEM -SSLCipherSuite [protocol] cipher-spec DEFAULT (dĂ©pend de +svdhEAlgorithmes de chiffrement disponibles pour la nĂ©gociation +SSLCipherSuite [protocol] cipher-spec DEFAULT (dĂ©pend de +svdhEAlgorithmes de chiffrement disponibles pour la nĂ©gociation au cours de l'initialisation de la connexion SSL -SSLCompression on|off off svEPermet d'activer la compression au niveau SSL -SSLCryptoDevice moteur builtin sEActive l'utilisation d'un accĂ©lĂ©rateur matĂ©riel de +SSLCompression on|off off svEPermet d'activer la compression au niveau SSL +SSLCryptoDevice moteur builtin sEActive l'utilisation d'un accĂ©lĂ©rateur matĂ©riel de chiffrement -SSLEngine on|off|optional off svEInterrupteur marche/arrĂŞt du moteur SSL -SSLFIPS on|off off sECoimmutateur du mode SSL FIPS -SSLHonorCipherOrder on|off off svEOption permettant de classer les algorithmes de chiffrement +SSLEngine on|off|optional off svEInterrupteur marche/arrĂŞt du moteur SSL +SSLFIPS on|off off sECoimmutateur du mode SSL FIPS +SSLHonorCipherOrder on|off off svEOption permettant de classer les algorithmes de chiffrement du serveur par ordre de prĂ©fĂ©rence -SSLInsecureRenegotiation on|off off svEOption permettant d'activer le support de la renĂ©gociation +SSLInsecureRenegotiation on|off off svEOption permettant d'activer le support de la renĂ©gociation non sĂ©curisĂ©e -SSLOCSPDefaultResponder urisvEDĂ©finit l'URI du rĂ©pondeur par dĂ©faut pour la validation +SSLOCSPDefaultResponder urisvEDĂ©finit l'URI du rĂ©pondeur par dĂ©faut pour la validation OCSP -SSLOCSPEnable on|leaf|off off svEActive la validation OCSP de la chaĂ®ne de certificats du +SSLOCSPEnable on|leaf|off off svEActive la validation OCSP de la chaĂ®ne de certificats du client -SSLOCSPNoverify on|off off svEEvite la vĂ©rification des certificats des rĂ©pondeurs OCSP -SSLOCSPOverrideResponder on|off off svEForce l'utilisation de l'URI du rĂ©pondeur par dĂ©faut pour +SSLOCSPNoverify on|off off svEEvite la vĂ©rification des certificats des rĂ©pondeurs OCSP +SSLOCSPOverrideResponder on|off off svEForce l'utilisation de l'URI du rĂ©pondeur par dĂ©faut pour la validation OCSP -SSLOCSPProxyURL urlsvEAdresse de mandataire Ă  utiliser pour les requĂŞtes OCSP -SSLOCSPResponderCertificateFile filesvEFournit un jeu de certificats de confiance du rĂ©pondeur OCSP avec +SSLOCSPProxyURL urlsvEAdresse de mandataire Ă  utiliser pour les requĂŞtes OCSP +SSLOCSPResponderCertificateFile filesvEFournit un jeu de certificats de confiance du rĂ©pondeur OCSP avec encodage PEM -SSLOCSPResponderTimeout secondes 10 svEDĂ©lai d'attente pour les requĂŞtes OCSP -SSLOCSPResponseMaxAge secondes -1 svEAge maximum autorisĂ© pour les rĂ©ponses OCSP -SSLOCSPResponseTimeSkew secondes 300 svEDĂ©rive temporelle maximale autorisĂ©e pour la validation des +SSLOCSPResponderTimeout secondes 10 svEDĂ©lai d'attente pour les requĂŞtes OCSP +SSLOCSPResponseMaxAge secondes -1 svEAge maximum autorisĂ© pour les rĂ©ponses OCSP +SSLOCSPResponseTimeSkew secondes 300 svEDĂ©rive temporelle maximale autorisĂ©e pour la validation des rĂ©ponses OCSP -SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries -SSLOpenSSLConfCmd commande valeursvEConfiguration des paramètres d'OpenSSL via son API SSL_CONF -SSLOptions [+|-]option ...svdhEConfigure diffĂ©rentes options d'exĂ©cution du moteur SSL -SSLPassPhraseDialog type builtin sEMĂ©thode utilisĂ©e pour entrer le mot de passe pour les clĂ©s +SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries +SSLOpenSSLConfCmd commande valeursvEConfiguration des paramètres d'OpenSSL via son API SSL_CONF +SSLOptions [+|-]option ...svdhEConfigure diffĂ©rentes options d'exĂ©cution du moteur SSL +SSLPassPhraseDialog type builtin sEMĂ©thode utilisĂ©e pour entrer le mot de passe pour les clĂ©s privĂ©es chiffrĂ©es -SSLProtocol [+|-]protocole ... all -SSLv3 (jusqu'Ă  +svEIndique les versions du protocole SSL/TLS +SSLProtocol [+|-]protocole ... all -SSLv3 (jusqu'Ă  +svEIndique les versions du protocole SSL/TLS disponibles -SSLProxyCACertificateFile file-pathsvpEFichier contenant la concatĂ©nation des certificats de CA +SSLProxyCACertificateFile file-pathsvpEFichier contenant la concatĂ©nation des certificats de CA codĂ©s en PEM pour l'authentification des serveurs distants -SSLProxyCACertificatePath chemin-rĂ©pertoiresvpERĂ©pertoire des certificats de CA codĂ©s en PEM pour +SSLProxyCACertificatePath chemin-rĂ©pertoiresvpERĂ©pertoire des certificats de CA codĂ©s en PEM pour l'authentification des serveurs distants -SSLProxyCARevocationCheck chain|leaf|none none svpEActive la vĂ©rification des rĂ©vocations basĂ©e sur les CRLs +SSLProxyCARevocationCheck chain|leaf|none none svpEActive la vĂ©rification des rĂ©vocations basĂ©e sur les CRLs pour l'authentification du serveur distant -SSLProxyCARevocationFile file-pathsvpEFichier contenant la concatĂ©nation des CRLs de CA codĂ©s en +SSLProxyCARevocationFile file-pathsvpEFichier contenant la concatĂ©nation des CRLs de CA codĂ©s en PEM pour l'authentification des serveurs distants -SSLProxyCARevocationPath chemin-rĂ©pertoiresvpERĂ©pertoire des CRLs de CA codĂ©s en PEM pour +SSLProxyCARevocationPath chemin-rĂ©pertoiresvpERĂ©pertoire des CRLs de CA codĂ©s en PEM pour l'authentification des serveurs distants -SSLProxyCheckPeerCN on|off on svpEConfiguration de la vĂ©rification du champ CN du certificat +SSLProxyCheckPeerCN on|off on svpEConfiguration de la vĂ©rification du champ CN du certificat du serveur distant -SSLProxyCheckPeerExpire on|off on svpEConfiguration de la vĂ©rification de l'expiration du +SSLProxyCheckPeerExpire on|off on svpEConfiguration de la vĂ©rification de l'expiration du certificat du serveur distant -SSLProxyCheckPeerName on|off on svpEConfigure la vĂ©rification du nom d'hĂ´te dans les +SSLProxyCheckPeerName on|off on svpEConfigure la vĂ©rification du nom d'hĂ´te dans les certificats serveur distants -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svpEAlgorithmes de chiffrement disponibles pour la nĂ©gociation +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svpEAlgorithmes de chiffrement disponibles pour la nĂ©gociation lors de l'initialisation d'une connexion SSL de mandataire -SSLProxyEngine on|off off svpEInterrupteur marche/arrĂŞt du moteur de mandataire +SSLProxyEngine on|off off svpEInterrupteur marche/arrĂŞt du moteur de mandataire SSL -SSLProxyMachineCertificateChainFile nom-fichiersvpEFichier de certificats de CA encodĂ©s PEM concatĂ©nĂ©s permettant au +SSLProxyMachineCertificateChainFile nom-fichiersvpEFichier de certificats de CA encodĂ©s PEM concatĂ©nĂ©s permettant au mandataire de choisir un certificat -SSLProxyMachineCertificateFile chemin-fichiersvpEFichier contenant la concatĂ©nation des clĂ©s et certificats +SSLProxyMachineCertificateFile chemin-fichiersvpEFichier contenant la concatĂ©nation des clĂ©s et certificats clients codĂ©s en PEM que le mandataire doit utiliser -SSLProxyMachineCertificatePath chemin-rĂ©pertoiresvpERĂ©pertoire des clĂ©s et certificats clients codĂ©s en PEM que +SSLProxyMachineCertificatePath chemin-rĂ©pertoiresvpERĂ©pertoire des clĂ©s et certificats clients codĂ©s en PEM que le mandataire doit utiliser -SSLProxyProtocol [+|-]protocole ... all -SSLv3 (jusqu'Ă  +svpEDĂ©finit les protocoles SSL disponibles pour la fonction de +SSLProxyProtocol [+|-]protocole ... all -SSLv3 (jusqu'Ă  +svpEDĂ©finit les protocoles SSL disponibles pour la fonction de mandataire -SSLProxyVerify niveau none svpENiveau de vĂ©rification du certificat du serveur +SSLProxyVerify niveau none svpENiveau de vĂ©rification du certificat du serveur distant -SSLProxyVerifyDepth niveau 1 svpENiveau de profondeur maximum dans les certificats de CA +SSLProxyVerifyDepth niveau 1 svpENiveau de profondeur maximum dans les certificats de CA lors de la vĂ©rification du certificat du serveur distant -SSLRandomSeed contexte source -[nombre]sESource de dĂ©clenchement du GĂ©nĂ©rateur de Nombres +SSLRandomSeed contexte source +[nombre]sESource de dĂ©clenchement du GĂ©nĂ©rateur de Nombres Pseudo-AlĂ©atoires (PRNG) -SSLRenegBufferSize taille 131072 dhEDĂ©finit la taille du tampon de renĂ©gociation +SSLRenegBufferSize taille 131072 dhEDĂ©finit la taille du tampon de renĂ©gociation SSL -SSLRequire expressiondhEN'autorise l'accès que lorsqu'une expression boolĂ©enne +SSLRequire expressiondhEN'autorise l'accès que lorsqu'une expression boolĂ©enne complexe et arbitraire est vraie -SSLRequireSSLdhEInterdit l'accès lorsque la requĂŞte HTTP n'utilise pas +SSLRequireSSLdhEInterdit l'accès lorsque la requĂŞte HTTP n'utilise pas SSL -SSLSessionCache type none sEType du cache de session SSL global et +SSLSessionCache type none sEType du cache de session SSL global et inter-processus -SSLSessionCacheTimeout secondes 300 svENombre de secondes avant l'expiration d'une session SSL +SSLSessionCacheTimeout secondes 300 svENombre de secondes avant l'expiration d'une session SSL dans le cache de sessions -SSLSessionTicketKeyFile file-pathsvEClĂ© de chiffrement/dĂ©chiffrement permanente pour les +SSLSessionTicketKeyFile file-pathsvEClĂ© de chiffrement/dĂ©chiffrement permanente pour les tickets de session TLS -SSLSessionTickets on|off on svEActive ou dĂ©sactive les tickets de session TLS -SSLSRPUnknownUserSeed secret-stringsvESource d'alĂ©a pour utilisateur SRP inconnu -SSLSRPVerifierFile file-pathsvEChemin du fichier de vĂ©rification SRP -SSLStaplingCache typesEConfiguration du cache pour l'agrafage OCSP -SSLStaplingErrorCacheTimeout secondes 600 svEDurĂ©e de vie des rĂ©ponses invalides dans le cache pour +SSLSessionTickets on|off on svEActive ou dĂ©sactive les tickets de session TLS +SSLSRPUnknownUserSeed secret-stringsvESource d'alĂ©a pour utilisateur SRP inconnu +SSLSRPVerifierFile file-pathsvEChemin du fichier de vĂ©rification SRP +SSLStaplingCache typesEConfiguration du cache pour l'agrafage OCSP +SSLStaplingErrorCacheTimeout secondes 600 svEDurĂ©e de vie des rĂ©ponses invalides dans le cache pour agrafage OCSP -SSLStaplingFakeTryLater on|off on svEGĂ©nère une rĂ©ponse "tryLater" pour les requĂŞtes OCSP Ă©chouĂ©es -SSLStaplingForceURL urisvERemplace l'URI du serveur OCSP spĂ©cifiĂ© dans l'extension +SSLStaplingFakeTryLater on|off on svEGĂ©nère une rĂ©ponse "tryLater" pour les requĂŞtes OCSP Ă©chouĂ©es +SSLStaplingForceURL urisvERemplace l'URI du serveur OCSP spĂ©cifiĂ© dans l'extension AIA du certificat -SSLStaplingResponderTimeout secondes 10 svETemps d'attente maximum pour les requĂŞtes vers les serveurs +SSLStaplingResponderTimeout secondes 10 svETemps d'attente maximum pour les requĂŞtes vers les serveurs OCSP -SSLStaplingResponseMaxAge secondes -1 svEAge maximum autorisĂ© des rĂ©ponses OCSP incluses dans la +SSLStaplingResponseMaxAge secondes -1 svEAge maximum autorisĂ© des rĂ©ponses OCSP incluses dans la nĂ©gociation TLS -SSLStaplingResponseTimeSkew secondes 300 svEDurĂ©e de vie maximale autorisĂ©e des rĂ©ponses OCSP incluses dans la +SSLStaplingResponseTimeSkew secondes 300 svEDurĂ©e de vie maximale autorisĂ©e des rĂ©ponses OCSP incluses dans la nĂ©gociation TLS -SSLStaplingReturnResponderErrors on|off on svETransmet au client les erreurs survenues lors des requĂŞtes +SSLStaplingReturnResponderErrors on|off on svETransmet au client les erreurs survenues lors des requĂŞtes OCSP -SSLStaplingStandardCacheTimeout secondes 3600 svEDurĂ©e de vie des rĂ©ponses OCSP dans le cache -SSLStrictSNIVHostCheck on|off off svEContrĂ´le de l'accès des clients non-SNI Ă  un serveur virtuel Ă  +SSLStaplingStandardCacheTimeout secondes 3600 svEDurĂ©e de vie des rĂ©ponses OCSP dans le cache +SSLStrictSNIVHostCheck on|off off svEContrĂ´le de l'accès des clients non-SNI Ă  un serveur virtuel Ă  base de nom. -SSLUserName nom-varsdhENom de la variable servant Ă  dĂ©terminer le nom de +SSLUserName nom-varsdhENom de la variable servant Ă  dĂ©terminer le nom de l'utilisateur -SSLUseStapling on|off off svEActive l'ajout des rĂ©ponses OCSP Ă  la nĂ©gociation TLS -SSLVerifyClient niveau none svdhENiveau de vĂ©rification du certificat client -SSLVerifyDepth nombre 1 svdhEProfondeur maximale des certificats de CA pour la +SSLUseStapling on|off off svEActive l'ajout des rĂ©ponses OCSP Ă  la nĂ©gociation TLS +SSLVerifyClient niveau none svdhENiveau de vĂ©rification du certificat client +SSLVerifyDepth nombre 1 svdhEProfondeur maximale des certificats de CA pour la vĂ©rification des certificats clients -StartServers nombresMNombre de processus enfants du serveur crĂ©Ă©s au +StartServers nombresMNombre de processus enfants du serveur crĂ©Ă©s au dĂ©marrage -StartThreads nombresMNombre de threads crĂ©Ă©s au dĂ©marrage -StrictHostCheck ON|OFF OFF svCDĂ©termine si le nom d'hĂ´te contenu dans une requĂŞte doit ĂŞtre +StartThreads nombresMNombre de threads crĂ©Ă©s au dĂ©marrage +StrictHostCheck ON|OFF OFF svCDĂ©termine si le nom d'hĂ´te contenu dans une requĂŞte doit ĂŞtre explicitement spĂ©cifiĂ© au niveau du serveur virtuel qui a pris en compte cette dernière. -Substitute s/modèle/substitution/[infq]dhEModèle de substition dans le contenu de la +Substitute s/modèle/substitution/[infq]dhEModèle de substition dans le contenu de la rĂ©ponse -SubstituteInheritBefore on|off on dhEModifie l'ordre de fusion des modèles hĂ©ritĂ©s -SubstituteMaxLineLength octets(b|B|k|K|m|M|g|G) 1m dhEDĂ©finit la longueur de ligne maximale -Suexec On|OffsBActive ou dĂ©sactive la fonctionnalitĂ© suEXEC -SuexecUserGroup Utilisateur GroupesvEL'utilisateur et le groupe sous lesquels les programmes CGI +SubstituteInheritBefore on|off on dhEModifie l'ordre de fusion des modèles hĂ©ritĂ©s +SubstituteMaxLineLength octets(b|B|k|K|m|M|g|G) 1m dhEDĂ©finit la longueur de ligne maximale +Suexec On|OffsBActive ou dĂ©sactive la fonctionnalitĂ© suEXEC +SuexecUserGroup Utilisateur GroupesvEL'utilisateur et le groupe sous lesquels les programmes CGI doivent s'exĂ©cuter -ThreadLimit nombresMLe nombre de threads maximum que l'on peut dĂ©finir par +ThreadLimit nombresMLe nombre de threads maximum que l'on peut dĂ©finir par processus enfant -ThreadsPerChild nombresMNombre de threads crĂ©Ă©s par chaque processus +ThreadsPerChild nombresMNombre de threads crĂ©Ă©s par chaque processus enfant -ThreadStackSize taillesMLa taille en octets de la pile qu'utilisent les threads qui +ThreadStackSize taillesMLa taille en octets de la pile qu'utilisent les threads qui traitent les connexions clients -TimeOut secondes 60 svCTemps pendant lequel le serveur va attendre certains +TimeOut secondes 60 svCTemps pendant lequel le serveur va attendre certains Ă©vènements avant de considĂ©rer qu'une requĂŞte a Ă©chouĂ© +TLSCertificate cert_file [key_file]svXadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)svXdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)svXdefines ciphers that are not to be used. +TLSEngine [address:]portsXdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offsvX- +TLSOptions [+|-]optionsvdhXenables SSL variables for requests. +TLSProtocol version+svXspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemsvpXsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)svpXdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)svpXdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offsvpXenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]svpXadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+svpXspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsXspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsXenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on svCDĂ©termine le comportement des requĂŞtes TRACE TransferLog fichier|pipesvBSpĂ©cifie l'emplacement d'un fichier journal diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.ja.utf8 apache2-2.4.52/docs/manual/mod/quickreference.html.ja.utf8 --- apache2-2.4.51/docs/manual/mod/quickreference.html.ja.utf8 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.ja.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -674,409 +674,425 @@ MDChallengeDns01 path-to-commandsX- MDContactEmail addresssX- MDDriveMode always|auto|manual auto sXformer name of MDRenewMode. -MDHttpProxy urlsXDefine a proxy for outgoing connections. -MDMember hostnamesXAdditional hostname for the managed domain. -MDMembers auto|manual auto sXControl if the alias domain names are automatically added. -MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains -MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. -MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. -MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. -MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. -MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. -MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. -MDRenewWindow duration 33% sXControl when a certificate will be renewed. -MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. -MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. -MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. -MDStapling on|off off sXEnable stapling for all or a particular MDomain. -MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. -MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. -MDStoreDir path md sXPath on the local file system to store the Managed Domains data. -MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. -MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections -MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. +MDExternalAccountBinding key-id hmac-64 | none | file none sX- +MDHttpProxy urlsXDefine a proxy for outgoing connections. +MDMember hostnamesXAdditional hostname for the managed domain. +MDMembers auto|manual auto sXControl if the alias domain names are automatically added. +MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains +MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. +MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. +MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. +MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. +MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. +MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. +MDRenewWindow duration 33% sXControl when a certificate will be renewed. +MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. +MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. +MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. +MDStapling on|off off sXEnable stapling for all or a particular MDomain. +MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. +MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. +MDStoreDir path md sXPath on the local file system to store the Managed Domains data. +MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. +MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections +MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. -MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers -MetaDir directory .web svdhEName of the directory to find CERN-style meta information +MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers +MetaDir directory .web svdhEName of the directory to find CERN-style meta information files -MetaFiles on|off off svdhEActivates CERN meta-file processing -MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style +MetaFiles on|off off svdhEActivates CERN meta-file processing +MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style meta information -MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents +MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents using the specified magic file -MinSpareServers number 5 sMアイă‰ă«ăŞĺ­ă‚µăĽăă—ă­ă‚»ă‚ąă®ćś€ĺ°Źĺ€‹ć•° -MinSpareThreads numbersMăŞă‚Żă‚¨ă‚ąăă«ĺżśç­”ă™ă‚‹ă“ă¨ă®ă§ăŤă‚‹ +MinSpareServers number 5 sMアイă‰ă«ăŞĺ­ă‚µăĽăă—ă­ă‚»ă‚ąă®ćś€ĺ°Źĺ€‹ć•° +MinSpareThreads numbersMăŞă‚Żă‚¨ă‚ąăă«ĺżśç­”ă™ă‚‹ă“ă¨ă®ă§ăŤă‚‹ アイă‰ă«ă‚ąă¬ăă‰ć•°ă®ćś€ĺ°Źć•° -MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time -ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate -ModMimeUsePathInfo On|Off Off dpath_info ă‚łăłăťăĽăŤăłăă‚’ă•ă‚ˇă‚¤ă«ĺŤă®ä¸€é¨ă¨ă—ă¦ć‰±ă†ă‚ă†ă« +MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time +ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate +ModMimeUsePathInfo On|Off Off dpath_info ă‚łăłăťăĽăŤăłăă‚’ă•ă‚ˇă‚¤ă«ĺŤă®ä¸€é¨ă¨ă—ă¦ć‰±ă†ă‚ă†ă« mod_mime ă«é€šçźĄă™ă‚‹ -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly svdhMultiViews ă§ă®ăžăăăłă‚°ă®ć¤śç´˘ă«ĺ«ăľă›ă‚‹ +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly svdhMultiViews ă§ă®ăžăăăłă‚°ă®ć¤śç´˘ă«ĺ«ăľă›ă‚‹ ă•ă‚ˇă‚¤ă«ă®ă‚żă‚¤ă—を指定ă™ă‚‹ -Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all +Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all or specified mutexes -NameVirtualHost addr[:port]sCĺŤĺ‰Ťă™ăĽă‚ąă®ăăĽăăŁă«ă›ă‚ąăă®ăźă‚ă® IP アă‰ă¬ă‚ąă‚’指定 -NoProxy host [host] ...svE直接接続ă™ă‚‹ ă›ă‚ąăă€ă‰ăˇă‚¤ăłă€ăŤăăăŻăĽă‚Ż -NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates -NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request -Options - [+|-]option [[+|-]option] ... All svdhCă‡ă‚Łă¬ă‚ŻăăŞă«ĺŻľă—ă¦ä˝żç”¨ĺŹŻč˝ăŞć©źč˝ă‚’設定ă™ă‚‹ - Order ordering Deny,Allow dhEă‡ă•ă‚©ă«ăă®ă‚˘ă‚Żă‚»ă‚ąĺŹŻč˝ăŞçŠ¶ć…‹ă¨ă€Allow 㨠+NameVirtualHost addr[:port]sCĺŤĺ‰Ťă™ăĽă‚ąă®ăăĽăăŁă«ă›ă‚ąăă®ăźă‚ă® IP アă‰ă¬ă‚ąă‚’指定 +NoProxy host [host] ...svE直接接続ă™ă‚‹ ă›ă‚ąăă€ă‰ăˇă‚¤ăłă€ăŤăăăŻăĽă‚Ż +NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates +NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request +Options + [+|-]option [[+|-]option] ... All svdhCă‡ă‚Łă¬ă‚ŻăăŞă«ĺŻľă—ă¦ä˝żç”¨ĺŹŻč˝ăŞć©źč˝ă‚’設定ă™ă‚‹ + Order ordering Deny,Allow dhEă‡ă•ă‚©ă«ăă®ă‚˘ă‚Żă‚»ă‚ąĺŹŻč˝ăŞçŠ¶ć…‹ă¨ă€Allow 㨠Deny ăŚč©•äľˇă•ă‚Śă‚‹é †ç•Şă‚’ĺ¶ĺľˇă™ă‚‹ -OutputSed sed-commanddhXSed command for filtering response content -PassEnv env-variable [env-variable] -...svdhBシェă«ă‹ă‚‰ă®ç’°ĺ˘ĺ¤‰ć•°ă‚’渡㙠-PidFile filename logs/httpd.pid sMă‡ăĽă˘ăłă®ă—ă­ă‚»ă‚ą ID +OutputSed sed-commanddhXSed command for filtering response content +PassEnv env-variable [env-variable] +...svdhBシェă«ă‹ă‚‰ă®ç’°ĺ˘ĺ¤‰ć•°ă‚’渡㙠+PidFile filename logs/httpd.pid sMă‡ăĽă˘ăłă®ă—ă­ă‚»ă‚ą ID をサăĽăăŚč¨éŚ˛ă™ă‚‹ăźă‚ă®ă•ă‚ˇă‚¤ă« -PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against +PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against malicious privileges-aware code. -Protocol protocolsvCProtocol for a listening socket -ProtocolEcho On|Off Off svXエコăĽă‚µăĽăă®ćś‰ĺŠąç„ˇĺŠąă‚’設定ă—ăľă™ă€‚ -Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host -ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation -<Proxy wildcard-url> ...</Proxy>svEă—ă­ă‚­ă‚·ă•ă‚Śă‚‹ăŞă‚˝ăĽă‚ąă«é©ç”¨ă•ă‚Śă‚‹ă‚łăłă†ăŠ -Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server -ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers -ProxyBadHeader IsError|Ignore|StartBody IsError svEĺżśç­”ă«ăŠă‹ă—ăŞăăă€ăŚă‚ă‚‹ĺ ´ĺă®ć‰±ă„方を決ă‚ă‚‹ -ProxyBlock *|word|host|domain -[word|host|domain] ...svEă—ă­ă‚­ă‚·ćŽĄç¶šă‚’ç¦ć­˘ă™ă‚‹čŞžĺŹĄă€ă›ă‚ąăĺŤă€ă‰ăˇă‚¤ăłă‚’指定ă™ă‚‹ -ProxyDomain DomainsvEă—ă­ă‚­ă‚·ă•ă‚ŚăźăŞă‚Żă‚¨ă‚ąăă®ă‡ă•ă‚©ă«ăă®ă‰ăˇă‚¤ăłĺŤ -ProxyErrorOverride On|Off Off svEă—ă­ă‚­ă‚·ă•ă‚Śăźă‚łăłă†ăłă„ă®ă‚¨ă©ăĽăšăĽă‚¸ă‚’上書ăŤă™ă‚‹ -ProxyExpressDBMFile pathnamesvEPathname to DBM file. -ProxyExpressDBMType type default svEDBM type of file. -ProxyExpressEnable on|off off svEEnable the module functionality. -ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application -ProxyFCGISetEnvIf conditional-expression +Protocol protocolsvCProtocol for a listening socket +ProtocolEcho On|Off Off svXエコăĽă‚µăĽăă®ćś‰ĺŠąç„ˇĺŠąă‚’設定ă—ăľă™ă€‚ +Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host +ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation +<Proxy wildcard-url> ...</Proxy>svEă—ă­ă‚­ă‚·ă•ă‚Śă‚‹ăŞă‚˝ăĽă‚ąă«é©ç”¨ă•ă‚Śă‚‹ă‚łăłă†ăŠ +Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server +ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers +ProxyBadHeader IsError|Ignore|StartBody IsError svEĺżśç­”ă«ăŠă‹ă—ăŞăăă€ăŚă‚ă‚‹ĺ ´ĺă®ć‰±ă„方を決ă‚ă‚‹ +ProxyBlock *|word|host|domain +[word|host|domain] ...svEă—ă­ă‚­ă‚·ćŽĄç¶šă‚’ç¦ć­˘ă™ă‚‹čŞžĺŹĄă€ă›ă‚ąăĺŤă€ă‰ăˇă‚¤ăłă‚’指定ă™ă‚‹ +ProxyDomain DomainsvEă—ă­ă‚­ă‚·ă•ă‚ŚăźăŞă‚Żă‚¨ă‚ąăă®ă‡ă•ă‚©ă«ăă®ă‰ăˇă‚¤ăłĺŤ +ProxyErrorOverride On|Off Off svEă—ă­ă‚­ă‚·ă•ă‚Śăźă‚łăłă†ăłă„ă®ă‚¨ă©ăĽăšăĽă‚¸ă‚’上書ăŤă™ă‚‹ +ProxyExpressDBMFile pathnamesvEPathname to DBM file. +ProxyExpressDBMType type default svEDBM type of file. +ProxyExpressEnable on|off off svEEnable the module functionality. +ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up -ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings -ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server -ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing -ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response -ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters -ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers -ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and + [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up +ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings +ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server +ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing +ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response +ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters +ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers +ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and stylesheets. -ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. -ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. -ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. -ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, +ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. +ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. +ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. +ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, and scripting events. -ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. -ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of +ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. +ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of ProxyHTMLURLMap rules. -ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. -ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML +ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. +ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML <head> sections. -ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. -ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links -ProxyIOBufferSize bytes 8192 svE内é¨ă‡ăĽă‚żă‚ąă«ăĽă—ăăăăă•ă‚ˇă®ă‚µă‚¤ă‚şă‚’決定ă™ă‚‹ -<ProxyMatch regex> ...</ProxyMatch>svE正規表現ă§ă®ăžăăă«ă‚ă‚‹ă—ă­ă‚­ă‚·ăŞă‚˝ăĽă‚ąç”¨ă®ă‡ă‚Łă¬ă‚Żă†ă‚Łă–ă‚łăłă†ăŠ -ProxyMaxForwards number 10 svEăŞă‚Żă‚¨ă‚ąăăŚă•ă‚©ăŻăĽă‰ă•ă‚Śă‚‹ă—ă­ă‚­ă‚·ă®ćś€ĺ¤§ć•° -ProxyPass [path] !|url [key=value key=value ...]]svdEăŞă˘ăĽăサăĽăă‚’ă­ăĽă‚«ă«ă‚µăĽăă® URL ç©şé–“ă«ăžăă—ă™ă‚‹ -ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server -svdEEnable Environment Variable interpolation in Reverse Proxy configurations -svdEMaps remote servers into the local server URL-space using regular expressions -ProxyPassReverse [path] urlsvdEăŞăăĽă‚ąă—ă­ă‚­ă‚·ă•ă‚Śăźă‚µăĽăă‹ă‚‰é€ă‚‰ă‚Śăź HTTP ĺżśç­”ăăă€ă® +ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. +ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links +ProxyIOBufferSize bytes 8192 svE内é¨ă‡ăĽă‚żă‚ąă«ăĽă—ăăăăă•ă‚ˇă®ă‚µă‚¤ă‚şă‚’決定ă™ă‚‹ +<ProxyMatch regex> ...</ProxyMatch>svE正規表現ă§ă®ăžăăă«ă‚ă‚‹ă—ă­ă‚­ă‚·ăŞă‚˝ăĽă‚ąç”¨ă®ă‡ă‚Łă¬ă‚Żă†ă‚Łă–ă‚łăłă†ăŠ +ProxyMaxForwards number 10 svEăŞă‚Żă‚¨ă‚ąăăŚă•ă‚©ăŻăĽă‰ă•ă‚Śă‚‹ă—ă­ă‚­ă‚·ă®ćś€ĺ¤§ć•° +ProxyPass [path] !|url [key=value key=value ...]]svdEăŞă˘ăĽăサăĽăă‚’ă­ăĽă‚«ă«ă‚µăĽăă® URL ç©şé–“ă«ăžăă—ă™ă‚‹ +ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server +svdEEnable Environment Variable interpolation in Reverse Proxy configurations +svdEMaps remote servers into the local server URL-space using regular expressions +ProxyPassReverse [path] urlsvdEăŞăăĽă‚ąă—ă­ă‚­ă‚·ă•ă‚Śăźă‚µăĽăă‹ă‚‰é€ă‚‰ă‚Śăź HTTP ĺżśç­”ăăă€ă® URL を調整ă™ă‚‹ -ProxyPassReverseCookieDomain internal-domain public-domainsvdEăŞăăĽă‚ąă—ă­ă‚­ă‚·ă‚µăĽăă‹ă‚‰ă® Set-Cookie ăăă€ă® Domain 文字ĺ—ă‚’ +ProxyPassReverseCookieDomain internal-domain public-domainsvdEăŞăăĽă‚ąă—ă­ă‚­ă‚·ă‚µăĽăă‹ă‚‰ă® Set-Cookie ăăă€ă® Domain 文字ĺ—ă‚’ 調整ă™ă‚‹ -ProxyPassReverseCookiePath internal-path public-pathsvdEReverse ă—ă­ă‚­ă‚·ă‚µăĽăă‹ă‚‰ă® Set-Cookie ăăă€ă® Path 文字ĺ—ă‚’ +ProxyPassReverseCookiePath internal-path public-pathsvdEReverse ă—ă­ă‚­ă‚·ă‚µăĽăă‹ă‚‰ă® Set-Cookie ăăă€ă® Path 文字ĺ—ă‚’ 調整ă™ă‚‹ -ProxyPreserveHost On|Off Off svEă—ă­ă‚­ă‚·ăŞă‚Żă‚¨ă‚ąăă«ă€ĺŹ—ă‘ä»ă‘ăź Host HTTP ăăă€ă‚’使ㆠ-ProxyReceiveBufferSize bytes 0 svEă—ă­ă‚­ă‚·ă•ă‚Śă‚‹ HTTP 㨠FTP 接続ă®ăźă‚ă®ăŤăăăŻăĽă‚Żăăă•ă‚ˇă‚µă‚¤ă‚ş -ProxyRemote match remote-serversvE特定ă®ăŞă‚Żă‚¨ă‚ąăを扱ă†ć™‚ă«ä˝żă‚Źă‚Śă‚‹ăŞă˘ăĽăă—ă­ă‚­ă‚·ă‚’指定ă™ă‚‹ -ProxyRemoteMatch regex remote-serversvE正規表現ă§ă®ăžăăă«ă‚ă‚‹ăŞă‚Żă‚¨ă‚ąăを扱ă†ăŞă˘ăĽăă—ă­ă‚­ă‚·ă®ćŚ‡ĺ®š -ProxyRequests On|Off Off svEă•ă‚©ăŻăĽă‰ (標準ă®) ă—ă­ă‚­ă‚·ăŞă‚Żă‚¨ă‚ąăを有効ă«ă™ă‚‹ -ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the +ProxyPreserveHost On|Off Off svEă—ă­ă‚­ă‚·ăŞă‚Żă‚¨ă‚ąăă«ă€ĺŹ—ă‘ä»ă‘ăź Host HTTP ăăă€ă‚’使ㆠ+ProxyReceiveBufferSize bytes 0 svEă—ă­ă‚­ă‚·ă•ă‚Śă‚‹ HTTP 㨠FTP 接続ă®ăźă‚ă®ăŤăăăŻăĽă‚Żăăă•ă‚ˇă‚µă‚¤ă‚ş +ProxyRemote match remote-serversvE特定ă®ăŞă‚Żă‚¨ă‚ąăを扱ă†ć™‚ă«ä˝żă‚Źă‚Śă‚‹ăŞă˘ăĽăă—ă­ă‚­ă‚·ă‚’指定ă™ă‚‹ +ProxyRemoteMatch regex remote-serversvE正規表現ă§ă®ăžăăă«ă‚ă‚‹ăŞă‚Żă‚¨ă‚ąăを扱ă†ăŞă˘ăĽăă—ă­ă‚­ă‚·ă®ćŚ‡ĺ®š +ProxyRequests On|Off Off svEă•ă‚©ăŻăĽă‰ (標準ă®) ă—ă­ă‚­ă‚·ăŞă‚Żă‚¨ă‚ąăを有効ă«ă™ă‚‹ +ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the backend -ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response +ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response header -dESet various Proxy balancer or member parameters -ProxySourceAddress addresssvESet local IP address for outgoing proxy connections -svEShow Proxy LoadBalancer status in mod_status -ProxyTimeout seconds 300 svEă—ă­ă‚­ă‚·ă•ă‚ŚăźăŞă‚Żă‚¨ă‚ąăă®ăŤăăăŻăĽă‚Żă‚żă‚¤ă ă‚˘ă‚¦ă -ProxyVia On|Off|Full|Block Off svEă—ă­ă‚­ă‚·ă•ă‚ŚăźăŞă‚Żă‚¨ă‚ąăă® Via HTTP ĺżśç­”ăă〠+dESet various Proxy balancer or member parameters +ProxySourceAddress addresssvESet local IP address for outgoing proxy connections +svEShow Proxy LoadBalancer status in mod_status +ProxyTimeout seconds 300 svEă—ă­ă‚­ă‚·ă•ă‚ŚăźăŞă‚Żă‚¨ă‚ąăă®ăŤăăăŻăĽă‚Żă‚żă‚¤ă ă‚˘ă‚¦ă +ProxyVia On|Off|Full|Block Off svEă—ă­ă‚­ă‚·ă•ă‚ŚăźăŞă‚Żă‚¨ă‚ąăă® Via HTTP ĺżśç­”ăă〠ă«ă‚ă‚ŠćŹäľ›ă•ă‚Śă‚‹ć…ĺ ± -ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request -QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is +ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request +QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is fully qualified -ReadBufferSize bytes 8192 svdCSize of the buffers used to read data -ReadmeName filenamesvdhBイăłă‡ăクス一覧ă®ćś€ĺľŚă«ćŚżĺ…Ąă•ă‚Śă‚‹ă•ă‚ˇă‚¤ă«ă®ĺŤĺ‰Ť -ReceiveBufferSize bytes 0 sMTCP 受信ăăă•ă‚ˇă‚µă‚¤ă‚ş -Redirect [status] URL-path -URLsvdhBă‚Żă©ă‚¤ă‚˘ăłăăŚé•ă† URL を取得ă™ă‚‹ă‚ă†ă«ĺ¤–é¨ă¸ă®ăŞă€ă‚¤ă¬ă‚Żăă‚’ +ReadBufferSize bytes 8192 svdCSize of the buffers used to read data +ReadmeName filenamesvdhBイăłă‡ăクス一覧ă®ćś€ĺľŚă«ćŚżĺ…Ąă•ă‚Śă‚‹ă•ă‚ˇă‚¤ă«ă®ĺŤĺ‰Ť +ReceiveBufferSize bytes 0 sMTCP 受信ăăă•ă‚ˇă‚µă‚¤ă‚ş +Redirect [status] URL-path +URLsvdhBă‚Żă©ă‚¤ă‚˘ăłăăŚé•ă† URL を取得ă™ă‚‹ă‚ă†ă«ĺ¤–é¨ă¸ă®ăŞă€ă‚¤ă¬ă‚Żăă‚’ é€ă‚‹ -RedirectMatch [status] regex -URLsvdhB現在㮠URL ă¸ă®ć­Łč¦Źčˇ¨çŹľă®ăžăăă«ă‚ă‚Š +RedirectMatch [status] regex +URLsvdhB現在㮠URL ă¸ă®ć­Łč¦Źčˇ¨çŹľă®ăžăăă«ă‚ă‚Š 外é¨ă¸ă®ăŞă€ă‚¤ă¬ă‚Żăă‚’é€ă‚‹ -RedirectPermanent URL-path URLsvdhBă‚Żă©ă‚¤ă‚˘ăłăăŚé•ă† URL を取得ă™ă‚‹ă‚ă†ă«ĺ¤–é¨ă¸ă®ć°¸äą…的㪠+RedirectPermanent URL-path URLsvdhBă‚Żă©ă‚¤ă‚˘ăłăăŚé•ă† URL を取得ă™ă‚‹ă‚ă†ă«ĺ¤–é¨ă¸ă®ć°¸äą…的㪠ăŞă€ă‚¤ă¬ă‚Żăă‚’é€ă‚‹ -RedirectTemp URL-path URLsvdhBă‚Żă©ă‚¤ă‚˘ăłăăŚé•ă† URL を取得ă™ă‚‹ă‚ă†ă«ĺ¤–é¨ă¸ă®ä¸€ć™‚的㪠+RedirectTemp URL-path URLsvdhBă‚Żă©ă‚¤ă‚˘ăłăăŚé•ă† URL を取得ă™ă‚‹ă‚ă†ă«ĺ¤–é¨ă¸ă®ä¸€ć™‚的㪠ăŞă€ă‚¤ă¬ă‚Żăă‚’é€ă‚‹ -RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) -RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) -ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers -RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes -RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods -RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses -RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses -RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks -RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoveCharset extension [extension] -...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźă™ăąă¦ă®ć–‡ĺ­—ă‚»ăă +RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) +RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) +ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers +RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes +RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods +RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses +RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses +RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks +RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoveCharset extension [extension] +...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźă™ăąă¦ă®ć–‡ĺ­—ă‚»ăă を解除ă™ă‚‹ -RemoveEncoding extension [extension] -...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźă™ăąă¦ă®ă‚łăłă†ăłăエăłă‚łăĽă‡ă‚Łăłă‚° +RemoveEncoding extension [extension] +...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźă™ăąă¦ă®ă‚łăłă†ăłăエăłă‚łăĽă‡ă‚Łăłă‚° を解除ă™ă‚‹ -RemoveHandler extension [extension] -...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźă™ăąă¦ă®ăŹăłă‰ă©ă‚’ +RemoveHandler extension [extension] +...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźă™ăąă¦ă®ăŹăłă‰ă©ă‚’ 解除ă™ă‚‹ -RemoveInputFilter extension [extension] -...vdhă•ă‚ˇă‚¤ă«ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźĺ…ĄĺŠ›ă•ă‚Łă«ă‚żă‚’解除ă™ă‚‹ -RemoveLanguage extension [extension] -...vdhă•ă‚ˇă‚¤ă«ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźč¨€čŞžă‚’č§Łé™¤ă™ă‚‹ -RemoveOutputFilter extension [extension] -...vdhă•ă‚ˇă‚¤ă«ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźĺ‡şĺŠ›ă•ă‚Łă«ă‚żă‚’解除ă™ă‚‹ -RemoveType extension [extension] -...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă¨é–˘é€Łä»ă‘られăźă‚łăłă†ăłăタイă—ă‚’ +RemoveInputFilter extension [extension] +...vdhă•ă‚ˇă‚¤ă«ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźĺ…ĄĺŠ›ă•ă‚Łă«ă‚żă‚’解除ă™ă‚‹ +RemoveLanguage extension [extension] +...vdhă•ă‚ˇă‚¤ă«ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźč¨€čŞžă‚’č§Łé™¤ă™ă‚‹ +RemoveOutputFilter extension [extension] +...vdhă•ă‚ˇă‚¤ă«ć‹ˇĺĽµĺ­ă«é–˘é€Łä»ă‘られăźĺ‡şĺŠ›ă•ă‚Łă«ă‚żă‚’解除ă™ă‚‹ +RemoveType extension [extension] +...vdhă•ă‚ˇă‚¤ă«ă®ć‹ˇĺĽµĺ­ă¨é–˘é€Łä»ă‘られăźă‚łăłă†ăłăタイă—ă‚’ 解除ă™ă‚‹ -RequestHeader set|append|add|unset header -[value] [early|env=[!]variable]svdhEHTTP ăŞă‚Żă‚¨ă‚ąăăăă€ă®č¨­ĺ®š -RequestReadTimeout +RequestHeader set|append|add|unset header +[value] [early|env=[!]variable]svdhEHTTP ăŞă‚Żă‚¨ă‚ąăăăă€ă®č¨­ĺ®š +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] - handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving + handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving the request headers and/or body from client. -Require [not] entity-name - [entity-name] ...dhBTests whether an authenticated user is authorized by +Require [not] entity-name + [entity-name] ...dhBTests whether an authenticated user is authorized by an authorization provider. -<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none +<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none must fail and at least one must succeed for the enclosing directive to succeed. -<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one +<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one must succeed for the enclosing directive to succeed. -<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none +<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none must succeed for the enclosing directive to not fail. -RewriteBase URL-pathdhESets the base URL for per-directory rewrites - RewriteCond - TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place +RewriteBase URL-pathdhESets the base URL for per-directory rewrites + RewriteCond + TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place -RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine -RewriteMap MapName MapType:MapSource +RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine +RewriteMap MapName MapType:MapSource [MapTypeOptions] -svEDefines a mapping function for key-lookup -RewriteOptions OptionssvdhESets some special options for the rewrite engine -RewriteRule - Pattern Substitution [flags]svdhEDefines rules for the rewriting engine -RLimitCPU seconds|max [seconds|max]svdhCApache ă®ĺ­ă—ă­ă‚»ă‚ąă‹ă‚‰čµ·ĺ‹•ă•ă‚Śăźă—ă­ă‚»ă‚ąă® CPU ć¶č˛»é‡Źă‚’ +svEDefines a mapping function for key-lookup +RewriteOptions OptionssvdhESets some special options for the rewrite engine +RewriteRule + Pattern Substitution [flags]svdhEDefines rules for the rewriting engine +RLimitCPU seconds|max [seconds|max]svdhCApache ă®ĺ­ă—ă­ă‚»ă‚ąă‹ă‚‰čµ·ĺ‹•ă•ă‚Śăźă—ă­ă‚»ă‚ąă® CPU ć¶č˛»é‡Źă‚’ ĺ¶é™ă™ă‚‹ -RLimitMEM bytes|max [bytes|max]svdhCApache ă®ĺ­ă—ă­ă‚»ă‚ąă‹ă‚‰čµ·ĺ‹•ă•ă‚Śăźă—ă­ă‚»ă‚ąă®ăˇă˘ăŞć¶č˛»é‡Źă‚’ +RLimitMEM bytes|max [bytes|max]svdhCApache ă®ĺ­ă—ă­ă‚»ă‚ąă‹ă‚‰čµ·ĺ‹•ă•ă‚Śăźă—ă­ă‚»ă‚ąă®ăˇă˘ăŞć¶č˛»é‡Źă‚’ ĺ¶é™ă™ă‚‹ -RLimitNPROC number|max [number|max]svdhCApache ă®ĺ­ă—ă­ă‚»ă‚ąă‹ă‚‰čµ·ĺ‹•ă•ă‚Śăźă—ă­ă‚»ă‚ąăŚčµ·ĺ‹•ă™ă‚‹ă—ă­ă‚»ă‚ąă® +RLimitNPROC number|max [number|max]svdhCApache ă®ĺ­ă—ă­ă‚»ă‚ąă‹ă‚‰čµ·ĺ‹•ă•ă‚Śăźă—ă­ă‚»ă‚ąăŚčµ·ĺ‹•ă™ă‚‹ă—ă­ă‚»ă‚ąă® ć•°ă‚’ĺ¶é™ă™ă‚‹ -Satisfy Any|All All dhEă›ă‚ąăă¬ă™ă«ă®ă‚˘ă‚Żă‚»ă‚ąĺ¶ĺľˇă¨ă¦ăĽă‚¶čŞŤč¨Ľă¨ă®ç›¸äş’作用を指定 -ScoreBoardFile file-path logs/apache_status sMĺ­ă—ă­ă‚»ă‚ąă¨é€Łćşă™ă‚‹ăźă‚ă®ă‡ăĽă‚żă‚’äżťĺ­ă™ă‚‹ +Satisfy Any|All All dhEă›ă‚ąăă¬ă™ă«ă®ă‚˘ă‚Żă‚»ă‚ąĺ¶ĺľˇă¨ă¦ăĽă‚¶čŞŤč¨Ľă¨ă®ç›¸äş’作用を指定 +ScoreBoardFile file-path logs/apache_status sMĺ­ă—ă­ă‚»ă‚ąă¨é€Łćşă™ă‚‹ăźă‚ă®ă‡ăĽă‚żă‚’äżťĺ­ă™ă‚‹ ă•ă‚ˇă‚¤ă«ă®ä˝Ťç˝® -Script method cgi-scriptsvdB特定ă®ăŞă‚Żă‚¨ă‚ąăăˇă‚˝ăă‰ă«ĺŻľă—㦠CGI ă‚ąă‚ŻăŞă—ăă‚’ +Script method cgi-scriptsvdB特定ă®ăŞă‚Żă‚¨ă‚ąăăˇă‚˝ăă‰ă«ĺŻľă—㦠CGI ă‚ąă‚ŻăŞă—ăă‚’ 実行ă™ă‚‹ă‚ă†ă«č¨­ĺ®š -ScriptAlias URL-path -file-path|directory-pathsvBURL ă‚’ă•ă‚ˇă‚¤ă«ă‚·ă‚ąă†ă ă®ä˝Ťç˝®ă¸ăžăă—ă—ă€ăžăă—ĺ…ă‚’ +ScriptAlias URL-path +file-path|directory-pathsvBURL ă‚’ă•ă‚ˇă‚¤ă«ă‚·ă‚ąă†ă ă®ä˝Ťç˝®ă¸ăžăă—ă—ă€ăžăă—ĺ…ă‚’ CGI ă‚ąă‚ŻăŞă—ăă«ćŚ‡ĺ®š -ScriptAliasMatch regex -file-path|directory-pathsvBURL を正規表現を使ăŁă¦ă•ă‚ˇă‚¤ă«ă‚·ă‚ąă†ă ă®ä˝Ťç˝®ă¸ăžăă—ă—ă€ăžăă—ĺ…ă‚’ +ScriptAliasMatch regex +file-path|directory-pathsvBURL を正規表現を使ăŁă¦ă•ă‚ˇă‚¤ă«ă‚·ă‚ąă†ă ă®ä˝Ťç˝®ă¸ăžăă—ă—ă€ăžăă—ĺ…ă‚’ CGI ă‚ąă‚ŻăŞă—ăă«ćŚ‡ĺ®š -ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCCGI ă‚ąă‚ŻăŞă—ăă®ă‚¤ăłă‚żăĽă—ăŞă‚żă®ä˝Ťç˝®ă‚’調ăąă‚‹ăźă‚ă®ć‰‹ćł• -ScriptLog file-pathsvBCGI ă‚ąă‚ŻăŞă—ăă®ă‚¨ă©ăĽă­ă‚°ă•ă‚ˇă‚¤ă«ă®ĺ ´ć‰€ -ScriptLogBuffer bytes 1024 svBă‚ąă‚ŻăŞă—ăă­ă‚°ă«č¨éŚ˛ă•ă‚Śă‚‹ PUT ă‚„ POST ăŞă‚Żă‚¨ă‚ąăă®ĺ†…容ă®ä¸Šé™ -ScriptLogLength bytes 10385760 svBCGI ă‚ąă‚ŻăŞă—ăă®ă­ă‚°ă•ă‚ˇă‚¤ă«ă®ĺ¤§ăŤă•ă®ä¸Šé™ -ScriptSock file-path logs/cgisock sBCGI ă‡ăĽă˘ăłă¨ă®é€šäżˇă«ä˝żă‚Źă‚Śă‚‹ă‚˝ă‚±ăăă®ă•ă‚ˇă‚¤ă«ĺŤă®ćŽĄé ­čľž -SecureListen [IP-address:]portnumber -Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port -SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters +ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCCGI ă‚ąă‚ŻăŞă—ăă®ă‚¤ăłă‚żăĽă—ăŞă‚żă®ä˝Ťç˝®ă‚’調ăąă‚‹ăźă‚ă®ć‰‹ćł• +ScriptLog file-pathsvBCGI ă‚ąă‚ŻăŞă—ăă®ă‚¨ă©ăĽă­ă‚°ă•ă‚ˇă‚¤ă«ă®ĺ ´ć‰€ +ScriptLogBuffer bytes 1024 svBă‚ąă‚ŻăŞă—ăă­ă‚°ă«č¨éŚ˛ă•ă‚Śă‚‹ PUT ă‚„ POST ăŞă‚Żă‚¨ă‚ąăă®ĺ†…容ă®ä¸Šé™ +ScriptLogLength bytes 10385760 svBCGI ă‚ąă‚ŻăŞă—ăă®ă­ă‚°ă•ă‚ˇă‚¤ă«ă®ĺ¤§ăŤă•ă®ä¸Šé™ +ScriptSock file-path logs/cgisock sBCGI ă‡ăĽă˘ăłă¨ă®é€šäżˇă«ä˝żă‚Źă‚Śă‚‹ă‚˝ă‚±ăăă®ă•ă‚ˇă‚¤ă«ĺŤă®ćŽĄé ­čľž +SecureListen [IP-address:]portnumber +Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port +SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters of a request or the last 63, assuming the request itself is greater than 63 chars. -SendBufferSize bytes 0 sMTCP ăăă•ă‚ˇă‚µă‚¤ă‚ş -ServerAdmin email-address|URLsvCサăĽăăŚă‚Żă©ă‚¤ă‚˘ăłăă«é€ă‚‹ă‚¨ă©ăĽăˇăă‚»ăĽă‚¸ă«ĺ«ă‚ă‚‹é›»ĺ­ăˇăĽă«ă® +SendBufferSize bytes 0 sMTCP ăăă•ă‚ˇă‚µă‚¤ă‚ş +ServerAdmin email-address|URLsvCサăĽăăŚă‚Żă©ă‚¤ă‚˘ăłăă«é€ă‚‹ă‚¨ă©ăĽăˇăă‚»ăĽă‚¸ă«ĺ«ă‚ă‚‹é›»ĺ­ăˇăĽă«ă® アă‰ă¬ă‚ą -ServerAlias hostname [hostname] ...vCăŞă‚Żă‚¨ă‚ąăă‚’ĺŤĺ‰Ťă™ăĽă‚ąă®ăăĽăăŁă«ă›ă‚ąăă«ăžăăă•ă›ă¦ă„ă‚‹ă¨ăŤă« +ServerAlias hostname [hostname] ...vCăŞă‚Żă‚¨ă‚ąăă‚’ĺŤĺ‰Ťă™ăĽă‚ąă®ăăĽăăŁă«ă›ă‚ąăă«ăžăăă•ă›ă¦ă„ă‚‹ă¨ăŤă« 使用ă•ă‚Śă‚‹ă›ă‚ąăă®ĺĄĺŤ -ServerLimit numbersM設定可č˝ăŞă‚µăĽăă—ă­ă‚»ă‚ąć•°ă®ä¸Šé™ -ServerName [scheme://]fully-qualified-domain-name[:port]svCサăĽăăŚč‡Şĺ†č‡Şčş«ă‚’示ă™ă¨ăŤă«ä˝żă†ă›ă‚ąăĺŤă¨ăťăĽă -ServerPath URL-pathvC非互換ă®ă–ă©ă‚¦ă‚¶ăŚĺŤĺ‰Ťă™ăĽă‚ąă®ăăĽăăŁă«ă›ă‚ąăă«ă‚˘ă‚Żă‚»ă‚ąă—ăźă¨ăŤă® +ServerLimit numbersM設定可č˝ăŞă‚µăĽăă—ă­ă‚»ă‚ąć•°ă®ä¸Šé™ +ServerName [scheme://]fully-qualified-domain-name[:port]svCサăĽăăŚč‡Şĺ†č‡Şčş«ă‚’示ă™ă¨ăŤă«ä˝żă†ă›ă‚ąăĺŤă¨ăťăĽă +ServerPath URL-pathvC非互換ă®ă–ă©ă‚¦ă‚¶ăŚĺŤĺ‰Ťă™ăĽă‚ąă®ăăĽăăŁă«ă›ă‚ąăă«ă‚˘ă‚Żă‚»ă‚ąă—ăźă¨ăŤă® ăźă‚ă®äş’換用 URL ă‘ă‚ąĺŤ -ServerRoot directory-path /usr/local/apache sCイăłă‚ąăăĽă«ă•ă‚Śăźă‚µăĽăă®ă™ăĽă‚ąă‡ă‚Łă¬ă‚Żă㪠-ServerSignature On|Off|EMail Off svdhCサăĽăăŚç”źćă™ă‚‹ă‰ă‚­ăĄăˇăłăă®ă•ăタを設定 -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCServer HTTP ĺżśç­”ăăă€ă‚’設定ă™ă‚‹ -Session On|Off Off svdhEEnables a session for the current directory or location -SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session -SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session -SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers -SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session -SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session -SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session -SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session -SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID -SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID -SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers -SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database -SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database -SessionDBDPerUser On|Off Off svdhEEnable a per user session -SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database -SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database -SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the +ServerRoot directory-path /usr/local/apache sCイăłă‚ąăăĽă«ă•ă‚Śăźă‚µăĽăă®ă™ăĽă‚ąă‡ă‚Łă¬ă‚Żă㪠+ServerSignature On|Off|EMail Off svdhCサăĽăăŚç”źćă™ă‚‹ă‰ă‚­ăĄăˇăłăă®ă•ăタを設定 +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCServer HTTP ĺżśç­”ăăă€ă‚’設定ă™ă‚‹ +Session On|Off Off svdhEEnables a session for the current directory or location +SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session +SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session +SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers +SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session +SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session +SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session +SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session +SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID +SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID +SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers +SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database +SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database +SessionDBDPerUser On|Off Off svdhEEnable a per user session +SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database +SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database +SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the HTTP_SESSION environment variable -SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored -SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without +SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored +SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without the session being updated -SessionHeader headersvdhEImport session updates from a given HTTP response header -SessionInclude pathsvdhEDefine URL prefixes for which a session is valid -SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session -SetEnv env-variable valuesvdhBç’°ĺ˘ĺ¤‰ć•°ă‚’設定ă™ă‚‹ -SetEnvIf attribute +SessionHeader headersvdhEImport session updates from a given HTTP response header +SessionInclude pathsvdhEDefine URL prefixes for which a session is valid +SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session +SetEnv env-variable valuesvdhBç’°ĺ˘ĺ¤‰ć•°ă‚’設定ă™ă‚‹ +SetEnvIf attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBăŞă‚Żă‚¨ă‚ąăă®ĺ±žć€§ă«ĺźşăĄă„ă¦ç’°ĺ˘ĺ¤‰ć•°ă‚’設定ă™ă‚‹ + [[!]env-variable[=value]] ...svdhBăŞă‚Żă‚¨ă‚ąăă®ĺ±žć€§ă«ĺźşăĄă„ă¦ç’°ĺ˘ĺ¤‰ć•°ă‚’設定ă™ă‚‹ -svdhBSets environment variables based on an ap_expr expression -SetEnvIfNoCase attribute regex +svdhBSets environment variables based on an ap_expr expression +SetEnvIfNoCase attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBăŞă‚Żă‚¨ă‚ąăă®ĺ±žć€§ă«ĺźşăĄă„ă¦ĺ¤§ć–‡ĺ­—小文字を区ĺĄă›ăšă«ç’°ĺ˘ĺ¤‰ć•°ă‚’設定ă™ă‚‹ -SetHandler handler-name|NonesvdhCăžăăă™ă‚‹ă•ă‚ˇă‚¤ă«ăŚăŹăłă‰ă©ă§ĺ‡¦ç†ă•ă‚Śă‚‹ă‚ă†ă«ă™ă‚‹ -SetInputFilter filter[;filter...]svdhCă‚Żă©ă‚¤ă‚˘ăłăă®ăŞă‚Żă‚¨ă‚ąăă‚„ POST ă®ĺ…ĄĺŠ›ă‚’処ç†ă™ă‚‹ă•ă‚Łă«ă‚żă‚’設定ă™ă‚‹ -SetOutputFilter filter[;filter...]svdhCサăĽăă®ĺżśç­”を処ç†ă™ă‚‹ă•ă‚Łă«ă‚żă‚’設定ă™ă‚‹ -SSIEndTag tag "-->" svBinclude č¦ç´ ă‚’終了ă•ă›ă‚‹ć–‡ĺ­—ĺ— -SSIErrorMsg message "[an error occurred +svdhBSSI ă®ă‚¨ă©ăĽăŚă‚ăŁăźă¨ăŤă«čˇ¨ç¤şă•ă‚Śă‚‹ă‚¨ă©ăĽăˇăă‚»ăĽă‚¸ -SSIETag on|off off dhBControls whether ETags are generated by the server. -SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the + [[!]env-variable[=value]] ...svdhBăŞă‚Żă‚¨ă‚ąăă®ĺ±žć€§ă«ĺźşăĄă„ă¦ĺ¤§ć–‡ĺ­—小文字を区ĺĄă›ăšă«ç’°ĺ˘ĺ¤‰ć•°ă‚’設定ă™ă‚‹ +SetHandler handler-name|NonesvdhCăžăăă™ă‚‹ă•ă‚ˇă‚¤ă«ăŚăŹăłă‰ă©ă§ĺ‡¦ç†ă•ă‚Śă‚‹ă‚ă†ă«ă™ă‚‹ +SetInputFilter filter[;filter...]svdhCă‚Żă©ă‚¤ă‚˘ăłăă®ăŞă‚Żă‚¨ă‚ąăă‚„ POST ă®ĺ…ĄĺŠ›ă‚’処ç†ă™ă‚‹ă•ă‚Łă«ă‚żă‚’設定ă™ă‚‹ +SetOutputFilter filter[;filter...]svdhCサăĽăă®ĺżśç­”を処ç†ă™ă‚‹ă•ă‚Łă«ă‚żă‚’設定ă™ă‚‹ +SSIEndTag tag "-->" svBinclude č¦ç´ ă‚’終了ă•ă›ă‚‹ć–‡ĺ­—ĺ— +SSIErrorMsg message "[an error occurred +svdhBSSI ă®ă‚¨ă©ăĽăŚă‚ăŁăźă¨ăŤă«čˇ¨ç¤şă•ă‚Śă‚‹ă‚¨ă©ăĽăˇăă‚»ăĽă‚¸ +SSIETag on|off off dhBControls whether ETags are generated by the server. +SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the server. -SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. -SSIStartTag tag "<!--#" svBinclude č¦ç´ ă‚’開始ă™ă‚‹ć–‡ĺ­—ĺ— -SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBć—Ąä»ă‘を現ă™ć–‡ĺ­—ĺ—ă®ć›¸ĺĽŹă‚’設定ă™ă‚‹ -SSIUndefinedEcho string "(none)" svdhB未定義ă®ĺ¤‰ć•°ăŚ echo ă•ă‚Śăźă¨ăŤă«čˇ¨ç¤şă•ă‚Śă‚‹ć–‡ĺ­—ĺ— -SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. +SSIStartTag tag "<!--#" svBinclude č¦ç´ ă‚’開始ă™ă‚‹ć–‡ĺ­—ĺ— +SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBć—Ąä»ă‘を現ă™ć–‡ĺ­—ĺ—ă®ć›¸ĺĽŹă‚’設定ă™ă‚‹ +SSIUndefinedEcho string "(none)" svdhB未定義ă®ĺ¤‰ć•°ăŚ echo ă•ă‚Śăźă¨ăŤă«čˇ¨ç¤şă•ă‚Śă‚‹ć–‡ĺ­—ĺ— +SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Client Auth -SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Client Auth -SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for defining acceptable CA names -SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for defining acceptable CA names -SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking -SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking +SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Client Auth -SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Client Auth -SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates -SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier -SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file -SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL +SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates +SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier +SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file +SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL handshake -SSLCompression on|off off svEEnable compression on the SSL level -SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator -SSLEngine on|off|optional off svESSL Engine Operation Switch -SSLFIPS on|off off sESSL FIPS mode Switch -SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order -SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation -SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation -SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain -SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification -SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation -SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests -SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates -SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries -SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses -SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation -SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries -SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API -SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options -SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private +SSLCompression on|off off svEEnable compression on the SSL level +SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator +SSLEngine on|off|optional off svESSL Engine Operation Switch +SSLFIPS on|off off sESSL FIPS mode Switch +SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order +SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation +SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation +SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain +SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification +SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation +SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests +SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates +SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries +SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses +SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation +SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries +SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API +SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options +SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private keys -SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions -SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions +SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth -SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth +SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field +SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field -SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired +SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired -SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates +SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL proxy handshake -SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch -SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate -SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy -SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy -SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage -SSLProxyVerify level none svEType of remote server Certificate verification -SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server +SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch +SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate +SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy +SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy +SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage +SSLProxyVerify level none svEType of remote server Certificate verification +SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server Certificate verification -SSLRandomSeed context source -[bytes]sEPseudo Random Number Generator (PRNG) seeding +SSLRandomSeed context source +[bytes]sEPseudo Random Number Generator (PRNG) seeding source -SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer -SSLRequire expressiondhEAllow access only when an arbitrarily complex +SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer +SSLRequire expressiondhEAllow access only when an arbitrarily complex boolean expression is true -SSLRequireSSLdhEDeny access when SSL is not used for the +SSLRequireSSLdhEDeny access when SSL is not used for the HTTP request -SSLSessionCache type none sEType of the global/inter-process SSL Session +SSLSessionCache type none sEType of the global/inter-process SSL Session Cache -SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires +SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires in the Session Cache -SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets -SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets -SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed -SSLSRPVerifierFile file-pathsvEPath to SRP verifier file -SSLStaplingCache typesEConfigures the OCSP stapling cache -SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache -SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries -SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension -SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries -SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses -SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation -SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client -SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache -SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual +SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets +SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets +SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed +SSLSRPVerifierFile file-pathsvEPath to SRP verifier file +SSLStaplingCache typesEConfigures the OCSP stapling cache +SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache +SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries +SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension +SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries +SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses +SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation +SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client +SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache +SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual host. -SSLUserName varnamesdhEVariable name to determine user name -SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake -SSLVerifyClient level none svdhEType of Client Certificate verification -SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client +SSLUserName varnamesdhEVariable name to determine user name +SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake +SSLVerifyClient level none svdhEType of Client Certificate verification +SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client Certificate verification -StartServers numbersM起動時ă«ç”źćă•ă‚Śă‚‹ĺ­ă‚µăĽăă—ă­ă‚»ă‚ąă®ć•° -StartThreads numbersM起動時ă«ç”źćă•ă‚Śă‚‹ă‚ąă¬ăă‰ă®ć•° -StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be +StartServers numbersM起動時ă«ç”źćă•ă‚Śă‚‹ĺ­ă‚µăĽăă—ă­ă‚»ă‚ąă®ć•° +StartThreads numbersM起動時ă«ç”źćă•ă‚Śă‚‹ă‚ąă¬ăă‰ă®ć•° +StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be listed enumerated in the virtual host handling the request -Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content -SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns -SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size -Suexec On|OffsBEnable or disable the suEXEC feature -SuexecUserGroup User GroupsvECGI ă—ă­ă‚°ă©ă ă®ă¦ăĽă‚¶ă‘ăĽăźăă‚·ă§ăłă€ă‚°ă«ăĽă—ă‘ăĽăźăă‚·ă§ăł -ThreadLimit numbersM設定可č˝ăŞĺ­ă—ă­ă‚»ă‚ąćŻŽă®ă‚ąă¬ăă‰ć•°ă®ä¸Šé™ă‚’ +Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content +SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns +SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size +Suexec On|OffsBEnable or disable the suEXEC feature +SuexecUserGroup User GroupsvECGI ă—ă­ă‚°ă©ă ă®ă¦ăĽă‚¶ă‘ăĽăźăă‚·ă§ăłă€ă‚°ă«ăĽă—ă‘ăĽăźăă‚·ă§ăł +ThreadLimit numbersM設定可č˝ăŞĺ­ă—ă­ă‚»ă‚ąćŻŽă®ă‚ąă¬ăă‰ć•°ă®ä¸Šé™ă‚’ 設定ă—ăľă™ -ThreadsPerChild numbersMĺ­ă—ă­ă‚»ă‚ąăťă‚Śăžă‚Śă«ç”źćă•ă‚Śă‚‹ă‚ąă¬ăă‰ć•° -ThreadStackSize sizesMă‚Żă©ă‚¤ă‚˘ăłăă®ă‚łăŤă‚Żă‚·ă§ăłă‚’受ă‘ćŚă¤ă‚ąă¬ăă‰ăŚä˝żç”¨ă™ă‚‹ +ThreadsPerChild numbersMĺ­ă—ă­ă‚»ă‚ąăťă‚Śăžă‚Śă«ç”źćă•ă‚Śă‚‹ă‚ąă¬ăă‰ć•° +ThreadStackSize sizesMă‚Żă©ă‚¤ă‚˘ăłăă®ă‚łăŤă‚Żă‚·ă§ăłă‚’受ă‘ćŚă¤ă‚ąă¬ăă‰ăŚä˝żç”¨ă™ă‚‹ ă‚ąă‚żăă‚Żă®ăイăć•° -TimeOut seconds 60 svCĺ„イă™ăłăă«ă¤ă„ă¦ă€ăŞă‚Żă‚¨ă‚ąăを失敗ă•ă›ă‚‹ăľă§ă«ă‚µăĽă㌠+TimeOut seconds 60 svCĺ„イă™ăłăă«ă¤ă„ă¦ă€ăŞă‚Żă‚¨ă‚ąăを失敗ă•ă›ă‚‹ăľă§ă«ă‚µăĽă㌠待ă¤ć™‚間を設定 +TLSCertificate cert_file [key_file]svXadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)svXdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)svXdefines ciphers that are not to be used. +TLSEngine [address:]portsXdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offsvX- +TLSOptions [+|-]optionsvdhXenables SSL variables for requests. +TLSProtocol version+svXspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemsvXsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)svXdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)svXdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offsvXenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]svXadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+svXspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsXspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsXenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on sCTRACE ăˇă‚˝ăă‰ă®ăŞă‚Żă‚¨ă‚ąăă«ĺŻľă™ă‚‹ĺżśç­”方法を決ă‚ă‚‹ TransferLog file|pipesvBă­ă‚°ă•ă‚ˇă‚¤ă«ă®ä˝Ťç˝®ă‚’指定 diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.ko.euc-kr apache2-2.4.52/docs/manual/mod/quickreference.html.ko.euc-kr --- apache2-2.4.51/docs/manual/mod/quickreference.html.ko.euc-kr 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.ko.euc-kr 2021-12-16 13:44:25.000000000 +0000 @@ -677,435 +677,451 @@ MDChallengeDns01 path-to-commandsX- MDContactEmail addresssX- MDDriveMode always|auto|manual auto sXformer name of MDRenewMode. -MDHttpProxy urlsXDefine a proxy for outgoing connections. -MDMember hostnamesXAdditional hostname for the managed domain. -MDMembers auto|manual auto sXControl if the alias domain names are automatically added. -MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains -MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. -MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. -MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. -MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. -MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. -MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. -MDRenewWindow duration 33% sXControl when a certificate will be renewed. -MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. -MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. -MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. -MDStapling on|off off sXEnable stapling for all or a particular MDomain. -MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. -MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. -MDStoreDir path md sXPath on the local file system to store the Managed Domains data. -MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. -MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections -MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. +MDExternalAccountBinding key-id hmac-64 | none | file none sX- +MDHttpProxy urlsXDefine a proxy for outgoing connections. +MDMember hostnamesXAdditional hostname for the managed domain. +MDMembers auto|manual auto sXControl if the alias domain names are automatically added. +MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains +MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. +MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. +MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. +MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. +MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. +MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. +MDRenewWindow duration 33% sXControl when a certificate will be renewed. +MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. +MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. +MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. +MDStapling on|off off sXEnable stapling for all or a particular MDomain. +MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. +MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. +MDStoreDir path md sXPath on the local file system to store the Managed Domains data. +MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. +MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections +MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. -MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers -MetaDir directory .web svdhECERN ¸ŢŸÁ¤ş¸¸¦ ĂŁŔ» µđ·şĹ丮 Ŕ̸§ -MetaFiles on|off off svdhECERN ¸ŢŸĆÄŔĎŔ» Ăł¸®ÇŃ´Ů -MetaSuffix suffix .meta svdhECERN ¸ŢŸÁ¤ş¸¸¦ ŔúŔĺÇĎ´Â ĆÄŔĎŔÇ Á˘ąĚ»ç -MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents +MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers +MetaDir directory .web svdhECERN ¸ŢŸÁ¤ş¸¸¦ ĂŁŔ» µđ·şĹ丮 Ŕ̸§ +MetaFiles on|off off svdhECERN ¸ŢŸĆÄŔĎŔ» Ăł¸®ÇŃ´Ů +MetaSuffix suffix .meta svdhECERN ¸ŢŸÁ¤ş¸¸¦ ŔúŔĺÇĎ´Â ĆÄŔĎŔÇ Á˘ąĚ»ç +MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents using the specified magic file -MinSpareServers number 5 sMMinimum number of idle child server processes -MinSpareThreads numbersMMinimum number of idle threads available to handle request +MinSpareServers number 5 sMMinimum number of idle child server processes +MinSpareThreads numbersMMinimum number of idle threads available to handle request spikes -MMapFile file-path [file-path] ...sX˝ĂŔ۽à ż©·Ż ĆÄŔĎŔ» ¸Ţ¸đ¸®żˇ ´ëŔŔÇŃ´Ů -ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate -ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info +MMapFile file-path [file-path] ...sX˝ĂŔ۽à ż©·Ż ĆÄŔĎŔ» ¸Ţ¸đ¸®żˇ ´ëŔŔÇŃ´Ů +ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate +ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info components as part of the filename -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for a matching file with MultiViews -Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all +Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all or specified mutexes -NameVirtualHost addr[:port]sCDEPRECATED: Designates an IP address for name-virtual +NameVirtualHost addr[:port]sCDEPRECATED: Designates an IP address for name-virtual hosting -NoProxy host [host] ...svEHosts, domains, or networks that will be connected to +NoProxy host [host] ...svEHosts, domains, or networks that will be connected to directly -NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates -NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request -Options - [+|-]option [[+|-]option] ... FollowSymlinks svdhCConfigures what features are available in a particular +NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates +NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request +Options + [+|-]option [[+|-]option] ... FollowSymlinks svdhCConfigures what features are available in a particular directory - Order ordering Deny,Allow dhEControls the default access state and the order in which + Order ordering Deny,Allow dhEControls the default access state and the order in which Allow and Deny are evaluated. -OutputSed sed-commanddhXSed command for filtering response content -PassEnv env-variable [env-variable] -...svdhB˝©żˇĽ­ ČŻ°ćşŻĽö¸¦ °ˇÁ®żÂ´Ů -PidFile filename logs/httpd.pid sMFile where the server records the process ID +OutputSed sed-commanddhXSed command for filtering response content +PassEnv env-variable [env-variable] +...svdhB˝©żˇĽ­ ČŻ°ćşŻĽö¸¦ °ˇÁ®żÂ´Ů +PidFile filename logs/httpd.pid sMFile where the server records the process ID of the daemon -PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against +PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against malicious privileges-aware code. -Protocol protocolsvCProtocol for a listening socket -ProtocolEcho On|OffsvXecho Ľ­ąö¸¦ Ĺ°°í ˛ö´Ů -Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host -ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation -<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources -Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server -ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers -ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a +Protocol protocolsvCProtocol for a listening socket +ProtocolEcho On|OffsvXecho Ľ­ąö¸¦ Ĺ°°í ˛ö´Ů +Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host +ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation +<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources +Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server +ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers +ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a response -ProxyBlock *|word|host|domain -[word|host|domain] ...svEWords, hosts, or domains that are banned from being +ProxyBlock *|word|host|domain +[word|host|domain] ...svEWords, hosts, or domains that are banned from being proxied -ProxyDomain DomainsvEDefault domain name for proxied requests -ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content -ProxyExpressDBMFile pathnamesvEPathname to DBM file. -ProxyExpressDBMType type default svEDBM type of file. -ProxyExpressEnable on|off off svEEnable the module functionality. -ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application -ProxyFCGISetEnvIf conditional-expression +ProxyDomain DomainsvEDefault domain name for proxied requests +ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content +ProxyExpressDBMFile pathnamesvEPathname to DBM file. +ProxyExpressDBMType type default svEDBM type of file. +ProxyExpressEnable on|off off svEEnable the module functionality. +ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up -ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings -ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server -ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing -ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response -ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters -ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers -ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and + [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up +ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings +ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server +ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing +ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response +ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters +ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers +ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and stylesheets. -ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. -ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. -ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. -ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, +ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. +ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. +ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. +ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, and scripting events. -ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. -ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of +ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. +ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of ProxyHTMLURLMap rules. -ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. -ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML +ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. +ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML <head> sections. -ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. -ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links -ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer -<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched +ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. +ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links +ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer +<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched proxied resources -ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded +ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded through -ProxyPass [path] !|url [key=value - [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space -ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server -ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations -ProxyPassMatch [regex] !|url [key=value - [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions -ProxyPassReverse [path] url -[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse +ProxyPass [path] !|url [key=value + [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space +ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server +ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations +ProxyPassMatch [regex] !|url [key=value + [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions +ProxyPassReverse [path] url +[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse proxied server -ProxyPassReverseCookieDomain internal-domain -public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- +ProxyPassReverseCookieDomain internal-domain +public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- proxied server -ProxyPassReverseCookiePath internal-path -public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- +ProxyPassReverseCookiePath internal-path +public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- proxied server -ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy +ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy request -ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP +ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP connections -ProxyRemote match remote-serversvERemote proxy used to handle certain requests -ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular +ProxyRemote match remote-serversvERemote proxy used to handle certain requests +ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular expressions -ProxyRequests On|Off Off svEEnables forward (standard) proxy requests -ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the +ProxyRequests On|Off Off svEEnables forward (standard) proxy requests +ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the backend -ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response +ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response header -ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters -ProxySourceAddress addresssvESet local IP address for outgoing proxy connections -ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status -ProxyTimeout secondssvENetwork timeout for proxied requests -ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response +ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters +ProxySourceAddress addresssvESet local IP address for outgoing proxy connections +ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status +ProxyTimeout secondssvENetwork timeout for proxied requests +ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response header for proxied requests -ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request -QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is +ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request +QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is fully qualified -ReadBufferSize bytes 8192 svdCSize of the buffers used to read data -ReadmeName filenamesvdhBĆÄŔϸń·Ď ¸¶Áö¸·żˇ »đŔÔÇŇ ĆÄŔĎŔÇ Ŕ̸§ -ReceiveBufferSize bytes 0 sMTCP receive buffer size -Redirect [status] URL-path -URLsvdhBŬ¶óŔĚľđĆ®°ˇ ´Ů¸Ą URLżˇ Á˘ĽÓÇϵµ·Ď żäĂ»ÇĎ´Â żÜşÎ +ReadBufferSize bytes 8192 svdCSize of the buffers used to read data +ReadmeName filenamesvdhBĆÄŔϸń·Ď ¸¶Áö¸·żˇ »đŔÔÇŇ ĆÄŔĎŔÇ Ŕ̸§ +ReceiveBufferSize bytes 0 sMTCP receive buffer size +Redirect [status] URL-path +URLsvdhBŬ¶óŔĚľđĆ®°ˇ ´Ů¸Ą URLżˇ Á˘ĽÓÇϵµ·Ď żäĂ»ÇĎ´Â żÜşÎ ¸®´ŮŔĚ·şĽÇŔ» ş¸ł˝´Ů -RedirectMatch [status] regex -URLsvdhBÇöŔç URLŔĚ Á¤±ÔÇĄÇö˝Äżˇ ÇŘ´çÇĎ¸é żÜşÎ ¸®´ŮŔĚ·şĽÇŔ» +RedirectMatch [status] regex +URLsvdhBÇöŔç URLŔĚ Á¤±ÔÇĄÇö˝Äżˇ ÇŘ´çÇĎ¸é żÜşÎ ¸®´ŮŔĚ·şĽÇŔ» ş¸ł˝´Ů -RedirectPermanent URL-path URLsvdhBŬ¶óŔĚľđĆ®°ˇ ´Ů¸Ą URLżˇ Á˘ĽÓÇϵµ·Ď żäĂ»ÇĎ´Â żÜşÎ +RedirectPermanent URL-path URLsvdhBŬ¶óŔĚľđĆ®°ˇ ´Ů¸Ą URLżˇ Á˘ĽÓÇϵµ·Ď żäĂ»ÇĎ´Â żÜşÎ żµ±¸ ¸®´ŮŔĚ·şĽÇŔ» ş¸ł˝´Ů -RedirectTemp URL-path URLsvdhBŬ¶óŔĚľđĆ®°ˇ ´Ů¸Ą URLżˇ Á˘ĽÓÇϵµ·Ď żäĂ»ÇĎ´Â żÜşÎ +RedirectTemp URL-path URLsvdhBŬ¶óŔĚľđĆ®°ˇ ´Ů¸Ą URLżˇ Á˘ĽÓÇϵµ·Ď żäĂ»ÇĎ´Â żÜşÎ Ŕӽà ¸®´ŮŔĚ·şĽÇŔ» ş¸ł˝´Ů -RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) -RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) -ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers -RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes -RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods -RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses -RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses -RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks -RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoveCharset extension [extension] -...vdhBRemoves any character set associations for a set of file +RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) +RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) +ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers +RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes +RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods +RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses +RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses +RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks +RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoveCharset extension [extension] +...vdhBRemoves any character set associations for a set of file extensions -RemoveEncoding extension [extension] -...vdhBRemoves any content encoding associations for a set of file +RemoveEncoding extension [extension] +...vdhBRemoves any content encoding associations for a set of file extensions -RemoveHandler extension [extension] -...vdhBRemoves any handler associations for a set of file +RemoveHandler extension [extension] +...vdhBRemoves any handler associations for a set of file extensions -RemoveInputFilter extension [extension] -...vdhBRemoves any input filter associations for a set of file +RemoveInputFilter extension [extension] +...vdhBRemoves any input filter associations for a set of file extensions -RemoveLanguage extension [extension] -...vdhBRemoves any language associations for a set of file +RemoveLanguage extension [extension] +...vdhBRemoves any language associations for a set of file extensions -RemoveOutputFilter extension [extension] -...vdhBRemoves any output filter associations for a set of file +RemoveOutputFilter extension [extension] +...vdhBRemoves any output filter associations for a set of file extensions -RemoveType extension [extension] -...vdhBRemoves any content type associations for a set of file +RemoveType extension [extension] +...vdhBRemoves any content type associations for a set of file extensions -RequestHeader set|append|add|unset header -[value] [early|env=[!]variable]svdhEHTTP żäĂ» Çě´ő¸¦ ±¸ĽşÇŃ´Ů -RequestReadTimeout +RequestHeader set|append|add|unset header +[value] [early|env=[!]variable]svdhEHTTP żäĂ» Çě´ő¸¦ ±¸ĽşÇŃ´Ů +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] - handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving + handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving the request headers and/or body from client. -Require [not] entity-name - [entity-name] ...dhBTests whether an authenticated user is authorized by +Require [not] entity-name + [entity-name] ...dhBTests whether an authenticated user is authorized by an authorization provider. -<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none +<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none must fail and at least one must succeed for the enclosing directive to succeed. -<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one +<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one must succeed for the enclosing directive to succeed. -<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none +<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none must succeed for the enclosing directive to not fail. -RewriteBase URL-pathdhESets the base URL for per-directory rewrites - RewriteCond - TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place +RewriteBase URL-pathdhESets the base URL for per-directory rewrites + RewriteCond + TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place -RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine -RewriteMap MapName MapType:MapSource +RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine +RewriteMap MapName MapType:MapSource [MapTypeOptions] -svEDefines a mapping function for key-lookup -RewriteOptions OptionssvdhESets some special options for the rewrite engine -RewriteRule - Pattern Substitution [flags]svdhEDefines rules for the rewriting engine -RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched +svEDefines a mapping function for key-lookup +RewriteOptions OptionssvdhESets some special options for the rewrite engine +RewriteRule + Pattern Substitution [flags]svdhEDefines rules for the rewriting engine +RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched by Apache httpd children -RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched +RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched by Apache httpd children -RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by +RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by processes launched by Apache httpd children -Satisfy Any|All All dhEInteraction between host-level access control and +Satisfy Any|All All dhEInteraction between host-level access control and user authentication -ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for +ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for the child processes -Script method cgi-scriptsvdBĆŻÁ¤ żäĂ»¸ŢĽ­µĺżˇ ´ëÇŘ CGI ˝şĹ©¸łĆ®¸¦ +Script method cgi-scriptsvdBĆŻÁ¤ żäĂ»¸ŢĽ­µĺżˇ ´ëÇŘ CGI ˝şĹ©¸łĆ®¸¦ »çżëÇŃ´Ů. -ScriptAlias URL-path -file-path|directory-pathsvBURLŔ» ĆŻÁ¤ ĆÄŔϽýşĹŰ ŔĺĽŇ·Î ´ëŔŔÇĎ°í ´ë»óŔĚ CGI +ScriptAlias URL-path +file-path|directory-pathsvBURLŔ» ĆŻÁ¤ ĆÄŔϽýşĹŰ ŔĺĽŇ·Î ´ëŔŔÇĎ°í ´ë»óŔĚ CGI ˝şĹ©¸łĆ®¶ó°í ľË¸°´Ů -ScriptAliasMatch regex -file-path|directory-pathsvBÁ¤±ÔÇĄÇö˝ÄŔ» »çżëÇĎż© URLŔ» ĆŻÁ¤ ĆÄŔϽýşĹŰ ŔĺĽŇ·Î +ScriptAliasMatch regex +file-path|directory-pathsvBÁ¤±ÔÇĄÇö˝ÄŔ» »çżëÇĎż© URLŔ» ĆŻÁ¤ ĆÄŔϽýşĹŰ ŔĺĽŇ·Î ´ëŔŔÇĎ°í ´ë»óŔĚ CGI ˝şĹ©¸łĆ®¶ó°í ľË¸°´Ů -ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI +ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI scripts -ScriptLog file-pathsvBCGI ˝şĹ©¸łĆ® żŔ·ů·Î±×ĆÄŔĎŔÇ Ŕ§Äˇ -ScriptLogBuffer bytes 1024 svB˝şĹ©¸łĆ® ·Î±×żˇ ±â·ĎÇŇ PUT ȤŔş POST żäĂ»ŔÇ ĂÖ´ë·® -ScriptLogLength bytes 10385760 svBCGI ˝şĹ©¸łĆ® ·Î±×ĆÄŔĎŔÇ Ĺ©±â Á¦ÇŃ -ScriptSock file-path logs/cgisock svBcgi µĄ¸ó°ú Ĺë˝ĹŔ» Ŕ§ÇŘ »çżëÇŇ ĽŇÄĎŔÇ Ŕ̸§ -SecureListen [IP-address:]portnumber -Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port -SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters +ScriptLog file-pathsvBCGI ˝şĹ©¸łĆ® żŔ·ů·Î±×ĆÄŔĎŔÇ Ŕ§Äˇ +ScriptLogBuffer bytes 1024 svB˝şĹ©¸łĆ® ·Î±×żˇ ±â·ĎÇŇ PUT ȤŔş POST żäĂ»ŔÇ ĂÖ´ë·® +ScriptLogLength bytes 10385760 svBCGI ˝şĹ©¸łĆ® ·Î±×ĆÄŔĎŔÇ Ĺ©±â Á¦ÇŃ +ScriptSock file-path logs/cgisock svBcgi µĄ¸ó°ú Ĺë˝ĹŔ» Ŕ§ÇŘ »çżëÇŇ ĽŇÄĎŔÇ Ŕ̸§ +SecureListen [IP-address:]portnumber +Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port +SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters of a request or the last 63, assuming the request itself is greater than 63 chars. -SendBufferSize bytes 0 sMTCP buffer size -ServerAdmin email-address|URLsvCEmail address that the server includes in error +SendBufferSize bytes 0 sMTCP buffer size +ServerAdmin email-address|URLsvCEmail address that the server includes in error messages sent to the client -ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests +ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests to name-virtual hosts -ServerLimit numbersMUpper limit on configurable number of processes -ServerName [scheme://]domain-name|ip-address[:port]svCHostname and port that the server uses to identify +ServerLimit numbersMUpper limit on configurable number of processes +ServerName [scheme://]domain-name|ip-address[:port]svCHostname and port that the server uses to identify itself -ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that +ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that is accessed by an incompatible browser -ServerRoot directory-path /usr/local/apache sCBase directory for the server installation -ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response +ServerRoot directory-path /usr/local/apache sCBase directory for the server installation +ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response header -Session On|Off Off svdhEEnables a session for the current directory or location -SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session -SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session -SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers -SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session -SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session -SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session -SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session -SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID -SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID -SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers -SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database -SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database -SessionDBDPerUser On|Off Off svdhEEnable a per user session -SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database -SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database -SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the +Session On|Off Off svdhEEnables a session for the current directory or location +SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session +SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session +SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers +SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session +SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session +SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session +SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session +SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID +SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID +SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers +SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database +SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database +SessionDBDPerUser On|Off Off svdhEEnable a per user session +SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database +SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database +SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the HTTP_SESSION environment variable -SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored -SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without +SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored +SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without the session being updated -SessionHeader headersvdhEImport session updates from a given HTTP response header -SessionInclude pathsvdhEDefine URL prefixes for which a session is valid -SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session -SetEnv env-variable valuesvdhBČŻ°ćşŻĽö¸¦ ĽłÁ¤ÇŃ´Ů -SetEnvIf attribute +SessionHeader headersvdhEImport session updates from a given HTTP response header +SessionInclude pathsvdhEDefine URL prefixes for which a session is valid +SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session +SetEnv env-variable valuesvdhBČŻ°ćşŻĽö¸¦ ĽłÁ¤ÇŃ´Ů +SetEnvIf attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBżäĂ»ŔÇ ĽşÁúżˇ µű¶ó ČŻ°ćşŻĽö¸¦ ĽłÁ¤ÇŃ´Ů -svdhBSets environment variables based on an ap_expr expression -SetEnvIfNoCase attribute regex + [[!]env-variable[=value]] ...svdhBżäĂ»ŔÇ ĽşÁúżˇ µű¶ó ČŻ°ćşŻĽö¸¦ ĽłÁ¤ÇŃ´Ů +svdhBSets environment variables based on an ap_expr expression +SetEnvIfNoCase attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhB´ëĽŇą®ŔÚ¸¦ ±¸ş°ÇĎÁöľĘ°í żäĂ»ŔÇ ĽşÁúżˇ µű¶ó ČŻ°ćşŻĽö¸¦ + [[!]env-variable[=value]] ...svdhB´ëĽŇą®ŔÚ¸¦ ±¸ş°ÇĎÁöľĘ°í żäĂ»ŔÇ ĽşÁúżˇ µű¶ó ČŻ°ćşŻĽö¸¦ ĽłÁ¤ÇŃ´Ů -SetHandler handler-name|none|expressionsvdhCForces all matching files to be processed by a +SetHandler handler-name|none|expressionsvdhCForces all matching files to be processed by a handler -SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST +SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST input -SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the +SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the server -SSIEndTag tag "-->" svBString that ends an include element -SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI +SSIEndTag tag "-->" svBString that ends an include element +SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI error -SSIETag on|off off dhBControls whether ETags are generated by the server. -SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the +SSIETag on|off off dhBControls whether ETags are generated by the server. +SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the server. -SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. -SSIStartTag tag "<!--#" svBString that starts an include element -SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are +SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. +SSIStartTag tag "<!--#" svBString that starts an include element +SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are displayed -SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed -SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed +SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Client Auth -SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Client Auth -SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for defining acceptable CA names -SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for defining acceptable CA names -SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking -SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking +SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Client Auth -SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Client Auth -SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates -SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier -SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file -SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL +SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates +SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier +SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file +SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL handshake -SSLCompression on|off off svEEnable compression on the SSL level -SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator -SSLEngine on|off|optional off svESSL Engine Operation Switch -SSLFIPS on|off off sESSL FIPS mode Switch -SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order -SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation -SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation -SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain -SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification -SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation -SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests -SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates -SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries -SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses -SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation -SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries -SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API -SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options -SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private +SSLCompression on|off off svEEnable compression on the SSL level +SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator +SSLEngine on|off|optional off svESSL Engine Operation Switch +SSLFIPS on|off off sESSL FIPS mode Switch +SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order +SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation +SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation +SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain +SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification +SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation +SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests +SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates +SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries +SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses +SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation +SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries +SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API +SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options +SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private keys -SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions -SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions +SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth -SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth +SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field +SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field -SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired +SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired -SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates +SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL proxy handshake -SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch -SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate -SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy -SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy -SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage -SSLProxyVerify level none svEType of remote server Certificate verification -SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server +SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch +SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate +SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy +SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy +SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage +SSLProxyVerify level none svEType of remote server Certificate verification +SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server Certificate verification -SSLRandomSeed context source -[bytes]sEPseudo Random Number Generator (PRNG) seeding +SSLRandomSeed context source +[bytes]sEPseudo Random Number Generator (PRNG) seeding source -SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer -SSLRequire expressiondhEAllow access only when an arbitrarily complex +SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer +SSLRequire expressiondhEAllow access only when an arbitrarily complex boolean expression is true -SSLRequireSSLdhEDeny access when SSL is not used for the +SSLRequireSSLdhEDeny access when SSL is not used for the HTTP request -SSLSessionCache type none sEType of the global/inter-process SSL Session +SSLSessionCache type none sEType of the global/inter-process SSL Session Cache -SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires +SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires in the Session Cache -SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets -SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets -SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed -SSLSRPVerifierFile file-pathsvEPath to SRP verifier file -SSLStaplingCache typesEConfigures the OCSP stapling cache -SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache -SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries -SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension -SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries -SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses -SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation -SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client -SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache -SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual +SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets +SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets +SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed +SSLSRPVerifierFile file-pathsvEPath to SRP verifier file +SSLStaplingCache typesEConfigures the OCSP stapling cache +SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache +SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries +SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension +SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries +SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses +SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation +SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client +SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache +SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual host. -SSLUserName varnamesdhEVariable name to determine user name -SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake -SSLVerifyClient level none svdhEType of Client Certificate verification -SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client +SSLUserName varnamesdhEVariable name to determine user name +SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake +SSLVerifyClient level none svdhEType of Client Certificate verification +SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client Certificate verification -StartServers numbersMNumber of child server processes created at startup -StartThreads numbersMNumber of threads created on startup -StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be +StartServers numbersMNumber of child server processes created at startup +StartThreads numbersMNumber of threads created on startup +StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be listed enumerated in the virtual host handling the request -Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content -SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns -SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size -Suexec On|OffsBEnable or disable the suEXEC feature -SuexecUserGroup User GroupsvECGI ÇÁ·Î±×·ĄŔĚ »çżëÇŇ »çżëŔÚżÍ ±×·ě ±ÇÇŃ -ThreadLimit numbersMSets the upper limit on the configurable number of threads +Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content +SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns +SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size +Suexec On|OffsBEnable or disable the suEXEC feature +SuexecUserGroup User GroupsvECGI ÇÁ·Î±×·ĄŔĚ »çżëÇŇ »çżëŔÚżÍ ±×·ě ±ÇÇŃ +ThreadLimit numbersMSets the upper limit on the configurable number of threads per child process -ThreadsPerChild numbersMNumber of threads created by each child process -ThreadStackSize sizesMThe size in bytes of the stack used by threads handling +ThreadsPerChild numbersMNumber of threads created by each child process +ThreadStackSize sizesMThe size in bytes of the stack used by threads handling client connections -TimeOut seconds 60 svCAmount of time the server will wait for +TimeOut seconds 60 svCAmount of time the server will wait for certain events before failing a request +TLSCertificate cert_file [key_file]svXadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)svXdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)svXdefines ciphers that are not to be used. +TLSEngine [address:]portsXdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offsvX- +TLSOptions [+|-]optionsvdhXenables SSL variables for requests. +TLSProtocol version+svXspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemsvXsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)svXdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)svXdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offsvXenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]svXadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+svXspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsXspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsXenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on svCDetermines the behavior on TRACE requests TransferLog file|pipesvB·Î±×ĆÄŔĎ Ŕ§Äˇ¸¦ ĽłÁ¤ÇŃ´Ů TypesConfig file-path conf/mime.types sBThe location of the mime.types file diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.tr.utf8 apache2-2.4.52/docs/manual/mod/quickreference.html.tr.utf8 --- apache2-2.4.51/docs/manual/mod/quickreference.html.tr.utf8 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.tr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -705,444 +705,460 @@ MDChallengeDns01 path-to-commandsD- MDContactEmail addresssD- MDDriveMode always|auto|manual auto sDformer name of MDRenewMode. -MDHttpProxy urlsDDefine a proxy for outgoing connections. -MDMember hostnamesDAdditional hostname for the managed domain. -MDMembers auto|manual auto sDControl if the alias domain names are automatically added. -MDMessageCmd path-to-cmd optional-argssDHandle events for Manage Domains -MDMustStaple on|off off sDControl if new certificates carry the OCSP Must Staple flag. -MDNotifyCmd path [ args ]sDRun a program when a Managed Domain is ready. -MDomain dns-name [ other-dns-name... ] [auto|manual]sDDefine list of domain names that belong to one group. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sDContainer for directives applied to the same managed domains. -MDPortMap map1 [ map2 ] http:80 https:443 sDMap external to internal ports for domain ownership verification. -MDPrivateKeys type [ params... ] RSA 2048 sDSet type and size of the private keys generated. -MDRenewMode always|auto|manual auto sDControls if certificates shall be renewed. -MDRenewWindow duration 33% sDControl when a certificate will be renewed. -MDRequireHttps off|temporary|permanent off sDRedirects http: traffic to https: for Managed Domains. -MDServerStatus on|off on sDControl if Managed Domain information is added to server-status. -MDStapleOthers on|off on sDEnable stapling for certificates not managed by mod_md. -MDStapling on|off off sDEnable stapling for all or a particular MDomain. -MDStaplingKeepResponse duration 7d sDControls when old responses should be removed. -MDStaplingRenewWindow duration 33% sDControl when the stapling responses will be renewed. -MDStoreDir path md sDPath on the local file system to store the Managed Domains data. -MDWarnWindow duration 10% sDDefine the time window when you want to be warned about an expiring certificate. -MemcacheConnTTL num[units] 15s skEKeepalive time for idle connections -MergeSlashes ON|OFF ON skÇSunucunun URL’lerde ardışık bölĂĽ çizgilerini birleĹźtirip birleĹźtirmeyeceÄźini denetler. +MDExternalAccountBinding key-id hmac-64 | none | file none sD- +MDHttpProxy urlsDDefine a proxy for outgoing connections. +MDMember hostnamesDAdditional hostname for the managed domain. +MDMembers auto|manual auto sDControl if the alias domain names are automatically added. +MDMessageCmd path-to-cmd optional-argssDHandle events for Manage Domains +MDMustStaple on|off off sDControl if new certificates carry the OCSP Must Staple flag. +MDNotifyCmd path [ args ]sDRun a program when a Managed Domain is ready. +MDomain dns-name [ other-dns-name... ] [auto|manual]sDDefine list of domain names that belong to one group. +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sDContainer for directives applied to the same managed domains. +MDPortMap map1 [ map2 ] http:80 https:443 sDMap external to internal ports for domain ownership verification. +MDPrivateKeys type [ params... ] RSA 2048 sDSet type and size of the private keys generated. +MDRenewMode always|auto|manual auto sDControls if certificates shall be renewed. +MDRenewWindow duration 33% sDControl when a certificate will be renewed. +MDRequireHttps off|temporary|permanent off sDRedirects http: traffic to https: for Managed Domains. +MDServerStatus on|off on sDControl if Managed Domain information is added to server-status. +MDStapleOthers on|off on sDEnable stapling for certificates not managed by mod_md. +MDStapling on|off off sDEnable stapling for all or a particular MDomain. +MDStaplingKeepResponse duration 7d sDControls when old responses should be removed. +MDStaplingRenewWindow duration 33% sDControl when the stapling responses will be renewed. +MDStoreDir path md sDPath on the local file system to store the Managed Domains data. +MDWarnWindow duration 10% sDDefine the time window when you want to be warned about an expiring certificate. +MemcacheConnTTL num[units] 15s skEKeepalive time for idle connections +MergeSlashes ON|OFF ON skÇSunucunun URL’lerde ardışık bölĂĽ çizgilerini birleĹźtirip birleĹźtirmeyeceÄźini denetler. -MergeTrailers [on|off] off skÇTrailer alanlarının baĹźlığa dahil edilip edilmeyeceÄźini belirler -MetaDir directory .web skdhEName of the directory to find CERN-style meta information +MergeTrailers [on|off] off skÇTrailer alanlarının baĹźlığa dahil edilip edilmeyeceÄźini belirler +MetaDir directory .web skdhEName of the directory to find CERN-style meta information files -MetaFiles on|off off skdhEActivates CERN meta-file processing -MetaSuffix suffix .meta skdhEFile name suffix for the file containing CERN-style +MetaFiles on|off off skdhEActivates CERN meta-file processing +MetaSuffix suffix .meta skdhEFile name suffix for the file containing CERN-style meta information -MimeMagicFile file-pathskEEnable MIME-type determination based on file contents +MimeMagicFile file-pathskEEnable MIME-type determination based on file contents using the specified magic file -MinSpareServers sayı 5 sMBoĹźtaki çocuk sĂĽreçlerin asgari sayısı -MinSpareThreads sayısMÄ°steklerin ani artışında devreye girecek boĹźtaki evrelerin asgari +MinSpareServers sayı 5 sMBoĹźtaki çocuk sĂĽreçlerin asgari sayısı +MinSpareThreads sayısMÄ°steklerin ani artışında devreye girecek boĹźtaki evrelerin asgari sayısını belirler. -MMapFile file-path [file-path] ...sDMap a list of files into memory at startup time -ModemStandard V.21|V.26bis|V.32|V.34|V.92dDModem standard to simulate -ModMimeUsePathInfo On|Off Off dTTells mod_mime to treat path_info +MMapFile file-path [file-path] ...sDMap a list of files into memory at startup time +ModemStandard V.21|V.26bis|V.32|V.34|V.92dDModem standard to simulate +ModMimeUsePathInfo On|Off Off dTTells mod_mime to treat path_info components as part of the filename -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly skdhTThe types of files that will be included when searching for +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly skdhTThe types of files that will be included when searching for a matching file with MultiViews -Mutex mekanizma [default|muteks-ismi] ... [OmitPID] default sÇMuteks mekanizmasını ve kilit dosyası dizinini tĂĽm muteksler veya belirtilenler için yapılandırır -NameVirtualHost adres[:port]sÇÖNERÄ°LMÄ°YOR: Ä°sme dayalı sanal konaklar için IP adresi belirtir -NoProxy host [host] ...skEHosts, domains, or networks that will be connected to +Mutex mekanizma [default|muteks-ismi] ... [OmitPID] default sÇMuteks mekanizmasını ve kilit dosyası dizinini tĂĽm muteksler veya belirtilenler için yapılandırır +NameVirtualHost adres[:port]sÇÖNERÄ°LMÄ°YOR: Ä°sme dayalı sanal konaklar için IP adresi belirtir +NoProxy host [host] ...skEHosts, domains, or networks that will be connected to directly -NWSSLTrustedCerts filename [filename] ...sTList of additional client certificates -NWSSLUpgradeable [IP-address:]portnumbersTAllows a connection to be upgraded to an SSL connection upon request -Options - [+|-]seçenek [[+|-]seçenek] ... FollowSymlinks skdhÇBelli bir dizinde geçerli olacak özellikleri yapılandırır. +NWSSLTrustedCerts filename [filename] ...sTList of additional client certificates +NWSSLUpgradeable [IP-address:]portnumbersTAllows a connection to be upgraded to an SSL connection upon request +Options + [+|-]seçenek [[+|-]seçenek] ... FollowSymlinks skdhÇBelli bir dizinde geçerli olacak özellikleri yapılandırır. - Order ordering Deny,Allow dhEControls the default access state and the order in which + Order ordering Deny,Allow dhEControls the default access state and the order in which Allow and Deny are evaluated. -OutputSed sed-commanddhDSed command for filtering response content -PassEnv ortam-deÄźiĹźkeni [ortam-deÄźiĹźkeni] -...skdhTOrtam deÄźiĹźkenlerini kabuktan aktarır. -PidFile dosya logs/httpd.pid sMAna sĂĽrecin sĂĽreç kimliÄźinin (PID) kaydedileceÄźi dosyayı belirler. -PrivilegesMode FAST|SECURE|SELECTIVE FAST skdDTrade off processing speed and efficiency vs security against +OutputSed sed-commanddhDSed command for filtering response content +PassEnv ortam-deÄźiĹźkeni [ortam-deÄźiĹźkeni] +...skdhTOrtam deÄźiĹźkenlerini kabuktan aktarır. +PidFile dosya logs/httpd.pid sMAna sĂĽrecin sĂĽreç kimliÄźinin (PID) kaydedileceÄźi dosyayı belirler. +PrivilegesMode FAST|SECURE|SELECTIVE FAST skdDTrade off processing speed and efficiency vs security against malicious privileges-aware code. -Protocol protokolskÇDinlenen bir soket için protokol -ProtocolEcho On|Off Off skDTurn the echo server on or off -Protocols protokol ... http/1.1 skÇSunucu/sanal konak için kullanılabilecek protokoller -ProtocolsHonorOrder On|Off On skÇUzlaĹźma sırasında protokollerin öncelik sırasını belirler -<Proxy wildcard-url> ...</Proxy>skEContainer for directives applied to proxied resources -Proxy100Continue Off|On On skdEForward 100-continue expectation to the origin server -ProxyAddHeaders Off|On On skdEAdd proxy information in X-Forwarded-* headers -ProxyBadHeader IsError|Ignore|StartBody IsError skEDetermines how to handle bad header lines in a +Protocol protokolskÇDinlenen bir soket için protokol +ProtocolEcho On|Off Off skDTurn the echo server on or off +Protocols protokol ... http/1.1 skÇSunucu/sanal konak için kullanılabilecek protokoller +ProtocolsHonorOrder On|Off On skÇUzlaĹźma sırasında protokollerin öncelik sırasını belirler +<Proxy wildcard-url> ...</Proxy>skEContainer for directives applied to proxied resources +Proxy100Continue Off|On On skdEForward 100-continue expectation to the origin server +ProxyAddHeaders Off|On On skdEAdd proxy information in X-Forwarded-* headers +ProxyBadHeader IsError|Ignore|StartBody IsError skEDetermines how to handle bad header lines in a response -ProxyBlock *|word|host|domain -[word|host|domain] ...skEWords, hosts, or domains that are banned from being +ProxyBlock *|word|host|domain +[word|host|domain] ...skEWords, hosts, or domains that are banned from being proxied -ProxyDomain DomainskEDefault domain name for proxied requests -ProxyErrorOverride Off|On [code ...] Off skdEOverride error pages for proxied content -ProxyExpressDBMFile pathnameskEPathname to DBM file. -ProxyExpressDBMType type default skEDBM type of file. -ProxyExpressEnable on|off off skEEnable the module functionality. -ProxyFCGIBackendType FPM|GENERIC FPM skdhESpecify the type of backend FastCGI application -ProxyFCGISetEnvIf conditional-expression +ProxyDomain DomainskEDefault domain name for proxied requests +ProxyErrorOverride Off|On [code ...] Off skdEOverride error pages for proxied content +ProxyExpressDBMFile pathnameskEPathname to DBM file. +ProxyExpressDBMType type default skEDBM type of file. +ProxyExpressEnable on|off off skEEnable the module functionality. +ProxyFCGIBackendType FPM|GENERIC FPM skdhESpecify the type of backend FastCGI application +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]skdhEAllow variables sent to FastCGI servers to be fixed up -ProxyFtpDirCharset character_set ISO-8859-1 skdEDefine the character set for proxied FTP listings -ProxyFtpEscapeWildcards on|off on skdEWhether wildcards in requested filenames are escaped when sent to the FTP server -ProxyFtpListOnWildcard on|off on skdEWhether wildcards in requested filenames trigger a file listing -ProxyHCExpr name {ap_expr expression}skECreates a named condition expression to use to determine health of the backend based on its response -ProxyHCTemplate name parameter=setting [...]skECreates a named template for setting various health check parameters -ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers -ProxyHTMLBufSize bytes 8192 skdTSets the buffer size increment for buffering inline scripts and + [value-expression]skdhEAllow variables sent to FastCGI servers to be fixed up +ProxyFtpDirCharset character_set ISO-8859-1 skdEDefine the character set for proxied FTP listings +ProxyFtpEscapeWildcards on|off on skdEWhether wildcards in requested filenames are escaped when sent to the FTP server +ProxyFtpListOnWildcard on|off on skdEWhether wildcards in requested filenames trigger a file listing +ProxyHCExpr name {ap_expr expression}skECreates a named condition expression to use to determine health of the backend based on its response +ProxyHCTemplate name parameter=setting [...]skECreates a named template for setting various health check parameters +ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers +ProxyHTMLBufSize bytes 8192 skdTSets the buffer size increment for buffering inline scripts and stylesheets. -ProxyHTMLCharsetOut Charset | *skdTSpecify a charset for mod_proxy_html output. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    skdTSets an HTML or XHTML document type declaration. -ProxyHTMLEnable On|Off Off skdTTurns the proxy_html filter on or off. -ProxyHTMLEvents attribute [attribute ...]skdTSpecify attributes to treat as scripting events. -ProxyHTMLExtended On|Off Off skdTDetermines whether to fix links in inline scripts, stylesheets, +ProxyHTMLCharsetOut Charset | *skdTSpecify a charset for mod_proxy_html output. +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    skdTSets an HTML or XHTML document type declaration. +ProxyHTMLEnable On|Off Off skdTTurns the proxy_html filter on or off. +ProxyHTMLEvents attribute [attribute ...]skdTSpecify attributes to treat as scripting events. +ProxyHTMLExtended On|Off Off skdTDetermines whether to fix links in inline scripts, stylesheets, and scripting events. -ProxyHTMLFixups [lowercase] [dospath] [reset]skdTFixes for simple HTML errors. -ProxyHTMLInterp On|Off Off skdTEnables per-request interpolation of +ProxyHTMLFixups [lowercase] [dospath] [reset]skdTFixes for simple HTML errors. +ProxyHTMLInterp On|Off Off skdTEnables per-request interpolation of ProxyHTMLURLMap rules. -ProxyHTMLLinks element attribute [attribute2 ...]skdTSpecify HTML elements that have URL attributes to be rewritten. -ProxyHTMLMeta On|Off Off skdTTurns on or off extra pre-parsing of metadata in HTML +ProxyHTMLLinks element attribute [attribute2 ...]skdTSpecify HTML elements that have URL attributes to be rewritten. +ProxyHTMLMeta On|Off Off skdTTurns on or off extra pre-parsing of metadata in HTML <head> sections. -ProxyHTMLStripComments On|Off Off skdTDetermines whether to strip HTML comments. -ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]skdTDefines a rule to rewrite HTML links -ProxyIOBufferSize bytes 8192 skEDetermine size of internal data throughput buffer -<ProxyMatch regex> ...</ProxyMatch>skEContainer for directives applied to regular-expression-matched +ProxyHTMLStripComments On|Off Off skdTDetermines whether to strip HTML comments. +ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]skdTDefines a rule to rewrite HTML links +ProxyIOBufferSize bytes 8192 skEDetermine size of internal data throughput buffer +<ProxyMatch regex> ...</ProxyMatch>skEContainer for directives applied to regular-expression-matched proxied resources -ProxyMaxForwards number -1 skEMaximum number of proxies that a request can be forwarded +ProxyMaxForwards number -1 skEMaximum number of proxies that a request can be forwarded through -ProxyPass [path] !|url [key=value - [key=value ...]] [nocanon] [interpolate] [noquery]skdEMaps remote servers into the local server URL-space -ProxyPassInherit On|Off On skEInherit ProxyPass directives defined from the main server -ProxyPassInterpolateEnv On|Off Off skdEEnable Environment Variable interpolation in Reverse Proxy configurations -ProxyPassMatch [regex] !|url [key=value - [key=value ...]]skdEMaps remote servers into the local server URL-space using regular expressions -ProxyPassReverse [path] url -[interpolate]skdEAdjusts the URL in HTTP response headers sent from a reverse +ProxyPass [path] !|url [key=value + [key=value ...]] [nocanon] [interpolate] [noquery]skdEMaps remote servers into the local server URL-space +ProxyPassInherit On|Off On skEInherit ProxyPass directives defined from the main server +ProxyPassInterpolateEnv On|Off Off skdEEnable Environment Variable interpolation in Reverse Proxy configurations +ProxyPassMatch [regex] !|url [key=value + [key=value ...]]skdEMaps remote servers into the local server URL-space using regular expressions +ProxyPassReverse [path] url +[interpolate]skdEAdjusts the URL in HTTP response headers sent from a reverse proxied server -ProxyPassReverseCookieDomain internal-domain -public-domain [interpolate]skdEAdjusts the Domain string in Set-Cookie headers from a reverse- +ProxyPassReverseCookieDomain internal-domain +public-domain [interpolate]skdEAdjusts the Domain string in Set-Cookie headers from a reverse- proxied server -ProxyPassReverseCookiePath internal-path -public-path [interpolate]skdEAdjusts the Path string in Set-Cookie headers from a reverse- +ProxyPassReverseCookiePath internal-path +public-path [interpolate]skdEAdjusts the Path string in Set-Cookie headers from a reverse- proxied server -ProxyPreserveHost On|Off Off skdEUse incoming Host HTTP request header for proxy +ProxyPreserveHost On|Off Off skdEUse incoming Host HTTP request header for proxy request -ProxyReceiveBufferSize bytes 0 skENetwork buffer size for proxied HTTP and FTP +ProxyReceiveBufferSize bytes 0 skENetwork buffer size for proxied HTTP and FTP connections -ProxyRemote match remote-serverskERemote proxy used to handle certain requests -ProxyRemoteMatch regex remote-serverskERemote proxy used to handle requests matched by regular +ProxyRemote match remote-serverskERemote proxy used to handle certain requests +ProxyRemoteMatch regex remote-serverskERemote proxy used to handle requests matched by regular expressions -ProxyRequests On|Off Off skEEnables forward (standard) proxy requests -ProxySCGIInternalRedirect On|Off|Headername On skdEEnable or disable internal redirect responses from the +ProxyRequests On|Off Off skEEnables forward (standard) proxy requests +ProxySCGIInternalRedirect On|Off|Headername On skdEEnable or disable internal redirect responses from the backend -ProxySCGISendfile On|Off|Headername Off skdEEnable evaluation of X-Sendfile pseudo response +ProxySCGISendfile On|Off|Headername Off skdEEnable evaluation of X-Sendfile pseudo response header -ProxySet url key=value [key=value ...]skdESet various Proxy balancer or member parameters -ProxySourceAddress addressskESet local IP address for outgoing proxy connections -ProxyStatus Off|On|Full Off skEShow Proxy LoadBalancer status in mod_status -ProxyTimeout secondsskENetwork timeout for proxied requests -ProxyVia On|Off|Full|Block Off skEInformation provided in the Via HTTP response +ProxySet url key=value [key=value ...]skdESet various Proxy balancer or member parameters +ProxySourceAddress addressskESet local IP address for outgoing proxy connections +ProxyStatus Off|On|Full Off skEShow Proxy LoadBalancer status in mod_status +ProxyTimeout secondsskENetwork timeout for proxied requests +ProxyVia On|Off|Full|Block Off skEInformation provided in the Via HTTP response header for proxied requests -ProxyWebsocketFallbackToProxyHttp On|Off On skEInstructs this module to let mod_proxy_http handle the request -QualifyRedirectURL On|Off Off skdÇREDIRECT_URL ortam değişkeninin tamamen nitelenmiş olup +ProxyWebsocketFallbackToProxyHttp On|Off On skEInstructs this module to let mod_proxy_http handle the request +QualifyRedirectURL On|Off Off skdÇREDIRECT_URL ortam değişkeninin tamamen nitelenmiş olup olmayacağını denetler -ReadBufferSize bayt-sayısı 8192 skdÇVeriyi okumakta kullanılacak tampon sayısı -ReadmeName dosya-ismiskdhTDizin listesinin sonuna yerleştirilecek dosyanın ismini +ReadBufferSize bayt-sayısı 8192 skdÇVeriyi okumakta kullanılacak tampon sayısı +ReadmeName dosya-ismiskdhTDizin listesinin sonuna yerleştirilecek dosyanın ismini belirler. -ReceiveBufferSize bayt-sayısı 0 sMTCP alım tamponu boyu -Redirect [durum] [URL-yolu] -URLskdhTİstemciyi, bir yönlendirme isteği döndürerek farklı bir URL’ye +ReceiveBufferSize bayt-sayısı 0 sMTCP alım tamponu boyu +Redirect [durum] [URL-yolu] +URLskdhTİstemciyi, bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir. -RedirectMatch [durum] düzenli-ifade -URLskdhTGeçerli URL ile eşleşen bir düzenli ifadeye dayanarak bir harici +RedirectMatch [durum] düzenli-ifade +URLskdhTGeçerli URL ile eşleşen bir düzenli ifadeye dayanarak bir harici yönlendirme gönderir. -RedirectPermanent URL-yolu URLskdhTİstemciyi, kalıcı bir yönlendirme isteği döndürerek farklı bir +RedirectPermanent URL-yolu URLskdhTİstemciyi, kalıcı bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir. -RedirectTemp URL-yolu URLskdhTİstemciyi, geçici bir yönlendirme isteği döndürerek farklı bir +RedirectTemp URL-yolu URLskdhTİstemciyi, geçici bir yönlendirme isteği döndürerek farklı bir URL’ye yönlendirir. -RedisConnPoolTTL num[units] 15s skETTL used for the connection pool with the Redis server(s) -RedisTimeout num[units] 5s skER/W timeout used for the connection with the Redis server(s) -ReflectorHeader inputheader [outputheader]skdhTReflect an input header to the output headers -RegexDefaultOptions [none] [+|-]seçenek [[+|-]seçenek] ... DOTALL DOLLAR_ENDON +sÇRegex düzenli ifadeleri için öntanımlı/küresel seçenekleri yapılandırır -RegisterHttpMethod yöntem [yöntem [...]]sÇStandart olmayan HTTP yöntemlerini devreye alır -RemoteIPHeader header-fieldskTDeclare the header field which should be parsed for useragent IP addresses -RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...skTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPInternalProxyList filenameskTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPProxiesHeader HeaderFieldNameskTDeclare the header field which will record all intermediate IP addresses -RemoteIPProxyProtocol On|OffskTEnable or disable PROXY protocol handling -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]skTDisable processing of PROXY header for certain hosts or networks -RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...skTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPTrustedProxyList filenameskTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoveCharset extension [extension] -...kdhTRemoves any character set associations for a set of file +RedisConnPoolTTL num[units] 15s skETTL used for the connection pool with the Redis server(s) +RedisTimeout num[units] 5s skER/W timeout used for the connection with the Redis server(s) +ReflectorHeader inputheader [outputheader]skdhTReflect an input header to the output headers +RegexDefaultOptions [none] [+|-]seçenek [[+|-]seçenek] ... DOTALL DOLLAR_ENDON +sÇRegex düzenli ifadeleri için öntanımlı/küresel seçenekleri yapılandırır +RegisterHttpMethod yöntem [yöntem [...]]sÇStandart olmayan HTTP yöntemlerini devreye alır +RemoteIPHeader header-fieldskTDeclare the header field which should be parsed for useragent IP addresses +RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...skTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPInternalProxyList filenameskTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPProxiesHeader HeaderFieldNameskTDeclare the header field which will record all intermediate IP addresses +RemoteIPProxyProtocol On|OffskTEnable or disable PROXY protocol handling +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]skTDisable processing of PROXY header for certain hosts or networks +RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...skTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPTrustedProxyList filenameskTDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoveCharset extension [extension] +...kdhTRemoves any character set associations for a set of file extensions -RemoveEncoding extension [extension] -...kdhTRemoves any content encoding associations for a set of file +RemoveEncoding extension [extension] +...kdhTRemoves any content encoding associations for a set of file extensions -RemoveHandler extension [extension] -...kdhTRemoves any handler associations for a set of file +RemoveHandler extension [extension] +...kdhTRemoves any handler associations for a set of file extensions -RemoveInputFilter extension [extension] -...kdhTRemoves any input filter associations for a set of file +RemoveInputFilter extension [extension] +...kdhTRemoves any input filter associations for a set of file extensions -RemoveLanguage extension [extension] -...kdhTRemoves any language associations for a set of file +RemoveLanguage extension [extension] +...kdhTRemoves any language associations for a set of file extensions -RemoveOutputFilter extension [extension] -...kdhTRemoves any output filter associations for a set of file +RemoveOutputFilter extension [extension] +...kdhTRemoves any output filter associations for a set of file extensions -RemoveType extension [extension] -...kdhTRemoves any content type associations for a set of file +RemoveType extension [extension] +...kdhTRemoves any content type associations for a set of file extensions -RequestHeader add|append|edit|edit*|merge|set|setifempty|unset +RequestHeader add|append|edit|edit*|merge|set|setifempty|unset header [[expr=]value [replacement] [early|env=[!]varname|expr=expression]] -skdhEConfigure HTTP request headers -RequestReadTimeout +skdhEConfigure HTTP request headers +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] - handshake=0 header= +skESet timeout values for completing the TLS handshake, receiving + handshake=0 header= +skESet timeout values for completing the TLS handshake, receiving the request headers and/or body from client. -Require [not] entity-name - [entity-name] ...dhTTests whether an authenticated user is authorized by +Require [not] entity-name + [entity-name] ...dhTTests whether an authenticated user is authorized by an authorization provider. -<RequireAll> ... </RequireAll>dhTEnclose a group of authorization directives of which none +<RequireAll> ... </RequireAll>dhTEnclose a group of authorization directives of which none must fail and at least one must succeed for the enclosing directive to succeed. -<RequireAny> ... </RequireAny>dhTEnclose a group of authorization directives of which one +<RequireAny> ... </RequireAny>dhTEnclose a group of authorization directives of which one must succeed for the enclosing directive to succeed. -<RequireNone> ... </RequireNone>dhTEnclose a group of authorization directives of which none +<RequireNone> ... </RequireNone>dhTEnclose a group of authorization directives of which none must succeed for the enclosing directive to not fail. -RewriteBase URL-pathdhESets the base URL for per-directory rewrites - RewriteCond - TestString CondPattern [flags]skdhEDefines a condition under which rewriting will take place +RewriteBase URL-pathdhESets the base URL for per-directory rewrites + RewriteCond + TestString CondPattern [flags]skdhEDefines a condition under which rewriting will take place -RewriteEngine on|off off skdhEEnables or disables runtime rewriting engine -RewriteMap MapName MapType:MapSource +RewriteEngine on|off off skdhEEnables or disables runtime rewriting engine +RewriteMap MapName MapType:MapSource [MapTypeOptions] -skEDefines a mapping function for key-lookup -RewriteOptions OptionsskdhESets some special options for the rewrite engine -RewriteRule - Pattern Substitution [flags]skdhEDefines rules for the rewriting engine -RLimitCPU saniye|max [saniye|max]skdhÇApache httpd alt süreçleri tarafından çalıştırılan süreçlerin +skEDefines a mapping function for key-lookup +RewriteOptions OptionsskdhESets some special options for the rewrite engine +RewriteRule + Pattern Substitution [flags]skdhEDefines rules for the rewriting engine +RLimitCPU saniye|max [saniye|max]skdhÇApache httpd alt süreçleri tarafından çalıştırılan süreçlerin işlemci tüketimine sınırlama getirir. -RLimitMEM bayt-sayısı|max [bayt-sayısı|max] -skdhÇApache httpd alt süreçleri tarafından çalıştırılan süreçlerin +RLimitMEM bayt-sayısı|max [bayt-sayısı|max] +skdhÇApache httpd alt süreçleri tarafından çalıştırılan süreçlerin bellek tüketimine sınırlama getirir. -RLimitNPROC sayı|max [sayı|max]skdhÇApache httpd alt süreçleri tarafından çalıştırılabilecek süreç +RLimitNPROC sayı|max [sayı|max]skdhÇApache httpd alt süreçleri tarafından çalıştırılabilecek süreç sayısına sınırlama getirir. -Satisfy Any|All All dhEInteraction between host-level access control and +Satisfy Any|All All dhEInteraction between host-level access control and user authentication -ScoreBoardFile dosya-yolu logs/apache_runtime +sMÇocuk süreçler için eşgüdüm verisini saklamakta kullanılan +ScoreBoardFile dosya-yolu logs/apache_runtime +sMÇocuk süreçler için eşgüdüm verisini saklamakta kullanılan dosyanın yerini belirler. -Script method cgi-scriptskdTActivates a CGI script for a particular request +Script method cgi-scriptskdTActivates a CGI script for a particular request method. -ScriptAlias [URL-yolu] -dosya-yolu|dizin-yoluskdTBir URL’yi dosya sistemindeki bir yere eşler ve hedefi bir CGI betiği olarak çalıştırır. -ScriptAliasMatch düzenli-ifade -dosya-yolu|dizin-yoluskTBir URL’yi dosya sistemindeki bir yere düzenli ifade kullanarak +ScriptAlias [URL-yolu] +dosya-yolu|dizin-yoluskdTBir URL’yi dosya sistemindeki bir yere eşler ve hedefi bir CGI betiği olarak çalıştırır. +ScriptAliasMatch düzenli-ifade +dosya-yolu|dizin-yoluskTBir URL’yi dosya sistemindeki bir yere düzenli ifade kullanarak eşler ve hedefi bir CGI betiği olarak çalıştırır. -ScriptInterpreterSource Registry|Registry-Strict|Script Script skdhÇCGI betikleri için yorumlayıcı belirleme tekniği -ScriptLog file-pathskTLocation of the CGI script error logfile -ScriptLogBuffer bytes 1024 skTMaximum amount of PUT or POST requests that will be recorded +ScriptInterpreterSource Registry|Registry-Strict|Script Script skdhÇCGI betikleri için yorumlayıcı belirleme tekniği +ScriptLog file-pathskTLocation of the CGI script error logfile +ScriptLogBuffer bytes 1024 skTMaximum amount of PUT or POST requests that will be recorded in the scriptlog -ScriptLogLength bytes 10385760 skTSize limit of the CGI script logfile -ScriptSock file-path cgisock sTThe filename prefix of the socket to use for communication with +ScriptLogLength bytes 10385760 skTSize limit of the CGI script logfile +ScriptSock file-path cgisock sTThe filename prefix of the socket to use for communication with the cgi daemon -SecureListen [IP-address:]portnumber -Certificate-Name [MUTUAL]sTEnables SSL encryption for the specified port -SeeRequestTail On|Off Off sÇİsteğin 63 karakterden büyük olduğu varsayımıyla, mod_status'un +SecureListen [IP-address:]portnumber +Certificate-Name [MUTUAL]sTEnables SSL encryption for the specified port +SeeRequestTail On|Off Off sÇİsteğin 63 karakterden büyük olduğu varsayımıyla, mod_status'un ilk 63 karakteri mi yoksa son 63 karakteri mi göstereceğini belirler. -SendBufferSize bayt-sayısı 0 sMTCP tamponu boyu -ServerAdmin eposta-adresi|URLskÇSunucunun hata iletilerinde istemciye göstereceği eposta adresi +SendBufferSize bayt-sayısı 0 sMTCP tamponu boyu +ServerAdmin eposta-adresi|URLskÇSunucunun hata iletilerinde istemciye göstereceği eposta adresi -ServerAlias konakadı [konakadı] ...kÇİstekleri isme dayalı sanal konaklarla eşleştirilirken +ServerAlias konakadı [konakadı] ...kÇİstekleri isme dayalı sanal konaklarla eşleştirilirken kullanılacak konak adları için başka isimler belirtebilmeyi sağlar. -ServerLimit sayısMAyarlanabilir süreç sayısının üst sınırını belirler. -ServerName [şema://]alan-adı|ip-adresi[:port] -skÇSunucunun özdeşleşeceği konak ismi ve port. -ServerPath URL-yolukÇUyumsuz bir tarayıcı tarafından erişilmesi için bir isme dayalı sanal konak için meşru URL yolu -ServerRoot dizin-yolu /usr/local/apache sÇSunucu yapılandırması için kök dizin -ServerSignature On|Off|EMail Off skdhÇSunucu tarafından üretilen belgelerin dipnotunu ayarlar. - -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sÇServer HTTP yanıt başlığını yapılandırır. - -Session On|Off Off skdhEEnables a session for the current directory or location -SessionCookieName name attributesskdhEName and attributes for the RFC2109 cookie storing the session -SessionCookieName2 name attributesskdhEName and attributes for the RFC2965 cookie storing the session -SessionCookieRemove On|Off Off skdhEControl for whether session cookies should be removed from incoming HTTP headers -SessionCryptoCipher name aes256 skdhDThe crypto cipher to be used to encrypt the session -SessionCryptoDriver name [param[=value]]sDThe crypto driver to be used to encrypt the session -SessionCryptoPassphrase secret [ secret ... ] skdhDThe key used to encrypt the session -SessionCryptoPassphraseFile filenameskdDFile containing keys used to encrypt the session -SessionDBDCookieName name attributesskdhEName and attributes for the RFC2109 cookie storing the session ID -SessionDBDCookieName2 name attributesskdhEName and attributes for the RFC2965 cookie storing the session ID -SessionDBDCookieRemove On|Off On skdhEControl for whether session ID cookies should be removed from incoming HTTP headers -SessionDBDDeleteLabel label deletesession skdhEThe SQL query to use to remove sessions from the database -SessionDBDInsertLabel label insertsession skdhEThe SQL query to use to insert sessions into the database -SessionDBDPerUser On|Off Off skdhEEnable a per user session -SessionDBDSelectLabel label selectsession skdhEThe SQL query to use to select sessions from the database -SessionDBDUpdateLabel label updatesession skdhEThe SQL query to use to update existing sessions in the database -SessionEnv On|Off Off skdhEControl whether the contents of the session are written to the +ServerLimit sayısMAyarlanabilir süreç sayısının üst sınırını belirler. +ServerName [şema://]alan-adı|ip-adresi[:port] +skÇSunucunun özdeşleşeceği konak ismi ve port. +ServerPath URL-yolukÇUyumsuz bir tarayıcı tarafından erişilmesi için bir isme dayalı sanal konak için meşru URL yolu +ServerRoot dizin-yolu /usr/local/apache sÇSunucu yapılandırması için kök dizin +ServerSignature On|Off|EMail Off skdhÇSunucu tarafından üretilen belgelerin dipnotunu ayarlar. + +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sÇServer HTTP yanıt başlığını yapılandırır. + +Session On|Off Off skdhEEnables a session for the current directory or location +SessionCookieName name attributesskdhEName and attributes for the RFC2109 cookie storing the session +SessionCookieName2 name attributesskdhEName and attributes for the RFC2965 cookie storing the session +SessionCookieRemove On|Off Off skdhEControl for whether session cookies should be removed from incoming HTTP headers +SessionCryptoCipher name aes256 skdhDThe crypto cipher to be used to encrypt the session +SessionCryptoDriver name [param[=value]]sDThe crypto driver to be used to encrypt the session +SessionCryptoPassphrase secret [ secret ... ] skdhDThe key used to encrypt the session +SessionCryptoPassphraseFile filenameskdDFile containing keys used to encrypt the session +SessionDBDCookieName name attributesskdhEName and attributes for the RFC2109 cookie storing the session ID +SessionDBDCookieName2 name attributesskdhEName and attributes for the RFC2965 cookie storing the session ID +SessionDBDCookieRemove On|Off On skdhEControl for whether session ID cookies should be removed from incoming HTTP headers +SessionDBDDeleteLabel label deletesession skdhEThe SQL query to use to remove sessions from the database +SessionDBDInsertLabel label insertsession skdhEThe SQL query to use to insert sessions into the database +SessionDBDPerUser On|Off Off skdhEEnable a per user session +SessionDBDSelectLabel label selectsession skdhEThe SQL query to use to select sessions from the database +SessionDBDUpdateLabel label updatesession skdhEThe SQL query to use to update existing sessions in the database +SessionEnv On|Off Off skdhEControl whether the contents of the session are written to the HTTP_SESSION environment variable -SessionExclude pathskdhEDefine URL prefixes for which a session is ignored -SessionExpiryUpdateInterval interval 0 (always update) skdhEDefine the number of seconds a session's expiry may change without +SessionExclude pathskdhEDefine URL prefixes for which a session is ignored +SessionExpiryUpdateInterval interval 0 (always update) skdhEDefine the number of seconds a session's expiry may change without the session being updated -SessionHeader headerskdhEImport session updates from a given HTTP response header -SessionInclude pathskdhEDefine URL prefixes for which a session is valid -SessionMaxAge maxage 0 skdhEDefine a maximum age in seconds for a session -SetEnv ortam-değişkeni [değer]skdhTOrtam değişkenlerini tanımlar. -SetEnvIf öznitelik +SessionHeader headerskdhEImport session updates from a given HTTP response header +SessionInclude pathskdhEDefine URL prefixes for which a session is valid +SessionMaxAge maxage 0 skdhEDefine a maximum age in seconds for a session +SetEnv ortam-değişkeni [değer]skdhTOrtam değişkenlerini tanımlar. +SetEnvIf öznitelik düzifd [!]ort-değişkeni[=değer] - [[!]ort-değişkeni[=değer]] ...skdhTOrtam değişkenlerini isteğin özniteliklerine göre atar. + [[!]ort-değişkeni[=değer]] ...skdhTOrtam değişkenlerini isteğin özniteliklerine göre atar. -SetEnvIfExpr ifade +SetEnvIfExpr ifade [!]ort-değişkeni[=değer] - [[!]ort-değişkeni[=değer]] ...skdhTBir ap_expr ifadesine dayanarak ortam değişkenlerine değer atar -SetEnvIfNoCase öznitelik + [[!]ort-değişkeni[=değer]] ...skdhTBir ap_expr ifadesine dayanarak ortam değişkenlerine değer atar +SetEnvIfNoCase öznitelik düzifd [!]ort-değişkeni[=değer] - [[!]ort-değişkeni[=değer]] ...skdhTOrtam değişkenlerini isteğin özniteliklerinde harf büyüklüğüne + [[!]ort-değişkeni[=değer]] ...skdhTOrtam değişkenlerini isteğin özniteliklerinde harf büyüklüğüne bağlı olmaksızın yapılmış tanımlara göre atar. -SetHandler eylemci-ismi|none|ifadeskdhÇEşleşen tüm dosyaların belli bir eylemci tarafından işlenmesine +SetHandler eylemci-ismi|none|ifadeskdhÇEşleşen tüm dosyaların belli bir eylemci tarafından işlenmesine sebep olur. -SetInputFilter süzgeç[;süzgeç...]skdhÇPOST girdilerini ve istemci isteklerini işleyecek süzgeçleri +SetInputFilter süzgeç[;süzgeç...]skdhÇPOST girdilerini ve istemci isteklerini işleyecek süzgeçleri belirler. -SetOutputFilter süzgeç[;süzgeç...]skdhÇSunucunun yanıtlarını işleyecek süzgeçleri belirler. -SSIEndTag tag "-->" skTString that ends an include element -SSIErrorMsg message "[an error occurred +skdhTError message displayed when there is an SSI +SetOutputFilter süzgeç[;süzgeç...]skdhÇSunucunun yanıtlarını işleyecek süzgeçleri belirler. +SSIEndTag tag "-->" skTString that ends an include element +SSIErrorMsg message "[an error occurred +skdhTError message displayed when there is an SSI error -SSIETag on|off off dhTControls whether ETags are generated by the server. -SSILastModified on|off off dhTControls whether Last-Modified headers are generated by the +SSIETag on|off off dhTControls whether ETags are generated by the server. +SSILastModified on|off off dhTControls whether Last-Modified headers are generated by the server. -SSILegacyExprParser on|off off dhTEnable compatibility mode for conditional expressions. -SSIStartTag tag "<!--#" skTString that starts an include element -SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +skdhTConfigures the format in which date strings are +SSILegacyExprParser on|off off dhTEnable compatibility mode for conditional expressions. +SSIStartTag tag "<!--#" skTString that starts an include element +SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +skdhTConfigures the format in which date strings are displayed -SSIUndefinedEcho string "(none)" skdhTString displayed when an unset variable is echoed -SSLCACertificateFile file-pathskEFile of concatenated PEM-encoded CA Certificates +SSIUndefinedEcho string "(none)" skdhTString displayed when an unset variable is echoed +SSLCACertificateFile file-pathskEFile of concatenated PEM-encoded CA Certificates for Client Auth -SSLCACertificatePath directory-pathskEDirectory of PEM-encoded CA Certificates for +SSLCACertificatePath directory-pathskEDirectory of PEM-encoded CA Certificates for Client Auth -SSLCADNRequestFile file-pathskEFile of concatenated PEM-encoded CA Certificates +SSLCADNRequestFile file-pathskEFile of concatenated PEM-encoded CA Certificates for defining acceptable CA names -SSLCADNRequestPath directory-pathskEDirectory of PEM-encoded CA Certificates for +SSLCADNRequestPath directory-pathskEDirectory of PEM-encoded CA Certificates for defining acceptable CA names -SSLCARevocationCheck chain|leaf|none [flags ...] none skEEnable CRL-based revocation checking -SSLCARevocationFile file-pathskEFile of concatenated PEM-encoded CA CRLs for +SSLCARevocationCheck chain|leaf|none [flags ...] none skEEnable CRL-based revocation checking +SSLCARevocationFile file-pathskEFile of concatenated PEM-encoded CA CRLs for Client Auth -SSLCARevocationPath directory-pathskEDirectory of PEM-encoded CA CRLs for +SSLCARevocationPath directory-pathskEDirectory of PEM-encoded CA CRLs for Client Auth -SSLCertificateChainFile file-pathskEFile of PEM-encoded Server CA Certificates -SSLCertificateFile file-path|certidskEServer PEM-encoded X.509 certificate data file or token identifier -SSLCertificateKeyFile file-path|keyidskEServer PEM-encoded private key file -SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +skdhECipher Suite available for negotiation in SSL +SSLCertificateChainFile file-pathskEFile of PEM-encoded Server CA Certificates +SSLCertificateFile file-path|certidskEServer PEM-encoded X.509 certificate data file or token identifier +SSLCertificateKeyFile file-path|keyidskEServer PEM-encoded private key file +SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +skdhECipher Suite available for negotiation in SSL handshake -SSLCompression on|off off skEEnable compression on the SSL level -SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator -SSLEngine on|off|optional off skESSL Engine Operation Switch -SSLFIPS on|off off sESSL FIPS mode Switch -SSLHonorCipherOrder on|off off skEOption to prefer the server's cipher preference order -SSLInsecureRenegotiation on|off off skEOption to enable support for insecure renegotiation -SSLOCSPDefaultResponder uriskESet the default responder URI for OCSP validation -SSLOCSPEnable on|leaf|off off skEEnable OCSP validation of the client certificate chain -SSLOCSPNoverify on|off off skEskip the OCSP responder certificates verification -SSLOCSPOverrideResponder on|off off skEForce use of the default responder URI for OCSP validation -SSLOCSPProxyURL urlskEProxy URL to use for OCSP requests -SSLOCSPResponderCertificateFile fileskESet of trusted PEM encoded OCSP responder certificates -SSLOCSPResponderTimeout seconds 10 skETimeout for OCSP queries -SSLOCSPResponseMaxAge seconds -1 skEMaximum allowable age for OCSP responses -SSLOCSPResponseTimeSkew seconds 300 skEMaximum allowable time skew for OCSP response validation -SSLOCSPUseRequestNonce on|off on skEUse a nonce within OCSP queries -SSLOpenSSLConfCmd command-name command-valueskEConfigure OpenSSL parameters through its SSL_CONF API -SSLOptions [+|-]option ...skdhEConfigure various SSL engine run-time options -SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private +SSLCompression on|off off skEEnable compression on the SSL level +SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator +SSLEngine on|off|optional off skESSL Engine Operation Switch +SSLFIPS on|off off sESSL FIPS mode Switch +SSLHonorCipherOrder on|off off skEOption to prefer the server's cipher preference order +SSLInsecureRenegotiation on|off off skEOption to enable support for insecure renegotiation +SSLOCSPDefaultResponder uriskESet the default responder URI for OCSP validation +SSLOCSPEnable on|leaf|off off skEEnable OCSP validation of the client certificate chain +SSLOCSPNoverify on|off off skEskip the OCSP responder certificates verification +SSLOCSPOverrideResponder on|off off skEForce use of the default responder URI for OCSP validation +SSLOCSPProxyURL urlskEProxy URL to use for OCSP requests +SSLOCSPResponderCertificateFile fileskESet of trusted PEM encoded OCSP responder certificates +SSLOCSPResponderTimeout seconds 10 skETimeout for OCSP queries +SSLOCSPResponseMaxAge seconds -1 skEMaximum allowable age for OCSP responses +SSLOCSPResponseTimeSkew seconds 300 skEMaximum allowable time skew for OCSP response validation +SSLOCSPUseRequestNonce on|off on skEUse a nonce within OCSP queries +SSLOpenSSLConfCmd command-name command-valueskEConfigure OpenSSL parameters through its SSL_CONF API +SSLOptions [+|-]option ...skdhEConfigure various SSL engine run-time options +SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private keys -SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +skEConfigure usable SSL/TLS protocol versions -SSLProxyCACertificateFile file-pathskvEFile of concatenated PEM-encoded CA Certificates +SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +skEConfigure usable SSL/TLS protocol versions +SSLProxyCACertificateFile file-pathskvEFile of concatenated PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCACertificatePath directory-pathskvEDirectory of PEM-encoded CA Certificates for +SSLProxyCACertificatePath directory-pathskvEDirectory of PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCARevocationCheck chain|leaf|none none skvEEnable CRL-based revocation checking for Remote Server Auth -SSLProxyCARevocationFile file-pathskvEFile of concatenated PEM-encoded CA CRLs for +SSLProxyCARevocationCheck chain|leaf|none none skvEEnable CRL-based revocation checking for Remote Server Auth +SSLProxyCARevocationFile file-pathskvEFile of concatenated PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCARevocationPath directory-pathskvEDirectory of PEM-encoded CA CRLs for +SSLProxyCARevocationPath directory-pathskvEDirectory of PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCheckPeerCN on|off on skvEWhether to check the remote server certificate's CN field +SSLProxyCheckPeerCN on|off on skvEWhether to check the remote server certificate's CN field -SSLProxyCheckPeerExpire on|off on skvEWhether to check if remote server certificate is expired +SSLProxyCheckPeerExpire on|off on skvEWhether to check if remote server certificate is expired -SSLProxyCheckPeerName on|off on skvEConfigure host name checking for remote server certificates +SSLProxyCheckPeerName on|off on skvEConfigure host name checking for remote server certificates -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +skvECipher Suite available for negotiation in SSL +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +skvECipher Suite available for negotiation in SSL proxy handshake -SSLProxyEngine on|off off skvESSL Proxy Engine Operation Switch -SSLProxyMachineCertificateChainFile filenameskvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate -SSLProxyMachineCertificateFile filenameskvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy -SSLProxyMachineCertificatePath directoryskvEDirectory of PEM-encoded client certificates and keys to be used by the proxy -SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +skvEConfigure usable SSL protocol flavors for proxy usage -SSLProxyVerify level none skvEType of remote server Certificate verification -SSLProxyVerifyDepth number 1 skvEMaximum depth of CA Certificates in Remote Server +SSLProxyEngine on|off off skvESSL Proxy Engine Operation Switch +SSLProxyMachineCertificateChainFile filenameskvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate +SSLProxyMachineCertificateFile filenameskvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy +SSLProxyMachineCertificatePath directoryskvEDirectory of PEM-encoded client certificates and keys to be used by the proxy +SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +skvEConfigure usable SSL protocol flavors for proxy usage +SSLProxyVerify level none skvEType of remote server Certificate verification +SSLProxyVerifyDepth number 1 skvEMaximum depth of CA Certificates in Remote Server Certificate verification -SSLRandomSeed context source -[bytes]sEPseudo Random Number Generator (PRNG) seeding +SSLRandomSeed context source +[bytes]sEPseudo Random Number Generator (PRNG) seeding source -SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer -SSLRequire expressiondhEAllow access only when an arbitrarily complex +SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer +SSLRequire expressiondhEAllow access only when an arbitrarily complex boolean expression is true -SSLRequireSSLdhEDeny access when SSL is not used for the +SSLRequireSSLdhEDeny access when SSL is not used for the HTTP request -SSLSessionCache type none sEType of the global/inter-process SSL Session +SSLSessionCache type none sEType of the global/inter-process SSL Session Cache -SSLSessionCacheTimeout seconds 300 skENumber of seconds before an SSL session expires +SSLSessionCacheTimeout seconds 300 skENumber of seconds before an SSL session expires in the Session Cache -SSLSessionTicketKeyFile file-pathskEPersistent encryption/decryption key for TLS session tickets -SSLSessionTickets on|off on skEEnable or disable use of TLS session tickets -SSLSRPUnknownUserSeed secret-stringskESRP unknown user seed -SSLSRPVerifierFile file-pathskEPath to SRP verifier file -SSLStaplingCache typesEConfigures the OCSP stapling cache -SSLStaplingErrorCacheTimeout seconds 600 skENumber of seconds before expiring invalid responses in the OCSP stapling cache -SSLStaplingFakeTryLater on|off on skESynthesize "tryLater" responses for failed OCSP stapling queries -SSLStaplingForceURL uriskEOverride the OCSP responder URI specified in the certificate's AIA extension -SSLStaplingResponderTimeout seconds 10 skETimeout for OCSP stapling queries -SSLStaplingResponseMaxAge seconds -1 skEMaximum allowable age for OCSP stapling responses -SSLStaplingResponseTimeSkew seconds 300 skEMaximum allowable time skew for OCSP stapling response validation -SSLStaplingReturnResponderErrors on|off on skEPass stapling related OCSP errors on to client -SSLStaplingStandardCacheTimeout seconds 3600 skENumber of seconds before expiring responses in the OCSP stapling cache -SSLStrictSNIVHostCheck on|off off skEWhether to allow non-SNI clients to access a name-based virtual +SSLSessionTicketKeyFile file-pathskEPersistent encryption/decryption key for TLS session tickets +SSLSessionTickets on|off on skEEnable or disable use of TLS session tickets +SSLSRPUnknownUserSeed secret-stringskESRP unknown user seed +SSLSRPVerifierFile file-pathskEPath to SRP verifier file +SSLStaplingCache typesEConfigures the OCSP stapling cache +SSLStaplingErrorCacheTimeout seconds 600 skENumber of seconds before expiring invalid responses in the OCSP stapling cache +SSLStaplingFakeTryLater on|off on skESynthesize "tryLater" responses for failed OCSP stapling queries +SSLStaplingForceURL uriskEOverride the OCSP responder URI specified in the certificate's AIA extension +SSLStaplingResponderTimeout seconds 10 skETimeout for OCSP stapling queries +SSLStaplingResponseMaxAge seconds -1 skEMaximum allowable age for OCSP stapling responses +SSLStaplingResponseTimeSkew seconds 300 skEMaximum allowable time skew for OCSP stapling response validation +SSLStaplingReturnResponderErrors on|off on skEPass stapling related OCSP errors on to client +SSLStaplingStandardCacheTimeout seconds 3600 skENumber of seconds before expiring responses in the OCSP stapling cache +SSLStrictSNIVHostCheck on|off off skEWhether to allow non-SNI clients to access a name-based virtual host. -SSLUserName varnamesdhEVariable name to determine user name -SSLUseStapling on|off off skEEnable stapling of OCSP responses in the TLS handshake -SSLVerifyClient level none skdhEType of Client Certificate verification -SSLVerifyDepth number 1 skdhEMaximum depth of CA Certificates in Client +SSLUserName varnamesdhEVariable name to determine user name +SSLUseStapling on|off off skEEnable stapling of OCSP responses in the TLS handshake +SSLVerifyClient level none skdhEType of Client Certificate verification +SSLVerifyDepth number 1 skdhEMaximum depth of CA Certificates in Client Certificate verification -StartServers sayısMSunucunun başlatılması sırasında oluşturulan çocuk süreçlerin +StartServers sayısMSunucunun başlatılması sırasında oluşturulan çocuk süreçlerin sayısını belirler. -StartThreads sayısMSunucunun başlatılması sırasında oluşturulan evrelerin sayısını +StartThreads sayısMSunucunun başlatılması sırasında oluşturulan evrelerin sayısını belirler. -StrictHostCheck ON|OFF OFF skÇSunucunun, istenen konak adının, isteği işleyen sanal konakta +StrictHostCheck ON|OFF OFF skÇSunucunun, istenen konak adının, isteği işleyen sanal konakta listelenmesini gerektirip gerektirmediğini denetler -Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content -SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns -SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size -Suexec On|OffsTsuEXEC özelliğini etkin veya etkisiz yapar -SuexecUserGroup Kullanıcı GrupskECGI betiklerini çalıştıracak kullanıcı ve grup belirtilir. +Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content +SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns +SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size +Suexec On|OffsTsuEXEC özelliğini etkin veya etkisiz yapar +SuexecUserGroup Kullanıcı GrupskECGI betiklerini çalıştıracak kullanıcı ve grup belirtilir. -ThreadLimit sayısMÇocuk süreç başına ayarlanabilir evre sayısının üst sınırını +ThreadLimit sayısMÇocuk süreç başına ayarlanabilir evre sayısının üst sınırını belirler. -ThreadsPerChild sayısMHer çocuk süreç tarafından oluşturulan evrelerin sayısını +ThreadsPerChild sayısMHer çocuk süreç tarafından oluşturulan evrelerin sayısını belirler. -ThreadStackSize boyutsMİstemci bağlantılarını elde eden evreler tarafından kullanılan +ThreadStackSize boyutsMİstemci bağlantılarını elde eden evreler tarafından kullanılan yığıtın bayt cinsinden uzunluğunu belirler. -TimeOut saniye 60 skÇBir istek için başarısız olmadan önce belirli olayların +TimeOut saniye 60 skÇBir istek için başarısız olmadan önce belirli olayların gerçekleşmesi için sunucunun geçmesini bekleyeceği süre. +TLSCertificate cert_file [key_file]skDadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)skDdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)skDdefines ciphers that are not to be used. +TLSEngine [address:]portsDdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offskD- +TLSOptions [+|-]optionskdhDenables SSL variables for requests. +TLSProtocol version+skDspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemskvDsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)skvDdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)skvDdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offskvDenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]skvDadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+skvDspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsDspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsDenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on skÇTRACE isteklerinde davranış şeklini belirler TransferLog dosya|borulu-süreç diff -Nru apache2-2.4.51/docs/manual/mod/quickreference.html.zh-cn.utf8 apache2-2.4.52/docs/manual/mod/quickreference.html.zh-cn.utf8 --- apache2-2.4.51/docs/manual/mod/quickreference.html.zh-cn.utf8 2021-10-05 08:15:56.000000000 +0000 +++ apache2-2.4.52/docs/manual/mod/quickreference.html.zh-cn.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -703,445 +703,461 @@ MDChallengeDns01 path-to-commandsX- MDContactEmail addresssX- MDDriveMode always|auto|manual auto sXformer name of MDRenewMode. -MDHttpProxy urlsXDefine a proxy for outgoing connections. -MDMember hostnamesXAdditional hostname for the managed domain. -MDMembers auto|manual auto sXControl if the alias domain names are automatically added. -MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains -MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. -MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. -MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. -<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. -MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. -MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. -MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. -MDRenewWindow duration 33% sXControl when a certificate will be renewed. -MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. -MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. -MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. -MDStapling on|off off sXEnable stapling for all or a particular MDomain. -MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. -MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. -MDStoreDir path md sXPath on the local file system to store the Managed Domains data. -MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. -MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections -MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. +MDExternalAccountBinding key-id hmac-64 | none | file none sX- +MDHttpProxy urlsXDefine a proxy for outgoing connections. +MDMember hostnamesXAdditional hostname for the managed domain. +MDMembers auto|manual auto sXControl if the alias domain names are automatically added. +MDMessageCmd path-to-cmd optional-argssXHandle events for Manage Domains +MDMustStaple on|off off sXControl if new certificates carry the OCSP Must Staple flag. +MDNotifyCmd path [ args ]sXRun a program when a Managed Domain is ready. +MDomain dns-name [ other-dns-name... ] [auto|manual]sXDefine list of domain names that belong to one group. +<MDomainSet dns-name [ other-dns-name... ]>...</MDomainSet>sXContainer for directives applied to the same managed domains. +MDPortMap map1 [ map2 ] http:80 https:443 sXMap external to internal ports for domain ownership verification. +MDPrivateKeys type [ params... ] RSA 2048 sXSet type and size of the private keys generated. +MDRenewMode always|auto|manual auto sXControls if certificates shall be renewed. +MDRenewWindow duration 33% sXControl when a certificate will be renewed. +MDRequireHttps off|temporary|permanent off sXRedirects http: traffic to https: for Managed Domains. +MDServerStatus on|off on sXControl if Managed Domain information is added to server-status. +MDStapleOthers on|off on sXEnable stapling for certificates not managed by mod_md. +MDStapling on|off off sXEnable stapling for all or a particular MDomain. +MDStaplingKeepResponse duration 7d sXControls when old responses should be removed. +MDStaplingRenewWindow duration 33% sXControl when the stapling responses will be renewed. +MDStoreDir path md sXPath on the local file system to store the Managed Domains data. +MDWarnWindow duration 10% sXDefine the time window when you want to be warned about an expiring certificate. +MemcacheConnTTL num[units] 15s svEKeepalive time for idle connections +MergeSlashes ON|OFF ON svCControls whether the server merges consecutive slashes in URLs. -MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers -MetaDir directory .web svdhEName of the directory to find CERN-style meta information +MergeTrailers [on|off] off svCDetermines whether trailers are merged into headers +MetaDir directory .web svdhEName of the directory to find CERN-style meta information files -MetaFiles on|off off svdhEActivates CERN meta-file processing -MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style +MetaFiles on|off off svdhEActivates CERN meta-file processing +MetaSuffix suffix .meta svdhEFile name suffix for the file containing CERN-style meta information -MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents +MimeMagicFile file-pathsvEEnable MIME-type determination based on file contents using the specified magic file -MinSpareServers number 5 sMMinimum number of idle child server processes -MinSpareThreads numbersMMinimum number of idle threads available to handle request +MinSpareServers number 5 sMMinimum number of idle child server processes +MinSpareThreads numbersMMinimum number of idle threads available to handle request spikes -MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time -ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate -ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info +MMapFile file-path [file-path] ...sXMap a list of files into memory at startup time +ModemStandard V.21|V.26bis|V.32|V.34|V.92dXModem standard to simulate +ModMimeUsePathInfo On|Off Off dBTells mod_mime to treat path_info components as part of the filename -MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers -[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for +MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers +[Handlers|Filters] NegotiatedOnly svdhBThe types of files that will be included when searching for a matching file with MultiViews -Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all +Mutex mechanism [default|mutex-name] ... [OmitPID] default sCConfigures mutex mechanism and lock file directory for all or specified mutexes -NameVirtualHost addr[:port]sCDEPRECATED: Designates an IP address for name-virtual +NameVirtualHost addr[:port]sCDEPRECATED: Designates an IP address for name-virtual hosting -NoProxy host [host] ...svEHosts, domains, or networks that will be connected to +NoProxy host [host] ...svEHosts, domains, or networks that will be connected to directly -NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates -NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request -Options - [+|-]option [[+|-]option] ... FollowSymlinks svdhCConfigures what features are available in a particular +NWSSLTrustedCerts filename [filename] ...sBList of additional client certificates +NWSSLUpgradeable [IP-address:]portnumbersBAllows a connection to be upgraded to an SSL connection upon request +Options + [+|-]option [[+|-]option] ... FollowSymlinks svdhCConfigures what features are available in a particular directory - Order ordering Deny,Allow dhEControls the default access state and the order in which + Order ordering Deny,Allow dhEControls the default access state and the order in which Allow and Deny are evaluated. -OutputSed sed-commanddhXSed command for filtering response content -PassEnv env-variable [env-variable] -...svdhBPasses environment variables from the shell -PidFile filename logs/httpd.pid sMFile where the server records the process ID +OutputSed sed-commanddhXSed command for filtering response content +PassEnv env-variable [env-variable] +...svdhBPasses environment variables from the shell +PidFile filename logs/httpd.pid sMFile where the server records the process ID of the daemon -PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against +PrivilegesMode FAST|SECURE|SELECTIVE FAST svdXTrade off processing speed and efficiency vs security against malicious privileges-aware code. -Protocol protocolsvCProtocol for a listening socket -ProtocolEcho On|Off Off svXTurn the echo server on or off -Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host -ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation -<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources -Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server -ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers -ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a +Protocol protocolsvCProtocol for a listening socket +ProtocolEcho On|Off Off svXTurn the echo server on or off +Protocols protocol ... http/1.1 svCProtocols available for a server/virtual host +ProtocolsHonorOrder On|Off On svCDetermines if order of Protocols determines precedence during negotiation +<Proxy wildcard-url> ...</Proxy>svEContainer for directives applied to proxied resources +Proxy100Continue Off|On On svdEForward 100-continue expectation to the origin server +ProxyAddHeaders Off|On On svdEAdd proxy information in X-Forwarded-* headers +ProxyBadHeader IsError|Ignore|StartBody IsError svEDetermines how to handle bad header lines in a response -ProxyBlock *|word|host|domain -[word|host|domain] ...svEWords, hosts, or domains that are banned from being +ProxyBlock *|word|host|domain +[word|host|domain] ...svEWords, hosts, or domains that are banned from being proxied -ProxyDomain DomainsvEDefault domain name for proxied requests -ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content -ProxyExpressDBMFile pathnamesvEPathname to DBM file. -ProxyExpressDBMType type default svEDBM type of file. -ProxyExpressEnable on|off off svEEnable the module functionality. -ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application -ProxyFCGISetEnvIf conditional-expression +ProxyDomain DomainsvEDefault domain name for proxied requests +ProxyErrorOverride Off|On [code ...] Off svdEOverride error pages for proxied content +ProxyExpressDBMFile pathnamesvEPathname to DBM file. +ProxyExpressDBMType type default svEDBM type of file. +ProxyExpressEnable on|off off svEEnable the module functionality. +ProxyFCGIBackendType FPM|GENERIC FPM svdhESpecify the type of backend FastCGI application +ProxyFCGISetEnvIf conditional-expression [!]environment-variable-name - [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up -ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings -ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server -ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing -ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response -ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters -ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers -ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and + [value-expression]svdhEAllow variables sent to FastCGI servers to be fixed up +ProxyFtpDirCharset character_set ISO-8859-1 svdEDefine the character set for proxied FTP listings +ProxyFtpEscapeWildcards on|off on svdEWhether wildcards in requested filenames are escaped when sent to the FTP server +ProxyFtpListOnWildcard on|off on svdEWhether wildcards in requested filenames trigger a file listing +ProxyHCExpr name {ap_expr expression}svECreates a named condition expression to use to determine health of the backend based on its response +ProxyHCTemplate name parameter=setting [...]svECreates a named template for setting various health check parameters +ProxyHCTPsize size 16 sESets the total server-wide size of the threadpool used for the health check workers +ProxyHTMLBufSize bytes 8192 svdBSets the buffer size increment for buffering inline scripts and stylesheets. -ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. -ProxyHTMLDocType HTML|XHTML [Legacy]
    OR -
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. -ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. -ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. -ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, +ProxyHTMLCharsetOut Charset | *svdBSpecify a charset for mod_proxy_html output. +ProxyHTMLDocType HTML|XHTML [Legacy]
    OR +
    ProxyHTMLDocType fpi [SGML|XML]
    svdBSets an HTML or XHTML document type declaration. +ProxyHTMLEnable On|Off Off svdBTurns the proxy_html filter on or off. +ProxyHTMLEvents attribute [attribute ...]svdBSpecify attributes to treat as scripting events. +ProxyHTMLExtended On|Off Off svdBDetermines whether to fix links in inline scripts, stylesheets, and scripting events. -ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. -ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of +ProxyHTMLFixups [lowercase] [dospath] [reset]svdBFixes for simple HTML errors. +ProxyHTMLInterp On|Off Off svdBEnables per-request interpolation of ProxyHTMLURLMap rules. -ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. -ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML +ProxyHTMLLinks element attribute [attribute2 ...]svdBSpecify HTML elements that have URL attributes to be rewritten. +ProxyHTMLMeta On|Off Off svdBTurns on or off extra pre-parsing of metadata in HTML <head> sections. -ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. -ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links -ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer -<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched +ProxyHTMLStripComments On|Off Off svdBDetermines whether to strip HTML comments. +ProxyHTMLURLMap from-pattern to-pattern [flags] [cond]svdBDefines a rule to rewrite HTML links +ProxyIOBufferSize bytes 8192 svEDetermine size of internal data throughput buffer +<ProxyMatch regex> ...</ProxyMatch>svEContainer for directives applied to regular-expression-matched proxied resources -ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded +ProxyMaxForwards number -1 svEMaximum number of proxies that a request can be forwarded through -ProxyPass [path] !|url [key=value - [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space -ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server -ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations -ProxyPassMatch [regex] !|url [key=value - [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions -ProxyPassReverse [path] url -[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse +ProxyPass [path] !|url [key=value + [key=value ...]] [nocanon] [interpolate] [noquery]svdEMaps remote servers into the local server URL-space +ProxyPassInherit On|Off On svEInherit ProxyPass directives defined from the main server +ProxyPassInterpolateEnv On|Off Off svdEEnable Environment Variable interpolation in Reverse Proxy configurations +ProxyPassMatch [regex] !|url [key=value + [key=value ...]]svdEMaps remote servers into the local server URL-space using regular expressions +ProxyPassReverse [path] url +[interpolate]svdEAdjusts the URL in HTTP response headers sent from a reverse proxied server -ProxyPassReverseCookieDomain internal-domain -public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- +ProxyPassReverseCookieDomain internal-domain +public-domain [interpolate]svdEAdjusts the Domain string in Set-Cookie headers from a reverse- proxied server -ProxyPassReverseCookiePath internal-path -public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- +ProxyPassReverseCookiePath internal-path +public-path [interpolate]svdEAdjusts the Path string in Set-Cookie headers from a reverse- proxied server -ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy +ProxyPreserveHost On|Off Off svdEUse incoming Host HTTP request header for proxy request -ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP +ProxyReceiveBufferSize bytes 0 svENetwork buffer size for proxied HTTP and FTP connections -ProxyRemote match remote-serversvERemote proxy used to handle certain requests -ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular +ProxyRemote match remote-serversvERemote proxy used to handle certain requests +ProxyRemoteMatch regex remote-serversvERemote proxy used to handle requests matched by regular expressions -ProxyRequests On|Off Off svEEnables forward (standard) proxy requests -ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the +ProxyRequests On|Off Off svEEnables forward (standard) proxy requests +ProxySCGIInternalRedirect On|Off|Headername On svdEEnable or disable internal redirect responses from the backend -ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response +ProxySCGISendfile On|Off|Headername Off svdEEnable evaluation of X-Sendfile pseudo response header -ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters -ProxySourceAddress addresssvESet local IP address for outgoing proxy connections -ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status -ProxyTimeout secondssvENetwork timeout for proxied requests -ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response +ProxySet url key=value [key=value ...]svdESet various Proxy balancer or member parameters +ProxySourceAddress addresssvESet local IP address for outgoing proxy connections +ProxyStatus Off|On|Full Off svEShow Proxy LoadBalancer status in mod_status +ProxyTimeout secondssvENetwork timeout for proxied requests +ProxyVia On|Off|Full|Block Off svEInformation provided in the Via HTTP response header for proxied requests -ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request -QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is +ProxyWebsocketFallbackToProxyHttp On|Off On svEInstructs this module to let mod_proxy_http handle the request +QualifyRedirectURL On|Off Off svdCControls whether the REDIRECT_URL environment variable is fully qualified -ReadBufferSize bytes 8192 svdCSize of the buffers used to read data -ReadmeName filenamesvdhBName of the file that will be inserted at the end +ReadBufferSize bytes 8192 svdCSize of the buffers used to read data +ReadmeName filenamesvdhBName of the file that will be inserted at the end of the index listing -ReceiveBufferSize bytes 0 sMTCP receive buffer size -Redirect [status] [URL-path] -URLsvdhBSends an external redirect asking the client to fetch +ReceiveBufferSize bytes 0 sMTCP receive buffer size +Redirect [status] [URL-path] +URLsvdhBSends an external redirect asking the client to fetch a different URL -RedirectMatch [status] regex -URLsvdhBSends an external redirect based on a regular expression match +RedirectMatch [status] regex +URLsvdhBSends an external redirect based on a regular expression match of the current URL -RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch +RedirectPermanent URL-path URLsvdhBSends an external permanent redirect asking the client to fetch a different URL -RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch +RedirectTemp URL-path URLsvdhBSends an external temporary redirect asking the client to fetch a different URL -RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) -RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) -ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers -RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes -RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods -RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses -RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses -RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling -RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks -RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value -RemoveCharset extension [extension] -...vdhBRemoves any character set associations for a set of file +RedisConnPoolTTL num[units] 15s svETTL used for the connection pool with the Redis server(s) +RedisTimeout num[units] 5s svER/W timeout used for the connection with the Redis server(s) +ReflectorHeader inputheader [outputheader]svdhBReflect an input header to the output headers +RegexDefaultOptions [none] [+|-]option [[+|-]option] ... DOTALL DOLLAR_ENDON +sCAllow to configure global/default options for regexes +RegisterHttpMethod method [method [...]]sCRegister non-standard HTTP methods +RemoteIPHeader header-fieldsvBDeclare the header field which should be parsed for useragent IP addresses +RemoteIPInternalProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPInternalProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPProxiesHeader HeaderFieldNamesvBDeclare the header field which will record all intermediate IP addresses +RemoteIPProxyProtocol On|OffsvBEnable or disable PROXY protocol handling +RemoteIPProxyProtocolExceptions host|range [host|range] [host|range]svBDisable processing of PROXY header for certain hosts or networks +RemoteIPTrustedProxy proxy-ip|proxy-ip/subnet|hostname ...svBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoteIPTrustedProxyList filenamesvBDeclare client intranet IP addresses trusted to present the RemoteIPHeader value +RemoveCharset extension [extension] +...vdhBRemoves any character set associations for a set of file extensions -RemoveEncoding extension [extension] -...vdhBRemoves any content encoding associations for a set of file +RemoveEncoding extension [extension] +...vdhBRemoves any content encoding associations for a set of file extensions -RemoveHandler extension [extension] -...vdhBRemoves any handler associations for a set of file +RemoveHandler extension [extension] +...vdhBRemoves any handler associations for a set of file extensions -RemoveInputFilter extension [extension] -...vdhBRemoves any input filter associations for a set of file +RemoveInputFilter extension [extension] +...vdhBRemoves any input filter associations for a set of file extensions -RemoveLanguage extension [extension] -...vdhBRemoves any language associations for a set of file +RemoveLanguage extension [extension] +...vdhBRemoves any language associations for a set of file extensions -RemoveOutputFilter extension [extension] -...vdhBRemoves any output filter associations for a set of file +RemoveOutputFilter extension [extension] +...vdhBRemoves any output filter associations for a set of file extensions -RemoveType extension [extension] -...vdhBRemoves any content type associations for a set of file +RemoveType extension [extension] +...vdhBRemoves any content type associations for a set of file extensions -RequestHeader add|append|edit|edit*|merge|set|setifempty|unset +RequestHeader add|append|edit|edit*|merge|set|setifempty|unset header [[expr=]value [replacement] [early|env=[!]varname|expr=expression]] -svdhEConfigure HTTP request headers -RequestReadTimeout +svdhEConfigure HTTP request headers +RequestReadTimeout [handshake=timeout[-maxtimeout][,MinRate=rate] [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate] - handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving + handshake=0 header= +svESet timeout values for completing the TLS handshake, receiving the request headers and/or body from client. -Require [not] entity-name - [entity-name] ...dhBTests whether an authenticated user is authorized by +Require [not] entity-name + [entity-name] ...dhBTests whether an authenticated user is authorized by an authorization provider. -<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none +<RequireAll> ... </RequireAll>dhBEnclose a group of authorization directives of which none must fail and at least one must succeed for the enclosing directive to succeed. -<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one +<RequireAny> ... </RequireAny>dhBEnclose a group of authorization directives of which one must succeed for the enclosing directive to succeed. -<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none +<RequireNone> ... </RequireNone>dhBEnclose a group of authorization directives of which none must succeed for the enclosing directive to not fail. -RewriteBase URL-pathdhESets the base URL for per-directory rewrites - RewriteCond - TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place +RewriteBase URL-pathdhESets the base URL for per-directory rewrites + RewriteCond + TestString CondPattern [flags]svdhEDefines a condition under which rewriting will take place -RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine -RewriteMap MapName MapType:MapSource +RewriteEngine on|off off svdhEEnables or disables runtime rewriting engine +RewriteMap MapName MapType:MapSource [MapTypeOptions] -svEDefines a mapping function for key-lookup -RewriteOptions OptionssvdhESets some special options for the rewrite engine -RewriteRule - Pattern Substitution [flags]svdhEDefines rules for the rewriting engine -RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched +svEDefines a mapping function for key-lookup +RewriteOptions OptionssvdhESets some special options for the rewrite engine +RewriteRule + Pattern Substitution [flags]svdhEDefines rules for the rewriting engine +RLimitCPU seconds|max [seconds|max]svdhCLimits the CPU consumption of processes launched by Apache httpd children -RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched +RLimitMEM bytes|max [bytes|max]svdhCLimits the memory consumption of processes launched by Apache httpd children -RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by +RLimitNPROC number|max [number|max]svdhCLimits the number of processes that can be launched by processes launched by Apache httpd children -Satisfy Any|All All dhEInteraction between host-level access control and +Satisfy Any|All All dhEInteraction between host-level access control and user authentication -ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for +ScoreBoardFile file-path logs/apache_runtime +sMLocation of the file used to store coordination data for the child processes -Script method cgi-scriptsvdBActivates a CGI script for a particular request +Script method cgi-scriptsvdBActivates a CGI script for a particular request method. -ScriptAlias [URL-path] -file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the +ScriptAlias [URL-path] +file-path|directory-pathsvdBMaps a URL to a filesystem location and designates the target as a CGI script -ScriptAliasMatch regex -file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression +ScriptAliasMatch regex +file-path|directory-pathsvBMaps a URL to a filesystem location using a regular expression and designates the target as a CGI script -ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI +ScriptInterpreterSource Registry|Registry-Strict|Script Script svdhCTechnique for locating the interpreter for CGI scripts -ScriptLog file-pathsvBLocation of the CGI script error logfile -ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded +ScriptLog file-pathsvBLocation of the CGI script error logfile +ScriptLogBuffer bytes 1024 svBMaximum amount of PUT or POST requests that will be recorded in the scriptlog -ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile -ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with +ScriptLogLength bytes 10385760 svBSize limit of the CGI script logfile +ScriptSock file-path cgisock sBThe filename prefix of the socket to use for communication with the cgi daemon -SecureListen [IP-address:]portnumber -Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port -SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters +SecureListen [IP-address:]portnumber +Certificate-Name [MUTUAL]sBEnables SSL encryption for the specified port +SeeRequestTail On|Off Off sCDetermine if mod_status displays the first 63 characters of a request or the last 63, assuming the request itself is greater than 63 chars. -SendBufferSize bytes 0 sMTCP buffer size -ServerAdmin email-address|URLsvCEmail address that the server includes in error +SendBufferSize bytes 0 sMTCP buffer size +ServerAdmin email-address|URLsvCEmail address that the server includes in error messages sent to the client -ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests +ServerAlias hostname [hostname] ...vCAlternate names for a host used when matching requests to name-virtual hosts -ServerLimit numbersMUpper limit on configurable number of processes -ServerName [scheme://]domain-name|ip-address[:port]svCHostname and port that the server uses to identify +ServerLimit numbersMUpper limit on configurable number of processes +ServerName [scheme://]domain-name|ip-address[:port]svCHostname and port that the server uses to identify itself -ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that +ServerPath URL-pathvCLegacy URL pathname for a name-based virtual host that is accessed by an incompatible browser -ServerRoot directory-path /usr/local/apache sCBase directory for the server installation -ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents -ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response +ServerRoot directory-path /usr/local/apache sCBase directory for the server installation +ServerSignature On|Off|EMail Off svdhCConfigures the footer on server-generated documents +ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full Full sCConfigures the Server HTTP response header -Session On|Off Off svdhEEnables a session for the current directory or location -SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session -SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session -SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers -SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session -SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session -SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session -SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session -SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID -SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID -SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers -SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database -SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database -SessionDBDPerUser On|Off Off svdhEEnable a per user session -SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database -SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database -SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the +Session On|Off Off svdhEEnables a session for the current directory or location +SessionCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session +SessionCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session +SessionCookieRemove On|Off Off svdhEControl for whether session cookies should be removed from incoming HTTP headers +SessionCryptoCipher name aes256 svdhXThe crypto cipher to be used to encrypt the session +SessionCryptoDriver name [param[=value]]sXThe crypto driver to be used to encrypt the session +SessionCryptoPassphrase secret [ secret ... ] svdhXThe key used to encrypt the session +SessionCryptoPassphraseFile filenamesvdXFile containing keys used to encrypt the session +SessionDBDCookieName name attributessvdhEName and attributes for the RFC2109 cookie storing the session ID +SessionDBDCookieName2 name attributessvdhEName and attributes for the RFC2965 cookie storing the session ID +SessionDBDCookieRemove On|Off On svdhEControl for whether session ID cookies should be removed from incoming HTTP headers +SessionDBDDeleteLabel label deletesession svdhEThe SQL query to use to remove sessions from the database +SessionDBDInsertLabel label insertsession svdhEThe SQL query to use to insert sessions into the database +SessionDBDPerUser On|Off Off svdhEEnable a per user session +SessionDBDSelectLabel label selectsession svdhEThe SQL query to use to select sessions from the database +SessionDBDUpdateLabel label updatesession svdhEThe SQL query to use to update existing sessions in the database +SessionEnv On|Off Off svdhEControl whether the contents of the session are written to the HTTP_SESSION environment variable -SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored -SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without +SessionExclude pathsvdhEDefine URL prefixes for which a session is ignored +SessionExpiryUpdateInterval interval 0 (always update) svdhEDefine the number of seconds a session's expiry may change without the session being updated -SessionHeader headersvdhEImport session updates from a given HTTP response header -SessionInclude pathsvdhEDefine URL prefixes for which a session is valid -SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session -SetEnv env-variable [value]svdhBSets environment variables -SetEnvIf attribute +SessionHeader headersvdhEImport session updates from a given HTTP response header +SessionInclude pathsvdhEDefine URL prefixes for which a session is valid +SessionMaxAge maxage 0 svdhEDefine a maximum age in seconds for a session +SetEnv env-variable [value]svdhBSets environment variables +SetEnvIf attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request -SetEnvIfExpr expr +SetEnvIfExpr expr [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression -SetEnvIfNoCase attribute regex + [[!]env-variable[=value]] ...svdhBSets environment variables based on an ap_expr expression +SetEnvIfNoCase attribute regex [!]env-variable[=value] - [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request + [[!]env-variable[=value]] ...svdhBSets environment variables based on attributes of the request without respect to case -SetHandler handler-name|none|expressionsvdhCForces all matching files to be processed by a +SetHandler handler-name|none|expressionsvdhCForces all matching files to be processed by a handler -SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST +SetInputFilter filter[;filter...]svdhCSets the filters that will process client requests and POST input -SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the +SetOutputFilter filter[;filter...]svdhCSets the filters that will process responses from the server -SSIEndTag tag "-->" svBString that ends an include element -SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI +SSIEndTag tag "-->" svBString that ends an include element +SSIErrorMsg message "[an error occurred +svdhBError message displayed when there is an SSI error -SSIETag on|off off dhBControls whether ETags are generated by the server. -SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the +SSIETag on|off off dhBControls whether ETags are generated by the server. +SSILastModified on|off off dhBControls whether Last-Modified headers are generated by the server. -SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. -SSIStartTag tag "<!--#" svBString that starts an include element -SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are +SSILegacyExprParser on|off off dhBEnable compatibility mode for conditional expressions. +SSIStartTag tag "<!--#" svBString that starts an include element +SSITimeFormat formatstring "%A, %d-%b-%Y %H:%M +svdhBConfigures the format in which date strings are displayed -SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed -SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSIUndefinedEcho string "(none)" svdhBString displayed when an unset variable is echoed +SSLCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Client Auth -SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Client Auth -SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLCADNRequestFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for defining acceptable CA names -SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLCADNRequestPath directory-pathsvEDirectory of PEM-encoded CA Certificates for defining acceptable CA names -SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking -SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLCARevocationCheck chain|leaf|none [flags ...] none svEEnable CRL-based revocation checking +SSLCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Client Auth -SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Client Auth -SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates -SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier -SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file -SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL +SSLCertificateChainFile file-pathsvEFile of PEM-encoded Server CA Certificates +SSLCertificateFile file-path|certidsvEServer PEM-encoded X.509 certificate data file or token identifier +SSLCertificateKeyFile file-path|keyidsvEServer PEM-encoded private key file +SSLCipherSuite [protocol] cipher-spec DEFAULT (depends on +svdhECipher Suite available for negotiation in SSL handshake -SSLCompression on|off off svEEnable compression on the SSL level -SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator -SSLEngine on|off|optional off svESSL Engine Operation Switch -SSLFIPS on|off off sESSL FIPS mode Switch -SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order -SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation -SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation -SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain -SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification -SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation -SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests -SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates -SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries -SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses -SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation -SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries -SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API -SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options -SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private +SSLCompression on|off off svEEnable compression on the SSL level +SSLCryptoDevice engine builtin sEEnable use of a cryptographic hardware accelerator +SSLEngine on|off|optional off svESSL Engine Operation Switch +SSLFIPS on|off off sESSL FIPS mode Switch +SSLHonorCipherOrder on|off off svEOption to prefer the server's cipher preference order +SSLInsecureRenegotiation on|off off svEOption to enable support for insecure renegotiation +SSLOCSPDefaultResponder urisvESet the default responder URI for OCSP validation +SSLOCSPEnable on|leaf|off off svEEnable OCSP validation of the client certificate chain +SSLOCSPNoverify on|off off svEskip the OCSP responder certificates verification +SSLOCSPOverrideResponder on|off off svEForce use of the default responder URI for OCSP validation +SSLOCSPProxyURL urlsvEProxy URL to use for OCSP requests +SSLOCSPResponderCertificateFile filesvESet of trusted PEM encoded OCSP responder certificates +SSLOCSPResponderTimeout seconds 10 svETimeout for OCSP queries +SSLOCSPResponseMaxAge seconds -1 svEMaximum allowable age for OCSP responses +SSLOCSPResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP response validation +SSLOCSPUseRequestNonce on|off on svEUse a nonce within OCSP queries +SSLOpenSSLConfCmd command-name command-valuesvEConfigure OpenSSL parameters through its SSL_CONF API +SSLOptions [+|-]option ...svdhEConfigure various SSL engine run-time options +SSLPassPhraseDialog type builtin sEType of pass phrase dialog for encrypted private keys -SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions -SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates +SSLProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL/TLS protocol versions +SSLProxyCACertificateFile file-pathsvEFile of concatenated PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for +SSLProxyCACertificatePath directory-pathsvEDirectory of PEM-encoded CA Certificates for Remote Server Auth -SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth -SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for +SSLProxyCARevocationCheck chain|leaf|none none svEEnable CRL-based revocation checking for Remote Server Auth +SSLProxyCARevocationFile file-pathsvEFile of concatenated PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for +SSLProxyCARevocationPath directory-pathsvEDirectory of PEM-encoded CA CRLs for Remote Server Auth -SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field +SSLProxyCheckPeerCN on|off on svEWhether to check the remote server certificate's CN field -SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired +SSLProxyCheckPeerExpire on|off on svEWhether to check if remote server certificate is expired -SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates +SSLProxyCheckPeerName on|off on svEConfigure host name checking for remote server certificates -SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL +SSLProxyCipherSuite [protocol] cipher-spec ALL:!ADH:RC4+RSA:+H +svECipher Suite available for negotiation in SSL proxy handshake -SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch -SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate -SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy -SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy -SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage -SSLProxyVerify level none svEType of remote server Certificate verification -SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server +SSLProxyEngine on|off off svESSL Proxy Engine Operation Switch +SSLProxyMachineCertificateChainFile filenamesvEFile of concatenated PEM-encoded CA certificates to be used by the proxy for choosing a certificate +SSLProxyMachineCertificateFile filenamesvEFile of concatenated PEM-encoded client certificates and keys to be used by the proxy +SSLProxyMachineCertificatePath directorysvEDirectory of PEM-encoded client certificates and keys to be used by the proxy +SSLProxyProtocol [+|-]protocol ... all -SSLv3 (up to 2 +svEConfigure usable SSL protocol flavors for proxy usage +SSLProxyVerify level none svEType of remote server Certificate verification +SSLProxyVerifyDepth number 1 svEMaximum depth of CA Certificates in Remote Server Certificate verification -SSLRandomSeed context source -[bytes]sEPseudo Random Number Generator (PRNG) seeding +SSLRandomSeed context source +[bytes]sEPseudo Random Number Generator (PRNG) seeding source -SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer -SSLRequire expressiondhEAllow access only when an arbitrarily complex +SSLRenegBufferSize bytes 131072 dhESet the size for the SSL renegotiation buffer +SSLRequire expressiondhEAllow access only when an arbitrarily complex boolean expression is true -SSLRequireSSLdhEDeny access when SSL is not used for the +SSLRequireSSLdhEDeny access when SSL is not used for the HTTP request -SSLSessionCache type none sEType of the global/inter-process SSL Session +SSLSessionCache type none sEType of the global/inter-process SSL Session Cache -SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires +SSLSessionCacheTimeout seconds 300 svENumber of seconds before an SSL session expires in the Session Cache -SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets -SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets -SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed -SSLSRPVerifierFile file-pathsvEPath to SRP verifier file -SSLStaplingCache typesEConfigures the OCSP stapling cache -SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache -SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries -SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension -SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries -SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses -SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation -SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client -SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache -SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual +SSLSessionTicketKeyFile file-pathsvEPersistent encryption/decryption key for TLS session tickets +SSLSessionTickets on|off on svEEnable or disable use of TLS session tickets +SSLSRPUnknownUserSeed secret-stringsvESRP unknown user seed +SSLSRPVerifierFile file-pathsvEPath to SRP verifier file +SSLStaplingCache typesEConfigures the OCSP stapling cache +SSLStaplingErrorCacheTimeout seconds 600 svENumber of seconds before expiring invalid responses in the OCSP stapling cache +SSLStaplingFakeTryLater on|off on svESynthesize "tryLater" responses for failed OCSP stapling queries +SSLStaplingForceURL urisvEOverride the OCSP responder URI specified in the certificate's AIA extension +SSLStaplingResponderTimeout seconds 10 svETimeout for OCSP stapling queries +SSLStaplingResponseMaxAge seconds -1 svEMaximum allowable age for OCSP stapling responses +SSLStaplingResponseTimeSkew seconds 300 svEMaximum allowable time skew for OCSP stapling response validation +SSLStaplingReturnResponderErrors on|off on svEPass stapling related OCSP errors on to client +SSLStaplingStandardCacheTimeout seconds 3600 svENumber of seconds before expiring responses in the OCSP stapling cache +SSLStrictSNIVHostCheck on|off off svEWhether to allow non-SNI clients to access a name-based virtual host. -SSLUserName varnamesdhEVariable name to determine user name -SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake -SSLVerifyClient level none svdhEType of Client Certificate verification -SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client +SSLUserName varnamesdhEVariable name to determine user name +SSLUseStapling on|off off svEEnable stapling of OCSP responses in the TLS handshake +SSLVerifyClient level none svdhEType of Client Certificate verification +SSLVerifyDepth number 1 svdhEMaximum depth of CA Certificates in Client Certificate verification -StartServers numbersMNumber of child server processes created at startup -StartThreads numbersMNumber of threads created on startup -StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be +StartServers numbersMNumber of child server processes created at startup +StartThreads numbersMNumber of threads created on startup +StrictHostCheck ON|OFF OFF svCControls whether the server requires the requested hostname be listed enumerated in the virtual host handling the request -Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content -SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns -SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size -Suexec On|OffsBEnable or disable the suEXEC feature -SuexecUserGroup User GroupsvEUser and group for CGI programs to run as -ThreadLimit numbersMSets the upper limit on the configurable number of threads +Substitute s/pattern/substitution/[infq]dhEPattern to filter the response content +SubstituteInheritBefore on|off off dhEChange the merge order of inherited patterns +SubstituteMaxLineLength bytes(b|B|k|K|m|M|g|G) 1m dhESet the maximum line size +Suexec On|OffsBEnable or disable the suEXEC feature +SuexecUserGroup User GroupsvEUser and group for CGI programs to run as +ThreadLimit numbersMSets the upper limit on the configurable number of threads per child process -ThreadsPerChild numbersMNumber of threads created by each child process -ThreadStackSize sizesMThe size in bytes of the stack used by threads handling +ThreadsPerChild numbersMNumber of threads created by each child process +ThreadStackSize sizesMThe size in bytes of the stack used by threads handling client connections -TimeOut seconds 60 svCAmount of time the server will wait for +TimeOut seconds 60 svCAmount of time the server will wait for certain events before failing a request +TLSCertificate cert_file [key_file]svXadds a certificate and key (PEM encoded) to a server/virtual host. +TLSCiphersPrefer cipher(-list)svXdefines ciphers that are preferred. +TLSCiphersSuppress cipher(-list)svXdefines ciphers that are not to be used. +TLSEngine [address:]portsXdefines on which address+port the module shall handle incoming connections. +TLSHonorClientOrder on|offsvX- +TLSOptions [+|-]optionsvdhXenables SSL variables for requests. +TLSProtocol version+svXspecifies the minimum version of the TLS protocol to use. +TLSProxyCA file.pemsvXsets the root certificates to validate the backend server with. +TLSProxyCipherPrefer cipher(-list)svXdefines ciphers that are preferred for a proxy connection. +TLSProxyCipherSuppress cipher(-list)svXdefines ciphers that are not to be used for a proxy connection. +TLSProxyEngine on|offsvXenables TLS for backend connections. +TLSProxyMachineCertificate cert_file [key_file]svXadds a certificate and key file (PEM encoded) to a proxy setup. +TLSProxyProtocol version+svXspecifies the minimum version of the TLS protocol to use in proxy connections. +TLSSessionCache cache-specsXspecifies the cache for TLS session resumption. +TLSStrictSNI on|offsXenforces exact matches of client server indicators (SNI) against host names. TraceEnable [on|off|extended] on svCDetermines the behavior on TRACE requests TransferLog file|pipesvBSpecify location of a log file TypesConfig file-path conf/mime.types sBThe location of the mime.types file diff -Nru apache2-2.4.51/docs/manual/sitemap.html.de apache2-2.4.52/docs/manual/sitemap.html.de --- apache2-2.4.51/docs/manual/sitemap.html.de 2021-09-16 07:58:22.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.de 2021-12-16 13:44:25.000000000 +0000 @@ -308,6 +308,7 @@
  • Apache-Modul mod_substitute
  • Apache-Modul mod_suexec
  • Apache-Modul mod_systemd
  • +
  • Apache-Modul mod_tls
  • Apache-Modul mod_unique_id
  • Apache-Modul mod_unixd
  • Apache-Modul mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/sitemap.html.en apache2-2.4.52/docs/manual/sitemap.html.en --- apache2-2.4.51/docs/manual/sitemap.html.en 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.en 2021-12-16 13:44:25.000000000 +0000 @@ -307,6 +307,7 @@
  • Apache Module mod_substitute
  • Apache Module mod_suexec
  • Apache Module mod_systemd
  • +
  • Apache Module mod_tls
  • Apache Module mod_unique_id
  • Apache Module mod_unixd
  • Apache Module mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/sitemap.html.es apache2-2.4.52/docs/manual/sitemap.html.es --- apache2-2.4.51/docs/manual/sitemap.html.es 2021-09-16 07:58:22.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.es 2021-12-16 13:44:25.000000000 +0000 @@ -287,6 +287,7 @@
  • Módulo Apache mod_substitute
  • Módulo Apache mod_suexec
  • Módulo Apache mod_systemd
  • +
  • Módulo Apache mod_tls
  • Módulo Apache mod_unique_id
  • Módulo Apache mod_unixd
  • Módulo Apache mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/sitemap.html.fr.utf8 apache2-2.4.52/docs/manual/sitemap.html.fr.utf8 --- apache2-2.4.51/docs/manual/sitemap.html.fr.utf8 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.fr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -323,6 +323,7 @@
  • Module Apache mod_substitute
  • Module Apache mod_suexec
  • Module Apache mod_systemd
  • +
  • Module Apache mod_tls
  • Module Apache mod_unique_id
  • Module Apache mod_unixd
  • Module Apache mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/sitemap.html.ja.utf8 apache2-2.4.52/docs/manual/sitemap.html.ja.utf8 --- apache2-2.4.51/docs/manual/sitemap.html.ja.utf8 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.ja.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -286,6 +286,7 @@
  • Apache ă˘ă‚¸ăĄăĽă« mod_substitute
  • Apache ă˘ă‚¸ăĄăĽă« mod_suexec
  • Apache ă˘ă‚¸ăĄăĽă« mod_systemd
  • +
  • Apache ă˘ă‚¸ăĄăĽă« mod_tls
  • Apache ă˘ă‚¸ăĄăĽă« mod_unique_id
  • Apache ă˘ă‚¸ăĄăĽă« mod_unixd
  • Apache ă˘ă‚¸ăĄăĽă« mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/sitemap.html.ko.euc-kr apache2-2.4.52/docs/manual/sitemap.html.ko.euc-kr --- apache2-2.4.51/docs/manual/sitemap.html.ko.euc-kr 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.ko.euc-kr 2021-12-16 13:44:25.000000000 +0000 @@ -285,6 +285,7 @@
  • ľĆĆÄġ ¸đµâ mod_substitute
  • ľĆĆÄġ ¸đµâ mod_suexec
  • ľĆĆÄġ ¸đµâ mod_systemd
  • +
  • ľĆĆÄġ ¸đµâ mod_tls
  • ľĆĆÄġ ¸đµâ mod_unique_id
  • ľĆĆÄġ ¸đµâ mod_unixd
  • ľĆĆÄġ ¸đµâ mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/sitemap.html.tr.utf8 apache2-2.4.52/docs/manual/sitemap.html.tr.utf8 --- apache2-2.4.51/docs/manual/sitemap.html.tr.utf8 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.tr.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -302,6 +302,7 @@
  • Apache ModĂĽlĂĽ mod_substitute
  • Apache ModĂĽlĂĽ mod_suexec
  • Apache ModĂĽlĂĽ mod_systemd
  • +
  • Apache ModĂĽlĂĽ mod_tls
  • Apache ModĂĽlĂĽ mod_unique_id
  • Apache ModĂĽlĂĽ mod_unixd
  • Apache ModĂĽlĂĽ mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/sitemap.html.zh-cn.utf8 apache2-2.4.52/docs/manual/sitemap.html.zh-cn.utf8 --- apache2-2.4.51/docs/manual/sitemap.html.zh-cn.utf8 2021-07-09 12:26:10.000000000 +0000 +++ apache2-2.4.52/docs/manual/sitemap.html.zh-cn.utf8 2021-12-16 13:44:25.000000000 +0000 @@ -286,6 +286,7 @@
  • Apache 模块 mod_substitute
  • Apache 模块 mod_suexec
  • Apache 模块 mod_systemd
  • +
  • Apache 模块 mod_tls
  • Apache 模块 mod_unique_id
  • Apache 模块 mod_unixd
  • Apache 模块 mod_userdir
  • diff -Nru apache2-2.4.51/docs/manual/style/version.ent apache2-2.4.52/docs/manual/style/version.ent --- apache2-2.4.51/docs/manual/style/version.ent 2021-10-07 13:11:48.000000000 +0000 +++ apache2-2.4.52/docs/manual/style/version.ent 2021-10-07 15:22:02.000000000 +0000 @@ -19,6 +19,6 @@ - + diff -Nru apache2-2.4.51/httpd.spec apache2-2.4.52/httpd.spec --- apache2-2.4.51/httpd.spec 2021-10-07 13:12:21.000000000 +0000 +++ apache2-2.4.52/httpd.spec 2021-12-16 13:49:07.000000000 +0000 @@ -4,7 +4,7 @@ Summary: Apache HTTP Server Name: httpd -Version: 2.4.51 +Version: 2.4.52 Release: 1 URL: http://httpd.apache.org/ Vendor: Apache Software Foundation diff -Nru apache2-2.4.51/include/ap_config_auto.h.in apache2-2.4.52/include/ap_config_auto.h.in --- apache2-2.4.51/include/ap_config_auto.h.in 2021-10-07 13:12:20.000000000 +0000 +++ apache2-2.4.52/include/ap_config_auto.h.in 2021-12-16 13:49:06.000000000 +0000 @@ -124,8 +124,8 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H +/* Define to 1 if you have the header file. */ +#undef HAVE_MINIX_CONFIG_H /* Define if nghttp2 is available */ #undef HAVE_NGHTTP2 @@ -178,6 +178,9 @@ /* Define to 1 if you have the `RAND_egd' function. */ #undef HAVE_RAND_EGD +/* Define if rustls is available */ +#undef HAVE_RUSTLS + /* Define to 1 if you have the `setsid' function. */ #undef HAVE_SETSID @@ -187,6 +190,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H @@ -256,6 +262,9 @@ /* Define to 1 if you have the `vsyslog' function. */ #undef HAVE_VSYSLOG +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + /* Root directory of the Apache install area */ #undef HTTPD_ROOT @@ -283,7 +292,9 @@ /* This platform doesn't suffer from the thundering herd problem */ #undef SINGLE_LISTEN_UNSERIALIZED_ACCEPT -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Path to suexec binary */ @@ -293,34 +304,90 @@ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# undef _DARWIN_C_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif -/* Enable threading extensions on Solaris. */ +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# undef _HPUX_ALT_XOPEN_SOCKET_API +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +# undef _MINIX +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# undef _NETBSD_SOURCE +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# undef _OPENBSD_SOURCE +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +# undef _POSIX_SOURCE +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +# undef _POSIX_1_SOURCE +#endif +/* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# undef __STDC_WANT_IEC_60559_BFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# undef __STDC_WANT_IEC_60559_DFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# undef __STDC_WANT_IEC_60559_TYPES_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# undef __STDC_WANT_LIB_EXT2__ +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# undef __STDC_WANT_MATH_SPEC_FUNCS__ +#endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif -/* Enable general extensions on Solaris. */ -#ifndef __EXTENSIONS__ -# undef __EXTENSIONS__ +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +# undef _XOPEN_SOURCE #endif -/* Define to 1 if on MINIX. */ -#undef _MINIX - -/* Define to 2 if the system does not provide POSIX.1 features except with - this defined. */ -#undef _POSIX_1_SOURCE - -/* Define to 1 if you need to in order for `stat' and other things to work. */ -#undef _POSIX_SOURCE - /* Define to empty if `const' does not conform to ANSI C. */ #undef const diff -Nru apache2-2.4.51/include/ap_mmn.h apache2-2.4.52/include/ap_mmn.h --- apache2-2.4.51/include/ap_mmn.h 2021-10-07 12:36:22.000000000 +0000 +++ apache2-2.4.52/include/ap_mmn.h 2021-12-14 15:35:56.000000000 +0000 @@ -581,6 +581,12 @@ * 20120211.117 (2.4.50-dev) Add ap_pre_connection * 20120211.118 (2.4.51-dev) Add ap_unescape_url_ex() and deprecate * AP_NORMALIZE_DROP_PARAMETERS + * 20120211.119 (2.4.51-dev) Add dav_validate_root_ns(), dav_find_child_ns(), + * dav_find_next_ns(), dav_find_attr_ns() and + * dav_find_attr(). + * 20120211.120 (2.4.51-dev) Add dav_liveprop_elem structure and + * dav_get_liveprop_element(). + * 20120211.121 (2.4.51-dev) Add ap_post_read_request() * */ @@ -589,7 +595,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20120211 #endif -#define MODULE_MAGIC_NUMBER_MINOR 118 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 121 /* 0...n */ /** * Determine if the server's current MODULE_MAGIC_NUMBER is at least a diff -Nru apache2-2.4.51/include/ap_release.h apache2-2.4.52/include/ap_release.h --- apache2-2.4.51/include/ap_release.h 2021-10-07 13:11:48.000000000 +0000 +++ apache2-2.4.52/include/ap_release.h 2021-12-16 13:48:05.000000000 +0000 @@ -43,7 +43,7 @@ #define AP_SERVER_MAJORVERSION_NUMBER 2 #define AP_SERVER_MINORVERSION_NUMBER 4 -#define AP_SERVER_PATCHLEVEL_NUMBER 51 +#define AP_SERVER_PATCHLEVEL_NUMBER 52 #define AP_SERVER_DEVBUILD_BOOLEAN 0 /* Synchronize the above with docs/manual/style/version.ent */ diff -Nru apache2-2.4.51/include/http_protocol.h apache2-2.4.52/include/http_protocol.h --- apache2-2.4.51/include/http_protocol.h 2021-05-27 13:08:21.000000000 +0000 +++ apache2-2.4.52/include/http_protocol.h 2021-12-14 15:35:56.000000000 +0000 @@ -96,6 +96,13 @@ AP_DECLARE(void) ap_get_mime_headers_core(request_rec *r, apr_bucket_brigade *bb); +/** + * Run post_read_request hook and validate. + * @param r The current request + * @return OK or HTTP_... + */ +AP_DECLARE(int) ap_post_read_request(request_rec *r); + /* Finish up stuff after a request */ /** diff -Nru apache2-2.4.51/include/http_ssl.h apache2-2.4.52/include/http_ssl.h --- apache2-2.4.51/include/http_ssl.h 2021-09-09 15:22:23.000000000 +0000 +++ apache2-2.4.52/include/http_ssl.h 2021-12-14 09:58:22.000000000 +0000 @@ -124,8 +124,8 @@ * * @param s the server certificates are collected for * @param p the pool to use for allocations - * @param cert_file and array of const char* with the path to the certificate chain - * @param key_file and array of const char* with the path to the private key file + * @param cert_files an array of const char* with the path to the certificate chain + * @param key_files an array of const char* with the path to the private key file * @return OK if files were added, DECLINED if not, or other for error. */ @@ -141,8 +141,8 @@ * * @param s the server certificates are collected for * @param p the pool to use for allocations - * @param cert_file and array of const char* with the path to the certificate chain - * @param key_file and array of const char* with the path to the private key file + * @param cert_files an array of const char* with the path to the certificate chain + * @param key_files an array of const char* with the path to the private key file */ AP_DECLARE(apr_status_t) ap_ssl_add_cert_files(server_rec *s, apr_pool_t *p, apr_array_header_t *cert_files, @@ -156,8 +156,8 @@ * * @param s the server certificates are collected for * @param p the pool to use for allocations - * @param cert_file and array of const char* with the path to the certificate chain - * @param key_file and array of const char* with the path to the private key file + * @param cert_files an array of const char* with the path to the certificate chain + * @param key_files an array of const char* with the path to the private key file * @return OK if files were added, DECLINED if not, or other for error. */ AP_DECLARE_HOOK(int, ssl_add_fallback_cert_files, (server_rec *s, apr_pool_t *p, @@ -174,8 +174,8 @@ * * @param s the server certificates are collected for * @param p the pool to use for allocations - * @param cert_file and array of const char* with the path to the certificate chain - * @param key_file and array of const char* with the path to the private key file + * @param cert_files an array of const char* with the path to the certificate chain + * @param key_files an array of const char* with the path to the private key file */ AP_DECLARE(apr_status_t) ap_ssl_add_fallback_cert_files(server_rec *s, apr_pool_t *p, apr_array_header_t *cert_files, diff -Nru apache2-2.4.51/modules/dav/main/mod_dav.h apache2-2.4.52/modules/dav/main/mod_dav.h --- apache2-2.4.51/modules/dav/main/mod_dav.h 2021-08-21 22:55:47.000000000 +0000 +++ apache2-2.4.52/modules/dav/main/mod_dav.h 2021-12-13 15:02:44.000000000 +0000 @@ -577,8 +577,22 @@ DAV_DECLARE(int) dav_validate_root(const apr_xml_doc *doc, const char *tagname); +DAV_DECLARE(int) dav_validate_root_ns(const apr_xml_doc *doc, + int ns, const char *tagname); DAV_DECLARE(apr_xml_elem *) dav_find_child(const apr_xml_elem *elem, const char *tagname); +DAV_DECLARE(apr_xml_elem *) dav_find_child_ns(const apr_xml_elem *elem, + int ns, const char *tagname); +DAV_DECLARE(apr_xml_elem *) dav_find_next_ns(const apr_xml_elem *elem, + int ns, const char *tagname); + +/* find and return the attribute with a name in the given namespace */ +DAV_DECLARE(apr_xml_attr *) dav_find_attr_ns(const apr_xml_elem *elem, + int ns, const char *attrname); + +/* find and return the attribute with a given DAV: tagname */ +DAV_DECLARE(apr_xml_attr *) dav_find_attr(const apr_xml_elem *elem, + const char *attrname); /* gather up all the CDATA into a single string */ DAV_DECLARE(const char *) dav_xml_get_cdata(const apr_xml_elem *elem, apr_pool_t *pool, @@ -893,6 +907,14 @@ ** property, and does not want it handled as a dead property, it should ** return DAV_PROP_INSERT_NOTSUPP. ** + ** Some DAV extensions, like CalDAV, specify both document elements + ** and property elements that need to be taken into account when + ** generating a property. The document element and property element + ** are made available in the dav_liveprop_elem structure under the + ** resource, accessible as follows: + ** + ** dav_get_liveprop_element(resource); + ** ** Returns one of DAV_PROP_INSERT_* based on what happened. ** ** ### we may need more context... ie. the lock database @@ -1040,6 +1062,18 @@ DAV_DECLARE(void) dav_add_all_liveprop_xmlns(apr_pool_t *p, apr_text_header *phdr); +typedef struct { + const apr_xml_doc *doc; + const apr_xml_elem *elem; +} dav_liveprop_elem; + +/* + ** When calling insert_prop(), the associated request element and + ** document is accessible using the following call. + */ +DAV_DECLARE(dav_liveprop_elem *) dav_get_liveprop_element(const dav_resource + *resource); + /* ** The following three functions are part of mod_dav's internal handling ** for the core WebDAV properties. They are not part of mod_dav's API. diff -Nru apache2-2.4.51/modules/dav/main/props.c apache2-2.4.52/modules/dav/main/props.c --- apache2-2.4.51/modules/dav/main/props.c 2020-07-05 12:55:38.000000000 +0000 +++ apache2-2.4.52/modules/dav/main/props.c 2021-12-13 15:02:44.000000000 +0000 @@ -167,6 +167,8 @@ #define DAV_EMPTY_VALUE "\0" /* TWO null terms */ +#define DAV_PROP_ELEMENT "mod_dav-element" + struct dav_propdb { apr_pool_t *p; /* the pool we should use */ request_rec *r; /* the request record */ @@ -718,10 +720,18 @@ apr_text_header hdr_ns = { 0 }; int have_good = 0; dav_get_props_result result = { 0 }; + dav_liveprop_elem *element; char *marks_liveprop; dav_xmlns_info *xi; int xi_filled = 0; + /* we lose both the document and the element when calling (insert_prop), + * make these available in the pool. + */ + element = apr_pcalloc(propdb->resource->pool, sizeof(dav_liveprop_elem)); + element->doc = doc; + apr_pool_userdata_setn(element, DAV_PROP_ELEMENT, NULL, propdb->resource->pool); + /* ### NOTE: we should pass in TWO buffers -- one for keys, one for the marks */ @@ -745,6 +755,8 @@ dav_prop_insert inserted; dav_prop_name name; + element->elem = elem; + /* ** First try live property providers; if they don't handle ** the property, then try looking it up in the propdb. @@ -922,6 +934,15 @@ } } +DAV_DECLARE(dav_liveprop_elem *) dav_get_liveprop_element(const dav_resource *resource) +{ + dav_liveprop_elem *element; + + apr_pool_userdata_get((void **)&element, DAV_PROP_ELEMENT, resource->pool); + + return element; +} + DAV_DECLARE_NONSTD(void) dav_prop_validate(dav_prop_ctx *ctx) { dav_propdb *propdb = ctx->propdb; diff -Nru apache2-2.4.51/modules/dav/main/util.c apache2-2.4.52/modules/dav/main/util.c --- apache2-2.4.51/modules/dav/main/util.c 2021-08-10 08:27:18.000000000 +0000 +++ apache2-2.4.52/modules/dav/main/util.c 2021-12-13 14:43:38.000000000 +0000 @@ -316,26 +316,71 @@ */ /* validate that the root element uses a given DAV: tagname (TRUE==valid) */ -DAV_DECLARE(int) dav_validate_root(const apr_xml_doc *doc, - const char *tagname) +DAV_DECLARE(int) dav_validate_root_ns(const apr_xml_doc *doc, + int ns, const char *tagname) { return doc->root && - doc->root->ns == APR_XML_NS_DAV_ID && + doc->root->ns == ns && strcmp(doc->root->name, tagname) == 0; } -/* find and return the (unique) child with a given DAV: tagname */ -DAV_DECLARE(apr_xml_elem *) dav_find_child(const apr_xml_elem *elem, - const char *tagname) +/* validate that the root element uses a given DAV: tagname (TRUE==valid) */ +DAV_DECLARE(int) dav_validate_root(const apr_xml_doc *doc, + const char *tagname) +{ + return dav_validate_root_ns(doc, APR_XML_NS_DAV_ID, tagname); +} + +/* find and return the next child with a tagname in the given namespace */ +DAV_DECLARE(apr_xml_elem *) dav_find_next_ns(const apr_xml_elem *elem, + int ns, const char *tagname) +{ + apr_xml_elem *child = elem->next; + + for (; child; child = child->next) + if (child->ns == ns && !strcmp(child->name, tagname)) + return child; + return NULL; +} + +/* find and return the (unique) child with a tagname in the given namespace */ +DAV_DECLARE(apr_xml_elem *) dav_find_child_ns(const apr_xml_elem *elem, + int ns, const char *tagname) { apr_xml_elem *child = elem->first_child; for (; child; child = child->next) - if (child->ns == APR_XML_NS_DAV_ID && !strcmp(child->name, tagname)) + if (child->ns == ns && !strcmp(child->name, tagname)) return child; return NULL; } +/* find and return the (unique) child with a given DAV: tagname */ +DAV_DECLARE(apr_xml_elem *) dav_find_child(const apr_xml_elem *elem, + const char *tagname) +{ + return dav_find_child_ns(elem, APR_XML_NS_DAV_ID, tagname); +} + +/* find and return the attribute with a name in the given namespace */ +DAV_DECLARE(apr_xml_attr *) dav_find_attr_ns(const apr_xml_elem *elem, + int ns, const char *attrname) +{ + apr_xml_attr *attr = elem->attr; + + for (; attr; attr = attr->next) + if (attr->ns == ns && !strcmp(attr->name, attrname)) + return attr; + return NULL; +} + +/* find and return the attribute with a given DAV: tagname */ +DAV_DECLARE(apr_xml_attr *) dav_find_attr(const apr_xml_elem *elem, + const char *attrname) +{ + return dav_find_attr_ns(elem, APR_XML_NS_DAV_ID, attrname); +} + /* gather up all the CDATA into a single string */ DAV_DECLARE(const char *) dav_xml_get_cdata(const apr_xml_elem *elem, apr_pool_t *pool, int strip_white) diff -Nru apache2-2.4.51/modules/http/http_filters.c apache2-2.4.52/modules/http/http_filters.c --- apache2-2.4.51/modules/http/http_filters.c 2021-05-11 15:21:43.000000000 +0000 +++ apache2-2.4.52/modules/http/http_filters.c 2021-12-13 15:16:55.000000000 +0000 @@ -472,9 +472,12 @@ } else if (!ctx->seen_data) { int saved_status = f->r->status; + const char *saved_status_line = f->r->status_line; f->r->status = HTTP_CONTINUE; + f->r->status_line = NULL; ap_send_interim_response(f->r, 0); AP_DEBUG_ASSERT(!f->r->expecting_100); + f->r->status_line = saved_status_line; f->r->status = saved_status; } else { diff -Nru apache2-2.4.51/modules/http/http_request.c apache2-2.4.52/modules/http/http_request.c --- apache2-2.4.51/modules/http/http_request.c 2020-01-01 23:14:08.000000000 +0000 +++ apache2-2.4.52/modules/http/http_request.c 2021-12-14 15:35:56.000000000 +0000 @@ -680,7 +680,7 @@ * to do their thing on internal redirects as well. Perhaps this is a * misnamed function. */ - if ((access_status = ap_run_post_read_request(new))) { + if ((access_status = ap_post_read_request(new))) { ap_die(access_status, new); return NULL; } diff -Nru apache2-2.4.51/modules/http2/h2_request.c apache2-2.4.52/modules/http2/h2_request.c --- apache2-2.4.51/modules/http2/h2_request.c 2021-09-26 14:30:51.000000000 +0000 +++ apache2-2.4.52/modules/http2/h2_request.c 2021-12-14 15:35:56.000000000 +0000 @@ -370,7 +370,7 @@ ap_add_input_filter_handle(ap_http_input_filter_handle, NULL, r, r->connection); - if ((access_status = ap_run_post_read_request(r))) { + if ((access_status = ap_post_read_request(r))) { /* Request check post hooks failed. An example of this would be a * request for a vhost where h2 is disabled --> 421. */ diff -Nru apache2-2.4.51/modules/http2/h2_session.c apache2-2.4.52/modules/http2/h2_session.c --- apache2-2.4.51/modules/http2/h2_session.c 2021-09-26 14:30:51.000000000 +0000 +++ apache2-2.4.52/modules/http2/h2_session.c 2021-12-13 10:33:48.000000000 +0000 @@ -275,7 +275,7 @@ const nghttp2_frame *frame, void *userp) { h2_session *session = (h2_session *)userp; - h2_stream *s; + h2_stream *s = NULL; /* We may see HEADERs at the start of a stream or after all DATA * streams to carry trailers. */ @@ -284,7 +284,7 @@ if (s) { /* nop */ } - else { + else if (session->local.accepting) { s = h2_session_open_stream(userp, frame->hd.stream_id, 0); } return s? 0 : NGHTTP2_ERR_START_STREAM_NOT_ALLOWED; @@ -2115,7 +2115,16 @@ now = apr_time_now(); session->have_read = session->have_written = 0; - if (session->local.accepting + /* PR65731: we may get a new connection to process while the + * MPM already is stopping. For example due to having reached + * MaxRequestsPerChild limit. + * Since this is supposed to handle things gracefully, we need to: + * a) fully initialize the session before GOAWAYing + * b) give the client the chance to submit at least one request + */ + if (session->state != H2_SESSION_ST_INIT /* no longer intializing */ + && session->local.accepted_max > 0 /* have gotten at least one stream */ + && session->local.accepting /* have not already locally shut down */ && !ap_mpm_query(AP_MPMQ_MPM_STATE, &mpm_state)) { if (mpm_state == AP_MPMQ_STOPPING) { dispatch_event(session, H2_SESSION_EV_MPM_STOPPING, 0, NULL); diff -Nru apache2-2.4.51/modules/http2/h2_version.h apache2-2.4.52/modules/http2/h2_version.h --- apache2-2.4.51/modules/http2/h2_version.h 2021-09-26 14:30:51.000000000 +0000 +++ apache2-2.4.52/modules/http2/h2_version.h 2021-12-13 10:33:48.000000000 +0000 @@ -27,7 +27,7 @@ * @macro * Version number of the http2 module as c string */ -#define MOD_HTTP2_VERSION "1.15.24" +#define MOD_HTTP2_VERSION "1.15.26" /** * @macro @@ -35,7 +35,7 @@ * release. This is a 24 bit number with 8 bits for major number, 8 bits * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203. */ -#define MOD_HTTP2_VERSION_NUM 0x010f18 +#define MOD_HTTP2_VERSION_NUM 0x010f1a #endif /* mod_h2_h2_version_h */ diff -Nru apache2-2.4.51/modules/http2/h2_workers.c apache2-2.4.52/modules/http2/h2_workers.c --- apache2-2.4.51/modules/http2/h2_workers.c 2021-09-26 14:30:51.000000000 +0000 +++ apache2-2.4.52/modules/http2/h2_workers.c 2021-12-13 10:33:48.000000000 +0000 @@ -479,8 +479,6 @@ void h2_workers_graceful_shutdown(h2_workers *workers) { workers->shutdown = 1; - workers->min_workers = 1; workers->max_idle_duration = apr_time_from_sec(1); - h2_fifo_term(workers->mplxs); wake_non_essential_workers(workers); } diff -Nru apache2-2.4.51/modules/lua/lua_request.c apache2-2.4.52/modules/lua/lua_request.c --- apache2-2.4.51/modules/lua/lua_request.c 2020-01-30 15:13:30.000000000 +0000 +++ apache2-2.4.52/modules/lua/lua_request.c 2021-12-16 11:15:47.000000000 +0000 @@ -410,6 +410,7 @@ if (end == NULL) break; key = (char *) apr_pcalloc(r->pool, 256); filename = (char *) apr_pcalloc(r->pool, 256); + if (end - crlf <= 8) break; vlen = end - crlf - 8; buffer = (char *) apr_pcalloc(r->pool, vlen+1); memcpy(buffer, crlf + 4, vlen); diff -Nru apache2-2.4.51/modules/md/md.h apache2-2.4.52/modules/md/md.h --- apache2-2.4.51/modules/md/md.h 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/md.h 2021-11-24 11:07:53.000000000 +0000 @@ -90,12 +90,15 @@ const char *ca_url; /* url of CA certificate service */ const char *ca_proto; /* protocol used vs CA (e.g. ACME) */ const char *ca_account; /* account used at CA */ - const char *ca_agreement; /* accepted agreement uri between CA and user */ + const char *ca_agreement; /* accepted agreement uri between CA and user */ struct apr_array_header_t *ca_challenges; /* challenge types configured for this MD */ struct apr_array_header_t *cert_files; /* != NULL iff pubcerts explicitly configured */ struct apr_array_header_t *pkey_files; /* != NULL iff privkeys explicitly configured */ - + const char *ca_eab_kid; /* optional KEYID for external account binding */ + const char *ca_eab_hmac; /* optional HMAC for external accont binding */ + md_state_t state; /* state of this MD */ + const char *state_descr; /* description of state of NULL */ struct apr_array_header_t *acme_tls_1_domains; /* domains supporting "acme-tls/1" protocol */ int stapling; /* if OCSP stapling is enabled */ @@ -133,6 +136,8 @@ #define MD_KEY_DIR "dir" #define MD_KEY_DOMAIN "domain" #define MD_KEY_DOMAINS "domains" +#define MD_KEY_EAB "eab" +#define MD_KEY_EAB_REQUIRED "externalAccountRequired" #define MD_KEY_ENTRIES "entries" #define MD_KEY_ERRORED "errored" #define MD_KEY_ERROR "error" @@ -142,11 +147,13 @@ #define MD_KEY_FINISHED "finished" #define MD_KEY_FROM "from" #define MD_KEY_GOOD "good" +#define MD_KEY_HMAC "hmac" #define MD_KEY_HTTP "http" #define MD_KEY_HTTPS "https" #define MD_KEY_ID "id" #define MD_KEY_IDENTIFIER "identifier" #define MD_KEY_KEY "key" +#define MD_KEY_KID "kid" #define MD_KEY_KEYAUTHZ "keyAuthorization" #define MD_KEY_LAST "last" #define MD_KEY_LAST_RUN "last-run" @@ -183,10 +190,12 @@ #define MD_KEY_SHA256_FINGERPRINT "sha256-fingerprint" #define MD_KEY_STAPLING "stapling" #define MD_KEY_STATE "state" +#define MD_KEY_STATE_DESCR "state-descr" #define MD_KEY_STATUS "status" #define MD_KEY_STORE "store" #define MD_KEY_SUBPROBLEMS "subproblems" #define MD_KEY_TEMPORARY "temporary" +#define MD_KEY_TOS "termsOfService" #define MD_KEY_TOKEN "token" #define MD_KEY_TOTAL "total" #define MD_KEY_TRANSITIVE "transitive" @@ -280,20 +289,21 @@ * * This reads and writes the following information: name, domains, ca_url, ca_proto and state. */ -struct md_json_t *md_to_json (const md_t *md, apr_pool_t *p); +struct md_json_t *md_to_json(const md_t *md, apr_pool_t *p); md_t *md_from_json(struct md_json_t *json, apr_pool_t *p); +/** + * Same as md_to_json(), but with sensitive fields stripped. + */ +struct md_json_t *md_to_public_json(const md_t *md, apr_pool_t *p); + int md_is_covered_by_alt_names(const md_t *md, const struct apr_array_header_t* alt_names); /* how many certificates this domain has/will eventually have. */ int md_cert_count(const md_t *md); -#define LE_ACMEv1_PROD "https://acme-v01.api.letsencrypt.org/directory" -#define LE_ACMEv1_STAGING "https://acme-staging.api.letsencrypt.org/directory" - -#define LE_ACMEv2_PROD "https://acme-v02.api.letsencrypt.org/directory" -#define LE_ACMEv2_STAGING "https://acme-staging-v02.api.letsencrypt.org/directory" - +const char *md_get_ca_name_from_url(apr_pool_t *p, const char *url); +apr_status_t md_get_ca_url_from_name(const char **purl, apr_pool_t *p, const char *name); /**************************************************************************************************/ /* notifications */ diff -Nru apache2-2.4.51/modules/md/md_acme.c apache2-2.4.52/modules/md/md_acme.c --- apache2-2.4.51/modules/md/md_acme.c 2021-07-12 08:04:51.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme.c 2021-11-24 11:07:53.000000000 +0000 @@ -52,6 +52,7 @@ { "acme:error:badCSR", APR_EINVAL, 1 }, { "acme:error:badNonce", APR_EAGAIN, 0 }, { "acme:error:badSignatureAlgorithm", APR_EINVAL, 1 }, + { "acme:error:externalAccountRequired", APR_EINVAL, 1 }, { "acme:error:invalidContact", APR_BADARG, 1 }, { "acme:error:unsupportedContact", APR_EGENERAL, 1 }, { "acme:error:malformed", APR_EINVAL, 1 }, @@ -147,11 +148,7 @@ req->p = pool; req->method = method; req->url = url; - req->prot_hdrs = apr_table_make(pool, 5); - if (!req->prot_hdrs) { - apr_pool_destroy(pool); - return NULL; - } + req->prot_fields = md_json_create(pool); req->max_retries = acme->max_retries; req->result = md_result_make(req->p, APR_SUCCESS); return req; @@ -207,6 +204,7 @@ switch (res->status) { case 400: return APR_EINVAL; + case 401: /* sectigo returns this instead of 403 */ case 403: return APR_EACCES; case 404: @@ -246,7 +244,7 @@ md_log_perror(MD_LOG_MARK, MD_LOG_TRACE1, 0, req->p, "acme payload(len=%" APR_SIZE_T_FMT "): %s", payload.len, payload.data); return md_jws_sign(&req->req_json, req->p, &payload, - req->prot_hdrs, req->acme->acct_key, req->acme->acct->url); + req->prot_fields, req->acme->acct_key, req->acme->acct->url); } apr_status_t md_acme_req_body_init(md_acme_req_t *req, md_json_t *payload) @@ -377,9 +375,9 @@ "error retrieving new nonce from ACME server"); goto leave; } - - apr_table_set(req->prot_hdrs, "nonce", acme->nonce); - apr_table_set(req->prot_hdrs, "url", req->url); + + md_json_sets(acme->nonce, req->prot_fields, "nonce", NULL); + md_json_sets(req->url, req->prot_fields, "url", NULL); acme->nonce = NULL; } @@ -389,14 +387,13 @@ if (req->req_json) { body = apr_pcalloc(req->p, sizeof(*body)); body->data = md_json_writep(req->req_json, req->p, MD_JSON_FMT_INDENT); - if (!body) { - rv = APR_EINVAL; goto leave; - } body->len = strlen(body->data); + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE3, 0, req->p, + "sending JSON body: %s", body->data); } - if (body && md_log_is_level(req->p, MD_LOG_TRACE2)) { - md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, 0, req->p, + if (body && md_log_is_level(req->p, MD_LOG_TRACE4)) { + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE4, 0, req->p, "req: %s %s, body:\n%s", req->method, req->url, body->data); } else { @@ -549,10 +546,35 @@ md_acme_acct_t *acct; md_pkey_t *pkey; apr_status_t rv; - - if (APR_SUCCESS == (rv = md_acme_acct_load(&acct, &pkey, + + if (APR_SUCCESS == (rv = md_acme_acct_load(&acct, &pkey, + store, MD_SG_ACCOUNTS, acct_id, acme->p))) { + if (md_acme_acct_matches_url(acct, acme->url)) { + acme->acct_id = apr_pstrdup(p, acct_id); + acme->acct = acct; + acme->acct_key = pkey; + rv = md_acme_acct_validate(acme, store, p); + } + else { + /* account is from another server or, more likely, from another + * protocol endpoint on the same server */ + rv = APR_ENOENT; + } + } + return rv; +} + +apr_status_t md_acme_use_acct_for_md(md_acme_t *acme, struct md_store_t *store, + apr_pool_t *p, const char *acct_id, + const md_t *md) +{ + md_acme_acct_t *acct; + md_pkey_t *pkey; + apr_status_t rv; + + if (APR_SUCCESS == (rv = md_acme_acct_load(&acct, &pkey, store, MD_SG_ACCOUNTS, acct_id, acme->p))) { - if (acct->ca_url && !strcmp(acct->ca_url, acme->url)) { + if (md_acme_acct_matches_md(acct, md)) { acme->acct_id = apr_pstrdup(p, acct_id); acme->acct = acct; acme->acct_key = pkey; @@ -701,7 +723,8 @@ && acme->api.v2.new_nonce) { acme->version = MD_ACME_VERSION_2; } - acme->ca_agreement = md_json_dups(acme->p, json, "meta", "termsOfService", NULL); + acme->ca_agreement = md_json_dups(acme->p, json, "meta", MD_KEY_TOS, NULL); + acme->eab_required = md_json_getb(json, "meta", MD_KEY_EAB_REQUIRED, NULL); acme->new_nonce_fn = acmev2_new_nonce; acme->req_init_fn = acmev2_req_init; acme->post_new_account_fn = acmev2_POST_new_account; diff -Nru apache2-2.4.51/modules/md/md_acme.h apache2-2.4.52/modules/md/md_acme.h --- apache2-2.4.51/modules/md/md_acme.h 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme.h 2021-11-24 11:07:53.000000000 +0000 @@ -122,6 +122,7 @@ } api; const char *ca_agreement; const char *acct_name; + int eab_required; md_acme_new_nonce_fn *new_nonce_fn; md_acme_req_init_fn *req_init_fn; @@ -185,12 +186,29 @@ /** * Specify the account to use by name in local store. On success, the account - * the "current" one used by the acme instance. + * is the "current" one used by the acme instance. + * @param acme the acme instance to set the account for + * @param store the store to load accounts from + * @param p pool for allocations + * @param acct_id name of the account to load */ apr_status_t md_acme_use_acct(md_acme_t *acme, struct md_store_t *store, apr_pool_t *p, const char *acct_id); /** + * Specify the account to use for a specific MD by name in local store. + * On success, the account is the "current" one used by the acme instance. + * @param acme the acme instance to set the account for + * @param store the store to load accounts from + * @param p pool for allocations + * @param acct_id name of the account to load + * @param md the MD the account shall be used for + */ +apr_status_t md_acme_use_acct_for_md(md_acme_t *acme, struct md_store_t *store, + apr_pool_t *p, const char *acct_id, + const md_t *md); + +/** * Get the local name of the account currently used by the acme instance. * Will be NULL if no account has been setup successfully. */ @@ -232,7 +250,7 @@ const char *url; /* url to POST the request to */ const char *method; /* HTTP method to use */ - apr_table_t *prot_hdrs; /* JWS headers needing protection (nonce) */ + struct md_json_t *prot_fields; /* JWS protected fields */ struct md_json_t *req_json; /* JSON to be POSTed in request body */ apr_table_t *resp_hdrs; /* HTTP response headers */ diff -Nru apache2-2.4.51/modules/md/md_acme_acct.c apache2-2.4.52/modules/md/md_acme_acct.c --- apache2-2.4.51/modules/md/md_acme_acct.c 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme_acct.c 2021-11-24 11:07:53.000000000 +0000 @@ -30,6 +30,7 @@ #include "md_json.h" #include "md_jws.h" #include "md_log.h" +#include "md_result.h" #include "md_store.h" #include "md_util.h" #include "md_version.h" @@ -43,7 +44,6 @@ md_acme_acct_t *acct; acct = apr_pcalloc(p, sizeof(*acct)); - acct->ca_url = ca_url; if (!contacts || apr_is_empty_array(contacts)) { acct->contacts = apr_array_make(p, 5, sizeof(const char *)); @@ -114,7 +114,9 @@ if (acct->registration) md_json_setj(acct->registration, jacct, MD_KEY_REGISTRATION, NULL); if (acct->agreement) md_json_sets(acct->agreement, jacct, MD_KEY_AGREEMENT, NULL); if (acct->orders) md_json_sets(acct->orders, jacct, MD_KEY_ORDERS, NULL); - + if (acct->eab_kid) md_json_sets(acct->eab_kid, jacct, MD_KEY_EAB, MD_KEY_KID, NULL); + if (acct->eab_hmac) md_json_sets(acct->eab_hmac, jacct, MD_KEY_EAB, MD_KEY_HMAC, NULL); + return jacct; } @@ -129,22 +131,17 @@ if (md_json_has_key(json, MD_KEY_STATUS, NULL)) { status = acct_st_from_str(md_json_gets(json, MD_KEY_STATUS, NULL)); } - else { - /* old accounts only had disabled boolean field */ - status = md_json_getb(json, MD_KEY_DISABLED, NULL)? - MD_ACME_ACCT_ST_DEACTIVATED : MD_ACME_ACCT_ST_VALID; - } - + url = md_json_gets(json, MD_KEY_URL, NULL); if (!url) { md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, p, "account has no url"); - goto out; + goto leave; } ca_url = md_json_gets(json, MD_KEY_CA_URL, NULL); if (!ca_url) { md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, p, "account has no CA url: %s", url); - goto out; + goto leave; } contacts = apr_array_make(p, 5, sizeof(const char *)); @@ -155,14 +152,23 @@ md_json_getsa(contacts, json, MD_KEY_REGISTRATION, MD_KEY_CONTACT, NULL); } rv = acct_make(&acct, p, ca_url, contacts); - if (APR_SUCCESS == rv) { - acct->status = status; - acct->url = url; + if (APR_SUCCESS != rv) goto leave; + + acct->status = status; + acct->url = url; + acct->agreement = md_json_gets(json, MD_KEY_AGREEMENT, NULL); + if (!acct->agreement) { + /* backward compatible check */ acct->agreement = md_json_gets(json, "terms-of-service", NULL); - acct->orders = md_json_gets(json, MD_KEY_ORDERS, NULL); + } + acct->orders = md_json_gets(json, MD_KEY_ORDERS, NULL); + if (md_json_has_key(json, MD_KEY_EAB, MD_KEY_KID, NULL) + && md_json_has_key(json, MD_KEY_EAB, MD_KEY_HMAC, NULL)) { + acct->eab_kid = md_json_gets(json, MD_KEY_EAB, MD_KEY_KID, NULL); + acct->eab_hmac = md_json_gets(json, MD_KEY_EAB, MD_KEY_HMAC, NULL); } -out: +leave: *pacct = (APR_SUCCESS == rv)? acct : NULL; return rv; } @@ -228,10 +234,36 @@ /**************************************************************************************************/ /* Lookup */ +int md_acme_acct_matches_url(md_acme_acct_t *acct, const char *url) +{ + /* The ACME url must match exactly */ + if (!url || !acct->ca_url || strcmp(acct->ca_url, url)) return 0; + return 1; +} + +int md_acme_acct_matches_md(md_acme_acct_t *acct, const md_t *md) +{ + if (!md_acme_acct_matches_url(acct, md->ca_url)) return 0; + /* if eab values are not mentioned, we match an account regardless + * if it was registered with eab or not */ + if (!md->ca_eab_kid || !md->ca_eab_hmac) { + /* No eab only acceptable when no eab is asked for. + * This prevents someone that has no external account binding + * to re-use an account from another MDomain that was created + * with a binding. */ + return !acct->eab_kid || !acct->eab_hmac; + } + /* But of eab is asked for, we need an acct that matches exactly. + * When someone configures a new EAB and we need + * to created a new account for it. */ + if (!acct->eab_kid || !acct->eab_hmac) return 0; + return !strcmp(acct->eab_kid, md->ca_eab_kid) + && !strcmp(acct->eab_hmac, md->ca_eab_hmac); +} + typedef struct { apr_pool_t *p; - md_acme_t *acme; - int url_match; + const md_t *md; const char *id; } find_ctx; @@ -239,50 +271,46 @@ md_store_vtype_t vtype, void *value, apr_pool_t *ptemp) { find_ctx *ctx = baton; - int disabled; - const char *ca_url, *status; - + md_acme_acct_t *acct; + apr_status_t rv; + (void)aspect; (void)ptemp; md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, ctx->p, "account candidate %s/%s", name, aspect); if (MD_SV_JSON == vtype) { - md_json_t *json = value; - - status = md_json_gets(json, MD_KEY_STATUS, NULL); - disabled = md_json_getb(json, MD_KEY_DISABLED, NULL); - ca_url = md_json_gets(json, MD_KEY_CA_URL, NULL); - - if ((!status || !strcmp("valid", status)) && !disabled - && (!ctx->url_match || (ca_url && !strcmp(ctx->acme->url, ca_url)))) { + rv = md_acme_acct_from_json(&acct, (md_json_t*)value, ptemp); + if (APR_SUCCESS != rv) goto cleanup; + + if (MD_ACME_ACCT_ST_VALID == acct->status + && (!ctx->md || md_acme_acct_matches_md(acct, ctx->md))) { md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, ctx->p, - "found account %s for %s: %s, status=%s, disabled=%d, ca-url=%s", - name, ctx->acme->url, aspect, status, disabled, ca_url); + "found account %s for %s: %s, status=%d", + acct->id, ctx->md->ca_url, aspect, acct->status); ctx->id = apr_pstrdup(ctx->p, name); return 0; } } +cleanup: return 1; } static apr_status_t acct_find(const char **pid, md_acme_acct_t **pacct, md_pkey_t **ppkey, md_store_t *store, md_store_group_t group, - const char *name_pattern, int url_match, - md_acme_t *acme, apr_pool_t *p) + const char *name_pattern, + const md_t *md, apr_pool_t *p) { apr_status_t rv; find_ctx ctx; - + + memset(&ctx, 0, sizeof(ctx)); ctx.p = p; - ctx.acme = acme; - ctx.id = NULL; - ctx.url_match = url_match; - *pid = NULL; - + ctx.md = md; + rv = md_store_iter(find_acct, &ctx, store, p, group, name_pattern, MD_FN_ACCOUNT, MD_SV_JSON); if (ctx.id) { *pid = ctx.id; rv = md_acme_acct_load(pacct, ppkey, store, group, ctx.id, p); - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "loading account %s", ctx.id); + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "acct_find: got account %s", ctx.id); } else { *pacct = NULL; @@ -293,19 +321,26 @@ } static apr_status_t acct_find_and_verify(md_store_t *store, md_store_group_t group, - const char *name_pattern, md_acme_t *acme, apr_pool_t *p) + const char *name_pattern, + md_acme_t *acme, const md_t *md, + apr_pool_t *p) { md_acme_acct_t *acct; md_pkey_t *pkey; const char *id; apr_status_t rv; - if (APR_SUCCESS == (rv = acct_find(&id, &acct, &pkey, store, group, name_pattern, 1, acme, p))) { + rv = acct_find(&id, &acct, &pkey, store, group, name_pattern, md, p); + if (APR_SUCCESS == rv) { + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE1, 0, p, "acct_find_and_verify: found %s", + id); acme->acct_id = (MD_SG_STAGING == group)? NULL : id; acme->acct = acct; acme->acct_key = pkey; - rv = md_acme_acct_validate(acme, NULL, p); - + rv = md_acme_acct_validate(acme, (MD_SG_STAGING == group)? NULL : store, p); + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE1, rv, p, "acct_find_and_verify: verified %s", + id); + if (APR_SUCCESS != rv) { acme->acct_id = NULL; acme->acct = NULL; @@ -320,13 +355,13 @@ return rv; } -apr_status_t md_acme_find_acct(md_acme_t *acme, md_store_t *store) +apr_status_t md_acme_find_acct_for_md(md_acme_t *acme, md_store_t *store, const md_t *md) { apr_status_t rv; while (APR_EAGAIN == (rv = acct_find_and_verify(store, MD_SG_ACCOUNTS, mk_acct_pattern(acme->p, acme), - acme, acme->p))) { + acme, md, acme->p))) { /* nop */ } @@ -335,61 +370,31 @@ * can already be found in MD_SG_STAGING? */ md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, acme->p, "no account found, looking in STAGING"); - while (APR_EAGAIN == (rv = acct_find_and_verify(store, MD_SG_STAGING, "*", - acme, acme->p))) { - /* nop */ + rv = acct_find_and_verify(store, MD_SG_STAGING, "*", acme, md, acme->p); + if (APR_EAGAIN == rv) { + rv = APR_ENOENT; } } return rv; } -typedef struct { - apr_pool_t *p; - const char *url; - const char *id; -} load_ctx; - -static int id_by_url(void *baton, const char *name, const char *aspect, - md_store_vtype_t vtype, void *value, apr_pool_t *ptemp) -{ - load_ctx *ctx = baton; - int disabled; - const char *acct_url, *status; - - (void)aspect; - (void)ptemp; - if (MD_SV_JSON == vtype) { - md_json_t *json = value; - - status = md_json_gets(json, MD_KEY_STATUS, NULL); - disabled = md_json_getb(json, MD_KEY_DISABLED, NULL); - acct_url = md_json_gets(json, MD_KEY_URL, NULL); - - if ((!status || !strcmp("valid", status)) && !disabled - && acct_url && !strcmp(ctx->url, acct_url)) { - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, ctx->p, - "found account %s for url %s: %s, status=%s, disabled=%d", - name, ctx->url, aspect, status, disabled); - ctx->id = apr_pstrdup(ctx->p, name); - return 0; - } - } - return 1; -} - -apr_status_t md_acme_acct_id_for_url(const char **pid, md_store_t *store, - md_store_group_t group, const char *url, apr_pool_t *p) +apr_status_t md_acme_acct_id_for_md(const char **pid, md_store_t *store, + md_store_group_t group, const md_t *md, + apr_pool_t *p) { apr_status_t rv; - load_ctx ctx; - + find_ctx ctx; + + memset(&ctx, 0, sizeof(ctx)); ctx.p = p; - ctx.url = url; - ctx.id = NULL; - - rv = md_store_iter(id_by_url, &ctx, store, p, group, "*", MD_FN_ACCOUNT, MD_SV_JSON); - *pid = (APR_SUCCESS == rv)? ctx.id : NULL; - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "acct_id_by_url %s -> %s", url, *pid); + ctx.md = md; + + rv = md_store_iter(find_acct, &ctx, store, p, group, "*", MD_FN_ACCOUNT, MD_SV_JSON); + if (ctx.id) { + *pid = ctx.id; + rv = APR_SUCCESS; + } + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "acct_id_for_md %s -> %s", md->name, *pid); return rv; } @@ -399,6 +404,8 @@ md_acme_t *acme; apr_pool_t *p; const char *agreement; + const char *eab_kid; + const char *eab_hmac; } acct_ctx_t; /**************************************************************************************************/ @@ -416,7 +423,12 @@ acct_ctx_t *ctx = baton; apr_status_t rv = APR_SUCCESS; md_acme_acct_t *acct = acme->acct; - + + if (md_log_is_level(p, MD_LOG_TRACE2)) { + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, 0, acme->p, "acct update response: %s", + md_json_writep(body, p, MD_JSON_FMT_COMPACT)); + } + if (!acct->url) { const char *location = apr_table_get(hdrs, "location"); if (!location) { @@ -437,6 +449,10 @@ if (md_json_has_key(body, MD_KEY_ORDERS, NULL)) { acct->orders = md_json_dups(acme->p, body, MD_KEY_ORDERS, NULL); } + if (ctx->eab_kid && ctx->eab_hmac) { + acct->eab_kid = ctx->eab_kid; + acct->eab_hmac = ctx->eab_hmac; + } acct->registration = md_json_clone(ctx->p, body); md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "updated acct %s", acct->url); @@ -451,6 +467,7 @@ if (!acme->acct) { return APR_EINVAL; } + memset(&ctx, 0, sizeof(ctx)); ctx.acme = acme; ctx.p = acme->p; return md_acme_POST(acme, acme->acct->url, on_init_acct_upd, acct_upd, NULL, NULL, &ctx); @@ -461,7 +478,16 @@ apr_status_t rv; if (APR_SUCCESS != (rv = md_acme_acct_update(acme))) { - if (acme->acct && (APR_ENOENT == rv || APR_EACCES == rv)) { + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE1, rv, acme->p, + "acct update failed for %s", acme->acct->url); + if (APR_EINVAL == rv && (acme->acct->agreement || !acme->ca_agreement)) { + /* Sadly, some proprietary ACME servers choke on empty POSTs + * on accounts. Try a faked ToS agreement. */ + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE1, rv, acme->p, + "trying acct update via ToS agreement"); + rv = md_acme_agree(acme, p, "accepted"); + } + if (acme->acct && (APR_ENOENT == rv || APR_EACCES == rv || APR_EINVAL == rv)) { if (MD_ACME_ACCT_ST_VALID == acme->acct->status) { acme->acct->status = MD_ACME_ACCT_ST_UNKNOWN; if (store) { @@ -479,21 +505,73 @@ /**************************************************************************************************/ /* Register a new account */ +static apr_status_t get_eab(md_json_t **peab, md_acme_req_t *req, const char *kid, + const char *hmac64, md_pkey_t *account_key, + const char *url) +{ + md_json_t *eab, *prot_fields, *jwk; + md_data_t payload, hmac_key; + apr_status_t rv; + + prot_fields = md_json_create(req->p); + md_json_sets(url, prot_fields, "url", NULL); + md_json_sets(kid, prot_fields, "kid", NULL); + + rv = md_jws_get_jwk(&jwk, req->p, account_key); + if (APR_SUCCESS != rv) goto cleanup; + + md_data_null(&payload); + payload.data = md_json_writep(jwk, req->p, MD_JSON_FMT_COMPACT); + if (!payload.data) { + rv = APR_EINVAL; + goto cleanup; + } + payload.len = strlen(payload.data); + + md_util_base64url_decode(&hmac_key, hmac64, req->p); + if (!hmac_key.len) { + rv = APR_EINVAL; + md_result_problem_set(req->result, rv, "apache:eab-hmac-invalid", + "external account binding HMAC value is not valid base64", NULL); + goto cleanup; + } + + rv = md_jws_hmac(&eab, req->p, &payload, prot_fields, &hmac_key); + if (APR_SUCCESS != rv) { + md_result_problem_set(req->result, rv, "apache:eab-hmac-fail", + "external account binding MAC could not be computed", NULL); + } + +cleanup: + *peab = (APR_SUCCESS == rv)? eab : NULL; + return rv; +} + static apr_status_t on_init_acct_new(md_acme_req_t *req, void *baton) { acct_ctx_t *ctx = baton; - md_json_t *jpayload; + md_json_t *jpayload, *jeab; + apr_status_t rv; jpayload = md_json_create(req->p); md_json_setsa(ctx->acme->acct->contacts, jpayload, MD_KEY_CONTACT, NULL); if (ctx->agreement) { md_json_setb(1, jpayload, "termsOfServiceAgreed", NULL); } - return md_acme_req_body_init(req, jpayload); + if (ctx->eab_kid && ctx->eab_hmac) { + rv = get_eab(&jeab, req, ctx->eab_kid, ctx->eab_hmac, + req->acme->acct_key, req->url); + if (APR_SUCCESS != rv) goto cleanup; + md_json_setj(jeab, jpayload, "externalAccountBinding", NULL); + } + rv = md_acme_req_body_init(req, jpayload); + +cleanup: + return rv; } -apr_status_t md_acme_acct_register(md_acme_t *acme, md_store_t *store, apr_pool_t *p, - apr_array_header_t *contacts, const char *agreement) +apr_status_t md_acme_acct_register(md_acme_t *acme, md_store_t *store, + const md_t *md, apr_pool_t *p) { apr_status_t rv; md_pkey_t *pkey; @@ -503,15 +581,17 @@ acct_ctx_t ctx; md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, p, "create new account"); - + + memset(&ctx, 0, sizeof(ctx)); ctx.acme = acme; ctx.p = p; /* The agreement URL is submitted when the ACME server announces Terms-of-Service * in its directory meta data. The magic value "accepted" will always use the * advertised URL. */ ctx.agreement = NULL; - if (acme->ca_agreement && agreement) { - ctx.agreement = !strcmp("accepted", agreement)? acme->ca_agreement : agreement; + if (acme->ca_agreement && md->ca_agreement) { + ctx.agreement = !strcmp("accepted", md->ca_agreement)? + acme->ca_agreement : md->ca_agreement; } if (ctx.agreement) { @@ -521,9 +601,11 @@ goto out; } } + ctx.eab_kid = md->ca_eab_kid; + ctx.eab_hmac = md->ca_eab_hmac; - for (i = 0; i < contacts->nelts; ++i) { - uri = APR_ARRAY_IDX(contacts, i, const char *); + for (i = 0; i < md->contacts->nelts; ++i) { + uri = APR_ARRAY_IDX(md->contacts, i, const char *); if (APR_SUCCESS != (rv = md_util_abs_uri_check(acme->p, uri, &err))) { md_log_perror(MD_LOG_MARK, MD_LOG_ERR, 0, p, "invalid contact uri (%s): %s", err, uri); @@ -540,19 +622,19 @@ */ if (!acme->acct_key) { find_ctx fctx; - + + memset(&fctx, 0, sizeof(fctx)); fctx.p = p; - fctx.acme = acme; - fctx.id = NULL; - fctx.url_match = 0; - + fctx.md = md; + md_store_iter(find_acct, &fctx, store, p, MD_SG_ACCOUNTS, mk_acct_pattern(p, acme), MD_FN_ACCOUNT, MD_SV_JSON); if (fctx.id) { - rv = md_store_load(store, MD_SG_ACCOUNTS, fctx.id, MD_FN_ACCT_KEY, MD_SV_PKEY, + rv = md_store_load(store, MD_SG_ACCOUNTS, fctx.id, MD_FN_ACCT_KEY, MD_SV_PKEY, (void**)&acme->acct_key, p); if (APR_SUCCESS == rv) { - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "reusing key from account %s", fctx.id); + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, + "reusing key from account %s", fctx.id); } else { acme->acct_key = NULL; @@ -570,7 +652,7 @@ md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "created new account key"); } - if (APR_SUCCESS != (rv = acct_make(&acme->acct, p, acme->url, contacts))) goto out; + if (APR_SUCCESS != (rv = acct_make(&acme->acct, p, acme->url, md->contacts))) goto out; rv = md_acme_POST_new_account(acme, on_init_acct_new, acct_upd, NULL, NULL, &ctx); if (APR_SUCCESS == rv) { md_log_perror(MD_LOG_MARK, MD_LOG_INFO, 0, p, @@ -608,6 +690,7 @@ } md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, acme->p, "delete account %s from %s", acct->url, acct->ca_url); + memset(&ctx, 0, sizeof(ctx)); ctx.acme = acme; ctx.p = p; return md_acme_POST(acme, acct->url, on_init_acct_del, acct_upd, NULL, NULL, &ctx); @@ -637,6 +720,7 @@ acme->acct->agreement = acme->ca_agreement; } + memset(&ctx, 0, sizeof(ctx)); ctx.acme = acme; ctx.p = p; return md_acme_POST(acme, acme->acct->url, on_init_agree_tos, acct_upd, NULL, NULL, &ctx); diff -Nru apache2-2.4.51/modules/md/md_acme_acct.h apache2-2.4.52/modules/md/md_acme_acct.h --- apache2-2.4.51/modules/md/md_acme_acct.h 2019-10-25 13:27:12.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme_acct.h 2021-11-24 11:07:53.000000000 +0000 @@ -44,6 +44,8 @@ const char *tos_required; /* terms of service asked for by CA */ const char *agreement; /* terms of service agreed to by user */ const char *orders; /* URL where certificate orders are found (ACMEv2) */ + const char *eab_kid; /* external account binding keyid used or NULL */ + const char *eab_hmac; /* external account binding hmac used or NULL */ struct md_json_t *registration; /* data from server registration */ }; @@ -104,21 +106,20 @@ * Find an existing account in the local store. On APR_SUCCESS, the acme * instance will have a current, validated account to use. */ -apr_status_t md_acme_find_acct(md_acme_t *acme, md_store_t *store); +apr_status_t md_acme_find_acct_for_md(md_acme_t *acme, md_store_t *store, const md_t *md); /** - * Find the account id for a given account url. + * Find the account id for a given md. */ -apr_status_t md_acme_acct_id_for_url(const char **pid, md_store_t *store, - md_store_group_t group, const char *url, apr_pool_t *p); +apr_status_t md_acme_acct_id_for_md(const char **pid, md_store_t *store, + md_store_group_t group, const md_t *md, apr_pool_t *p); /** - * Create a new account at the ACME server. The + * Create a new account at the ACME server for an MD. The * new account is the one used by the acme instance afterwards, on success. */ apr_status_t md_acme_acct_register(md_acme_t *acme, md_store_t *store, - apr_pool_t *p, apr_array_header_t *contacts, - const char *agreement); + const md_t *md, apr_pool_t *p); apr_status_t md_acme_acct_save(md_store_t *store, apr_pool_t *p, md_acme_t *acme, const char **pid, struct md_acme_acct_t *acct, @@ -133,4 +134,15 @@ md_store_t *store, md_store_group_t group, const char *name, apr_pool_t *p); +/* + * Return != 0 iff the account can be used for the ACME url. + */ +int md_acme_acct_matches_url(md_acme_acct_t *acct, const char *url); + +/* + * Return != 0 iff the account can be used for the MD, including + * its CA url and EAB settings. + */ +int md_acme_acct_matches_md(md_acme_acct_t *acct, const md_t *md); + #endif /* md_acme_acct_h */ diff -Nru apache2-2.4.51/modules/md/md_acme_authz.c apache2-2.4.52/modules/md/md_acme_authz.c --- apache2-2.4.51/modules/md/md_acme_authz.c 2021-09-17 12:41:45.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme_authz.c 2021-11-24 11:07:53.000000000 +0000 @@ -393,7 +393,13 @@ /* Raise event that challenge data has been set up before we tell the ACME server. Clusters might want to distribute it. */ event = apr_psprintf(p, "challenge-setup:%s:%s", MD_AUTHZ_TYPE_TLSALPN01, authz->domain); - md_result_holler(result, event, p); + rv = md_result_raise(result, event, p); + if (APR_SUCCESS != rv) { + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, + "%s: event '%s' failed. aborting challenge setup", + authz->domain, event); + goto out; + } /* challenge is setup or was changed from previous data, tell ACME server * so it may (re)try verification */ authz_req_ctx_init(&ctx, acme, NULL, authz, p); @@ -463,7 +469,13 @@ /* Raise event that challenge data has been set up before we tell the ACME server. Clusters might want to distribute it. */ event = apr_psprintf(p, "challenge-setup:%s:%s", MD_AUTHZ_TYPE_DNS01, authz->domain); - md_result_holler(result, event, p); + rv = md_result_raise(result, event, p); + if (APR_SUCCESS != rv) { + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, + "%s: event '%s' failed. aborting challenge setup", + authz->domain, event); + goto out; + } /* challenge is setup, tell ACME server so it may (re)try verification */ md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "%s: dns-01 setup succeeded for %s", mdomain, authz->domain); diff -Nru apache2-2.4.51/modules/md/md_acme_drive.c apache2-2.4.52/modules/md/md_acme_drive.c --- apache2-2.4.51/modules/md/md_acme_drive.c 2021-09-01 13:22:19.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme_drive.c 2021-11-24 11:07:53.000000000 +0000 @@ -46,14 +46,14 @@ /* account setup */ static apr_status_t use_staged_acct(md_acme_t *acme, struct md_store_t *store, - const char *md_name, apr_pool_t *p) + const md_t *md, apr_pool_t *p) { md_acme_acct_t *acct; md_pkey_t *pkey; apr_status_t rv; if (APR_SUCCESS == (rv = md_acme_acct_load(&acct, &pkey, store, - MD_SG_STAGING, md_name, acme->p))) { + MD_SG_STAGING, md->name, acme->p))) { acme->acct_id = NULL; acme->acct = acct; acme->acct_key = pkey; @@ -89,7 +89,7 @@ md_acme_clear_acct(ad->acme); /* Do we have a staged (modified) account? */ - if (APR_SUCCESS == (rv = use_staged_acct(ad->acme, d->store, md->name, d->p))) { + if (APR_SUCCESS == (rv = use_staged_acct(ad->acme, d->store, md, d->p))) { md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, d->p, "re-using staged account"); } else if (!APR_STATUS_IS_ENOENT(rv)) { @@ -99,7 +99,7 @@ /* Get an account for the ACME server for this MD */ if (!ad->acme->acct && md->ca_account) { md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, d->p, "re-use account '%s'", md->ca_account); - rv = md_acme_use_acct(ad->acme, d->store, d->p, md->ca_account); + rv = md_acme_use_acct_for_md(ad->acme, d->store, d->p, md->ca_account, md); if (APR_STATUS_IS_ENOENT(rv) || APR_STATUS_IS_EINVAL(rv)) { md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, d->p, "rejected %s", md->ca_account); md->ca_account = NULL; @@ -114,7 +114,7 @@ /* Find a local account for server, store at MD */ md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, d->p, "%s: looking at existing accounts", d->proto->protocol); - if (APR_SUCCESS == (rv = md_acme_find_acct(ad->acme, d->store))) { + if (APR_SUCCESS == (rv = md_acme_find_acct_for_md(ad->acme, d->store, md))) { md->ca_account = md_acme_acct_id_get(ad->acme); update_md = 1; md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, d->p, "%s: using account %s (id=%s)", @@ -153,7 +153,19 @@ goto leave; } - rv = md_acme_acct_register(ad->acme, d->store, d->p, md->contacts, md->ca_agreement); + if (ad->acme->eab_required && (!md->ca_eab_kid || !strcmp("none", md->ca_eab_kid))) { + md_result_printf(result, APR_EINVAL, + "the CA requires 'External Account Binding' which is not " + "configured. This means you need to obtain a 'Key ID' and a " + "'HMAC' from the CA and configure that using the " + "MDExternalAccountBinding directive in your config. " + "The creation of a new ACME account will most likely fail, " + "but an attempt is made anyway.", + ad->acme->ca_agreement); + md_result_log(result, MD_LOG_INFO); + } + + rv = md_acme_acct_register(ad->acme, d->store, md, d->p); if (APR_SUCCESS != rv) { if (APR_SUCCESS != ad->acme->last->status) { md_result_dup(result, ad->acme->last); @@ -169,11 +181,11 @@ leave: /* Persist MD changes in STAGING, so we pick them up on next run */ - if (APR_SUCCESS == rv&& update_md) { + if (APR_SUCCESS == rv && update_md) { rv = md_save(d->store, d->p, MD_SG_STAGING, ad->md, 0); } /* Persist account changes in STAGING, so we pick them up on next run */ - if (APR_SUCCESS == rv&& update_acct) { + if (APR_SUCCESS == rv && update_acct) { rv = save_acct_staged(ad->acme, d->store, md->name, d->p); } return rv; @@ -894,6 +906,7 @@ md_credentials_t *creds; apr_array_header_t *all_creds; struct md_acme_acct_t *acct; + const char *id; int i; md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, d->p, "%s: preload start", name); @@ -953,7 +966,6 @@ if (acct) { md_acme_t *acme; - const char *id = md->ca_account; /* We may have STAGED the same account several times. This happens when * several MDs are renewed at once and need a new account. They will all store @@ -961,8 +973,9 @@ * the same url, we save them all into a single one. */ md_result_activity_setn(result, "saving staged account"); - if (!id && acct->url) { - rv = md_acme_acct_id_for_url(&id, d->store, MD_SG_ACCOUNTS, acct->url, d->p); + id = md->ca_account; + if (!id) { + rv = md_acme_acct_id_for_md(&id, d->store, MD_SG_ACCOUNTS, md, d->p); if (APR_STATUS_IS_ENOENT(rv)) { id = NULL; } @@ -983,6 +996,14 @@ } md->ca_account = id; } + else if (!md->ca_account) { + /* staging reused another account and did not create a new one. find + * the account, if it is already there */ + rv = md_acme_acct_id_for_md(&id, d->store, MD_SG_ACCOUNTS, md, d->p); + if (APR_SUCCESS == rv) { + md->ca_account = id; + } + } md_result_activity_setn(result, "saving staged md/privkey/pubcert"); if (APR_SUCCESS != (rv = md_save(d->store, d->p, load_group, md, 1))) { diff -Nru apache2-2.4.51/modules/md/md_acme_order.c apache2-2.4.52/modules/md/md_acme_order.c --- apache2-2.4.51/modules/md/md_acme_order.c 2021-07-20 13:07:54.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme_order.c 2021-11-24 11:07:53.000000000 +0000 @@ -397,10 +397,15 @@ ctx->result, ctx->p))) goto out; switch (ctx->order->status) { case MD_ACME_ORDER_ST_VALID: + md_result_set(ctx->result, APR_EINVAL, "ACME server order status is 'valid'."); break; case MD_ACME_ORDER_ST_PROCESSING: rv = APR_EAGAIN; break; + case MD_ACME_ORDER_ST_INVALID: + md_result_set(ctx->result, APR_EINVAL, "ACME server order status is 'invalid'."); + rv = APR_EINVAL; + break; default: rv = APR_EINVAL; break; @@ -515,12 +520,10 @@ goto leave; case MD_ACME_AUTHZ_S_INVALID: rv = APR_EINVAL; - if (!authz->error_type) { - md_result_printf(ctx->result, rv, - "domain authorization for %s failed, CA considers " - "answer to challenge invalid, no error given", - authz->domain); - } + md_result_printf(ctx->result, rv, + "domain authorization for %s failed, CA considers " + "answer to challenge invalid%s.", + authz->domain, authz->error_type? "" : ", no error given"); md_result_log(ctx->result, MD_LOG_ERR); goto leave; default: diff -Nru apache2-2.4.51/modules/md/md_acme_order.h apache2-2.4.52/modules/md/md_acme_order.h --- apache2-2.4.51/modules/md/md_acme_order.h 2019-07-09 08:40:17.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acme_order.h 2021-11-24 11:07:53.000000000 +0000 @@ -63,8 +63,7 @@ md_store_group_t group, const char *md_name, apr_table_t *env); - -apr_status_t md_acme_order_start_challenges(md_acme_order_t *order, md_acme_t *acme, +apr_status_t md_acme_order_start_challenges(md_acme_order_t *order, md_acme_t *acme, apr_array_header_t *challenge_types, md_store_t *store, const md_t *md, apr_table_t *env, struct md_result_t *result, diff -Nru apache2-2.4.51/modules/md/md_acmev2_drive.c apache2-2.4.52/modules/md/md_acmev2_drive.c --- apache2-2.4.51/modules/md/md_acmev2_drive.c 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/md_acmev2_drive.c 2021-11-24 11:07:53.000000000 +0000 @@ -51,7 +51,7 @@ * Either we have an order stored in the STAGING area, or we need to create a * new one at the ACME server. */ -static apr_status_t ad_setup_order(md_proto_driver_t *d, md_result_t *result) +static apr_status_t ad_setup_order(md_proto_driver_t *d, md_result_t *result, int *pis_new) { md_acme_driver_t *ad = d->baton; apr_status_t rv; @@ -65,6 +65,7 @@ * if known AUTHZ resource is not valid, remove, goto 4.1.1 * if no AUTHZ available, create a new one for the domain, store it */ + if (pis_new) *pis_new = 0; rv = md_acme_order_load(d->store, MD_SG_STAGING, md->name, &ad->order, d->p); if (APR_SUCCESS == rv) { md_result_activity_setn(result, "Loaded order from staging"); @@ -82,7 +83,8 @@ if (APR_SUCCESS != rv) { md_result_set(result, rv, "saving order in staging"); } - + if (pis_new) *pis_new = 1; + leave: md_acme_report_result(ad->acme, rv, result); return rv; @@ -94,7 +96,8 @@ apr_status_t md_acmev2_drive_renew(md_acme_driver_t *ad, md_proto_driver_t *d, md_result_t *result) { apr_status_t rv = APR_SUCCESS; - + int is_new_order = 0; + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, d->p, "%s: (ACMEv2) need certificate", d->md->name); /* Chose (or create) and ACME account to use */ @@ -115,27 +118,36 @@ * * COMPLETE: all done, return success * * INVALID and otherwise: fail renewal, delete local order */ - if (APR_SUCCESS != (rv = ad_setup_order(d, result))) { + if (APR_SUCCESS != (rv = ad_setup_order(d, result, &is_new_order))) { goto leave; } rv = md_acme_order_update(ad->order, ad->acme, result, d->p); - if (APR_STATUS_IS_ENOENT(rv)) { - /* order is no longer known at the ACME server */ + if (APR_STATUS_IS_ENOENT(rv) + || APR_STATUS_IS_EACCES(rv) + || MD_ACME_ORDER_ST_INVALID == ad->order->status) { + /* order is invalid or no longer known at the ACME server */ ad->order = NULL; md_acme_order_purge(d->store, d->p, MD_SG_STAGING, d->md->name, d->env); } else if (APR_SUCCESS != rv) { goto leave; } - + +retry: if (!ad->order) { - rv = ad_setup_order(d, result); + rv = ad_setup_order(d, result, &is_new_order); if (APR_SUCCESS != rv) goto leave; } rv = md_acme_order_start_challenges(ad->order, ad->acme, ad->ca_challenges, d->store, d->md, d->env, result, d->p); + if (!is_new_order && APR_STATUS_IS_EINVAL(rv)) { + /* found 'invalid' domains in previous order, need to start over */ + ad->order = NULL; + md_acme_order_purge(d->store, d->p, MD_SG_STAGING, d->md->name, d->env); + goto retry; + } if (APR_SUCCESS != rv) goto leave; rv = md_acme_order_monitor_authzs(ad->order, ad->acme, d->md, diff -Nru apache2-2.4.51/modules/md/md_core.c apache2-2.4.52/modules/md/md_core.c --- apache2-2.4.51/modules/md/md_core.c 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/md_core.c 2021-11-24 11:07:53.000000000 +0000 @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -277,6 +278,8 @@ md_json_setj(md_pkeys_spec_to_json(md->pks, p), json, MD_KEY_PKEY, NULL); } md_json_setl(md->state, json, MD_KEY_STATE, NULL); + if (md->state_descr) + md_json_sets(md->state_descr, json, MD_KEY_STATE_DESCR, NULL); md_json_setl(md->renew_mode, json, MD_KEY_RENEW_MODE, NULL); if (md->renew_window) md_json_sets(md_timeslice_format(md->renew_window, p), json, MD_KEY_RENEW_WINDOW, NULL); @@ -302,6 +305,10 @@ if (md->cert_files) md_json_setsa(md->cert_files, json, MD_KEY_CERT_FILES, NULL); if (md->pkey_files) md_json_setsa(md->pkey_files, json, MD_KEY_PKEY_FILES, NULL); md_json_setb(md->stapling > 0, json, MD_KEY_STAPLING, NULL); + if (md->ca_eab_kid && strcmp("none", md->ca_eab_kid)) { + md_json_sets(md->ca_eab_kid, json, MD_KEY_EAB, MD_KEY_KID, NULL); + if (md->ca_eab_hmac) md_json_sets(md->ca_eab_hmac, json, MD_KEY_EAB, MD_KEY_HMAC, NULL); + } return json; } return NULL; @@ -323,6 +330,7 @@ md->pks = md_pkeys_spec_from_json(md_json_getj(json, MD_KEY_PKEY, NULL), p); } md->state = (md_state_t)md_json_getl(json, MD_KEY_STATE, NULL); + md->state_descr = md_json_dups(p, json, MD_KEY_STATE_DESCR, NULL); if (MD_S_EXPIRED_DEPRECATED == md->state) md->state = MD_S_COMPLETE; md->renew_mode = (int)md_json_getl(json, MD_KEY_RENEW_MODE, NULL); md->domains = md_array_str_compact(p, md->domains, 0); @@ -354,8 +362,84 @@ } md->stapling = (int)md_json_getb(json, MD_KEY_STAPLING, NULL); + if (md_json_has_key(json, MD_KEY_EAB, NULL)) { + md->ca_eab_kid = md_json_dups(p, json, MD_KEY_EAB, MD_KEY_KID, NULL); + md->ca_eab_hmac = md_json_dups(p, json, MD_KEY_EAB, MD_KEY_HMAC, NULL); + } return md; } return NULL; } +md_json_t *md_to_public_json(const md_t *md, apr_pool_t *p) +{ + md_json_t *json = md_to_json(md, p); + if (md_json_has_key(json, MD_KEY_EAB, MD_KEY_HMAC, NULL)) { + md_json_sets("***", json, MD_KEY_EAB, MD_KEY_HMAC, NULL); + } + return json; +} + +typedef struct { + const char *name; + const char *url; +} md_ca_t; + +#define LE_ACMEv2_PROD "https://acme-v02.api.letsencrypt.org/directory" +#define LE_ACMEv2_STAGING "https://acme-staging-v02.api.letsencrypt.org/directory" +#define BUYPASS_ACME "https://api.buypass.com/acme/directory" +#define BUYPASS_ACME_TEST "https://api.test4.buypass.no/acme/directory" + +static md_ca_t KNOWN_CAs[] = { + { "LetsEncrypt", LE_ACMEv2_PROD }, + { "LetsEncrypt-Test", LE_ACMEv2_STAGING }, + { "Buypass", BUYPASS_ACME }, + { "Buypass-Test", BUYPASS_ACME_TEST }, +}; + +const char *md_get_ca_name_from_url(apr_pool_t *p, const char *url) +{ + apr_uri_t uri_parsed; + unsigned int i; + + for (i = 0; i < sizeof(KNOWN_CAs)/sizeof(KNOWN_CAs[0]); ++i) { + if (!apr_strnatcasecmp(KNOWN_CAs[i].url, url)) { + return KNOWN_CAs[i].name; + } + } + if (APR_SUCCESS == apr_uri_parse(p, url, &uri_parsed)) { + return uri_parsed.hostname; + } + return apr_pstrdup(p, url); +} + +apr_status_t md_get_ca_url_from_name(const char **purl, apr_pool_t *p, const char *name) +{ + const char *err; + unsigned int i; + apr_status_t rv = APR_SUCCESS; + + *purl = NULL; + for (i = 0; i < sizeof(KNOWN_CAs)/sizeof(KNOWN_CAs[0]); ++i) { + if (!apr_strnatcasecmp(KNOWN_CAs[i].name, name)) { + *purl = KNOWN_CAs[i].url; + goto leave; + } + } + *purl = name; + rv = md_util_abs_http_uri_check(p, name, &err); + if (APR_SUCCESS != rv) { + apr_array_header_t *names; + + names = apr_array_make(p, 10, sizeof(const char*)); + for (i = 0; i < sizeof(KNOWN_CAs)/sizeof(KNOWN_CAs[0]); ++i) { + APR_ARRAY_PUSH(names, const char *) = KNOWN_CAs[i].name; + } + *purl = apr_psprintf(p, + "The CA name '%s' is not known and it is not a URL either (%s). " + "Known CA names are: %s.", + name, err, apr_array_pstrcat(p, names, ' ')); + } +leave: + return rv; +} diff -Nru apache2-2.4.51/modules/md/md_crypt.c apache2-2.4.52/modules/md/md_crypt.c --- apache2-2.4.51/modules/md/md_crypt.c 2021-09-01 13:22:19.000000000 +0000 +++ apache2-2.4.52/modules/md/md_crypt.c 2021-11-24 11:07:53.000000000 +0000 @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -643,6 +644,7 @@ const EVP_CIPHER *cipher = NULL; pem_password_cb *cb = NULL; void *cb_baton = NULL; + apr_status_t rv = APR_SUCCESS; passwd_ctx ctx; unsigned long err; int i; @@ -651,7 +653,8 @@ return APR_ENOMEM; } if (pass_len > INT_MAX) { - return APR_EINVAL; + rv = APR_EINVAL; + goto cleanup; } if (pass && pass_len > 0) { ctx.pass_phrase = pass; @@ -660,7 +663,8 @@ cb_baton = &ctx; cipher = EVP_aes_256_cbc(); if (!cipher) { - return APR_ENOTIMPL; + rv = APR_ENOTIMPL; + goto cleanup; } } @@ -670,11 +674,11 @@ #else if (!PEM_write_bio_PrivateKey(bio, pkey->pkey, cipher, NULL, 0, cb, cb_baton)) { #endif - BIO_free(bio); err = ERR_get_error(); md_log_perror(MD_LOG_MARK, MD_LOG_ERR, 0, p, "PEM_write key: %ld %s", err, ERR_error_string(err, NULL)); - return APR_EINVAL; + rv = APR_EINVAL; + goto cleanup; } md_data_null(buf); @@ -684,8 +688,10 @@ i = BIO_read(bio, (char*)buf->data, i); buf->len = (apr_size_t)i; } + +cleanup: BIO_free(bio); - return APR_SUCCESS; + return rv; } apr_status_t md_pkey_fsave(md_pkey_t *pkey, apr_pool_t *p, @@ -786,21 +792,25 @@ #ifdef NID_secp384r1 if (NID_undef == curve_nid && !apr_strnatcasecmp("secp384r1", curve)) { curve_nid = NID_secp384r1; + curve = EC_curve_nid2nist(curve_nid); } #endif #ifdef NID_X9_62_prime256v1 if (NID_undef == curve_nid && !apr_strnatcasecmp("secp256r1", curve)) { curve_nid = NID_X9_62_prime256v1; + curve = EC_curve_nid2nist(curve_nid); } #endif #ifdef NID_X9_62_prime192v1 if (NID_undef == curve_nid && !apr_strnatcasecmp("secp192r1", curve)) { curve_nid = NID_X9_62_prime192v1; + curve = EC_curve_nid2nist(curve_nid); } #endif #if defined(NID_X25519) && !defined(LIBRESSL_VERSION_NUMBER) if (NID_undef == curve_nid && !apr_strnatcasecmp("X25519", curve)) { curve_nid = NID_X25519; + curve = EC_curve_nid2nist(curve_nid); } #endif if (NID_undef == curve_nid) { @@ -844,6 +854,7 @@ #endif default: +#if OPENSSL_VERSION_NUMBER < 0x30000000L if (APR_SUCCESS != (rv = check_EC_curve(curve_nid, p))) goto leave; if (NULL == (ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL)) || EVP_PKEY_paramgen_init(ctx) <= 0 @@ -855,6 +866,17 @@ "error generate EC key for group: %s", curve); rv = APR_EGENERAL; goto leave; } +#else + if (APR_SUCCESS != (rv = check_EC_curve(curve_nid, p))) goto leave; + if (NULL == (ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL)) + || EVP_PKEY_keygen_init(ctx) <= 0 + || EVP_PKEY_CTX_ctrl_str(ctx, "ec_paramgen_curve", curve) <= 0 + || EVP_PKEY_keygen(ctx, &(*ppkey)->pkey) <= 0) { + md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, 0, p, + "error generate EC key for group: %s", curve); + rv = APR_EGENERAL; goto leave; + } +#endif rv = APR_SUCCESS; break; } @@ -987,8 +1009,6 @@ unsigned int dlen; digest = md_data_pmake(EVP_MAX_MD_SIZE, p); - if (!digest) goto leave; - ctx = EVP_MD_CTX_create(); if (ctx) { rv = APR_ENOTIMPL; @@ -1002,7 +1022,6 @@ } } } -leave: if (ctx) { EVP_MD_CTX_destroy(ctx); } @@ -1038,6 +1057,31 @@ return rv; } +apr_status_t md_crypt_hmac64(const char **pmac64, const md_data_t *hmac_key, + apr_pool_t *p, const char *d, size_t dlen) +{ + const char *mac64 = NULL; + unsigned char *s; + unsigned int digest_len = 0; + md_data_t *digest; + apr_status_t rv = APR_SUCCESS; + + digest = md_data_pmake(EVP_MAX_MD_SIZE, p); + s = HMAC(EVP_sha256(), (const unsigned char*)hmac_key->data, (int)hmac_key->len, + (const unsigned char*)d, (size_t)dlen, + (unsigned char*)digest->data, &digest_len); + if (!s) { + rv = APR_EINVAL; + goto cleanup; + } + digest->len = digest_len; + mac64 = md_util_base64url_encode(digest, p); + +cleanup: + *pmac64 = (APR_SUCCESS == rv)? mac64 : NULL; + return rv; +} + /**************************************************************************************************/ /* certificates */ @@ -1326,17 +1370,13 @@ { md_data_t *digest; unsigned int dlen; - apr_status_t rv = APR_ENOMEM; digest = md_data_pmake(EVP_MAX_MD_SIZE, p); - if (!digest) goto leave; - X509_digest(cert->x509, EVP_sha256(), (unsigned char*)digest->data, &dlen); digest->len = dlen; - rv = APR_SUCCESS; -leave: - *pdigest = (APR_SUCCESS == rv)? digest : NULL; - return rv; + + *pdigest = digest; + return APR_SUCCESS; } apr_status_t md_cert_to_sha256_fingerprint(const char **pfinger, const md_cert_t *cert, apr_pool_t *p) @@ -1458,17 +1498,30 @@ ct = apr_table_get(res->headers, "Content-Type"); if (!res->body || !ct) goto cleanup; ct = md_util_parse_ct(res->req->pool, ct); - if (!strcmp("application/pem-certificate-chain", ct) + if (!strcmp("application/pkix-cert", ct)) { + rv = md_cert_read_http(&cert, p, res); + if (APR_SUCCESS != rv) goto cleanup; + APR_ARRAY_PUSH(chain, md_cert_t *) = cert; + } + else if (!strcmp("application/pem-certificate-chain", ct) || !strncmp("text/plain", ct, sizeof("text/plain")-1)) { /* Some servers seem to think 'text/plain' is sufficient, see #232 */ rv = apr_brigade_pflatten(res->body, &data, &data_len, res->req->pool); if (APR_SUCCESS != rv) goto cleanup; rv = md_cert_read_chain(chain, res->req->pool, data, data_len); } - else if (!strcmp("application/pkix-cert", ct)) { - rv = md_cert_read_http(&cert, p, res); + else { + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, 0, p, + "attempting to parse certificates from unrecognized content-type: %s", ct); + rv = apr_brigade_pflatten(res->body, &data, &data_len, res->req->pool); if (APR_SUCCESS != rv) goto cleanup; - APR_ARRAY_PUSH(chain, md_cert_t *) = cert; + rv = md_cert_read_chain(chain, res->req->pool, data, data_len); + if (APR_SUCCESS == rv && chain->nelts == 0) { + md_log_perror(MD_LOG_MARK, MD_LOG_ERR, 0, p, + "certificiate chain response did not contain any certificates " + "(suspicious content-type: %s)", ct); + rv = APR_ENOENT; + } } cleanup: md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, rv, p, diff -Nru apache2-2.4.51/modules/md/md_crypt.h apache2-2.4.52/modules/md/md_crypt.h --- apache2-2.4.51/modules/md/md_crypt.h 2021-09-01 13:22:19.000000000 +0000 +++ apache2-2.4.52/modules/md/md_crypt.h 2021-11-24 11:07:53.000000000 +0000 @@ -114,6 +114,9 @@ void *md_pkey_get_EVP_PKEY(struct md_pkey_t *pkey); +apr_status_t md_crypt_hmac64(const char **pmac64, const struct md_data_t *hmac_key, + apr_pool_t *p, const char *d, size_t dlen); + /**************************************************************************************************/ /* X509 certificates */ diff -Nru apache2-2.4.51/modules/md/md_jws.c apache2-2.4.52/modules/md/md_jws.c --- apache2-2.4.51/modules/md/md_jws.c 2021-07-12 08:04:51.000000000 +0000 +++ apache2-2.4.52/modules/md/md_jws.c 2021-11-24 11:07:53.000000000 +0000 @@ -25,67 +25,67 @@ #include "md_log.h" #include "md_util.h" -static int header_set(void *data, const char *key, const char *val) +apr_status_t md_jws_get_jwk(md_json_t **pjwk, apr_pool_t *p, struct md_pkey_t *pkey) { - md_json_sets(val, (md_json_t *)data, key, NULL); - return 1; + md_json_t *jwk; + + if (!pkey) return APR_EINVAL; + + jwk = md_json_create(p); + md_json_sets(md_pkey_get_rsa_e64(pkey, p), jwk, "e", NULL); + md_json_sets("RSA", jwk, "kty", NULL); + md_json_sets(md_pkey_get_rsa_n64(pkey, p), jwk, "n", NULL); + *pjwk = jwk; + return APR_SUCCESS; } apr_status_t md_jws_sign(md_json_t **pmsg, apr_pool_t *p, - md_data_t *payload, struct apr_table_t *protected, + md_data_t *payload, md_json_t *prot_fields, struct md_pkey_t *pkey, const char *key_id) { - md_json_t *msg, *jprotected; + md_json_t *msg, *jprotected, *jwk; const char *prot64, *pay64, *sign64, *sign, *prot; - apr_status_t rv = APR_SUCCESS; + md_data_t data; + apr_status_t rv; - *pmsg = NULL; - msg = md_json_create(p); - - jprotected = md_json_create(p); + jprotected = md_json_clone(p, prot_fields); md_json_sets("RS256", jprotected, "alg", NULL); if (key_id) { md_json_sets(key_id, jprotected, "kid", NULL); } else { - md_json_sets(md_pkey_get_rsa_e64(pkey, p), jprotected, "jwk", "e", NULL); - md_json_sets("RSA", jprotected, "jwk", "kty", NULL); - md_json_sets(md_pkey_get_rsa_n64(pkey, p), jprotected, "jwk", "n", NULL); + rv = md_jws_get_jwk(&jwk, p, pkey); + if (APR_SUCCESS != rv) { + md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, rv, p, "get jwk"); + goto cleanup; + } + md_json_setj(jwk, jprotected, "jwk", NULL); } - apr_table_do(header_set, jprotected, protected, NULL); - prot = md_json_writep(jprotected, p, MD_JSON_FMT_COMPACT); - md_log_perror(MD_LOG_MARK, MD_LOG_TRACE4, 0, p, "protected: %s", - prot ? prot : ""); + prot = md_json_writep(jprotected, p, MD_JSON_FMT_COMPACT); if (!prot) { rv = APR_EINVAL; + md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, rv, p, "serialize protected"); + goto cleanup; } - - if (rv == APR_SUCCESS) { - md_data_t data; - md_data_init(&data, prot, strlen(prot)); - prot64 = md_util_base64url_encode(&data, p); - md_json_sets(prot64, msg, "protected", NULL); - pay64 = md_util_base64url_encode(payload, p); + md_data_init(&data, prot, strlen(prot)); + prot64 = md_util_base64url_encode(&data, p); + md_json_sets(prot64, msg, "protected", NULL); - md_json_sets(pay64, msg, "payload", NULL); - sign = apr_psprintf(p, "%s.%s", prot64, pay64); + pay64 = md_util_base64url_encode(payload, p); + md_json_sets(pay64, msg, "payload", NULL); + sign = apr_psprintf(p, "%s.%s", prot64, pay64); - rv = md_crypt_sign64(&sign64, pkey, p, sign, strlen(sign)); + rv = md_crypt_sign64(&sign64, pkey, p, sign, strlen(sign)); + if (APR_SUCCESS != rv) { + md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, rv, p, "jwk signed message"); + goto cleanup; } + md_json_sets(sign64, msg, "signature", NULL); - if (rv == APR_SUCCESS) { - md_log_perror(MD_LOG_MARK, MD_LOG_TRACE3, 0, p, - "jws pay64=%s\nprot64=%s\nsign64=%s", pay64, prot64, sign64); - - md_json_sets(sign64, msg, "signature", NULL); - } - else { - md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, rv, p, "jwk signed message"); - } - +cleanup: *pmsg = (APR_SUCCESS == rv)? msg : NULL; return rv; } @@ -108,3 +108,41 @@ rv = md_crypt_sha256_digest64(pthumb, p, &data); return rv; } + +apr_status_t md_jws_hmac(md_json_t **pmsg, apr_pool_t *p, + md_data_t *payload, md_json_t *prot_fields, + const md_data_t *hmac_key) +{ + md_json_t *msg, *jprotected; + const char *prot64, *pay64, *mac64, *sign, *prot; + md_data_t data; + apr_status_t rv; + + msg = md_json_create(p); + jprotected = md_json_clone(p, prot_fields); + md_json_sets("HS256", jprotected, "alg", NULL); + prot = md_json_writep(jprotected, p, MD_JSON_FMT_COMPACT); + if (!prot) { + rv = APR_EINVAL; + md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, rv, p, "serialize protected"); + goto cleanup; + } + + md_data_init(&data, prot, strlen(prot)); + prot64 = md_util_base64url_encode(&data, p); + md_json_sets(prot64, msg, "protected", NULL); + + pay64 = md_util_base64url_encode(payload, p); + md_json_sets(pay64, msg, "payload", NULL); + sign = apr_psprintf(p, "%s.%s", prot64, pay64); + + rv = md_crypt_hmac64(&mac64, hmac_key, p, sign, strlen(sign)); + if (APR_SUCCESS != rv) { + goto cleanup; + } + md_json_sets(mac64, msg, "signature", NULL); + +cleanup: + *pmsg = (APR_SUCCESS == rv)? msg : NULL; + return rv; +} diff -Nru apache2-2.4.51/modules/md/md_jws.h apache2-2.4.52/modules/md/md_jws.h --- apache2-2.4.51/modules/md/md_jws.h 2019-10-25 13:27:12.000000000 +0000 +++ apache2-2.4.52/modules/md/md_jws.h 2021-11-24 11:07:53.000000000 +0000 @@ -22,10 +22,31 @@ struct md_pkey_t; struct md_data_t; +/** + * Get the JSON value of the 'jwk' field for the given key. + */ +apr_status_t md_jws_get_jwk(md_json_t **pjwk, apr_pool_t *p, struct md_pkey_t *pkey); + +/** + * Get the JWS key signed JSON message with given payload and protected fields, signed + * using the given key and optional key_id. + */ apr_status_t md_jws_sign(md_json_t **pmsg, apr_pool_t *p, - struct md_data_t *payload, struct apr_table_t *protected, + struct md_data_t *payload, md_json_t *prot_fields, struct md_pkey_t *pkey, const char *key_id); +/** + * Get the 'Thumbprint' as defined in RFC8555 for the given key in + * base64 encoding. + */ +apr_status_t md_jws_pkey_thumb(const char **pthumb64, apr_pool_t *p, struct md_pkey_t *pkey); + +/** + * Get the JWS HS256 signed message for given payload and protected fields, + * using the base64 encoded MAC key. + */ +apr_status_t md_jws_hmac(md_json_t **pmsg, apr_pool_t *p, + struct md_data_t *payload, md_json_t *prot_fields, + const struct md_data_t *hmac_key); -apr_status_t md_jws_pkey_thumb(const char **pthumb, apr_pool_t *p, struct md_pkey_t *pkey); #endif /* md_jws_h */ diff -Nru apache2-2.4.51/modules/md/md_reg.c apache2-2.4.52/modules/md/md_reg.c --- apache2-2.4.51/modules/md/md_reg.c 2021-09-15 13:41:35.000000000 +0000 +++ apache2-2.4.52/modules/md/md_reg.c 2021-11-24 11:07:53.000000000 +0000 @@ -92,7 +92,8 @@ reg->can_http = 1; reg->can_https = 1; reg->proxy_url = proxy_url? apr_pstrdup(p, proxy_url) : NULL; - reg->ca_file = ca_file? apr_pstrdup(p, ca_file) : NULL; + reg->ca_file = (ca_file && apr_strnatcasecmp("none", ca_file))? + apr_pstrdup(p, ca_file) : NULL; md_timeslice_create(®->renew_window, p, MD_TIME_LIFE_NORM, MD_TIME_RENEW_WINDOW_DEF); md_timeslice_create(®->warn_window, p, MD_TIME_LIFE_NORM, MD_TIME_WARN_WINDOW_DEF); @@ -197,9 +198,11 @@ static apr_status_t state_init(md_reg_t *reg, apr_pool_t *p, md_t *md) { - md_state_t state; + md_state_t state = MD_S_COMPLETE; + const char *state_descr = NULL; const md_pubcert_t *pub; const md_cert_t *cert; + const md_pkey_spec_t *spec; apr_status_t rv = APR_SUCCESS; int i; @@ -207,45 +210,50 @@ if (md->warn_window == NULL) md->warn_window = reg->warn_window; for (i = 0; i < md_cert_count(md); ++i) { - md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, rv, p, "md{%s}: check cert %d", md->name, i); - if (APR_SUCCESS == (rv = md_reg_get_pubcert(&pub, reg, md, i, p))) { + spec = md_pkeys_spec_get(md->pks, i); + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, rv, p, + "md{%s}: check cert %s", md->name, md_pkey_spec_name(spec)); + rv = md_reg_get_pubcert(&pub, reg, md, i, p); + if (APR_SUCCESS == rv) { cert = APR_ARRAY_IDX(pub->certs, 0, const md_cert_t*); if (!md_is_covered_by_alt_names(md, pub->alt_names)) { state = MD_S_INCOMPLETE; - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, - "md{%s}: incomplete, certificate(%d) does not cover all domains.", - md->name, i); - goto out; + state_descr = apr_psprintf(p, "certificate(%s) does not cover all domains.", + md_pkey_spec_name(spec)); + goto cleanup; } if (!md->must_staple != !md_cert_must_staple(cert)) { state = MD_S_INCOMPLETE; - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, - "md{%s}: incomplete, OCSP Stapling is%s requested, but " - "certificate(%d) has it%s enabled.", - md->name, md->must_staple? "" : " not", i, + state_descr = apr_psprintf(p, "'must-staple' is%s requested, but " + "certificate(%s) has it%s enabled.", + md->must_staple? "" : " not", + md_pkey_spec_name(spec), !md->must_staple? "" : " not"); - goto out; + goto cleanup; } - state = MD_S_COMPLETE; - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "md{%s}: certificate(%d) is ok", + md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, "md{%s}: certificate(%d) is ok", md->name, i); } else if (APR_STATUS_IS_ENOENT(rv)) { state = MD_S_INCOMPLETE; + state_descr = apr_psprintf(p, "certificate(%s) is missing", + md_pkey_spec_name(spec)); rv = APR_SUCCESS; - md_log_perror(MD_LOG_MARK, MD_LOG_DEBUG, rv, p, - "md{%s}: incomplete, certificate(%d) is missing", md->name, i); - goto out; + goto cleanup; + } + else { + state = MD_S_ERROR; + state_descr = "error intializing"; + md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, rv, p, "md{%s}: error", md->name); + goto cleanup; } } -out: - if (APR_SUCCESS != rv) { - state = MD_S_ERROR; - md_log_perror(MD_LOG_MARK, MD_LOG_WARNING, rv, p, "md{%s}: error", md->name); - } - md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, rv, p, "md{%s}: state==%d", md->name, state); +cleanup: + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, rv, p, "md{%s}: state=%d, %s", + md->name, state, state_descr); md->state = state; + md->state_descr = state_descr; return rv; } diff -Nru apache2-2.4.51/modules/md/md_status.c apache2-2.4.52/modules/md/md_status.c --- apache2-2.4.51/modules/md/md_status.c 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/md_status.c 2021-11-24 11:07:53.000000000 +0000 @@ -88,55 +88,88 @@ return rv; } -/**************************************************************************************************/ -/* md status information */ - -static apr_status_t job_loadj(md_json_t **pjson, md_store_group_t group, const char *name, +static apr_status_t job_loadj(md_json_t **pjson, md_store_group_t group, const char *name, struct md_reg_t *reg, int with_log, apr_pool_t *p) { apr_status_t rv; - + md_store_t *store = md_reg_store_get(reg); rv = md_store_load_json(store, group, name, MD_FN_JOB, pjson, p); if (APR_SUCCESS == rv && !with_log) md_json_del(*pjson, MD_KEY_LOG, NULL); return rv; } +static apr_status_t status_get_cert_json_ex( + md_json_t **pjson, + const md_cert_t *cert, + const md_t *md, + md_reg_t *reg, + md_ocsp_reg_t *ocsp, + int with_logs, + apr_pool_t *p) +{ + md_json_t *certj, *jobj; + md_timeperiod_t ocsp_valid; + md_ocsp_cert_stat_t cert_stat; + apr_status_t rv; + + if (APR_SUCCESS != (rv = status_get_cert_json(&certj, cert, p))) goto leave; + if (md->stapling && ocsp) { + rv = md_ocsp_get_meta(&cert_stat, &ocsp_valid, ocsp, cert, p, md); + if (APR_SUCCESS == rv) { + md_json_sets(md_ocsp_cert_stat_name(cert_stat), certj, MD_KEY_OCSP, MD_KEY_STATUS, NULL); + md_json_set_timeperiod(&ocsp_valid, certj, MD_KEY_OCSP, MD_KEY_VALID, NULL); + } + else if (!APR_STATUS_IS_ENOENT(rv)) goto leave; + rv = APR_SUCCESS; + if (APR_SUCCESS == job_loadj(&jobj, MD_SG_OCSP, md->name, reg, with_logs, p)) { + md_json_setj(jobj, certj, MD_KEY_OCSP, MD_KEY_RENEWAL, NULL); + } + } +leave: + *pjson = (APR_SUCCESS == rv)? certj : NULL; + return rv; +} + +static int get_cert_count(const md_t *md, int from_staging) +{ + if (!from_staging && md->cert_files && md->cert_files->nelts) { + return md->cert_files->nelts; + } + return md_pkeys_spec_count(md->pks); +} + +static const char *get_cert_name(const md_t *md, int i, int from_staging, apr_pool_t *p) +{ + if (!from_staging && md->cert_files && md->cert_files->nelts) { + /* static files configured, not from staging, used index names */ + return apr_psprintf(p, "%d", i); + } + return md_pkey_spec_name(md_pkeys_spec_get(md->pks, i)); +} + static apr_status_t status_get_certs_json(md_json_t **pjson, apr_array_header_t *certs, + int from_staging, const md_t *md, md_reg_t *reg, - md_ocsp_reg_t *ocsp, int with_logs, + md_ocsp_reg_t *ocsp, int with_logs, apr_pool_t *p) { - md_json_t *json, *certj, *jobj; - md_timeperiod_t certs_valid = {0, 0}, valid, ocsp_valid; - md_pkey_spec_t *spec; + md_json_t *json, *certj; + md_timeperiod_t certs_valid = {0, 0}, valid; md_cert_t *cert; - md_ocsp_cert_stat_t cert_stat; int i; apr_status_t rv = APR_SUCCESS; json = md_json_create(p); - for (i = 0; i < md_cert_count(md); ++i) { - spec = md_pkeys_spec_get(md->pks, i); + for (i = 0; i < get_cert_count(md, from_staging); ++i) { cert = APR_ARRAY_IDX(certs, i, md_cert_t*); if (!cert) continue; - - if (APR_SUCCESS != (rv = status_get_cert_json(&certj, cert, p))) goto leave; - if (md->stapling && ocsp) { - rv = md_ocsp_get_meta(&cert_stat, &ocsp_valid, ocsp, cert, p, md); - if (APR_SUCCESS == rv) { - md_json_sets(md_ocsp_cert_stat_name(cert_stat), certj, MD_KEY_OCSP, MD_KEY_STATUS, NULL); - md_json_set_timeperiod(&ocsp_valid, certj, MD_KEY_OCSP, MD_KEY_VALID, NULL); - } - else if (!APR_STATUS_IS_ENOENT(rv)) goto leave; - rv = APR_SUCCESS; - if (APR_SUCCESS == job_loadj(&jobj, MD_SG_OCSP, md->name, reg, with_logs, p)) { - md_json_setj(jobj, certj, MD_KEY_OCSP, MD_KEY_RENEWAL, NULL); - } - } + + rv = status_get_cert_json_ex(&certj, cert, md, reg, ocsp, with_logs, p); + if (APR_SUCCESS != rv) goto leave; valid = md_cert_get_valid(cert); certs_valid = i? md_timeperiod_common(&certs_valid, &valid) : valid; - md_json_setj(certj, json, md_pkey_spec_name(spec), NULL); + md_json_setj(certj, json, get_cert_name(md, i, from_staging, p), NULL); } if (certs_valid.start) { @@ -157,7 +190,7 @@ apr_status_t rv; certs = apr_array_make(p, 5, sizeof(md_cert_t*)); - for (i = 0; i < md_cert_count(md); ++i) { + for (i = 0; i < get_cert_count(md, 1); ++i) { spec = md_pkeys_spec_get(md->pks, i); cert = NULL; rv = md_pubcert_load(md_reg_store_get(reg), MD_SG_STAGING, md->name, spec, &chain, p); @@ -166,7 +199,7 @@ } APR_ARRAY_PUSH(certs, const md_cert_t*) = cert; } - return status_get_certs_json(pjson, certs, md, reg, NULL, 0, p); + return status_get_certs_json(pjson, certs, 1, md, reg, NULL, 0, p); } static apr_status_t status_get_md_json(md_json_t **pjson, const md_t *md, @@ -182,9 +215,9 @@ apr_time_t renew_at; int i; - mdj = md_to_json(md, p); + mdj = md_to_public_json(md, p); certs = apr_array_make(p, 5, sizeof(md_cert_t*)); - for (i = 0; i < md_cert_count(md); ++i) { + for (i = 0; i < get_cert_count(md, 0); ++i) { cert = NULL; if (APR_SUCCESS == md_reg_get_pubcert(&pubcert, reg, md, i, p)) { cert = APR_ARRAY_IDX(pubcert->certs, 0, const md_cert_t*); @@ -192,7 +225,7 @@ APR_ARRAY_PUSH(certs, const md_cert_t*) = cert; } - rv = status_get_certs_json(&certsj, certs, md, reg, ocsp, with_logs, p); + rv = status_get_certs_json(&certsj, certs, 0, md, reg, ocsp, with_logs, p); if (APR_SUCCESS != rv) goto leave; md_json_setj(certsj, mdj, MD_KEY_CERT, NULL); @@ -605,8 +638,9 @@ job->dirty = 1; if (APR_SUCCESS == rv && APR_SUCCESS == result->status) { job->notified = 1; - if (!strcmp("renewed", reason)) job->notified_renewed = 1; - job->error_runs = 0; + if (!strcmp("renewed", reason)) { + job->notified_renewed = 1; + } } else { ++job->error_runs; diff -Nru apache2-2.4.51/modules/md/md_store_fs.c apache2-2.4.52/modules/md/md_store_fs.c --- apache2-2.4.51/modules/md/md_store_fs.c 2021-09-15 13:41:35.000000000 +0000 +++ apache2-2.4.52/modules/md/md_store_fs.c 2021-11-24 11:07:53.000000000 +0000 @@ -631,7 +631,7 @@ && MD_OK(mk_group_dir(&dir, s_fs, group, name, p)) && MD_OK(md_util_path_merge(&fpath, ptemp, dir, aspect, NULL))) { - md_log_perror(MD_LOG_MARK, MD_LOG_TRACE3, 0, ptemp, "storing in %s", fpath); + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, 0, ptemp, "storing in %s", fpath); switch (vtype) { case MD_SV_TEXT: rv = (create? md_text_fcreatex(fpath, perms->file, p, value) @@ -745,7 +745,9 @@ /* Remove all files in dir, there should be no sub-dirs */ rv = md_util_rm_recursive(dir, ptemp, 1); } - md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, rv, ptemp, "purge %s/%s (%s)", groupname, name, dir); + if (!APR_STATUS_IS_ENOENT(rv)) { + md_log_perror(MD_LOG_MARK, MD_LOG_TRACE2, rv, ptemp, "purge %s/%s (%s)", groupname, name, dir); + } return APR_SUCCESS; } @@ -1018,12 +1020,12 @@ } if (!MD_OK(apr_file_rename(to_dir, narch_dir, ptemp))) { - md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", + md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", to_dir, narch_dir); goto out; } if (!MD_OK(apr_file_rename(from_dir, to_dir, ptemp))) { - md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", + md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", from_dir, to_dir); apr_file_rename(narch_dir, to_dir, ptemp); goto out; @@ -1034,7 +1036,7 @@ } else if (APR_STATUS_IS_ENOENT(rv)) { if (APR_SUCCESS != (rv = apr_file_rename(from_dir, to_dir, ptemp))) { - md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", + md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", from_dir, to_dir); goto out; } @@ -1075,8 +1077,9 @@ goto out; } - if (APR_SUCCESS != (rv = apr_file_rename(from_dir, to_dir, ptemp))) { - md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", + if (APR_SUCCESS != (rv = apr_file_rename(from_dir, to_dir, ptemp)) + && !APR_STATUS_IS_ENOENT(rv)) { + md_log_perror(MD_LOG_MARK, MD_LOG_ERR, rv, ptemp, "rename from %s to %s", from_dir, to_dir); goto out; } diff -Nru apache2-2.4.51/modules/md/md_version.h apache2-2.4.52/modules/md/md_version.h --- apache2-2.4.51/modules/md/md_version.h 2021-09-17 12:41:45.000000000 +0000 +++ apache2-2.4.52/modules/md/md_version.h 2021-11-24 11:07:53.000000000 +0000 @@ -27,7 +27,7 @@ * @macro * Version number of the md module as c string */ -#define MOD_MD_VERSION "2.4.7" +#define MOD_MD_VERSION "2.4.10" /** * @macro @@ -35,7 +35,7 @@ * release. This is a 24 bit number with 8 bits for major number, 8 bits * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203. */ -#define MOD_MD_VERSION_NUM 0x020407 +#define MOD_MD_VERSION_NUM 0x02040a #define MD_ACME_DEF_URL "https://acme-v02.api.letsencrypt.org/directory" diff -Nru apache2-2.4.51/modules/md/mod_md.c apache2-2.4.52/modules/md/mod_md.c --- apache2-2.4.51/modules/md/mod_md.c 2021-09-17 12:41:45.000000000 +0000 +++ apache2-2.4.52/modules/md/mod_md.c 2021-11-24 11:07:53.000000000 +0000 @@ -54,7 +54,6 @@ #include "mod_md_ocsp.h" #include "mod_md_os.h" #include "mod_md_status.h" -#include "mod_ssl_openssl.h" static void md_hooks(apr_pool_t *pool); @@ -324,11 +323,15 @@ md->ca_agreement = md_config_gets(md->sc, MD_CONFIG_CA_AGREEMENT); } contact = md_config_gets(md->sc, MD_CONFIG_CA_CONTACT); - if (contact && contact[0]) { + if (md->contacts && md->contacts->nelts > 0) { + /* set explicitly */ + } + else if (contact && contact[0]) { apr_array_clear(md->contacts); APR_ARRAY_PUSH(md->contacts, const char *) = md_util_schemify(p, contact, "mailto"); - } else if( md->sc->s->server_admin && strcmp(DEFAULT_ADMIN, md->sc->s->server_admin)) { + } + else if( md->sc->s->server_admin && strcmp(DEFAULT_ADMIN, md->sc->s->server_admin)) { apr_array_clear(md->contacts); APR_ARRAY_PUSH(md->contacts, const char *) = md_util_schemify(p, md->sc->s->server_admin, "mailto"); @@ -350,6 +353,10 @@ if (md->require_https < 0) { md->require_https = md_config_geti(md->sc, MD_CONFIG_REQUIRE_HTTPS); } + if (!md->ca_eab_kid) { + md->ca_eab_kid = md->sc->ca_eab_kid; + md->ca_eab_hmac = md->sc->ca_eab_hmac; + } if (md->must_staple < 0) { md->must_staple = md_config_geti(md->sc, MD_CONFIG_MUST_STAPLE); } @@ -592,14 +599,18 @@ s->server_hostname, s->port, md->name, sc->name, domain, (int)sc->assigned->nelts); - if (sc->ca_contact && sc->ca_contact[0]) { + if (md->contacts && md->contacts->nelts > 0) { + /* set explicitly */ + } + else if (sc->ca_contact && sc->ca_contact[0]) { uri = md_util_schemify(p, sc->ca_contact, "mailto"); if (md_array_str_index(md->contacts, uri, 0, 0) < 0) { APR_ARRAY_PUSH(md->contacts, const char *) = uri; ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, base_server, APLOGNO(10044) "%s: added contact %s", md->name, uri); } - } else if (s->server_admin && strcmp(DEFAULT_ADMIN, s->server_admin)) { + } + else if (s->server_admin && strcmp(DEFAULT_ADMIN, s->server_admin)) { uri = md_util_schemify(p, s->server_admin, "mailto"); if (md_array_str_index(md->contacts, uri, 0, 0) < 0) { APR_ARRAY_PUSH(md->contacts, const char *) = uri; @@ -675,18 +686,18 @@ if (md->cert_files && md->cert_files->nelts) { if (!md->pkey_files || (md->cert_files->nelts != md->pkey_files->nelts)) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, base_server, APLOGNO(10170) - "The Managed Domain '%s', defined in %s(line %d), " + "The Managed Domain '%s' " "needs one MDCertificateKeyFile for each MDCertificateFile.", - md->name, md->defn_name, md->defn_line_number); + md->name); return APR_EINVAL; } } else if (md->pkey_files && md->pkey_files->nelts && (!md->cert_files || !md->cert_files->nelts)) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, base_server, APLOGNO(10171) - "The Managed Domain '%s', defined in %s(line %d), " + "The Managed Domain '%s' " "has MDCertificateKeyFile(s) but no MDCertificateFile.", - md->name, md->defn_name, md->defn_line_number); + md->name); return APR_EINVAL; } diff -Nru apache2-2.4.51/modules/md/mod_md_config.c apache2-2.4.52/modules/md/mod_md_config.c --- apache2-2.4.51/modules/md/mod_md_config.c 2021-07-20 13:07:54.000000000 +0000 +++ apache2-2.4.52/modules/md/mod_md_config.c 2021-11-24 11:07:53.000000000 +0000 @@ -28,6 +28,7 @@ #include "md.h" #include "md_crypt.h" #include "md_log.h" +#include "md_json.h" #include "md_util.h" #include "mod_md_private.h" #include "mod_md_config.h" @@ -110,6 +111,8 @@ "ACME", /* ca protocol */ NULL, /* ca agreemnent */ NULL, /* ca challenges array */ + NULL, /* ca eab kid */ + NULL, /* ca eab hmac */ 0, /* stapling */ 1, /* staple others */ NULL, /* currently defined md */ @@ -162,6 +165,8 @@ sc->ca_proto = NULL; sc->ca_agreement = NULL; sc->ca_challenges = NULL; + sc->ca_eab_kid = NULL; + sc->ca_eab_hmac = NULL; sc->stapling = DEF_VAL; sc->staple_others = DEF_VAL; } @@ -180,6 +185,8 @@ to->ca_proto = from->ca_proto; to->ca_agreement = from->ca_agreement; to->ca_challenges = from->ca_challenges; + to->ca_eab_kid = from->ca_eab_kid; + to->ca_eab_hmac = from->ca_eab_hmac; to->stapling = from->stapling; to->staple_others = from->staple_others; } @@ -196,7 +203,14 @@ if (from->ca_url) md->ca_url = from->ca_url; if (from->ca_proto) md->ca_proto = from->ca_proto; if (from->ca_agreement) md->ca_agreement = from->ca_agreement; + if (from->ca_contact) { + apr_array_clear(md->contacts); + APR_ARRAY_PUSH(md->contacts, const char *) = + md_util_schemify(p, from->ca_contact, "mailto"); + } if (from->ca_challenges) md->ca_challenges = apr_array_copy(p, from->ca_challenges); + if (from->ca_eab_kid) md->ca_eab_kid = from->ca_eab_kid; + if (from->ca_eab_hmac) md->ca_eab_hmac = from->ca_eab_hmac; if (from->stapling != DEF_VAL) md->stapling = from->stapling; } @@ -238,6 +252,8 @@ nsc->ca_agreement = add->ca_agreement? add->ca_agreement : base->ca_agreement; nsc->ca_challenges = (add->ca_challenges? apr_array_copy(pool, add->ca_challenges) : (base->ca_challenges? apr_array_copy(pool, base->ca_challenges) : NULL)); + nsc->ca_eab_kid = add->ca_eab_kid? add->ca_eab_kid : base->ca_eab_kid; + nsc->ca_eab_hmac = add->ca_eab_hmac? add->ca_eab_hmac : base->ca_eab_hmac; nsc->stapling = (add->stapling != DEF_VAL)? add->stapling : base->stapling; nsc->staple_others = (add->staple_others != DEF_VAL)? add->staple_others : base->staple_others; nsc->current = NULL; @@ -461,13 +477,16 @@ static const char *md_config_set_ca(cmd_parms *cmd, void *dc, const char *value) { md_srv_conf_t *sc = md_config_get(cmd->server); - const char *err; + const char *err, *url; (void)dc; if ((err = md_conf_check_location(cmd, MD_LOC_ALL))) { return err; } - sc->ca_url = value; + if (APR_SUCCESS != md_get_ca_url_from_name(&url, cmd->pool, value)) { + return url; + } + sc->ca_url = url; return NULL; } @@ -1009,9 +1028,69 @@ return NULL; } +static const char *md_config_set_eab(cmd_parms *cmd, void *dc, + const char *keyid, const char *hmac) +{ + md_srv_conf_t *sc = md_config_get(cmd->server); + const char *err; + + (void)dc; + if ((err = md_conf_check_location(cmd, MD_LOC_ALL))) { + return err; + } + if (!hmac) { + if (!apr_strnatcasecmp("None", keyid)) { + keyid = "none"; + } + else { + /* a JSON file keeping keyid and hmac */ + const char *fpath; + apr_status_t rv; + md_json_t *json; + + /* If only dumping the config, don't verify the file */ + if (ap_state_query(AP_SQ_RUN_MODE) == AP_SQ_RM_CONFIG_DUMP) { + goto leave; + } + + fpath = ap_server_root_relative(cmd->pool, keyid); + if (!fpath) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": Invalid file path ", keyid, NULL); + } + if (!md_file_exists(fpath, cmd->pool)) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": file not found: ", fpath, NULL); + } + + rv = md_json_readf(&json, cmd->pool, fpath); + if (APR_SUCCESS != rv) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": error reading JSON file ", fpath, NULL); + } + keyid = md_json_gets(json, MD_KEY_KID, NULL); + if (!keyid || !*keyid) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": JSON does not contain '", MD_KEY_KID, + "' element in file ", fpath, NULL); + } + hmac = md_json_gets(json, MD_KEY_HMAC, NULL); + if (!hmac || !*hmac) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": JSON does not contain '", MD_KEY_HMAC, + "' element in file ", fpath, NULL); + } + } + } +leave: + sc->ca_eab_kid = keyid; + sc->ca_eab_hmac = hmac; + return NULL; +} + const command_rec md_cmds[] = { AP_INIT_TAKE1("MDCertificateAuthority", md_config_set_ca, NULL, RSRC_CONF, - "URL of CA issuing the certificates"), + "URL or known name of CA issuing the certificates"), AP_INIT_TAKE1("MDCertificateAgreement", md_config_set_agreement, NULL, RSRC_CONF, "either 'accepted' or the URL of CA Terms-of-Service agreement you accept"), AP_INIT_TAKE_ARGV("MDCAChallenges", md_config_set_cha_tyes, NULL, RSRC_CONF, @@ -1085,6 +1164,8 @@ "How long to delay activation of new certificates"), AP_INIT_TAKE1("MDCACertificateFile", md_config_set_ca_certs, NULL, RSRC_CONF, "Set the CA file to use for connections"), + AP_INIT_TAKE12("MDExternalAccountBinding", md_config_set_eab, NULL, RSRC_CONF, + "Set the external account binding keyid and hmac values to use at CA"), AP_INIT_TAKE1(NULL, NULL, NULL, RSRC_CONF, NULL) }; diff -Nru apache2-2.4.51/modules/md/mod_md_config.h apache2-2.4.52/modules/md/mod_md_config.h --- apache2-2.4.51/modules/md/mod_md_config.h 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/mod_md_config.h 2021-11-24 11:07:53.000000000 +0000 @@ -91,7 +91,9 @@ const char *ca_proto; /* protocol used vs CA (e.g. ACME) */ const char *ca_agreement; /* accepted agreement uri between CA and user */ struct apr_array_header_t *ca_challenges; /* challenge types configured */ - + const char *ca_eab_kid; /* != NULL, external account binding keyid */ + const char *ca_eab_hmac; /* != NULL, external account binding hmac */ + int stapling; /* OCSP stapling enabled */ int staple_others; /* Provide OCSP stapling for non-MD certificates */ diff -Nru apache2-2.4.51/modules/md/mod_md_status.c apache2-2.4.52/modules/md/mod_md_status.c --- apache2-2.4.51/modules/md/mod_md_status.c 2021-05-12 10:14:42.000000000 +0000 +++ apache2-2.4.52/modules/md/mod_md_status.c 2021-11-24 11:07:53.000000000 +0000 @@ -172,7 +172,10 @@ apr_time_t until; (void)info; switch (md_json_getl(mdj, info->key, NULL)) { - case MD_S_INCOMPLETE: s = "incomplete"; break; + case MD_S_INCOMPLETE: + s = md_json_gets(mdj, MD_KEY_STATE_DESCR, NULL); + s = s? apr_psprintf(ctx->p, "incomplete: %s", s) : "incomplete"; + break; case MD_S_EXPIRED_DEPRECATED: case MD_S_COMPLETE: until = md_json_get_time(mdj, MD_KEY_CERT, MD_KEY_VALID, MD_KEY_UNTIL, NULL); @@ -188,28 +191,11 @@ static void si_val_url(status_ctx *ctx, md_json_t *mdj, const status_info *info) { const char *url, *s; - apr_uri_t uri_parsed; - s = url = md_json_gets(mdj, info->key, NULL); if (!url) return; - if (!strcmp(LE_ACMEv2_PROD, url)) { - s = "Let's Encrypt"; - } - else if (!strcmp(LE_ACMEv2_STAGING, url)) { - s = "Let's Encrypt (staging)"; - } - else if (!strcmp(LE_ACMEv1_PROD, url)) { - s = "Let's Encrypt (v1)"; - } - else if (!strcmp(LE_ACMEv1_STAGING, url)) { - s = "Let's Encrypt (v1,staging)"; - } - else if (APR_SUCCESS == apr_uri_parse(ctx->p, url, &uri_parsed)) { - s = uri_parsed.hostname; - - } - apr_brigade_printf(ctx->bb, NULL, NULL, "%s", + s = md_get_ca_name_from_url(ctx->p, url); + apr_brigade_printf(ctx->bb, NULL, NULL, "%s", ap_escape_html2(ctx->p, url, 1), ap_escape_html2(ctx->p, s, 1)); } @@ -326,13 +312,24 @@ jcert = md_json_getj(mdj, info->key, NULL); if (jcert) si_val_url(ctx, jcert, &sub); } - + +static int count_certs(void *baton, const char *key, md_json_t *json) +{ + int *pcount = baton; + + (void)json; + if (strcmp(key, MD_KEY_VALID)) { + *pcount += 1; + } + return 1; +} + static void print_job_summary(apr_bucket_brigade *bb, md_json_t *mdj, const char *key, const char *separator) { char buffer[HUGE_STRING_LEN]; apr_status_t rv; - int finished, errors; + int finished, errors, cert_count; apr_time_t t; const char *s, *line; @@ -353,8 +350,16 @@ } if (finished) { - line = apr_psprintf(bb->p, "%s finished successfully.", line); - } + cert_count = 0; + md_json_iterkey(count_certs, &cert_count, mdj, key, MD_KEY_CERT, NULL); + if (cert_count > 0) { + line =apr_psprintf(bb->p, "%s finished, %d new certificate%s staged.", + line, cert_count, cert_count > 1? "s" : ""); + } + else { + line = apr_psprintf(bb->p, "%s finished successfully.", line); + } + } else { s = md_json_gets(mdj, key, MD_KEY_LAST, MD_KEY_DETAIL, NULL); if (s) line = apr_psprintf(bb->p, "%s %s", line, s); diff -Nru apache2-2.4.51/modules/proxy/mod_proxy.c apache2-2.4.52/modules/proxy/mod_proxy.c --- apache2-2.4.51/modules/proxy/mod_proxy.c 2021-09-09 15:22:23.000000000 +0000 +++ apache2-2.4.52/modules/proxy/mod_proxy.c 2021-12-16 11:23:49.000000000 +0000 @@ -777,11 +777,12 @@ if (conf->req && r->parsed_uri.scheme) { /* but it might be something vhosted */ - if (!(r->parsed_uri.hostname - && !ap_cstr_casecmp(r->parsed_uri.scheme, ap_http_scheme(r)) - && ap_matches_request_vhost(r, r->parsed_uri.hostname, - (apr_port_t)(r->parsed_uri.port_str ? r->parsed_uri.port - : ap_default_port(r))))) { + if (!r->parsed_uri.hostname + || ap_cstr_casecmp(r->parsed_uri.scheme, ap_http_scheme(r)) != 0 + || !ap_matches_request_vhost(r, r->parsed_uri.hostname, + (apr_port_t)(r->parsed_uri.port_str + ? r->parsed_uri.port + : ap_default_port(r)))) { r->proxyreq = PROXYREQ_PROXY; r->uri = r->unparsed_uri; r->filename = apr_pstrcat(r->pool, "proxy:", r->uri, NULL); @@ -2007,6 +2008,7 @@ struct proxy_alias *new; char *f = cmd->path; char *r = NULL; + const char *real; char *word; apr_table_t *params = apr_table_make(cmd->pool, 5); const apr_array_header_t *arr; @@ -2093,6 +2095,10 @@ if (r == NULL) { return "ProxyPass|ProxyPassMatch needs a path when not defined in a location"; } + if (!(real = ap_proxy_de_socketfy(cmd->temp_pool, r))) { + return "ProxyPass|ProxyPassMatch uses an invalid \"unix:\" URL"; + } + /* if per directory, save away the single alias */ if (cmd->path) { @@ -2109,7 +2115,7 @@ } new->fake = apr_pstrdup(cmd->pool, f); - new->real = apr_pstrdup(cmd->pool, ap_proxy_de_socketfy(cmd->pool, r)); + new->real = apr_pstrdup(cmd->pool, real); new->flags = flags; if (worker_type & AP_PROXY_WORKER_IS_MATCH) { new->regex = ap_pregcomp(cmd->pool, f, AP_REG_EXTENDED); @@ -2635,6 +2641,7 @@ proxy_worker *worker; char *path = cmd->path; char *name = NULL; + const char *real; char *word; apr_table_t *params = apr_table_make(cmd->pool, 5); const apr_array_header_t *arr; @@ -2675,6 +2682,9 @@ return "BalancerMember must define balancer name when outside section"; if (!name) return "BalancerMember must define remote proxy server"; + if (!(real = ap_proxy_de_socketfy(cmd->temp_pool, name))) { + return "BalancerMember uses an invalid \"unix:\" URL"; + } ap_str_tolower(path); /* lowercase scheme://hostname */ @@ -2687,8 +2697,7 @@ } /* Try to find existing worker */ - worker = ap_proxy_get_worker(cmd->temp_pool, balancer, conf, - ap_proxy_de_socketfy(cmd->temp_pool, name)); + worker = ap_proxy_get_worker(cmd->temp_pool, balancer, conf, real); if (!worker) { ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server, APLOGNO(01147) "Defining worker '%s' for balancer '%s'", @@ -2785,9 +2794,14 @@ } } else { + const char *real; + + if (!(real = ap_proxy_de_socketfy(cmd->temp_pool, name))) { + return "ProxySet uses an invalid \"unix:\" URL"; + } + worker = ap_proxy_get_worker_ex(cmd->temp_pool, NULL, conf, - ap_proxy_de_socketfy(cmd->temp_pool, name), - worker_type); + real, worker_type); if (!worker) { if (in_proxy_section) { err = ap_proxy_define_worker_ex(cmd->pool, &worker, NULL, @@ -2930,9 +2944,14 @@ } } else { + const char *real; + + if (!(real = ap_proxy_de_socketfy(cmd->temp_pool, conf->p))) { + return " uses an invalid \"unix:\" URL"; + } + worker = ap_proxy_get_worker_ex(cmd->temp_pool, NULL, sconf, - ap_proxy_de_socketfy(cmd->temp_pool, conf->p), - worker_type); + real, worker_type); if (!worker) { err = ap_proxy_define_worker_ex(cmd->pool, &worker, NULL, sconf, conf->p, worker_type); diff -Nru apache2-2.4.51/modules/proxy/mod_proxy.h apache2-2.4.52/modules/proxy/mod_proxy.h --- apache2-2.4.51/modules/proxy/mod_proxy.h 2021-08-24 12:44:28.000000000 +0000 +++ apache2-2.4.52/modules/proxy/mod_proxy.h 2021-12-16 11:23:49.000000000 +0000 @@ -750,6 +750,7 @@ #define AP_PROXY_WORKER_IS_PREFIX (1u << 0) #define AP_PROXY_WORKER_IS_MATCH (1u << 1) #define AP_PROXY_WORKER_IS_MALLOCED (1u << 2) +#define AP_PROXY_WORKER_NO_UDS (1u << 3) /** * Get the worker from proxy configuration, looking for either PREFIXED or @@ -1335,7 +1336,8 @@ struct proxy_tunnel_conn *client, *origin; apr_size_t read_buf_size; - int replied; + int replied; /* TODO 2.5+: one bit to merge in below bitmask */ + unsigned int nohalfclose :1; } proxy_tunnel_rec; /** diff -Nru apache2-2.4.51/modules/proxy/mod_proxy_balancer.c apache2-2.4.52/modules/proxy/mod_proxy_balancer.c --- apache2-2.4.51/modules/proxy/mod_proxy_balancer.c 2021-08-22 09:51:33.000000000 +0000 +++ apache2-2.4.52/modules/proxy/mod_proxy_balancer.c 2021-12-14 09:58:22.000000000 +0000 @@ -1814,13 +1814,13 @@ ap_rputs("Expr\n\n", r); - ap_rprintf(r, "Interval (ms)Interval (ms)\n", apr_time_as_msec(wsel->s->interval)); - ap_rprintf(r, "Passes triggerPasses trigger\n", wsel->s->passes); - ap_rprintf(r, "Fails trigger)Fails trigger)\n", wsel->s->fails); - ap_rprintf(r, "HC uriHC uri\n", ap_escape_html(r->pool, wsel->s->hcuri)); ap_rputs("\n\n", r); } diff -Nru apache2-2.4.51/modules/proxy/mod_proxy_connect.c apache2-2.4.52/modules/proxy/mod_proxy_connect.c --- apache2-2.4.51/modules/proxy/mod_proxy_connect.c 2021-01-17 16:21:35.000000000 +0000 +++ apache2-2.4.52/modules/proxy/mod_proxy_connect.c 2021-12-13 15:46:50.000000000 +0000 @@ -354,8 +354,6 @@ if (proxyport && !tunnel->replied) { return rc; } - /* Custom log may need this, still */ - r->status = rc; } /* diff -Nru apache2-2.4.51/modules/proxy/mod_proxy_http.c apache2-2.4.52/modules/proxy/mod_proxy_http.c --- apache2-2.4.51/modules/proxy/mod_proxy_http.c 2021-09-09 15:22:23.000000000 +0000 +++ apache2-2.4.52/modules/proxy/mod_proxy_http.c 2021-12-14 09:58:22.000000000 +0000 @@ -1238,9 +1238,14 @@ save_table); } + /* + * Save a possible Transfer-Encoding header as we need it later for + * ap_http_filter to know where to end. + */ + te = apr_table_get(r->headers_out, "Transfer-Encoding"); + /* can't have both Content-Length and Transfer-Encoding */ - if (apr_table_get(r->headers_out, "Transfer-Encoding") - && apr_table_get(r->headers_out, "Content-Length")) { + if (te && apr_table_get(r->headers_out, "Content-Length")) { /* * 2616 section 4.4, point 3: "if both Transfer-Encoding * and Content-Length are received, the latter MUST be @@ -1258,12 +1263,6 @@ backend->close = 1; } - /* - * Save a possible Transfer-Encoding header as we need it later for - * ap_http_filter to know where to end. - */ - te = apr_table_get(r->headers_out, "Transfer-Encoding"); - upgrade = apr_table_get(r->headers_out, "Upgrade"); if (proxy_status == HTTP_SWITCHING_PROTOCOLS) { if (!upgrade || !req->upgrade || (strcasecmp(req->upgrade, @@ -1498,20 +1497,6 @@ /* Let proxy tunnel forward everything */ status = ap_proxy_tunnel_run(tunnel); - if (ap_is_HTTP_ERROR(status)) { - /* Tunnel always return HTTP_GATEWAY_TIME_OUT on timeout, - * but we can differentiate between client and backend here. - */ - if (status == HTTP_GATEWAY_TIME_OUT - && tunnel->timeout == client_timeout) { - status = HTTP_REQUEST_TIME_OUT; - } - } - else { - /* Update r->status for custom log */ - status = HTTP_SWITCHING_PROTOCOLS; - } - r->status = status; /* We are done with both connections */ return DONE; diff -Nru apache2-2.4.51/modules/proxy/mod_proxy_uwsgi.c apache2-2.4.52/modules/proxy/mod_proxy_uwsgi.c --- apache2-2.4.51/modules/proxy/mod_proxy_uwsgi.c 2021-09-03 17:00:07.000000000 +0000 +++ apache2-2.4.52/modules/proxy/mod_proxy_uwsgi.c 2021-11-17 08:42:35.000000000 +0000 @@ -471,14 +471,22 @@ /* ADD PATH_INFO (unescaped) */ u_path_info = ap_strchr(url + sizeof(UWSGI_SCHEME) + 2, '/'); - if (!u_path_info || ap_unescape_url(u_path_info) != OK) { + if (!u_path_info) { + u_path_info = apr_pstrdup(r->pool, "/"); + } + else if (ap_unescape_url(u_path_info) != OK) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10100) "unable to decode uwsgi uri: %s", url); return HTTP_INTERNAL_SERVER_ERROR; } + else { + /* Remove duplicate slashes at the beginning of PATH_INFO */ + while (u_path_info[1] == '/') { + u_path_info++; + } + } apr_table_add(r->subprocess_env, "PATH_INFO", u_path_info); - /* Create space for state information */ status = ap_proxy_acquire_connection(UWSGI_SCHEME, &backend, worker, r->server); diff -Nru apache2-2.4.51/modules/proxy/proxy_util.c apache2-2.4.52/modules/proxy/proxy_util.c --- apache2-2.4.51/modules/proxy/proxy_util.c 2021-09-23 12:31:53.000000000 +0000 +++ apache2-2.4.52/modules/proxy/proxy_util.c 2021-12-16 11:23:49.000000000 +0000 @@ -1741,7 +1741,12 @@ return NULL; } - url = ap_proxy_de_socketfy(p, url); + if (!(mask & AP_PROXY_WORKER_NO_UDS)) { + url = ap_proxy_de_socketfy(p, url); + if (!url) { + return NULL; + } + } c = ap_strchr_c(url, ':'); if (c == NULL || c[1] != '/' || c[2] != '/' || c[3] == '\0') { @@ -2323,22 +2328,22 @@ access_status = proxy_run_pre_request(worker, balancer, r, conf, url); if (access_status == DECLINED && *balancer == NULL) { - *worker = ap_proxy_get_worker(r->pool, NULL, conf, *url); + const int forward = (r->proxyreq == PROXYREQ_PROXY); + *worker = ap_proxy_get_worker_ex(r->pool, NULL, conf, *url, + forward ? AP_PROXY_WORKER_NO_UDS : 0); if (*worker) { ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, "%s: found worker %s for %s", (*worker)->s->scheme, (*worker)->s->name, *url); - *balancer = NULL; - if (!fix_uds_filename(r, url)) { + if (!forward && !fix_uds_filename(r, url)) { return HTTP_INTERNAL_SERVER_ERROR; } access_status = OK; } - else if (r->proxyreq == PROXYREQ_PROXY) { + else if (forward) { if (conf->forward) { ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, "*: found forward proxy worker for %s", *url); - *balancer = NULL; *worker = conf->forward; access_status = OK; /* @@ -2352,8 +2357,8 @@ else if (r->proxyreq == PROXYREQ_REVERSE) { if (conf->reverse) { ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r, - "*: using default reverse proxy worker for %s (no keepalive)", *url); - *balancer = NULL; + "*: using default reverse proxy worker for %s " + "(no keepalive)", *url); *worker = conf->reverse; access_status = OK; /* @@ -4673,6 +4678,7 @@ { apr_status_t rv; conn_rec *c_i = r->connection; + apr_interval_time_t timeout = -1; proxy_tunnel_rec *tunnel; *ptunnel = NULL; @@ -4712,6 +4718,13 @@ tunnel->origin->pfd->desc.s = ap_get_conn_socket(c_o); tunnel->origin->pfd->client_data = tunnel->origin; + /* Defaults to the smallest timeout of both connections */ + apr_socket_timeout_get(tunnel->client->pfd->desc.s, &timeout); + apr_socket_timeout_get(tunnel->origin->pfd->desc.s, &tunnel->timeout); + if (timeout >= 0 && (tunnel->timeout < 0 || tunnel->timeout > timeout)) { + tunnel->timeout = timeout; + } + /* We should be nonblocking from now on the sockets */ apr_socket_opt_set(tunnel->client->pfd->desc.s, APR_SO_NONBLOCK, 1); apr_socket_opt_set(tunnel->origin->pfd->desc.s, APR_SO_NONBLOCK, 1); @@ -4733,6 +4746,11 @@ c_i->keepalive = AP_CONN_CLOSE; c_o->keepalive = AP_CONN_CLOSE; + /* Disable half-close forwarding for this request? */ + if (apr_table_get(r->subprocess_env, "proxy-nohalfclose")) { + tunnel->nohalfclose = 1; + } + /* Start with POLLOUT and let ap_proxy_tunnel_run() schedule both * directions when there are no output data pending (anymore). */ @@ -4838,6 +4856,12 @@ ap_log_rerror(APLOG_MARK, APLOG_TRACE3, 0, tunnel->r, "proxy: %s: %s read shutdown", tunnel->scheme, in->name); + if (tunnel->nohalfclose) { + /* No half-close forwarding, we are done both ways as + * soon as one side shuts down. + */ + return DONE; + } in->down_in = 1; } else { @@ -4854,7 +4878,7 @@ PROXY_DECLARE(int) ap_proxy_tunnel_run(proxy_tunnel_rec *tunnel) { - int rc = OK; + int status = OK, rc; request_rec *r = tunnel->r; apr_pollset_t *pollset = tunnel->pollset; struct proxy_tunnel_conn *client = tunnel->client, @@ -4889,14 +4913,14 @@ "(client=%hx, origin=%hx)", scheme, client->pfd->reqevents, origin->pfd->reqevents); - rc = HTTP_GATEWAY_TIME_OUT; + status = HTTP_GATEWAY_TIME_OUT; } else { ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(10214) "proxy: %s: polling failed", scheme); - rc = HTTP_INTERNAL_SERVER_ERROR; + status = HTTP_INTERNAL_SERVER_ERROR; } - return rc; + goto done; } ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, r, APLOGNO(10215) @@ -4915,7 +4939,8 @@ && pfd->desc.s != origin->pfd->desc.s) { ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10222) "proxy: %s: unknown socket in pollset", scheme); - return HTTP_INTERNAL_SERVER_ERROR; + status = HTTP_INTERNAL_SERVER_ERROR; + goto done; } if (!(pfd->rtnevents & (APR_POLLIN | APR_POLLOUT | @@ -4924,7 +4949,8 @@ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10220) "proxy: %s: polling events error (%x)", scheme, pfd->rtnevents); - return HTTP_INTERNAL_SERVER_ERROR; + status = HTTP_INTERNAL_SERVER_ERROR; + goto done; } /* We want to write if we asked for POLLOUT and got: @@ -4954,7 +4980,8 @@ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(10221) "proxy: %s: %s flushing failed (%i)", scheme, out->name, rc); - return rc; + status = rc; + goto done; } /* No more pending data. If the other side is not readable @@ -4984,7 +5011,8 @@ */ rc = proxy_tunnel_forward(tunnel, in); if (rc != OK) { - return rc; + status = rc; + goto done; } } } @@ -4999,15 +5027,20 @@ || !(pfd->rtnevents & APR_POLLOUT))) { rc = proxy_tunnel_forward(tunnel, tc); if (rc != OK) { - return rc; + status = rc; + goto done; } } } } while (!client->down_out || !origin->down_out); +done: ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(10223) - "proxy: %s: tunnel finished", scheme); - return OK; + "proxy: %s: tunneling returns (%i)", scheme, status); + if (status == DONE) { + status = OK; + } + return status; } PROXY_DECLARE (const char *) ap_proxy_show_hcmethod(hcmethod_t method) diff -Nru apache2-2.4.51/modules/ssl/ssl_engine_init.c apache2-2.4.52/modules/ssl/ssl_engine_init.c --- apache2-2.4.51/modules/ssl/ssl_engine_init.c 2021-09-08 06:55:40.000000000 +0000 +++ apache2-2.4.52/modules/ssl/ssl_engine_init.c 2021-12-13 10:27:03.000000000 +0000 @@ -91,7 +91,6 @@ return 1; } -#endif /* * Grab well-defined DH parameters from OpenSSL, see the BN_get_rfc* @@ -171,6 +170,7 @@ return NULL; /* impossible to reach. */ } +#endif static void ssl_add_version_components(apr_pool_t *ptemp, apr_pool_t *pconf, server_rec *s) @@ -440,8 +440,9 @@ modssl_init_app_data2_idx(); /* for modssl_get_app_data2() at request time */ +#if MODSSL_USE_OPENSSL_PRE_1_1_API init_dh_params(); -#if !MODSSL_USE_OPENSSL_PRE_1_1_API +#else init_bio_methods(); #endif @@ -862,7 +863,11 @@ { SSL_CTX *ctx = mctx->ssl_ctx; +#if MODSSL_USE_OPENSSL_PRE_1_1_API + /* Note that for OpenSSL>=1.1, auto selection is enabled via + * SSL_CTX_set_dh_auto(,1) if no parameter is configured. */ SSL_CTX_set_tmp_dh_callback(ctx, ssl_callback_TmpDH); +#endif SSL_CTX_set_info_callback(ctx, ssl_callback_Info); @@ -871,6 +876,23 @@ #endif } +static APR_INLINE +int modssl_CTX_load_verify_locations(SSL_CTX *ctx, + const char *file, + const char *path) +{ +#if OPENSSL_VERSION_NUMBER < 0x30000000L + if (!SSL_CTX_load_verify_locations(ctx, file, path)) + return 0; +#else + if (file && !SSL_CTX_load_verify_file(ctx, file)) + return 0; + if (path && !SSL_CTX_load_verify_dir(ctx, path)) + return 0; +#endif + return 1; +} + static apr_status_t ssl_init_ctx_verify(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, @@ -911,10 +933,8 @@ ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, "Configuring client authentication"); - if (!SSL_CTX_load_verify_locations(ctx, - mctx->auth.ca_cert_file, - mctx->auth.ca_cert_path)) - { + if (!modssl_CTX_load_verify_locations(ctx, mctx->auth.ca_cert_file, + mctx->auth.ca_cert_path)) { ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01895) "Unable to configure verify locations " "for client authentication"); @@ -999,6 +1019,23 @@ return APR_SUCCESS; } +static APR_INLINE +int modssl_X509_STORE_load_locations(X509_STORE *store, + const char *file, + const char *path) +{ +#if OPENSSL_VERSION_NUMBER < 0x30000000L + if (!X509_STORE_load_locations(store, file, path)) + return 0; +#else + if (file && !X509_STORE_load_file(store, file)) + return 0; + if (path && !X509_STORE_load_path(store, path)) + return 0; +#endif + return 1; +} + static apr_status_t ssl_init_ctx_crl(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, @@ -1037,8 +1074,8 @@ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(01900) "Configuring certificate revocation facility"); - if (!store || !X509_STORE_load_locations(store, mctx->crl_file, - mctx->crl_path)) { + if (!store || !modssl_X509_STORE_load_locations(store, mctx->crl_file, + mctx->crl_path)) { ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01901) "Host %s: unable to configure X.509 CRL storage " "for certificate revocation", mctx->sc->vhost_id); @@ -1267,6 +1304,31 @@ return 0; } +static APR_INLINE int modssl_DH_bits(DH *dh) +{ +#if OPENSSL_VERSION_NUMBER < 0x30000000L + return DH_bits(dh); +#else + return BN_num_bits(DH_get0_p(dh)); +#endif +} + +/* SSL_CTX_use_PrivateKey_file() can fail either because the private + * key was encrypted, or due to a mismatch between an already-loaded + * cert and the key - a common misconfiguration - from calling + * X509_check_private_key(). This macro is passed the last error code + * off the OpenSSL stack and evaluates to true only for the first + * case. With OpenSSL < 3 the second case is identifiable by the + * function code, but function codes are not used from 3.0. */ +#if OPENSSL_VERSION_NUMBER < 0x30000000L +#define CHECK_PRIVKEY_ERROR(ec) (ERR_GET_FUNC(ec) != X509_F_X509_CHECK_PRIVATE_KEY) +#else +#define CHECK_PRIVKEY_ERROR(ec) (ERR_GET_LIB(ec) != ERR_LIB_X509 \ + || (ERR_GET_REASON(ec) != X509_R_KEY_TYPE_MISMATCH \ + && ERR_GET_REASON(ec) != X509_R_KEY_VALUES_MISMATCH \ + && ERR_GET_REASON(ec) != X509_R_UNKNOWN_KEY_TYPE)) +#endif + static apr_status_t ssl_init_server_certs(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp, @@ -1277,7 +1339,7 @@ const char *vhost_id = mctx->sc->vhost_id, *key_id, *certfile, *keyfile; int i; X509 *cert; - DH *dhparams; + DH *dh; #ifdef HAVE_ECC EC_GROUP *ecparams = NULL; int nid; @@ -1372,8 +1434,7 @@ } else if ((SSL_CTX_use_PrivateKey_file(mctx->ssl_ctx, keyfile, SSL_FILETYPE_PEM) < 1) - && (ERR_GET_FUNC(ERR_peek_last_error()) - != X509_F_X509_CHECK_PRIVATE_KEY)) { + && CHECK_PRIVKEY_ERROR(ERR_peek_last_error())) { ssl_asn1_t *asn1; const unsigned char *ptr; @@ -1462,13 +1523,22 @@ */ certfile = APR_ARRAY_IDX(mctx->pks->cert_files, 0, const char *); if (certfile && !modssl_is_engine_id(certfile) - && (dhparams = ssl_dh_GetParamFromFile(certfile))) { - SSL_CTX_set_tmp_dh(mctx->ssl_ctx, dhparams); + && (dh = ssl_dh_GetParamFromFile(certfile))) { + /* ### This should be replaced with SSL_CTX_set0_tmp_dh_pkey() + * for OpenSSL 3.0+. */ + SSL_CTX_set_tmp_dh(mctx->ssl_ctx, dh); ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(02540) "Custom DH parameters (%d bits) for %s loaded from %s", - DH_bits(dhparams), vhost_id, certfile); - DH_free(dhparams); + modssl_DH_bits(dh), vhost_id, certfile); + DH_free(dh); } +#if !MODSSL_USE_OPENSSL_PRE_1_1_API + else { + /* If no parameter is manually configured, enable auto + * selection. */ + SSL_CTX_set_dh_auto(mctx->ssl_ctx, 1); + } +#endif #ifdef HAVE_ECC /* @@ -1518,6 +1588,7 @@ char buf[TLSEXT_TICKET_KEY_LEN]; char *path; modssl_ticket_key_t *ticket_key = mctx->ticket_key; + int res; if (!ticket_key->file_path) { return APR_SUCCESS; @@ -1545,11 +1616,22 @@ } memcpy(ticket_key->key_name, buf, 16); - memcpy(ticket_key->hmac_secret, buf + 16, 16); memcpy(ticket_key->aes_key, buf + 32, 16); - - if (!SSL_CTX_set_tlsext_ticket_key_cb(mctx->ssl_ctx, - ssl_callback_SessionTicket)) { +#if OPENSSL_VERSION_NUMBER < 0x30000000L + memcpy(ticket_key->hmac_secret, buf + 16, 16); + res = SSL_CTX_set_tlsext_ticket_key_cb(mctx->ssl_ctx, + ssl_callback_SessionTicket); +#else + ticket_key->mac_params[0] = + OSSL_PARAM_construct_octet_string(OSSL_MAC_PARAM_KEY, buf + 16, 16); + ticket_key->mac_params[1] = + OSSL_PARAM_construct_utf8_string(OSSL_MAC_PARAM_DIGEST, "sha256", 0); + ticket_key->mac_params[2] = + OSSL_PARAM_construct_end(); + res = SSL_CTX_set_tlsext_ticket_key_evp_cb(mctx->ssl_ctx, + ssl_callback_SessionTicket); +#endif + if (!res) { ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(01913) "Unable to initialize TLS session ticket key callback " "(incompatible OpenSSL version?)"); @@ -1680,7 +1762,7 @@ return ssl_die(s); } - X509_STORE_load_locations(store, pkp->ca_cert_file, NULL); + modssl_X509_STORE_load_locations(store, pkp->ca_cert_file, NULL); for (n = 0; n < ncerts; n++) { int i; @@ -2277,10 +2359,11 @@ } -#if !MODSSL_USE_OPENSSL_PRE_1_1_API +#if MODSSL_USE_OPENSSL_PRE_1_1_API + free_dh_params(); +#else free_bio_methods(); #endif - free_dh_params(); return APR_SUCCESS; } diff -Nru apache2-2.4.51/modules/ssl/ssl_engine_io.c apache2-2.4.52/modules/ssl/ssl_engine_io.c --- apache2-2.4.51/modules/ssl/ssl_engine_io.c 2021-09-09 15:22:23.000000000 +0000 +++ apache2-2.4.52/modules/ssl/ssl_engine_io.c 2021-12-13 10:27:03.000000000 +0000 @@ -194,6 +194,10 @@ static int bio_filter_out_read(BIO *bio, char *out, int outl) { /* this is never called */ + bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)BIO_get_data(bio); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, outctx->c, + "BUG: %s() should not be called", "bio_filter_out_read"); + AP_DEBUG_ASSERT(0); return -1; } @@ -293,12 +297,20 @@ static int bio_filter_out_gets(BIO *bio, char *buf, int size) { /* this is never called */ + bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)BIO_get_data(bio); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, outctx->c, + "BUG: %s() should not be called", "bio_filter_out_gets"); + AP_DEBUG_ASSERT(0); return -1; } static int bio_filter_out_puts(BIO *bio, const char *str) { /* this is never called */ + bio_filter_out_ctx_t *outctx = (bio_filter_out_ctx_t *)BIO_get_data(bio); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, outctx->c, + "BUG: %s() should not be called", "bio_filter_out_puts"); + AP_DEBUG_ASSERT(0); return -1; } @@ -533,22 +545,46 @@ static int bio_filter_in_write(BIO *bio, const char *in, int inl) { + bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)BIO_get_data(bio); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, inctx->f->c, + "BUG: %s() should not be called", "bio_filter_in_write"); + AP_DEBUG_ASSERT(0); return -1; } static int bio_filter_in_puts(BIO *bio, const char *str) { + bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)BIO_get_data(bio); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, inctx->f->c, + "BUG: %s() should not be called", "bio_filter_in_puts"); + AP_DEBUG_ASSERT(0); return -1; } static int bio_filter_in_gets(BIO *bio, char *buf, int size) { + bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)BIO_get_data(bio); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, inctx->f->c, + "BUG: %s() should not be called", "bio_filter_in_gets"); + AP_DEBUG_ASSERT(0); return -1; } static long bio_filter_in_ctrl(BIO *bio, int cmd, long num, void *ptr) { - return -1; + bio_filter_in_ctx_t *inctx = (bio_filter_in_ctx_t *)BIO_get_data(bio); + switch (cmd) { +#ifdef BIO_CTRL_EOF + case BIO_CTRL_EOF: + return inctx->rc == APR_EOF; +#endif + default: + break; + } + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, inctx->f->c, + "BUG: bio_filter_in_ctrl() should not be called with cmd=%i", + cmd); + return 0; } #if MODSSL_USE_OPENSSL_PRE_1_1_API @@ -573,7 +609,7 @@ bio_filter_in_read, bio_filter_in_puts, /* puts is never called */ bio_filter_in_gets, /* gets is never called */ - bio_filter_in_ctrl, /* ctrl is never called */ + bio_filter_in_ctrl, /* ctrl is called for EOF check */ bio_filter_create, bio_filter_destroy, NULL diff -Nru apache2-2.4.51/modules/ssl/ssl_engine_kernel.c apache2-2.4.52/modules/ssl/ssl_engine_kernel.c --- apache2-2.4.51/modules/ssl/ssl_engine_kernel.c 2021-09-09 15:22:23.000000000 +0000 +++ apache2-2.4.52/modules/ssl/ssl_engine_kernel.c 2021-12-13 10:27:03.000000000 +0000 @@ -1685,6 +1685,7 @@ ** _________________________________________________________________ */ +#if MODSSL_USE_OPENSSL_PRE_1_1_API /* * Hand out standard DH parameters, based on the authentication strength */ @@ -1730,6 +1731,7 @@ return modssl_get_dh_params(keylen); } +#endif /* * This OpenSSL callback function is called when OpenSSL @@ -2614,7 +2616,11 @@ unsigned char *keyname, unsigned char *iv, EVP_CIPHER_CTX *cipher_ctx, - HMAC_CTX *hctx, +#if OPENSSL_VERSION_NUMBER < 0x30000000L + HMAC_CTX *hmac_ctx, +#else + EVP_MAC_CTX *mac_ctx, +#endif int mode) { conn_rec *c = (conn_rec *)SSL_get_app_data(ssl); @@ -2640,7 +2646,13 @@ } EVP_EncryptInit_ex(cipher_ctx, EVP_aes_128_cbc(), NULL, ticket_key->aes_key, iv); - HMAC_Init_ex(hctx, ticket_key->hmac_secret, 16, tlsext_tick_md(), NULL); + +#if OPENSSL_VERSION_NUMBER < 0x30000000L + HMAC_Init_ex(hmac_ctx, ticket_key->hmac_secret, 16, + tlsext_tick_md(), NULL); +#else + EVP_MAC_CTX_set_params(mac_ctx, ticket_key->mac_params); +#endif ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02289) "TLS session ticket key for %s successfully set, " @@ -2661,7 +2673,13 @@ EVP_DecryptInit_ex(cipher_ctx, EVP_aes_128_cbc(), NULL, ticket_key->aes_key, iv); - HMAC_Init_ex(hctx, ticket_key->hmac_secret, 16, tlsext_tick_md(), NULL); + +#if OPENSSL_VERSION_NUMBER < 0x30000000L + HMAC_Init_ex(hmac_ctx, ticket_key->hmac_secret, 16, + tlsext_tick_md(), NULL); +#else + EVP_MAC_CTX_set_params(mac_ctx, ticket_key->mac_params); +#endif ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(02290) "TLS session ticket key for %s successfully set, " diff -Nru apache2-2.4.51/modules/ssl/ssl_engine_log.c apache2-2.4.52/modules/ssl/ssl_engine_log.c --- apache2-2.4.51/modules/ssl/ssl_engine_log.c 2020-01-14 17:39:25.000000000 +0000 +++ apache2-2.4.52/modules/ssl/ssl_engine_log.c 2021-12-13 10:27:03.000000000 +0000 @@ -78,6 +78,16 @@ return APR_EGENERAL; } +static APR_INLINE +unsigned long modssl_ERR_peek_error_data(const char **data, int *flags) +{ +#if OPENSSL_VERSION_NUMBER < 0x30000000L + return ERR_peek_error_line_data(NULL, NULL, data, flags); +#else + return ERR_peek_error_data(data, flags); +#endif +} + /* * Prints the SSL library error information. */ @@ -87,7 +97,7 @@ const char *data; int flags; - while ((e = ERR_peek_error_line_data(NULL, NULL, &data, &flags))) { + while ((e = modssl_ERR_peek_error_data(&data, &flags))) { const char *annotation; char err[256]; diff -Nru apache2-2.4.51/modules/ssl/ssl_private.h apache2-2.4.52/modules/ssl/ssl_private.h --- apache2-2.4.51/modules/ssl/ssl_private.h 2021-09-09 15:22:23.000000000 +0000 +++ apache2-2.4.52/modules/ssl/ssl_private.h 2021-12-13 10:27:03.000000000 +0000 @@ -89,6 +89,9 @@ /* must be defined before including ssl.h */ #define OPENSSL_NO_SSL_INTERN #endif +#if OPENSSL_VERSION_NUMBER >= 0x30000000 +#include +#endif #include #include #include @@ -134,13 +137,12 @@ SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) #define SSL_CTX_set_max_proto_version(ctx, version) \ SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) -#elif LIBRESSL_VERSION_NUMBER < 0x2070000f +#endif /* LIBRESSL_VERSION_NUMBER < 0x2060000f */ /* LibreSSL before 2.7 declares OPENSSL_VERSION_NUMBER == 2.0 but does not * include most changes from OpenSSL >= 1.1 (new functions, macros, * deprecations, ...), so we have to work around this... */ -#define MODSSL_USE_OPENSSL_PRE_1_1_API (1) -#endif /* LIBRESSL_VERSION_NUMBER < 0x2060000f */ +#define MODSSL_USE_OPENSSL_PRE_1_1_API (LIBRESSL_VERSION_NUMBER < 0x2070000f) #else /* defined(LIBRESSL_VERSION_NUMBER) */ #define MODSSL_USE_OPENSSL_PRE_1_1_API (OPENSSL_VERSION_NUMBER < 0x10100000L) #endif @@ -681,7 +683,11 @@ typedef struct { const char *file_path; unsigned char key_name[16]; +#if OPENSSL_VERSION_NUMBER < 0x30000000L unsigned char hmac_secret[16]; +#else + OSSL_PARAM mac_params[3]; +#endif unsigned char aes_key[16]; } modssl_ticket_key_t; #endif @@ -945,8 +951,16 @@ int ssl_callback_ClientHello(SSL *, int *, void *); #endif #ifdef HAVE_TLS_SESSION_TICKETS -int ssl_callback_SessionTicket(SSL *, unsigned char *, unsigned char *, - EVP_CIPHER_CTX *, HMAC_CTX *, int); +int ssl_callback_SessionTicket(SSL *ssl, + unsigned char *keyname, + unsigned char *iv, + EVP_CIPHER_CTX *cipher_ctx, +#if OPENSSL_VERSION_NUMBER < 0x30000000L + HMAC_CTX *hmac_ctx, +#else + EVP_MAC_CTX *mac_ctx, +#endif + int mode); #endif #ifdef HAVE_TLS_ALPN @@ -1124,10 +1138,12 @@ #endif +#if MODSSL_USE_OPENSSL_PRE_1_1_API /* Retrieve DH parameters for given key length. Return value should * be treated as unmutable, since it is stored in process-global * memory. */ DH *modssl_get_dh_params(unsigned keylen); +#endif /* Returns non-zero if the request was made over SSL/TLS. If sslconn * is non-NULL and the request is using SSL/TLS, sets *sslconn to the diff -Nru apache2-2.4.51/modules/tls/Makefile.in apache2-2.4.52/modules/tls/Makefile.in --- apache2-2.4.51/modules/tls/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/Makefile.in 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,20 @@ +# 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. + +# +# standard stuff +# + +include $(top_srcdir)/build/special.mk diff -Nru apache2-2.4.51/modules/tls/config2.m4 apache2-2.4.52/modules/tls/config2.m4 --- apache2-2.4.51/modules/tls/config2.m4 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/config2.m4 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,159 @@ +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 +dnl Unless required by applicable law or agreed to in writing, software +dnl distributed under the License is distributed on an "AS IS" BASIS, +dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +dnl See the License for the specific language governing permissions and +dnl limitations under the License. + +dnl # start of module specific part +APACHE_MODPATH_INIT(tls) + +dnl # list of module object files +tls_objs="dnl +mod_tls.lo dnl +tls_cache.lo dnl +tls_cert.lo dnl +tls_conf.lo dnl +tls_core.lo dnl +tls_filter.lo dnl +tls_ocsp.lo dnl +tls_proto.lo dnl +tls_util.lo dnl +tls_var.lo dnl +" + +dnl +dnl APACHE_CHECK_TLS +dnl +dnl Configure for rustls, giving preference to +dnl "--with-rustls=" if it was specified. +dnl +AC_DEFUN([APACHE_CHECK_RUSTLS],[ + AC_CACHE_CHECK([for rustls], [ac_cv_rustls], [ + dnl initialise the variables we use + ac_cv_rustls=no + ap_rustls_found="" + ap_rustls_base="" + ap_rustls_libs="" + + dnl Determine the rustls base directory, if any + AC_MSG_CHECKING([for user-provided rustls base directory]) + AC_ARG_WITH(rustls, APACHE_HELP_STRING(--with-rustls=PATH, rustls installation directory), [ + dnl If --with-rustls specifies a directory, we use that directory + if test "x$withval" != "xyes" -a "x$withval" != "x"; then + dnl This ensures $withval is actually a directory and that it is absolute + ap_rustls_base="`cd $withval ; pwd`" + fi + ]) + if test "x$ap_rustls_base" = "x"; then + AC_MSG_RESULT(none) + else + AC_MSG_RESULT($ap_rustls_base) + fi + + dnl Run header and version checks + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + saved_LDFLAGS="$LDFLAGS" + + dnl Before doing anything else, load in pkg-config variables + if test -n "$PKGCONFIG"; then + saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" + AC_MSG_CHECKING([for pkg-config along $PKG_CONFIG_PATH]) + if test "x$ap_rustls_base" != "x" ; then + if test -f "${ap_rustls_base}/lib/pkgconfig/librustls.pc"; then + dnl Ensure that the given path is used by pkg-config too, otherwise + dnl the system librustls.pc might be picked up instead. + PKG_CONFIG_PATH="${ap_rustls_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + elif test -f "${ap_rustls_base}/lib64/pkgconfig/librustls.pc"; then + dnl Ensure that the given path is used by pkg-config too, otherwise + dnl the system librustls.pc might be picked up instead. + PKG_CONFIG_PATH="${ap_rustls_base}/lib64/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH + fi + fi + ap_rustls_libs="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-l --silence-errors librustls`" + if test $? -eq 0; then + ap_rustls_found="yes" + pkglookup="`$PKGCONFIG --cflags-only-I librustls`" + APR_ADDTO(CPPFLAGS, [$pkglookup]) + APR_ADDTO(MOD_CFLAGS, [$pkglookup]) + pkglookup="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-L librustls`" + APR_ADDTO(LDFLAGS, [$pkglookup]) + APR_ADDTO(MOD_LDFLAGS, [$pkglookup]) + pkglookup="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-other librustls`" + APR_ADDTO(LDFLAGS, [$pkglookup]) + APR_ADDTO(MOD_LDFLAGS, [$pkglookup]) + fi + PKG_CONFIG_PATH="$saved_PKG_CONFIG_PATH" + fi + + dnl fall back to the user-supplied directory if not found via pkg-config + if test "x$ap_rustls_base" != "x" -a "x$ap_rustls_found" = "x"; then + APR_ADDTO(CPPFLAGS, [-I$ap_rustls_base/include]) + APR_ADDTO(MOD_CFLAGS, [-I$ap_rustls_base/include]) + APR_ADDTO(LDFLAGS, [-L$ap_rustls_base/lib]) + APR_ADDTO(MOD_LDFLAGS, [-L$ap_rustls_base/lib]) + if test "x$ap_platform_runtime_link_flag" != "x"; then + APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag$ap_rustls_base/lib]) + APR_ADDTO(MOD_LDFLAGS, [$ap_platform_runtime_link_flag$ap_rustls_base/lib]) + fi + fi + + AC_MSG_CHECKING([for rustls version >= 0.8.2]) + AC_TRY_COMPILE([#include ],[ +rustls_version(); +], + [AC_MSG_RESULT(OK) + ac_cv_rustls=yes], + [AC_MSG_RESULT(FAILED)]) + + dnl restore + CPPFLAGS="$saved_CPPFLAGS" + LIBS="$saved_LIBS" + LDFLAGS="$saved_LDFLAGS" + ]) + if test "x$ac_cv_rustls" = "xyes"; then + AC_DEFINE(HAVE_RUSTLS, 1, [Define if rustls is available]) + fi +]) + + +dnl # hook module into the Autoconf mechanism (--enable-http2) +APACHE_MODULE(tls, [TLS protocol handling using rustls. Implemented by mod_tls. +This module requires a librustls installation. +See --with-rustls on how to manage non-standard locations. This module +is usually linked shared and requires loading. ], $tls_objs, , most, [ + APACHE_CHECK_RUSTLS + if test "$ac_cv_rustls" = "yes" ; then + if test "x$enable_tls" = "xshared"; then + case `uname` in + "Darwin") + MOD_TLS_LINK_LIBS="-lrustls -framework Security -framework Foundation" + ;; + *) + MOD_TLS_LINK_LIBS="-lrustls" + ;; + esac + # The only symbol which needs to be exported is the module + # structure, so ask libtool to hide everything else: + APR_ADDTO(MOD_TLS_LDADD, [$MOD_TLS_LINK_LIBS -export-symbols-regex tls_module]) + fi + else + enable_tls=no + fi +]) + + +dnl # end of module specific part +APACHE_MODPATH_FINISH + diff -Nru apache2-2.4.51/modules/tls/mod_tls.c apache2-2.4.52/modules/tls/mod_tls.c --- apache2-2.4.51/modules/tls/mod_tls.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/mod_tls.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,288 @@ +/* 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 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "mod_tls.h" +#include "tls_conf.h" +#include "tls_core.h" +#include "tls_cache.h" +#include "tls_proto.h" +#include "tls_filter.h" +#include "tls_var.h" +#include "tls_version.h" + +#include "mod_proxy.h" + +static void tls_hooks(apr_pool_t *pool); + +AP_DECLARE_MODULE(tls) = { + STANDARD20_MODULE_STUFF, + tls_conf_create_dir, /* create per dir config */ + tls_conf_merge_dir, /* merge per dir config */ + tls_conf_create_svr, /* create per server config */ + tls_conf_merge_svr, /* merge per server config (inheritance) */ + tls_conf_cmds, /* command handlers */ + tls_hooks, +#if defined(AP_MODULE_FLAG_NONE) + AP_MODULE_FLAG_ALWAYS_MERGE +#endif +}; + +static const char* crustls_version(apr_pool_t *p) +{ + struct rustls_str rversion; + + rversion = rustls_version(); + return apr_pstrndup(p, rversion.data, rversion.len); +} + +static int tls_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp) +{ + tls_proto_pre_config(pconf, ptemp); + tls_cache_pre_config(pconf, plog, ptemp); + return OK; +} + +static apr_status_t tls_post_config(apr_pool_t *p, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *s) +{ + const char *tls_init_key = "mod_tls_init_counter"; + tls_conf_server_t *sc; + void *data = NULL; + + (void)plog; + sc = tls_conf_server_get(s); + assert(sc); + assert(sc->global); + sc->global->module_version = "mod_tls/" MOD_TLS_VERSION; + sc->global->crustls_version = crustls_version(p); + + apr_pool_userdata_get(&data, tls_init_key, s->process->pool); + if (data == NULL) { + /* At the first start, httpd makes a config check dry run + * to see if the config is ok in principle. + */ + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, "post config dry run"); + apr_pool_userdata_set((const void *)1, tls_init_key, + apr_pool_cleanup_null, s->process->pool); + } + else { + ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, APLOGNO(10365) + "%s (%s), initializing...", + sc->global->module_version, + sc->global->crustls_version); + } + + return tls_core_init(p, ptemp, s); +} + +static apr_status_t tls_post_proxy_config( + apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) +{ + tls_conf_server_t *sc = tls_conf_server_get(s); + (void)plog; + sc->global->mod_proxy_post_config_done = 1; + return tls_core_init(p, ptemp, s); +} + +#if AP_MODULE_MAGIC_AT_LEAST(20120211, 109) +static int tls_ssl_outgoing(conn_rec *c, ap_conf_vector_t *dir_conf, int enable_ssl) +{ + /* we are not handling proxy connections - for now */ + tls_core_conn_bind(c, dir_conf); + if (enable_ssl && tls_core_setup_outgoing(c) == OK) { + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, c->base_server, + "accepted ssl_bind_outgoing(enable=%d) for %s", + enable_ssl, c->base_server->server_hostname); + return OK; + } + tls_core_conn_disable(c); + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, c->base_server, + "declined ssl_bind_outgoing(enable=%d) for %s", + enable_ssl, c->base_server->server_hostname); + return DECLINED; +} + +#else /* #if AP_MODULE_MAGIC_AT_LEAST(20120211, 109) */ + +APR_DECLARE_OPTIONAL_FN(int, ssl_proxy_enable, (conn_rec *)); +APR_DECLARE_OPTIONAL_FN(int, ssl_engine_disable, (conn_rec *)); +APR_DECLARE_OPTIONAL_FN(int, ssl_engine_set, (conn_rec *, + ap_conf_vector_t *, + int proxy, int enable)); +static APR_OPTIONAL_FN_TYPE(ssl_engine_set) *module_ssl_engine_set; + +static int ssl_engine_set( + conn_rec *c, ap_conf_vector_t *dir_conf, int proxy, int enable) +{ + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, c->base_server, + "ssl_engine_set(proxy=%d, enable=%d) for %s", + proxy, enable, c->base_server->server_hostname); + tls_core_conn_bind(c, dir_conf); + if (enable && tls_core_setup_outgoing(c) == OK) { + if (module_ssl_engine_set) { + module_ssl_engine_set(c, dir_conf, proxy, 0); + } + return 1; + } + if (proxy || !enable) { + /* we are not handling proxy connections - for now */ + tls_core_conn_disable(c); + } + if (module_ssl_engine_set) { + return module_ssl_engine_set(c, dir_conf, proxy, enable); + } + return 0; +} + +static int ssl_proxy_enable(conn_rec *c) +{ + return ssl_engine_set(c, NULL, 1, 1); +} + +static int ssl_engine_disable(conn_rec *c) +{ + return ssl_engine_set(c, NULL, 0, 0); +} + +static apr_status_t tls_post_config_proxy_ssl( + apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) +{ + if (1) { + const char *tls_init_key = "mod_tls_proxy_ssl_counter"; + void *data = NULL; + APR_OPTIONAL_FN_TYPE(ssl_engine_set) *fn_ssl_engine_set; + + (void)p; + (void)plog; + (void)ptemp; + apr_pool_userdata_get(&data, tls_init_key, s->process->pool); + if (data == NULL) { + /* At the first start, httpd makes a config check dry run + * to see if the config is ok in principle. + */ + apr_pool_userdata_set((const void *)1, tls_init_key, + apr_pool_cleanup_null, s->process->pool); + return APR_SUCCESS; + } + + /* mod_ssl (if so loaded, has registered its optional functions. + * When mod_proxy runs in post-config, it looks up those functions and uses + * them to manipulate SSL status for backend connections. + * We provide our own implementations to avoid becoming active on such + * connections for now. + * */ + fn_ssl_engine_set = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_set); + module_ssl_engine_set = (fn_ssl_engine_set + && fn_ssl_engine_set != ssl_engine_set)? fn_ssl_engine_set : NULL; + APR_REGISTER_OPTIONAL_FN(ssl_engine_set); + APR_REGISTER_OPTIONAL_FN(ssl_proxy_enable); + APR_REGISTER_OPTIONAL_FN(ssl_engine_disable); + } + return APR_SUCCESS; +} +#endif /* #if AP_MODULE_MAGIC_AT_LEAST(20120211, 109) */ + +static void tls_init_child(apr_pool_t *p, server_rec *s) +{ + tls_cache_init_child(p, s); +} + +static int hook_pre_connection(conn_rec *c, void *csd) +{ + (void)csd; /* mpm specific socket data, not used */ + + /* are we on a primary connection? */ + if (c->master) return DECLINED; + + /* Decide connection TLS stats and install our + * input/output filters for handling TLS/application data + * if enabled. + */ + return tls_filter_pre_conn_init(c); +} + +static int hook_connection(conn_rec* c) +{ + tls_filter_conn_init(c); + /* we do *not* take over. we are not processing requests. */ + return DECLINED; +} + +static const char *tls_hook_http_scheme(const request_rec *r) +{ + return (tls_conn_check_ssl(r->connection) == OK)? "https" : NULL; +} + +static apr_port_t tls_hook_default_port(const request_rec *r) +{ + return (tls_conn_check_ssl(r->connection) == OK) ? 443 : 0; +} + +static const char* const mod_http2[] = { "mod_http2.c", NULL}; + +static void tls_hooks(apr_pool_t *pool) +{ + /* If our request check denies further processing, certain things + * need to be in place for the response to be correctly generated. */ + static const char *dep_req_check[] = { "mod_setenvif.c", NULL }; + static const char *dep_proxy[] = { "mod_proxy.c", NULL }; + + ap_log_perror(APLOG_MARK, APLOG_TRACE1, 0, pool, "installing hooks"); + tls_filter_register(pool); + + ap_hook_pre_config(tls_pre_config, NULL,NULL, APR_HOOK_MIDDLE); + /* run post-config hooks one before, one after mod_proxy, as the + * mod_proxy's own one calls us in its "section_post_config" hook. */ + ap_hook_post_config(tls_post_config, NULL, dep_proxy, APR_HOOK_MIDDLE); + APR_OPTIONAL_HOOK(proxy, section_post_config, + tls_proxy_section_post_config, NULL, NULL, + APR_HOOK_MIDDLE); + ap_hook_post_config(tls_post_proxy_config, dep_proxy, NULL, APR_HOOK_MIDDLE); + ap_hook_child_init(tls_init_child, NULL,NULL, APR_HOOK_MIDDLE); + /* connection things */ + ap_hook_pre_connection(hook_pre_connection, NULL, NULL, APR_HOOK_MIDDLE); + ap_hook_process_connection(hook_connection, NULL, mod_http2, APR_HOOK_MIDDLE); + /* request things */ + ap_hook_default_port(tls_hook_default_port, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_http_scheme(tls_hook_http_scheme, NULL,NULL, APR_HOOK_MIDDLE); + ap_hook_post_read_request(tls_core_request_check, dep_req_check, NULL, APR_HOOK_MIDDLE); + ap_hook_fixups(tls_var_request_fixup, NULL,NULL, APR_HOOK_MIDDLE); + + ap_hook_ssl_conn_is_ssl(tls_conn_check_ssl, NULL, NULL, APR_HOOK_MIDDLE); + ap_hook_ssl_var_lookup(tls_var_lookup, NULL, NULL, APR_HOOK_MIDDLE); + +#if AP_MODULE_MAGIC_AT_LEAST(20120211, 109) + ap_hook_ssl_bind_outgoing(tls_ssl_outgoing, NULL, NULL, APR_HOOK_MIDDLE); +#else + ap_hook_post_config(tls_post_config_proxy_ssl, NULL, dep_proxy, APR_HOOK_MIDDLE); +#endif + +} diff -Nru apache2-2.4.51/modules/tls/mod_tls.h apache2-2.4.52/modules/tls/mod_tls.h --- apache2-2.4.51/modules/tls/mod_tls.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/mod_tls.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,19 @@ +/* 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 mod_tls_h +#define mod_tls_h + +#endif /* mod_tls_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_cache.c apache2-2.4.52/modules/tls/tls_cache.c --- apache2-2.4.51/modules/tls/tls_cache.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_cache.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,310 @@ +/* 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 +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "tls_conf.h" +#include "tls_core.h" +#include "tls_cache.h" + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + +#define TLS_CACHE_DEF_PROVIDER "shmcb" +#define TLS_CACHE_DEF_DIR "tls" +#define TLS_CACHE_DEF_FILE "session_cache" +#define TLS_CACHE_DEF_SIZE 512000 + +static const char *cache_provider_unknown(const char *name, apr_pool_t *p) +{ + apr_array_header_t *known; + const char *known_names; + + known = ap_list_provider_names(p, AP_SOCACHE_PROVIDER_GROUP, + AP_SOCACHE_PROVIDER_VERSION); + known_names = apr_array_pstrcat(p, known, ','); + return apr_psprintf(p, "cache type '%s' not supported " + "(known names: %s). Maybe you need to load the " + "appropriate socache module (mod_socache_%s?).", + name, known_names, name); +} + +void tls_cache_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp) +{ + (void)plog; + (void)ptemp; + /* we make this visible, in case someone wants to configure it. + * this does not mean that we will really use it, which is determined + * by configuration and cache provider capabilities. */ + ap_mutex_register(pconf, TLS_SESSION_CACHE_MUTEX_TYPE, NULL, APR_LOCK_DEFAULT, 0); +} + +static const char *cache_init(tls_conf_global_t *gconf, apr_pool_t *p, apr_pool_t *ptemp) +{ + const char *err = NULL; + const char *name, *args = NULL; + apr_status_t rv; + + if (gconf->session_cache) { + goto cleanup; + } + else if (!apr_strnatcasecmp("none", gconf->session_cache_spec)) { + gconf->session_cache_provider = NULL; + gconf->session_cache = NULL; + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, gconf->ap_server, APLOGNO(10346) + "session cache explicitly disabled"); + goto cleanup; + } + else if (!apr_strnatcasecmp("default", gconf->session_cache_spec)) { + const char *path = TLS_CACHE_DEF_DIR; + +#if AP_MODULE_MAGIC_AT_LEAST(20180906, 2) + path = ap_state_dir_relative(p, path); +#endif + gconf->session_cache_spec = apr_psprintf(p, "%s:%s/%s(%ld)", + TLS_CACHE_DEF_PROVIDER, path, TLS_CACHE_DEF_FILE, (long)TLS_CACHE_DEF_SIZE); + gconf->session_cache_spec = "shmcb:mod_tls-sesss(64000)"; + } + + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, gconf->ap_server, APLOGNO(10347) + "Using session cache: %s", gconf->session_cache_spec); + name = gconf->session_cache_spec; + args = ap_strchr((char*)name, ':'); + if (args) { + name = apr_pstrmemdup(p, name, (apr_size_t)(args - name)); + ++args; + } + gconf->session_cache_provider = ap_lookup_provider(AP_SOCACHE_PROVIDER_GROUP, + name, AP_SOCACHE_PROVIDER_VERSION); + if (!gconf->session_cache_provider) { + err = cache_provider_unknown(name, p); + goto cleanup; + } + err = gconf->session_cache_provider->create(&gconf->session_cache, args, ptemp, p); + if (err != NULL) goto cleanup; + + if (gconf->session_cache_provider->flags & AP_SOCACHE_FLAG_NOTMPSAFE + && !gconf->session_cache_mutex) { + /* we need a global lock to access the cache */ + rv = ap_global_mutex_create(&gconf->session_cache_mutex, NULL, + TLS_SESSION_CACHE_MUTEX_TYPE, NULL, gconf->ap_server, p, 0); + if (APR_SUCCESS != rv) { + err = apr_psprintf(p, "error setting up global %s mutex: %d", + TLS_SESSION_CACHE_MUTEX_TYPE, rv); + gconf->session_cache_mutex = NULL; + goto cleanup; + } + } + +cleanup: + if (NULL != err) { + gconf->session_cache_provider = NULL; + gconf->session_cache = NULL; + } + return err; +} + +const char *tls_cache_set_specification( + const char *spec, tls_conf_global_t *gconf, apr_pool_t *p, apr_pool_t *ptemp) +{ + gconf->session_cache_spec = spec; + return cache_init(gconf, p, ptemp); +} + +apr_status_t tls_cache_post_config(apr_pool_t *p, apr_pool_t *ptemp, server_rec *s) +{ + tls_conf_server_t *sc = tls_conf_server_get(s); + const char *err; + apr_status_t rv = APR_SUCCESS; + + err = cache_init(sc->global, p, ptemp); + if (err) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s, APLOGNO(10348) + "session cache [%s] could not be initialized, will continue " + "without session one. Since this will impact performance, " + "consider making use of the 'TLSSessionCache' directive. The " + "error was: %s", sc->global->session_cache_spec, err); + } + + if (sc->global->session_cache) { + struct ap_socache_hints hints; + + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, "provider init session cache [%s]", + sc->global->session_cache_spec); + memset(&hints, 0, sizeof(hints)); + hints.avg_obj_size = 100; + hints.avg_id_len = 33; + hints.expiry_interval = 30; + + rv = sc->global->session_cache_provider->init( + sc->global->session_cache, "mod_tls-sess", &hints, s, p); + if (APR_SUCCESS != rv) { + ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(10349) + "error initializing session cache."); + } + } + return rv; +} + +void tls_cache_init_child(apr_pool_t *p, server_rec *s) +{ + tls_conf_server_t *sc = tls_conf_server_get(s); + const char *lockfile; + apr_status_t rv; + + if (sc->global->session_cache_mutex) { + lockfile = apr_global_mutex_lockfile(sc->global->session_cache_mutex); + rv = apr_global_mutex_child_init(&sc->global->session_cache_mutex, lockfile, p); + if (APR_SUCCESS != rv) { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10350) + "Cannot reinit %s mutex (file `%s`)", + TLS_SESSION_CACHE_MUTEX_TYPE, lockfile? lockfile : "-"); + } + } +} + +void tls_cache_free(server_rec *s) +{ + tls_conf_server_t *sc = tls_conf_server_get(s); + if (sc->global->session_cache_provider) { + sc->global->session_cache_provider->destroy(sc->global->session_cache, s); + } +} + +static void tls_cache_lock(tls_conf_global_t *gconf) +{ + if (gconf->session_cache_mutex) { + apr_status_t rv = apr_global_mutex_lock(gconf->session_cache_mutex); + if (APR_SUCCESS != rv) { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, gconf->ap_server, APLOGNO(10351) + "Failed to acquire TLS session cache lock"); + } + } +} + +static void tls_cache_unlock(tls_conf_global_t *gconf) +{ + if (gconf->session_cache_mutex) { + apr_status_t rv = apr_global_mutex_unlock(gconf->session_cache_mutex); + if (APR_SUCCESS != rv) { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, gconf->ap_server, APLOGNO(10352) + "Failed to release TLS session cache lock"); + } + } +} + +static rustls_result tls_cache_get( + void *userdata, + const rustls_slice_bytes *key, + int remove_after, + unsigned char *buf, + size_t count, + size_t *out_n) +{ + conn_rec *c = userdata; + tls_conf_conn_t *cc = tls_conf_conn_get(c); + tls_conf_server_t *sc = tls_conf_server_get(cc->server); + apr_status_t rv = APR_ENOENT; + unsigned int vlen, klen; + const unsigned char *kdata; + + if (!sc->global->session_cache) goto not_found; + tls_cache_lock(sc->global); + + kdata = key->data; + klen = (unsigned int)key->len; + vlen = (unsigned int)count; + rv = sc->global->session_cache_provider->retrieve( + sc->global->session_cache, cc->server, kdata, klen, buf, &vlen, c->pool); + + if (APLOGctrace4(c)) { + apr_ssize_t n = klen; + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, rv, c, "retrieve key %d[%8x], found %d val", + klen, apr_hashfunc_default((const char*)kdata, &n), vlen); + } + if (remove_after || (APR_SUCCESS != rv && !APR_STATUS_IS_NOTFOUND(rv))) { + sc->global->session_cache_provider->remove( + sc->global->session_cache, cc->server, key->data, klen, c->pool); + } + + tls_cache_unlock(sc->global); + if (APR_SUCCESS != rv) goto not_found; + cc->session_id_cache_hit = 1; + *out_n = count; + return RUSTLS_RESULT_OK; + +not_found: + *out_n = 0; + return RUSTLS_RESULT_NOT_FOUND; +} + +static rustls_result tls_cache_put( + void *userdata, + const rustls_slice_bytes *key, + const rustls_slice_bytes *val) +{ + conn_rec *c = userdata; + tls_conf_conn_t *cc = tls_conf_conn_get(c); + tls_conf_server_t *sc = tls_conf_server_get(cc->server); + apr_status_t rv = APR_ENOENT; + apr_time_t expires_at; + unsigned int klen, vlen; + const unsigned char *kdata; + + if (!sc->global->session_cache) goto not_stored; + tls_cache_lock(sc->global); + + expires_at = apr_time_now() + apr_time_from_sec(300); + kdata = key->data; + klen = (unsigned int)key->len; + vlen = (unsigned int)val->len; + rv = sc->global->session_cache_provider->store(sc->global->session_cache, cc->server, + kdata, klen, expires_at, + (unsigned char*)val->data, vlen, c->pool); + if (APLOGctrace4(c)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, rv, c, + "stored %d key bytes, with %d val bytes", klen, vlen); + } + tls_cache_unlock(sc->global); + if (APR_SUCCESS != rv) goto not_stored; + return RUSTLS_RESULT_OK; + +not_stored: + return RUSTLS_RESULT_NOT_FOUND; +} + +apr_status_t tls_cache_init_server( + rustls_server_config_builder *builder, server_rec *s) +{ + tls_conf_server_t *sc = tls_conf_server_get(s); + + if (sc && sc->global->session_cache) { + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, "adding session persistance to rustls"); + rustls_server_config_builder_set_persistence( + builder, tls_cache_get, tls_cache_put); + } + return APR_SUCCESS; +} diff -Nru apache2-2.4.51/modules/tls/tls_cache.h apache2-2.4.52/modules/tls/tls_cache.h --- apache2-2.4.51/modules/tls/tls_cache.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_cache.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,63 @@ +/* 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 tls_cache_h +#define tls_cache_h + +/* name of the global session cache mutex, should we need it */ +#define TLS_SESSION_CACHE_MUTEX_TYPE "tls-session-cache" + + +/** + * Set the specification of the session cache to use. The syntax is + * "default|none|(:)?" + * + * @param spec the cache specification + * @param gconf the modules global configuration + * @param p pool for permanent allocations + * @param ptemp pool for temporary allocations + * @return NULL on success or an error message + */ +const char *tls_cache_set_specification( + const char *spec, tls_conf_global_t *gconf, apr_pool_t *p, apr_pool_t *ptemp); + +/** + * Setup before configuration runs, announces our potential global mutex. + */ +void tls_cache_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp); + +/** + * Verify the cache settings at the end of the configuration and + * create the default session cache, if not already done. + */ +apr_status_t tls_cache_post_config(apr_pool_t *p, apr_pool_t *ptemp, server_rec *s); + +/** + * Started a new child, make sure that global mutex we might use is set up. + */ +void tls_cache_init_child(apr_pool_t *p, server_rec *s); + +/** + * Free all cache related resources. + */ +void tls_cache_free(server_rec *s); + +/** + * Initialize the session store for the server's config builder. + */ +apr_status_t tls_cache_init_server( + rustls_server_config_builder *builder, server_rec *s); + +#endif /* tls_cache_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_cert.c apache2-2.4.52/modules/tls/tls_cert.c --- apache2-2.4.51/modules/tls/tls_cert.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_cert.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,564 @@ +/* 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 +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "tls_cert.h" +#include "tls_util.h" + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + + +apr_status_t tls_cert_load_pem( + apr_pool_t *p, const tls_cert_spec_t *cert, tls_cert_pem_t **ppem) +{ + apr_status_t rv; + const char *fpath; + tls_cert_pem_t *cpem; + + ap_assert(cert->cert_file); + cpem = apr_pcalloc(p, sizeof(*cpem)); + fpath = ap_server_root_relative(p, cert->cert_file); + if (NULL == fpath) { + rv = APR_ENOENT; goto cleanup; + } + rv = tls_util_file_load(p, fpath, 0, 100*1024, &cpem->cert_pem); + if (APR_SUCCESS != rv) goto cleanup; + + if (cert->pkey_file) { + fpath = ap_server_root_relative(p, cert->pkey_file); + if (NULL == fpath) { + rv = APR_ENOENT; goto cleanup; + } + rv = tls_util_file_load(p, fpath, 0, 100*1024, &cpem->pkey_pem); + if (APR_SUCCESS != rv) goto cleanup; + } + else { + cpem->pkey_pem = cpem->cert_pem; + } +cleanup: + *ppem = (APR_SUCCESS == rv)? cpem : NULL; + return rv; +} + +#define PEM_IN_CHUNK 48 /* PEM demands at most 64 chars per line */ + +static apr_status_t tls_der_to_pem( + const char **ppem, apr_pool_t *p, + const unsigned char *der_data, apr_size_t der_len, + const char *header, const char *footer) +{ + apr_status_t rv = APR_SUCCESS; + char *pem = NULL, *s; + apr_size_t b64_len, n, hd_len, ft_len; + apr_ssize_t in_len, i; + + if (der_len > INT_MAX) { + rv = APR_ENOMEM; + goto cleanup; + } + in_len = (apr_ssize_t)der_len; + rv = apr_encode_base64(NULL, (const char*)der_data, in_len, APR_ENCODE_NONE, &b64_len); + if (APR_SUCCESS != rv) goto cleanup; + if (b64_len > INT_MAX) { + rv = APR_ENOMEM; + goto cleanup; + } + hd_len = header? strlen(header) : 0; + ft_len = footer? strlen(footer) : 0; + s = pem = apr_pcalloc(p, + + b64_len + (der_len/PEM_IN_CHUNK) + 1 /* \n per chunk */ + + hd_len +1 + ft_len + 1 /* adding \n */ + + 1); /* NUL-terminated */ + if (header) { + strcpy(s, header); + s += hd_len; + *s++ = '\n'; + } + for (i = 0; in_len > 0; i += PEM_IN_CHUNK, in_len -= PEM_IN_CHUNK) { + rv = apr_encode_base64(s, + (const char*)der_data + i, in_len > PEM_IN_CHUNK? PEM_IN_CHUNK : in_len, + APR_ENCODE_NONE, &n); + s += n; + *s++ = '\n'; + } + if (footer) { + strcpy(s, footer); + s += ft_len; + *s++ = '\n'; + } +cleanup: + *ppem = (APR_SUCCESS == rv)? pem : NULL; + return rv; +} + +#define PEM_CERT_HD "-----BEGIN CERTIFICATE-----" +#define PEM_CERT_FT "-----END CERTIFICATE-----" + +apr_status_t tls_cert_to_pem(const char **ppem, apr_pool_t *p, const rustls_certificate *cert) +{ + const unsigned char* der_data; + size_t der_len; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + const char *pem = NULL; + + rr = rustls_certificate_get_der(cert, &der_data, &der_len); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + rv = tls_der_to_pem(&pem, p, der_data, der_len, PEM_CERT_HD, PEM_CERT_FT); +cleanup: + if (RUSTLS_RESULT_OK != rr) { + rv = tls_util_rustls_error(p, rr, NULL); + } + *ppem = (APR_SUCCESS == rv)? pem : NULL; + return rv; +} + +static void nullify_key_pem(tls_cert_pem_t *pems) +{ + if (pems->pkey_pem.len) { + memset((void*)pems->pkey_pem.data, 0, pems->pkey_pem.len); + } +} + +static apr_status_t make_certified_key( + apr_pool_t *p, const char *name, + const tls_data_t *cert_pem, const tls_data_t *pkey_pem, + const rustls_certified_key **pckey) +{ + const rustls_certified_key *ckey = NULL; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + + rr = rustls_certified_key_build( + cert_pem->data, cert_pem->len, + pkey_pem->data, pkey_pem->len, + &ckey); + + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr; + rv = tls_util_rustls_error(p, rr, &err_descr); + ap_log_perror(APLOG_MARK, APLOG_ERR, rv, p, APLOGNO(10363) + "Failed to load certified key %s: [%d] %s", + name, (int)rr, err_descr); + } + if (APR_SUCCESS == rv) { + *pckey = ckey; + } + else if (ckey) { + rustls_certified_key_free(ckey); + } + return rv; +} + +apr_status_t tls_cert_load_cert_key( + apr_pool_t *p, const tls_cert_spec_t *spec, + const char **pcert_pem, const rustls_certified_key **pckey) +{ + apr_status_t rv = APR_SUCCESS; + + if (spec->cert_file) { + tls_cert_pem_t *pems; + + rv = tls_cert_load_pem(p, spec, &pems); + if (APR_SUCCESS != rv) goto cleanup; + if (pcert_pem) *pcert_pem = tls_data_to_str(p, &pems->cert_pem); + rv = make_certified_key(p, spec->cert_file, &pems->cert_pem, &pems->pkey_pem, pckey); + /* dont want them hanging around in memory unnecessarily. */ + nullify_key_pem(pems); + } + else if (spec->cert_pem) { + tls_data_t pkey_pem, pem; + pem = tls_data_from_str(spec->cert_pem); + if (spec->pkey_pem) { + pkey_pem = tls_data_from_str(spec->pkey_pem); + } + else { + pkey_pem = pem; + } + if (pcert_pem) *pcert_pem = spec->cert_pem; + rv = make_certified_key(p, "memory", &pem, &pkey_pem, pckey); + /* pems provided from outside are responsibility of the caller */ + } + else { + rv = APR_ENOENT; goto cleanup; + } +cleanup: + return rv; +} + +typedef struct { + const char *id; + const char *cert_pem; + server_rec *server; + const rustls_certified_key *certified_key; +} tls_cert_reg_entry_t; + +static int reg_entry_cleanup(void *ctx, const void *key, apr_ssize_t klen, const void *val) +{ + tls_cert_reg_entry_t *entry = (tls_cert_reg_entry_t*)val; + (void)ctx; (void)key; (void)klen; + if (entry->certified_key) { + rustls_certified_key_free(entry->certified_key); + entry->certified_key = NULL; + } + return 1; +} + +static apr_status_t reg_cleanup(void *data) +{ + tls_cert_reg_t *reg = data; + if (reg->id2entry) { + apr_hash_do(reg_entry_cleanup, reg, reg->id2entry); + apr_hash_clear(reg->id2entry); + if (reg->key2entry) apr_hash_clear(reg->key2entry); + } + return APR_SUCCESS; +} + +tls_cert_reg_t *tls_cert_reg_make(apr_pool_t *p) +{ + tls_cert_reg_t *reg; + + reg = apr_pcalloc(p, sizeof(*reg)); + reg->pool = p; + reg->id2entry = apr_hash_make(p); + reg->key2entry = apr_hash_make(p); + apr_pool_cleanup_register(p, reg, reg_cleanup, apr_pool_cleanup_null); + return reg; +} + +apr_size_t tls_cert_reg_count(tls_cert_reg_t *reg) +{ + return apr_hash_count(reg->id2entry); +} + +static const char *cert_spec_to_id(const tls_cert_spec_t *spec) +{ + if (spec->cert_file) return spec->cert_file; + if (spec->cert_pem) return spec->cert_pem; + return NULL; +} + +apr_status_t tls_cert_reg_get_certified_key( + tls_cert_reg_t *reg, server_rec *s, const tls_cert_spec_t *spec, + const rustls_certified_key **pckey) +{ + apr_status_t rv = APR_SUCCESS; + const char *id; + tls_cert_reg_entry_t *entry; + + id = cert_spec_to_id(spec); + assert(id); + entry = apr_hash_get(reg->id2entry, id, APR_HASH_KEY_STRING); + if (!entry) { + const rustls_certified_key *certified_key; + const char *cert_pem; + rv = tls_cert_load_cert_key(reg->pool, spec, &cert_pem, &certified_key); + if (APR_SUCCESS != rv) goto cleanup; + entry = apr_pcalloc(reg->pool, sizeof(*entry)); + entry->id = apr_pstrdup(reg->pool, id); + entry->cert_pem = cert_pem; + entry->server = s; + entry->certified_key = certified_key; + apr_hash_set(reg->id2entry, entry->id, APR_HASH_KEY_STRING, entry); + /* associates the pointer value */ + apr_hash_set(reg->key2entry, &entry->certified_key, sizeof(entry->certified_key), entry); + } + +cleanup: + if (APR_SUCCESS == rv) { + *pckey = entry->certified_key; + } + else { + *pckey = NULL; + } + return rv; +} + +typedef struct { + void *userdata; + tls_cert_reg_visitor *visitor; +} reg_visit_ctx_t; + +static int reg_visit(void *vctx, const void *key, apr_ssize_t klen, const void *val) +{ + reg_visit_ctx_t *ctx = vctx; + tls_cert_reg_entry_t *entry = (tls_cert_reg_entry_t*)val; + + (void)key; (void)klen; + return ctx->visitor(ctx->userdata, entry->server, entry->id, entry->cert_pem, entry->certified_key); +} + +void tls_cert_reg_do( + tls_cert_reg_visitor *visitor, void *userdata, tls_cert_reg_t *reg) +{ + reg_visit_ctx_t ctx; + ctx.visitor = visitor; + ctx.userdata = userdata; + apr_hash_do(reg_visit, &ctx, reg->id2entry); +} + +const char *tls_cert_reg_get_id(tls_cert_reg_t *reg, const rustls_certified_key *certified_key) +{ + tls_cert_reg_entry_t *entry; + + entry = apr_hash_get(reg->key2entry, &certified_key, sizeof(certified_key)); + return entry? entry->id : NULL; +} + +apr_status_t tls_cert_load_root_store( + apr_pool_t *p, const char *store_file, rustls_root_cert_store **pstore) +{ + const char *fpath; + tls_data_t pem; + rustls_root_cert_store *store = NULL; + rustls_result rr = RUSTLS_RESULT_OK; + apr_pool_t *ptemp = NULL; + apr_status_t rv; + + ap_assert(store_file); + + rv = apr_pool_create(&ptemp, p); + if (APR_SUCCESS != rv) goto cleanup; + apr_pool_tag(ptemp, "tls_load_root_cert_store"); + fpath = ap_server_root_relative(ptemp, store_file); + if (NULL == fpath) { + rv = APR_ENOENT; goto cleanup; + } + /* we use this for client auth CAs. 1MB seems large enough. */ + rv = tls_util_file_load(ptemp, fpath, 0, 1024*1024, &pem); + if (APR_SUCCESS != rv) goto cleanup; + + store = rustls_root_cert_store_new(); + rr = rustls_root_cert_store_add_pem(store, pem.data, pem.len, 1); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + +cleanup: + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr; + rv = tls_util_rustls_error(p, rr, &err_descr); + ap_log_perror(APLOG_MARK, APLOG_ERR, rv, p, APLOGNO(10364) + "Failed to load root store %s: [%d] %s", + store_file, (int)rr, err_descr); + } + if (APR_SUCCESS == rv) { + *pstore = store; + } + else { + *pstore = NULL; + if (store) rustls_root_cert_store_free(store); + } + if (ptemp) apr_pool_destroy(ptemp); + return rv; +} + +typedef struct { + const char *id; + rustls_root_cert_store *store; +} tls_cert_root_stores_entry_t; + +static int stores_entry_cleanup(void *ctx, const void *key, apr_ssize_t klen, const void *val) +{ + tls_cert_root_stores_entry_t *entry = (tls_cert_root_stores_entry_t*)val; + (void)ctx; (void)key; (void)klen; + if (entry->store) { + rustls_root_cert_store_free(entry->store); + entry->store = NULL; + } + return 1; +} + +static apr_status_t stores_cleanup(void *data) +{ + tls_cert_root_stores_t *stores = data; + tls_cert_root_stores_clear(stores); + return APR_SUCCESS; +} + +tls_cert_root_stores_t *tls_cert_root_stores_make(apr_pool_t *p) +{ + tls_cert_root_stores_t *stores; + + stores = apr_pcalloc(p, sizeof(*stores)); + stores->pool = p; + stores->file2store = apr_hash_make(p); + apr_pool_cleanup_register(p, stores, stores_cleanup, apr_pool_cleanup_null); + return stores; +} + +void tls_cert_root_stores_clear(tls_cert_root_stores_t *stores) +{ + if (stores->file2store) { + apr_hash_do(stores_entry_cleanup, stores, stores->file2store); + apr_hash_clear(stores->file2store); + } +} + +apr_status_t tls_cert_root_stores_get( + tls_cert_root_stores_t *stores, + const char *store_file, + rustls_root_cert_store **pstore) +{ + apr_status_t rv = APR_SUCCESS; + tls_cert_root_stores_entry_t *entry; + + entry = apr_hash_get(stores->file2store, store_file, APR_HASH_KEY_STRING); + if (!entry) { + rustls_root_cert_store *store; + rv = tls_cert_load_root_store(stores->pool, store_file, &store); + if (APR_SUCCESS != rv) goto cleanup; + entry = apr_pcalloc(stores->pool, sizeof(*entry)); + entry->id = apr_pstrdup(stores->pool, store_file); + entry->store = store; + apr_hash_set(stores->file2store, entry->id, APR_HASH_KEY_STRING, entry); + } + +cleanup: + if (APR_SUCCESS == rv) { + *pstore = entry->store; + } + else { + *pstore = NULL; + } + return rv; +} + +typedef struct { + const char *id; + const rustls_client_cert_verifier *client_verifier; + const rustls_client_cert_verifier_optional *client_verifier_opt; +} tls_cert_verifiers_entry_t; + +static int verifiers_entry_cleanup(void *ctx, const void *key, apr_ssize_t klen, const void *val) +{ + tls_cert_verifiers_entry_t *entry = (tls_cert_verifiers_entry_t*)val; + (void)ctx; (void)key; (void)klen; + if (entry->client_verifier) { + rustls_client_cert_verifier_free(entry->client_verifier); + entry->client_verifier = NULL; + } + if (entry->client_verifier_opt) { + rustls_client_cert_verifier_optional_free(entry->client_verifier_opt); + entry->client_verifier_opt = NULL; + } + return 1; +} + +static apr_status_t verifiers_cleanup(void *data) +{ + tls_cert_verifiers_t *verifiers = data; + tls_cert_verifiers_clear(verifiers); + return APR_SUCCESS; +} + +tls_cert_verifiers_t *tls_cert_verifiers_make( + apr_pool_t *p, tls_cert_root_stores_t *stores) +{ + tls_cert_verifiers_t *verifiers; + + verifiers = apr_pcalloc(p, sizeof(*verifiers)); + verifiers->pool = p; + verifiers->stores = stores; + verifiers->file2verifier = apr_hash_make(p); + apr_pool_cleanup_register(p, verifiers, verifiers_cleanup, apr_pool_cleanup_null); + return verifiers; +} + +void tls_cert_verifiers_clear(tls_cert_verifiers_t *verifiers) +{ + if (verifiers->file2verifier) { + apr_hash_do(verifiers_entry_cleanup, verifiers, verifiers->file2verifier); + apr_hash_clear(verifiers->file2verifier); + } +} + +static tls_cert_verifiers_entry_t * verifiers_get_or_make_entry( + tls_cert_verifiers_t *verifiers, + const char *store_file) +{ + tls_cert_verifiers_entry_t *entry; + + entry = apr_hash_get(verifiers->file2verifier, store_file, APR_HASH_KEY_STRING); + if (!entry) { + entry = apr_pcalloc(verifiers->pool, sizeof(*entry)); + entry->id = apr_pstrdup(verifiers->pool, store_file); + apr_hash_set(verifiers->file2verifier, entry->id, APR_HASH_KEY_STRING, entry); + } + return entry; +} + +apr_status_t tls_cert_client_verifiers_get( + tls_cert_verifiers_t *verifiers, + const char *store_file, + const rustls_client_cert_verifier **pverifier) +{ + apr_status_t rv = APR_SUCCESS; + tls_cert_verifiers_entry_t *entry; + + entry = verifiers_get_or_make_entry(verifiers, store_file); + if (!entry->client_verifier) { + rustls_root_cert_store *store; + rv = tls_cert_root_stores_get(verifiers->stores, store_file, &store); + if (APR_SUCCESS != rv) goto cleanup; + entry->client_verifier = rustls_client_cert_verifier_new(store); + } + +cleanup: + if (APR_SUCCESS == rv) { + *pverifier = entry->client_verifier; + } + else { + *pverifier = NULL; + } + return rv; +} + +apr_status_t tls_cert_client_verifiers_get_optional( + tls_cert_verifiers_t *verifiers, + const char *store_file, + const rustls_client_cert_verifier_optional **pverifier) +{ + apr_status_t rv = APR_SUCCESS; + tls_cert_verifiers_entry_t *entry; + + entry = verifiers_get_or_make_entry(verifiers, store_file); + if (!entry->client_verifier_opt) { + rustls_root_cert_store *store; + rv = tls_cert_root_stores_get(verifiers->stores, store_file, &store); + if (APR_SUCCESS != rv) goto cleanup; + entry->client_verifier_opt = rustls_client_cert_verifier_optional_new(store); + } + +cleanup: + if (APR_SUCCESS == rv) { + *pverifier = entry->client_verifier_opt; + } + else { + *pverifier = NULL; + } + return rv; +} diff -Nru apache2-2.4.51/modules/tls/tls_cert.h apache2-2.4.52/modules/tls/tls_cert.h --- apache2-2.4.51/modules/tls/tls_cert.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_cert.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,211 @@ +/* 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 tls_cert_h +#define tls_cert_h + +#include "tls_util.h" + +/** + * The PEM data of a certificate and its key. + */ +typedef struct { + tls_data_t cert_pem; + tls_data_t pkey_pem; +} tls_cert_pem_t; + +/** + * Specify a certificate via files or PEM data. + */ +typedef struct { + const char *cert_file; /* file path, relative to ap_root */ + const char *pkey_file; /* file path, relative to ap_root */ + const char *cert_pem; /* NUL-terminated PEM string */ + const char *pkey_pem; /* NUL-terminated PEM string */ +} tls_cert_spec_t; + +/** + * Load the PEM data for a certificate file and key file as given in `cert`. + */ +apr_status_t tls_cert_load_pem( + apr_pool_t *p, const tls_cert_spec_t *cert, tls_cert_pem_t **ppem); + +apr_status_t tls_cert_to_pem(const char **ppem, apr_pool_t *p, const rustls_certificate *cert); + +/** + * Load a rustls certified key from a certificate specification. + * The returned `rustls_certified_key` is owned by the caller. + * @param p the memory pool to use + * @param spec the specification for the certificate (file or PEM data) + * @param cert_pem return the PEM data used for loading the certificates, optional + * @param pckey the loaded certified key on return + */ +apr_status_t tls_cert_load_cert_key( + apr_pool_t *p, const tls_cert_spec_t *spec, + const char **pcert_pem, const rustls_certified_key **pckey); + +/** + * A registry of rustls_certified_key* by identifier. + */ +typedef struct tls_cert_reg_t tls_cert_reg_t; +struct tls_cert_reg_t{ + apr_pool_t *pool; + apr_hash_t *id2entry; + apr_hash_t *key2entry; +}; + +/** + * Create a new registry with lifetime based on the memory pool. + * The registry will take care of its memory and allocated keys when + * the pool is destroyed. + */ +tls_cert_reg_t *tls_cert_reg_make(apr_pool_t *p); + +/** + * Return the number of certified keys in the registry. + */ +apr_size_t tls_cert_reg_count(tls_cert_reg_t *reg); + +/** + * Get a the `rustls_certified_key` identified by `spec` from the registry. + * This will load the key the first time it is requested. + * The returned `rustls_certified_key` is owned by the registry. + * @param reg the certified key registry + * @param s the server_rec this is loaded into, useful for error logging + * @param spec the specification of the certified key + * @param pckey the certified key instance on return + */ +apr_status_t tls_cert_reg_get_certified_key( + tls_cert_reg_t *reg, server_rec *s, const tls_cert_spec_t *spec, const rustls_certified_key **pckey); + +/** + * Visit all certified keys in the registry. + * The callback may return 0 to abort the iteration. + * @param userdata supplied by the visit invocation + * @param s the server_rec the certified was load into first + * @param id internal identifier of the certified key + * @param cert_pem the PEM data of the certificate and its chain + * @param certified_key the key instance itself + */ +typedef int tls_cert_reg_visitor( + void *userdata, server_rec *s, + const char *id, const char *cert_pem, const rustls_certified_key *certified_key); + +/** + * Visit all certified_key entries in the registry. + * @param visitor callback invoked on each entry until it returns 0. + * @param userdata passed to callback + * @param reg the registry to iterate over + */ +void tls_cert_reg_do( + tls_cert_reg_visitor *visitor, void *userdata, tls_cert_reg_t *reg); + +/** + * Get the identity assigned to a loaded, certified key. Returns NULL, if the + * key is not part of the registry. The returned bytes are owned by the registry + * entry. + * @param reg the registry to look in. + * @param certified_key the key to get the identifier for + */ +const char *tls_cert_reg_get_id(tls_cert_reg_t *reg, const rustls_certified_key *certified_key); + +/** + * Load all root certificates from a PEM file into a rustls_root_cert_store. + * @param p the memory pool to use + * @param store_file the (server relative) path of the PEM file + * @param pstore the loaded root store on success + */ +apr_status_t tls_cert_load_root_store( + apr_pool_t *p, const char *store_file, rustls_root_cert_store **pstore); + +typedef struct tls_cert_root_stores_t tls_cert_root_stores_t; +struct tls_cert_root_stores_t { + apr_pool_t *pool; + apr_hash_t *file2store; +}; + +/** + * Create a new root stores registry with lifetime based on the memory pool. + * The registry will take care of its memory and allocated stores when + * the pool is destroyed. + */ +tls_cert_root_stores_t *tls_cert_root_stores_make(apr_pool_t *p); + +/** + * Clear the root stores registry, freeing all stores. + */ +void tls_cert_root_stores_clear(tls_cert_root_stores_t *stores); + +/** + * Load all root certificates from a PEM file into a rustls_root_cert_store. + * @param p the memory pool to use + * @param store_file the (server relative) path of the PEM file + * @param pstore the loaded root store on success + */ +apr_status_t tls_cert_root_stores_get( + tls_cert_root_stores_t *stores, + const char *store_file, + rustls_root_cert_store **pstore); + +typedef struct tls_cert_verifiers_t tls_cert_verifiers_t; +struct tls_cert_verifiers_t { + apr_pool_t *pool; + tls_cert_root_stores_t *stores; + apr_hash_t *file2verifier; +}; + +/** + * Create a new registry for certificate verifiers with lifetime based on the memory pool. + * The registry will take care of its memory and allocated verifiers when + * the pool is destroyed. + * @param p the memory pool to use + * @param stores the store registry for lookups + */ +tls_cert_verifiers_t *tls_cert_verifiers_make( + apr_pool_t *p, tls_cert_root_stores_t *stores); + +/** + * Clear the verifiers registry, freeing all verifiers. + */ +void tls_cert_verifiers_clear( + tls_cert_verifiers_t *verifiers); + +/** + * Get the mandatory client certificate verifier for the + * root certificate store in `store_file`. Will create + * the verifier if not already known. + * @param verifiers the registry of certificate verifiers + * @param store_file the (server relative) path of the PEM file with certificates + * @param pverifiers the verifier on success + */ +apr_status_t tls_cert_client_verifiers_get( + tls_cert_verifiers_t *verifiers, + const char *store_file, + const rustls_client_cert_verifier **pverifier); + +/** + * Get the optional client certificate verifier for the + * root certificate store in `store_file`. Will create + * the verifier if not already known. + * @param verifiers the registry of certificate verifiers + * @param store_file the (server relative) path of the PEM file with certificates + * @param pverifiers the verifier on success + */ +apr_status_t tls_cert_client_verifiers_get_optional( + tls_cert_verifiers_t *verifiers, + const char *store_file, + const rustls_client_cert_verifier_optional **pverifier); + +#endif /* tls_cert_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_conf.c apache2-2.4.52/modules/tls/tls_conf.c --- apache2-2.4.51/modules/tls/tls_conf.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_conf.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,780 @@ +/* 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 +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "tls_cert.h" +#include "tls_proto.h" +#include "tls_conf.h" +#include "tls_util.h" +#include "tls_var.h" +#include "tls_cache.h" + + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + +static tls_conf_global_t *conf_global_get_or_make(apr_pool_t *pool, server_rec *s) +{ + tls_conf_global_t *gconf; + + /* we create this only once for apache's one ap_server_conf. + * If this gets called for another server, we should already have + * done it for ap_server_conf. */ + if (ap_server_conf && s != ap_server_conf) { + tls_conf_server_t *sconf = tls_conf_server_get(ap_server_conf); + ap_assert(sconf); + ap_assert(sconf->global); + return sconf->global; + } + + gconf = apr_pcalloc(pool, sizeof(*gconf)); + gconf->ap_server = ap_server_conf; + gconf->status = TLS_CONF_ST_INIT; + gconf->proto = tls_proto_init(pool, s); + gconf->proxy_configs = apr_array_make(pool, 10, sizeof(tls_conf_proxy_t*)); + + gconf->var_lookups = apr_hash_make(pool); + tls_var_init_lookup_hash(pool, gconf->var_lookups); + gconf->session_cache_spec = "default"; + + return gconf; +} + +tls_conf_server_t *tls_conf_server_get(server_rec *s) +{ + tls_conf_server_t *sc = ap_get_module_config(s->module_config, &tls_module); + ap_assert(sc); + return sc; +} + + +#define CONF_S_NAME(s) (s && s->server_hostname? s->server_hostname : "default") + +void *tls_conf_create_svr(apr_pool_t *pool, server_rec *s) +{ + tls_conf_server_t *conf; + + conf = apr_pcalloc(pool, sizeof(*conf)); + conf->global = conf_global_get_or_make(pool, s); + conf->server = s; + + conf->enabled = TLS_FLAG_UNSET; + conf->cert_specs = apr_array_make(pool, 3, sizeof(tls_cert_spec_t*)); + conf->honor_client_order = TLS_FLAG_UNSET; + conf->strict_sni = TLS_FLAG_UNSET; + conf->tls_protocol_min = TLS_FLAG_UNSET; + conf->tls_pref_ciphers = apr_array_make(pool, 3, sizeof(apr_uint16_t));; + conf->tls_supp_ciphers = apr_array_make(pool, 3, sizeof(apr_uint16_t));; + return conf; +} + +#define MERGE_INT(base, add, field) \ + (add->field == TLS_FLAG_UNSET)? base->field : add->field; + +void *tls_conf_merge_svr(apr_pool_t *pool, void *basev, void *addv) +{ + tls_conf_server_t *base = basev; + tls_conf_server_t *add = addv; + tls_conf_server_t *nconf; + + nconf = apr_pcalloc(pool, sizeof(*nconf)); + nconf->server = add->server; + nconf->global = add->global? add->global : base->global; + + nconf->enabled = MERGE_INT(base, add, enabled); + nconf->cert_specs = apr_array_append(pool, base->cert_specs, add->cert_specs); + nconf->tls_protocol_min = MERGE_INT(base, add, tls_protocol_min); + nconf->tls_pref_ciphers = add->tls_pref_ciphers->nelts? + add->tls_pref_ciphers : base->tls_pref_ciphers; + nconf->tls_supp_ciphers = add->tls_supp_ciphers->nelts? + add->tls_supp_ciphers : base->tls_supp_ciphers; + nconf->honor_client_order = MERGE_INT(base, add, honor_client_order); + nconf->client_ca = add->client_ca? add->client_ca : base->client_ca; + nconf->client_auth = (add->client_auth != TLS_CLIENT_AUTH_UNSET)? + add->client_auth : base->client_auth; + nconf->var_user_name = add->var_user_name? add->var_user_name : base->var_user_name; + return nconf; +} + +tls_conf_dir_t *tls_conf_dir_get(request_rec *r) +{ + tls_conf_dir_t *dc = ap_get_module_config(r->per_dir_config, &tls_module); + ap_assert(dc); + return dc; +} + +tls_conf_dir_t *tls_conf_dir_server_get(server_rec *s) +{ + tls_conf_dir_t *dc = ap_get_module_config(s->lookup_defaults, &tls_module); + ap_assert(dc); + return dc; +} + +void *tls_conf_create_dir(apr_pool_t *pool, char *dir) +{ + tls_conf_dir_t *conf; + + (void)dir; + conf = apr_pcalloc(pool, sizeof(*conf)); + conf->std_env_vars = TLS_FLAG_UNSET; + conf->proxy_enabled = TLS_FLAG_UNSET; + conf->proxy_protocol_min = TLS_FLAG_UNSET; + conf->proxy_pref_ciphers = apr_array_make(pool, 3, sizeof(apr_uint16_t));; + conf->proxy_supp_ciphers = apr_array_make(pool, 3, sizeof(apr_uint16_t));; + conf->proxy_machine_cert_specs = apr_array_make(pool, 3, sizeof(tls_cert_spec_t*)); + return conf; +} + + +static int same_proxy_settings(tls_conf_dir_t *a, tls_conf_dir_t *b) +{ + return a->proxy_ca == b->proxy_ca; +} + +static void dir_assign_merge( + tls_conf_dir_t *dest, apr_pool_t *pool, tls_conf_dir_t *base, tls_conf_dir_t *add) +{ + tls_conf_dir_t local; + + memset(&local, 0, sizeof(local)); + local.std_env_vars = MERGE_INT(base, add, std_env_vars); + local.export_cert_vars = MERGE_INT(base, add, export_cert_vars); + local.proxy_enabled = MERGE_INT(base, add, proxy_enabled); + local.proxy_ca = add->proxy_ca? add->proxy_ca : base->proxy_ca; + local.proxy_protocol_min = MERGE_INT(base, add, proxy_protocol_min); + local.proxy_pref_ciphers = add->proxy_pref_ciphers->nelts? + add->proxy_pref_ciphers : base->proxy_pref_ciphers; + local.proxy_supp_ciphers = add->proxy_supp_ciphers->nelts? + add->proxy_supp_ciphers : base->proxy_supp_ciphers; + local.proxy_machine_cert_specs = apr_array_append(pool, + base->proxy_machine_cert_specs, add->proxy_machine_cert_specs); + if (local.proxy_enabled == TLS_FLAG_TRUE) { + if (add->proxy_config) { + local.proxy_config = same_proxy_settings(&local, add)? add->proxy_config : NULL; + } + else if (base->proxy_config) { + local.proxy_config = same_proxy_settings(&local, base)? add->proxy_config : NULL; + } + } + memcpy(dest, &local, sizeof(*dest)); +} + +void *tls_conf_merge_dir(apr_pool_t *pool, void *basev, void *addv) +{ + tls_conf_dir_t *base = basev; + tls_conf_dir_t *add = addv; + tls_conf_dir_t *nconf = apr_pcalloc(pool, sizeof(*nconf)); + dir_assign_merge(nconf, pool, base, add); + return nconf; +} + +static void tls_conf_dir_set_options_defaults(apr_pool_t *pool, tls_conf_dir_t *dc) +{ + (void)pool; + dc->std_env_vars = TLS_FLAG_FALSE; + dc->export_cert_vars = TLS_FLAG_FALSE; +} + +apr_status_t tls_conf_server_apply_defaults(tls_conf_server_t *sc, apr_pool_t *p) +{ + (void)p; + if (sc->enabled == TLS_FLAG_UNSET) sc->enabled = TLS_FLAG_FALSE; + if (sc->tls_protocol_min == TLS_FLAG_UNSET) sc->tls_protocol_min = 0; + if (sc->honor_client_order == TLS_FLAG_UNSET) sc->honor_client_order = TLS_FLAG_TRUE; + if (sc->strict_sni == TLS_FLAG_UNSET) sc->strict_sni = TLS_FLAG_TRUE; + if (sc->client_auth == TLS_CLIENT_AUTH_UNSET) sc->client_auth = TLS_CLIENT_AUTH_NONE; + return APR_SUCCESS; +} + +apr_status_t tls_conf_dir_apply_defaults(tls_conf_dir_t *dc, apr_pool_t *p) +{ + (void)p; + if (dc->std_env_vars == TLS_FLAG_UNSET) dc->std_env_vars = TLS_FLAG_FALSE; + if (dc->export_cert_vars == TLS_FLAG_UNSET) dc->export_cert_vars = TLS_FLAG_FALSE; + if (dc->proxy_enabled == TLS_FLAG_UNSET) dc->proxy_enabled = TLS_FLAG_FALSE; + return APR_SUCCESS; +} + +tls_conf_proxy_t *tls_conf_proxy_make( + apr_pool_t *p, tls_conf_dir_t *dc, tls_conf_global_t *gc, server_rec *s) +{ + tls_conf_proxy_t *pc = apr_pcalloc(p, sizeof(*pc)); + pc->defined_in = s; + pc->global = gc; + pc->proxy_ca = dc->proxy_ca; + pc->proxy_protocol_min = dc->proxy_protocol_min; + pc->proxy_pref_ciphers = dc->proxy_pref_ciphers; + pc->proxy_supp_ciphers = dc->proxy_supp_ciphers; + pc->machine_cert_specs = dc->proxy_machine_cert_specs; + pc->machine_certified_keys = apr_array_make(p, 3, sizeof(const rustls_certified_key*)); + return pc; +} + +int tls_proxy_section_post_config( + apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s, + ap_conf_vector_t *section_config) +{ + tls_conf_dir_t *proxy_dc, *server_dc; + tls_conf_server_t *sc; + + /* mod_proxy collects the ... sections per server (base server or virtualhost) + * and in its post_config hook, calls our function registered at its hook for each with + * s - the server they were define in + * section_config - the set of dir_configs for a section + * + * If none of _our_ config directives had been used, here or in the server, we get a NULL. + * Which means we have to do nothing. Otherwise, we add to `proxy_dc` the + * settings from `server_dc` - since this is not automagically done by apache. + * + * `proxy_dc` is then complete and tells us if we handle outgoing connections + * here and with what parameter settings. + */ + (void)ptemp; (void)plog; + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, + "%s: tls_proxy_section_post_config called", s->server_hostname); + proxy_dc = ap_get_module_config(section_config, &tls_module); + if (!proxy_dc) goto cleanup; + server_dc = ap_get_module_config(s->lookup_defaults, &tls_module); + ap_assert(server_dc); + dir_assign_merge(proxy_dc, p, server_dc, proxy_dc); + tls_conf_dir_apply_defaults(proxy_dc, p); + if (proxy_dc->proxy_enabled && !proxy_dc->proxy_config) { + /* remember `proxy_dc` for subsequent configuration of outoing TLS setups */ + sc = tls_conf_server_get(s); + proxy_dc->proxy_config = tls_conf_proxy_make(p, proxy_dc, sc->global, s); + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, + "%s: adding proxy_conf to globals in proxy_post_config_section", + s->server_hostname); + APR_ARRAY_PUSH(sc->global->proxy_configs, tls_conf_proxy_t*) = proxy_dc->proxy_config; + } +cleanup: + return OK; +} + +static const char *cmd_check_file(cmd_parms *cmd, const char *fpath) +{ + char *real_path; + + /* just a dump of the configuration, dont resolve/check */ + if (ap_state_query(AP_SQ_RUN_MODE) == AP_SQ_RM_CONFIG_DUMP) { + return NULL; + } + real_path = ap_server_root_relative(cmd->pool, fpath); + if (!real_path) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": Invalid file path ", fpath, NULL); + } + if (!tls_util_is_file(cmd->pool, real_path)) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": file '", real_path, + "' does not exist or is empty", NULL); + } + return NULL; +} + +static const char *tls_conf_add_engine(cmd_parms *cmd, void *dc, const char*v) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + tls_conf_global_t *gc = sc->global; + const char *err = NULL; + char *host, *scope_id; + apr_port_t port; + apr_sockaddr_t *sa; + server_addr_rec *sar; + apr_status_t rv; + + (void)dc; + /* Example of use: + * TLSEngine 443 + * TLSEngine hostname:443 + * TLSEngine 91.0.0.1:443 + * TLSEngine [::0]:443 + */ + rv = apr_parse_addr_port(&host, &scope_id, &port, v, cmd->pool); + if (APR_SUCCESS != rv) { + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": invalid address/port in '", v, "'", NULL); + goto cleanup; + } + + /* translate host/port to a sockaddr that we can match with incoming connections */ + rv = apr_sockaddr_info_get(&sa, host, APR_UNSPEC, port, 0, cmd->pool); + if (APR_SUCCESS != rv) { + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unable to get sockaddr for '", host, "'", NULL); + goto cleanup; + } + + if (scope_id) { +#if APR_VERSION_AT_LEAST(1,7,0) + rv = apr_sockaddr_zone_set(sa, scope_id); + if (APR_SUCCESS != rv) { + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": error setting ipv6 scope id: '", scope_id, "'", NULL); + goto cleanup; + } +#else + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": IPv6 scopes not supported by your APR: '", scope_id, "'", NULL); + goto cleanup; +#endif + } + + sar = apr_pcalloc(cmd->pool, sizeof(*sar)); + sar->host_addr = sa; + sar->virthost = host; + sar->host_port = port; + + sar->next = gc->tls_addresses; + gc->tls_addresses = sar; +cleanup: + return err; +} + +static int flag_value( + const char *arg) +{ + if (!strcasecmp(arg, "On")) { + return TLS_FLAG_TRUE; + } + else if (!strcasecmp(arg, "Off")) { + return TLS_FLAG_FALSE; + } + return TLS_FLAG_UNSET; +} + +static const char *flag_err( + cmd_parms *cmd, const char *v) +{ + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": value must be 'On' or 'Off': '", v, "'", NULL); +} + +static const char *tls_conf_add_certificate( + cmd_parms *cmd, void *dc, const char *cert_file, const char *pkey_file) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + const char *err = NULL, *fpath; + tls_cert_spec_t *cert; + + (void)dc; + if (NULL != (err = cmd_check_file(cmd, cert_file))) goto cleanup; + /* key file may be NULL, in which case cert_file must contain the key PEM */ + if (pkey_file && NULL != (err = cmd_check_file(cmd, pkey_file))) goto cleanup; + + cert = apr_pcalloc(cmd->pool, sizeof(*cert)); + fpath = ap_server_root_relative(cmd->pool, cert_file); + if (!tls_util_is_file(cmd->pool, fpath)) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unable to find certificate file: '", fpath, "'", NULL); + } + cert->cert_file = cert_file; + if (pkey_file) { + fpath = ap_server_root_relative(cmd->pool, pkey_file); + if (!tls_util_is_file(cmd->pool, fpath)) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unable to find certificate key file: '", fpath, "'", NULL); + } + } + cert->pkey_file = pkey_file; + *(const tls_cert_spec_t **)apr_array_push(sc->cert_specs) = cert; + +cleanup: + return err; +} + +static const char *parse_ciphers( + cmd_parms *cmd, + tls_conf_global_t *gc, + const char *nop_name, + int argc, char *const argv[], + apr_array_header_t *ciphers) +{ + apr_array_clear(ciphers); + if (argc > 1 || apr_strnatcasecmp(nop_name, argv[0])) { + apr_uint16_t cipher; + int i; + + for (i = 0; i < argc; ++i) { + char *name, *last = NULL; + const char *value = argv[i]; + + name = apr_strtok(apr_pstrdup(cmd->pool, value), ":", &last); + while (name) { + if (tls_proto_get_cipher_by_name(gc->proto, name, &cipher) != APR_SUCCESS) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": cipher not recognized '", name, "'", NULL); + } + APR_ARRAY_PUSH(ciphers, apr_uint16_t) = cipher; + name = apr_strtok(NULL, ":", &last); + } + } + } + return NULL; +} + +static const char *tls_conf_set_preferred_ciphers( + cmd_parms *cmd, void *dc, int argc, char *const argv[]) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + const char *err = NULL; + + (void)dc; + if (!argc) { + err = "specify the TLS ciphers to prefer or 'default' for the rustls default ordering."; + goto cleanup; + } + err = parse_ciphers(cmd, sc->global, "default", argc, argv, sc->tls_pref_ciphers); +cleanup: + return err; +} + +static const char *tls_conf_set_suppressed_ciphers( + cmd_parms *cmd, void *dc, int argc, char *const argv[]) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + const char *err = NULL; + + (void)dc; + if (!argc) { + err = "specify the TLS ciphers to never use or 'none'."; + goto cleanup; + } + err = parse_ciphers(cmd, sc->global, "none", argc, argv, sc->tls_supp_ciphers); +cleanup: + return err; +} + +static const char *tls_conf_set_honor_client_order( + cmd_parms *cmd, void *dc, const char *v) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + int flag = flag_value(v); + + (void)dc; + if (TLS_FLAG_UNSET == flag) return flag_err(cmd, v); + sc->honor_client_order = flag; + return NULL; +} + +static const char *tls_conf_set_strict_sni( + cmd_parms *cmd, void *dc, const char *v) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + int flag = flag_value(v); + + (void)dc; + if (TLS_FLAG_UNSET == flag) return flag_err(cmd, v); + sc->strict_sni = flag; + return NULL; +} + +static const char *get_min_protocol( + cmd_parms *cmd, const char *v, int *pmin) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + const char *err = NULL; + + if (!apr_strnatcasecmp("default", v)) { + *pmin = 0; + } + else if (*v && v[strlen(v)-1] == '+') { + char *name = apr_pstrdup(cmd->pool, v); + name[strlen(name)-1] = '\0'; + *pmin = tls_proto_get_version_by_name(sc->global->proto, name); + if (!*pmin) { + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unrecognized protocol version specifier (try TLSv1.2+ or TLSv1.3+): '", v, "'", NULL); + goto cleanup; + } + } + else { + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": value must be 'default', 'TLSv1.2+' or 'TLSv1.3+': '", v, "'", NULL); + goto cleanup; + } +cleanup: + return err; +} + +static const char *tls_conf_set_protocol( + cmd_parms *cmd, void *dc, const char *v) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + (void)dc; + return get_min_protocol(cmd, v, &sc->tls_protocol_min); +} + +static const char *tls_conf_set_options( + cmd_parms *cmd, void *dcv, int argc, char *const argv[]) +{ + tls_conf_dir_t *dc = dcv; + const char *err = NULL, *option; + int i, val; + + /* Are we only having deltas (+/-) or do we reset the options? */ + for (i = 0; i < argc; ++i) { + if (argv[i][0] != '+' && argv[i][0] != '-') { + tls_conf_dir_set_options_defaults(cmd->pool, dc); + break; + } + } + + for (i = 0; i < argc; ++i) { + option = argv[i]; + if (!apr_strnatcasecmp("Defaults", option)) { + dc->std_env_vars = TLS_FLAG_FALSE; + dc->export_cert_vars = TLS_FLAG_FALSE; + } + else { + val = TLS_FLAG_TRUE; + if (*option == '+' || *option == '-') { + val = (*option == '+')? TLS_FLAG_TRUE : TLS_FLAG_FALSE; + ++option; + } + + if (!apr_strnatcasecmp("StdEnvVars", option)) { + dc->std_env_vars = val; + } + else if (!apr_strnatcasecmp("ExportCertData", option)) { + dc->export_cert_vars = val; + } + else { + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unknown option '", option, "'", NULL); + goto cleanup; + } + } + } +cleanup: + return err; +} + +static const char *tls_conf_set_session_cache( + cmd_parms *cmd, void *dc, const char *value) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + const char *err = NULL; + + (void)dc; + if ((err = ap_check_cmd_context(cmd, GLOBAL_ONLY))) goto cleanup; + + err = tls_cache_set_specification(value, sc->global, cmd->pool, cmd->temp_pool); +cleanup: + return err; +} + +static const char *tls_conf_set_proxy_engine(cmd_parms *cmd, void *dir_conf, int flag) +{ + tls_conf_dir_t *dc = dir_conf; + (void)cmd; + dc->proxy_enabled = flag ? TLS_FLAG_TRUE : TLS_FLAG_FALSE; + return NULL; +} + +static const char *tls_conf_set_proxy_ca( + cmd_parms *cmd, void *dir_conf, const char *proxy_ca) +{ + tls_conf_dir_t *dc = dir_conf; + const char *err = NULL; + + if (strcasecmp(proxy_ca, "default") && NULL != (err = cmd_check_file(cmd, proxy_ca))) goto cleanup; + dc->proxy_ca = proxy_ca; +cleanup: + return err; +} + +static const char *tls_conf_set_proxy_protocol( + cmd_parms *cmd, void *dir_conf, const char *v) +{ + tls_conf_dir_t *dc = dir_conf; + return get_min_protocol(cmd, v, &dc->proxy_protocol_min); +} + +static const char *tls_conf_set_proxy_preferred_ciphers( + cmd_parms *cmd, void *dir_conf, int argc, char *const argv[]) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + tls_conf_dir_t *dc = dir_conf; + const char *err = NULL; + + if (!argc) { + err = "specify the proxy TLS ciphers to prefer or 'default' for the rustls default ordering."; + goto cleanup; + } + err = parse_ciphers(cmd, sc->global, "default", argc, argv, dc->proxy_pref_ciphers); +cleanup: + return err; +} + +static const char *tls_conf_set_proxy_suppressed_ciphers( + cmd_parms *cmd, void *dir_conf, int argc, char *const argv[]) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + tls_conf_dir_t *dc = dir_conf; + const char *err = NULL; + + if (!argc) { + err = "specify the proxy TLS ciphers to never use or 'none'."; + goto cleanup; + } + err = parse_ciphers(cmd, sc->global, "none", argc, argv, dc->proxy_supp_ciphers); +cleanup: + return err; +} + +#if TLS_CLIENT_CERTS + +static const char *tls_conf_set_client_ca( + cmd_parms *cmd, void *dc, const char *client_ca) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + const char *err; + + (void)dc; + if (NULL != (err = cmd_check_file(cmd, client_ca))) goto cleanup; + sc->client_ca = client_ca; +cleanup: + return err; +} + +static const char *tls_conf_set_client_auth( + cmd_parms *cmd, void *dc, const char *mode) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + const char *err = NULL; + (void)dc; + if (!strcasecmp(mode, "required")) { + sc->client_auth = TLS_CLIENT_AUTH_REQUIRED; + } + else if (!strcasecmp(mode, "optional")) { + sc->client_auth = TLS_CLIENT_AUTH_OPTIONAL; + } + else if (!strcasecmp(mode, "none")) { + sc->client_auth = TLS_CLIENT_AUTH_NONE; + } + else { + err = apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unknown value: '", mode, "', use required/optional/none.", NULL); + } + return err; +} + +static const char *tls_conf_set_user_name( + cmd_parms *cmd, void *dc, const char *var_user_name) +{ + tls_conf_server_t *sc = tls_conf_server_get(cmd->server); + (void)dc; + sc->var_user_name = var_user_name; + return NULL; +} + +#endif /* if TLS_CLIENT_CERTS */ + +#if TLS_MACHINE_CERTS + +static const char *tls_conf_add_proxy_machine_certificate( + cmd_parms *cmd, void *dir_conf, const char *cert_file, const char *pkey_file) +{ + tls_conf_dir_t *dc = dir_conf; + const char *err = NULL, *fpath; + tls_cert_spec_t *cert; + + (void)dc; + if (NULL != (err = cmd_check_file(cmd, cert_file))) goto cleanup; + /* key file may be NULL, in which case cert_file must contain the key PEM */ + if (pkey_file && NULL != (err = cmd_check_file(cmd, pkey_file))) goto cleanup; + + cert = apr_pcalloc(cmd->pool, sizeof(*cert)); + fpath = ap_server_root_relative(cmd->pool, cert_file); + if (!tls_util_is_file(cmd->pool, fpath)) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unable to find certificate file: '", fpath, "'", NULL); + } + cert->cert_file = cert_file; + if (pkey_file) { + fpath = ap_server_root_relative(cmd->pool, pkey_file); + if (!tls_util_is_file(cmd->pool, fpath)) { + return apr_pstrcat(cmd->pool, cmd->cmd->name, + ": unable to find certificate key file: '", fpath, "'", NULL); + } + } + cert->pkey_file = pkey_file; + *(const tls_cert_spec_t **)apr_array_push(dc->proxy_machine_cert_specs) = cert; + +cleanup: + return err; +} + +#endif /* if TLS_MACHINE_CERTS */ + +const command_rec tls_conf_cmds[] = { + AP_INIT_TAKE12("TLSCertificate", tls_conf_add_certificate, NULL, RSRC_CONF, + "Add a certificate to the server by specifying a file containing the " + "certificate PEM, followed by its chain PEMs. The PEM of the key must " + "either also be there or can be given as a separate file."), + AP_INIT_TAKE_ARGV("TLSCiphersPrefer", tls_conf_set_preferred_ciphers, NULL, RSRC_CONF, + "Set the TLS ciphers to prefer when negotiating with a client."), + AP_INIT_TAKE_ARGV("TLSCiphersSuppress", tls_conf_set_suppressed_ciphers, NULL, RSRC_CONF, + "Set the TLS ciphers to never use when negotiating with a client."), + AP_INIT_TAKE1("TLSHonorClientOrder", tls_conf_set_honor_client_order, NULL, RSRC_CONF, + "Set 'on' to have the server honor client preferences in cipher suites, default off."), + AP_INIT_TAKE1("TLSEngine", tls_conf_add_engine, NULL, RSRC_CONF, + "Specify an adress+port where the module shall handle incoming TLS connections."), + AP_INIT_TAKE_ARGV("TLSOptions", tls_conf_set_options, NULL, OR_OPTIONS, + "En-/disables optional features in the module."), + AP_INIT_TAKE1("TLSProtocol", tls_conf_set_protocol, NULL, RSRC_CONF, + "Set the minimum TLS protocol version to use."), + AP_INIT_TAKE1("TLSStrictSNI", tls_conf_set_strict_sni, NULL, RSRC_CONF, + "Set strictness of client server name (SNI) check against hosts, default on."), + AP_INIT_TAKE1("TLSSessionCache", tls_conf_set_session_cache, NULL, RSRC_CONF, + "Set which cache to use for TLS sessions."), + AP_INIT_FLAG("TLSProxyEngine", tls_conf_set_proxy_engine, NULL, RSRC_CONF|PROXY_CONF, + "Enable TLS encryption of outgoing connections in this location/server."), + AP_INIT_TAKE1("TLSProxyCA", tls_conf_set_proxy_ca, NULL, RSRC_CONF|PROXY_CONF, + "Set the trust anchors for certificates from proxied backend servers from a PEM file."), + AP_INIT_TAKE1("TLSProxyProtocol", tls_conf_set_proxy_protocol, NULL, RSRC_CONF|PROXY_CONF, + "Set the minimum TLS protocol version to use for proxy connections."), + AP_INIT_TAKE_ARGV("TLSProxyCiphersPrefer", tls_conf_set_proxy_preferred_ciphers, NULL, RSRC_CONF|PROXY_CONF, + "Set the TLS ciphers to prefer when negotiating a proxy connection."), + AP_INIT_TAKE_ARGV("TLSProxyCiphersSuppress", tls_conf_set_proxy_suppressed_ciphers, NULL, RSRC_CONF|PROXY_CONF, + "Set the TLS ciphers to never use when negotiating a proxy connection."), +#if TLS_CLIENT_CERTS + AP_INIT_TAKE1("TLSClientCA", tls_conf_set_client_ca, NULL, RSRC_CONF, + "Set the trust anchors for client certificates from a PEM file."), + AP_INIT_TAKE1("TLSClientCertificate", tls_conf_set_client_auth, NULL, RSRC_CONF, + "If TLS client authentication is 'required', 'optional' or 'none'."), + AP_INIT_TAKE1("TLSUserName", tls_conf_set_user_name, NULL, RSRC_CONF, + "Set the SSL variable to be used as user name."), +#endif /* if TLS_CLIENT_CERTS */ +#if TLS_MACHINE_CERTS + AP_INIT_TAKE12("TLSProxyMachineCertificate", tls_conf_add_proxy_machine_certificate, NULL, RSRC_CONF|PROXY_CONF, + "Add a certificate to be used as client certificate on a proxy connection. "), +#endif /* if TLS_MACHINE_CERTS */ + AP_INIT_TAKE1(NULL, NULL, NULL, RSRC_CONF, NULL) +}; diff -Nru apache2-2.4.51/modules/tls/tls_conf.h apache2-2.4.52/modules/tls/tls_conf.h --- apache2-2.4.51/modules/tls/tls_conf.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_conf.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,185 @@ +/* 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 tls_conf_h +#define tls_conf_h + +/* Configuration flags */ +#define TLS_FLAG_UNSET (-1) +#define TLS_FLAG_FALSE (0) +#define TLS_FLAG_TRUE (1) + +struct tls_proto_conf_t; +struct tls_cert_reg_t; +struct tls_cert_root_stores_t; +struct tls_cert_verifiers_t; +struct ap_socache_instance_t; +struct ap_socache_provider_t; +struct apr_global_mutex_t; + + +/* disabled, since rustls support is lacking + * - x.509 retrieval of certificate fields and extensions + * - certificate revocation lists (CRL) + * - x.509 access to issuer of trust chain in x.509 CA store: + * server CA has ca1, ca2, ca3 + * client present certA + * rustls verifies that it is signed by *one of* ca* certs + * OCSP check needs (certA, issuing cert) for query + */ +#define TLS_CLIENT_CERTS 0 + +/* support for this exists as PR + */ +#define TLS_MACHINE_CERTS 1 + + +typedef enum { + TLS_CLIENT_AUTH_UNSET, + TLS_CLIENT_AUTH_NONE, + TLS_CLIENT_AUTH_REQUIRED, + TLS_CLIENT_AUTH_OPTIONAL, +} tls_client_auth_t; + +typedef enum { + TLS_CONF_ST_INIT, + TLS_CONF_ST_INCOMING_DONE, + TLS_CONF_ST_OUTGOING_DONE, + TLS_CONF_ST_DONE, +} tls_conf_status_t; + +/* The global module configuration, created after post-config + * and then readonly. + */ +typedef struct { + server_rec *ap_server; /* the gobal server we initialized on */ + const char *module_version; + const char *crustls_version; + + tls_conf_status_t status; + int mod_proxy_post_config_done; /* if mod_proxy did its post-config things */ + + server_addr_rec *tls_addresses; /* the addresses/ports our engine is enabled on */ + apr_array_header_t *proxy_configs; /* tls_conf_proxy_t* collected from everywhere */ + + struct tls_proto_conf_t *proto; /* TLS protocol/rustls specific globals */ + apr_hash_t *var_lookups; /* variable lookup functions by var name */ + struct tls_cert_reg_t *cert_reg; /* all certified keys loaded */ + struct tls_cert_root_stores_t *stores; /* loaded certificate stores */ + struct tls_cert_verifiers_t *verifiers; /* registry of certificate verifiers */ + + const char *session_cache_spec; /* how the session cache was specified */ + const struct ap_socache_provider_t *session_cache_provider; /* provider used for session cache */ + struct ap_socache_instance_t *session_cache; /* session cache instance */ + struct apr_global_mutex_t *session_cache_mutex; /* global mutex for access to session cache */ + + const rustls_server_config *rustls_hello_config; /* used for initial client hello parsing */ +} tls_conf_global_t; + +/* The module configuration for a server (vhost). + * Populated during config parsing, merged and completed + * in the post config phase. Readonly after that. + */ +typedef struct { + server_rec *server; /* server this config belongs to */ + tls_conf_global_t *global; /* global module config, singleton */ + + int enabled; /* TLS_FLAG_TRUE if mod_tls is active on this server */ + apr_array_header_t *cert_specs; /* array of (tls_cert_spec_t*) of configured certificates */ + int tls_protocol_min; /* the minimum TLS protocol version to use */ + apr_array_header_t *tls_pref_ciphers; /* List of apr_uint16_t cipher ids to prefer */ + apr_array_header_t *tls_supp_ciphers; /* List of apr_uint16_t cipher ids to suppress */ + const apr_array_header_t *ciphersuites; /* Computed post-config, ordered list of rustls cipher suites */ + int honor_client_order; /* honor client cipher ordering */ + int strict_sni; + + const char *client_ca; /* PEM file with trust anchors for client certs */ + tls_client_auth_t client_auth; /* how client authentication with certificates is used */ + const char *var_user_name; /* which SSL variable to use as user name */ + + apr_array_header_t *certified_keys; /* rustls_certified_key list configured */ + int base_server; /* != 0 iff this is the base server */ + int service_unavailable; /* TLS not trustworthy configured, return 503s */ +} tls_conf_server_t; + +typedef struct { + server_rec *defined_in; /* the server/host defining this dir_conf */ + tls_conf_global_t *global; /* global module config, singleton */ + const char *proxy_ca; /* PEM file with trust anchors for proxied remote server certs */ + int proxy_protocol_min; /* the minimum TLS protocol version to use for proxy connections */ + apr_array_header_t *proxy_pref_ciphers; /* List of apr_uint16_t cipher ids to prefer */ + apr_array_header_t *proxy_supp_ciphers; /* List of apr_uint16_t cipher ids to suppress */ + apr_array_header_t *machine_cert_specs; /* configured machine certificates specs */ + apr_array_header_t *machine_certified_keys; /* rustls_certified_key list */ + const rustls_client_config *rustls_config; +} tls_conf_proxy_t; + +typedef struct { + int std_env_vars; + int export_cert_vars; + int proxy_enabled; /* TLS_FLAG_TRUE if mod_tls is active on outgoing connections */ + const char *proxy_ca; /* PEM file with trust anchors for proxied remote server certs */ + int proxy_protocol_min; /* the minimum TLS protocol version to use for proxy connections */ + apr_array_header_t *proxy_pref_ciphers; /* List of apr_uint16_t cipher ids to prefer */ + apr_array_header_t *proxy_supp_ciphers; /* List of apr_uint16_t cipher ids to suppress */ + apr_array_header_t *proxy_machine_cert_specs; /* configured machine certificates specs */ + + tls_conf_proxy_t *proxy_config; +} tls_conf_dir_t; + +/* our static registry of configuration directives. */ +extern const command_rec tls_conf_cmds[]; + +/* create the modules configuration for a server_rec. */ +void *tls_conf_create_svr(apr_pool_t *pool, server_rec *s); + +/* merge (inherit) server configurations for the module. + * Settings in 'add' overwrite the ones in 'base' and unspecified + * settings shine through. */ +void *tls_conf_merge_svr(apr_pool_t *pool, void *basev, void *addv); + +/* create the modules configuration for a directory. */ +void *tls_conf_create_dir(apr_pool_t *pool, char *dir); + +/* merge (inherit) directory configurations for the module. + * Settings in 'add' overwrite the ones in 'base' and unspecified + * settings shine through. */ +void *tls_conf_merge_dir(apr_pool_t *pool, void *basev, void *addv); + + +/* Get the server specific module configuration. */ +tls_conf_server_t *tls_conf_server_get(server_rec *s); + +/* Get the directory specific module configuration for the request. */ +tls_conf_dir_t *tls_conf_dir_get(request_rec *r); + +/* Get the directory specific module configuration for the server. */ +tls_conf_dir_t *tls_conf_dir_server_get(server_rec *s); + +/* If any configuration values are unset, supply the global server defaults. */ +apr_status_t tls_conf_server_apply_defaults(tls_conf_server_t *sc, apr_pool_t *p); + +/* If any configuration values are unset, supply the global dir defaults. */ +apr_status_t tls_conf_dir_apply_defaults(tls_conf_dir_t *dc, apr_pool_t *p); + +/* create a new proxy configuration from directory config in server */ +tls_conf_proxy_t *tls_conf_proxy_make( + apr_pool_t *p, tls_conf_dir_t *dc, tls_conf_global_t *gc, server_rec *s); + +int tls_proxy_section_post_config( + apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s, + ap_conf_vector_t *section_config); + +#endif /* tls_conf_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_core.c apache2-2.4.52/modules/tls/tls_core.c --- apache2-2.4.51/modules/tls/tls_core.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_core.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,1433 @@ +/* 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 +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "tls_proto.h" +#include "tls_cert.h" +#include "tls_conf.h" +#include "tls_core.h" +#include "tls_ocsp.h" +#include "tls_util.h" +#include "tls_cache.h" +#include "tls_var.h" + + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + +tls_conf_conn_t *tls_conf_conn_get(conn_rec *c) +{ + return ap_get_module_config(c->conn_config, &tls_module); +} + +void tls_conf_conn_set(conn_rec *c, tls_conf_conn_t *cc) +{ + ap_set_module_config(c->conn_config, &tls_module, cc); +} + +int tls_conn_check_ssl(conn_rec *c) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c->master? c->master : c); + if (TLS_CONN_ST_IS_ENABLED(cc)) { + return OK; + } + return DECLINED; +} + +static int we_listen_on(tls_conf_global_t *gc, server_rec *s, tls_conf_server_t *sc) +{ + server_addr_rec *sa, *la; + + if (gc->tls_addresses && sc->base_server) { + /* The base server listens to every port and may be selected via SNI */ + return 1; + } + for (la = gc->tls_addresses; la; la = la->next) { + for (sa = s->addrs; sa; sa = sa->next) { + if (la->host_port == sa->host_port + && la->host_addr->ipaddr_len == sa->host_addr->ipaddr_len + && !memcmp(la->host_addr->ipaddr_ptr, + la->host_addr->ipaddr_ptr, (size_t)la->host_addr->ipaddr_len)) { + /* exact match */ + return 1; + } + } + } + return 0; +} + +static apr_status_t tls_core_free(void *data) +{ + server_rec *base_server = (server_rec *)data; + tls_conf_server_t *sc = tls_conf_server_get(base_server); + + if (sc && sc->global && sc->global->rustls_hello_config) { + rustls_server_config_free(sc->global->rustls_hello_config); + sc->global->rustls_hello_config = NULL; + } + tls_cache_free(base_server); + return APR_SUCCESS; +} + +static apr_status_t load_certified_keys( + apr_array_header_t *keys, server_rec *s, + apr_array_header_t *cert_specs, + tls_cert_reg_t *cert_reg) +{ + apr_status_t rv = APR_SUCCESS; + const rustls_certified_key *ckey; + tls_cert_spec_t *spec; + int i; + + if (cert_specs && cert_specs->nelts > 0) { + for (i = 0; i < cert_specs->nelts; ++i) { + spec = APR_ARRAY_IDX(cert_specs, i, tls_cert_spec_t*); + rv = tls_cert_reg_get_certified_key(cert_reg, s, spec, &ckey); + if (APR_SUCCESS != rv) { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10318) + "Failed to load certificate %d[cert=%s(%d), key=%s(%d)] for %s", + i, spec->cert_file, (int)(spec->cert_pem? strlen(spec->cert_pem) : 0), + spec->pkey_file, (int)(spec->pkey_pem? strlen(spec->pkey_pem) : 0), + s->server_hostname); + goto cleanup; + } + assert(ckey); + APR_ARRAY_PUSH(keys, const rustls_certified_key*) = ckey; + } + } +cleanup: + return rv; +} + +static apr_status_t use_local_key( + conn_rec *c, const char *cert_pem, const char *pkey_pem) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + const rustls_certified_key *ckey = NULL; + tls_cert_spec_t spec; + apr_status_t rv = APR_SUCCESS; + + memset(&spec, 0, sizeof(spec)); + spec.cert_pem = cert_pem; + spec.pkey_pem = pkey_pem; + rv = tls_cert_load_cert_key(c->pool, &spec, NULL, &ckey); + if (APR_SUCCESS != rv) goto cleanup; + + cc->local_keys = apr_array_make(c->pool, 2, sizeof(const rustls_certified_key*)); + APR_ARRAY_PUSH(cc->local_keys, const rustls_certified_key*) = ckey; + ckey = NULL; + +cleanup: + if (ckey != NULL) rustls_certified_key_free(ckey); + return rv; +} + +static void add_file_specs( + apr_array_header_t *certificates, + apr_pool_t *p, + apr_array_header_t *cert_files, + apr_array_header_t *key_files) +{ + tls_cert_spec_t *spec; + int i; + + for (i = 0; i < cert_files->nelts; ++i) { + spec = apr_pcalloc(p, sizeof(*spec)); + spec->cert_file = APR_ARRAY_IDX(cert_files, i, const char*); + spec->pkey_file = (i < key_files->nelts)? APR_ARRAY_IDX(key_files, i, const char*) : NULL; + *(const tls_cert_spec_t**)apr_array_push(certificates) = spec; + } +} + +static apr_status_t calc_ciphers( + apr_pool_t *pool, + server_rec *s, + tls_conf_global_t *gc, + const char *proxy, + apr_array_header_t *pref_ciphers, + apr_array_header_t *supp_ciphers, + const apr_array_header_t **pciphers) +{ + apr_array_header_t *ordered_ciphers; + const apr_array_header_t *ciphers; + apr_array_header_t *unsupported = NULL; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + apr_uint16_t id; + int i; + + + /* remove all suppressed ciphers from the ones supported by rustls */ + ciphers = tls_util_array_uint16_remove(pool, gc->proto->supported_cipher_ids, supp_ciphers); + ordered_ciphers = NULL; + /* if preferred ciphers are actually still present in allowed_ciphers, put + * them into `ciphers` in this order */ + for (i = 0; i < pref_ciphers->nelts; ++i) { + id = APR_ARRAY_IDX(pref_ciphers, i, apr_uint16_t); + ap_log_error(APLOG_MARK, APLOG_TRACE4, rv, s, + "checking preferred cipher %s: %d", + s->server_hostname, id); + if (tls_util_array_uint16_contains(ciphers, id)) { + ap_log_error(APLOG_MARK, APLOG_TRACE4, rv, s, + "checking preferred cipher %s: %d is known", + s->server_hostname, id); + if (ordered_ciphers == NULL) { + ordered_ciphers = apr_array_make(pool, ciphers->nelts, sizeof(apr_uint16_t)); + } + APR_ARRAY_PUSH(ordered_ciphers, apr_uint16_t) = id; + } + else if (!tls_proto_is_cipher_supported(gc->proto, id)) { + ap_log_error(APLOG_MARK, APLOG_TRACE4, rv, s, + "checking preferred cipher %s: %d is unsupported", + s->server_hostname, id); + if (!unsupported) unsupported = apr_array_make(pool, 5, sizeof(apr_uint16_t)); + APR_ARRAY_PUSH(unsupported, apr_uint16_t) = id; + } + } + /* if we found ciphers with preference among allowed_ciphers, + * append all other allowed ciphers. */ + if (ordered_ciphers) { + for (i = 0; i < ciphers->nelts; ++i) { + id = APR_ARRAY_IDX(ciphers, i, apr_uint16_t); + if (!tls_util_array_uint16_contains(ordered_ciphers, id)) { + APR_ARRAY_PUSH(ordered_ciphers, apr_uint16_t) = id; + } + } + ciphers = ordered_ciphers; + } + + if (ciphers == gc->proto->supported_cipher_ids) { + ciphers = NULL; + } + + if (unsupported && unsupported->nelts) { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(10319) + "Server '%s' has TLS%sCiphersPrefer configured that are not " + "supported by rustls. These will not have an effect: %s", + s->server_hostname, proxy, + tls_proto_get_cipher_names(gc->proto, unsupported, pool)); + } + + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr; + rv = tls_util_rustls_error(pool, rr, &err_descr); + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10320) + "Failed to configure ciphers %s: [%d] %s", + s->server_hostname, (int)rr, err_descr); + } + *pciphers = (APR_SUCCESS == rv)? ciphers : NULL; + return rv; +} + +static apr_status_t get_server_ciphersuites( + const apr_array_header_t **pciphersuites, + apr_pool_t *pool, tls_conf_server_t *sc) +{ + const apr_array_header_t *ciphers, *suites = NULL; + apr_status_t rv = APR_SUCCESS; + + rv = calc_ciphers(pool, sc->server, sc->global, + "", sc->tls_pref_ciphers, sc->tls_supp_ciphers, + &ciphers); + if (APR_SUCCESS != rv) goto cleanup; + + if (ciphers) { + suites = tls_proto_get_rustls_suites( + sc->global->proto, ciphers, pool); + if (APLOGtrace2(sc->server)) { + tls_proto_conf_t *conf = sc->global->proto; + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, sc->server, + "tls ciphers configured[%s]: %s", + sc->server->server_hostname, + tls_proto_get_cipher_names(conf, ciphers, pool)); + } + } + +cleanup: + *pciphersuites = (APR_SUCCESS == rv)? suites : NULL; + return rv; +} + +static apr_array_header_t *complete_cert_specs( + apr_pool_t *p, tls_conf_server_t *sc) +{ + apr_array_header_t *cert_adds, *key_adds, *specs; + + /* Take the configured certificate specifications and ask + * around for other modules to add specifications to this server. + * This is the way mod_md provides certificates. + * + * If the server then still has no cert specifications, ask + * around for `fallback` certificates which are commonly self-signed, + * temporary ones which let the server startup in order to + * obtain the `real` certificates from sources like ACME. + * Servers will fallbacks will answer all requests with 503. + */ + specs = apr_array_copy(p, sc->cert_specs); + cert_adds = apr_array_make(p, 2, sizeof(const char*)); + key_adds = apr_array_make(p, 2, sizeof(const char*)); + + ap_ssl_add_cert_files(sc->server, p, cert_adds, key_adds); + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, sc->server, + "init server: complete_cert_specs added %d certs", cert_adds->nelts); + add_file_specs(specs, p, cert_adds, key_adds); + + if (apr_is_empty_array(specs)) { + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, sc->server, + "init server: no certs configured, looking for fallback"); + ap_ssl_add_fallback_cert_files(sc->server, p, cert_adds, key_adds); + if (cert_adds->nelts > 0) { + add_file_specs(specs, p, cert_adds, key_adds); + sc->service_unavailable = 1; + ap_log_error(APLOG_MARK, APLOG_INFO, 0, sc->server, APLOGNO(10321) + "Init: %s will respond with '503 Service Unavailable' for now. There " + "are no SSL certificates configured and no other module contributed any.", + sc->server->server_hostname); + } + else if (!sc->base_server) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, sc->server, APLOGNO(10322) + "Init: %s has no certificates configured. Use 'TLSCertificate' to " + "configure a certificate and key file.", + sc->server->server_hostname); + } + } + return specs; +} + +static const rustls_certified_key *select_certified_key( + void* userdata, const rustls_client_hello *hello) +{ + conn_rec *c = userdata; + tls_conf_conn_t *cc; + tls_conf_server_t *sc; + apr_array_header_t *keys; + const rustls_certified_key *clone; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv; + + ap_assert(c); + cc = tls_conf_conn_get(c); + ap_assert(cc); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, "client hello select certified key"); + if (!cc || !cc->server) goto cleanup; + sc = tls_conf_server_get(cc->server); + if (!sc) goto cleanup; + + cc->key = NULL; + cc->key_cloned = 0; + if (cc->local_keys && cc->local_keys->nelts > 0) { + keys = cc->local_keys; + } + else { + keys = sc->certified_keys; + } + if (!keys || keys->nelts <= 0) goto cleanup; + + rr = rustls_client_hello_select_certified_key(hello, + (const rustls_certified_key**)keys->elts, (size_t)keys->nelts, &cc->key); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + + if (APR_SUCCESS == tls_ocsp_update_key(c, cc->key, &clone)) { + /* got OCSP response data for it, meaning the key was cloned and we need to remember */ + cc->key_cloned = 1; + cc->key = clone; + } + if (APLOGctrace2(c)) { + const char *key_id = tls_cert_reg_get_id(sc->global->cert_reg, cc->key); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, APLOGNO(10323) + "client hello selected key: %s", key_id? key_id : "unknown"); + } + return cc->key; + +cleanup: + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr; + rv = tls_util_rustls_error(c->pool, rr, &err_descr); + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, c, APLOGNO(10324) + "Failed to select certified key: [%d] %s", (int)rr, err_descr); + } + return NULL; +} + +static apr_status_t server_conf_setup( + apr_pool_t *p, apr_pool_t *ptemp, tls_conf_server_t *sc, tls_conf_global_t *gc) +{ + apr_array_header_t *cert_specs; + apr_status_t rv = APR_SUCCESS; + + /* TODO: most code has been stripped here with the changes in rustls-ffi v0.8.0 + * and this means that any errors are only happening at connection setup, which + * is too late. + */ + (void)p; + ap_log_error(APLOG_MARK, APLOG_TRACE1, rv, sc->server, + "init server: %s", sc->server->server_hostname); + + if (sc->client_auth != TLS_CLIENT_AUTH_NONE && !sc->client_ca) { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, sc->server, APLOGNO(10325) + "TLSClientAuthentication is enabled for %s, but no client CA file is set. " + "Use 'TLSClientCA ' to specify the trust anchors.", + sc->server->server_hostname); + rv = APR_EINVAL; goto cleanup; + } + + cert_specs = complete_cert_specs(ptemp, sc); + sc->certified_keys = apr_array_make(p, 3, sizeof(rustls_certified_key *)); + rv = load_certified_keys(sc->certified_keys, sc->server, cert_specs, gc->cert_reg); + if (APR_SUCCESS != rv) goto cleanup; + + rv = get_server_ciphersuites(&sc->ciphersuites, p, sc); + if (APR_SUCCESS != rv) goto cleanup; + + ap_log_error(APLOG_MARK, APLOG_TRACE1, rv, sc->server, + "init server: %s with %d certificates loaded", + sc->server->server_hostname, sc->certified_keys->nelts); +cleanup: + return rv; +} + +static apr_status_t get_proxy_ciphers(const apr_array_header_t **pciphersuites, + apr_pool_t *pool, tls_conf_proxy_t *pc) +{ + const apr_array_header_t *ciphers, *suites = NULL; + apr_status_t rv = APR_SUCCESS; + + rv = calc_ciphers(pool, pc->defined_in, pc->global, + "", pc->proxy_pref_ciphers, pc->proxy_supp_ciphers, &ciphers); + if (APR_SUCCESS != rv) goto cleanup; + + if (ciphers) { + suites = tls_proto_get_rustls_suites(pc->global->proto, ciphers, pool); + /* this changed the default rustls ciphers, configure it. */ + if (APLOGtrace2(pc->defined_in)) { + tls_proto_conf_t *conf = pc->global->proto; + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, pc->defined_in, + "tls proxy ciphers configured[%s]: %s", + pc->defined_in->server_hostname, + tls_proto_get_cipher_names(conf, ciphers, pool)); + } + } + +cleanup: + *pciphersuites = (APR_SUCCESS == rv)? suites : NULL; + return rv; +} + +static apr_status_t proxy_conf_setup( + apr_pool_t *p, apr_pool_t *ptemp, tls_conf_proxy_t *pc, tls_conf_global_t *gc) +{ + apr_status_t rv = APR_SUCCESS; + + (void)p; (void)ptemp; + ap_assert(pc->defined_in); + pc->global = gc; + + if (pc->proxy_ca && strcasecmp(pc->proxy_ca, "default")) { + ap_log_error(APLOG_MARK, APLOG_TRACE2, rv, pc->defined_in, + "proxy: will use roots in %s from %s", + pc->defined_in->server_hostname, pc->proxy_ca); + } + else { + ap_log_error(APLOG_MARK, APLOG_WARNING, rv, pc->defined_in, + "proxy: there is no TLSProxyCA configured in %s which means " + "the certificates of remote servers contacted from here will not be trusted.", + pc->defined_in->server_hostname); + } + + if (pc->proxy_protocol_min > 0) { + apr_array_header_t *tls_versions; + + ap_log_error(APLOG_MARK, APLOG_TRACE1, rv, pc->defined_in, + "init server: set proxy protocol min version %04x", pc->proxy_protocol_min); + tls_versions = tls_proto_create_versions_plus( + gc->proto, (apr_uint16_t)pc->proxy_protocol_min, ptemp); + if (tls_versions->nelts > 0) { + if (pc->proxy_protocol_min != APR_ARRAY_IDX(tls_versions, 0, apr_uint16_t)) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, pc->defined_in, APLOGNO(10326) + "Init: the minimum proxy protocol version configured for %s (%04x) " + "is not supported and version %04x was selected instead.", + pc->defined_in->server_hostname, pc->proxy_protocol_min, + APR_ARRAY_IDX(tls_versions, 0, apr_uint16_t)); + } + } + else { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, pc->defined_in, APLOGNO(10327) + "Unable to configure the proxy protocol version for %s: " + "neither the configured minimum version (%04x), nor any higher one is " + "available.", pc->defined_in->server_hostname, pc->proxy_protocol_min); + rv = APR_ENOTIMPL; goto cleanup; + } + } + +#if TLS_MACHINE_CERTS + rv = load_certified_keys(pc->machine_certified_keys, pc->defined_in, + pc->machine_cert_specs, gc->cert_reg); + if (APR_SUCCESS != rv) goto cleanup; +#endif + +cleanup: + return rv; +} + +static const rustls_certified_key *extract_client_hello_values( + void* userdata, const rustls_client_hello *hello) +{ + conn_rec *c = userdata; + tls_conf_conn_t *cc = tls_conf_conn_get(c); + size_t i, len; + unsigned short n; + + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, "extract client hello values"); + if (!cc) goto cleanup; + cc->client_hello_seen = 1; + if (hello->sni_name.len > 0) { + cc->sni_hostname = apr_pstrndup(c->pool, hello->sni_name.data, hello->sni_name.len); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "sni detected: %s", cc->sni_hostname); + } + else { + cc->sni_hostname = NULL; + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "no sni from client"); + } + if (APLOGctrace4(c) && hello->signature_schemes.len > 0) { + for (i = 0; i < hello->signature_schemes.len; ++i) { + n = hello->signature_schemes.data[i]; + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, c, + "client supports signature scheme: %x", (int)n); + } + } + if ((len = rustls_slice_slice_bytes_len(hello->alpn)) > 0) { + apr_array_header_t *alpn = apr_array_make(c->pool, 5, sizeof(const char*)); + const char *protocol; + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "ALPN: client proposes %d protocols", (int)len); + for (i = 0; i < len; ++i) { + rustls_slice_bytes rs = rustls_slice_slice_bytes_get(hello->alpn, i); + protocol = apr_pstrndup(c->pool, (const char*)rs.data, rs.len); + APR_ARRAY_PUSH(alpn, const char*) = protocol; + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, + "ALPN: client proposes %d: `%s`", (int)i, protocol); + } + cc->alpn = alpn; + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, "ALPN: no alpn proposed by client"); + } +cleanup: + return NULL; +} + +static apr_status_t setup_hello_config(apr_pool_t *p, server_rec *base_server, tls_conf_global_t *gc) +{ + rustls_server_config_builder *builder; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + + builder = rustls_server_config_builder_new(); + if (!builder) { + rr = RUSTLS_RESULT_PANIC; goto cleanup; + } + rustls_server_config_builder_set_hello_callback(builder, extract_client_hello_values); + gc->rustls_hello_config = rustls_server_config_builder_build(builder); + if (!gc->rustls_hello_config) { + rr = RUSTLS_RESULT_PANIC; goto cleanup; + } + +cleanup: + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr = NULL; + rv = tls_util_rustls_error(p, rr, &err_descr); + ap_log_error(APLOG_MARK, APLOG_ERR, rv, base_server, APLOGNO(10328) + "Failed to init generic hello config: [%d] %s", (int)rr, err_descr); + goto cleanup; + } + return rv; +} + +static apr_status_t init_incoming(apr_pool_t *p, apr_pool_t *ptemp, server_rec *base_server) +{ + tls_conf_server_t *sc = tls_conf_server_get(base_server); + tls_conf_global_t *gc = sc->global; + server_rec *s; + apr_status_t rv = APR_ENOMEM; + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, base_server, "tls_core_init incoming"); + apr_pool_cleanup_register(p, base_server, tls_core_free, + apr_pool_cleanup_null); + + rv = tls_proto_post_config(p, ptemp, base_server); + if (APR_SUCCESS != rv) goto cleanup; + + for (s = base_server; s; s = s->next) { + sc = tls_conf_server_get(s); + assert(sc); + ap_assert(sc->global == gc); + + /* If 'TLSEngine' has been configured, use those addresses to + * decide if we are enabled on this server. */ + sc->base_server = (s == base_server); + sc->enabled = we_listen_on(gc, s, sc)? TLS_FLAG_TRUE : TLS_FLAG_FALSE; + } + + rv = tls_cache_post_config(p, ptemp, base_server); + if (APR_SUCCESS != rv) goto cleanup; + + rv = setup_hello_config(p, base_server, gc); + if (APR_SUCCESS != rv) goto cleanup; + + /* Setup server configs and collect all certificates we use. */ + gc->cert_reg = tls_cert_reg_make(p); + gc->stores = tls_cert_root_stores_make(p); + gc->verifiers = tls_cert_verifiers_make(p, gc->stores); + for (s = base_server; s; s = s->next) { + sc = tls_conf_server_get(s); + rv = tls_conf_server_apply_defaults(sc, p); + if (APR_SUCCESS != rv) goto cleanup; + if (sc->enabled != TLS_FLAG_TRUE) continue; + rv = server_conf_setup(p, ptemp, sc, gc); + if (APR_SUCCESS != rv) { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, "server setup failed: %s", + s->server_hostname); + goto cleanup; + } + } + +cleanup: + if (APR_SUCCESS != rv) { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, base_server, "error during post_config"); + } + return rv; +} + +static apr_status_t init_outgoing(apr_pool_t *p, apr_pool_t *ptemp, server_rec *base_server) +{ + tls_conf_server_t *sc = tls_conf_server_get(base_server); + tls_conf_global_t *gc = sc->global; + tls_conf_dir_t *dc; + tls_conf_proxy_t *pc; + server_rec *s; + apr_status_t rv = APR_SUCCESS; + int i; + + (void)p; (void)ptemp; + (void)gc; + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, base_server, "tls_core_init outgoing"); + ap_assert(gc->mod_proxy_post_config_done); + /* Collect all proxy'ing default server dir configs. + * All section dir_configs should already be there - if there were any. */ + for (s = base_server; s; s = s->next) { + dc = tls_conf_dir_server_get(s); + rv = tls_conf_dir_apply_defaults(dc, p); + if (APR_SUCCESS != rv) goto cleanup; + if (dc->proxy_enabled != TLS_FLAG_TRUE) continue; + dc->proxy_config = tls_conf_proxy_make(p, dc, gc, s); + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, s, "%s: adding proxy_conf to globals", + s->server_hostname); + APR_ARRAY_PUSH(gc->proxy_configs, tls_conf_proxy_t*) = dc->proxy_config; + } + /* Now gc->proxy_configs contains all configurations we need to possibly + * act on for outgoing connections. */ + for (i = 0; i < gc->proxy_configs->nelts; ++i) { + pc = APR_ARRAY_IDX(gc->proxy_configs, i, tls_conf_proxy_t*); + rv = proxy_conf_setup(p, ptemp, pc, gc); + if (APR_SUCCESS != rv) goto cleanup; + } + +cleanup: + return rv; +} + +apr_status_t tls_core_init(apr_pool_t *p, apr_pool_t *ptemp, server_rec *base_server) +{ + tls_conf_server_t *sc = tls_conf_server_get(base_server); + tls_conf_global_t *gc = sc->global; + apr_status_t rv = APR_SUCCESS; + + ap_assert(gc); + if (TLS_CONF_ST_INIT == gc->status) { + rv = init_incoming(p, ptemp, base_server); + if (APR_SUCCESS != rv) goto cleanup; + gc->status = TLS_CONF_ST_INCOMING_DONE; + } + if (TLS_CONF_ST_INCOMING_DONE == gc->status) { + if (!gc->mod_proxy_post_config_done) goto cleanup; + + rv = init_outgoing(p, ptemp, base_server); + if (APR_SUCCESS != rv) goto cleanup; + gc->status = TLS_CONF_ST_OUTGOING_DONE; + } + if (TLS_CONF_ST_OUTGOING_DONE == gc->status) { + /* register all loaded certificates for OCSP stapling */ + rv = tls_ocsp_prime_certs(gc, p, base_server); + if (APR_SUCCESS != rv) goto cleanup; + + if (gc->verifiers) tls_cert_verifiers_clear(gc->verifiers); + if (gc->stores) tls_cert_root_stores_clear(gc->stores); + gc->status = TLS_CONF_ST_DONE; + } +cleanup: + return rv; +} + +static apr_status_t tls_core_conn_free(void *data) +{ + tls_conf_conn_t *cc = data; + + /* free all rustls things we are owning. */ + if (cc->rustls_connection) { + rustls_connection_free(cc->rustls_connection); + cc->rustls_connection = NULL; + } + if (cc->rustls_server_config) { + rustls_server_config_free(cc->rustls_server_config); + cc->rustls_server_config = NULL; + } + if (cc->rustls_client_config) { + rustls_client_config_free(cc->rustls_client_config); + cc->rustls_client_config = NULL; + } + if (cc->key_cloned && cc->key) { + rustls_certified_key_free(cc->key); + cc->key = NULL; + } + if (cc->local_keys) { + const rustls_certified_key *key; + int i; + + for (i = 0; i < cc->local_keys->nelts; ++i) { + key = APR_ARRAY_IDX(cc->local_keys, i, const rustls_certified_key*); + rustls_certified_key_free(key); + } + apr_array_clear(cc->local_keys); + } + return APR_SUCCESS; +} + +static tls_conf_conn_t *cc_get_or_make(conn_rec *c) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + if (!cc) { + cc = apr_pcalloc(c->pool, sizeof(*cc)); + cc->server = c->base_server; + cc->state = TLS_CONN_ST_INIT; + tls_conf_conn_set(c, cc); + apr_pool_cleanup_register(c->pool, cc, tls_core_conn_free, + apr_pool_cleanup_null); + } + return cc; +} + +void tls_core_conn_disable(conn_rec *c) +{ + tls_conf_conn_t *cc; + cc = cc_get_or_make(c); + if (cc->state == TLS_CONN_ST_INIT) { + cc->state = TLS_CONN_ST_DISABLED; + } +} + +void tls_core_conn_bind(conn_rec *c, ap_conf_vector_t *dir_conf) +{ + tls_conf_conn_t *cc = cc_get_or_make(c); + cc->dc = dir_conf? ap_get_module_config(dir_conf, &tls_module) : NULL; +} + + +static apr_status_t init_outgoing_connection(conn_rec *c) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + tls_conf_proxy_t *pc; + const apr_array_header_t *ciphersuites = NULL; + apr_array_header_t *tls_versions = NULL; + rustls_client_config_builder *builder = NULL; + rustls_root_cert_store *ca_store = NULL; + const char *hostname = NULL, *alpn_note = NULL; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + + ap_assert(cc->outgoing); + ap_assert(cc->dc); + pc = cc->dc->proxy_config; + ap_assert(pc); + + hostname = apr_table_get(c->notes, "proxy-request-hostname"); + alpn_note = apr_table_get(c->notes, "proxy-request-alpn-protos"); + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, c->base_server, + "setup_outgoing: to %s [ALPN: %s] from configration in %s" + " using CA %s", hostname, alpn_note, pc->defined_in->server_hostname, pc->proxy_ca); + + rv = get_proxy_ciphers(&ciphersuites, c->pool, pc); + if (APR_SUCCESS != rv) goto cleanup; + + if (pc->proxy_protocol_min > 0) { + tls_versions = tls_proto_create_versions_plus( + pc->global->proto, (apr_uint16_t)pc->proxy_protocol_min, c->pool); + } + + if (ciphersuites && ciphersuites->nelts > 0 + && tls_versions && tls_versions->nelts >= 0) { + rr = rustls_client_config_builder_new_custom( + (const struct rustls_supported_ciphersuite *const *)ciphersuites->elts, + (size_t)ciphersuites->nelts, + (const uint16_t *)tls_versions->elts, (size_t)tls_versions->nelts, + &builder); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + } + else { + builder = rustls_client_config_builder_new(); + if (NULL == builder) { + rv = APR_ENOMEM; + goto cleanup; + } + } + + if (pc->proxy_ca && strcasecmp(pc->proxy_ca, "default")) { + rv = tls_cert_root_stores_get(pc->global->stores, pc->proxy_ca, &ca_store); + if (APR_SUCCESS != rv) goto cleanup; + rustls_client_config_builder_use_roots(builder, ca_store); + } + +#if TLS_MACHINE_CERTS + if (pc->machine_certified_keys->nelts > 0) { + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, c->base_server, + "setup_outgoing: adding %d client certificate", (int)pc->machine_certified_keys->nelts); + rr = rustls_client_config_builder_set_certified_key( + builder, (const rustls_certified_key**)pc->machine_certified_keys->elts, + (size_t)pc->machine_certified_keys->nelts); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + } +#endif + + if (hostname) { + rustls_client_config_builder_set_enable_sni(builder, true); + } + else { + hostname = "unknown.proxy.local"; + rustls_client_config_builder_set_enable_sni(builder, false); + } + + if (alpn_note) { + apr_array_header_t *alpn_proposed = NULL; + char *p, *last; + apr_size_t len; + + alpn_proposed = apr_array_make(c->pool, 3, sizeof(const char*)); + p = apr_pstrdup(c->pool, alpn_note); + while ((p = apr_strtok(p, ", ", &last))) { + len = (apr_size_t)(last - p - (*last? 1 : 0)); + if (len > 255) { + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c, APLOGNO(10329) + "ALPN proxy protocol identifier too long: %s", p); + rv = APR_EGENERAL; + goto cleanup; + } + APR_ARRAY_PUSH(alpn_proposed, const char*) = apr_pstrndup(c->pool, p, len); + p = NULL; + } + if (alpn_proposed->nelts > 0) { + apr_array_header_t *rustls_protocols; + const char* proto; + rustls_slice_bytes bytes; + int i; + + rustls_protocols = apr_array_make(c->pool, alpn_proposed->nelts, sizeof(rustls_slice_bytes)); + for (i = 0; i < alpn_proposed->nelts; ++i) { + proto = APR_ARRAY_IDX(alpn_proposed, i, const char*); + bytes.data = (const unsigned char*)proto; + bytes.len = strlen(proto); + APR_ARRAY_PUSH(rustls_protocols, rustls_slice_bytes) = bytes; + } + + rr = rustls_client_config_builder_set_alpn_protocols(builder, + (rustls_slice_bytes*)rustls_protocols->elts, (size_t)rustls_protocols->nelts); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, c->base_server, + "setup_outgoing: to %s, added %d ALPN protocols from %s", + hostname, rustls_protocols->nelts, alpn_note); + } + } + + cc->rustls_client_config = rustls_client_config_builder_build(builder); + builder = NULL; + + rr = rustls_client_connection_new(cc->rustls_client_config, hostname, &cc->rustls_connection); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + rustls_connection_set_userdata(cc->rustls_connection, c); + +cleanup: + if (builder != NULL) rustls_client_config_builder_free(builder); + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr = NULL; + rv = tls_util_rustls_error(c->pool, rr, &err_descr); + ap_log_error(APLOG_MARK, APLOG_ERR, rv, cc->server, APLOGNO(10330) + "Failed to init pre_session for outgoing %s to %s: [%d] %s", + cc->server->server_hostname, hostname, (int)rr, err_descr); + c->aborted = 1; + cc->state = TLS_CONN_ST_DISABLED; + goto cleanup; + } + return rv; +} + +int tls_core_pre_conn_init(conn_rec *c) +{ + tls_conf_server_t *sc = tls_conf_server_get(c->base_server); + tls_conf_conn_t *cc; + + cc = cc_get_or_make(c); + if (cc->state == TLS_CONN_ST_INIT) { + /* Need to decide if we TLS this connection or not */ + int enabled = +#if AP_MODULE_MAGIC_AT_LEAST(20120211, 109) + !c->outgoing && +#endif + sc->enabled == TLS_FLAG_TRUE; + cc->state = enabled? TLS_CONN_ST_CLIENT_HELLO : TLS_CONN_ST_DISABLED; + cc->client_auth = sc->client_auth; + ap_log_error(APLOG_MARK, APLOG_TRACE3, 0, c->base_server, + "tls_core_conn_init: %s for tls: %s", + enabled? "enabled" : "disabled", c->base_server->server_hostname); + } + else if (cc->state == TLS_CONN_ST_DISABLED) { + ap_log_error(APLOG_MARK, APLOG_TRACE4, 0, c->base_server, + "tls_core_conn_init, not our connection: %s", + c->base_server->server_hostname); + goto cleanup; + } + +cleanup: + return TLS_CONN_ST_IS_ENABLED(cc)? OK : DECLINED; +} + +apr_status_t tls_core_conn_init(conn_rec *c) +{ + tls_conf_server_t *sc = tls_conf_server_get(c->base_server); + tls_conf_conn_t *cc; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + + cc = tls_conf_conn_get(c); + if (cc && TLS_CONN_ST_IS_ENABLED(cc) && !cc->rustls_connection) { + if (cc->outgoing) { + rv = init_outgoing_connection(c); + if (APR_SUCCESS != rv) goto cleanup; + } + else { + /* Use a generic rustls_connection with its defaults, which we feed + * the first TLS bytes from the client. Its Hello message will trigger + * our callback where we can inspect the (possibly) supplied SNI and + * select another server. + */ + rr = rustls_server_connection_new(sc->global->rustls_hello_config, &cc->rustls_connection); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + /* we might refuse requests on this connection, e.g. ACME challenge */ + cc->service_unavailable = sc->service_unavailable; + } + rustls_connection_set_userdata(cc->rustls_connection, c); + } + +cleanup: + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr = NULL; + rv = tls_util_rustls_error(c->pool, rr, &err_descr); + ap_log_error(APLOG_MARK, APLOG_ERR, rv, sc->server, APLOGNO(10331) + "Failed to init TLS connection for server %s: [%d] %s", + sc->server->server_hostname, (int)rr, err_descr); + c->aborted = 1; + cc->state = TLS_CONN_ST_DISABLED; + goto cleanup; + } + return rv; +} + +static int find_vhost(void *sni_hostname, conn_rec *c, server_rec *s) +{ + if (tls_util_name_matches_server(sni_hostname, s)) { + tls_conf_conn_t *cc = tls_conf_conn_get(c); + cc->server = s; + return 1; + } + return 0; +} + +static apr_status_t select_application_protocol( + conn_rec *c, server_rec *s, rustls_server_config_builder *builder) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + const char *proposed; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + + /* The server always has a protocol it uses, normally "http/1.1". + * if the client, via ALPN, proposes protocols, they are in + * order of preference. + * We propose those to modules registered in the server and + * get the protocol back that someone is willing to run on this + * connection. + * If this is different from what the connection already does, + * we tell the server (and all protocol modules) to switch. + * If successful, we announce that protocol back to the client as + * our only ALPN protocol and then do the 'real' handshake. + */ + cc->application_protocol = ap_get_protocol(c); + if (cc->alpn && cc->alpn->nelts > 0) { + rustls_slice_bytes rsb; + + proposed = ap_select_protocol(c, NULL, s, cc->alpn); + if (!proposed) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, c, + "ALPN: no protocol selected in server"); + goto cleanup; + } + + if (strcmp(proposed, cc->application_protocol)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, c, + "ALPN: switching protocol from `%s` to `%s`", cc->application_protocol, proposed); + rv = ap_switch_protocol(c, NULL, cc->server, proposed); + if (APR_SUCCESS != rv) goto cleanup; + } + + rsb.data = (const unsigned char*)proposed; + rsb.len = strlen(proposed); + rr = rustls_server_config_builder_set_alpn_protocols(builder, &rsb, 1); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + + cc->application_protocol = proposed; + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, c, + "ALPN: using connection protocol `%s`", cc->application_protocol); + + /* protocol was switched, this could be a challenge protocol + * such as "acme-tls/1". Give handlers the opportunity to + * override the certificate for this connection. */ + if (strcmp("h2", proposed) && strcmp("http/1.1", proposed)) { + const char *cert_pem = NULL, *key_pem = NULL; + if (ap_ssl_answer_challenge(c, cc->sni_hostname, &cert_pem, &key_pem)) { + /* With ACME we can have challenge connections to a unknown domains + * that need to be answered with a special certificate and will + * otherwise not answer any requests. See RFC 8555 */ + rv = use_local_key(c, cert_pem, key_pem); + if (APR_SUCCESS != rv) goto cleanup; + + cc->service_unavailable = 1; + cc->client_auth = TLS_CLIENT_AUTH_NONE; + } + } + } + +cleanup: + if (rr != RUSTLS_RESULT_OK) { + const char *err_descr = NULL; + rv = tls_util_rustls_error(c->pool, rr, &err_descr); + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(10332) + "Failed to init session for server %s: [%d] %s", + s->server_hostname, (int)rr, err_descr); + c->aborted = 1; + goto cleanup; + } + return rv; +} + +static apr_status_t build_server_connection(rustls_connection **pconnection, + const rustls_server_config **pconfig, + conn_rec *c) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + tls_conf_server_t *sc; + const apr_array_header_t *tls_versions = NULL; + rustls_server_config_builder *builder = NULL; + const rustls_server_config *config = NULL; + rustls_connection *rconnection = NULL; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + + sc = tls_conf_server_get(cc->server); + + if (sc->tls_protocol_min > 0) { + ap_log_error(APLOG_MARK, APLOG_TRACE1, rv, sc->server, + "init server: set protocol min version %04x", sc->tls_protocol_min); + tls_versions = tls_proto_create_versions_plus( + sc->global->proto, (apr_uint16_t)sc->tls_protocol_min, c->pool); + if (tls_versions->nelts > 0) { + if (sc->tls_protocol_min != APR_ARRAY_IDX(tls_versions, 0, apr_uint16_t)) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, sc->server, APLOGNO(10333) + "Init: the minimum protocol version configured for %s (%04x) " + "is not supported and version %04x was selected instead.", + sc->server->server_hostname, sc->tls_protocol_min, + APR_ARRAY_IDX(tls_versions, 0, apr_uint16_t)); + } + } + else { + ap_log_error(APLOG_MARK, APLOG_ERR, 0, sc->server, APLOGNO(10334) + "Unable to configure the protocol version for %s: " + "neither the configured minimum version (%04x), nor any higher one is " + "available.", sc->server->server_hostname, sc->tls_protocol_min); + rv = APR_ENOTIMPL; goto cleanup; + } + } + else if (sc->ciphersuites && sc->ciphersuites->nelts > 0) { + /* FIXME: rustls-ffi current has not way to make a builder with ALL_PROTOCOL_VERSIONS */ + tls_versions = tls_proto_create_versions_plus(sc->global->proto, 0, c->pool); + } + + if (sc->ciphersuites && sc->ciphersuites->nelts > 0 + && tls_versions && tls_versions->nelts >= 0) { + rr = rustls_server_config_builder_new_custom( + (const struct rustls_supported_ciphersuite *const *)sc->ciphersuites->elts, + (size_t)sc->ciphersuites->nelts, + (const uint16_t *)tls_versions->elts, (size_t)tls_versions->nelts, + &builder); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + } + else { + builder = rustls_server_config_builder_new(); + if (NULL == builder) { + rv = APR_ENOMEM; + goto cleanup; + } + } + + /* decide on the application protocol, this may change other + * settings like client_auth. */ + rv = select_application_protocol(c, cc->server, builder); + + if (cc->client_auth != TLS_CLIENT_AUTH_NONE) { + ap_assert(sc->client_ca); /* checked in server_setup */ + if (cc->client_auth == TLS_CLIENT_AUTH_REQUIRED) { + const rustls_client_cert_verifier *verifier; + rv = tls_cert_client_verifiers_get(sc->global->verifiers, sc->client_ca, &verifier); + if (APR_SUCCESS != rv) goto cleanup; + rustls_server_config_builder_set_client_verifier(builder, verifier); + } + else { + const rustls_client_cert_verifier_optional *verifier; + rv = tls_cert_client_verifiers_get_optional(sc->global->verifiers, sc->client_ca, &verifier); + if (APR_SUCCESS != rv) goto cleanup; + rustls_server_config_builder_set_client_verifier_optional(builder, verifier); + } + } + + rustls_server_config_builder_set_hello_callback(builder, select_certified_key); + + rr = rustls_server_config_builder_set_ignore_client_order( + builder, sc->honor_client_order == TLS_FLAG_FALSE); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + + rv = tls_cache_init_server(builder, sc->server); + if (APR_SUCCESS != rv) goto cleanup; + + config = rustls_server_config_builder_build(builder); + builder = NULL; + if (!config) { + rv = APR_ENOMEM; goto cleanup; + } + + rr = rustls_server_connection_new(config, &rconnection); + if (RUSTLS_RESULT_OK != rr) goto cleanup; + rustls_connection_set_userdata(rconnection, c); + +cleanup: + if (rr != RUSTLS_RESULT_OK) { + const char *err_descr = NULL; + rv = tls_util_rustls_error(c->pool, rr, &err_descr); + ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, sc->server, APLOGNO(10335) + "Failed to init session for server %s: [%d] %s", + sc->server->server_hostname, (int)rr, err_descr); + } + if (APR_SUCCESS == rv) { + *pconfig = config; + *pconnection = rconnection; + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, sc->server, + "tls_core_conn_server_init done: %s", + sc->server->server_hostname); + } + else { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, sc->server, APLOGNO(10336) + "Failed to init session for server %s", + sc->server->server_hostname); + c->aborted = 1; + if (config) rustls_server_config_free(config); + if (builder) rustls_server_config_builder_free(builder); + } + return rv; +} + +apr_status_t tls_core_conn_seen_client_hello(conn_rec *c) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + tls_conf_server_t *sc; + apr_status_t rv = APR_SUCCESS; + int sni_match = 0; + + /* The initial rustls generic session has been fed the client hello and + * we have extraced SNI and ALPN values (so present). + * Time to select the actual server_rec and application protocol that + * will be used on this connection. */ + ap_assert(cc); + sc = tls_conf_server_get(cc->server); + if (!cc->client_hello_seen) goto cleanup; + + if (cc->sni_hostname) { + if (ap_vhost_iterate_given_conn(c, find_vhost, (void*)cc->sni_hostname)) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c, APLOGNO(10337) + "vhost_init: virtual host found for SNI '%s'", cc->sni_hostname); + sni_match = 1; + } + else if (tls_util_name_matches_server(cc->sni_hostname, ap_server_conf)) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c, APLOGNO(10338) + "vhost_init: virtual host NOT found, but base server[%s] matches SNI '%s'", + ap_server_conf->server_hostname, cc->sni_hostname); + cc->server = ap_server_conf; + sni_match = 1; + } + else if (sc->strict_sni == TLS_FLAG_FALSE) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c, APLOGNO(10339) + "vhost_init: no virtual host found, relaxed SNI checking enabled, SNI '%s'", + cc->sni_hostname); + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c, APLOGNO(10340) + "vhost_init: no virtual host, nor base server[%s] matches SNI '%s'", + c->base_server->server_hostname, cc->sni_hostname); + cc->server = sc->global->ap_server; + rv = APR_NOTFOUND; goto cleanup; + } + } + else { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c, APLOGNO(10341) + "vhost_init: no SNI hostname provided by client"); + } + + /* reinit, we might have a new server selected */ + sc = tls_conf_server_get(cc->server); + /* on relaxed SNI matches, we do not enforce the 503 of fallback + * certificates. */ + if (!cc->service_unavailable) { + cc->service_unavailable = sni_match? sc->service_unavailable : 0; + } + + /* if found or not, cc->server will be the server we use now to do + * the real handshake and, if successful, the traffic after that. + * Free the current session and create the real one for the + * selected server. */ + if (cc->rustls_server_config) { + rustls_server_config_free(cc->rustls_server_config); + cc->rustls_server_config = NULL; + } + rustls_connection_free(cc->rustls_connection); + cc->rustls_connection = NULL; + + rv = build_server_connection(&cc->rustls_connection, &cc->rustls_server_config, c); + +cleanup: + return rv; +} + +apr_status_t tls_core_conn_post_handshake(conn_rec *c) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + tls_conf_server_t *sc = tls_conf_server_get(cc->server); + const rustls_supported_ciphersuite *rsuite; + const rustls_certificate *cert; + apr_status_t rv = APR_SUCCESS; + + if (rustls_connection_is_handshaking(cc->rustls_connection)) { + rv = APR_EGENERAL; + ap_log_error(APLOG_MARK, APLOG_ERR, rv, cc->server, APLOGNO(10342) + "post handshake, but rustls claims to still be handshaking: %s", + cc->server->server_hostname); + goto cleanup; + } + + cc->tls_protocol_id = rustls_connection_get_protocol_version(cc->rustls_connection); + cc->tls_protocol_name = tls_proto_get_version_name(sc->global->proto, + cc->tls_protocol_id, c->pool); + rsuite = rustls_connection_get_negotiated_ciphersuite(cc->rustls_connection); + if (!rsuite) { + rv = APR_EGENERAL; + ap_log_error(APLOG_MARK, APLOG_ERR, rv, cc->server, APLOGNO(10343) + "post handshake, but rustls does not report negotiated cipher suite: %s", + cc->server->server_hostname); + goto cleanup; + } + cc->tls_cipher_id = rustls_supported_ciphersuite_get_suite(rsuite); + cc->tls_cipher_name = tls_proto_get_cipher_name(sc->global->proto, + cc->tls_cipher_id, c->pool); + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, c, "post_handshake %s: %s [%s]", + cc->server->server_hostname, cc->tls_protocol_name, cc->tls_cipher_name); + + cert = rustls_connection_get_peer_certificate(cc->rustls_connection, 0); + if (cert) { + size_t i = 0; + + cc->peer_certs = apr_array_make(c->pool, 5, sizeof(const rustls_certificate*)); + while (cert) { + APR_ARRAY_PUSH(cc->peer_certs, const rustls_certificate*) = cert; + cert = rustls_connection_get_peer_certificate(cc->rustls_connection, ++i); + } + } + if (!cc->peer_certs && sc->client_auth == TLS_CLIENT_AUTH_REQUIRED) { + ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c, APLOGNO(10344) + "A client certificate is required, but no acceptable certificate was presented."); + rv = APR_ECONNABORTED; + } + + rv = tls_var_handshake_done(c); +cleanup: + return rv; +} + +/** + * Return != 0, if a connection also serve requests for server . + */ +static int tls_conn_compatible_for(tls_conf_conn_t *cc, server_rec *other) +{ + tls_conf_server_t *oc, *sc; + const rustls_certified_key *sk, *ok; + int i; + + /* - differences in certificates are the responsibility of the client. + * if it thinks the SNI server works for r->server, we are fine with that. + * - if there are differences in requirements to client certificates, we + * need to deny the request. + */ + if (!cc->server || !other) return 0; + if (cc->server == other) return 1; + oc = tls_conf_server_get(other); + if (!oc) return 0; + sc = tls_conf_server_get(cc->server); + if (!sc) return 0; + + /* same certified keys used? */ + if (sc->certified_keys->nelts != oc->certified_keys->nelts) return 0; + for (i = 0; i < sc->certified_keys->nelts; ++i) { + sk = APR_ARRAY_IDX(sc->certified_keys, i, const rustls_certified_key*); + ok = APR_ARRAY_IDX(oc->certified_keys, i, const rustls_certified_key*); + if (sk != ok) return 0; + } + + /* If the connection TLS version is below other other min one, no */ + if (oc->tls_protocol_min > 0 && cc->tls_protocol_id < oc->tls_protocol_min) return 0; + /* If the connection TLS cipher is listed as suppressed by other, no */ + if (oc->tls_supp_ciphers && tls_util_array_uint16_contains( + oc->tls_supp_ciphers, cc->tls_cipher_id)) return 0; + return 1; +} + +int tls_core_request_check(request_rec *r) +{ + conn_rec *c = r->connection; + tls_conf_conn_t *cc = tls_conf_conn_get(c->master? c->master : c); + int rv = DECLINED; /* do not object to the request */ + + /* If we are not enabled on this connection, leave. We are not renegotiating. + * Otherwise: + * - service is unavailable when we have only a fallback certificate or + * when a challenge protocol is active (ACME tls-alpn-01 for example). + * - with vhosts configured and no SNI from the client, deny access. + * - are servers compatible for connection sharing? + */ + if (!TLS_CONN_ST_IS_ENABLED(cc)) goto cleanup; + + ap_log_rerror(APLOG_MARK, APLOG_TRACE3, 0, r, + "tls_core_request_check[%s, %d]: %s", r->hostname, + cc? cc->service_unavailable : 2, r->the_request); + if (cc->service_unavailable) { + rv = HTTP_SERVICE_UNAVAILABLE; goto cleanup; + } + if (!cc->sni_hostname && r->connection->vhost_lookup_data) { + rv = HTTP_FORBIDDEN; goto cleanup; + } + if (!tls_conn_compatible_for(cc, r->server)) { + rv = HTTP_MISDIRECTED_REQUEST; + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(10345) + "Connection host %s, selected via SNI, and request host %s" + " have incompatible TLS configurations.", + cc->server->server_hostname, r->hostname); + goto cleanup; + } +cleanup: + return rv; +} + +apr_status_t tls_core_error(conn_rec *c, rustls_result rr, const char **perrstr) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + apr_status_t rv; + + rv = tls_util_rustls_error(c->pool, rr, perrstr); + if (cc) { + cc->last_error = rr; + cc->last_error_descr = *perrstr; + } + return rv; +} + +int tls_core_setup_outgoing(conn_rec *c) +{ + tls_conf_conn_t *cc; + int rv = DECLINED; + + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "tls_core_setup_outgoing called"); +#if AP_MODULE_MAGIC_AT_LEAST(20120211, 109) + if (!c->outgoing) goto cleanup; +#endif + cc = cc_get_or_make(c); + if (cc->state == TLS_CONN_ST_DISABLED) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "tls_core_setup_outgoing: already disabled"); + goto cleanup; + } + if (TLS_CONN_ST_IS_ENABLED(cc)) { + /* we already handle it, allow repeated calls */ + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "tls_core_setup_outgoing: already enabled"); + rv = OK; goto cleanup; + } + cc->outgoing = 1; + if (!cc->dc) { + /* In case there is not dir_conf bound for this connection, we fallback + * to the defaults in the base server (we have no virtual host config to use) */ + cc->dc = ap_get_module_config(c->base_server->lookup_defaults, &tls_module); + } + if (cc->dc->proxy_enabled != TLS_FLAG_TRUE) { + cc->state = TLS_CONN_ST_DISABLED; + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "tls_core_setup_outgoing: TLSProxyEngine not configured"); + goto cleanup; + } + /* we handle this connection */ + cc->state = TLS_CONN_ST_CLIENT_HELLO; + rv = OK; + +cleanup: + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, c, + "tls_core_setup_outgoing returns %s", rv == OK? "OK" : "DECLINED"); + return rv; +} diff -Nru apache2-2.4.51/modules/tls/tls_core.h apache2-2.4.52/modules/tls/tls_core.h --- apache2-2.4.51/modules/tls/tls_core.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_core.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,184 @@ +/* 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 tls_core_h +#define tls_core_h + +/* The module's state handling of a connection in normal chronological order, + */ +typedef enum { + TLS_CONN_ST_INIT, /* being initialized */ + TLS_CONN_ST_DISABLED, /* TLS is disabled here */ + TLS_CONN_ST_CLIENT_HELLO, /* TLS is enabled, prep handshake */ + TLS_CONN_ST_HANDSHAKE, /* TLS is enabled, handshake ongonig */ + TLS_CONN_ST_TRAFFIC, /* TLS is enabled, handshake done */ + TLS_CONN_ST_NOTIFIED, /* TLS is enabled, notification to end sent */ + TLS_CONN_ST_DONE, /* TLS is enabled, TLS has shut down */ +} tls_conn_state_t; + +#define TLS_CONN_ST_IS_ENABLED(cc) (cc && cc->state >= TLS_CONN_ST_CLIENT_HELLO) + +struct tls_filter_ctx_t; + +/* The modules configuration for a connection. Created at connection + * start and mutable during the lifetime of the connection. + * (A conn_rec is only ever processed by one thread at a time.) + */ +typedef struct { + server_rec *server; /* the server_rec selected for this connection, + * initially c->base_server, to be negotiated via SNI. */ + tls_conf_dir_t *dc; /* directory config applying here */ + tls_conn_state_t state; + int outgoing; /* != 0 iff outgoing connection (redundant once c->outgoing is everywhere) */ + int service_unavailable; /* we 503 all requests on this connection */ + tls_client_auth_t client_auth; /* how client authentication with certificates is used */ + int client_hello_seen; /* the client hello has been inspected */ + + rustls_connection *rustls_connection; /* the session used on this connection or NULL */ + const rustls_server_config *rustls_server_config; /* the config made for this connection (incoming) or NULL */ + const rustls_client_config *rustls_client_config; /* the config made for this connection (outgoing) or NULL */ + struct tls_filter_ctx_t *filter_ctx; /* the context used by this connection's tls filters */ + + apr_array_header_t *local_keys; /* rustls_certified_key* array of connection specific keys */ + const rustls_certified_key *key; /* the key selected for the session */ + int key_cloned; /* != 0 iff the key is a unique clone, to be freed */ + apr_array_header_t *peer_certs; /* handshaked peer ceritificates or NULL */ + const char *sni_hostname; /* the SNI value from the client hello, or NULL */ + const apr_array_header_t *alpn; /* the protocols proposed via ALPN by the client */ + const char *application_protocol; /* the ALPN selected protocol or NULL */ + + int session_id_cache_hit; /* if a submitted session id was found in our cache */ + + apr_uint16_t tls_protocol_id; /* the TLS version negotiated */ + const char *tls_protocol_name; /* the name of the TLS version negotiated */ + apr_uint16_t tls_cipher_id; /* the TLS cipher suite negotiated */ + const char *tls_cipher_name; /* the name of TLS cipher suite negotiated */ + + const char *user_name; /* != NULL if we derived a TLSUserName from the client_cert */ + apr_table_t *subprocess_env; /* common TLS variables for this connection */ + + rustls_result last_error; + const char *last_error_descr; + +} tls_conf_conn_t; + +/* Get the connection specific module configuration. */ +tls_conf_conn_t *tls_conf_conn_get(conn_rec *c); + +/* Set the module configuration for a connection. */ +void tls_conf_conn_set(conn_rec *c, tls_conf_conn_t *cc); + +/* Return OK iff this connection is a TSL connection (or a secondary on a TLS connection). */ +int tls_conn_check_ssl(conn_rec *c); + +/** + * Initialize the module's global and server specific settings. This runs + * in Apache's "post-config" phase, meaning the configuration has been read + * and checked for syntactic and other easily verifiable errors and now + * it is time to load everything in and make it ready for traffic. + *

    a memory pool staying with us the whole time until the server stops/reloads. + * a temporary pool as a scratch buffer that will be destroyed shortly after. + * the server for the global configuration which links -> next to + * all contained virtual hosts configured. + */ +apr_status_t tls_core_init(apr_pool_t *p, apr_pool_t *ptemp, server_rec *base_server); + +/** + * Initialize the module's outgoing connection settings. This runs + * in Apache's "post-config" phase after mod_proxy. + */ +apr_status_t tls_core_init_outgoing(apr_pool_t *p, apr_pool_t *ptemp, server_rec *base_server); + +/** + * Supply a directory configuration for the connection to work with. This + * maybe NULL. This can be called several times during the lifetime of a + * connection and must not change the current TLS state. + * @param c the connection + * @param dir_conf optional directory configuration that applies + */ +void tls_core_conn_bind(conn_rec *c, ap_conf_vector_t *dir_conf); + +/** + * Disable TLS on a new connection. Will do nothing on already initialized + * connections. + * @param c a new connection + */ +void tls_core_conn_disable(conn_rec *c); + +/** + * Initialiaze the tls_conf_connt_t for the connection + * and decide if TLS is enabled or not. + * @return OK if enabled, DECLINED otherwise + */ +int tls_core_pre_conn_init(conn_rec *c); + +/** + * Initialize the module for a TLS enabled connection. + * @param c a new connection + */ +apr_status_t tls_core_conn_init(conn_rec *c); + +/** + * Called when the ClientHello has been received and values from it + * have been extracted into the `tls_conf_conn_t` of the connection. + * + * Decides: + * - which `server_rec` this connection is for (SNI) + * - which application protocol to use (ALPN) + * This may be unsuccessful for several reasons. The SNI + * from the client may not be known or the selected server + * has not certificates available. etc. + * On success, a proper `rustls_connection` will have been + * created and set in the `tls_conf_conn_t` of the connection. + */ +apr_status_t tls_core_conn_seen_client_hello(conn_rec *c); + +/** + * The TLS handshake for the connection has been successfully performed. + * This means that TLS related properties, such as TLS version and cipher, + * are known and the props in `tls_conf_conn_t` of the connection + * can be set. + */ +apr_status_t tls_core_conn_post_handshake(conn_rec *c); + +/** + * After a request has been read, but before processing is started, we + * check if everything looks good to us: + * - was an SNI hostname provided by the client when we have vhosts to choose from? + * if not, we deny it. + * - if the SNI hostname and request host are not the same, are they - from TLS + * point of view - 'compatible' enough? For example, if one server requires + * client certificates and the other not (or with different settings), such + * a request will also be denied. + * returns DECLINED if everything is ok, otherwise an HTTP response code to + * generate an error page for. + */ +int tls_core_request_check(request_rec *r); + +/** + * A Rustls error happened while processing the connection. Look up an + * error description, determine the apr_status_t to use for it and remember + * this as the last error at tls_conf_conn_t. + */ +apr_status_t tls_core_error(conn_rec *c, rustls_result rr, const char **perrstr); + +/** + * Determine if we handle the TLS for an outgoing connection or not. + * @param c the connection + * @return OK if we handle the TLS, DECLINED otherwise. + */ +int tls_core_setup_outgoing(conn_rec *c); + +#endif /* tls_core_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_filter.c apache2-2.4.52/modules/tls/tls_filter.c --- apache2-2.4.51/modules/tls/tls_filter.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_filter.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,1017 @@ +/* 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 +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "tls_proto.h" +#include "tls_conf.h" +#include "tls_core.h" +#include "tls_filter.h" +#include "tls_util.h" + + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + + +static rustls_io_result tls_read_callback( + void *userdata, unsigned char *buf, size_t n, size_t *out_n) +{ + tls_data_t *d = userdata; + size_t len = d->len > n? n : d->len; + memcpy(buf, d->data, len); + *out_n = len; + return 0; +} + +/** + * Provide TLS encrypted data to the rustls server_session in cc->rustls_connection>. + * + * If fin_tls_bb> holds data, take it from there. Otherwise perform a + * read via the network filters below us into that brigade. + * + * fin_block> determines if we do a blocking read inititally or not. + * If the first read did to not produce enough data, any secondary read is done + * non-blocking. + * + * Had any data been added to cc->rustls_connection>, call its "processing" + * function to handle the added data before leaving. + */ +static apr_status_t read_tls_to_rustls( + tls_filter_ctx_t *fctx, apr_size_t len, apr_read_type_e block, int errors_expected) +{ + tls_data_t d; + apr_size_t rlen; + apr_off_t passed = 0; + rustls_result rr = RUSTLS_RESULT_OK; + int os_err; + apr_status_t rv = APR_SUCCESS; + + if (APR_BRIGADE_EMPTY(fctx->fin_tls_bb)) { + ap_log_error(APLOG_MARK, APLOG_TRACE2, rv, fctx->cc->server, + "read_tls_to_rustls, get data from network, block=%d", block); + rv = ap_get_brigade(fctx->fin_ctx->next, fctx->fin_tls_bb, + AP_MODE_READBYTES, block, (apr_off_t)len); + if (APR_SUCCESS != rv) { + goto cleanup; + } + } + + while (!APR_BRIGADE_EMPTY(fctx->fin_tls_bb) && passed < (apr_off_t)len) { + apr_bucket *b = APR_BRIGADE_FIRST(fctx->fin_tls_bb); + + if (APR_BUCKET_IS_EOS(b)) { + ap_log_error(APLOG_MARK, APLOG_TRACE2, rv, fctx->cc->server, + "read_tls_to_rustls, EOS"); + if (fctx->fin_tls_buffer_bb) { + apr_brigade_cleanup(fctx->fin_tls_buffer_bb); + } + rv = APR_EOF; goto cleanup; + } + + rv = apr_bucket_read(b, (const char**)&d.data, &d.len, block); + if (APR_STATUS_IS_EOF(rv)) { + apr_bucket_delete(b); + continue; + } + else if (APR_SUCCESS != rv) { + goto cleanup; + } + + if (d.len > 0) { + /* got something, do not block on getting more */ + block = APR_NONBLOCK_READ; + + os_err = rustls_connection_read_tls(fctx->cc->rustls_connection, + tls_read_callback, &d, &rlen); + if (os_err) { + rv = APR_FROM_OS_ERROR(os_err); + goto cleanup; + } + + if (fctx->fin_tls_buffer_bb) { + /* we buffer for later replay on the 'real' rustls_connection */ + apr_brigade_write(fctx->fin_tls_buffer_bb, NULL, NULL, (const char*)d.data, rlen); + } + if (rlen >= d.len) { + apr_bucket_delete(b); + } + else { + b->start += (apr_off_t)rlen; + b->length -= rlen; + } + fctx->fin_bytes_in_rustls += (apr_off_t)d.len; + passed += (apr_off_t)rlen; + } + else if (d.len == 0) { + apr_bucket_delete(b); + } + } + + if (passed > 0) { + rr = rustls_connection_process_new_packets(fctx->cc->rustls_connection); + if (rr != RUSTLS_RESULT_OK) goto cleanup; + } + +cleanup: + if (rr != RUSTLS_RESULT_OK) { + rv = APR_ECONNRESET; + if (!errors_expected) { + const char *err_descr = ""; + rv = tls_core_error(fctx->c, rr, &err_descr); + ap_log_cerror(APLOG_MARK, APLOG_WARNING, rv, fctx->c, APLOGNO(10353) + "processing TLS data: [%d] %s", (int)rr, err_descr); + } + } + else if (APR_STATUS_IS_EOF(rv) && passed > 0) { + /* encountering EOF while actually having read sth is a success. */ + rv = APR_SUCCESS; + } + else if (APR_SUCCESS == rv && passed == 0 && fctx->fin_block == APR_NONBLOCK_READ) { + rv = APR_EAGAIN; + } + else { + ap_log_error(APLOG_MARK, APLOG_TRACE2, rv, fctx->cc->server, + "read_tls_to_rustls, passed %ld bytes to rustls", (long)passed); + } + return rv; +} + +static apr_status_t fout_pass_tls_to_net(tls_filter_ctx_t *fctx) +{ + apr_status_t rv = APR_SUCCESS; + + if (!APR_BRIGADE_EMPTY(fctx->fout_tls_bb)) { + rv = ap_pass_brigade(fctx->fout_ctx->next, fctx->fout_tls_bb); + if (APR_SUCCESS == rv && fctx->c->aborted) { + rv = APR_ECONNRESET; + } + fctx->fout_bytes_in_tls_bb = 0; + apr_brigade_cleanup(fctx->fout_tls_bb); + } + return rv; +} + +static apr_status_t fout_pass_all_to_net( + tls_filter_ctx_t *fctx, int flush); + +static apr_status_t filter_abort( + tls_filter_ctx_t *fctx) +{ + apr_status_t rv; + + if (fctx->cc->state != TLS_CONN_ST_DONE) { + if (fctx->cc->state > TLS_CONN_ST_CLIENT_HELLO) { + rustls_connection_send_close_notify(fctx->cc->rustls_connection); + rv = fout_pass_all_to_net(fctx, 1); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, fctx->c, "filter_abort, flushed output"); + } + fctx->c->aborted = 1; + fctx->cc->state = TLS_CONN_ST_DONE; + } + return APR_ECONNABORTED; +} + +static apr_status_t filter_recv_client_hello(tls_filter_ctx_t *fctx) +{ + apr_status_t rv = APR_SUCCESS; + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, fctx->cc->server, + "tls_filter, server=%s, recv client hello", fctx->cc->server->server_hostname); + /* only for incoming connections */ + ap_assert(!fctx->cc->outgoing); + + if (rustls_connection_is_handshaking(fctx->cc->rustls_connection)) { + apr_bucket_brigade *bb_tmp; + + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, fctx->c, "filter_recv_client_hello: start"); + fctx->fin_tls_buffer_bb = apr_brigade_create(fctx->c->pool, fctx->c->bucket_alloc); + do { + if (rustls_connection_wants_read(fctx->cc->rustls_connection)) { + rv = read_tls_to_rustls(fctx, fctx->fin_max_in_rustls, APR_BLOCK_READ, 1); + if (APR_SUCCESS != rv) { + if (fctx->cc->client_hello_seen) { + rv = APR_EAGAIN; /* we got what we needed */ + break; + } + /* Something went wrong before we saw the client hello. + * This is a real error on which we should not continue. */ + goto cleanup; + } + } + /* Notice: we never write here to the client. We just want to inspect + * the client hello. */ + } while (!fctx->cc->client_hello_seen); + + /* We have seen the client hello and selected the server (vhost) to use + * on this connection. Set up the 'real' rustls_connection based on the + * servers 'real' rustls_config. */ + rv = tls_core_conn_seen_client_hello(fctx->c); + if (APR_SUCCESS != rv) goto cleanup; + + bb_tmp = fctx->fin_tls_bb; /* data we have yet to feed to rustls */ + fctx->fin_tls_bb = fctx->fin_tls_buffer_bb; /* data we already fed to the pre_session */ + fctx->fin_tls_buffer_bb = NULL; + APR_BRIGADE_CONCAT(fctx->fin_tls_bb, bb_tmp); /* all tls data from the cleint so far, reloaded */ + apr_brigade_destroy(bb_tmp); + rv = APR_SUCCESS; + } + +cleanup: + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, fctx->c, "filter_recv_client_hello: done"); + return rv; +} + +static apr_status_t filter_send_client_hello(tls_filter_ctx_t *fctx) +{ + apr_status_t rv = APR_SUCCESS; + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, fctx->cc->server, + "tls_filter, server=%s, send client hello", fctx->cc->server->server_hostname); + /* Only for outgoing connections */ + ap_assert(fctx->cc->outgoing); + if (rustls_connection_is_handshaking(fctx->cc->rustls_connection)) { + while (rustls_connection_wants_write(fctx->cc->rustls_connection)) { + /* write flushed, so it really gets out */ + rv = fout_pass_all_to_net(fctx, 1); + if (APR_SUCCESS != rv) goto cleanup; + } + } + +cleanup: + return rv; +} + +/** + * While cc->rustls_connection> indicates that a handshake is ongoing, + * write TLS data from and read network TLS data to the server session. + * + * @return APR_SUCCESS when the handshake is completed + */ +static apr_status_t filter_do_handshake( + tls_filter_ctx_t *fctx) +{ + apr_status_t rv = APR_SUCCESS; + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, fctx->cc->server, + "tls_filter, server=%s, do handshake", fctx->cc->server->server_hostname); + if (rustls_connection_is_handshaking(fctx->cc->rustls_connection)) { + do { + if (rustls_connection_wants_write(fctx->cc->rustls_connection)) { + rv = fout_pass_all_to_net(fctx, 1); + if (APR_SUCCESS != rv) goto cleanup; + } + else if (rustls_connection_wants_read(fctx->cc->rustls_connection)) { + rv = read_tls_to_rustls(fctx, fctx->fin_max_in_rustls, APR_BLOCK_READ, 0); + if (APR_SUCCESS != rv) goto cleanup; + } + } + while (rustls_connection_is_handshaking(fctx->cc->rustls_connection)); + + /* rustls reports the TLS handshake to be done, when it *internally* has + * processed everything into its buffers. Not when the buffers have been + * send to the other side. */ + if (rustls_connection_wants_write(fctx->cc->rustls_connection)) { + rv = fout_pass_all_to_net(fctx, 1); + if (APR_SUCCESS != rv) goto cleanup; + } + } +cleanup: + ap_log_error(APLOG_MARK, APLOG_TRACE2, rv, fctx->cc->server, + "tls_filter, server=%s, handshake done", fctx->cc->server->server_hostname); + if (APR_SUCCESS != rv) { + if (fctx->cc->last_error_descr) { + ap_log_cerror(APLOG_MARK, APLOG_INFO, APR_ECONNABORTED, fctx->c, APLOGNO(10354) + "handshake failed: %s", fctx->cc->last_error_descr); + } + } + return rv; +} + +static apr_status_t progress_tls_atleast_to(tls_filter_ctx_t *fctx, tls_conn_state_t state) +{ + apr_status_t rv = APR_SUCCESS; + + /* handle termination immediately */ + if (state == TLS_CONN_ST_DONE) { + rv = APR_ECONNABORTED; + goto cleanup; + } + + if (state > TLS_CONN_ST_CLIENT_HELLO + && TLS_CONN_ST_CLIENT_HELLO == fctx->cc->state) { + rv = tls_core_conn_init(fctx->c); + if (APR_SUCCESS != rv) goto cleanup; + + if (fctx->cc->outgoing) { + rv = filter_send_client_hello(fctx); + } + else { + rv = filter_recv_client_hello(fctx); + } + if (APR_SUCCESS != rv) goto cleanup; + fctx->cc->state = TLS_CONN_ST_HANDSHAKE; + } + + if (state > TLS_CONN_ST_HANDSHAKE + && TLS_CONN_ST_HANDSHAKE== fctx->cc->state) { + rv = filter_do_handshake(fctx); + if (APR_SUCCESS != rv) goto cleanup; + rv = tls_core_conn_post_handshake(fctx->c); + if (APR_SUCCESS != rv) goto cleanup; + fctx->cc->state = TLS_CONN_ST_TRAFFIC; + } + + if (state < fctx->cc->state) { + rv = APR_ECONNABORTED; + } + +cleanup: + if (APR_SUCCESS != rv) { + filter_abort(fctx); /* does change the state itself */ + } + return rv; +} + +/** + * The connection filter converting TLS encrypted network data into plain, unencrpyted + * traffic data to be processed by filters above it in the filter chain. + * + * Unfortunately, Apache's filter infrastructure places a heavy implementation + * complexity on its input filters for the various use cases its HTTP/1.x parser + * (mainly) finds convenient: + * + * the bucket brigade to place the data into. + * one of + * - AP_MODE_READBYTES: just add up to data into + * - AP_MODE_GETLINE: make a best effort to get data up to and including a CRLF. + * it can be less, but not more t than that. + * - AP_MODE_EATCRLF: never used, we puke on it. + * - AP_MODE_SPECULATIVE: read data without consuming it. + * - AP_MODE_EXHAUSTIVE: never used, we puke on it. + * - AP_MODE_INIT: called once on a connection. needs to pass down the filter + * chain, giving every filter the change to "INIT". + * do blocking or non-blocking reads + * max amount of data to add to , seems to be 0 for GETLINE + */ +static apr_status_t filter_conn_input( + ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode, + apr_read_type_e block, apr_off_t readbytes) +{ + tls_filter_ctx_t *fctx = f->ctx; + apr_status_t rv = APR_SUCCESS; + apr_off_t passed = 0, nlen; + rustls_result rr = RUSTLS_RESULT_OK; + apr_size_t in_buf_len; + char *in_buf = NULL; + + fctx->fin_block = block; + if (f->c->aborted) { + rv = filter_abort(fctx); goto cleanup; + } + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, fctx->cc->server, + "tls_filter_conn_input, server=%s, mode=%d, block=%d, readbytes=%ld", + fctx->cc->server->server_hostname, mode, block, (long)readbytes); + + rv = progress_tls_atleast_to(fctx, TLS_CONN_ST_TRAFFIC); + if (APR_SUCCESS != rv) goto cleanup; /* this also leaves on APR_EAGAIN */ + + if (!fctx->cc->rustls_connection) { + return ap_get_brigade(f->next, bb, mode, block, readbytes); + } + +#if AP_MODULE_MAGIC_AT_LEAST(20200420, 1) + ap_filter_reinstate_brigade(f, fctx->fin_plain_bb, NULL); +#endif + + if (AP_MODE_INIT == mode) { + /* INIT is used to trigger the handshake, it does not return any traffic data. */ + goto cleanup; + } + + /* If we have nothing buffered, try getting more input. + * a) ask rustls_connection for decrypted data, if it has any. + * Note that only full records can be decrypted. We might have + * written TLS data to the session, but that does not mean it + * can give unencryted data out again. + * b) read TLS bytes from the network and feed them to the rustls session. + * c) go back to a) if b) added data. + */ + while (APR_BRIGADE_EMPTY(fctx->fin_plain_bb)) { + apr_size_t rlen = 0; + apr_bucket *b; + + if (fctx->fin_bytes_in_rustls > 0) { + in_buf_len = APR_BUCKET_BUFF_SIZE; + in_buf = ap_calloc(in_buf_len, sizeof(char)); + rr = rustls_connection_read(fctx->cc->rustls_connection, + (unsigned char*)in_buf, in_buf_len, &rlen); + if (rr == RUSTLS_RESULT_PLAINTEXT_EMPTY) { + rr = RUSTLS_RESULT_OK; + rlen = 0; + } + if (rr != RUSTLS_RESULT_OK) goto cleanup; + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, fctx->c, + "tls_filter_conn_input: got %ld plain bytes from rustls", (long)rlen); + if (rlen > 0) { + b = apr_bucket_heap_create(in_buf, rlen, free, fctx->c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(fctx->fin_plain_bb, b); + } + else { + free(in_buf); + } + in_buf = NULL; + } + if (rlen == 0) { + /* that did not produce anything either. try getting more + * TLS data from the network into the rustls session. */ + fctx->fin_bytes_in_rustls = 0; + rv = read_tls_to_rustls(fctx, fctx->fin_max_in_rustls, block, 0); + if (APR_SUCCESS != rv) goto cleanup; /* this also leave on APR_EAGAIN */ + } + } + + if (AP_MODE_GETLINE == mode) { + if (readbytes <= 0) readbytes = HUGE_STRING_LEN; + rv = tls_util_brigade_split_line(bb, fctx->fin_plain_bb, block, readbytes, &nlen); + if (APR_SUCCESS != rv) goto cleanup; + passed += nlen; + } + else if (AP_MODE_READBYTES == mode) { + ap_assert(readbytes > 0); + rv = tls_util_brigade_transfer(bb, fctx->fin_plain_bb, readbytes, &nlen); + if (APR_SUCCESS != rv) goto cleanup; + passed += nlen; + } + else if (AP_MODE_SPECULATIVE == mode) { + ap_assert(readbytes > 0); + rv = tls_util_brigade_copy(bb, fctx->fin_plain_bb, readbytes, &nlen); + if (APR_SUCCESS != rv) goto cleanup; + passed += nlen; + } + else if (AP_MODE_EXHAUSTIVE == mode) { + /* return all we have */ + APR_BRIGADE_CONCAT(bb, fctx->fin_plain_bb); + } + else { + /* We do support any other mode */ + rv = APR_ENOTIMPL; goto cleanup; + } + + fout_pass_all_to_net(fctx, 0); + +cleanup: + if (NULL != in_buf) free(in_buf); + + if (APLOGctrace3(fctx->c)) { + tls_util_bb_log(fctx->c, APLOG_TRACE3, "tls_input, fctx->fin_plain_bb", fctx->fin_plain_bb); + tls_util_bb_log(fctx->c, APLOG_TRACE3, "tls_input, bb", bb); + } + if (rr != RUSTLS_RESULT_OK) { + const char *err_descr = ""; + + rv = tls_core_error(fctx->c, rr, &err_descr); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, fctx->c, APLOGNO(10355) + "tls_filter_conn_input: [%d] %s", (int)rr, err_descr); + } + else if (APR_STATUS_IS_EAGAIN(rv)) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, rv, fctx->c, + "tls_filter_conn_input: no data available"); + } + else if (APR_SUCCESS != rv) { + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, fctx->c, APLOGNO(10356) + "tls_filter_conn_input"); + } + else { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, fctx->c, + "tls_filter_conn_input: passed %ld bytes", (long)passed); + } + +#if AP_MODULE_MAGIC_AT_LEAST(20200420, 1) + if (APR_SUCCESS == rv || APR_STATUS_IS_EAGAIN(rv)) { + ap_filter_setaside_brigade(f, fctx->fin_plain_bb); + } +#endif + return rv; +} + +static rustls_io_result tls_write_callback( + void *userdata, const unsigned char *buf, size_t n, size_t *out_n) +{ + tls_filter_ctx_t *fctx = userdata; + apr_status_t rv; + + if ((apr_off_t)n + fctx->fout_bytes_in_tls_bb >= (apr_off_t)fctx->fout_auto_flush_size) { + apr_bucket *b = apr_bucket_transient_create((const char*)buf, n, fctx->fout_tls_bb->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(fctx->fout_tls_bb, b); + fctx->fout_bytes_in_tls_bb += (apr_off_t)n; + rv = fout_pass_tls_to_net(fctx); + *out_n = n; + } + else { + rv = apr_brigade_write(fctx->fout_tls_bb, NULL, NULL, (const char*)buf, n); + if (APR_SUCCESS != rv) goto cleanup; + fctx->fout_bytes_in_tls_bb += (apr_off_t)n; + *out_n = n; + } +cleanup: + ap_log_error(APLOG_MARK, APLOG_TRACE5, rv, fctx->cc->server, + "tls_write_callback: %ld bytes", (long)n); + return APR_TO_OS_ERROR(rv); +} + +static rustls_io_result tls_write_vectored_callback( + void *userdata, const rustls_iovec *riov, size_t count, size_t *out_n) +{ + tls_filter_ctx_t *fctx = userdata; + const struct iovec *iov = (const struct iovec*)riov; + apr_status_t rv; + size_t i, n = 0; + apr_bucket *b; + + for (i = 0; i < count; ++i, ++iov) { + b = apr_bucket_transient_create((const char*)iov->iov_base, iov->iov_len, fctx->fout_tls_bb->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(fctx->fout_tls_bb, b); + n += iov->iov_len; + } + fctx->fout_bytes_in_tls_bb += (apr_off_t)n; + rv = fout_pass_tls_to_net(fctx); + *out_n = n; + ap_log_error(APLOG_MARK, APLOG_TRACE5, rv, fctx->cc->server, + "tls_write_vectored_callback: %ld bytes in %d slices", (long)n, (int)count); + return APR_TO_OS_ERROR(rv); +} + +#define TLS_WRITE_VECTORED 1 +/** + * Read TLS encrypted data from cc->rustls_connection> and pass it down + * Apache's filter chain to the network. + * + * For now, we always FLUSH the data, since that is what we need during handshakes. + */ +static apr_status_t fout_pass_rustls_to_tls(tls_filter_ctx_t *fctx) +{ + apr_status_t rv = APR_SUCCESS; + + if (rustls_connection_wants_write(fctx->cc->rustls_connection)) { + size_t dlen; + int os_err; + + if (TLS_WRITE_VECTORED) { + do { + os_err = rustls_connection_write_tls_vectored( + fctx->cc->rustls_connection, tls_write_vectored_callback, fctx, &dlen); + if (os_err) { + rv = APR_FROM_OS_ERROR(os_err); + goto cleanup; + } + } + while (rustls_connection_wants_write(fctx->cc->rustls_connection)); + } + else { + do { + os_err = rustls_connection_write_tls( + fctx->cc->rustls_connection, tls_write_callback, fctx, &dlen); + if (os_err) { + rv = APR_FROM_OS_ERROR(os_err); + goto cleanup; + } + } + while (rustls_connection_wants_write(fctx->cc->rustls_connection)); + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, rv, fctx->c, + "fout_pass_rustls_to_tls, %ld bytes ready for network", (long)fctx->fout_bytes_in_tls_bb); + fctx->fout_bytes_in_rustls = 0; + } + } +cleanup: + return rv; +} + +static apr_status_t fout_pass_buf_to_rustls( + tls_filter_ctx_t *fctx, const char *buf, apr_size_t len) +{ + apr_status_t rv = APR_SUCCESS; + rustls_result rr = RUSTLS_RESULT_OK; + apr_size_t written; + + while (len) { + /* check if we will exceed the limit of data in rustls. + * rustls does not guarantuee that it will accept all data, so we + * iterate and flush when needed. */ + if (fctx->fout_bytes_in_rustls + (apr_off_t)len > (apr_off_t)fctx->fout_max_in_rustls) { + rv = fout_pass_rustls_to_tls(fctx); + if (APR_SUCCESS != rv) goto cleanup; + } + + rr = rustls_connection_write(fctx->cc->rustls_connection, + (const unsigned char*)buf, len, &written); + if (rr != RUSTLS_RESULT_OK) goto cleanup; + ap_assert(written <= len); + fctx->fout_bytes_in_rustls += (apr_off_t)written; + buf += written; + len -= written; + if (written == 0) { + rv = APR_EAGAIN; + ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, fctx->c, APLOGNO(10357) + "fout_pass_buf_to_rustls: not read by rustls at all"); + goto cleanup; + } + } +cleanup: + if (rr != RUSTLS_RESULT_OK) { + const char *err_descr = ""; + rv = tls_core_error(fctx->c, rr, &err_descr); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, fctx->c, APLOGNO(10358) + "fout_pass_buf_to_tls to rustls: [%d] %s", (int)rr, err_descr); + } + return rv; +} + +static apr_status_t fout_pass_all_to_tls(tls_filter_ctx_t *fctx) +{ + apr_status_t rv = APR_SUCCESS; + + if (fctx->fout_buf_plain_len) { + rv = fout_pass_buf_to_rustls(fctx, fctx->fout_buf_plain, fctx->fout_buf_plain_len); + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, fctx->c, + "fout_pass_all_to_tls: %ld plain bytes written to rustls", + (long)fctx->fout_buf_plain_len); + if (APR_SUCCESS != rv) goto cleanup; + fctx->fout_buf_plain_len = 0; + } + + rv = fout_pass_rustls_to_tls(fctx); +cleanup: + return rv; +} + +static apr_status_t fout_pass_all_to_net(tls_filter_ctx_t *fctx, int flush) +{ + apr_status_t rv; + + rv = fout_pass_all_to_tls(fctx); + if (APR_SUCCESS != rv) goto cleanup; + if (flush) { + apr_bucket *b = apr_bucket_flush_create(fctx->fout_tls_bb->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(fctx->fout_tls_bb, b); + } + rv = fout_pass_tls_to_net(fctx); +cleanup: + return rv; +} + +static apr_status_t fout_add_bucket_to_plain(tls_filter_ctx_t *fctx, apr_bucket *b) +{ + const char *data; + apr_size_t dlen, buf_remain; + apr_status_t rv = APR_SUCCESS; + + ap_assert((apr_size_t)-1 != b->length); + if (b->length == 0) { + apr_bucket_delete(b); + goto cleanup; + } + + buf_remain = fctx->fout_buf_plain_size - fctx->fout_buf_plain_len; + if (buf_remain == 0) { + rv = fout_pass_all_to_tls(fctx); + if (APR_SUCCESS != rv) goto cleanup; + buf_remain = fctx->fout_buf_plain_size - fctx->fout_buf_plain_len; + ap_assert(buf_remain > 0); + } + if (b->length > buf_remain) { + apr_bucket_split(b, buf_remain); + } + rv = apr_bucket_read(b, &data, &dlen, APR_BLOCK_READ); + if (APR_SUCCESS != rv) goto cleanup; + /*if (dlen > TLS_PREF_PLAIN_CHUNK_SIZE)*/ + ap_assert(dlen <= buf_remain); + memcpy(fctx->fout_buf_plain + fctx->fout_buf_plain_len, data, dlen); + fctx->fout_buf_plain_len += dlen; + apr_bucket_delete(b); +cleanup: + return rv; +} + +static apr_status_t fout_add_bucket_to_tls(tls_filter_ctx_t *fctx, apr_bucket *b) +{ + apr_status_t rv; + + rv = fout_pass_all_to_tls(fctx); + if (APR_SUCCESS != rv) goto cleanup; + APR_BUCKET_REMOVE(b); + APR_BRIGADE_INSERT_TAIL(fctx->fout_tls_bb, b); + if (AP_BUCKET_IS_EOC(b)) { + rustls_connection_send_close_notify(fctx->cc->rustls_connection); + fctx->cc->state = TLS_CONN_ST_NOTIFIED; + rv = fout_pass_rustls_to_tls(fctx); + if (APR_SUCCESS != rv) goto cleanup; + } +cleanup: + return rv; +} + +static apr_status_t fout_append_plain(tls_filter_ctx_t *fctx, apr_bucket *b) +{ + const char *data; + apr_size_t dlen, buf_remain; + rustls_result rr = RUSTLS_RESULT_OK; + apr_status_t rv = APR_SUCCESS; + const char *lbuf = NULL; + int flush = 0; + + if (b) { + /* if our plain buffer is full, now is a good time to flush it. */ + buf_remain = fctx->fout_buf_plain_size - fctx->fout_buf_plain_len; + if (buf_remain == 0) { + rv = fout_pass_all_to_tls(fctx); + if (APR_SUCCESS != rv) goto cleanup; + buf_remain = fctx->fout_buf_plain_size - fctx->fout_buf_plain_len; + ap_assert(buf_remain > 0); + } + + /* Resolve any indeterminate bucket to a "real" one by reading it. */ + if ((apr_size_t)-1 == b->length) { + rv = apr_bucket_read(b, &data, &dlen, APR_BLOCK_READ); + if (APR_STATUS_IS_EOF(rv)) { + apr_bucket_delete(b); + goto maybe_flush; + } + else if (APR_SUCCESS != rv) goto cleanup; + } + /* Now `b` is the bucket that we need to append and consume */ + if (APR_BUCKET_IS_METADATA(b)) { + /* outgoing buckets: + * [PLAINDATA META PLAINDATA META META] + * need to become: + * [TLSDATA META TLSDATA META META] + * because we need to send the meta buckets down the + * network filters. */ + rv = fout_add_bucket_to_tls(fctx, b); + flush = 1; + } + else if (b->length == 0) { + apr_bucket_delete(b); + } + else if (b->length < 1024 || fctx->fout_buf_plain_len > 0) { + /* we want to buffer small chunks to create larger TLS records and + * not leak security relevant information. So, we buffer small + * chunks and add (parts of) later, larger chunks if the plain + * buffer contains data. */ + rv = fout_add_bucket_to_plain(fctx, b); + if (APR_SUCCESS != rv) goto cleanup; + } + else { + /* we have a large chunk and our plain buffer is empty, write it + * directly into rustls. */ +#define TLS_FILE_CHUNK_SIZE 4 * TLS_PREF_PLAIN_CHUNK_SIZE + if (b->length > TLS_FILE_CHUNK_SIZE) { + apr_bucket_split(b, TLS_FILE_CHUNK_SIZE); + } + + if (APR_BUCKET_IS_FILE(b) + && (lbuf = malloc(b->length))) { + /* A file bucket is a most wonderous thing. Since the dawn of time, + * it has been subject to many optimizations for efficient handling + * of large data in the server: + * - unless one reads from it, it will just consist of a file handle + * and the offset+length information. + * - a apr_bucket_read() will transform itself to a bucket holding + * some 8000 bytes of data (APR_BUCKET_BUFF_SIZE), plus a following + * bucket that continues to hold the file handle and updated offsets/length + * information. + * Using standard bucket brigade handling, one would send 8000 bytes + * chunks to the network and that is fine for many occasions. + * - to have improved performance, the http: network handler takes + * the file handle directly and uses sendfile() when the OS supports it. + * - But there is not sendfile() for TLS (netflix did some experiments). + * So. + * rustls will try to collect max length traffic data into ont TLS + * message, but it can only work with what we gave it. If we give it buffers + * that fit what it wants to assemble already, its work is much easier. + * + * We can read file buckets in large chunks than APR_BUCKET_BUFF_SIZE, + * with a bit of knowledge about how they work. + */ + apr_bucket_file *f = (apr_bucket_file *)b->data; + apr_file_t *fd = f->fd; + apr_off_t offset = b->start; + + dlen = b->length; + rv = apr_file_seek(fd, APR_SET, &offset); + if (APR_SUCCESS != rv) goto cleanup; + rv = apr_file_read(fd, (void*)lbuf, &dlen); + if (APR_SUCCESS != rv && !APR_STATUS_IS_EOF(rv)) goto cleanup; + rv = fout_pass_buf_to_rustls(fctx, lbuf, dlen); + if (APR_SUCCESS != rv) goto cleanup; + apr_bucket_delete(b); + } + else { + rv = apr_bucket_read(b, &data, &dlen, APR_BLOCK_READ); + if (APR_SUCCESS != rv) goto cleanup; + rv = fout_pass_buf_to_rustls(fctx, data, dlen); + if (APR_SUCCESS != rv) goto cleanup; + apr_bucket_delete(b); + } + } + } + +maybe_flush: + if (flush) { + rv = fout_pass_all_to_net(fctx, 1); + if (APR_SUCCESS != rv) goto cleanup; + } + +cleanup: + if (lbuf) free((void*)lbuf); + if (rr != RUSTLS_RESULT_OK) { + const char *err_descr = ""; + rv = tls_core_error(fctx->c, rr, &err_descr); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, fctx->c, APLOGNO(10359) + "write_bucket_to_rustls: [%d] %s", (int)rr, err_descr); + } + return rv; +} + +/** + * The connection filter converting plain, unencrypted traffic data into TLS + * encrypted bytes and send the down the Apache filter chain out to the network. + * + * the data to send, including "meta data" such as FLUSH indicators + * to force filters to write any data set aside (an apache term for + * 'buffering'). + * The buckets in need to be completely consumed, e.g. will be + * empty on a successful return. but unless FLUSHed, filters may hold + * buckets back internally, for various reasons. However they always + * need to be processed in the order they arrive. + */ +static apr_status_t filter_conn_output( + ap_filter_t *f, apr_bucket_brigade *bb) +{ + tls_filter_ctx_t *fctx = f->ctx; + apr_status_t rv = APR_SUCCESS; + rustls_result rr = RUSTLS_RESULT_OK; + + if (f->c->aborted) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, fctx->c, + "tls_filter_conn_output: aborted conn"); + apr_brigade_cleanup(bb); + rv = APR_ECONNABORTED; goto cleanup; + } + + rv = progress_tls_atleast_to(fctx, TLS_CONN_ST_TRAFFIC); + if (APR_SUCCESS != rv) goto cleanup; /* this also leaves on APR_EAGAIN */ + + if (fctx->cc->state == TLS_CONN_ST_DONE) { + /* have done everything, just pass through */ + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, 0, fctx->c, + "tls_filter_conn_output: tls session is already done"); + rv = ap_pass_brigade(f->next, bb); + goto cleanup; + } + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, fctx->cc->server, + "tls_filter_conn_output, server=%s", fctx->cc->server->server_hostname); + if (APLOGctrace5(fctx->c)) { + tls_util_bb_log(fctx->c, APLOG_TRACE5, "filter_conn_output", bb); + } + + while (!APR_BRIGADE_EMPTY(bb)) { + rv = fout_append_plain(fctx, APR_BRIGADE_FIRST(bb)); + if (APR_SUCCESS != rv) goto cleanup; + } + + if (APLOGctrace5(fctx->c)) { + tls_util_bb_log(fctx->c, APLOG_TRACE5, "filter_conn_output, processed plain", bb); + tls_util_bb_log(fctx->c, APLOG_TRACE5, "filter_conn_output, tls", fctx->fout_tls_bb); + } + +cleanup: + if (rr != RUSTLS_RESULT_OK) { + const char *err_descr = ""; + rv = tls_core_error(fctx->c, rr, &err_descr); + ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, fctx->c, APLOGNO(10360) + "tls_filter_conn_output: [%d] %s", (int)rr, err_descr); + } + else { + ap_log_cerror(APLOG_MARK, APLOG_TRACE2, rv, fctx->c, + "tls_filter_conn_output: done"); + } + return rv; +} + +int tls_filter_pre_conn_init(conn_rec *c) +{ + tls_conf_conn_t *cc; + tls_filter_ctx_t *fctx; + + if (OK != tls_core_pre_conn_init(c)) { + return DECLINED; + } + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, c->base_server, + "tls_filter_pre_conn_init on %s", c->base_server->server_hostname); + + cc = tls_conf_conn_get(c); + ap_assert(cc); + + fctx = apr_pcalloc(c->pool, sizeof(*fctx)); + fctx->c = c; + fctx->cc = cc; + cc->filter_ctx = fctx; + + /* a bit tricky: registering out filters returns the ap_filter_t* + * that it created for it. The ->next field points always + * to the filter "below" our filter. That will be other registered + * filters and last, but not least, the network filter on the socket. + * + * Therefore, wenn we need to read/write TLS data during handshake, we can + * pass the data to/call on ->next- Since ->next can change during the setup of + * a connections (other modules register also sth.), we keep the ap_filter_t* + * returned here, since httpd core will update the ->next whenever someone + * adds a filter or removes one. This can potentially happen all the time. + */ + fctx->fin_ctx = ap_add_input_filter(TLS_FILTER_RAW, fctx, NULL, c); + fctx->fin_tls_bb = apr_brigade_create(c->pool, c->bucket_alloc); + fctx->fin_tls_buffer_bb = NULL; + fctx->fin_plain_bb = apr_brigade_create(c->pool, c->bucket_alloc); + fctx->fout_ctx = ap_add_output_filter(TLS_FILTER_RAW, fctx, NULL, c); + fctx->fout_tls_bb = apr_brigade_create(c->pool, c->bucket_alloc); + fctx->fout_buf_plain_size = APR_BUCKET_BUFF_SIZE; + fctx->fout_buf_plain = apr_pcalloc(c->pool, fctx->fout_buf_plain_size); + fctx->fout_buf_plain_len = 0; + + /* Let the filters have 2 max-length TLS Messages in the rustls buffers. + * The effects we would like to achieve here are: + * 1. pass data out, so that every bucket becomes its own TLS message. + * This hides, if possible, the length of response parts. + * If we give rustls enough plain data, it will use the max TLS message + * size and things are more hidden. But we can only write what the application + * or protocol gives us. + * 2. max length records result in less overhead for all layers involved. + * 3. a TLS message from the client can only be decrypted when it has + * completely arrived. If we provide rustls with enough data (if the + * network has it for us), it should always be able to decrypt at least + * one TLS message and we have plain bytes to forward to the protocol + * handler. + */ + fctx->fin_max_in_rustls = 4 * TLS_REC_MAX_SIZE; + fctx->fout_max_in_rustls = 4 * TLS_PREF_PLAIN_CHUNK_SIZE; + fctx->fout_auto_flush_size = 2 * TLS_REC_MAX_SIZE; + + return OK; +} + +void tls_filter_conn_init(conn_rec *c) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + + if (cc && cc->filter_ctx && !cc->outgoing) { + /* We are one in a row of hooks that - possibly - want to process this + * connection, the (HTTP) protocol handlers among them. + * + * For incoming connections, we need to select the protocol to use NOW, + * so that the later protocol handlers do the right thing. + * Send an INIT down the input filter chain to trigger the TLS handshake, + * which will select a protocol via ALPN. */ + apr_bucket_brigade* temp; + + ap_log_error(APLOG_MARK, APLOG_TRACE2, 0, c->base_server, + "tls_filter_conn_init on %s, triggering handshake", c->base_server->server_hostname); + temp = apr_brigade_create(c->pool, c->bucket_alloc); + ap_get_brigade(c->input_filters, temp, AP_MODE_INIT, APR_BLOCK_READ, 0); + apr_brigade_destroy(temp); + } +} + +void tls_filter_register( + apr_pool_t *pool) +{ + (void)pool; + ap_register_input_filter(TLS_FILTER_RAW, filter_conn_input, NULL, AP_FTYPE_CONNECTION + 5); + ap_register_output_filter(TLS_FILTER_RAW, filter_conn_output, NULL, AP_FTYPE_CONNECTION + 5); +} \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_filter.h apache2-2.4.52/modules/tls/tls_filter.h --- apache2-2.4.51/modules/tls/tls_filter.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_filter.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,90 @@ +/* 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 tls_filter_h +#define tls_filter_h + +#define TLS_FILTER_RAW "TLS raw" + +typedef struct tls_filter_ctx_t tls_filter_ctx_t; + +struct tls_filter_ctx_t { + conn_rec *c; /* connection this context is for */ + tls_conf_conn_t *cc; /* tls module configuration of connection */ + + ap_filter_t *fin_ctx; /* Apache's entry into the input filter chain */ + apr_bucket_brigade *fin_tls_bb; /* TLS encrypted, incoming network data */ + apr_bucket_brigade *fin_tls_buffer_bb; /* TLS encrypted, incoming network data buffering */ + apr_bucket_brigade *fin_plain_bb; /* decrypted, incoming traffic data */ + apr_off_t fin_bytes_in_rustls; /* # of input TLS bytes in rustls_connection */ + apr_read_type_e fin_block; /* Do we block on input reads or not? */ + + ap_filter_t *fout_ctx; /* Apache's entry into the output filter chain */ + char *fout_buf_plain; /* a buffer to collect plain bytes for output */ + apr_size_t fout_buf_plain_len; /* the amount of bytes in the buffer */ + apr_size_t fout_buf_plain_size; /* the total size of the buffer */ + apr_bucket_brigade *fout_tls_bb; /* TLS encrypted, outgoing network data */ + apr_off_t fout_bytes_in_rustls; /* # of output plain bytes in rustls_connection */ + apr_off_t fout_bytes_in_tls_bb; /* # of output tls bytes in our brigade */ + + apr_size_t fin_max_in_rustls; /* how much tls we like to read into rustls */ + apr_size_t fout_max_in_rustls; /* how much plain bytes we like in rustls */ + apr_size_t fout_max_bucket_size; /* how large bucket chunks we handle before splitting */ + apr_size_t fout_auto_flush_size; /* on much outoing TLS data we flush to network */ +}; + +/** + * Register the in-/output filters for converting TLS to application data and vice versa. + */ +void tls_filter_register(apr_pool_t *pool); + +/** + * Initialize the pre_connection state. Install all filters. + * + * @return OK if TLS on connection is enabled, DECLINED otherwise + */ +int tls_filter_pre_conn_init(conn_rec *c); + +/** + * Initialize the connection for use, perform the TLS handshake. + * + * Any failure will lead to the connection becoming aborted. + */ +void tls_filter_conn_init(conn_rec *c); + +/* + * says: + * "For large data transfers, small record sizes can materially affect performance." + * and + * "For TLS 1.2 and earlier, that limit is 2^14 octets. TLS 1.3 uses a limit of + * 2^14+1 octets." + * Maybe future TLS versions will raise that value, but for now these limits stand. + * Given the choice, we would like rustls to provide traffic data in those chunks. + */ +#define TLS_PREF_PLAIN_CHUNK_SIZE (16384) + +/* + * When retrieving TLS chunks for rustls, or providing it a buffer + * to pass out TLS chunks (which are then bucketed and written to the + * network filters), we ideally would do that in multiples of TLS + * messages sizes. + * That would be TLS_PREF_WRITE_SIZE + TLS Message Overhead, such as + * MAC and padding. But these vary with protocol and ciphers chosen, so + * we define something which should be "large enough", but not overly so. + */ +#define TLS_REC_EXTRA (1024) +#define TLS_REC_MAX_SIZE (TLS_PREF_PLAIN_CHUNK_SIZE + TLS_REC_EXTRA) + +#endif /* tls_filter_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_ocsp.c apache2-2.4.52/modules/tls/tls_ocsp.c --- apache2-2.4.51/modules/tls/tls_ocsp.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_ocsp.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,120 @@ +/* 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 +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include "tls_cert.h" +#include "tls_conf.h" +#include "tls_core.h" +#include "tls_proto.h" +#include "tls_ocsp.h" + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + + +static int prime_cert( + void *userdata, server_rec *s, const char *cert_id, const char *cert_pem, + const rustls_certified_key *certified_key) +{ + apr_pool_t *p = userdata; + apr_status_t rv; + + (void)certified_key; + rv = ap_ssl_ocsp_prime(s, p, cert_id, strlen(cert_id), cert_pem); + ap_log_error(APLOG_MARK, APLOG_TRACE1, rv, s, "ocsp prime of cert [%s] from %s", + cert_id, s->server_hostname); + return 1; +} + +apr_status_t tls_ocsp_prime_certs(tls_conf_global_t *gc, apr_pool_t *p, server_rec *s) +{ + ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, s, "ocsp priming of %d certs", + (int)tls_cert_reg_count(gc->cert_reg)); + tls_cert_reg_do(prime_cert, p, gc->cert_reg); + return APR_SUCCESS; +} + +typedef struct { + conn_rec *c; + const rustls_certified_key *key_in; + const rustls_certified_key *key_out; +} ocsp_copy_ctx_t; + +static void ocsp_clone_key(const unsigned char *der, apr_size_t der_len, void *userdata) +{ + ocsp_copy_ctx_t *ctx = userdata; + rustls_slice_bytes rslice; + rustls_result rr; + + rslice.data = der; + rslice.len = der_len; + + rr = rustls_certified_key_clone_with_ocsp(ctx->key_in, der_len? &rslice : NULL, &ctx->key_out); + if (RUSTLS_RESULT_OK != rr) { + const char *err_descr = NULL; + apr_status_t rv = tls_util_rustls_error(ctx->c->pool, rr, &err_descr); + ap_log_cerror(APLOG_MARK, APLOG_ERR, rv, ctx->c, APLOGNO(10362) + "Failed add OCSP data to certificate: [%d] %s", (int)rr, err_descr); + } + else { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, ctx->c, + "provided %ld bytes of ocsp response DER data to key.", (long)der_len); + } +} + +apr_status_t tls_ocsp_update_key( + conn_rec *c, const rustls_certified_key *certified_key, + const rustls_certified_key **pkey_out) +{ + tls_conf_conn_t *cc = tls_conf_conn_get(c); + tls_conf_server_t *sc; + const char *key_id; + apr_status_t rv = APR_SUCCESS; + ocsp_copy_ctx_t ctx; + + assert(cc); + assert(cc->server); + sc = tls_conf_server_get(cc->server); + key_id = tls_cert_reg_get_id(sc->global->cert_reg, certified_key); + if (!key_id) { + rv = APR_ENOENT; + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, rv, c, "certified key not registered"); + goto cleanup; + } + + ctx.c = c; + ctx.key_in = certified_key; + ctx.key_out = NULL; + rv = ap_ssl_ocsp_get_resp(cc->server, c, key_id, strlen(key_id), ocsp_clone_key, &ctx); + if (APR_SUCCESS != rv) { + ap_log_cerror(APLOG_MARK, APLOG_TRACE1, rv, c, + "ocsp response not available for cert %s", key_id); + } + +cleanup: + *pkey_out = (APR_SUCCESS == rv)? ctx.key_out : NULL; + return rv; +} diff -Nru apache2-2.4.51/modules/tls/tls_ocsp.h apache2-2.4.52/modules/tls/tls_ocsp.h --- apache2-2.4.51/modules/tls/tls_ocsp.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_ocsp.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,47 @@ +/* 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 tls_ocsp_h +#define tls_ocsp_h + +/** + * Prime the collected certified keys for OCSP response provisioning (aka. Stapling). + * + * To be called in the post-config phase of the server before connections are handled. + * @param gc the global module configuration with the certified_key registry + * @param p the pool to use for allocations + * @param s the base server record + */ +apr_status_t tls_ocsp_prime_certs(tls_conf_global_t *gc, apr_pool_t *p, server_rec *s); + +/** + * Provide the OCSP response data for the certified_key into the offered buffer, + * so available. + * If not data is available `out_n` is set to 0. Same, if the offered buffer + * is not large enough to hold the complete response. + * If OCSP response DER data is copied, the number of copied bytes is given in `out_n`. + * + * Note that only keys that have been primed initially will have OCSP data available. + * @param c the current connection + * @param certified_key the key to get the OCSP response data for + * @param buf a buffer which can hold up to `buf_len` bytes + * @param buf_len the length of `buf` + * @param out_n the number of OCSP response DER bytes copied or 0. + */ +apr_status_t tls_ocsp_update_key( + conn_rec *c, const rustls_certified_key *certified_key, + const rustls_certified_key **key_out); + +#endif /* tls_ocsp_h */ diff -Nru apache2-2.4.51/modules/tls/tls_proto.c apache2-2.4.52/modules/tls/tls_proto.c --- apache2-2.4.51/modules/tls/tls_proto.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_proto.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,603 @@ +/* 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 +#include +#include + +#include +#include +#include +#include + +#include + +#include "tls_proto.h" +#include "tls_conf.h" +#include "tls_util.h" + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + + + +/** + * Known cipher as registered in + * + */ +static tls_cipher_t KNOWN_CIPHERS[] = { + { 0x0000, "TLS_NULL_WITH_NULL_NULL", NULL }, + { 0x0001, "TLS_RSA_WITH_NULL_MD5", NULL }, + { 0x0002, "TLS_RSA_WITH_NULL_SHA", NULL }, + { 0x0003, "TLS_RSA_EXPORT_WITH_RC4_40_MD5", NULL }, + { 0x0004, "TLS_RSA_WITH_RC4_128_MD5", NULL }, + { 0x0005, "TLS_RSA_WITH_RC4_128_SHA", NULL }, + { 0x0006, "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", NULL }, + { 0x0007, "TLS_RSA_WITH_IDEA_CBC_SHA", NULL }, + { 0x0008, "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", NULL }, + { 0x0009, "TLS_RSA_WITH_DES_CBC_SHA", NULL }, + { 0x000a, "TLS_RSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x000b, "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", NULL }, + { 0x000c, "TLS_DH_DSS_WITH_DES_CBC_SHA", NULL }, + { 0x000d, "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x000e, "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", NULL }, + { 0x000f, "TLS_DH_RSA_WITH_DES_CBC_SHA", NULL }, + { 0x0010, "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x0011, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", NULL }, + { 0x0012, "TLS_DHE_DSS_WITH_DES_CBC_SHA", NULL }, + { 0x0013, "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x0014, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", NULL }, + { 0x0015, "TLS_DHE_RSA_WITH_DES_CBC_SHA", NULL }, + { 0x0016, "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x0017, "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5", NULL }, + { 0x0018, "TLS_DH_anon_WITH_RC4_128_MD5", NULL }, + { 0x0019, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA", NULL }, + { 0x001a, "TLS_DH_anon_WITH_DES_CBC_SHA", NULL }, + { 0x001b, "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x001c, "SSL_FORTEZZA_KEA_WITH_NULL_SHA", NULL }, + { 0x001d, "SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA", NULL }, + { 0x001e, "TLS_KRB5_WITH_DES_CBC_SHA_or_SSL_FORTEZZA_KEA_WITH_RC4_128_SHA", NULL }, + { 0x001f, "TLS_KRB5_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x0020, "TLS_KRB5_WITH_RC4_128_SHA", NULL }, + { 0x0021, "TLS_KRB5_WITH_IDEA_CBC_SHA", NULL }, + { 0x0022, "TLS_KRB5_WITH_DES_CBC_MD5", NULL }, + { 0x0023, "TLS_KRB5_WITH_3DES_EDE_CBC_MD5", NULL }, + { 0x0024, "TLS_KRB5_WITH_RC4_128_MD5", NULL }, + { 0x0025, "TLS_KRB5_WITH_IDEA_CBC_MD5", NULL }, + { 0x0026, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA", NULL }, + { 0x0027, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA", NULL }, + { 0x0028, "TLS_KRB5_EXPORT_WITH_RC4_40_SHA", NULL }, + { 0x0029, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5", NULL }, + { 0x002a, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5", NULL }, + { 0x002b, "TLS_KRB5_EXPORT_WITH_RC4_40_MD5", NULL }, + { 0x002c, "TLS_PSK_WITH_NULL_SHA", NULL }, + { 0x002d, "TLS_DHE_PSK_WITH_NULL_SHA", NULL }, + { 0x002e, "TLS_RSA_PSK_WITH_NULL_SHA", NULL }, + { 0x002f, "TLS_RSA_WITH_AES_128_CBC_SHA", NULL }, + { 0x0030, "TLS_DH_DSS_WITH_AES_128_CBC_SHA", NULL }, + { 0x0031, "TLS_DH_RSA_WITH_AES_128_CBC_SHA", NULL }, + { 0x0032, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", NULL }, + { 0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", NULL }, + { 0x0034, "TLS_DH_anon_WITH_AES_128_CBC_SHA", NULL }, + { 0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA", NULL }, + { 0x0036, "TLS_DH_DSS_WITH_AES_256_CBC_SHA", NULL }, + { 0x0037, "TLS_DH_RSA_WITH_AES_256_CBC_SHA", NULL }, + { 0x0038, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA", NULL }, + { 0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA", NULL }, + { 0x003a, "TLS_DH_anon_WITH_AES_256_CBC_SHA", NULL }, + { 0x003b, "TLS_RSA_WITH_NULL_SHA256", "NULL-SHA256" }, + { 0x003c, "TLS_RSA_WITH_AES_128_CBC_SHA256", "AES128-SHA256" }, + { 0x003d, "TLS_RSA_WITH_AES_256_CBC_SHA256", "AES256-SHA256" }, + { 0x003e, "TLS_DH_DSS_WITH_AES_128_CBC_SHA256", "DH-DSS-AES128-SHA256" }, + { 0x003f, "TLS_DH_RSA_WITH_AES_128_CBC_SHA256", "DH-RSA-AES128-SHA256" }, + { 0x0040, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256", "DHE-DSS-AES128-SHA256" }, + { 0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA", NULL }, + { 0x0042, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA", NULL }, + { 0x0043, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA", NULL }, + { 0x0044, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA", NULL }, + { 0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA", NULL }, + { 0x0046, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA", NULL }, + { 0x0047, "TLS_ECDH_ECDSA_WITH_NULL_SHA_draft", NULL }, + { 0x0048, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA_draft", NULL }, + { 0x0049, "TLS_ECDH_ECDSA_WITH_DES_CBC_SHA_draft", NULL }, + { 0x004a, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA_draft", NULL }, + { 0x004b, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA_draft", NULL }, + { 0x004c, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA_draft", NULL }, + { 0x004d, "TLS_ECDH_ECNRA_WITH_DES_CBC_SHA_draft", NULL }, + { 0x004e, "TLS_ECDH_ECNRA_WITH_3DES_EDE_CBC_SHA_draft", NULL }, + { 0x004f, "TLS_ECMQV_ECDSA_NULL_SHA_draft", NULL }, + { 0x0050, "TLS_ECMQV_ECDSA_WITH_RC4_128_SHA_draft", NULL }, + { 0x0051, "TLS_ECMQV_ECDSA_WITH_DES_CBC_SHA_draft", NULL }, + { 0x0052, "TLS_ECMQV_ECDSA_WITH_3DES_EDE_CBC_SHA_draft", NULL }, + { 0x0053, "TLS_ECMQV_ECNRA_NULL_SHA_draft", NULL }, + { 0x0054, "TLS_ECMQV_ECNRA_WITH_RC4_128_SHA_draft", NULL }, + { 0x0055, "TLS_ECMQV_ECNRA_WITH_DES_CBC_SHA_draft", NULL }, + { 0x0056, "TLS_ECMQV_ECNRA_WITH_3DES_EDE_CBC_SHA_draft", NULL }, + { 0x0057, "TLS_ECDH_anon_NULL_WITH_SHA_draft", NULL }, + { 0x0058, "TLS_ECDH_anon_WITH_RC4_128_SHA_draft", NULL }, + { 0x0059, "TLS_ECDH_anon_WITH_DES_CBC_SHA_draft", NULL }, + { 0x005a, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA_draft", NULL }, + { 0x005b, "TLS_ECDH_anon_EXPORT_WITH_DES40_CBC_SHA_draft", NULL }, + { 0x005c, "TLS_ECDH_anon_EXPORT_WITH_RC4_40_SHA_draft", NULL }, + { 0x0060, "TLS_RSA_EXPORT1024_WITH_RC4_56_MD5", NULL }, + { 0x0061, "TLS_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5", NULL }, + { 0x0062, "TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA", NULL }, + { 0x0063, "TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA", NULL }, + { 0x0064, "TLS_RSA_EXPORT1024_WITH_RC4_56_SHA", NULL }, + { 0x0065, "TLS_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA", NULL }, + { 0x0066, "TLS_DHE_DSS_WITH_RC4_128_SHA", NULL }, + { 0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256", "DHE-RSA-AES128-SHA256" }, + { 0x0068, "TLS_DH_DSS_WITH_AES_256_CBC_SHA256", "DH-DSS-AES256-SHA256" }, + { 0x0069, "TLS_DH_RSA_WITH_AES_256_CBC_SHA256", "DH-RSA-AES256-SHA256" }, + { 0x006a, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256", "DHE-DSS-AES256-SHA256" }, + { 0x006b, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256", "DHE-RSA-AES256-SHA256" }, + { 0x006c, "TLS_DH_anon_WITH_AES_128_CBC_SHA256", "ADH-AES128-SHA256" }, + { 0x006d, "TLS_DH_anon_WITH_AES_256_CBC_SHA256", "ADH-AES256-SHA256" }, + { 0x0072, "TLS_DHE_DSS_WITH_3DES_EDE_CBC_RMD", NULL }, + { 0x0073, "TLS_DHE_DSS_WITH_AES_128_CBC_RMD", NULL }, + { 0x0074, "TLS_DHE_DSS_WITH_AES_256_CBC_RMD", NULL }, + { 0x0077, "TLS_DHE_RSA_WITH_3DES_EDE_CBC_RMD", NULL }, + { 0x0078, "TLS_DHE_RSA_WITH_AES_128_CBC_RMD", NULL }, + { 0x0079, "TLS_DHE_RSA_WITH_AES_256_CBC_RMD", NULL }, + { 0x007c, "TLS_RSA_WITH_3DES_EDE_CBC_RMD", NULL }, + { 0x007d, "TLS_RSA_WITH_AES_128_CBC_RMD", NULL }, + { 0x007e, "TLS_RSA_WITH_AES_256_CBC_RMD", NULL }, + { 0x0080, "TLS_GOSTR341094_WITH_28147_CNT_IMIT", NULL }, + { 0x0081, "TLS_GOSTR341001_WITH_28147_CNT_IMIT", NULL }, + { 0x0082, "TLS_GOSTR341094_WITH_NULL_GOSTR3411", NULL }, + { 0x0083, "TLS_GOSTR341001_WITH_NULL_GOSTR3411", NULL }, + { 0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA", NULL }, + { 0x0085, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA", NULL }, + { 0x0086, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA", NULL }, + { 0x0087, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA", NULL }, + { 0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA", NULL }, + { 0x0089, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA", NULL }, + { 0x008a, "TLS_PSK_WITH_RC4_128_SHA", "PSK-RC4-SHA" }, + { 0x008b, "TLS_PSK_WITH_3DES_EDE_CBC_SHA", "PSK-3DES-EDE-CBC-SHA" }, + { 0x008c, "TLS_PSK_WITH_AES_128_CBC_SHA", NULL }, + { 0x008d, "TLS_PSK_WITH_AES_256_CBC_SHA", NULL }, + { 0x008e, "TLS_DHE_PSK_WITH_RC4_128_SHA", NULL }, + { 0x008f, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA", NULL }, + { 0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA", NULL }, + { 0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA", NULL }, + { 0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA", NULL }, + { 0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA", NULL }, + { 0x0096, "TLS_RSA_WITH_SEED_CBC_SHA", NULL }, + { 0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA", NULL }, + { 0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA", NULL }, + { 0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA", NULL }, + { 0x009a, "TLS_DHE_RSA_WITH_SEED_CBC_SHA", NULL }, + { 0x009b, "TLS_DH_anon_WITH_SEED_CBC_SHA", NULL }, + { 0x009c, "TLS_RSA_WITH_AES_128_GCM_SHA256", "AES128-GCM-SHA256" }, + { 0x009d, "TLS_RSA_WITH_AES_256_GCM_SHA384", "AES256-GCM-SHA384" }, + { 0x009e, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256", "DHE-RSA-AES128-GCM-SHA256" }, + { 0x009f, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", "DHE-RSA-AES256-GCM-SHA384" }, + { 0x00a0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256", "DH-RSA-AES128-GCM-SHA256" }, + { 0x00a1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384", "DH-RSA-AES256-GCM-SHA384" }, + { 0x00a2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256", "DHE-DSS-AES128-GCM-SHA256" }, + { 0x00a3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384", "DHE-DSS-AES256-GCM-SHA384" }, + { 0x00a4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256", "DH-DSS-AES128-GCM-SHA256" }, + { 0x00a5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384", "DH-DSS-AES256-GCM-SHA384" }, + { 0x00a6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256", "ADH-AES128-GCM-SHA256" }, + { 0x00a7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384", "ADH-AES256-GCM-SHA384" }, + { 0x00a8, "TLS_PSK_WITH_AES_128_GCM_SHA256", NULL }, + { 0x00a9, "TLS_PSK_WITH_AES_256_GCM_SHA384", NULL }, + { 0x00aa, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256", NULL }, + { 0x00ab, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384", NULL }, + { 0x00ac, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256", NULL }, + { 0x00ad, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384", NULL }, + { 0x00ae, "TLS_PSK_WITH_AES_128_CBC_SHA256", "PSK-AES128-CBC-SHA" }, + { 0x00af, "TLS_PSK_WITH_AES_256_CBC_SHA384", "PSK-AES256-CBC-SHA" }, + { 0x00b0, "TLS_PSK_WITH_NULL_SHA256", NULL }, + { 0x00b1, "TLS_PSK_WITH_NULL_SHA384", NULL }, + { 0x00b2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256", NULL }, + { 0x00b3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384", NULL }, + { 0x00b4, "TLS_DHE_PSK_WITH_NULL_SHA256", NULL }, + { 0x00b5, "TLS_DHE_PSK_WITH_NULL_SHA384", NULL }, + { 0x00b6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256", NULL }, + { 0x00b7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384", NULL }, + { 0x00b8, "TLS_RSA_PSK_WITH_NULL_SHA256", NULL }, + { 0x00b9, "TLS_RSA_PSK_WITH_NULL_SHA384", NULL }, + { 0x00ba, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0x00bb, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0x00bc, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0x00bd, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0x00be, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0x00bf, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0x00c0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256", NULL }, + { 0x00c1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256", NULL }, + { 0x00c2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256", NULL }, + { 0x00c3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256", NULL }, + { 0x00c4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256", NULL }, + { 0x00c5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256", NULL }, + { 0x00ff, "TLS_EMPTY_RENEGOTIATION_INFO_SCSV", NULL }, + { 0x1301, "TLS_AES_128_GCM_SHA256", "TLS13_AES_128_GCM_SHA256" }, + { 0x1302, "TLS_AES_256_GCM_SHA384", "TLS13_AES_256_GCM_SHA384" }, + { 0x1303, "TLS_CHACHA20_POLY1305_SHA256", "TLS13_CHACHA20_POLY1305_SHA256" }, + { 0x1304, "TLS_AES_128_CCM_SHA256", "TLS13_AES_128_CCM_SHA256" }, + { 0x1305, "TLS_AES_128_CCM_8_SHA256", "TLS13_AES_128_CCM_8_SHA256" }, + { 0xc001, "TLS_ECDH_ECDSA_WITH_NULL_SHA", NULL }, + { 0xc002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", NULL }, + { 0xc003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", NULL }, + { 0xc005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA", NULL }, + { 0xc006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA", NULL }, + { 0xc007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", NULL }, + { 0xc008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", NULL }, + { 0xc00a, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", NULL }, + { 0xc00b, "TLS_ECDH_RSA_WITH_NULL_SHA", NULL }, + { 0xc00c, "TLS_ECDH_RSA_WITH_RC4_128_SHA", NULL }, + { 0xc00d, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc00e, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", NULL }, + { 0xc00f, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA", NULL }, + { 0xc010, "TLS_ECDHE_RSA_WITH_NULL_SHA", NULL }, + { 0xc011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA", NULL }, + { 0xc012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", NULL }, + { 0xc014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", NULL }, + { 0xc015, "TLS_ECDH_anon_WITH_NULL_SHA", NULL }, + { 0xc016, "TLS_ECDH_anon_WITH_RC4_128_SHA", NULL }, + { 0xc017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA", NULL }, + { 0xc019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA", NULL }, + { 0xc01a, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc01b, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc01c, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc01d, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA", NULL }, + { 0xc01e, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA", NULL }, + { 0xc01f, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA", NULL }, + { 0xc020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA", NULL }, + { 0xc021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA", NULL }, + { 0xc022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA", NULL }, + { 0xc023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", "ECDHE-ECDSA-AES128-SHA256" }, + { 0xc024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384", "ECDHE-ECDSA-AES256-SHA384" }, + { 0xc025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256", "ECDH-ECDSA-AES128-SHA256" }, + { 0xc026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384", "ECDH-ECDSA-AES256-SHA384" }, + { 0xc027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", "ECDHE-RSA-AES128-SHA256" }, + { 0xc028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384", "ECDHE-RSA-AES256-SHA384" }, + { 0xc029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256", "ECDH-RSA-AES128-SHA256" }, + { 0xc02a, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384", "ECDH-RSA-AES256-SHA384" }, + { 0xc02b, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "ECDHE-ECDSA-AES128-GCM-SHA256" }, + { 0xc02c, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "ECDHE-ECDSA-AES256-GCM-SHA384" }, + { 0xc02d, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256", "ECDH-ECDSA-AES128-GCM-SHA256" }, + { 0xc02e, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384", "ECDH-ECDSA-AES256-GCM-SHA384" }, + { 0xc02f, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "ECDHE-RSA-AES128-GCM-SHA256" }, + { 0xc030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "ECDHE-RSA-AES256-GCM-SHA384" }, + { 0xc031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256", "ECDH-RSA-AES128-GCM-SHA256" }, + { 0xc032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384", "ECDH-RSA-AES256-GCM-SHA384" }, + { 0xc033, "TLS_ECDHE_PSK_WITH_RC4_128_SHA", NULL }, + { 0xc034, "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA", NULL }, + { 0xc035, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA", NULL }, + { 0xc036, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA", NULL }, + { 0xc037, "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256", NULL }, + { 0xc038, "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384", NULL }, + { 0xc039, "TLS_ECDHE_PSK_WITH_NULL_SHA", NULL }, + { 0xc03a, "TLS_ECDHE_PSK_WITH_NULL_SHA256", NULL }, + { 0xc03b, "TLS_ECDHE_PSK_WITH_NULL_SHA384", NULL }, + { 0xc03c, "TLS_RSA_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc03d, "TLS_RSA_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc03e, "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc03f, "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc040, "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc041, "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc042, "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc043, "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc044, "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc045, "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc046, "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc047, "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc048, "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc049, "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc04a, "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc04b, "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc04c, "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc04d, "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc04e, "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc04f, "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc050, "TLS_RSA_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc051, "TLS_RSA_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc052, "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc053, "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc054, "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc055, "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc056, "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc057, "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc058, "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc059, "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc05a, "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc05b, "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc05c, "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc05d, "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc05e, "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc05f, "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc060, "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc061, "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc062, "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc063, "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc064, "TLS_PSK_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc065, "TLS_PSK_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc066, "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc067, "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc068, "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc069, "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc06a, "TLS_PSK_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc06b, "TLS_PSK_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc06c, "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc06d, "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc06e, "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256", NULL }, + { 0xc06f, "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384", NULL }, + { 0xc070, "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256", NULL }, + { 0xc071, "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384", NULL }, + { 0xc072, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc073, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc074, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc075, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc076, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc077, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc078, "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc079, "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc07a, "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc07b, "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc07c, "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc07d, "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc07e, "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc07f, "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc080, "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc081, "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc082, "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc083, "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc084, "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc085, "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc086, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc087, "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc088, "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc089, "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc08a, "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc08b, "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc08c, "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc08d, "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc08e, "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc08f, "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc090, "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc091, "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc092, "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256", NULL }, + { 0xc093, "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384", NULL }, + { 0xc094, "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc095, "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc096, "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc097, "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc098, "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc099, "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc09a, "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256", NULL }, + { 0xc09b, "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384", NULL }, + { 0xc09c, "TLS_RSA_WITH_AES_128_CCM", NULL }, + { 0xc09d, "TLS_RSA_WITH_AES_256_CCM", NULL }, + { 0xc09e, "TLS_DHE_RSA_WITH_AES_128_CCM", NULL }, + { 0xc09f, "TLS_DHE_RSA_WITH_AES_256_CCM", NULL }, + { 0xc0a0, "TLS_RSA_WITH_AES_128_CCM_8", NULL }, + { 0xc0a1, "TLS_RSA_WITH_AES_256_CCM_8", NULL }, + { 0xc0a2, "TLS_DHE_RSA_WITH_AES_128_CCM_8", NULL }, + { 0xc0a3, "TLS_DHE_RSA_WITH_AES_256_CCM_8", NULL }, + { 0xc0a4, "TLS_PSK_WITH_AES_128_CCM", NULL }, + { 0xc0a5, "TLS_PSK_WITH_AES_256_CCM", NULL }, + { 0xc0a6, "TLS_DHE_PSK_WITH_AES_128_CCM", NULL }, + { 0xc0a7, "TLS_DHE_PSK_WITH_AES_256_CCM", NULL }, + { 0xc0a8, "TLS_PSK_WITH_AES_128_CCM_8", NULL }, + { 0xc0a9, "TLS_PSK_WITH_AES_256_CCM_8", NULL }, + { 0xc0aa, "TLS_PSK_DHE_WITH_AES_128_CCM_8", NULL }, + { 0xc0ab, "TLS_PSK_DHE_WITH_AES_256_CCM_8", NULL }, + { 0xcca8, "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-RSA-CHACHA20-POLY1305" }, + { 0xcca9, "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-ECDSA-CHACHA20-POLY1305" }, + { 0xccaa, "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256", "DHE-RSA-CHACHA20-POLY1305" }, + { 0xccab, "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256", "PSK-CHACHA20-POLY1305" }, + { 0xccac, "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256", "ECDHE-PSK-CHACHA20-POLY1305" }, + { 0xccad, "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256", "DHE-PSK-CHACHA20-POLY1305" }, + { 0xccae, "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256", "RSA-PSK-CHACHA20-POLY1305" }, + { 0xfefe, "SSL_RSA_FIPS_WITH_DES_CBC_SHA", NULL }, + { 0xfeff, "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA", NULL }, +}; + +typedef struct { + apr_uint16_t id; + const rustls_supported_ciphersuite *rustls_suite; +} rustls_cipher_t; + +tls_proto_conf_t *tls_proto_init(apr_pool_t *pool, server_rec *s) +{ + tls_proto_conf_t *conf; + tls_cipher_t *cipher; + const rustls_supported_ciphersuite *rustls_suite; + rustls_cipher_t *rcipher; + apr_uint16_t id; + apr_size_t i; + + (void)s; + conf = apr_pcalloc(pool, sizeof(*conf)); + + conf->supported_versions = apr_array_make(pool, 3, sizeof(apr_uint16_t)); + /* Until we can look that up at crustls, we assume what we currently know */ + APR_ARRAY_PUSH(conf->supported_versions, apr_uint16_t) = TLS_VERSION_1_2; + APR_ARRAY_PUSH(conf->supported_versions, apr_uint16_t) = TLS_VERSION_1_3; + + conf->known_ciphers_by_name = apr_hash_make(pool); + conf->known_ciphers_by_id = apr_hash_make(pool); + for (i = 0; i < TLS_DIM(KNOWN_CIPHERS); ++i) { + cipher = &KNOWN_CIPHERS[i]; + apr_hash_set(conf->known_ciphers_by_id, &cipher->id, sizeof(apr_uint16_t), cipher); + apr_hash_set(conf->known_ciphers_by_name, cipher->name, APR_HASH_KEY_STRING, cipher); + if (cipher->alias) { + apr_hash_set(conf->known_ciphers_by_name, cipher->alias, APR_HASH_KEY_STRING, cipher); + } + } + + conf->supported_cipher_ids = apr_array_make(pool, 10, sizeof(apr_uint16_t)); + conf->rustls_ciphers_by_id = apr_hash_make(pool); + i = 0; + while ((rustls_suite = rustls_all_ciphersuites_get_entry(i++))) { + id = rustls_supported_ciphersuite_get_suite(rustls_suite); + rcipher = apr_pcalloc(pool, sizeof(*rcipher)); + rcipher->id = id; + rcipher->rustls_suite = rustls_suite; + APR_ARRAY_PUSH(conf->supported_cipher_ids, apr_uint16_t) = id; + apr_hash_set(conf->rustls_ciphers_by_id, &rcipher->id, sizeof(apr_uint16_t), rcipher); + + } + + return conf; +} + +const char *tls_proto_get_cipher_names( + tls_proto_conf_t *conf, const apr_array_header_t *ciphers, apr_pool_t *pool) +{ + apr_array_header_t *names; + int n; + + names = apr_array_make(pool, ciphers->nelts, sizeof(const char*)); + for (n = 0; n < ciphers->nelts; ++n) { + apr_uint16_t id = APR_ARRAY_IDX(ciphers, n, apr_uint16_t); + APR_ARRAY_PUSH(names, const char *) = tls_proto_get_cipher_name(conf, id, pool); + } + return apr_array_pstrcat(pool, names, ':'); +} + +apr_status_t tls_proto_pre_config(apr_pool_t *pool, apr_pool_t *ptemp) +{ + (void)pool; + (void)ptemp; + return APR_SUCCESS; +} + +apr_status_t tls_proto_post_config(apr_pool_t *pool, apr_pool_t *ptemp, server_rec *s) +{ + tls_conf_server_t *sc = tls_conf_server_get(s); + tls_proto_conf_t *conf = sc->global->proto; + + (void)pool; + if (APLOGdebug(s)) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s, APLOGNO(10314) + "tls ciphers supported: %s", + tls_proto_get_cipher_names(conf, conf->supported_cipher_ids, ptemp)); + } + return APR_SUCCESS; +} + +static apr_status_t get_uint16_from(const char *name, const char *prefix, apr_uint16_t *pint) +{ + apr_size_t plen = strlen(prefix); + if (strlen(name) == plen+4 && !strncmp(name, prefix, plen)) { + /* may be a hex notation cipher id */ + char *end = NULL; + apr_int64_t code = apr_strtoi64(name + plen, &end, 16); + if ((!end || !*end) && code && code <= APR_UINT16_MAX) { + *pint = (apr_uint16_t)code; + return APR_SUCCESS; + } + } + return APR_ENOENT; +} + +apr_uint16_t tls_proto_get_version_by_name(tls_proto_conf_t *conf, const char *name) +{ + apr_uint16_t version; + (void)conf; + if (!apr_strnatcasecmp(name, "TLSv1.2")) { + return TLS_VERSION_1_2; + } + else if (!apr_strnatcasecmp(name, "TLSv1.3")) { + return TLS_VERSION_1_3; + } + if (APR_SUCCESS == get_uint16_from(name, "TLSv0x", &version)) { + return version; + } + return 0; +} + +const char *tls_proto_get_version_name( + tls_proto_conf_t *conf, apr_uint16_t id, apr_pool_t *pool) +{ + (void)conf; + switch (id) { + case TLS_VERSION_1_2: + return "TLSv1.2"; + case TLS_VERSION_1_3: + return "TLSv1.3"; + default: + return apr_psprintf(pool, "TLSv0x%04x", id); + } +} + +apr_array_header_t *tls_proto_create_versions_plus( + tls_proto_conf_t *conf, apr_uint16_t min_version, apr_pool_t *pool) +{ + apr_array_header_t *versions = apr_array_make(pool, 3, sizeof(apr_uint16_t)); + apr_uint16_t version; + int i; + + for (i = 0; i < conf->supported_versions->nelts; ++i) { + version = APR_ARRAY_IDX(conf->supported_versions, i, apr_uint16_t); + if (version >= min_version) { + APR_ARRAY_PUSH(versions, apr_uint16_t) = version; + } + } + return versions; +} + +int tls_proto_is_cipher_supported(tls_proto_conf_t *conf, apr_uint16_t cipher) +{ + return tls_util_array_uint16_contains(conf->supported_cipher_ids, cipher); +} + +apr_status_t tls_proto_get_cipher_by_name( + tls_proto_conf_t *conf, const char *name, apr_uint16_t *pcipher) +{ + tls_cipher_t *cipher = apr_hash_get(conf->known_ciphers_by_name, name, APR_HASH_KEY_STRING); + if (cipher) { + *pcipher = cipher->id; + return APR_SUCCESS; + } + return get_uint16_from(name, "TLS_CIPHER_0x", pcipher); +} + +const char *tls_proto_get_cipher_name( + tls_proto_conf_t *conf, apr_uint16_t id, apr_pool_t *pool) +{ + tls_cipher_t *cipher = apr_hash_get(conf->known_ciphers_by_id, &id, sizeof(apr_uint16_t)); + if (cipher) { + return cipher->name; + } + return apr_psprintf(pool, "TLS_CIPHER_0x%04x", id); +} + +apr_array_header_t *tls_proto_get_rustls_suites( + tls_proto_conf_t *conf, const apr_array_header_t *ids, apr_pool_t *pool) +{ + apr_array_header_t *suites; + rustls_cipher_t *rcipher; + apr_uint16_t id; + int i; + + suites = apr_array_make(pool, ids->nelts, sizeof(const rustls_supported_ciphersuite*)); + for (i = 0; i < ids->nelts; ++i) { + id = APR_ARRAY_IDX(ids, i, apr_uint16_t); + rcipher = apr_hash_get(conf->rustls_ciphers_by_id, &id, sizeof(apr_uint16_t)); + if (rcipher) { + APR_ARRAY_PUSH(suites, const rustls_supported_ciphersuite *) = rcipher->rustls_suite; + } + } + return suites; +} diff -Nru apache2-2.4.51/modules/tls/tls_proto.h apache2-2.4.52/modules/tls/tls_proto.h --- apache2-2.4.51/modules/tls/tls_proto.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_proto.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,124 @@ +/* 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 tls_proto_h +#define tls_proto_h + +#include "tls_util.h" + + +#define TLS_VERSION_1_2 0x0303 +#define TLS_VERSION_1_3 0x0304 + +/** + * Specification of a TLS cipher by name, possible alias and its 16 bit value + * as assigned by IANA. + */ +typedef struct { + apr_uint16_t id; /* IANA 16-bit assigned value as used on the wire */ + const char *name; /* IANA given name of hte cipher */ + const char *alias; /* Optional, commonly known alternate name */ +} tls_cipher_t; + +/** + * TLS protocol related definitions constructed + * by querying crustls lib. + */ +typedef struct tls_proto_conf_t tls_proto_conf_t; +struct tls_proto_conf_t { + apr_array_header_t *supported_versions; /* supported protocol versions (apr_uint16_t) */ + apr_hash_t *known_ciphers_by_name; /* hash by name of known tls_cipher_t* */ + apr_hash_t *known_ciphers_by_id; /* hash by id of known tls_cipher_t* */ + apr_hash_t *rustls_ciphers_by_id; /* hash by id of rustls rustls_supported_ciphersuite* */ + apr_array_header_t *supported_cipher_ids; /* cipher ids (apr_uint16_t) supported by rustls */ + const rustls_root_cert_store *native_roots; +}; + +/** + * Create and populate the protocol configuration. + */ +tls_proto_conf_t *tls_proto_init(apr_pool_t *p, server_rec *s); + +/** + * Called during pre-config phase to start intialization + * of the tls protocol configuration. + */ +apr_status_t tls_proto_pre_config(apr_pool_t *pool, apr_pool_t *ptemp); + +/** + * Called during post-config phase to conclude the intialization + * of the tls protocol configuration. + */ +apr_status_t tls_proto_post_config(apr_pool_t *p, apr_pool_t *ptemp, server_rec *s); + +/** + * Get the TLS protocol identifer (as used on the wire) for the TLS + * protocol of the given name. Returns 0 if protocol is unknown. + */ +apr_uint16_t tls_proto_get_version_by_name(tls_proto_conf_t *conf, const char *name); + +/** + * Get the name of the protocol version identified by its identifier. This + * will return the name from the protocol configuration or, if unknown, create + * the string `TLSv0x%04x` from the 16bit identifier. + */ +const char *tls_proto_get_version_name( + tls_proto_conf_t *conf, apr_uint16_t id, apr_pool_t *pool); + +/** + * Create an array of the given TLS protocol version identifier `min_version` + * and all supported new ones. The array carries apr_uint16_t values. + */ +apr_array_header_t *tls_proto_create_versions_plus( + tls_proto_conf_t *conf, apr_uint16_t min_version, apr_pool_t *pool); + +/** + * Get a TLS cipher spec by name/alias. + */ +apr_status_t tls_proto_get_cipher_by_name( + tls_proto_conf_t *conf, const char *name, apr_uint16_t *pcipher); + +/** + * Return != 0 iff the cipher is supported by the rustls library. + */ +int tls_proto_is_cipher_supported(tls_proto_conf_t *conf, apr_uint16_t cipher); + +/** + * Get the name of a TLS cipher for the IANA assigned 16bit value. This will + * return the name in the protocol configuation, if the cipher is known, and + * create the string `TLS_CIPHER_0x%04x` for the 16bit cipher value. + */ +const char *tls_proto_get_cipher_name( + tls_proto_conf_t *conf, apr_uint16_t cipher, apr_pool_t *pool); + +/** + * Get the concatenated names with ':' as separator of all TLS cipher identifiers + * as given in `ciphers`. + * @param conf the TLS protocol configuration + * @param ciphers the 16bit values of the TLS ciphers + * @param pool to use for allocation the string. + */ +const char *tls_proto_get_cipher_names( + tls_proto_conf_t *conf, const apr_array_header_t *ciphers, apr_pool_t *pool); + +/** + * Convert an array of TLS cipher 16bit identifiers into the `rustls_supported_ciphersuite` + * instances that can be passed to crustls in session configurations. + * Any cipher identifier not supported by rustls we be silently omitted. + */ +apr_array_header_t *tls_proto_get_rustls_suites( + tls_proto_conf_t *conf, const apr_array_header_t *ids, apr_pool_t *pool); + +#endif /* tls_proto_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_util.c apache2-2.4.52/modules/tls/tls_util.c --- apache2-2.4.51/modules/tls/tls_util.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_util.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,367 @@ +/* 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 +#include +#include +#include + +#include +#include +#include + +#include + +#include "tls_proto.h" +#include "tls_util.h" + + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + + +tls_data_t tls_data_from_str(const char *s) +{ + tls_data_t d; + d.data = (const unsigned char*)s; + d.len = s? strlen(s) : 0; + return d; +} + +tls_data_t tls_data_assign_copy(apr_pool_t *p, const tls_data_t *d) +{ + tls_data_t copy; + copy.data = apr_pmemdup(p, d->data, d->len); + copy.len = d->len; + return copy; +} + +tls_data_t *tls_data_copy(apr_pool_t *p, const tls_data_t *d) +{ + tls_data_t *copy; + copy = apr_pcalloc(p, sizeof(*copy)); + *copy = tls_data_assign_copy(p, d); + return copy; +} + +const char *tls_data_to_str(apr_pool_t *p, const tls_data_t *d) +{ + char *s = apr_pcalloc(p, d->len+1); + memcpy(s, d->data, d->len); + return s; +} + +apr_status_t tls_util_rustls_error( + apr_pool_t *p, rustls_result rr, const char **perr_descr) +{ + if (perr_descr) { + char buffer[HUGE_STRING_LEN]; + apr_size_t len = 0; + + rustls_error(rr, buffer, sizeof(buffer), &len); + *perr_descr = apr_pstrndup(p, buffer, len); + } + return APR_EGENERAL; +} + +int tls_util_is_file( + apr_pool_t *p, const char *fpath) +{ + apr_finfo_t finfo; + + return (fpath != NULL + && apr_stat(&finfo, fpath, APR_FINFO_TYPE|APR_FINFO_SIZE, p) == 0 + && finfo.filetype == APR_REG); +} + +apr_status_t tls_util_file_load( + apr_pool_t *p, const char *fpath, apr_size_t min_len, apr_size_t max_len, tls_data_t *data) +{ + apr_finfo_t finfo; + apr_status_t rv; + apr_file_t *f = NULL; + unsigned char *buffer; + apr_size_t len; + const char *err = NULL; + tls_data_t *d; + + rv = apr_stat(&finfo, fpath, APR_FINFO_TYPE|APR_FINFO_SIZE, p); + if (APR_SUCCESS != rv) { + err = "cannot stat"; goto cleanup; + } + if (finfo.filetype != APR_REG) { + err = "not a plain file"; + rv = APR_EINVAL; goto cleanup; + } + if (finfo.size > LONG_MAX) { + err = "file is too large"; + rv = APR_EINVAL; goto cleanup; + } + len = (apr_size_t)finfo.size; + if (len < min_len || len > max_len) { + err = "file size not in allowed range"; + rv = APR_EINVAL; goto cleanup; + } + d = apr_pcalloc(p, sizeof(*d)); + buffer = apr_pcalloc(p, len+1); /* keep it NUL terminated in any case */ + rv = apr_file_open(&f, fpath, APR_FOPEN_READ, 0, p); + if (APR_SUCCESS != rv) { + err = "error opening"; goto cleanup; + } + rv = apr_file_read(f, buffer, &len); + if (APR_SUCCESS != rv) { + err = "error reading"; goto cleanup; + } +cleanup: + if (f) apr_file_close(f); + if (APR_SUCCESS == rv) { + data->data = buffer; + data->len = len; + } + else { + memset(data, 0, sizeof(*data)); + ap_log_perror(APLOG_MARK, APLOG_ERR, rv, p, APLOGNO(10361) + "Failed to load file %s: %s", fpath, err? err: "-"); + } + return rv; +} + +int tls_util_array_uint16_contains(const apr_array_header_t* a, apr_uint16_t n) +{ + int i; + for (i = 0; i < a->nelts; ++i) { + if (APR_ARRAY_IDX(a, i, apr_uint16_t) == n) return 1; + } + return 0; +} + +const apr_array_header_t *tls_util_array_uint16_remove( + apr_pool_t *pool, const apr_array_header_t* from, const apr_array_header_t* others) +{ + apr_array_header_t *na = NULL; + apr_uint16_t id; + int i, j; + + for (i = 0; i < from->nelts; ++i) { + id = APR_ARRAY_IDX(from, i, apr_uint16_t); + if (tls_util_array_uint16_contains(others, id)) { + if (na == NULL) { + /* first removal, make a new result array, copy elements before */ + na = apr_array_make(pool, from->nelts, sizeof(apr_uint16_t)); + for (j = 0; j < i; ++j) { + APR_ARRAY_PUSH(na, apr_uint16_t) = APR_ARRAY_IDX(from, j, apr_uint16_t); + } + } + } + else if (na) { + APR_ARRAY_PUSH(na, apr_uint16_t) = id; + } + } + return na? na : from; +} + +apr_status_t tls_util_brigade_transfer( + apr_bucket_brigade *dest, apr_bucket_brigade *src, apr_off_t length, + apr_off_t *pnout) +{ + apr_bucket *b; + apr_off_t remain = length; + apr_status_t rv = APR_SUCCESS; + const char *ign; + apr_size_t ilen; + + *pnout = 0; + while (!APR_BRIGADE_EMPTY(src)) { + b = APR_BRIGADE_FIRST(src); + + if (APR_BUCKET_IS_METADATA(b)) { + APR_BUCKET_REMOVE(b); + APR_BRIGADE_INSERT_TAIL(dest, b); + } + else { + if (remain == (apr_off_t)b->length) { + /* fall through */ + } + else if (remain <= 0) { + goto cleanup; + } + else { + if (b->length == ((apr_size_t)-1)) { + rv= apr_bucket_read(b, &ign, &ilen, APR_BLOCK_READ); + if (APR_SUCCESS != rv) goto cleanup; + } + if (remain < (apr_off_t)b->length) { + apr_bucket_split(b, (apr_size_t)remain); + } + } + APR_BUCKET_REMOVE(b); + APR_BRIGADE_INSERT_TAIL(dest, b); + remain -= (apr_off_t)b->length; + *pnout += (apr_off_t)b->length; + } + } +cleanup: + return rv; +} + +apr_status_t tls_util_brigade_copy( + apr_bucket_brigade *dest, apr_bucket_brigade *src, apr_off_t length, + apr_off_t *pnout) +{ + apr_bucket *b, *next; + apr_off_t remain = length; + apr_status_t rv = APR_SUCCESS; + const char *ign; + apr_size_t ilen; + + *pnout = 0; + for (b = APR_BRIGADE_FIRST(src); + b != APR_BRIGADE_SENTINEL(src); + b = next) { + next = APR_BUCKET_NEXT(b); + + if (APR_BUCKET_IS_METADATA(b)) { + /* fall through */ + } + else { + if (remain == (apr_off_t)b->length) { + /* fall through */ + } + else if (remain <= 0) { + goto cleanup; + } + else { + if (b->length == ((apr_size_t)-1)) { + rv = apr_bucket_read(b, &ign, &ilen, APR_BLOCK_READ); + if (APR_SUCCESS != rv) goto cleanup; + } + if (remain < (apr_off_t)b->length) { + apr_bucket_split(b, (apr_size_t)remain); + } + } + } + rv = apr_bucket_copy(b, &b); + if (APR_SUCCESS != rv) goto cleanup; + APR_BRIGADE_INSERT_TAIL(dest, b); + remain -= (apr_off_t)b->length; + *pnout += (apr_off_t)b->length; + } +cleanup: + return rv; +} + +apr_status_t tls_util_brigade_split_line( + apr_bucket_brigade *dest, apr_bucket_brigade *src, + apr_read_type_e block, apr_off_t length, + apr_off_t *pnout) +{ + apr_off_t nstart, nend; + apr_status_t rv; + + apr_brigade_length(dest, 0, &nstart); + rv = apr_brigade_split_line(dest, src, block, length); + if (APR_SUCCESS != rv) goto cleanup; + apr_brigade_length(dest, 0, &nend); + /* apr_brigade_split_line() has the nasty habit of leaving a 0-length bucket + * at the start of the brigade when it transfered the whole content. Get rid of it. + */ + if (!APR_BRIGADE_EMPTY(src)) { + apr_bucket *b = APR_BRIGADE_FIRST(src); + if (!APR_BUCKET_IS_METADATA(b) && 0 == b->length) { + APR_BUCKET_REMOVE(b); + apr_bucket_delete(b); + } + } +cleanup: + *pnout = (APR_SUCCESS == rv)? (nend - nstart) : 0; + return rv; +} + +int tls_util_name_matches_server(const char *name, server_rec *s) +{ + apr_array_header_t *names; + char **alias; + int i; + + if (!s || !s->server_hostname) return 0; + if (!strcasecmp(name, s->server_hostname)) return 1; + /* first the fast equality match, then the pattern wild_name matches */ + names = s->names; + if (!names) return 0; + alias = (char **)names->elts; + for (i = 0; i < names->nelts; ++i) { + if (alias[i] && !strcasecmp(name, alias[i])) return 1; + } + names = s->wild_names; + if (!names) return 0; + alias = (char **)names->elts; + for (i = 0; i < names->nelts; ++i) { + if (alias[i] && !ap_strcasecmp_match(name, alias[i])) return 1; + } + return 0; +} + +apr_size_t tls_util_bucket_print(char *buffer, apr_size_t bmax, + apr_bucket *b, const char *sep) +{ + apr_size_t off = 0; + if (sep && *sep) { + off += (size_t)apr_snprintf(buffer+off, bmax-off, "%s", sep); + } + + if (bmax <= off) { + return off; + } + else if (APR_BUCKET_IS_METADATA(b)) { + off += (size_t)apr_snprintf(buffer+off, bmax-off, "%s", b->type->name); + } + else if (bmax > off) { + off += (size_t)apr_snprintf(buffer+off, bmax-off, "%s[%ld]", + b->type->name, (long)(b->length == ((apr_size_t)-1)? + -1 : (int)b->length)); + } + return off; +} + +apr_size_t tls_util_bb_print(char *buffer, apr_size_t bmax, + const char *tag, const char *sep, + apr_bucket_brigade *bb) +{ + apr_size_t off = 0; + const char *sp = ""; + apr_bucket *b; + + if (bmax > 1) { + if (bb) { + memset(buffer, 0, bmax--); + off += (size_t)apr_snprintf(buffer+off, bmax-off, "%s(", tag); + for (b = APR_BRIGADE_FIRST(bb); + (bmax > off) && (b != APR_BRIGADE_SENTINEL(bb)); + b = APR_BUCKET_NEXT(b)) { + + off += tls_util_bucket_print(buffer+off, bmax-off, b, sp); + sp = " "; + } + if (bmax > off) { + off += (size_t)apr_snprintf(buffer+off, bmax-off, ")%s", sep); + } + } + else { + off += (size_t)apr_snprintf(buffer+off, bmax-off, "%s(null)%s", tag, sep); + } + } + return off; +} + diff -Nru apache2-2.4.51/modules/tls/tls_util.h apache2-2.4.52/modules/tls/tls_util.h --- apache2-2.4.51/modules/tls/tls_util.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_util.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,157 @@ +/* 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 tls_util_h +#define tls_util_h + +#define TLS_DIM(a) (sizeof(a)/sizeof(a[0])) + + +/** + * Simple struct to hold a range of bytes and its length together. + */ +typedef struct tls_data_t tls_data_t; +struct tls_data_t { + const unsigned char* data; + apr_size_t len; +}; + +/** + * Return a tls_data_t for a string. + */ +tls_data_t tls_data_from_str(const char *s); + +/** + * Create a copy of a tls_data_t using the given pool. + */ +tls_data_t *tls_data_copy(apr_pool_t *p, const tls_data_t *d); + +/** + * Return a copy of a tls_data_t bytes allocated from pool. + */ +tls_data_t tls_data_assign_copy(apr_pool_t *p, const tls_data_t *d); + +/** + * Convert the data bytes in `d` into a NUL-terminated string. + * There is no check if the data bytes already contain NUL. + */ +const char *tls_data_to_str(apr_pool_t *p, const tls_data_t *d); + +/** + * Return != 0 if fpath is a 'real' file. + */ +int tls_util_is_file(apr_pool_t *p, const char *fpath); + +/** + * Inspect a 'rustls_result', retrieve the error description for it and + * return the apr_status_t to use as our error status. + */ +apr_status_t tls_util_rustls_error(apr_pool_t *p, rustls_result rr, const char **perr_descr); + +/** + * Load up to `max_len` bytes into a buffer allocated from the pool. + * @return ARP_SUCCESS on successful load. + * APR_EINVAL when the file was not a regular file or is too large. + */ +apr_status_t tls_util_file_load( + apr_pool_t *p, const char *fpath, size_t min_len, size_t max_len, tls_data_t *data); + +/** + * Return != 0 iff the array of apr_uint16_t contains value n. + */ +int tls_util_array_uint16_contains(const apr_array_header_t* a, apr_uint16_t n); + +/** + * Remove all apr_uint16_t in `others` from array `from`. + * Returns the new array or, if no overlap was found, the `from` array unchanged. + */ +const apr_array_header_t *tls_util_array_uint16_remove( + apr_pool_t *pool, const apr_array_header_t* from, const apr_array_header_t* others); + +/** + * Transfer up to bytes from to , including all + * encountered meta data buckets. The transfered buckets/data are + * removed from . + * Return the actual byte count transfered in . + */ +apr_status_t tls_util_brigade_transfer( + apr_bucket_brigade *dest, apr_bucket_brigade *src, apr_off_t length, + apr_off_t *pnout); + +/** + * Copy up to bytes from to , including all + * encountered meta data buckets. remains semantically unchaanged, + * meaning there might have been buckets split or changed while reading + * their content. + * Return the actual byte count copied in . + */ +apr_status_t tls_util_brigade_copy( + apr_bucket_brigade *dest, apr_bucket_brigade *src, apr_off_t length, + apr_off_t *pnout); + +/** + * Get a line of max `length` bytes from `src` into `dest`. + * Return the number of bytes transferred in `pnout`. + */ +apr_status_t tls_util_brigade_split_line( + apr_bucket_brigade *dest, apr_bucket_brigade *src, + apr_read_type_e block, apr_off_t length, + apr_off_t *pnout); + +/** + * Return != 0 iff the given matches the configured 'ServerName' + * or one of the 'ServerAlias' name of , including wildcard patterns + * as understood by ap_strcasecmp_match(). + */ +int tls_util_name_matches_server(const char *name, server_rec *s); + + +/** + * Print a bucket's meta data (type and length) to the buffer. + * @return number of characters printed + */ +apr_size_t tls_util_bucket_print(char *buffer, apr_size_t bmax, + apr_bucket *b, const char *sep); + +/** + * Prints the brigade bucket types and lengths into the given buffer + * up to bmax. + * @return number of characters printed + */ +apr_size_t tls_util_bb_print(char *buffer, apr_size_t bmax, + const char *tag, const char *sep, + apr_bucket_brigade *bb); +/** + * Logs the bucket brigade (which bucket types with what length) + * to the log at the given level. + * @param c the connection to log for + * @param sid the stream identifier this brigade belongs to + * @param level the log level (as in APLOG_*) + * @param tag a short message text about the context + * @param bb the brigade to log + */ +#define tls_util_bb_log(c, level, tag, bb) \ +do { \ + char buffer[4 * 1024]; \ + const char *line = "(null)"; \ + apr_size_t len, bmax = sizeof(buffer)/sizeof(buffer[0]); \ + len = tls_util_bb_print(buffer, bmax, (tag), "", (bb)); \ + ap_log_cerror(APLOG_MARK, level, 0, (c), "bb_dump(%ld): %s", \ + ((c)->master? (c)->master->id : (c)->id), (len? buffer : line)); \ +} while(0) + + + +#endif /* tls_util_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_var.c apache2-2.4.52/modules/tls/tls_var.c --- apache2-2.4.51/modules/tls/tls_var.c 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_var.c 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,397 @@ +/* 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 +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include "tls_conf.h" +#include "tls_core.h" +#include "tls_cert.h" +#include "tls_util.h" +#include "tls_var.h" +#include "tls_version.h" + + +extern module AP_MODULE_DECLARE_DATA tls_module; +APLOG_USE_MODULE(tls); + +typedef struct { + apr_pool_t *p; + server_rec *s; + conn_rec *c; + request_rec *r; + tls_conf_conn_t *cc; + const char *name; + const char *arg_s; + int arg_i; +} tls_var_lookup_ctx_t; + +typedef const char *var_lookup(const tls_var_lookup_ctx_t *ctx); + +static const char *var_get_ssl_protocol(const tls_var_lookup_ctx_t *ctx) +{ + return ctx->cc->tls_protocol_name; +} + +static const char *var_get_ssl_cipher(const tls_var_lookup_ctx_t *ctx) +{ + return ctx->cc->tls_cipher_name; +} + +static const char *var_get_sni_hostname(const tls_var_lookup_ctx_t *ctx) +{ + return ctx->cc->sni_hostname; +} + +static const char *var_get_version_interface(const tls_var_lookup_ctx_t *ctx) +{ + tls_conf_server_t *sc = tls_conf_server_get(ctx->s); + return sc->global->module_version; +} + +static const char *var_get_version_library(const tls_var_lookup_ctx_t *ctx) +{ + tls_conf_server_t *sc = tls_conf_server_get(ctx->s); + return sc->global->crustls_version; +} + +static const char *var_get_false(const tls_var_lookup_ctx_t *ctx) +{ + (void)ctx; + return "false"; +} + +static const char *var_get_null(const tls_var_lookup_ctx_t *ctx) +{ + (void)ctx; + return "NULL"; +} + +static const char *var_get_client_s_dn_cn(const tls_var_lookup_ctx_t *ctx) +{ + /* There is no support in the crustls/rustls/webpki APIs to + * parse X.509 certificates and extract information about + * subject, issuer, etc. */ + if (!ctx->cc->peer_certs || !ctx->cc->peer_certs->nelts) return NULL; + return "Not Implemented"; +} + +static const char *var_get_client_verify(const tls_var_lookup_ctx_t *ctx) +{ + return ctx->cc->peer_certs? "SUCCESS" : "NONE"; +} + +static const char *var_get_session_resumed(const tls_var_lookup_ctx_t *ctx) +{ + return ctx->cc->session_id_cache_hit? "Resumed" : "Initial"; +} + +static const char *var_get_client_cert(const tls_var_lookup_ctx_t *ctx) +{ + const rustls_certificate *cert; + const char *pem; + apr_status_t rv; + int cert_idx = 0; + + if (ctx->arg_s) { + if (strcmp(ctx->arg_s, "chain")) return NULL; + /* ctx->arg_i'th chain cert, which is in out list as */ + cert_idx = ctx->arg_i + 1; + } + if (!ctx->cc->peer_certs || cert_idx >= ctx->cc->peer_certs->nelts) return NULL; + cert = APR_ARRAY_IDX(ctx->cc->peer_certs, cert_idx, const rustls_certificate*); + if (APR_SUCCESS != (rv = tls_cert_to_pem(&pem, ctx->p, cert))) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, ctx->s, APLOGNO(10315) + "Failed to create client certificate PEM"); + return NULL; + } + return pem; +} + +static const char *var_get_server_cert(const tls_var_lookup_ctx_t *ctx) +{ + const rustls_certificate *cert; + const char *pem; + apr_status_t rv; + + if (!ctx->cc->key) return NULL; + cert = rustls_certified_key_get_certificate(ctx->cc->key, 0); + if (!cert) return NULL; + if (APR_SUCCESS != (rv = tls_cert_to_pem(&pem, ctx->p, cert))) { + ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, ctx->s, APLOGNO(10316) + "Failed to create server certificate PEM"); + return NULL; + } + return pem; +} + +typedef struct { + const char *name; + var_lookup* fn; + const char *arg_s; + int arg_i; +} var_def_t; + +static const var_def_t VAR_DEFS[] = { + { "SSL_PROTOCOL", var_get_ssl_protocol, NULL, 0 }, + { "SSL_CIPHER", var_get_ssl_cipher, NULL, 0 }, + { "SSL_TLS_SNI", var_get_sni_hostname, NULL, 0 }, + { "SSL_CLIENT_S_DN_CN", var_get_client_s_dn_cn, NULL, 0 }, + { "SSL_VERSION_INTERFACE", var_get_version_interface, NULL, 0 }, + { "SSL_VERSION_LIBRARY", var_get_version_library, NULL, 0 }, + { "SSL_SECURE_RENEG", var_get_false, NULL, 0 }, + { "SSL_COMPRESS_METHOD", var_get_null, NULL, 0 }, + { "SSL_CIPHER_EXPORT", var_get_false, NULL, 0 }, + { "SSL_CLIENT_VERIFY", var_get_client_verify, NULL, 0 }, + { "SSL_SESSION_RESUMED", var_get_session_resumed, NULL, 0 }, + { "SSL_CLIENT_CERT", var_get_client_cert, NULL, 0 }, + { "SSL_CLIENT_CHAIN_0", var_get_client_cert, "chain", 0 }, + { "SSL_CLIENT_CHAIN_1", var_get_client_cert, "chain", 1 }, + { "SSL_CLIENT_CHAIN_2", var_get_client_cert, "chain", 2 }, + { "SSL_CLIENT_CHAIN_3", var_get_client_cert, "chain", 3 }, + { "SSL_CLIENT_CHAIN_4", var_get_client_cert, "chain", 4 }, + { "SSL_CLIENT_CHAIN_5", var_get_client_cert, "chain", 5 }, + { "SSL_CLIENT_CHAIN_6", var_get_client_cert, "chain", 6 }, + { "SSL_CLIENT_CHAIN_7", var_get_client_cert, "chain", 7 }, + { "SSL_CLIENT_CHAIN_8", var_get_client_cert, "chain", 8 }, + { "SSL_CLIENT_CHAIN_9", var_get_client_cert, "chain", 9 }, + { "SSL_SERVER_CERT", var_get_server_cert, NULL, 0 }, +}; + +static const char *const TlsAlwaysVars[] = { + "SSL_TLS_SNI", + "SSL_PROTOCOL", + "SSL_CIPHER", + "SSL_CLIENT_S_DN_CN", +}; + +/* what mod_ssl defines, plus server cert and client cert DN and SAN entries */ +static const char *const StdEnvVars[] = { + "SSL_VERSION_INTERFACE", /* implemented: module version string */ + "SSL_VERSION_LIBRARY", /* implemented: crustls/rustls version string */ + "SSL_SECURE_RENEG", /* implemented: always "false" */ + "SSL_COMPRESS_METHOD", /* implemented: always "NULL" */ + "SSL_CIPHER_EXPORT", /* implemented: always "false" */ + "SSL_CIPHER_USEKEYSIZE", + "SSL_CIPHER_ALGKEYSIZE", + "SSL_CLIENT_VERIFY", /* implemented: always "SUCCESS" or "NONE" */ + "SSL_CLIENT_M_VERSION", + "SSL_CLIENT_M_SERIAL", + "SSL_CLIENT_V_START", + "SSL_CLIENT_V_END", + "SSL_CLIENT_V_REMAIN", + "SSL_CLIENT_S_DN", + "SSL_CLIENT_I_DN", + "SSL_CLIENT_A_KEY", + "SSL_CLIENT_A_SIG", + "SSL_CLIENT_CERT_RFC4523_CEA", + "SSL_SERVER_M_VERSION", + "SSL_SERVER_M_SERIAL", + "SSL_SERVER_V_START", + "SSL_SERVER_V_END", + "SSL_SERVER_S_DN", + "SSL_SERVER_I_DN", + "SSL_SERVER_A_KEY", + "SSL_SERVER_A_SIG", + "SSL_SESSION_ID", /* not implemented: highly sensitive data we do not expose */ + "SSL_SESSION_RESUMED", /* implemented: if our cache was hit successfully */ +}; + +/* Cert related variables, export when TLSOption ExportCertData is set */ +static const char *const ExportCertVars[] = { + "SSL_CLIENT_CERT", /* implemented: */ + "SSL_CLIENT_CHAIN_0", /* implemented: */ + "SSL_CLIENT_CHAIN_1", /* implemented: */ + "SSL_CLIENT_CHAIN_2", /* implemented: */ + "SSL_CLIENT_CHAIN_3", /* implemented: */ + "SSL_CLIENT_CHAIN_4", /* implemented: */ + "SSL_CLIENT_CHAIN_5", /* implemented: */ + "SSL_CLIENT_CHAIN_6", /* implemented: */ + "SSL_CLIENT_CHAIN_7", /* implemented: */ + "SSL_CLIENT_CHAIN_8", /* implemented: */ + "SSL_CLIENT_CHAIN_9", /* implemented: */ + "SSL_SERVER_CERT", /* implemented: */ +}; + +void tls_var_init_lookup_hash(apr_pool_t *pool, apr_hash_t *map) +{ + const var_def_t *def; + apr_size_t i; + + (void)pool; + for (i = 0; i < TLS_DIM(VAR_DEFS); ++i) { + def = &VAR_DEFS[i]; + apr_hash_set(map, def->name, APR_HASH_KEY_STRING, def); + } +} + +static const char *invoke(var_def_t* def, tls_var_lookup_ctx_t *ctx) +{ + if (TLS_CONN_ST_IS_ENABLED(ctx->cc)) { + const char *val = ctx->cc->subprocess_env? + apr_table_get(ctx->cc->subprocess_env, def->name) : NULL; + if (val && *val) return val; + ctx->arg_s = def->arg_s; + ctx->arg_i = def->arg_i; + return def->fn(ctx); + } + return NULL; +} + +static void set_var( + tls_var_lookup_ctx_t *ctx, apr_hash_t *lookups, apr_table_t *table) +{ + var_def_t* def = apr_hash_get(lookups, ctx->name, APR_HASH_KEY_STRING); + if (def) { + const char *val = invoke(def, ctx); + if (val && *val) { + apr_table_setn(table, ctx->name, val); + } + } +} + +const char *tls_var_lookup( + apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, const char *name) +{ + const char *val = NULL; + tls_conf_server_t *sc; + var_def_t* def; + + ap_assert(p); + ap_assert(name); + s = s? s : (r? r->server : (c? c->base_server : NULL)); + c = c? c : (r? r->connection : NULL); + + sc = tls_conf_server_get(s? s : ap_server_conf); + def = apr_hash_get(sc->global->var_lookups, name, APR_HASH_KEY_STRING); + if (def) { + tls_var_lookup_ctx_t ctx; + ctx.p = p; + ctx.s = s; + ctx.c = c; + ctx.r = r; + ctx.cc = c? tls_conf_conn_get(c->master? c->master : c) : NULL; + ctx.cc = c? tls_conf_conn_get(c->master? c->master : c) : NULL; + ctx.name = name; + val = invoke(def, &ctx); + ap_log_cerror(APLOG_MARK, APLOG_TRACE3, 0, c, "tls lookup of var '%s' -> '%s'", name, val); + } + return val; +} + +static void add_vars(apr_table_t *env, conn_rec *c, server_rec *s, request_rec *r) +{ + tls_conf_server_t *sc; + tls_conf_dir_t *dc, *sdc; + tls_var_lookup_ctx_t ctx; + apr_size_t i; + int overlap; + + sc = tls_conf_server_get(s); + dc = r? tls_conf_dir_get(r) : tls_conf_dir_server_get(s); + sdc = r? tls_conf_dir_server_get(s): dc; + ctx.p = r? r->pool : c->pool; + ctx.s = s; + ctx.c = c; + ctx.r = r; + ctx.cc = tls_conf_conn_get(c->master? c->master : c); + /* Can we re-use teh precomputed connection values? */ + overlap = (r && ctx.cc->subprocess_env && r->server == ctx.cc->server); + if (overlap) { + apr_table_overlap(env, ctx.cc->subprocess_env, APR_OVERLAP_TABLES_SET); + } + else { + apr_table_setn(env, "HTTPS", "on"); + for (i = 0; i < TLS_DIM(TlsAlwaysVars); ++i) { + ctx.name = TlsAlwaysVars[i]; + set_var(&ctx, sc->global->var_lookups, env); + } + } + if (dc->std_env_vars == TLS_FLAG_TRUE) { + for (i = 0; i < TLS_DIM(StdEnvVars); ++i) { + ctx.name = StdEnvVars[i]; + set_var(&ctx, sc->global->var_lookups, env); + } + } + else if (overlap && sdc->std_env_vars == TLS_FLAG_TRUE) { + /* Remove variables added on connection init that are disbled here */ + for (i = 0; i < TLS_DIM(StdEnvVars); ++i) { + apr_table_unset(env, StdEnvVars[i]); + } + } + if (dc->export_cert_vars == TLS_FLAG_TRUE) { + for (i = 0; i < TLS_DIM(ExportCertVars); ++i) { + ctx.name = ExportCertVars[i]; + set_var(&ctx, sc->global->var_lookups, env); + } + } + else if (overlap && sdc->std_env_vars == TLS_FLAG_TRUE) { + /* Remove variables added on connection init that are disbled here */ + for (i = 0; i < TLS_DIM(ExportCertVars); ++i) { + apr_table_unset(env, ExportCertVars[i]); + } + } + } + +apr_status_t tls_var_handshake_done(conn_rec *c) +{ + tls_conf_conn_t *cc; + tls_conf_server_t *sc; + apr_status_t rv = APR_SUCCESS; + + cc = tls_conf_conn_get(c); + if (!TLS_CONN_ST_IS_ENABLED(cc)) goto cleanup; + + sc = tls_conf_server_get(cc->server); + if (cc->peer_certs && sc->var_user_name) { + cc->user_name = tls_var_lookup(c->pool, cc->server, c, NULL, sc->var_user_name); + if (!cc->user_name) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cc->server, APLOGNO(10317) + "Failed to set r->user to '%s'", sc->var_user_name); + } + } + cc->subprocess_env = apr_table_make(c->pool, 5); + add_vars(cc->subprocess_env, c, cc->server, NULL); + +cleanup: + return rv; +} + +int tls_var_request_fixup(request_rec *r) +{ + conn_rec *c = r->connection; + tls_conf_conn_t *cc; + + cc = tls_conf_conn_get(c->master? c->master : c); + if (!TLS_CONN_ST_IS_ENABLED(cc)) goto cleanup; + if (cc->user_name) { + /* why is r->user a char* and not const? */ + r->user = apr_pstrdup(r->pool, cc->user_name); + } + add_vars(r->subprocess_env, c, r->server, r); + +cleanup: + return DECLINED; +} diff -Nru apache2-2.4.51/modules/tls/tls_var.h apache2-2.4.52/modules/tls/tls_var.h --- apache2-2.4.51/modules/tls/tls_var.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_var.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,39 @@ +/* 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 tls_var_h +#define tls_var_h + +void tls_var_init_lookup_hash(apr_pool_t *pool, apr_hash_t *map); + +/** + * Callback for installation in Apache's 'ssl_var_lookup' hook to provide + * SSL related variable lookups to other modules. + */ +const char *tls_var_lookup( + apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, const char *name); + +/** + * A connection has been handshaked. Prepare commond TLS variables on this connection. + */ +apr_status_t tls_var_handshake_done(conn_rec *c); + +/** + * A request is ready for processing, add TLS variables r->subprocess_env if applicable. + * This is a hook function returning OK/DECLINED. + */ +int tls_var_request_fixup(request_rec *r); + +#endif /* tls_var_h */ \ No newline at end of file diff -Nru apache2-2.4.51/modules/tls/tls_version.h apache2-2.4.52/modules/tls/tls_version.h --- apache2-2.4.51/modules/tls/tls_version.h 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/modules/tls/tls_version.h 2021-11-30 16:29:20.000000000 +0000 @@ -0,0 +1,39 @@ +/* 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 mod_tls_version_h +#define mod_tls_version_h + +#undef PACKAGE_VERSION +#undef PACKAGE_TARNAME +#undef PACKAGE_STRING +#undef PACKAGE_NAME +#undef PACKAGE_BUGREPORT + +/** + * @macro + * Version number of the md module as c string + */ +#define MOD_TLS_VERSION "0.8.3" + +/** + * @macro + * Numerical representation of the version number of the md module + * release. This is a 24 bit number with 8 bits for major number, 8 bits + * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203. + */ +#define MOD_TLS_VERSION_NUM 0x000802 + +#endif /* mod_md_md_version_h */ diff -Nru apache2-2.4.51/server/connection.c apache2-2.4.52/server/connection.c --- apache2-2.4.51/server/connection.c 2021-09-26 14:11:22.000000000 +0000 +++ apache2-2.4.52/server/connection.c 2021-12-03 15:34:16.000000000 +0000 @@ -122,9 +122,7 @@ { apr_socket_t *csd = ap_get_conn_socket(c); - if (!csd) { - return 1; - } + ap_assert(csd != NULL); if (ap_prep_lingering_close(c)) { return 1; @@ -155,6 +153,15 @@ apr_time_t now, timeup = 0; apr_socket_t *csd = ap_get_conn_socket(c); + if (!csd) { + /* Be safe with third-party modules that: + * ap_set_core_module_config(c->conn_config, NULL) + * to no-op ap_lingering_close(). + */ + c->aborted = 1; + return; + } + if (ap_start_lingering_close(c)) { apr_socket_close(csd); return; diff -Nru apache2-2.4.51/server/mpm/event/event.c apache2-2.4.52/server/mpm/event/event.c --- apache2-2.4.51/server/mpm/event/event.c 2021-09-26 14:35:55.000000000 +0000 +++ apache2-2.4.52/server/mpm/event/event.c 2021-12-13 10:43:53.000000000 +0000 @@ -167,8 +167,6 @@ static int min_spare_threads = 0; /* MinSpareThreads */ static int max_spare_threads = 0; /* MaxSpareThreads */ static int active_daemons_limit = 0; /* MaxRequestWorkers / ThreadsPerChild */ -static int active_daemons = 0; /* workers that still active, i.e. are - not shutting down gracefully */ static int max_workers = 0; /* MaxRequestWorkers */ static int server_limit = 0; /* ServerLimit */ static int thread_limit = 0; /* ThreadLimit */ @@ -389,7 +387,10 @@ * Not kept up-to-date when shutdown is pending. */ int total_daemons; - + /* + * Workers that still active, i.e. are not shutting down gracefully. + */ + int active_daemons; /* * idle_spawn_rate is the number of children that will be spawned on the * next maintenance cycle if there aren't enough idle servers. It is @@ -2759,7 +2760,7 @@ ap_scoreboard_image->parent[slot].quiescing = 0; ap_scoreboard_image->parent[slot].not_accepting = 0; event_note_child_started(slot, pid); - active_daemons++; + retained->active_daemons++; retained->total_daemons++; return 0; } @@ -2780,41 +2781,39 @@ } } -static void perform_idle_server_maintenance(int child_bucket, int num_buckets) +static void perform_idle_server_maintenance(int child_bucket) { - int i, j; + int num_buckets = retained->mpm->num_buckets; int idle_thread_count = 0; - worker_score *ws; process_score *ps; int free_length = 0; int free_slots[MAX_SPAWN_RATE]; int last_non_dead = -1; int active_thread_count = 0; + int i, j; for (i = 0; i < server_limit; ++i) { - /* Initialization to satisfy the compiler. It doesn't know - * that threads_per_child is always > 0 */ - int status = SERVER_DEAD; - int child_threads_active = 0; - int bucket = i % num_buckets; - + if (num_buckets > 1 && (i % num_buckets) != child_bucket) { + /* We only care about child_bucket in this call */ + continue; + } if (i >= retained->max_daemons_limit && free_length == retained->idle_spawn_rate[child_bucket]) { /* short cut if all active processes have been examined and * enough empty scoreboard slots have been found */ - break; } + ps = &ap_scoreboard_image->parent[i]; if (ps->pid != 0) { + int child_threads_active = 0; if (ps->quiescing == 1) { ps->quiescing = 2; - active_daemons--; + retained->active_daemons--; } for (j = 0; j < threads_per_child; j++) { - ws = &ap_scoreboard_image->servers[i][j]; - status = ws->status; + int status = ap_scoreboard_image->servers[i][j].status; /* We consider a starting server as idle because we started it * at least a cycle ago, and if it still hasn't finished starting @@ -2823,26 +2822,26 @@ * This depends on the ordering of SERVER_READY and SERVER_STARTING. */ if (status <= SERVER_READY && !ps->quiescing && !ps->not_accepting - && ps->generation == retained->mpm->my_generation - && bucket == child_bucket) - { + && ps->generation == retained->mpm->my_generation) { ++idle_thread_count; } if (status >= SERVER_READY && status < SERVER_GRACEFUL) { ++child_threads_active; } } + active_thread_count += child_threads_active; + if (child_threads_active == threads_per_child) { + had_healthy_child = 1; + } last_non_dead = i; } - active_thread_count += child_threads_active; - if (!ps->pid - && bucket == child_bucket - && free_length < retained->idle_spawn_rate[child_bucket]) + else if (free_length < retained->idle_spawn_rate[child_bucket]) { free_slots[free_length++] = i; - else if (child_threads_active == threads_per_child) - had_healthy_child = 1; + } } + retained->max_daemons_limit = last_non_dead + 1; + if (retained->sick_child_detected) { if (had_healthy_child) { /* Assume this is a transient error, even though it may not be. Leave @@ -2851,6 +2850,10 @@ */ retained->sick_child_detected = 0; } + else if (child_bucket < num_buckets - 1) { + /* check for had_healthy_child up to the last child bucket */ + return; + } else { /* looks like a basket case, as no child ever fully initialized; give up. */ @@ -2866,18 +2869,16 @@ } } - retained->max_daemons_limit = last_non_dead + 1; - - if (idle_thread_count > max_spare_threads / num_buckets) - { + if (idle_thread_count > max_spare_threads / num_buckets) { /* * Child processes that we ask to shut down won't die immediately * but may stay around for a long time when they finish their * requests. If the server load changes many times, many such * gracefully finishing processes may accumulate, filling up the * scoreboard. To avoid running out of scoreboard entries, we - * don't shut down more processes when the total number of processes - * is high. + * don't shut down more processes if there are stopping ones + * already (i.e. active_daemons != total_daemons) and not enough + * slack space in the scoreboard for a graceful restart. * * XXX It would be nice if we could * XXX - kill processes without keepalive connections first @@ -2885,22 +2886,29 @@ * XXX depending on server load, later be able to resurrect them * or kill them */ - if (retained->total_daemons <= active_daemons_limit && - retained->total_daemons < server_limit) { - /* Kill off one child */ + int do_kill = (retained->active_daemons == retained->total_daemons + || (server_limit - retained->total_daemons > + active_daemons_limit)); + ap_log_error(APLOG_MARK, APLOG_TRACE5, 0, ap_server_conf, + "%shutting down one child: " + "active daemons %d / active limit %d / " + "total daemons %d / ServerLimit %d / " + "idle threads %d / max workers %d", + (do_kill) ? "S" : "Not s", + retained->active_daemons, active_daemons_limit, + retained->total_daemons, server_limit, + idle_thread_count, max_workers); + if (do_kill) { ap_mpm_podx_signal(all_buckets[child_bucket].pod, AP_MPM_PODX_GRACEFUL); - retained->idle_spawn_rate[child_bucket] = 1; - } else { - ap_log_error(APLOG_MARK, APLOG_TRACE5, 0, ap_server_conf, - "Not shutting down child: total daemons %d / " - "active limit %d / ServerLimit %d", - retained->total_daemons, active_daemons_limit, - server_limit); } + else { + /* Wait for dying daemon(s) to exit */ + } + retained->idle_spawn_rate[child_bucket] = 1; } else if (idle_thread_count < min_spare_threads / num_buckets) { - if (active_thread_count >= max_workers) { + if (active_thread_count >= max_workers / num_buckets) { if (0 == idle_thread_count) { if (!retained->maxclients_reported) { ap_log_error(APLOG_MARK, APLOG_ERR, 0, ap_server_conf, APLOGNO(00484) @@ -2931,16 +2939,16 @@ if (free_length > retained->idle_spawn_rate[child_bucket]) { free_length = retained->idle_spawn_rate[child_bucket]; } - if (free_length + active_daemons > active_daemons_limit) { - if (active_daemons < active_daemons_limit) { - free_length = active_daemons_limit - active_daemons; + if (free_length + retained->active_daemons > active_daemons_limit) { + if (retained->active_daemons < active_daemons_limit) { + free_length = active_daemons_limit - retained->active_daemons; } else { ap_log_error(APLOG_MARK, APLOG_TRACE1, 0, ap_server_conf, "server is at active daemons limit, spawning " "of %d children cancelled: %d/%d active, " "rate %d", free_length, - active_daemons, active_daemons_limit, + retained->active_daemons, active_daemons_limit, retained->idle_spawn_rate[child_bucket]); free_length = 0; } @@ -2953,14 +2961,14 @@ "spawning %d children, there are around %d idle " "threads, %d active children, and %d children " "that are shutting down", free_length, - idle_thread_count, active_daemons, + idle_thread_count, retained->active_daemons, retained->total_daemons); } for (i = 0; i < free_length; ++i) { ap_log_error(APLOG_MARK, APLOG_TRACE5, 0, ap_server_conf, "Spawning new child: slot %d active / " "total daemons: %d/%d", - free_slots[i], active_daemons, + free_slots[i], retained->active_daemons, retained->total_daemons); make_child(ap_server_conf, free_slots[i], child_bucket); } @@ -2981,8 +2989,9 @@ } } -static void server_main_loop(int remaining_children_to_start, int num_buckets) +static void server_main_loop(int remaining_children_to_start) { + int num_buckets = retained->mpm->num_buckets; int child_slot; apr_exit_why_e exitwhy; int status, processed_status; @@ -3037,7 +3046,7 @@ event_note_child_killed(child_slot, 0, 0); ps = &ap_scoreboard_image->parent[child_slot]; if (!ps->quiescing) - active_daemons--; + retained->active_daemons--; ps->quiescing = 0; /* NOTE: We don't dec in the (child_slot < 0) case! */ retained->total_daemons--; @@ -3091,7 +3100,7 @@ } for (i = 0; i < num_buckets; i++) { - perform_idle_server_maintenance(i, num_buckets); + perform_idle_server_maintenance(i); } } } @@ -3168,7 +3177,7 @@ retained->mpm->mpm_state = AP_MPMQ_RUNNING; - server_main_loop(remaining_children_to_start, num_buckets); + server_main_loop(remaining_children_to_start); retained->mpm->mpm_state = AP_MPMQ_STOPPING; if (retained->mpm->shutdown_pending && retained->mpm->is_ungraceful) { @@ -3298,8 +3307,6 @@ "SIGHUP received. Attempting to restart"); } - active_daemons = 0; - return OK; } @@ -3466,7 +3473,6 @@ if (!retained) { retained = ap_retained_data_create(userdata_key, sizeof(*retained)); retained->mpm = ap_unixd_mpm_get_retained_data(); - retained->max_daemons_limit = -1; if (retained->mpm->module_loads) { test_atomics = 1; } diff -Nru apache2-2.4.51/server/mpm/mpmt_os2/mpmt_os2.c apache2-2.4.52/server/mpm/mpmt_os2/mpmt_os2.c --- apache2-2.4.51/server/mpm/mpmt_os2/mpmt_os2.c 2020-02-21 00:33:40.000000000 +0000 +++ apache2-2.4.52/server/mpm/mpmt_os2/mpmt_os2.c 2021-12-13 10:43:53.000000000 +0000 @@ -79,7 +79,7 @@ int ap_max_spare_threads = 0; /* Keep track of a few interesting statistics */ -int ap_max_daemons_limit = -1; +int ap_max_daemons_limit = 0; /* volatile just in case */ static int volatile shutdown_pending; @@ -344,8 +344,8 @@ "error spawning child, slot %d", slot); } - if (ap_max_daemons_limit < slot) { - ap_max_daemons_limit = slot; + if (slot + 1 > ap_max_daemons_limit) { + ap_max_daemons_limit = slot + 1; } ap_scoreboard_image->parent[slot].pid = proc_rc.codeTerminate; diff -Nru apache2-2.4.51/server/mpm/prefork/prefork.c apache2-2.4.52/server/mpm/prefork/prefork.c --- apache2-2.4.51/server/mpm/prefork/prefork.c 2021-09-06 10:03:06.000000000 +0000 +++ apache2-2.4.52/server/mpm/prefork/prefork.c 2021-12-13 10:43:53.000000000 +0000 @@ -1288,7 +1288,6 @@ if (!retained) { retained = ap_retained_data_create(userdata_key, sizeof(*retained)); retained->mpm = ap_unixd_mpm_get_retained_data(); - retained->max_daemons_limit = -1; retained->idle_spawn_rate = 1; } retained->mpm->mpm_state = AP_MPMQ_STARTING; diff -Nru apache2-2.4.51/server/mpm/worker/worker.c apache2-2.4.52/server/mpm/worker/worker.c --- apache2-2.4.51/server/mpm/worker/worker.c 2021-08-10 08:43:11.000000000 +0000 +++ apache2-2.4.52/server/mpm/worker/worker.c 2021-12-13 10:43:53.000000000 +0000 @@ -1365,11 +1365,10 @@ } } -static void perform_idle_server_maintenance(int child_bucket, int num_buckets) +static void perform_idle_server_maintenance(int child_bucket) { - int i, j; + int num_buckets = retained->mpm->num_buckets; int idle_thread_count; - worker_score *ws; process_score *ps; int free_length; int totally_free_length = 0; @@ -1377,6 +1376,7 @@ int last_non_dead; int total_non_dead; int active_thread_count = 0; + int i, j; /* initialize the free_list */ free_length = 0; @@ -1388,13 +1388,15 @@ for (i = 0; i < ap_daemons_limit; ++i) { /* Initialization to satisfy the compiler. It doesn't know * that threads_per_child is always > 0 */ - int status = SERVER_DEAD; int any_dying_threads = 0; int any_dead_threads = 0; int all_dead_threads = 1; int child_threads_active = 0; - int bucket = i % num_buckets; + if (num_buckets > 1 && (i % num_buckets) != child_bucket) { + /* We only care about child_bucket in this call */ + continue; + } if (i >= retained->max_daemons_limit && totally_free_length == retained->idle_spawn_rate[child_bucket]) { /* short cut if all active processes have been examined and @@ -1404,8 +1406,7 @@ } ps = &ap_scoreboard_image->parent[i]; for (j = 0; j < threads_per_child; j++) { - ws = &ap_scoreboard_image->servers[i][j]; - status = ws->status; + int status = ap_scoreboard_image->servers[i][j].status; /* XXX any_dying_threads is probably no longer needed GLA */ any_dying_threads = any_dying_threads || @@ -1425,8 +1426,7 @@ loop if no pid? not much else matters */ if (status <= SERVER_READY && !ps->quiescing && - ps->generation == retained->mpm->my_generation && - bucket == child_bucket) { + ps->generation == retained->mpm->my_generation) { ++idle_thread_count; } if (status >= SERVER_READY && status < SERVER_GRACEFUL) { @@ -1436,7 +1436,6 @@ } active_thread_count += child_threads_active; if (any_dead_threads - && bucket == child_bucket && totally_free_length < retained->idle_spawn_rate[child_bucket] && free_length < MAX_SPAWN_RATE / num_buckets && (!ps->pid /* no process in the slot */ @@ -1464,11 +1463,15 @@ } /* XXX if (!ps->quiescing) is probably more reliable GLA */ if (!any_dying_threads) { - last_non_dead = i; ++total_non_dead; } + if (ps->pid != 0) { + last_non_dead = i; + } } + retained->max_daemons_limit = last_non_dead + 1; + if (retained->sick_child_detected) { if (had_healthy_child) { /* Assume this is a transient error, even though it may not be. Leave @@ -1477,6 +1480,10 @@ */ retained->sick_child_detected = 0; } + else if (child_bucket < num_buckets - 1) { + /* check for had_healthy_child up to the last child bucket */ + return; + } else { /* looks like a basket case, as no child ever fully initialized; give up. */ @@ -1492,8 +1499,6 @@ } } - retained->max_daemons_limit = last_non_dead + 1; - if (idle_thread_count > max_spare_threads / num_buckets) { /* Kill off one child */ ap_mpm_podx_signal(all_buckets[child_bucket].pod, @@ -1504,7 +1509,7 @@ /* terminate the free list */ if (free_length == 0) { /* scoreboard is full, can't fork */ - if (active_thread_count >= ap_daemons_limit * threads_per_child) { + if (active_thread_count >= max_workers / num_buckets) { /* no threads are "inactive" - starting, stopping, etc. */ /* have we reached MaxRequestWorkers, or just getting close? */ if (0 == idle_thread_count) { @@ -1567,8 +1572,9 @@ } } -static void server_main_loop(int remaining_children_to_start, int num_buckets) +static void server_main_loop(int remaining_children_to_start) { + int num_buckets = retained->mpm->num_buckets; ap_generation_t old_gen; int child_slot; apr_exit_why_e exitwhy; @@ -1682,7 +1688,7 @@ } for (i = 0; i < num_buckets; i++) { - perform_idle_server_maintenance(i, num_buckets); + perform_idle_server_maintenance(i); } } } @@ -1764,7 +1770,7 @@ apr_proc_mutex_defname()); retained->mpm->mpm_state = AP_MPMQ_RUNNING; - server_main_loop(remaining_children_to_start, num_buckets); + server_main_loop(remaining_children_to_start); retained->mpm->mpm_state = AP_MPMQ_STOPPING; if (retained->mpm->shutdown_pending && retained->mpm->is_ungraceful) { @@ -2019,7 +2025,6 @@ if (!retained) { retained = ap_retained_data_create(userdata_key, sizeof(*retained)); retained->mpm = ap_unixd_mpm_get_retained_data(); - retained->max_daemons_limit = -1; } retained->mpm->mpm_state = AP_MPMQ_STARTING; if (retained->mpm->baton != retained) { diff -Nru apache2-2.4.51/server/protocol.c apache2-2.4.52/server/protocol.c --- apache2-2.4.51/server/protocol.c 2021-09-08 08:31:38.000000000 +0000 +++ apache2-2.4.52/server/protocol.c 2021-12-14 15:35:56.000000000 +0000 @@ -1548,7 +1548,7 @@ /* we may have switched to another server */ apply_server_config(r); - if ((access_status = ap_run_post_read_request(r))) { + if ((access_status = ap_post_read_request(r))) { goto die; } @@ -1603,6 +1603,27 @@ return NULL; } +AP_DECLARE(int) ap_post_read_request(request_rec *r) +{ + int status; + + if ((status = ap_run_post_read_request(r))) { + return status; + } + + /* Enforce http(s) only scheme for non-forward-proxy requests */ + if (!r->proxyreq + && r->parsed_uri.scheme + && (ap_cstr_casecmpn(r->parsed_uri.scheme, "http", 4) != 0 + || (r->parsed_uri.scheme[4] != '\0' + && (apr_tolower(r->parsed_uri.scheme[4]) != 's' + || r->parsed_uri.scheme[5] != '\0')))) { + return HTTP_BAD_REQUEST; + } + + return OK; +} + /* if a request with a body creates a subrequest, remove original request's * input headers which pertain to the body which has already been read. * out-of-line helper function for ap_set_sub_req_protocol. diff -Nru apache2-2.4.51/server/util_filter.c apache2-2.4.52/server/util_filter.c --- apache2-2.4.51/server/util_filter.c 2016-02-09 23:09:24.000000000 +0000 +++ apache2-2.4.52/server/util_filter.c 2021-10-12 08:13:29.000000000 +0000 @@ -565,8 +565,9 @@ apr_bucket_brigade *bb) { if (next) { - apr_bucket *e; - if ((e = APR_BRIGADE_LAST(bb)) && APR_BUCKET_IS_EOS(e) && next->r) { + apr_bucket *e = APR_BRIGADE_LAST(bb); + + if (e != APR_BRIGADE_SENTINEL(bb) && APR_BUCKET_IS_EOS(e) && next->r) { /* This is only safe because HTTP_HEADER filter is always in * the filter stack. This ensures that there is ALWAYS a * request-based filter that we can attach this to. If the diff -Nru apache2-2.4.51/test/Makefile.in apache2-2.4.52/test/Makefile.in --- apache2-2.4.51/test/Makefile.in 2011-12-19 17:27:13.000000000 +0000 +++ apache2-2.4.52/test/Makefile.in 2021-12-14 11:26:52.000000000 +0000 @@ -18,3 +18,9 @@ # dbu_OBJECTS = dbu.lo # dbu: $(dbu_OBJECTS) # $(LINK) $(dbu_OBJECTS) $(PROGRAM_LDADD) + +clean: + rm -rf gen + +distclean: + rm -f pyhttpd/config.ini \ No newline at end of file diff -Nru apache2-2.4.51/test/README.pytest apache2-2.4.52/test/README.pytest --- apache2-2.4.51/test/README.pytest 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/test/README.pytest 2021-12-15 10:14:23.000000000 +0000 @@ -0,0 +1,127 @@ +Apache httpd pytest suite +========================= +Using pytest () and a Python >= 3.8 +for a more flexible testing of Apache httpd. + +Usage +----- +In your httpd source checkout, do: + +> make install +> pytest + +and all tests defined run on the installed executable and modules. +> pytest test/modules/core +runs all the core tests. You can run tests also by name selection: +> pytest -k test_core +runs all test cases starting with 'test_core'. Similar: +> pytest -k test_core_001_04 +runs the test cases starting with that. + +Test output gets more verbose, by adding one or several '-v'. This +also raises the error log level of the tested modules. +> pytest -vvv -k test_h2_004_01 +run the specific test with mod_http2 at log level TRACE2. + +By default, test cases will configure httpd with mpm_event. You +can change that with the invocation: +> MPM=worker pytest test/modules/http2 + +Some tests rely on additional tools installed in your environment +and will 'skip' if those are not present. In a non-verbose run, +these will appear as 's' in the output. If you run pytest more +verbose, the skipped test cases will mention a reason for why +they are disabled. + +For example, most tests in test/modules/md require an installation +of 'pebble', an ACME test server, and look for it in $PATH. + + +Workings +-------- +All tests start httpd on their own and try hard to shut it down +afterwards. You can abort tests with ^C and they clean up. + +httpd is started/stopped repeatedly in testing as configurations +for individual test cases are changed. This is a main difference to +the Perl test framework which starts the server with all possible +combinations configured that are needed by tests. + +In test/gen/apache a server root is created with config, logs and htdocs +directories. test/gen/apache/logs/error_log will be the log. +Configs start in test/gen/apache/conf/httpd.conf. modules.conf is +dynamically created for the list of modules that a test suite needs. + +Test cases write their specific setup in test.conf and reload/restart +the httpd process. This makes for a small configuration in a test case. + + +Development +----------- + +Adding a test in an existing file is done by adding a method. Its name +must start with 'test_' and the common practise is to have the name +of the test suite there as well. All http2 tests start with 'test_h2_'. + +Following this can be any characters. If you make test cases of a +certain feature with a common prefix, it is easier to invoke just +them using the '-k' selector on the command line. + +You can also add just a new file to a test suite, if you do a new +range of test cases that do not fit anywhere else. A very simple +one is found in test/modules/http2/test_001_httpd_alive.py. + +There is a python class defined with 2 methods. One is the test +method itself and the other one ' is + + @pytest.fixture(autouse=True, scope='class') + def _class_scope(self, env): + code + +is marked as a pytest 'fixture'. This is some pytest magic. +'autouse=True' means that this fixture is run, even though +no test case uses it directly. scope='class' means that it +is run once for all test cases in this class. + +As you see, this fixture gets a parameter named 'env' and +that is the name of another pytest fixture, defined in the +file 'conftest.py' in the same directory. + + @pytest.fixture(scope="package") + def env(pytestconfig) -> H2TestEnv: + code + +This one runs one time per 'package', meaning for all test +cases in this directory. And it gets the 'pytestconfig' +as parameter which is a standard pytest fixture. + +So, when you run 'pytest -k test_h2_004', pytest will look +at _all_ test cases defined and collect those with that +prefix. For each directory with test cases found, it will +process the 'conftest.py', boot-strapping the 'env' fixture, +and the process the files with active test cases. + +As a result, if you invoke just a single test case, only +the fixtures needed for that test case are created. This +gives good turn around times when debugging a test case. + +If you want to add a new test suite, create a new directory. +Add the files '__init__.py', 'conftest.py' and a first +'test_suitename_something.py'. test/modules/core is the +simplest example. 'test/modules/http2' shows how you load +other modules. 'test/modules/md' checks and starts external +processes (an ACME test server). + + +Infrastructure +-------------- +The test cases rely on the classes provided in 'test/pyhttpd' +for common code in managing a httpd test instance and do +provide some base setups: +- a small set of virtual hosts with some files +- access to paths and definitions (env fixture) +- start/stop httpd and inspect the error log +- run clients like curl and nghttp +- create certificates for your hosts and make curl use + the root certs (so no --insecure calls by curl). + diff -Nru apache2-2.4.51/test/README.travis apache2-2.4.52/test/README.travis --- apache2-2.4.51/test/README.travis 2020-06-17 11:18:59.000000000 +0000 +++ apache2-2.4.52/test/README.travis 2021-12-13 15:01:53.000000000 +0000 @@ -28,11 +28,17 @@ * SKIP_TESTING - if set, the Perl test framework is not run for the build. -* TEST_UBSAN - set for builds using UBSan ("Undefined Behaviour Sanitizer") +* TEST_UBSAN - set for job using UBSan ("Undefined Behaviour Sanitizer") -* TEST_MALLOC - set for builds using enhanced malloc debugging. +* TEST_MALLOC - set for job using enhanced malloc debugging. -* TEST_LDAP - set for builds with slapd running +* TEST_INSTALL - set for job testing "make install" + +* TEST_VPATH - set for job testing srcdir!=builddir + +* TEST_LDAP - set for job with slapd, running LDAP tests + +* TEST_SSL - set for job with SSL/TLS testing variants * TESTS - a list of Perl framework tests to run @@ -54,13 +60,10 @@ * Windows build * clang-on-Linux build * Use containers for non-Ubuntu-based Linux testing -* VPATH builds * sanity checks for use of APLOGNO() - empty arguments, accidental duplicates, etc. - not sure how exactly * Known test failures - "apt-get install" timeout/fails - workaround by moving apt install to before_script phase? - - t/apache/rwrite.t, t/apache/pass_brigade.t - see msg etc Testing from a Feature Branch ----------------------------- @@ -70,7 +73,7 @@ available for those familiar with using Subversion and the standard ASF/httpd repository layout. -Tested branches are listed at: https://travis-ci.org/apache/httpd/branches +Tested branches are listed at: https://travis-ci.org/github/apache/httpd/branches Travis will also run the tests for a PR filed against the httpd Github repository at https://github.com/apache/httpd or from a fork of this @@ -97,7 +100,7 @@ Once a PR has been created, travis will run the tests and link the results from a PR comment. All tested PRs are listed here: -https://travis-ci.org/apache/httpd/pull_requests +https://travis-ci.org/github/apache/httpd/pull_requests To merge from github back to SVN trunk, create a patch from e.g.: diff -Nru apache2-2.4.51/test/conftest.py apache2-2.4.52/test/conftest.py --- apache2-2.4.51/test/conftest.py 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/test/conftest.py 2021-12-14 11:26:52.000000000 +0000 @@ -0,0 +1,12 @@ +import sys +import os + +sys.path.append(os.path.join(os.path.dirname(__file__), '.')) + +from pyhttpd.env import HttpdTestEnv + +def pytest_report_header(config, startdir): + env = HttpdTestEnv() + return f"[apache httpd: {env.get_httpd_version()}, mpm: {env.mpm_module}, {env.prefix}]" + + diff -Nru apache2-2.4.51/test/modules/core/__init__.py apache2-2.4.52/test/modules/core/__init__.py --- apache2-2.4.51/test/modules/core/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/test/modules/core/__init__.py 2021-12-14 11:41:12.000000000 +0000 @@ -0,0 +1 @@ + diff -Nru apache2-2.4.51/test/modules/core/conftest.py apache2-2.4.52/test/modules/core/conftest.py --- apache2-2.4.51/test/modules/core/conftest.py 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/test/modules/core/conftest.py 2021-12-14 11:41:12.000000000 +0000 @@ -0,0 +1,44 @@ +import logging +import os + +import pytest +import sys + +from pyhttpd.env import HttpdTestEnv + +sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) + + +def pytest_report_header(config, startdir): + env = HttpdTestEnv() + return f"core [apache: {env.get_httpd_version()}, mpm: {env.mpm_module}, {env.prefix}]" + + +@pytest.fixture(scope="package") +def env(pytestconfig) -> HttpdTestEnv: + level = logging.INFO + console = logging.StreamHandler() + console.setLevel(level) + console.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) + logging.getLogger('').addHandler(console) + logging.getLogger('').setLevel(level=level) + env = HttpdTestEnv(pytestconfig=pytestconfig) + env.setup_httpd() + env.apache_access_log_clear() + env.httpd_error_log.clear_log() + return env + + +@pytest.fixture(autouse=True, scope="package") +def _session_scope(env): + env.httpd_error_log.set_ignored_lognos([ + 'AH10244', # core: invalid URI path + 'AH01264', # mod_cgid script not found + ]) + yield + assert env.apache_stop() == 0 + errors, warnings = env.httpd_error_log.get_missed() + assert (len(errors), len(warnings)) == (0, 0),\ + f"apache logged {len(errors)} errors and {len(warnings)} warnings: \n"\ + "{0}\n{1}\n".format("\n".join(errors), "\n".join(warnings)) + diff -Nru apache2-2.4.51/test/modules/core/test_001_encoding.py apache2-2.4.52/test/modules/core/test_001_encoding.py --- apache2-2.4.51/test/modules/core/test_001_encoding.py 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/test/modules/core/test_001_encoding.py 2021-12-14 11:41:12.000000000 +0000 @@ -0,0 +1,93 @@ +import pytest + +from pyhttpd.conf import HttpdConf + + +class TestEncoding: + + EXP_AH10244_ERRS = 0 + + @pytest.fixture(autouse=True, scope='class') + def _class_scope(self, env): + conf = HttpdConf(env, extras={ + 'base': f""" + + AllowOverride None + Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch + Require all granted + + """, + f"test2.{env.http_tld}": "AllowEncodedSlashes on", + f"test1.{env.http_tld}": f"ScriptAlias /cgi-bin/ {env.gen_dir}", + }) + conf.add_vhost_test1() + conf.add_vhost_test2() + conf.add_vhost_cgi() + conf.install() + assert env.apache_restart() == 0 + + # check handling of url encodings that are accepted + @pytest.mark.parametrize("path", [ + "/006/006.css", + "/%30%30%36/%30%30%36.css", + "/nothing/../006/006.css", + "/nothing/./../006/006.css", + "/nothing/%2e%2e/006/006.css", + "/nothing/%2e/%2e%2e/006/006.css", + "/nothing/%2e/%2e%2e/006/006%2ecss", + ]) + def test_core_001_01(self, env, path): + url = env.mkurl("https", "test1", path) + r = env.curl_get(url) + assert r.response["status"] == 200 + + # check handling of / normalization + @pytest.mark.parametrize("path", [ + "/006//006.css", + "/006//////////006.css", + "/006////.//////006.css", + "/006////%2e//////006.css", + "/006////%2e//////006%2ecss", + "/006/../006/006.css", + "/006/%2e%2e/006/006.css", + ]) + def test_core_001_03(self, env, path): + url = env.mkurl("https", "test1", path) + r = env.curl_get(url) + assert r.response["status"] == 200 + + # check path traversals + @pytest.mark.parametrize(["path", "status"], [ + ["/../echo.py", 400], + ["/nothing/../../echo.py", 400], + ["/cgi-bin/../../echo.py", 400], + ["/nothing/%2e%2e/%2e%2e/echo.py", 400], + ["/cgi-bin/%2e%2e/%2e%2e/echo.py", 400], + ["/nothing/%%32%65%%32%65/echo.py", 400], + ["/cgi-bin/%%32%65%%32%65/echo.py", 400], + ["/nothing/%%32%65%%32%65/%%32%65%%32%65/h2_env.py", 400], + ["/cgi-bin/%%32%65%%32%65/%%32%65%%32%65/h2_env.py", 400], + ["/nothing/%25%32%65%25%32%65/echo.py", 404], + ["/cgi-bin/%25%32%65%25%32%65/echo.py", 404], + ["/nothing/%25%32%65%25%32%65/%25%32%65%25%32%65/h2_env.py", 404], + ["/cgi-bin/%25%32%65%25%32%65/%25%32%65%25%32%65/h2_env.py", 404], + ]) + def test_core_001_04(self, env, path, status): + url = env.mkurl("https", "test1", path) + r = env.curl_get(url) + assert r.response["status"] == status + if status == 400: + TestEncoding.EXP_AH10244_ERRS += 1 + # the log will have a core:err about invalid URI path + + # check handling of %2f url encodings that are not decoded by default + @pytest.mark.parametrize(["host", "path", "status"], [ + ["test1", "/006%2f006.css", 404], + ["test2", "/006%2f006.css", 200], + ["test2", "/x%252f.test", 200], + ["test2", "/10%25abnormal.txt", 200], + ]) + def test_core_001_20(self, env, host, path, status): + url = env.mkurl("https", host, path) + r = env.curl_get(url) + assert r.response["status"] == status diff -Nru apache2-2.4.51/test/modules/http2/conf/httpd.conf.template apache2-2.4.52/test/modules/http2/conf/httpd.conf.template --- apache2-2.4.51/test/modules/http2/conf/httpd.conf.template 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/conf/httpd.conf.template 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -ServerName localhost -ServerRoot "${server_dir}" - -Include "conf/modules.conf" - -DocumentRoot "${server_dir}/htdocs" - - - LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %k" combined - LogFormat "%h %l %u %t \"%r\" %>s %b" common - CustomLog "logs/access_log" combined - - - -TypesConfig "${gen_dir}/apache/conf/mime.types" - -Listen ${http_port} -Listen ${https_port} - -# Insert our test specific configuration before the first vhost, -# so that its vhosts can be the default one. This is relevant in -# certain behaviours, such as protocol selection during SSL ALPN -# negotiation. -# -Include "conf/test.conf" - -RequestReadTimeout header=10 body=10 - - - AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css - - - AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css - - - - ServerName not-forbidden.org - ServerAlias www.not-forbidden.org - - DocumentRoot "${server_dir}/htdocs" - - - - Options Indexes FollowSymLinks - AllowOverride None - Require all granted - - AddHandler cgi-script .py - AddHandler cgi-script .cgi - Options +ExecCGI - - - diff -Nru apache2-2.4.51/test/modules/http2/conf/mime.types apache2-2.4.52/test/modules/http2/conf/mime.types --- apache2-2.4.51/test/modules/http2/conf/mime.types 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/conf/mime.types 1970-01-01 00:00:00.000000000 +0000 @@ -1,1588 +0,0 @@ -# This file maps Internet media types to unique file extension(s). -# Although created for httpd, this file is used by many software systems -# and has been placed in the public domain for unlimited redisribution. -# -# The table below contains both registered and (common) unregistered types. -# A type that has no unique extension can be ignored -- they are listed -# here to guide configurations toward known types and to make it easier to -# identify "new" types. File extensions are also commonly used to indicate -# content languages and encodings, so choose them carefully. -# -# Internet media types should be registered as described in RFC 4288. -# The registry is at . -# -# MIME type (lowercased) Extensions -# ============================================ ========== -# application/1d-interleaved-parityfec -# application/3gpp-ims+xml -# application/activemessage -application/andrew-inset ez -# application/applefile -application/applixware aw -application/atom+xml atom -application/atomcat+xml atomcat -# application/atomicmail -application/atomsvc+xml atomsvc -# application/auth-policy+xml -# application/batch-smtp -# application/beep+xml -# application/calendar+xml -# application/cals-1840 -# application/ccmp+xml -application/ccxml+xml ccxml -application/cdmi-capability cdmia -application/cdmi-container cdmic -application/cdmi-domain cdmid -application/cdmi-object cdmio -application/cdmi-queue cdmiq -# application/cea-2018+xml -# application/cellml+xml -# application/cfw -# application/cnrp+xml -# application/commonground -# application/conference-info+xml -# application/cpl+xml -# application/csta+xml -# application/cstadata+xml -application/cu-seeme cu -# application/cybercash -application/davmount+xml davmount -# application/dca-rft -# application/dec-dx -# application/dialog-info+xml -# application/dicom -# application/dns -application/docbook+xml dbk -# application/dskpp+xml -application/dssc+der dssc -application/dssc+xml xdssc -# application/dvcs -application/ecmascript ecma -# application/edi-consent -# application/edi-x12 -# application/edifact -application/emma+xml emma -# application/epp+xml -application/epub+zip epub -# application/eshop -# application/example -application/exi exi -# application/fastinfoset -# application/fastsoap -# application/fits -application/font-tdpfr pfr -# application/framework-attributes+xml -application/gml+xml gml -application/gpx+xml gpx -application/gxf gxf -# application/h224 -# application/held+xml -# application/http -application/hyperstudio stk -# application/ibe-key-request+xml -# application/ibe-pkg-reply+xml -# application/ibe-pp-data -# application/iges -# application/im-iscomposing+xml -# application/index -# application/index.cmd -# application/index.obj -# application/index.response -# application/index.vnd -application/inkml+xml ink inkml -# application/iotp -application/ipfix ipfix -# application/ipp -# application/isup -application/java-archive jar -application/java-serialized-object ser -application/java-vm class -application/javascript js -application/json json -application/jsonml+json jsonml -# application/kpml-request+xml -# application/kpml-response+xml -application/lost+xml lostxml -application/mac-binhex40 hqx -application/mac-compactpro cpt -# application/macwriteii -application/mads+xml mads -application/marc mrc -application/marcxml+xml mrcx -application/mathematica ma nb mb -# application/mathml-content+xml -# application/mathml-presentation+xml -application/mathml+xml mathml -# application/mbms-associated-procedure-description+xml -# application/mbms-deregister+xml -# application/mbms-envelope+xml -# application/mbms-msk+xml -# application/mbms-msk-response+xml -# application/mbms-protection-description+xml -# application/mbms-reception-report+xml -# application/mbms-register+xml -# application/mbms-register-response+xml -# application/mbms-user-service-description+xml -application/mbox mbox -# application/media_control+xml -application/mediaservercontrol+xml mscml -application/metalink+xml metalink -application/metalink4+xml meta4 -application/mets+xml mets -# application/mikey -application/mods+xml mods -# application/moss-keys -# application/moss-signature -# application/mosskey-data -# application/mosskey-request -application/mp21 m21 mp21 -application/mp4 mp4s -# application/mpeg4-generic -# application/mpeg4-iod -# application/mpeg4-iod-xmt -# application/msc-ivr+xml -# application/msc-mixer+xml -application/msword doc dot -application/mxf mxf -# application/nasdata -# application/news-checkgroups -# application/news-groupinfo -# application/news-transmission -# application/nss -# application/ocsp-request -# application/ocsp-response -application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy -application/oda oda -application/oebps-package+xml opf -application/ogg ogx -application/omdoc+xml omdoc -application/onenote onetoc onetoc2 onetmp onepkg -application/oxps oxps -# application/parityfec -application/patch-ops-error+xml xer -application/pdf pdf -application/pgp-encrypted pgp -# application/pgp-keys -application/pgp-signature asc sig -application/pics-rules prf -# application/pidf+xml -# application/pidf-diff+xml -application/pkcs10 p10 -application/pkcs7-mime p7m p7c -application/pkcs7-signature p7s -application/pkcs8 p8 -application/pkix-attr-cert ac -application/pkix-cert cer -application/pkix-crl crl -application/pkix-pkipath pkipath -application/pkixcmp pki -application/pls+xml pls -# application/poc-settings+xml -application/postscript ai eps ps -# application/prs.alvestrand.titrax-sheet -application/prs.cww cww -# application/prs.nprend -# application/prs.plucker -# application/prs.rdf-xml-crypt -# application/prs.xsf+xml -application/pskc+xml pskcxml -# application/qsig -application/rdf+xml rdf -application/reginfo+xml rif -application/relax-ng-compact-syntax rnc -# application/remote-printing -application/resource-lists+xml rl -application/resource-lists-diff+xml rld -# application/riscos -# application/rlmi+xml -application/rls-services+xml rs -application/rpki-ghostbusters gbr -application/rpki-manifest mft -application/rpki-roa roa -# application/rpki-updown -application/rsd+xml rsd -application/rss+xml rss -application/rtf rtf -# 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 -# application/set-registration -application/set-registration-initiation setreg -# application/sgml -# application/sgml-open-catalog -application/shf+xml shf -# application/sieve -# application/simple-filter+xml -# application/simple-message-summary -# application/simplesymbolcontainer -# application/slate -# 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 -application/sru+xml sru -application/ssdl+xml ssdl -application/ssml+xml ssml -# application/tamp-apex-update -# application/tamp-apex-update-confirm -# application/tamp-community-update -# application/tamp-community-update-confirm -# application/tamp-error -# application/tamp-sequence-adjust -# application/tamp-sequence-adjust-confirm -# application/tamp-status-query -# application/tamp-status-response -# application/tamp-update -# application/tamp-update-confirm -application/tei+xml tei teicorpus -application/thraud+xml tfi -# application/timestamp-query -# application/timestamp-reply -application/timestamped-data tsd -# application/tve-trigger -# application/ulpfec -# application/vcard+xml -# application/vemmi -# application/vividence.scriptfile -# application/vnd.3gpp.bsf+xml -application/vnd.3gpp.pic-bw-large plb -application/vnd.3gpp.pic-bw-small psb -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 -application/vnd.acucobol acu -application/vnd.acucorp atc acutc -application/vnd.adobe.air-application-installer-package+zip air -application/vnd.adobe.formscentral.fcdt fcdt -application/vnd.adobe.fxp fxp fxpl -# application/vnd.adobe.partial-upload -application/vnd.adobe.xdp+xml xdp -application/vnd.adobe.xfdf xfdf -# application/vnd.aether.imp -# application/vnd.ah-barcode -application/vnd.ahead.space ahead -application/vnd.airzip.filesecure.azf azf -application/vnd.airzip.filesecure.azs azs -application/vnd.amazon.ebook azw -application/vnd.americandynamics.acc acc -application/vnd.amiga.ami ami -# application/vnd.amundsen.maze+xml -application/vnd.android.package-archive apk -application/vnd.anser-web-certificate-issue-initiation cii -application/vnd.anser-web-funds-transfer-initiation fti -application/vnd.antix.game-component atx -application/vnd.apple.installer+xml mpkg -application/vnd.apple.mpegurl m3u8 -# application/vnd.arastra.swi -application/vnd.aristanetworks.swi swi -application/vnd.astraea-software.iota iota -application/vnd.audiograph aep -# application/vnd.autopackage -# application/vnd.avistar+xml -application/vnd.blueice.multipass mpm -# application/vnd.bluetooth.ep.oob -application/vnd.bmi bmi -application/vnd.businessobjects rep -# application/vnd.cab-jscript -# application/vnd.canon-cpdl -# application/vnd.canon-lips -# application/vnd.cendio.thinlinc.clientconf -application/vnd.chemdraw+xml cdxml -application/vnd.chipnuts.karaoke-mmd mmd -application/vnd.cinderella cdy -# application/vnd.cirpack.isdn-ext -application/vnd.claymore cla -application/vnd.cloanto.rp9 rp9 -application/vnd.clonk.c4group c4g c4d c4f c4p c4u -application/vnd.cluetrust.cartomobile-config c11amc -application/vnd.cluetrust.cartomobile-config-pkg c11amz -# application/vnd.collection+json -# application/vnd.commerce-battelle -application/vnd.commonspace csp -application/vnd.contact.cmsg cdbcmsg -application/vnd.cosmocaller cmc -application/vnd.crick.clicker clkx -application/vnd.crick.clicker.keyboard clkk -application/vnd.crick.clicker.palette clkp -application/vnd.crick.clicker.template clkt -application/vnd.crick.clicker.wordbank clkw -application/vnd.criticaltools.wbs+xml wbs -application/vnd.ctc-posml pml -# application/vnd.ctct.ws+xml -# application/vnd.cups-pdf -# application/vnd.cups-postscript -application/vnd.cups-ppd ppd -# application/vnd.cups-raster -# application/vnd.cups-raw -# application/vnd.curl -application/vnd.curl.car car -application/vnd.curl.pcurl pcurl -# application/vnd.cybank -application/vnd.dart dart -application/vnd.data-vision.rdz rdz -application/vnd.dece.data uvf uvvf uvd uvvd -application/vnd.dece.ttml+xml uvt uvvt -application/vnd.dece.unspecified uvx uvvx -application/vnd.dece.zip uvz uvvz -application/vnd.denovo.fcselayout-link fe_launch -# application/vnd.dir-bi.plate-dl-nosuffix -application/vnd.dna dna -application/vnd.dolby.mlp mlp -# application/vnd.dolby.mobile.1 -# application/vnd.dolby.mobile.2 -application/vnd.dpgraph dpg -application/vnd.dreamfactory dfac -application/vnd.ds-keypoint kpxx -application/vnd.dvb.ait ait -# application/vnd.dvb.dvbj -# application/vnd.dvb.esgcontainer -# application/vnd.dvb.ipdcdftnotifaccess -# application/vnd.dvb.ipdcesgaccess -# application/vnd.dvb.ipdcesgaccess2 -# application/vnd.dvb.ipdcesgpdd -# application/vnd.dvb.ipdcroaming -# application/vnd.dvb.iptv.alfec-base -# application/vnd.dvb.iptv.alfec-enhancement -# application/vnd.dvb.notif-aggregate-root+xml -# application/vnd.dvb.notif-container+xml -# application/vnd.dvb.notif-generic+xml -# application/vnd.dvb.notif-ia-msglist+xml -# application/vnd.dvb.notif-ia-registration-request+xml -# application/vnd.dvb.notif-ia-registration-response+xml -# application/vnd.dvb.notif-init+xml -# application/vnd.dvb.pfr -application/vnd.dvb.service svc -# application/vnd.dxr -application/vnd.dynageo geo -# application/vnd.easykaraoke.cdgdownload -# application/vnd.ecdis-update -application/vnd.ecowin.chart mag -# application/vnd.ecowin.filerequest -# application/vnd.ecowin.fileupdate -# application/vnd.ecowin.series -# application/vnd.ecowin.seriesrequest -# application/vnd.ecowin.seriesupdate -# application/vnd.emclient.accessrequest+xml -application/vnd.enliven nml -# application/vnd.eprints.data+xml -application/vnd.epson.esf esf -application/vnd.epson.msf msf -application/vnd.epson.quickanime qam -application/vnd.epson.salt slt -application/vnd.epson.ssf ssf -# application/vnd.ericsson.quickcall -application/vnd.eszigno3+xml es3 et3 -# application/vnd.etsi.aoc+xml -# application/vnd.etsi.cug+xml -# application/vnd.etsi.iptvcommand+xml -# application/vnd.etsi.iptvdiscovery+xml -# application/vnd.etsi.iptvprofile+xml -# application/vnd.etsi.iptvsad-bc+xml -# application/vnd.etsi.iptvsad-cod+xml -# application/vnd.etsi.iptvsad-npvr+xml -# application/vnd.etsi.iptvservice+xml -# application/vnd.etsi.iptvsync+xml -# application/vnd.etsi.iptvueprofile+xml -# application/vnd.etsi.mcid+xml -# application/vnd.etsi.overload-control-policy-dataset+xml -# application/vnd.etsi.sci+xml -# application/vnd.etsi.simservs+xml -# application/vnd.etsi.tsl+xml -# application/vnd.etsi.tsl.der -# application/vnd.eudora.data -application/vnd.ezpix-album ez2 -application/vnd.ezpix-package ez3 -# application/vnd.f-secure.mobile -application/vnd.fdf fdf -application/vnd.fdsn.mseed mseed -application/vnd.fdsn.seed seed dataless -# application/vnd.ffsns -# application/vnd.fints -application/vnd.flographit gph -application/vnd.fluxtime.clip ftc -# application/vnd.font-fontforge-sfd -application/vnd.framemaker fm frame maker book -application/vnd.frogans.fnc fnc -application/vnd.frogans.ltf ltf -application/vnd.fsc.weblaunch fsc -application/vnd.fujitsu.oasys oas -application/vnd.fujitsu.oasys2 oa2 -application/vnd.fujitsu.oasys3 oa3 -application/vnd.fujitsu.oasysgp fg5 -application/vnd.fujitsu.oasysprs bh2 -# application/vnd.fujixerox.art-ex -# application/vnd.fujixerox.art4 -# application/vnd.fujixerox.hbpl -application/vnd.fujixerox.ddd ddd -application/vnd.fujixerox.docuworks xdw -application/vnd.fujixerox.docuworks.binder xbd -# application/vnd.fut-misnet -application/vnd.fuzzysheet fzs -application/vnd.genomatix.tuxedo txd -# application/vnd.geocube+xml -application/vnd.geogebra.file ggb -application/vnd.geogebra.tool ggt -application/vnd.geometry-explorer gex gre -application/vnd.geonext gxt -application/vnd.geoplan g2w -application/vnd.geospace g3w -# application/vnd.globalplatform.card-content-mgt -# application/vnd.globalplatform.card-content-mgt-response -application/vnd.gmx gmx -application/vnd.google-earth.kml+xml kml -application/vnd.google-earth.kmz kmz -application/vnd.grafeq gqf gqs -# application/vnd.gridmp -application/vnd.groove-account gac -application/vnd.groove-help ghf -application/vnd.groove-identity-message gim -application/vnd.groove-injector grv -application/vnd.groove-tool-message gtm -application/vnd.groove-tool-template tpl -application/vnd.groove-vcard vcg -# application/vnd.hal+json -application/vnd.hal+xml hal -application/vnd.handheld-entertainment+xml zmm -application/vnd.hbci hbci -# application/vnd.hcl-bireports -application/vnd.hhe.lesson-player les -application/vnd.hp-hpgl hpgl -application/vnd.hp-hpid hpid -application/vnd.hp-hps hps -application/vnd.hp-jlyt jlt -application/vnd.hp-pcl pcl -application/vnd.hp-pclxl pclxl -# application/vnd.httphone -application/vnd.hydrostatix.sof-data sfd-hdstx -# application/vnd.hzn-3d-crossword -# application/vnd.ibm.afplinedata -# application/vnd.ibm.electronic-media -application/vnd.ibm.minipay mpy -application/vnd.ibm.modcap afp listafp list3820 -application/vnd.ibm.rights-management irm -application/vnd.ibm.secure-container sc -application/vnd.iccprofile icc icm -application/vnd.igloader igl -application/vnd.immervision-ivp ivp -application/vnd.immervision-ivu ivu -# application/vnd.informedcontrol.rms+xml -# application/vnd.informix-visionary -# application/vnd.infotech.project -# application/vnd.infotech.project+xml -# application/vnd.innopath.wamp.notification -application/vnd.insors.igm igm -application/vnd.intercon.formnet xpw xpx -application/vnd.intergeo i2g -# application/vnd.intertrust.digibox -# application/vnd.intertrust.nncp -application/vnd.intu.qbo qbo -application/vnd.intu.qfx qfx -# application/vnd.iptc.g2.conceptitem+xml -# application/vnd.iptc.g2.knowledgeitem+xml -# application/vnd.iptc.g2.newsitem+xml -# application/vnd.iptc.g2.newsmessage+xml -# application/vnd.iptc.g2.packageitem+xml -# application/vnd.iptc.g2.planningitem+xml -application/vnd.ipunplugged.rcprofile rcprofile -application/vnd.irepository.package+xml irp -application/vnd.is-xpr xpr -application/vnd.isac.fcs fcs -application/vnd.jam jam -# application/vnd.japannet-directory-service -# application/vnd.japannet-jpnstore-wakeup -# application/vnd.japannet-payment-wakeup -# application/vnd.japannet-registration -# application/vnd.japannet-registration-wakeup -# application/vnd.japannet-setstore-wakeup -# 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 -application/vnd.kde.kformula kfo -application/vnd.kde.kivio flw -application/vnd.kde.kontour kon -application/vnd.kde.kpresenter kpr kpt -application/vnd.kde.kspread ksp -application/vnd.kde.kword kwd kwt -application/vnd.kenameaapp htke -application/vnd.kidspiration kia -application/vnd.kinar kne knp -application/vnd.koan skp skd skt skm -application/vnd.kodak-descriptor sse -application/vnd.las.las+xml lasxml -# application/vnd.liberty-request+xml -application/vnd.llamagraphics.life-balance.desktop lbd -application/vnd.llamagraphics.life-balance.exchange+xml lbe -application/vnd.lotus-1-2-3 123 -application/vnd.lotus-approach apr -application/vnd.lotus-freelance pre -application/vnd.lotus-notes nsf -application/vnd.lotus-organizer org -application/vnd.lotus-screencam scm -application/vnd.lotus-wordpro lwp -application/vnd.macports.portpkg portpkg -# application/vnd.marlin.drm.actiontoken+xml -# application/vnd.marlin.drm.conftoken+xml -# application/vnd.marlin.drm.license+xml -# application/vnd.marlin.drm.mdcf -application/vnd.mcd mcd -application/vnd.medcalcdata mc1 -application/vnd.mediastation.cdkey cdkey -# application/vnd.meridian-slingshot -application/vnd.mfer mwf -application/vnd.mfmp mfm -application/vnd.micrografx.flo flo -application/vnd.micrografx.igx igx -application/vnd.mif mif -# application/vnd.minisoft-hp3000-save -# application/vnd.mitsubishi.misty-guard.trustweb -application/vnd.mobius.daf daf -application/vnd.mobius.dis dis -application/vnd.mobius.mbk mbk -application/vnd.mobius.mqy mqy -application/vnd.mobius.msl msl -application/vnd.mobius.plc plc -application/vnd.mobius.txf txf -application/vnd.mophun.application mpn -application/vnd.mophun.certificate mpc -# application/vnd.motorola.flexsuite -# application/vnd.motorola.flexsuite.adsi -# application/vnd.motorola.flexsuite.fis -# application/vnd.motorola.flexsuite.gotap -# application/vnd.motorola.flexsuite.kmr -# application/vnd.motorola.flexsuite.ttc -# application/vnd.motorola.flexsuite.wem -# application/vnd.motorola.iprm -application/vnd.mozilla.xul+xml xul -application/vnd.ms-artgalry cil -# application/vnd.ms-asf -application/vnd.ms-cab-compressed cab -# application/vnd.ms-color.iccprofile -application/vnd.ms-excel xls xlm xla xlc xlt xlw -application/vnd.ms-excel.addin.macroenabled.12 xlam -application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb -application/vnd.ms-excel.sheet.macroenabled.12 xlsm -application/vnd.ms-excel.template.macroenabled.12 xltm -application/vnd.ms-fontobject eot -application/vnd.ms-htmlhelp chm -application/vnd.ms-ims ims -application/vnd.ms-lrm lrm -# application/vnd.ms-office.activex+xml -application/vnd.ms-officetheme thmx -# application/vnd.ms-opentype -# application/vnd.ms-package.obfuscated-opentype -application/vnd.ms-pki.seccat cat -application/vnd.ms-pki.stl stl -# application/vnd.ms-playready.initiator+xml -application/vnd.ms-powerpoint ppt pps pot -application/vnd.ms-powerpoint.addin.macroenabled.12 ppam -application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm -application/vnd.ms-powerpoint.slide.macroenabled.12 sldm -application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm -application/vnd.ms-powerpoint.template.macroenabled.12 potm -# application/vnd.ms-printing.printticket+xml -application/vnd.ms-project mpp mpt -# application/vnd.ms-tnef -# application/vnd.ms-wmdrm.lic-chlg-req -# application/vnd.ms-wmdrm.lic-resp -# application/vnd.ms-wmdrm.meter-chlg-req -# application/vnd.ms-wmdrm.meter-resp -application/vnd.ms-word.document.macroenabled.12 docm -application/vnd.ms-word.template.macroenabled.12 dotm -application/vnd.ms-works wps wks wcm wdb -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.mynfc taglet -# application/vnd.ncd.control -# application/vnd.ncd.reference -# application/vnd.nervana -# application/vnd.netfpx -application/vnd.neurolanguage.nlu nlu -application/vnd.nitf ntf nitf -application/vnd.noblenet-directory nnd -application/vnd.noblenet-sealer nns -application/vnd.noblenet-web nnw -# application/vnd.nokia.catalogs -# application/vnd.nokia.conml+wbxml -# application/vnd.nokia.conml+xml -# application/vnd.nokia.isds-radio-presets -# application/vnd.nokia.iptv.config+xml -# application/vnd.nokia.landmark+wbxml -# application/vnd.nokia.landmark+xml -# application/vnd.nokia.landmarkcollection+xml -# application/vnd.nokia.n-gage.ac+xml -application/vnd.nokia.n-gage.data ngdat -application/vnd.nokia.n-gage.symbian.install n-gage -# application/vnd.nokia.ncd -# application/vnd.nokia.pcd+wbxml -# application/vnd.nokia.pcd+xml -application/vnd.nokia.radio-preset rpst -application/vnd.nokia.radio-presets rpss -application/vnd.novadigm.edm edm -application/vnd.novadigm.edx edx -application/vnd.novadigm.ext ext -# application/vnd.ntt-local.file-transfer -# application/vnd.ntt-local.sip-ta_remote -# application/vnd.ntt-local.sip-ta_tcp_stream -application/vnd.oasis.opendocument.chart odc -application/vnd.oasis.opendocument.chart-template otc -application/vnd.oasis.opendocument.database odb -application/vnd.oasis.opendocument.formula odf -application/vnd.oasis.opendocument.formula-template odft -application/vnd.oasis.opendocument.graphics odg -application/vnd.oasis.opendocument.graphics-template otg -application/vnd.oasis.opendocument.image odi -application/vnd.oasis.opendocument.image-template oti -application/vnd.oasis.opendocument.presentation odp -application/vnd.oasis.opendocument.presentation-template otp -application/vnd.oasis.opendocument.spreadsheet ods -application/vnd.oasis.opendocument.spreadsheet-template ots -application/vnd.oasis.opendocument.text odt -application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-template ott -application/vnd.oasis.opendocument.text-web oth -# application/vnd.obn -# application/vnd.oftn.l10n+json -# application/vnd.oipf.contentaccessdownload+xml -# application/vnd.oipf.contentaccessstreaming+xml -# application/vnd.oipf.cspg-hexbinary -# application/vnd.oipf.dae.svg+xml -# application/vnd.oipf.dae.xhtml+xml -# application/vnd.oipf.mippvcontrolmessage+xml -# application/vnd.oipf.pae.gem -# application/vnd.oipf.spdiscovery+xml -# application/vnd.oipf.spdlist+xml -# application/vnd.oipf.ueprofile+xml -# application/vnd.oipf.userprofile+xml -application/vnd.olpc-sugar xo -# application/vnd.oma-scws-config -# application/vnd.oma-scws-http-request -# application/vnd.oma-scws-http-response -# application/vnd.oma.bcast.associated-procedure-parameter+xml -# application/vnd.oma.bcast.drm-trigger+xml -# application/vnd.oma.bcast.imd+xml -# application/vnd.oma.bcast.ltkm -# application/vnd.oma.bcast.notification+xml -# application/vnd.oma.bcast.provisioningtrigger -# application/vnd.oma.bcast.sgboot -# application/vnd.oma.bcast.sgdd+xml -# application/vnd.oma.bcast.sgdu -# application/vnd.oma.bcast.simple-symbol-container -# application/vnd.oma.bcast.smartcard-trigger+xml -# application/vnd.oma.bcast.sprov+xml -# application/vnd.oma.bcast.stkm -# application/vnd.oma.cab-address-book+xml -# application/vnd.oma.cab-feature-handler+xml -# application/vnd.oma.cab-pcc+xml -# application/vnd.oma.cab-user-prefs+xml -# application/vnd.oma.dcd -# application/vnd.oma.dcdc -application/vnd.oma.dd2+xml dd2 -# application/vnd.oma.drm.risd+xml -# application/vnd.oma.group-usage-list+xml -# application/vnd.oma.pal+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.invocation-descriptor+xml -# application/vnd.oma.poc.optimized-progress-report+xml -# application/vnd.oma.push -# application/vnd.oma.scidm.messages+xml -# application/vnd.oma.xcap-directory+xml -# application/vnd.omads-email+xml -# application/vnd.omads-file+xml -# application/vnd.omads-folder+xml -# application/vnd.omaloc-supl-init -application/vnd.openofficeorg.extension oxt -# application/vnd.openxmlformats-officedocument.custom-properties+xml -# application/vnd.openxmlformats-officedocument.customxmlproperties+xml -# application/vnd.openxmlformats-officedocument.drawing+xml -# application/vnd.openxmlformats-officedocument.drawingml.chart+xml -# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml -# application/vnd.openxmlformats-officedocument.extended-properties+xml -# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml -# application/vnd.openxmlformats-officedocument.presentationml.comments+xml -# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml -application/vnd.openxmlformats-officedocument.presentationml.presentation pptx -# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml -application/vnd.openxmlformats-officedocument.presentationml.slide sldx -# application/vnd.openxmlformats-officedocument.presentationml.slide+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml -application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx -# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml -# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml -# application/vnd.openxmlformats-officedocument.presentationml.tags+xml -application/vnd.openxmlformats-officedocument.presentationml.template potx -# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx -# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml -# application/vnd.openxmlformats-officedocument.theme+xml -# application/vnd.openxmlformats-officedocument.themeoverride+xml -# application/vnd.openxmlformats-officedocument.vmldrawing -# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document docx -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx -# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml -# application/vnd.openxmlformats-package.core-properties+xml -# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml -# application/vnd.openxmlformats-package.relationships+xml -# application/vnd.quobject-quoxdocument -# application/vnd.osa.netdeploy -application/vnd.osgeo.mapguide.package mgp -# application/vnd.osgi.bundle -application/vnd.osgi.dp dp -application/vnd.osgi.subsystem esa -# application/vnd.otps.ct-kip+xml -application/vnd.palm pdb pqa oprc -# application/vnd.paos.xml -application/vnd.pawaafile paw -application/vnd.pg.format str -application/vnd.pg.osasli ei6 -# application/vnd.piaccess.application-licence -application/vnd.picsel efif -application/vnd.pmi.widget wg -# application/vnd.poc.group-advertisement+xml -application/vnd.pocketlearn plf -application/vnd.powerbuilder6 pbd -# application/vnd.powerbuilder6-s -# application/vnd.powerbuilder7 -# application/vnd.powerbuilder7-s -# application/vnd.powerbuilder75 -# application/vnd.powerbuilder75-s -# application/vnd.preminet -application/vnd.previewsystems.box box -application/vnd.proteus.magazine mgz -application/vnd.publishare-delta-tree qps -application/vnd.pvi.ptid1 ptid -# application/vnd.pwg-multiplexed -# application/vnd.pwg-xhtml-print+xml -# application/vnd.qualcomm.brew-app-res -application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb -# application/vnd.radisys.moml+xml -# application/vnd.radisys.msml+xml -# application/vnd.radisys.msml-audit+xml -# application/vnd.radisys.msml-audit-conf+xml -# application/vnd.radisys.msml-audit-conn+xml -# application/vnd.radisys.msml-audit-dialog+xml -# application/vnd.radisys.msml-audit-stream+xml -# application/vnd.radisys.msml-conf+xml -# application/vnd.radisys.msml-dialog+xml -# application/vnd.radisys.msml-dialog-base+xml -# application/vnd.radisys.msml-dialog-fax-detect+xml -# application/vnd.radisys.msml-dialog-fax-sendrecv+xml -# application/vnd.radisys.msml-dialog-group+xml -# application/vnd.radisys.msml-dialog-speech+xml -# application/vnd.radisys.msml-dialog-transform+xml -# application/vnd.rainstor.data -# application/vnd.rapid -application/vnd.realvnc.bed bed -application/vnd.recordare.musicxml mxl -application/vnd.recordare.musicxml+xml musicxml -# application/vnd.renlearn.rlprint -application/vnd.rig.cryptonote cryptonote -application/vnd.rim.cod cod -application/vnd.rn-realmedia rm -application/vnd.rn-realmedia-vbr rmvb -application/vnd.route66.link66+xml link66 -# application/vnd.rs-274x -# application/vnd.ruckus.download -# application/vnd.s3sms -application/vnd.sailingtracker.track st -# application/vnd.sbm.cid -# application/vnd.sbm.mid2 -# application/vnd.scribus -# application/vnd.sealed.3df -# application/vnd.sealed.csf -# application/vnd.sealed.doc -# application/vnd.sealed.eml -# application/vnd.sealed.mht -# application/vnd.sealed.net -# application/vnd.sealed.ppt -# application/vnd.sealed.tiff -# application/vnd.sealed.xls -# application/vnd.sealedmedia.softseal.html -# application/vnd.sealedmedia.softseal.pdf -application/vnd.seemail see -application/vnd.sema sema -application/vnd.semd semd -application/vnd.semf semf -application/vnd.shana.informed.formdata ifm -application/vnd.shana.informed.formtemplate itp -application/vnd.shana.informed.interchange iif -application/vnd.shana.informed.package ipk -application/vnd.simtech-mindmapper twd twds -application/vnd.smaf mmf -# application/vnd.smart.notebook -application/vnd.smart.teacher teacher -# application/vnd.software602.filler.form+xml -# application/vnd.software602.filler.form-xml-zip -application/vnd.solent.sdkm+xml sdkm sdkd -application/vnd.spotfire.dxp dxp -application/vnd.spotfire.sfs sfs -# application/vnd.sss-cod -# application/vnd.sss-dtf -# application/vnd.sss-ntf -application/vnd.stardivision.calc sdc -application/vnd.stardivision.draw sda -application/vnd.stardivision.impress sdd -application/vnd.stardivision.math smf -application/vnd.stardivision.writer sdw vor -application/vnd.stardivision.writer-global sgl -application/vnd.stepmania.package smzip -application/vnd.stepmania.stepchart sm -# application/vnd.street-stream -application/vnd.sun.xml.calc sxc -application/vnd.sun.xml.calc.template stc -application/vnd.sun.xml.draw sxd -application/vnd.sun.xml.draw.template std -application/vnd.sun.xml.impress sxi -application/vnd.sun.xml.impress.template sti -application/vnd.sun.xml.math sxm -application/vnd.sun.xml.writer sxw -application/vnd.sun.xml.writer.global sxg -application/vnd.sun.xml.writer.template stw -# application/vnd.sun.wadl+xml -application/vnd.sus-calendar sus susp -application/vnd.svd svd -# application/vnd.swiftview-ics -application/vnd.symbian.install sis sisx -application/vnd.syncml+xml xsm -application/vnd.syncml.dm+wbxml bdm -application/vnd.syncml.dm+xml xdm -# application/vnd.syncml.dm.notification -# application/vnd.syncml.ds.notification -application/vnd.tao.intent-module-archive tao -application/vnd.tcpdump.pcap pcap cap dmp -application/vnd.tmobile-livetv tmo -application/vnd.trid.tpt tpt -application/vnd.triscape.mxs mxs -application/vnd.trueapp tra -# application/vnd.truedoc -# application/vnd.ubisoft.webplayer -application/vnd.ufdl ufd ufdl -application/vnd.uiq.theme utz -application/vnd.umajin umj -application/vnd.unity unityweb -application/vnd.uoml+xml uoml -# application/vnd.uplanet.alert -# application/vnd.uplanet.alert-wbxml -# application/vnd.uplanet.bearer-choice -# application/vnd.uplanet.bearer-choice-wbxml -# application/vnd.uplanet.cacheop -# application/vnd.uplanet.cacheop-wbxml -# application/vnd.uplanet.channel -# application/vnd.uplanet.channel-wbxml -# application/vnd.uplanet.list -# application/vnd.uplanet.list-wbxml -# application/vnd.uplanet.listcmd -# application/vnd.uplanet.listcmd-wbxml -# application/vnd.uplanet.signal -application/vnd.vcx vcx -# application/vnd.vd-study -# application/vnd.vectorworks -# application/vnd.verimatrix.vcas -# application/vnd.vidsoft.vidconference -application/vnd.visio vsd vst vss vsw -application/vnd.visionary vis -# application/vnd.vividence.scriptfile -application/vnd.vsf vsf -# application/vnd.wap.sic -# application/vnd.wap.slc -application/vnd.wap.wbxml wbxml -application/vnd.wap.wmlc wmlc -application/vnd.wap.wmlscriptc wmlsc -application/vnd.webturbo wtb -# application/vnd.wfa.wsc -# application/vnd.wmc -# application/vnd.wmf.bootstrap -# application/vnd.wolfram.mathematica -# application/vnd.wolfram.mathematica.package -application/vnd.wolfram.player nbp -application/vnd.wordperfect wpd -application/vnd.wqd wqd -# application/vnd.wrq-hp3000-labelled -application/vnd.wt.stf stf -# application/vnd.wv.csp+wbxml -# application/vnd.wv.csp+xml -# application/vnd.wv.ssp+xml -application/vnd.xara xar -application/vnd.xfdl xfdl -# application/vnd.xfdl.webform -# application/vnd.xmi+xml -# application/vnd.xmpie.cpkg -# application/vnd.xmpie.dpkg -# application/vnd.xmpie.plan -# application/vnd.xmpie.ppkg -# application/vnd.xmpie.xlim -application/vnd.yamaha.hv-dic hvd -application/vnd.yamaha.hv-script hvs -application/vnd.yamaha.hv-voice hvp -application/vnd.yamaha.openscoreformat osf -application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg -# application/vnd.yamaha.remote-setup -application/vnd.yamaha.smaf-audio saf -application/vnd.yamaha.smaf-phrase spf -# application/vnd.yamaha.through-ngn -# application/vnd.yamaha.tunnel-udpencap -application/vnd.yellowriver-custom-menu cmp -application/vnd.zul zir zirz -application/vnd.zzazz.deck+xml zaz -application/voicexml+xml vxml -# application/vq-rtcpxr -# application/watcherinfo+xml -# application/whoispp-query -# application/whoispp-response -application/widget wgt -application/winhlp hlp -# application/wita -# application/wordperfect5.1 -application/wsdl+xml wsdl -application/wspolicy+xml wspolicy -application/x-7z-compressed 7z -application/x-abiword abw -application/x-ace-compressed ace -# application/x-amf -application/x-apple-diskimage dmg -application/x-authorware-bin aab x32 u32 vox -application/x-authorware-map aam -application/x-authorware-seg aas -application/x-bcpio bcpio -application/x-bittorrent torrent -application/x-blorb blb blorb -application/x-bzip bz -application/x-bzip2 bz2 boz -application/x-cbr cbr cba cbt cbz cb7 -application/x-cdlink vcd -application/x-cfs-compressed cfs -application/x-chat chat -application/x-chess-pgn pgn -application/x-conference nsc -# application/x-compress -application/x-cpio cpio -application/x-csh csh -application/x-debian-package deb udeb -application/x-dgc-compressed dgc -application/x-director dir dcr dxr cst cct cxt w3d fgd swa -application/x-doom wad -application/x-dtbncx+xml ncx -application/x-dtbook+xml dtb -application/x-dtbresource+xml res -application/x-dvi dvi -application/x-envoy evy -application/x-eva eva -application/x-font-bdf bdf -# application/x-font-dos -# application/x-font-framemaker -application/x-font-ghostscript gsf -# application/x-font-libgrx -application/x-font-linux-psf psf -application/x-font-otf otf -application/x-font-pcf pcf -application/x-font-snf snf -# application/x-font-speedo -# application/x-font-sunos-news -application/x-font-ttf ttf ttc -application/x-font-type1 pfa pfb pfm afm -application/x-font-woff woff -# application/x-font-vfont -application/x-freearc arc -application/x-futuresplash spl -application/x-gca-compressed gca -application/x-glulx ulx -application/x-gnumeric gnumeric -application/x-gramps-xml gramps -application/x-gtar gtar -# application/x-gzip -application/x-hdf hdf -application/x-install-instructions install -application/x-iso9660-image iso -application/x-java-jnlp-file jnlp -application/x-latex latex -application/x-lzh-compressed lzh lha -application/x-mie mie -application/x-mobipocket-ebook prc mobi -application/x-ms-application application -application/x-ms-shortcut lnk -application/x-ms-wmd wmd -application/x-ms-wmz wmz -application/x-ms-xbap xbap -application/x-msaccess mdb -application/x-msbinder obd -application/x-mscardfile crd -application/x-msclip clp -application/x-msdownload exe dll com bat msi -application/x-msmediaview mvb m13 m14 -application/x-msmetafile wmf wmz emf emz -application/x-msmoney mny -application/x-mspublisher pub -application/x-msschedule scd -application/x-msterminal trm -application/x-mswrite wri -application/x-netcdf nc cdf -application/x-nzb nzb -application/x-pkcs12 p12 pfx -application/x-pkcs7-certificates p7b spc -application/x-pkcs7-certreqresp p7r -application/x-rar-compressed rar -application/x-research-info-systems ris -application/x-sh sh -application/x-shar shar -application/x-shockwave-flash swf -application/x-silverlight-app xap -application/x-sql sql -application/x-stuffit sit -application/x-stuffitx sitx -application/x-subrip srt -application/x-sv4cpio sv4cpio -application/x-sv4crc sv4crc -application/x-t3vm-image t3 -application/x-tads gam -application/x-tar tar -application/x-tcl tcl -application/x-tex tex -application/x-tex-tfm tfm -application/x-texinfo texinfo texi -application/x-tgif obj -application/x-ustar ustar -application/x-wais-source src -application/x-x509-ca-cert der crt -application/x-xfig fig -application/x-xliff+xml xlf -application/x-xpinstall xpi -application/x-xz xz -application/x-zmachine z1 z2 z3 z4 z5 z6 z7 z8 -# application/x400-bp -application/xaml+xml xaml -# application/xcap-att+xml -# application/xcap-caps+xml -application/xcap-diff+xml xdf -# application/xcap-el+xml -# application/xcap-error+xml -# application/xcap-ns+xml -# application/xcon-conference-info-diff+xml -# application/xcon-conference-info+xml -application/xenc+xml xenc -application/xhtml+xml xhtml xht -# application/xhtml-voice+xml -application/xml xml xsl -application/xml-dtd dtd -# application/xml-external-parsed-entity -# application/xmpp+xml -application/xop+xml xop -application/xproc+xml xpl -application/xslt+xml xslt -application/xspf+xml xspf -application/xv+xml mxml xhvml xvml xvm -application/yang yang -application/yin+xml yin -application/zip zip -# audio/1d-interleaved-parityfec -# audio/32kadpcm -# audio/3gpp -# audio/3gpp2 -# audio/ac3 -audio/adpcm adp -# audio/amr -# audio/amr-wb -# audio/amr-wb+ -# audio/asc -# audio/atrac-advanced-lossless -# audio/atrac-x -# audio/atrac3 -audio/basic au snd -# audio/bv16 -# audio/bv32 -# audio/clearmode -# audio/cn -# audio/dat12 -# audio/dls -# audio/dsr-es201108 -# audio/dsr-es202050 -# audio/dsr-es202211 -# audio/dsr-es202212 -# audio/dv -# audio/dvi4 -# audio/eac3 -# audio/evrc -# audio/evrc-qcp -# audio/evrc0 -# audio/evrc1 -# audio/evrcb -# audio/evrcb0 -# audio/evrcb1 -# audio/evrcwb -# audio/evrcwb0 -# audio/evrcwb1 -# audio/example -# audio/fwdred -# audio/g719 -# audio/g722 -# audio/g7221 -# audio/g723 -# audio/g726-16 -# audio/g726-24 -# audio/g726-32 -# audio/g726-40 -# audio/g728 -# audio/g729 -# audio/g7291 -# audio/g729d -# audio/g729e -# audio/gsm -# audio/gsm-efr -# audio/gsm-hr-08 -# audio/ilbc -# audio/ip-mr_v2.5 -# audio/isac -# audio/l16 -# audio/l20 -# audio/l24 -# audio/l8 -# audio/lpc -audio/midi mid midi kar rmi -# audio/mobile-xmf -audio/mp4 mp4a -# audio/mp4a-latm -# audio/mpa -# audio/mpa-robust -audio/mpeg mpga mp2 mp2a mp3 m2a m3a -# audio/mpeg4-generic -# audio/musepack -audio/ogg oga ogg spx -# audio/opus -# audio/parityfec -# audio/pcma -# audio/pcma-wb -# audio/pcmu-wb -# audio/pcmu -# audio/prs.sid -# audio/qcelp -# audio/red -# audio/rtp-enc-aescm128 -# audio/rtp-midi -# audio/rtx -audio/s3m s3m -audio/silk sil -# audio/smv -# audio/smv0 -# audio/smv-qcp -# audio/sp-midi -# audio/speex -# audio/t140c -# audio/t38 -# audio/telephone-event -# audio/tone -# audio/uemclip -# audio/ulpfec -# audio/vdvi -# audio/vmr-wb -# audio/vnd.3gpp.iufp -# audio/vnd.4sb -# audio/vnd.audiokoz -# audio/vnd.celp -# audio/vnd.cisco.nse -# audio/vnd.cmles.radio-events -# audio/vnd.cns.anp1 -# audio/vnd.cns.inf1 -audio/vnd.dece.audio uva uvva -audio/vnd.digital-winds eol -# audio/vnd.dlna.adts -# audio/vnd.dolby.heaac.1 -# audio/vnd.dolby.heaac.2 -# audio/vnd.dolby.mlp -# audio/vnd.dolby.mps -# audio/vnd.dolby.pl2 -# audio/vnd.dolby.pl2x -# audio/vnd.dolby.pl2z -# audio/vnd.dolby.pulse.1 -audio/vnd.dra dra -audio/vnd.dts dts -audio/vnd.dts.hd dtshd -# audio/vnd.dvb.file -# audio/vnd.everad.plj -# audio/vnd.hns.audio -audio/vnd.lucent.voice lvp -audio/vnd.ms-playready.media.pya pya -# audio/vnd.nokia.mobile-xmf -# audio/vnd.nortel.vbk -audio/vnd.nuera.ecelp4800 ecelp4800 -audio/vnd.nuera.ecelp7470 ecelp7470 -audio/vnd.nuera.ecelp9600 ecelp9600 -# audio/vnd.octel.sbc -# audio/vnd.qcelp -# audio/vnd.rhetorex.32kadpcm -audio/vnd.rip rip -# audio/vnd.sealedmedia.softseal.mpeg -# audio/vnd.vmx.cvsd -# audio/vorbis -# audio/vorbis-config -audio/webm weba -audio/x-aac aac -audio/x-aiff aif aiff aifc -audio/x-caf caf -audio/x-flac flac -audio/x-matroska mka -audio/x-mpegurl m3u -audio/x-ms-wax wax -audio/x-ms-wma wma -audio/x-pn-realaudio ram ra -audio/x-pn-realaudio-plugin rmp -# audio/x-tta -audio/x-wav wav -audio/xm xm -chemical/x-cdx cdx -chemical/x-cif cif -chemical/x-cmdf cmdf -chemical/x-cml cml -chemical/x-csml csml -# chemical/x-pdb -chemical/x-xyz xyz -image/bmp bmp -image/cgm cgm -# image/example -# image/fits -image/g3fax g3 -image/gif gif -image/ief ief -# image/jp2 -image/jpeg jpeg jpg jpe -# image/jpm -# image/jpx -image/ktx ktx -# image/naplps -image/png png -image/prs.btif btif -# image/prs.pti -image/sgi sgi -image/svg+xml svg svgz -# image/t38 -image/tiff tiff tif -# image/tiff-fx -image/vnd.adobe.photoshop psd -# image/vnd.cns.inf2 -image/vnd.dece.graphic uvi uvvi uvg uvvg -image/vnd.dvb.subtitle sub -image/vnd.djvu djvu djv -image/vnd.dwg dwg -image/vnd.dxf dxf -image/vnd.fastbidsheet fbs -image/vnd.fpx fpx -image/vnd.fst fst -image/vnd.fujixerox.edmics-mmr mmr -image/vnd.fujixerox.edmics-rlc rlc -# image/vnd.globalgraphics.pgb -# image/vnd.microsoft.icon -# image/vnd.mix -image/vnd.ms-modi mdi -image/vnd.ms-photo wdp -image/vnd.net-fpx npx -# image/vnd.radiance -# image/vnd.sealed.png -# image/vnd.sealedmedia.softseal.gif -# image/vnd.sealedmedia.softseal.jpg -# image/vnd.svf -image/vnd.wap.wbmp wbmp -image/vnd.xiff xif -image/webp webp -image/x-3ds 3ds -image/x-cmu-raster ras -image/x-cmx cmx -image/x-freehand fh fhc fh4 fh5 fh7 -image/x-icon ico -image/x-mrsid-image sid -image/x-pcx pcx -image/x-pict pic pct -image/x-portable-anymap pnm -image/x-portable-bitmap pbm -image/x-portable-graymap pgm -image/x-portable-pixmap ppm -image/x-rgb rgb -image/x-tga tga -image/x-xbitmap xbm -image/x-xpixmap xpm -image/x-xwindowdump xwd -# message/cpim -# message/delivery-status -# message/disposition-notification -# message/example -# message/external-body -# message/feedback-report -# message/global -# message/global-delivery-status -# message/global-disposition-notification -# message/global-headers -# message/http -# message/imdn+xml -# message/news -# message/partial -message/rfc822 eml mime -# message/s-http -# message/sip -# message/sipfrag -# message/tracking-status -# message/vnd.si.simp -# model/example -model/iges igs iges -model/mesh msh mesh silo -model/vnd.collada+xml dae -model/vnd.dwf dwf -# model/vnd.flatland.3dml -model/vnd.gdl gdl -# model/vnd.gs-gdl -# model/vnd.gs.gdl -model/vnd.gtw gtw -# model/vnd.moml+xml -model/vnd.mts mts -# model/vnd.parasolid.transmit.binary -# model/vnd.parasolid.transmit.text -model/vnd.vtu vtu -model/vrml wrl vrml -model/x3d+binary x3db x3dbz -model/x3d+vrml x3dv x3dvz -model/x3d+xml x3d x3dz -# multipart/alternative -# multipart/appledouble -# multipart/byteranges -# multipart/digest -# multipart/encrypted -# multipart/example -# multipart/form-data -# multipart/header-set -# multipart/mixed -# multipart/parallel -# multipart/related -# multipart/report -# multipart/signed -# multipart/voice-message -# text/1d-interleaved-parityfec -text/cache-manifest appcache -text/calendar ics ifb -text/css css -text/csv csv -# text/directory -# text/dns -# text/ecmascript -# text/enriched -# text/example -# text/fwdred -text/html html htm -# text/javascript -text/n3 n3 -# text/parityfec -text/plain txt text conf def list log in -# text/prs.fallenstein.rst -text/prs.lines.tag dsc -# text/vnd.radisys.msml-basic-layout -# text/red -# text/rfc822-headers -text/richtext rtx -# text/rtf -# text/rtp-enc-aescm128 -# text/rtx -text/sgml sgml sgm -# text/t140 -text/tab-separated-values tsv -text/troff t tr roff man me ms -text/turtle ttl -# text/ulpfec -text/uri-list uri uris urls -text/vcard vcard -# text/vnd.abc -text/vnd.curl curl -text/vnd.curl.dcurl dcurl -text/vnd.curl.scurl scurl -text/vnd.curl.mcurl mcurl -# text/vnd.dmclientscript -text/vnd.dvb.subtitle sub -# text/vnd.esmertec.theme-descriptor -text/vnd.fly fly -text/vnd.fmi.flexstor flx -text/vnd.graphviz gv -text/vnd.in3d.3dml 3dml -text/vnd.in3d.spot spot -# text/vnd.iptc.newsml -# text/vnd.iptc.nitf -# 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 -# text/vnd.wap.sl -text/vnd.wap.wml wml -text/vnd.wap.wmlscript wmls -text/x-asm s asm -text/x-c c cc cxx cpp h hh dic -text/x-fortran f for f77 f90 -text/x-java-source java -text/x-opml opml -text/x-pascal p pas -text/x-nfo nfo -text/x-setext etx -text/x-sfv sfv -text/x-uuencode uu -text/x-vcalendar vcs -text/x-vcard vcf -# text/xml -# text/xml-external-parsed-entity -# video/1d-interleaved-parityfec -video/3gpp 3gp -# video/3gpp-tt -video/3gpp2 3g2 -# video/bmpeg -# video/bt656 -# video/celb -# video/dv -# video/example -video/h261 h261 -video/h263 h263 -# video/h263-1998 -# video/h263-2000 -video/h264 h264 -# video/h264-rcdo -# video/h264-svc -video/jpeg jpgv -# video/jpeg2000 -video/jpm jpm jpgm -video/mj2 mj2 mjp2 -# video/mp1s -# video/mp2p -# video/mp2t -video/mp4 mp4 mp4v mpg4 -# video/mp4v-es -video/mpeg mpeg mpg mpe m1v m2v -# video/mpeg4-generic -# video/mpv -# video/nv -video/ogg ogv -# video/parityfec -# video/pointer -video/quicktime qt mov -# video/raw -# video/rtp-enc-aescm128 -# video/rtx -# video/smpte292m -# video/ulpfec -# video/vc1 -# video/vnd.cctv -video/vnd.dece.hd uvh uvvh -video/vnd.dece.mobile uvm uvvm -# video/vnd.dece.mp4 -video/vnd.dece.pd uvp uvvp -video/vnd.dece.sd uvs uvvs -video/vnd.dece.video uvv uvvv -# video/vnd.directv.mpeg -# video/vnd.directv.mpeg-tts -# video/vnd.dlna.mpeg-tts -video/vnd.dvb.file dvb -video/vnd.fvt fvt -# video/vnd.hns.video -# video/vnd.iptvforum.1dparityfec-1010 -# video/vnd.iptvforum.1dparityfec-2005 -# video/vnd.iptvforum.2dparityfec-1010 -# video/vnd.iptvforum.2dparityfec-2005 -# video/vnd.iptvforum.ttsavc -# video/vnd.iptvforum.ttsmpeg2 -# video/vnd.motorola.video -# video/vnd.motorola.videop -video/vnd.mpegurl mxu m4u -video/vnd.ms-playready.media.pyv pyv -# video/vnd.nokia.interleaved-multimedia -# video/vnd.nokia.videovoip -# video/vnd.objectvideo -# video/vnd.sealed.mpeg1 -# video/vnd.sealed.mpeg4 -# video/vnd.sealed.swf -# video/vnd.sealedmedia.softseal.mov -video/vnd.uvvu.mp4 uvu uvvu -video/vnd.vivo viv -video/webm webm -video/x-f4v f4v -video/x-fli fli -video/x-flv flv -video/x-m4v m4v -video/x-matroska mkv mk3d mks -video/x-mng mng -video/x-ms-asf asf asx -video/x-ms-vob vob -video/x-ms-wm wm -video/x-ms-wmv wmv -video/x-ms-wmx wmx -video/x-ms-wvx wvx -video/x-msvideo avi -video/x-sgi-movie movie -video/x-smv smv -x-conference/x-cooltalk ice diff -Nru apache2-2.4.51/test/modules/http2/conf/test.conf apache2-2.4.52/test/modules/http2/conf/test.conf --- apache2-2.4.51/test/modules/http2/conf/test.conf 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/conf/test.conf 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -# empty placeholder for test specific configurations diff -Nru apache2-2.4.51/test/modules/http2/config.ini.in apache2-2.4.52/test/modules/http2/config.ini.in --- apache2-2.4.51/test/modules/http2/config.ini.in 2021-09-23 09:53:01.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/config.ini.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -[global] -curl_bin = curl -nghttp = nghttp -h2load = h2load - -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -sbindir = @sbindir@ -libdir = @libdir@ -libexecdir = @libexecdir@ - -apr_bindir = @APR_BINDIR@ -apxs = @bindir@/apxs -apachectl = @sbindir@/apachectl -dso_modules = @DSO_MODULES@ - -[httpd] -version = @HTTPD_VERSION@ -name = @progname@ - -[test] -http_port = 40001 -https_port = 40002 -http_tld = tests.httpd.apache.org -test_dir = @abs_srcdir@ -test_src_dir = @abs_srcdir@ -server_dir = @abs_srcdir@/gen/apache -gen_dir = @abs_srcdir@/gen diff -Nru apache2-2.4.51/test/modules/http2/conftest.py apache2-2.4.52/test/modules/http2/conftest.py --- apache2-2.4.51/test/modules/http2/conftest.py 2021-10-07 12:43:52.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/conftest.py 2021-12-14 11:26:52.000000000 +0000 @@ -2,14 +2,16 @@ import os import pytest +import sys -from h2_certs import CertificateSpec, H2TestCA -from h2_env import H2TestEnv +sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) + +from .env import H2TestEnv def pytest_report_header(config, startdir): - env = H2TestEnv(setup_dirs=False) - return f"mod_h2 [apache: {env.get_httpd_version()}, mpm: {env.mpm_type}, {env.prefix}]" + env = H2TestEnv() + return f"mod_h2 [apache: {env.get_httpd_version()}, mpm: {env.mpm_module}, {env.prefix}]" def pytest_addoption(parser): @@ -25,7 +27,7 @@ metafunc.parametrize('repeat', range(count)) -@pytest.fixture(scope="session") +@pytest.fixture(scope="package") def env(pytestconfig) -> H2TestEnv: level = logging.INFO console = logging.StreamHandler() @@ -34,24 +36,17 @@ logging.getLogger('').addHandler(console) logging.getLogger('').setLevel(level=level) env = H2TestEnv(pytestconfig=pytestconfig) - cert_specs = [ - CertificateSpec(domains=env.domains, key_type='rsa4096'), - CertificateSpec(domains=env.domains_noh2, key_type='rsa2048'), - ] - ca = H2TestCA.create_root(name=env.http_tld, - store_dir=os.path.join(env.server_dir, 'ca'), key_type="rsa4096") - ca.issue_certs(cert_specs) - env.set_ca(ca) + env.setup_httpd() env.apache_access_log_clear() - env.apache_error_log_clear() + env.httpd_error_log.clear_log() return env -@pytest.fixture(autouse=True, scope="session") +@pytest.fixture(autouse=True, scope="package") def _session_scope(env): yield assert env.apache_stop() == 0 - errors, warnings = env.apache_errors_and_warnings() + errors, warnings = env.httpd_error_log.get_missed() assert (len(errors), len(warnings)) == (0, 0),\ f"apache logged {len(errors)} errors and {len(warnings)} warnings: \n"\ "{0}\n{1}\n".format("\n".join(errors), "\n".join(warnings)) diff -Nru apache2-2.4.51/test/modules/http2/data/nghttp-output-100k-1.txt apache2-2.4.52/test/modules/http2/data/nghttp-output-100k-1.txt --- apache2-2.4.51/test/modules/http2/data/nghttp-output-100k-1.txt 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/data/nghttp-output-100k-1.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,1153 +0,0 @@ -execute: /usr/bin/nghttp -v --header=host: cgi.tests.httpd.apache.org:42002 --data=/home/ylavic/src/apache/mod_h2/test/gen/data-100k https://127.0.0.1:42002//echo.py -stderr: [WARNING] Certificate verification failed: unable to verify the first certificate - -stdout: [ 0.001] Connected -The negotiated protocol: h2 -[ 0.003] send SETTINGS frame - (niv=2) - [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100] - [SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535] -[ 0.003] send PRIORITY frame - (dep_stream_id=0, weight=201, exclusive=0) -[ 0.003] send PRIORITY frame - (dep_stream_id=0, weight=101, exclusive=0) -[ 0.003] send PRIORITY frame - (dep_stream_id=0, weight=1, exclusive=0) -[ 0.003] send PRIORITY frame - (dep_stream_id=7, weight=1, exclusive=0) -[ 0.003] send PRIORITY frame - (dep_stream_id=3, weight=1, exclusive=0) -[ 0.003] send HEADERS frame - ; END_HEADERS | PRIORITY - (padlen=0, dep_stream_id=11, weight=16, exclusive=0) - ; Open new stream - :method: POST - :path: //echo.py - :scheme: https - :authority: 127.0.0.1:42002 - accept: */* - accept-encoding: gzip, deflate - user-agent: nghttp2/1.36.0 - content-length: 100000 - host: cgi.tests.httpd.apache.org:42002 -[ 0.003] send DATA frame -[ 0.003] send DATA frame -[ 0.003] send DATA frame -[ 0.003] send DATA frame -[ 0.006] recv SETTINGS frame - (niv=1) - [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100] -[ 0.006] recv SETTINGS frame - ; ACK - (niv=0) -[ 0.006] recv WINDOW_UPDATE frame - (window_size_increment=2147418112) -[ 0.006] send SETTINGS frame - ; ACK - (niv=0) -[ 0.007] recv WINDOW_UPDATE frame - (window_size_increment=65535) -[ 0.007] recv WINDOW_UPDATE frame - (window_size_increment=65536) -[ 0.007] send DATA frame -[ 0.007] send DATA frame -[ 0.007] send DATA frame - ; END_STREAM -[ 0.023] recv (stream_id=13) :status: 200 -[ 0.023] recv (stream_id=13) date: Wed, 13 Feb 2019 17:42:49 GMT -[ 0.023] recv (stream_id=13) server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1a -[ 0.023] recv (stream_id=13) content-type: application/data -[ 0.023] recv HEADERS frame - ; END_HEADERS - (padlen=0) - ; First response header -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[ 0.023] recv DATA frame -12345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901[ 0.023] recv DATA frame -23456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012[ 0.023] recv DATA frame -34567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123[ 0.023] recv DATA frame -45678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234[ 0.024] recv DATA frame -56789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345[ 0.024] recv DATA frame -67890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456[ 0.024] recv DATA frame -78901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567[ 0.024] recv DATA frame -89012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678[ 0.024] recv DATA frame -90123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789[ 0.024] recv DATA frame -01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0[ 0.024] recv DATA frame -12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901[ 0.025] recv DATA frame -2345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234567890123456789012[ 0.025] recv DATA frame -3456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234567890123[ 0.025] recv DATA frame -4567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234[ 0.025] recv DATA frame -5678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345[ 0.025] recv DATA frame -6789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456[ 0.025] recv DATA frame -7890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567[ 0.025] recv DATA frame -8901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678[ 0.025] recv DATA frame -9012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789[ 0.025] recv DATA frame -0123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890[ 0.025] recv DATA frame -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01[ 0.025] recv DATA frame -2345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012[ 0.025] recv DATA frame -345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123[ 0.025] recv DATA frame -456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234[ 0.025] recv DATA frame -567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345[ 0.026] recv DATA frame -[ 0.026] send WINDOW_UPDATE frame - (window_size_increment=33566) -[ 0.026] send WINDOW_UPDATE frame - (window_size_increment=33566) -678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456[ 0.026] recv DATA frame -789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567[ 0.026] recv DATA frame -890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678[ 0.026] recv DATA frame -901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789[ 0.026] recv DATA frame -012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890[ 0.026] recv DATA frame -123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901[ 0.026] recv DATA frame -234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012[ 0.026] recv DATA frame -345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123[ 0.026] recv DATA frame -45678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901234[ 0.026] recv DATA frame -56789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345[ 0.026] recv DATA frame -67890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456[ 0.026] recv DATA frame -78901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567[ 0.026] recv DATA frame -89012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678[ 0.026] recv DATA frame -90123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789[ 0.026] recv DATA frame -01234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890[ 0.026] recv DATA frame -12345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901[ 0.026] recv DATA frame -23456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012[ 0.027] recv DATA frame -34567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123[ 0.027] recv DATA frame -45678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234[ 0.027] recv DATA frame -5678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234567890123456789012345[ 0.027] recv DATA frame -6789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234567890123456[ 0.027] recv DATA frame -7890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678901234567[ 0.027] recv DATA frame -8901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789012345678[ 0.027] recv DATA frame -9012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234567890123456789[ 0.027] recv DATA frame -0123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345678901234[ 0.028] recv DATA frame -5678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012345[ 0.028] recv DATA frame -6789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456789012[ 0.028] send WINDOW_UPDATE frame - (window_size_increment=33260) -[ 0.028] send WINDOW_UPDATE frame - (window_size_increment=33260) -3456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567890123456[ 0.028] recv DATA frame -7890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -01234567[ 0.028] recv DATA frame -8901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678[ 0.028] recv DATA frame - -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789[ 0.028] recv DATA frame -012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890[ 0.028] recv DATA frame -123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901[ 0.028] recv DATA frame -234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012[ 0.028] recv DATA frame -345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123[ 0.028] recv DATA frame -456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234[ 0.028] recv DATA frame -567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345[ 0.028] recv DATA frame -678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456[ 0.029] recv DATA frame -789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567[ 0.029] recv DATA frame -890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678[ 0.029] recv DATA frame -901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -[ 0.029] recv DATA frame -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[ 0.029] recv DATA frame -12345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901[ 0.029] recv DATA frame -23456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012[ 0.029] recv DATA frame -34567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123[ 0.029] recv DATA frame -45678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234[ 0.029] recv DATA frame -56789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345[ 0.029] recv DATA frame -67890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456[ 0.029] recv DATA frame -78901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567[ 0.029] recv DATA frame -89012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678[ 0.029] recv DATA frame -90123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789[ 0.029] recv DATA frame -01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0[ 0.029] recv DATA frame -12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -[ 0.029] recv DATA frame - ; END_STREAM -[ 0.029] send GOAWAY frame - (last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[]) - diff -Nru apache2-2.4.51/test/modules/http2/data/nghttp-output-10k-1.txt apache2-2.4.52/test/modules/http2/data/nghttp-output-10k-1.txt --- apache2-2.4.51/test/modules/http2/data/nghttp-output-10k-1.txt 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/data/nghttp-output-10k-1.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,166 +0,0 @@ -stderr: [WARNING] Certificate verification failed: unable to verify the first certificate - -stdout: [ 0.002] Connected -The negotiated protocol: h2 -[ 0.004] send SETTINGS frame - (niv=2) - [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100] - [SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535] -[ 0.004] send PRIORITY frame - (dep_stream_id=0, weight=201, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=0, weight=101, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=0, weight=1, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=7, weight=1, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=3, weight=1, exclusive=0) -[ 0.004] send HEADERS frame - ; END_HEADERS | PRIORITY - (padlen=0, dep_stream_id=11, weight=16, exclusive=0) - ; Open new stream - :method: POST - :path: //echo.py - :scheme: https - :authority: 127.0.0.1:42002 - accept: */* - accept-encoding: gzip, deflate - user-agent: nghttp2/1.33.0 - content-length: 10000 - host: cgi.tests.httpd.apache.org:42002 -[ 0.004] send DATA frame - ; END_STREAM -[ 0.005] recv SETTINGS frame - (niv=1) - [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100] -[ 0.005] recv SETTINGS frame - ; ACK - (niv=0) -[ 0.005] recv WINDOW_UPDATE frame - (window_size_increment=2147418112) -[ 0.005] send SETTINGS frame - ; ACK - (niv=0) -[ 0.038] recv (stream_id=13) :status: 200 -[ 0.038] recv (stream_id=13) date: Thu, 14 Feb 2019 11:50:20 GMT -[ 0.038] recv (stream_id=13) server: Apache/2.4.39-dev (Unix) OpenSSL/1.1.1 -[ 0.038] recv (stream_id=13) content-type: application/data -[ 0.038] recv HEADERS frame - ; END_HEADERS - (padlen=0) - ; First response header -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890[ 0.038] recv DATA frame -12345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012345678901[ 0.038] recv DATA frame -23456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123456789012[ 0.038] recv DATA frame -34567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234567890123[ 0.038] recv DATA frame -45678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345678901234[ 0.038] recv DATA frame -56789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -0123456789012345678901234567890123456789012345[ 0.038] recv DATA frame -67890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567[ 0.038] recv DATA frame -890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678[ 0.039] recv DATA frame -901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -[ 0.039] recv DATA frame -[ 0.039] recv DATA frame - ; END_STREAM -[ 0.039] send GOAWAY frame - (last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[]) - diff -Nru apache2-2.4.51/test/modules/http2/data/nghttp-output-1k-1.txt apache2-2.4.52/test/modules/http2/data/nghttp-output-1k-1.txt --- apache2-2.4.51/test/modules/http2/data/nghttp-output-1k-1.txt 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/data/nghttp-output-1k-1.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -stderr: [WARNING] Certificate verification failed: unable to verify the first certificate - -stdout: [ 0.002] Connected -The negotiated protocol: h2 -[ 0.004] send SETTINGS frame - (niv=2) - [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100] - [SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535] -[ 0.004] send PRIORITY frame - (dep_stream_id=0, weight=201, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=0, weight=101, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=0, weight=1, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=7, weight=1, exclusive=0) -[ 0.004] send PRIORITY frame - (dep_stream_id=3, weight=1, exclusive=0) -[ 0.004] send HEADERS frame - ; END_HEADERS | PRIORITY - (padlen=0, dep_stream_id=11, weight=16, exclusive=0) - ; Open new stream - :method: POST - :path: //echo.py - :scheme: https - :authority: 127.0.0.1:42002 - accept: */* - accept-encoding: gzip, deflate - user-agent: nghttp2/1.33.0 - content-length: 1000 - host: cgi.tests.httpd.apache.org:42002 -[ 0.004] send DATA frame - ; END_STREAM -[ 0.005] recv SETTINGS frame - (niv=1) - [SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100] -[ 0.005] recv SETTINGS frame - ; ACK - (niv=0) -[ 0.005] recv WINDOW_UPDATE frame - (window_size_increment=2147418112) -[ 0.005] send SETTINGS frame - ; ACK - (niv=0) -[ 0.048] recv (stream_id=13) :status: 200 -[ 0.048] recv (stream_id=13) date: Thu, 14 Feb 2019 11:48:18 GMT -[ 0.048] recv (stream_id=13) server: Apache/2.4.39-dev (Unix) OpenSSL/1.1.1 -[ 0.048] recv (stream_id=13) content-type: application/data -[ 0.048] recv HEADERS frame - ; END_HEADERS - (padlen=0) - ; First response header -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 -[ 0.048] recv DATA frame -[ 0.048] recv DATA frame - ; END_STREAM -[ 0.048] send GOAWAY frame - (last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[]) - diff -Nru apache2-2.4.51/test/modules/http2/env.py apache2-2.4.52/test/modules/http2/env.py --- apache2-2.4.51/test/modules/http2/env.py 1970-01-01 00:00:00.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/env.py 2021-12-14 11:26:52.000000000 +0000 @@ -0,0 +1,141 @@ +import inspect +import logging +import os +import re +import subprocess +from typing import Dict, Any + +from pyhttpd.certs import CertificateSpec +from pyhttpd.conf import HttpdConf +from pyhttpd.env import HttpdTestEnv, HttpdTestSetup + +log = logging.getLogger(__name__) + + +class H2TestSetup(HttpdTestSetup): + + def __init__(self, env: 'HttpdTestEnv'): + super().__init__(env=env) + self.add_source_dir(os.path.dirname(inspect.getfile(H2TestSetup))) + self.add_modules(["http2", "proxy_http2", "cgid", "autoindex", "ssl"]) + + def make(self): + super().make() + self._add_h2test() + self._setup_data_1k_1m() + + def _add_h2test(self): + local_dir = os.path.dirname(inspect.getfile(H2TestSetup)) + p = subprocess.run([self.env.apxs, '-c', 'mod_h2test.c'], + capture_output=True, + cwd=os.path.join(local_dir, 'mod_h2test')) + rv = p.returncode + if rv != 0: + log.error(f"compiling md_h2test failed: {p.stderr}") + raise Exception(f"compiling md_h2test failed: {p.stderr}") + + modules_conf = os.path.join(self.env.server_dir, 'conf/modules.conf') + with open(modules_conf, 'a') as fd: + # load our test module which is not installed + fd.write(f"LoadModule h2test_module \"{local_dir}/mod_h2test/.libs/mod_h2test.so\"\n") + + def _setup_data_1k_1m(self): + s90 = "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678\n" + with open(os.path.join(self.env.gen_dir, "data-1k"), 'w') as f: + for i in range(10): + f.write(f"{i:09d}-{s90}") + with open(os.path.join(self.env.gen_dir, "data-10k"), 'w') as f: + for i in range(100): + f.write(f"{i:09d}-{s90}") + with open(os.path.join(self.env.gen_dir, "data-100k"), 'w') as f: + for i in range(1000): + f.write(f"{i:09d}-{s90}") + with open(os.path.join(self.env.gen_dir, "data-1m"), 'w') as f: + for i in range(10000): + f.write(f"{i:09d}-{s90}") + + +class H2TestEnv(HttpdTestEnv): + + def __init__(self, pytestconfig=None): + super().__init__(pytestconfig=pytestconfig) + self.add_httpd_conf([ + "H2MinWorkers 1", + "H2MaxWorkers 64", + "Protocols h2 http/1.1 h2c", + ]) + self.add_httpd_log_modules(["http2", "proxy_http2", "h2test"]) + self.add_cert_specs([ + CertificateSpec(domains=[ + f"push.{self._http_tld}", + f"hints.{self._http_tld}", + f"ssl.{self._http_tld}", + f"pad0.{self._http_tld}", + f"pad1.{self._http_tld}", + f"pad2.{self._http_tld}", + f"pad3.{self._http_tld}", + f"pad8.{self._http_tld}", + ]), + CertificateSpec(domains=[f"noh2.{self.http_tld}"], key_type='rsa2048'), + ]) + + self.httpd_error_log.set_ignored_lognos([ + 'AH02032', + 'AH01276', + 'AH01630', + 'AH00135', + 'AH02261', # Re-negotiation handshake failed (our test_101) + 'AH03490', # scoreboard full, happens on limit tests + ]) + self.httpd_error_log.add_ignored_patterns([ + re.compile(r'.*malformed header from script \'hecho.py\': Bad header: x.*'), + re.compile(r'.*:tls_post_process_client_hello:.*'), + re.compile(r'.*:tls_process_client_certificate:.*'), + re.compile(r'.*have incompatible TLS configurations.'), + ]) + + def setup_httpd(self, setup: HttpdTestSetup = None): + super().setup_httpd(setup=H2TestSetup(env=self)) + + +class H2Conf(HttpdConf): + + def __init__(self, env: HttpdTestEnv, extras: Dict[str, Any] = None): + super().__init__(env=env, extras=HttpdConf.merge_extras(extras, { + f"cgi.{env.http_tld}": [ + "SSLOptions +StdEnvVars", + "AddHandler cgi-script .py", + ] + })) + + def start_vhost(self, domains, port=None, doc_root="htdocs", with_ssl=None, + ssl_module=None, with_certificates=None): + super().start_vhost(domains=domains, port=port, doc_root=doc_root, + with_ssl=with_ssl, ssl_module=ssl_module, + with_certificates=with_certificates) + if f"noh2.{self.env.http_tld}" in domains: + protos = ["http/1.1"] + elif port == self.env.https_port or with_ssl is True: + protos = ["h2", "http/1.1"] + else: + protos = ["h2c", "http/1.1"] + if f"test2.{self.env.http_tld}" in domains: + protos = reversed(protos) + self.add(f"Protocols {' '.join(protos)}") + return self + + def add_vhost_noh2(self): + domains = [f"noh2.{self.env.http_tld}", f"noh2-alias.{self.env.http_tld}"] + self.start_vhost(domains=domains, port=self.env.https_port, doc_root="htdocs/noh2") + self.add(["Protocols http/1.1", "SSLOptions +StdEnvVars"]) + self.end_vhost() + self.start_vhost(domains=domains, port=self.env.http_port, doc_root="htdocs/noh2") + self.add(["Protocols http/1.1", "SSLOptions +StdEnvVars"]) + self.end_vhost() + return self + + def add_vhost_test1(self, proxy_self=False, h2proxy_self=False): + return super().add_vhost_test1(proxy_self=proxy_self, h2proxy_self=h2proxy_self) + + def add_vhost_test2(self): + return super().add_vhost_test2() diff -Nru apache2-2.4.51/test/modules/http2/h2_certs.py apache2-2.4.52/test/modules/http2/h2_certs.py --- apache2-2.4.51/test/modules/http2/h2_certs.py 2021-09-23 09:53:01.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/h2_certs.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,444 +0,0 @@ -import os -import re -from datetime import timedelta, datetime -from typing import List, Any, Optional - -from cryptography import x509 -from cryptography.hazmat.backends import default_backend -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric import ec, rsa -from cryptography.hazmat.primitives.asymmetric.ec import EllipticCurvePrivateKey -from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey -from cryptography.hazmat.primitives.serialization import Encoding, PrivateFormat, NoEncryption, load_pem_private_key -from cryptography.x509 import ExtendedKeyUsageOID, NameOID - - -EC_SUPPORTED = {} -EC_SUPPORTED.update([(curve.name.upper(), curve) for curve in [ - ec.SECP192R1, - ec.SECP224R1, - ec.SECP256R1, - ec.SECP384R1, -]]) - - -def _private_key(key_type): - if isinstance(key_type, str): - key_type = key_type.upper() - m = re.match(r'^(RSA)?(\d+)$', key_type) - if m: - key_type = int(m.group(2)) - - if isinstance(key_type, int): - return rsa.generate_private_key( - public_exponent=65537, - key_size=key_type, - backend=default_backend() - ) - if not isinstance(key_type, ec.EllipticCurve) and key_type in EC_SUPPORTED: - key_type = EC_SUPPORTED[key_type] - return ec.generate_private_key( - curve=key_type, - backend=default_backend() - ) - - -class CertificateSpec: - - def __init__(self, name: str = None, domains: List[str] = None, - email: str = None, - key_type: str = None, single_file: bool = False, - valid_from: timedelta = timedelta(days=-1), - valid_to: timedelta = timedelta(days=89), - client: bool = False, - sub_specs: List['CertificateSpec'] = None): - self._name = name - self.domains = domains - self.client = client - self.email = email - self.key_type = key_type - self.single_file = single_file - self.valid_from = valid_from - self.valid_to = valid_to - self.sub_specs = sub_specs - - @property - def name(self) -> Optional[str]: - if self._name: - return self._name - elif self.domains: - return self.domains[0] - return None - - -class Credentials: - - def __init__(self, name: str, cert: Any, pkey: Any): - self._name = name - self._cert = cert - self._pkey = pkey - self._cert_file = None - self._pkey_file = None - self._store = None - - @property - def name(self) -> str: - return self._name - - @property - def subject(self) -> x509.Name: - return self._cert.subject - - @property - def key_type(self): - if isinstance(self._pkey, RSAPrivateKey): - return f"rsa{self._pkey.key_size}" - elif isinstance(self._pkey, EllipticCurvePrivateKey): - return f"{self._pkey.curve.name}" - else: - raise Exception(f"unknown key type: {self._pkey}") - - @property - def private_key(self) -> Any: - return self._pkey - - @property - def certificate(self) -> Any: - return self._cert - - @property - def cert_pem(self) -> bytes: - return self._cert.public_bytes(Encoding.PEM) - - @property - def pkey_pem(self) -> bytes: - return self._pkey.private_bytes( - Encoding.PEM, - PrivateFormat.TraditionalOpenSSL if self.key_type.startswith('rsa') else PrivateFormat.PKCS8, - NoEncryption()) - - def set_store(self, store: 'CertStore'): - self._store = store - - def set_files(self, cert_file: str, pkey_file: str = None): - self._cert_file = cert_file - self._pkey_file = pkey_file - - @property - def cert_file(self) -> str: - return self._cert_file - - @property - def pkey_file(self) -> Optional[str]: - return self._pkey_file - - def get_first(self, name) -> Optional['Credentials']: - creds = self._store.get_credentials_for_name(name) if self._store else [] - return creds[0] if len(creds) else None - - def get_credentials_for_name(self, name) -> List['Credentials']: - return self._store.get_credentials_for_name(name) if self._store else [] - - def issue_certs(self, specs: List[CertificateSpec], - chain: List['Credentials'] = None) -> List['Credentials']: - return [self.issue_cert(spec=spec, chain=chain) for spec in specs] - - def issue_cert(self, spec: CertificateSpec, chain: List['Credentials'] = None) -> 'Credentials': - key_type = spec.key_type if spec.key_type else self.key_type - creds = self._store.load_credentials(name=spec.name, key_type=key_type, single_file=spec.single_file) \ - if self._store else None - if creds is None: - creds = H2TestCA.create_credentials(spec=spec, issuer=self, key_type=key_type, - valid_from=spec.valid_from, valid_to=spec.valid_to) - if self._store: - self._store.save(creds, single_file=spec.single_file) - - if spec.sub_specs: - if self._store: - sub_store = CertStore(fpath=os.path.join(self._store.path, creds.name)) - creds.set_store(sub_store) - subchain = chain.copy() if chain else [] - subchain.append(self) - creds.issue_certs(spec.sub_specs, chain=subchain) - return creds - - -class CertStore: - - def __init__(self, fpath: str): - self._store_dir = fpath - if not os.path.exists(self._store_dir): - os.makedirs(self._store_dir) - self._creds_by_name = {} - - @property - def path(self) -> str: - return self._store_dir - - def save(self, creds: Credentials, name: str = None, - chain: List[Credentials] = None, - single_file: bool = False) -> None: - name = name if name is not None else creds.name - cert_file = self.get_cert_file(name=name, key_type=creds.key_type) - pkey_file = self.get_pkey_file(name=name, key_type=creds.key_type) - if single_file: - pkey_file = None - with open(cert_file, "wb") as fd: - fd.write(creds.cert_pem) - if chain: - for c in chain: - fd.write(c.cert_pem) - if pkey_file is None: - fd.write(creds.pkey_pem) - if pkey_file is not None: - with open(pkey_file, "wb") as fd: - fd.write(creds.pkey_pem) - creds.set_files(cert_file, pkey_file) - self._add_credentials(name, creds) - - def _add_credentials(self, name: str, creds: Credentials): - if name not in self._creds_by_name: - self._creds_by_name[name] = [] - self._creds_by_name[name].append(creds) - - def get_credentials_for_name(self, name) -> List[Credentials]: - return self._creds_by_name[name] if name in self._creds_by_name else [] - - def get_cert_file(self, name: str, key_type=None) -> str: - key_infix = ".{0}".format(key_type) if key_type is not None else "" - return os.path.join(self._store_dir, f'{name}{key_infix}.cert.pem') - - def get_pkey_file(self, name: str, key_type=None) -> str: - key_infix = ".{0}".format(key_type) if key_type is not None else "" - return os.path.join(self._store_dir, f'{name}{key_infix}.pkey.pem') - - def load_pem_cert(self, fpath: str) -> x509.Certificate: - with open(fpath) as fd: - return x509.load_pem_x509_certificate("".join(fd.readlines()).encode()) - - def load_pem_pkey(self, fpath: str): - with open(fpath) as fd: - return load_pem_private_key("".join(fd.readlines()).encode(), password=None) - - def load_credentials(self, name: str, key_type=None, single_file: bool = False): - cert_file = self.get_cert_file(name=name, key_type=key_type) - pkey_file = cert_file if single_file else self.get_pkey_file(name=name, key_type=key_type) - if os.path.isfile(cert_file) and os.path.isfile(pkey_file): - cert = self.load_pem_cert(cert_file) - pkey = self.load_pem_pkey(pkey_file) - creds = Credentials(name=name, cert=cert, pkey=pkey) - creds.set_store(self) - creds.set_files(cert_file, pkey_file) - self._add_credentials(name, creds) - return creds - return None - - -class H2TestCA: - - @classmethod - def create_root(cls, name: str, store_dir: str, key_type: str = "rsa2048") -> Credentials: - store = CertStore(fpath=store_dir) - creds = store.load_credentials(name="ca", key_type=key_type) - if creds is None: - creds = H2TestCA._make_ca_credentials(name=name, key_type=key_type) - store.save(creds, name="ca") - creds.set_store(store) - return creds - - @staticmethod - def create_credentials(spec: CertificateSpec, issuer: Credentials, key_type: Any, - valid_from: timedelta = timedelta(days=-1), - valid_to: timedelta = timedelta(days=89), - ) -> Credentials: - """Create a certificate signed by this CA for the given domains. - :returns: the certificate and private key PEM file paths - """ - if spec.domains and len(spec.domains): - creds = H2TestCA._make_server_credentials(name=spec.name, domains=spec.domains, - issuer=issuer, valid_from=valid_from, - valid_to=valid_to, key_type=key_type) - elif spec.client: - creds = H2TestCA._make_client_credentials(name=spec.name, issuer=issuer, - email=spec.email, valid_from=valid_from, - valid_to=valid_to, key_type=key_type) - elif spec.name: - creds = H2TestCA._make_ca_credentials(name=spec.name, issuer=issuer, - valid_from=valid_from, valid_to=valid_to, - key_type=key_type) - else: - raise Exception(f"unrecognized certificate specification: {spec}") - return creds - - @staticmethod - def _make_x509_name(org_name: str = None, common_name: str = None, parent: x509.Name = None) -> x509.Name: - name_pieces = [] - if org_name: - oid = NameOID.ORGANIZATIONAL_UNIT_NAME if parent else NameOID.ORGANIZATION_NAME - name_pieces.append(x509.NameAttribute(oid, org_name)) - elif common_name: - name_pieces.append(x509.NameAttribute(NameOID.COMMON_NAME, common_name)) - if parent: - name_pieces.extend([rdn for rdn in parent]) - return x509.Name(name_pieces) - - @staticmethod - def _make_csr( - subject: x509.Name, - pkey: Any, - issuer_subject: Optional[Credentials], - valid_from_delta: timedelta = None, - valid_until_delta: timedelta = None - ): - pubkey = pkey.public_key() - issuer_subject = issuer_subject if issuer_subject is not None else subject - - valid_from = datetime.now() - if valid_until_delta is not None: - valid_from += valid_from_delta - valid_until = datetime.now() - if valid_until_delta is not None: - valid_until += valid_until_delta - - return ( - x509.CertificateBuilder() - .subject_name(subject) - .issuer_name(issuer_subject) - .public_key(pubkey) - .not_valid_before(valid_from) - .not_valid_after(valid_until) - .serial_number(x509.random_serial_number()) - .add_extension( - x509.SubjectKeyIdentifier.from_public_key(pubkey), - critical=False, - ) - ) - - @staticmethod - def _add_ca_usages(csr: Any) -> Any: - return csr.add_extension( - x509.BasicConstraints(ca=True, path_length=9), - critical=True, - ).add_extension( - x509.KeyUsage( - digital_signature=True, - content_commitment=False, - key_encipherment=False, - data_encipherment=False, - key_agreement=False, - key_cert_sign=True, - crl_sign=True, - encipher_only=False, - decipher_only=False), - critical=True - ).add_extension( - x509.ExtendedKeyUsage([ - ExtendedKeyUsageOID.CLIENT_AUTH, - ExtendedKeyUsageOID.SERVER_AUTH, - ExtendedKeyUsageOID.CODE_SIGNING, - ]), - critical=True - ) - - @staticmethod - def _add_leaf_usages(csr: Any, domains: List[str], issuer: Credentials) -> Any: - return csr.add_extension( - x509.BasicConstraints(ca=False, path_length=None), - critical=True, - ).add_extension( - x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier( - issuer.certificate.extensions.get_extension_for_class( - x509.SubjectKeyIdentifier).value), - critical=False - ).add_extension( - x509.SubjectAlternativeName([x509.DNSName(domain) for domain in domains]), - critical=True, - ).add_extension( - x509.ExtendedKeyUsage([ - ExtendedKeyUsageOID.SERVER_AUTH, - ]), - critical=True - ) - - @staticmethod - def _add_client_usages(csr: Any, issuer: Credentials, rfc82name: str = None) -> Any: - cert = csr.add_extension( - x509.BasicConstraints(ca=False, path_length=None), - critical=True, - ).add_extension( - x509.AuthorityKeyIdentifier.from_issuer_subject_key_identifier( - issuer.certificate.extensions.get_extension_for_class( - x509.SubjectKeyIdentifier).value), - critical=False - ) - if rfc82name: - cert.add_extension( - x509.SubjectAlternativeName([x509.RFC822Name(rfc82name)]), - critical=True, - ) - cert.add_extension( - x509.ExtendedKeyUsage([ - ExtendedKeyUsageOID.CLIENT_AUTH, - ]), - critical=True - ) - return cert - - @staticmethod - def _make_ca_credentials(name, key_type: Any, - issuer: Credentials = None, - valid_from: timedelta = timedelta(days=-1), - valid_to: timedelta = timedelta(days=89), - ) -> Credentials: - pkey = _private_key(key_type=key_type) - if issuer is not None: - issuer_subject = issuer.certificate.subject - issuer_key = issuer.private_key - else: - issuer_subject = None - issuer_key = pkey - subject = H2TestCA._make_x509_name(org_name=name, parent=issuer.subject if issuer else None) - csr = H2TestCA._make_csr(subject=subject, - issuer_subject=issuer_subject, pkey=pkey, - valid_from_delta=valid_from, valid_until_delta=valid_to) - csr = H2TestCA._add_ca_usages(csr) - cert = csr.sign(private_key=issuer_key, - algorithm=hashes.SHA256(), - backend=default_backend()) - return Credentials(name=name, cert=cert, pkey=pkey) - - @staticmethod - def _make_server_credentials(name: str, domains: List[str], issuer: Credentials, - key_type: Any, - valid_from: timedelta = timedelta(days=-1), - valid_to: timedelta = timedelta(days=89), - ) -> Credentials: - name = name - pkey = _private_key(key_type=key_type) - subject = H2TestCA._make_x509_name(common_name=name, parent=issuer.subject) - csr = H2TestCA._make_csr(subject=subject, - issuer_subject=issuer.certificate.subject, pkey=pkey, - valid_from_delta=valid_from, valid_until_delta=valid_to) - csr = H2TestCA._add_leaf_usages(csr, domains=domains, issuer=issuer) - cert = csr.sign(private_key=issuer.private_key, - algorithm=hashes.SHA256(), - backend=default_backend()) - return Credentials(name=name, cert=cert, pkey=pkey) - - @staticmethod - def _make_client_credentials(name: str, - issuer: Credentials, email: Optional[str], - key_type: Any, - valid_from: timedelta = timedelta(days=-1), - valid_to: timedelta = timedelta(days=89), - ) -> Credentials: - pkey = _private_key(key_type=key_type) - subject = H2TestCA._make_x509_name(common_name=name, parent=issuer.subject) - csr = H2TestCA._make_csr(subject=subject, - issuer_subject=issuer.certificate.subject, pkey=pkey, - valid_from_delta=valid_from, valid_until_delta=valid_to) - csr = H2TestCA._add_client_usages(csr, issuer=issuer, rfc82name=email) - cert = csr.sign(private_key=issuer.private_key, - algorithm=hashes.SHA256(), - backend=default_backend()) - return Credentials(name=name, cert=cert, pkey=pkey) diff -Nru apache2-2.4.51/test/modules/http2/h2_conf.py apache2-2.4.52/test/modules/http2/h2_conf.py --- apache2-2.4.51/test/modules/http2/h2_conf.py 2021-10-07 12:43:52.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/h2_conf.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ -import os - - -class HttpdConf(object): - - def __init__(self, env, path=None): - self.env = env - self._lines = [] - self._has_ssl_vhost = False - - def install(self): - if not self._has_ssl_vhost: - self.add_vhost_test1() - self.env.install_test_conf(self._lines) - - def add(self, line): - if isinstance(line, list): - self._lines.extend(line) - else: - self._lines.append(line) - return self - - def add_vhost(self, port, name, aliases=None, doc_root="htdocs", with_ssl=True): - self.start_vhost(port, name, aliases, doc_root, with_ssl) - self.end_vhost() - return self - - def start_vhost(self, port, name, aliases=None, doc_root="htdocs", with_ssl=True): - server_domain = f"{name}.{self.env.http_tld}" - lines = [ - f"", - f" ServerName {server_domain}" - ] - if aliases: - lines.extend([ - f" ServerAlias {alias}.{self.env.http_tld}" for alias in aliases]) - lines.append(f" DocumentRoot {doc_root}") - if with_ssl: - self._has_ssl_vhost = True - lines.append(" SSLEngine on") - for cred in self.env.get_credentials_for_name(server_domain): - lines.extend([ - f"SSLCertificateFile {cred.cert_file}", - f"SSLCertificateKeyFile {cred.pkey_file}", - ]) - return self.add(lines) - - def end_vhost(self): - self.add("") - return self - - def add_proxies(self, host, proxy_self=False, h2proxy_self=False): - if proxy_self or h2proxy_self: - self.add(" ProxyPreserveHost on") - if proxy_self: - self.add(f""" - ProxyPass /proxy/ http://127.0.0.1:{self.env.http_port}/ - ProxyPassReverse /proxy/ http://{host}.{self.env.http_tld}:{self.env.http_port}/ - """) - if h2proxy_self: - self.add(f""" - ProxyPass /h2proxy/ h2://127.0.0.1:{self.env.https_port}/ - ProxyPassReverse /h2proxy/ https://{host}.{self.env.http_tld}:self.env.https_port/ - """) - return self - - def add_vhost_test1(self, proxy_self=False, h2proxy_self=False, extras=None): - domain = f"test1.{self.env.http_tld}" - if extras and 'base' in extras: - self.add(extras['base']) - self.start_vhost( - self.env.http_port, "test1", aliases=["www1"], doc_root="htdocs/test1", with_ssl=False - ).add( - " Protocols h2c http/1.1" - ).end_vhost() - self.start_vhost( - self.env.https_port, "test1", aliases=["www1"], doc_root="htdocs/test1", with_ssl=True) - self.add(f""" - Protocols h2 http/1.1 - - Options +Indexes - HeaderName /006/header.html - - {extras[domain] if extras and domain in extras else ""} - """) - self.add_proxies("test1", proxy_self, h2proxy_self) - self.end_vhost() - return self - - def add_vhost_test2(self, extras=None): - domain = f"test2.{self.env.http_tld}" - if extras and 'base' in extras: - self.add(extras['base']) - self.start_vhost(self.env.http_port, "test2", aliases=["www2"], doc_root="htdocs/test2", with_ssl=False) - self.add(" Protocols http/1.1 h2c") - self.end_vhost() - self.start_vhost(self.env.https_port, "test2", aliases=["www2"], doc_root="htdocs/test2", with_ssl=True) - self.add(f""" - Protocols http/1.1 h2 - - Options +Indexes - HeaderName /006/header.html - - {extras[domain] if extras and domain in extras else ""} - """) - self.end_vhost() - return self - - def add_vhost_cgi(self, proxy_self=False, h2proxy_self=False, extras=None): - domain = f"cgi.{self.env.http_tld}" - if extras and 'base' in extras: - self.add(extras['base']) - if proxy_self: - self.add_proxy_setup() - if h2proxy_self: - self.add(" SSLProxyEngine on") - self.add(" SSLProxyCheckPeerName off") - self.start_vhost(self.env.https_port, "cgi", aliases=["cgi-alias"], doc_root="htdocs/cgi", with_ssl=True) - self.add(""" - Protocols h2 http/1.1 - SSLOptions +StdEnvVars - AddHandler cgi-script .py - - SetHandler http2-status - """) - self.add_proxies("cgi", proxy_self=proxy_self, h2proxy_self=h2proxy_self) - self.add(" ") - self.add(" SetHandler h2test-echo") - self.add(" ") - self.add(" ") - self.add(" SetHandler h2test-delay") - self.add(" ") - if extras and domain in extras: - self.add(extras[domain]) - self.end_vhost() - self.start_vhost(self.env.http_port, "cgi", aliases=["cgi-alias"], doc_root="htdocs/cgi", with_ssl=False) - self.add(" AddHandler cgi-script .py") - self.add_proxies("cgi", proxy_self=proxy_self, h2proxy_self=h2proxy_self) - if extras and domain in extras: - self.add(extras[domain]) - self.end_vhost() - self.add(" LogLevel proxy:info") - self.add(" LogLevel proxy_http:info") - return self - - def add_vhost_noh2(self): - self.start_vhost(self.env.https_port, "noh2", aliases=["noh2-alias"], doc_root="htdocs/noh2", with_ssl=True) - self.add(f""" - Protocols http/1.1 - SSLOptions +StdEnvVars""") - self.end_vhost() - self.start_vhost(self.env.http_port, "noh2", aliases=["noh2-alias"], doc_root="htdocs/noh2", with_ssl=False) - self.add(" Protocols http/1.1") - self.add(" SSLOptions +StdEnvVars") - self.end_vhost() - return self - - def add_proxy_setup(self): - self.add("ProxyStatus on") - self.add("ProxyTimeout 5") - self.add("SSLProxyEngine on") - self.add("SSLProxyVerify none") - return self diff -Nru apache2-2.4.51/test/modules/http2/h2_curl.py apache2-2.4.52/test/modules/http2/h2_curl.py --- apache2-2.4.51/test/modules/http2/h2_curl.py 2021-10-07 12:43:52.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/h2_curl.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,133 +0,0 @@ -import datetime -import re -import subprocess -import sys -import time -from threading import Thread - -from h2_env import H2TestEnv - - -class CurlPiper: - - def __init__(self, env: H2TestEnv, url: str): - self.env = env - self.url = url - self.proc = None - self.args = None - self.headerfile = None - self._stderr = [] - self._stdout = [] - self.stdout_thread = None - self.stderr_thread = None - self._exitcode = -1 - self._r = None - - @property - def exitcode(self): - return self._exitcode - - @property - def response(self): - return self._r.response if self._r else None - - def start(self): - self.args, self.headerfile = self.env.curl_complete_args(self.url, timeout=5, options=[ - "-T", "-", "-X", "POST", "--trace-ascii", "%", "--trace-time"]) - sys.stderr.write("starting: {0}\n".format(self.args)) - self.proc = subprocess.Popen(self.args, stdin=subprocess.PIPE, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - bufsize=0) - - def read_output(fh, buffer): - while True: - chunk = fh.read() - if not chunk: - break - buffer.append(chunk.decode()) - - # collect all stdout and stderr until we are done - # use separate threads to not block ourself - self._stderr = [] - self._stdout = [] - if self.proc.stderr: - self.stderr_thread = Thread(target=read_output, args=(self.proc.stderr, self._stderr)) - self.stderr_thread.start() - if self.proc.stdout: - self.stdout_thread = Thread(target=read_output, args=(self.proc.stdout, self._stdout)) - self.stdout_thread.start() - return self.proc - - def send(self, data: str): - self.proc.stdin.write(data.encode()) - self.proc.stdin.flush() - - def close(self) -> ([str], [str]): - self.proc.stdin.close() - self.stdout_thread.join() - self.stderr_thread.join() - self._end() - return self._stdout, self._stderr - - def _end(self): - if self.proc: - # noinspection PyBroadException - try: - if self.proc.stdin: - # noinspection PyBroadException - try: - self.proc.stdin.close() - except Exception: - pass - if self.proc.stdout: - self.proc.stdout.close() - if self.proc.stderr: - self.proc.stderr.close() - except Exception: - self.proc.terminate() - finally: - self.proc.wait() - self.stdout_thread = None - self.stderr_thread = None - self._exitcode = self.proc.returncode - self.proc = None - self._r = self.env.curl_parse_headerfile(self.headerfile) - - def stutter_check(self, chunks: [str], stutter: datetime.timedelta): - if not self.proc: - self.start() - for chunk in chunks: - self.send(chunk) - time.sleep(stutter.total_seconds()) - recv_out, recv_err = self.close() - # assert we got everything back - assert "".join(chunks) == "".join(recv_out) - # now the tricky part: check *when* we got everything back - recv_times = [] - for line in "".join(recv_err).split('\n'): - m = re.match(r'^\s*(\d+:\d+:\d+(\.\d+)?) <= Recv data, (\d+) bytes.*', line) - if m: - recv_times.append(datetime.time.fromisoformat(m.group(1))) - # received as many chunks as we sent - assert len(chunks) == len(recv_times), "received response not in {0} chunks, but {1}".format( - len(chunks), len(recv_times)) - - def microsecs(tdelta): - return ((tdelta.hour * 60 + tdelta.minute) * 60 + tdelta.second) * 1000000 + tdelta.microsecond - - recv_deltas = [] - last_mics = microsecs(recv_times[0]) - for ts in recv_times[1:]: - mics = microsecs(ts) - delta_mics = mics - last_mics - if delta_mics < 0: - delta_mics += datetime.time(23, 59, 59, 999999) - recv_deltas.append(datetime.timedelta(microseconds=delta_mics)) - last_mics = mics - stutter_td = datetime.timedelta(seconds=stutter.total_seconds() * 0.9) # 10% leeway - # TODO: the first two chunks are often close together, it seems - # there still is a little buffering delay going on - for idx, td in enumerate(recv_deltas[1:]): - assert stutter_td < td, \ - f"chunk {idx} arrived too early \n{recv_deltas}\nafter {td}\n{recv_err}" diff -Nru apache2-2.4.51/test/modules/http2/h2_env.py apache2-2.4.52/test/modules/http2/h2_env.py --- apache2-2.4.51/test/modules/http2/h2_env.py 2021-10-07 12:43:52.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/h2_env.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,632 +0,0 @@ -import inspect -import logging -import re -import os -import shutil -import stat -import subprocess -import sys -import time -from datetime import datetime, timedelta -from string import Template -from typing import List - -import requests - -from configparser import ConfigParser, ExtendedInterpolation -from urllib.parse import urlparse - -from h2_certs import Credentials -from h2_nghttp import Nghttp -from h2_result import ExecResult - - -log = logging.getLogger(__name__) - - -class Dummy: - pass - - -class H2TestSetup: - - # the modules we want to load - MODULES = [ - "log_config", - "logio", - "unixd", - "version", - "watchdog", - "authn_core", - "authz_host", - "authz_groupfile", - "authz_user", - "authz_core", - "access_compat", - "auth_basic", - "cache", - "cache_disk", - "cache_socache", - "socache_shmcb", - "dumpio", - "reqtimeout", - "filter", - "mime", - "env", - "headers", - "setenvif", - "slotmem_shm", - "ssl", - "status", - "autoindex", - "cgid", - "dir", - "alias", - "rewrite", - "deflate", - "proxy", - "proxy_http", - "proxy_balancer", - "proxy_hcheck", - ] - - def __init__(self, env: 'H2TestEnv'): - self.env = env - - def make(self): - self._make_dirs() - self._make_conf() - self._make_htdocs() - self._make_h2test() - self._make_modules_conf() - - def _make_dirs(self): - if os.path.exists(self.env.gen_dir): - shutil.rmtree(self.env.gen_dir) - os.makedirs(self.env.gen_dir) - if not os.path.exists(self.env.server_logs_dir): - os.makedirs(self.env.server_logs_dir) - - def _make_conf(self): - conf_src_dir = os.path.join(self.env.test_dir, 'conf') - conf_dest_dir = os.path.join(self.env.server_dir, 'conf') - if not os.path.exists(conf_dest_dir): - os.makedirs(conf_dest_dir) - for name in os.listdir(conf_src_dir): - src_path = os.path.join(conf_src_dir, name) - m = re.match(r'(.+).template', name) - if m: - self._make_template(src_path, os.path.join(conf_dest_dir, m.group(1))) - elif os.path.isfile(src_path): - shutil.copy(src_path, os.path.join(conf_dest_dir, name)) - - def _make_template(self, src, dest): - var_map = dict() - for name, value in self.env.__class__.__dict__.items(): - if isinstance(value, property): - var_map[name] = value.fget(self.env) - t = Template(''.join(open(src).readlines())) - with open(dest, 'w') as fd: - fd.write(t.substitute(var_map)) - - def _make_htdocs(self): - if not os.path.exists(self.env.server_docs_dir): - os.makedirs(self.env.server_docs_dir) - shutil.copytree(os.path.join(self.env.test_dir, 'htdocs'), - os.path.join(self.env.server_dir, 'htdocs'), - dirs_exist_ok=True) - cgi_dir = os.path.join(self.env.server_dir, 'htdocs/cgi') - for name in os.listdir(cgi_dir): - if re.match(r'.+\.py', name): - cgi_file = os.path.join(cgi_dir, name) - st = os.stat(cgi_file) - os.chmod(cgi_file, st.st_mode | stat.S_IEXEC) - - def _make_h2test(self): - p = subprocess.run([self.env.apxs, '-c', 'mod_h2test.c'], - capture_output=True, - cwd=os.path.join(self.env.test_dir, 'mod_h2test')) - rv = p.returncode - if rv != 0: - log.error(f"compiling md_h2test failed: {p.stderr}") - raise Exception(f"compiling md_h2test failed: {p.stderr}") - - def _make_modules_conf(self): - modules_conf = os.path.join(self.env.server_dir, 'conf/modules.conf') - with open(modules_conf, 'w') as fd: - # issue load directives for all modules we want that are shared - for m in self.MODULES: - mod_path = os.path.join(self.env.libexec_dir, f"mod_{m}.so") - if os.path.isfile(mod_path): - fd.write(f"LoadModule {m}_module \"{mod_path}\"\n") - for m in ["http2", "proxy_http2"]: - fd.write(f"LoadModule {m}_module \"{self.env.libexec_dir}/mod_{m}.so\"\n") - # load our test module which is not installed - fd.write(f"LoadModule h2test_module \"{self.env.test_dir}/mod_h2test/.libs/mod_h2test.so\"\n") - - -class H2TestEnv: - - def __init__(self, pytestconfig=None, setup_dirs=True): - our_dir = os.path.dirname(inspect.getfile(Dummy)) - self.config = ConfigParser(interpolation=ExtendedInterpolation()) - self.config.read(os.path.join(our_dir, 'config.ini')) - - self._apxs = self.config.get('global', 'apxs') - self._prefix = self.config.get('global', 'prefix') - self._apachectl = self.config.get('global', 'apachectl') - self._libexec_dir = self.get_apxs_var('LIBEXECDIR') - - self._curl = self.config.get('global', 'curl_bin') - self._nghttp = self.config.get('global', 'nghttp') - self._h2load = self.config.get('global', 'h2load') - self._ca = None - - self._http_port = int(self.config.get('test', 'http_port')) - self._https_port = int(self.config.get('test', 'https_port')) - self._http_tld = self.config.get('test', 'http_tld') - self._test_dir = self.config.get('test', 'test_dir') - self._test_src_dir = self.config.get('test', 'test_src_dir') - self._gen_dir = self.config.get('test', 'gen_dir') - self._server_dir = os.path.join(self._gen_dir, 'apache') - self._server_conf_dir = os.path.join(self._server_dir, "conf") - self._server_docs_dir = os.path.join(self._server_dir, "htdocs") - self._server_logs_dir = os.path.join(self.server_dir, "logs") - self._server_access_log = os.path.join(self._server_logs_dir, "access_log") - self._server_error_log = os.path.join(self._server_logs_dir, "error_log") - - self._dso_modules = self.config.get('global', 'dso_modules').split(' ') - self._domains = [ - f"test1.{self._http_tld}", - f"test2.{self._http_tld}", - f"test3.{self._http_tld}", - f"cgi.{self._http_tld}", - f"push.{self._http_tld}", - f"hints.{self._http_tld}", - f"ssl.{self._http_tld}", - f"pad0.{self._http_tld}", - f"pad1.{self._http_tld}", - f"pad2.{self._http_tld}", - f"pad3.{self._http_tld}", - f"pad8.{self._http_tld}", - ] - self._domains_noh2 = [ - f"noh2.{self._http_tld}", - ] - self._mpm_type = os.environ['MPM'] if 'MPM' in os.environ else 'event' - - self._httpd_addr = "127.0.0.1" - self._http_base = f"http://{self._httpd_addr}:{self.http_port}" - self._https_base = f"https://{self._httpd_addr}:{self.https_port}" - - self._test_conf = os.path.join(self._server_conf_dir, "test.conf") - self._httpd_base_conf = f""" - LoadModule mpm_{self.mpm_type}_module \"{self.libexec_dir}/mod_mpm_{self.mpm_type}.so\" - H2MinWorkers 1 - H2MaxWorkers 64 - SSLSessionCache "shmcb:ssl_gcache_data(32000)" - """ - self._verbosity = pytestconfig.option.verbose if pytestconfig is not None else 0 - if self._verbosity >= 2: - self._httpd_base_conf += f""" - LogLevel http2:trace2 proxy_http2:info h2test:trace2 - LogLevel core:trace5 mpm_{self.mpm_type}:trace5 - """ - elif self._verbosity >= 1: - self._httpd_base_conf += "LogLevel http2:debug proxy_http2:debug h2test:debug" - else: - self._httpd_base_conf += "LogLevel http2:info proxy_http2:info" - - self._verify_certs = False - if setup_dirs: - self._setup = H2TestSetup(env=self) - self._setup.make() - - @property - def apxs(self) -> str: - return self._apxs - - @property - def verbosity(self) -> int: - return self._verbosity - - @property - def prefix(self) -> str: - return self._prefix - - @property - def mpm_type(self) -> str: - return self._mpm_type - - @property - def http_port(self) -> int: - return self._http_port - - @property - def https_port(self) -> int: - return self._https_port - - @property - def http_tld(self) -> str: - return self._http_tld - - @property - def domain_test1(self) -> str: - return self._domains[0] - - @property - def domains(self) -> List[str]: - return self._domains - - @property - def domains_noh2(self) -> List[str]: - return self._domains_noh2 - - @property - def http_base_url(self) -> str: - return self._http_base - - @property - def https_base_url(self) -> str: - return self._https_base - - @property - def gen_dir(self) -> str: - return self._gen_dir - - @property - def test_dir(self) -> str: - return self._test_dir - - @property - def test_src_dir(self) -> str: - return self._test_src_dir - - @property - def server_dir(self) -> str: - return self._server_dir - - @property - def server_logs_dir(self) -> str: - return self._server_logs_dir - - @property - def libexec_dir(self) -> str: - return self._libexec_dir - - @property - def dso_modules(self) -> List[str]: - return self._dso_modules - - @property - def server_conf_dir(self) -> str: - return self._server_conf_dir - - @property - def server_docs_dir(self) -> str: - return self._server_docs_dir - - @property - def httpd_base_conf(self) -> str: - return self._httpd_base_conf - - @property - def h2load(self) -> str: - return self._h2load - - @property - def ca(self) -> Credentials: - return self._ca - - def set_ca(self, ca: Credentials): - self._ca = ca - - def get_credentials_for_name(self, dns_name) -> List['Credentials']: - for domains in [self._domains, self._domains_noh2]: - if dns_name in domains: - return self.ca.get_credentials_for_name(domains[0]) - return [] - - def has_h2load(self): - return self._h2load != "" - - def has_nghttp(self): - return self._nghttp != "" - - def has_nghttp_get_assets(self): - if not self.has_nghttp(): - return False - args = [self._nghttp, "-a"] - p = subprocess.run(args, stderr=subprocess.PIPE, stdout=subprocess.PIPE) - rv = p.returncode - if rv != 0: - return False - return p.stderr == "" - - def get_apxs_var(self, name: str) -> str: - p = subprocess.run([self._apxs, "-q", name], capture_output=True, text=True) - if p.returncode != 0: - return "" - return p.stdout.strip() - - def get_httpd_version(self) -> str: - return self.get_apxs_var("HTTPD_VERSION") - - def mkpath(self, path): - if not os.path.exists(path): - return os.makedirs(path) - - def test_src(self, path): - return os.path.join(self._test_src_dir, path) - - def run(self, args) -> ExecResult: - log.debug("execute: %s", " ".join(args)) - start = datetime.now() - p = subprocess.run(args, stderr=subprocess.PIPE, stdout=subprocess.PIPE) - return ExecResult(exit_code=p.returncode, stdout=p.stdout, stderr=p.stderr, - duration=datetime.now() - start) - - def mkurl(self, scheme, hostname, path='/'): - port = self.https_port if scheme == 'https' else self.http_port - return "%s://%s.%s:%s%s" % (scheme, hostname, self.http_tld, port, path) - - def install_test_conf(self, conf: List[str]): - with open(self._test_conf, 'w') as fd: - fd.write(f"{self.httpd_base_conf}\n") - for line in conf: - fd.write(f"{line}\n") - - def is_live(self, url, timeout: timedelta = None): - s = requests.Session() - if not timeout: - timeout = timedelta(seconds=10) - try_until = datetime.now() + timeout - log.debug("checking reachability of %s", url) - while datetime.now() < try_until: - try: - req = requests.Request('HEAD', url).prepare() - s.send(req, verify=self._verify_certs, timeout=timeout.total_seconds()) - return True - except IOError: - log.debug("connect error: %s", sys.exc_info()[0]) - time.sleep(.2) - except: - log.warning("Unexpected error: %s", sys.exc_info()[0]) - time.sleep(.2) - log.debug(f"Unable to contact '{url}' after {timeout} sec") - return False - - def is_dead(self, url, timeout: timedelta = None): - s = requests.Session() - if not timeout: - timeout = timedelta(seconds=10) - try_until = datetime.now() + timeout - log.debug("checking reachability of %s", url) - while datetime.now() < try_until: - try: - req = requests.Request('HEAD', url).prepare() - s.send(req, verify=self._verify_certs, timeout=int(timeout.total_seconds())) - time.sleep(.2) - except IOError: - return True - log.debug("Server still responding after %d sec", timeout) - return False - - def _run_apachectl(self, cmd): - args = [self._apachectl, - "-d", self.server_dir, - "-f", os.path.join(self._server_dir, 'conf/httpd.conf'), - "-k", cmd] - log.debug("execute: %s", " ".join(args)) - p = subprocess.run(args, capture_output=True, text=True) - rv = p.returncode - if rv != 0: - log.warning(f"exit {rv}, stdout: {p.stdout}, stderr: {p.stderr}") - return rv - - def apache_reload(self): - rv = self._run_apachectl("graceful") - if rv == 0: - timeout = timedelta(seconds=10) - rv = 0 if self.is_live(self._http_base, timeout=timeout) else -1 - return rv - - def apache_restart(self): - self.apache_stop() - rv = self._run_apachectl("start") - if rv == 0: - timeout = timedelta(seconds=10) - rv = 0 if self.is_live(self._http_base, timeout=timeout) else -1 - return rv - - def apache_stop(self): - rv = self._run_apachectl("stop") - if rv == 0: - timeout = timedelta(seconds=10) - rv = 0 if self.is_dead(self._http_base, timeout=timeout) else -1 - log.debug("waited for a apache.is_dead, rv=%d", rv) - return rv - - def apache_access_log_clear(self): - if os.path.isfile(self._server_access_log): - os.remove(self._server_access_log) - - def apache_error_log_clear(self): - if os.path.isfile(self._server_error_log): - os.remove(self._server_error_log) - - RE_APLOGNO = re.compile(r'.*\[(?P[^:]+):(error|warn)].* (?PAH\d+): .+') - RE_SSL_LIB_ERR = re.compile(r'.*\[ssl:error].* SSL Library Error: error:(?P\S+):.+') - RE_ERRLOG_ERROR = re.compile(r'.*\[(?P[^:]+):error].*') - RE_ERRLOG_WARN = re.compile(r'.*\[(?P[^:]+):warn].*') - - def apache_errors_and_warnings(self): - errors = [] - warnings = [] - - if os.path.isfile(self._server_error_log): - for line in open(self._server_error_log): - m = self.RE_APLOGNO.match(line) - if m and m.group('aplogno') in [ - 'AH02032', - 'AH01276', - 'AH01630', - 'AH00135', - 'AH02261', # Re-negotiation handshake failed (our test_101 - ]: - # we know these happen normally in our tests - continue - m = self.RE_SSL_LIB_ERR.match(line) - if m and m.group('errno') in [ - '1417A0C1', # cipher suite mismatch, test_101 - '1417C0C7', # client cert not accepted, test_101 - ]: - # we know these happen normally in our tests - continue - m = self.RE_ERRLOG_ERROR.match(line) - if m and m.group('module') not in ['cgid']: - errors.append(line) - continue - m = self.RE_ERRLOG_WARN.match(line) - if m: - warnings.append(line) - continue - return errors, warnings - - def curl_complete_args(self, urls, timeout, options): - if not isinstance(urls, list): - urls = [urls] - u = urlparse(urls[0]) - assert u.hostname, f"hostname not in url: {urls[0]}" - assert u.port, f"port not in url: {urls[0]}" - headerfile = ("%s/curl.headers" % self.gen_dir) - if os.path.isfile(headerfile): - os.remove(headerfile) - - args = [ - self._curl, - "--cacert", self.ca.cert_file, - "-s", "-D", headerfile, - "--resolve", ("%s:%s:%s" % (u.hostname, u.port, self._httpd_addr)), - "--connect-timeout", ("%d" % timeout), - "--path-as-is" - ] - if options: - args.extend(options) - args += urls - return args, headerfile - - def curl_parse_headerfile(self, headerfile: str, r: ExecResult = None) -> ExecResult: - lines = open(headerfile).readlines() - exp_stat = True - if r is None: - r = ExecResult(exit_code=0, stdout=b'', stderr=b'') - header = {} - for line in lines: - if exp_stat: - log.debug("reading 1st response line: %s", line) - m = re.match(r'^(\S+) (\d+) (.*)$', line) - assert m - r.add_response({ - "protocol": m.group(1), - "status": int(m.group(2)), - "description": m.group(3), - "body": r.outraw - }) - exp_stat = False - header = {} - elif re.match(r'^$', line): - exp_stat = True - else: - log.debug("reading header line: %s", line) - m = re.match(r'^([^:]+):\s*(.*)$', line) - assert m - header[m.group(1).lower()] = m.group(2) - r.response["header"] = header - return r - - def curl_raw(self, urls, timeout, options): - xopt = ['-vvvv'] - if options: - xopt.extend(options) - args, headerfile = self.curl_complete_args(urls, timeout, xopt) - r = self.run(args) - if r.exit_code == 0: - self.curl_parse_headerfile(headerfile, r=r) - if r.json: - r.response["json"] = r.json - return r - - def curl_get(self, url, timeout=5, options=None): - return self.curl_raw([url], timeout=timeout, options=options) - - def curl_upload(self, url, fpath, timeout=5, options=None): - if not options: - options = [] - options.extend([ - "--form", ("file=@%s" % fpath) - ]) - return self.curl_raw([url], timeout, options) - - def curl_post_data(self, url, data="", timeout=5, options=None): - if not options: - options = [] - options.extend(["--data", "%s" % data]) - return self.curl_raw(url, timeout, options) - - def curl_post_value(self, url, key, value, timeout=5, options=None): - if not options: - options = [] - options.extend(["--form", "{0}={1}".format(key, value)]) - return self.curl_raw(url, timeout, options) - - def curl_protocol_version(self, url, timeout=5, options=None): - if not options: - options = [] - options.extend(["-w", "%{http_version}\n", "-o", "/dev/null"]) - r = self.curl_raw(url, timeout=timeout, options=options) - if r.exit_code == 0 and r.response: - return r.response["body"].decode('utf-8').rstrip() - return -1 - - def nghttp(self): - return Nghttp(self._nghttp, connect_addr=self._httpd_addr, tmp_dir=self.gen_dir) - - def h2load_status(self, run: ExecResult): - stats = {} - m = re.search( - r'requests: (\d+) total, (\d+) started, (\d+) done, (\d+) succeeded' - r', (\d+) failed, (\d+) errored, (\d+) timeout', run.stdout) - if m: - stats["requests"] = { - "total": int(m.group(1)), - "started": int(m.group(2)), - "done": int(m.group(3)), - "succeeded": int(m.group(4)) - } - m = re.search(r'status codes: (\d+) 2xx, (\d+) 3xx, (\d+) 4xx, (\d+) 5xx', - run.stdout) - if m: - stats["status"] = { - "2xx": int(m.group(1)), - "3xx": int(m.group(2)), - "4xx": int(m.group(3)), - "5xx": int(m.group(4)) - } - run.add_results({"h2load": stats}) - return run - - def setup_data_1k_1m(self): - s100 = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678\n" - with open(os.path.join(self.gen_dir, "data-1k"), 'w') as f: - for i in range(10): - f.write(s100) - with open(os.path.join(self.gen_dir, "data-10k"), 'w') as f: - for i in range(100): - f.write(s100) - with open(os.path.join(self.gen_dir, "data-100k"), 'w') as f: - for i in range(1000): - f.write(s100) - with open(os.path.join(self.gen_dir, "data-1m"), 'w') as f: - for i in range(10000): - f.write(s100) diff -Nru apache2-2.4.51/test/modules/http2/h2_nghttp.py apache2-2.4.52/test/modules/http2/h2_nghttp.py --- apache2-2.4.51/test/modules/http2/h2_nghttp.py 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/h2_nghttp.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,288 +0,0 @@ -import re -import os -import subprocess -from datetime import datetime -from typing import Dict - -from urllib.parse import urlparse - -from h2_result import ExecResult - - -def _get_path(x): - return x["path"] - - -class Nghttp: - - def __init__(self, path, connect_addr=None, tmp_dir="/tmp"): - self.NGHTTP = path - self.CONNECT_ADDR = connect_addr - self.TMP_DIR = tmp_dir - - @staticmethod - def get_stream(streams, sid): - sid = int(sid) - if sid not in streams: - streams[sid] = { - "id": sid, - "header": {}, - "request": { - "id": sid, - "body": b'' - }, - "response": { - "id": sid, - "body": b'' - }, - "paddings": [], - "promises": [] - } - return streams[sid] if sid in streams else None - - def run(self, urls, timeout, options): - return self._baserun(urls, timeout, options) - - def complete_args(self, url, _timeout, options: [str]) -> [str]: - if not isinstance(url, list): - url = [url] - u = urlparse(url[0]) - args = [self.NGHTTP] - if self.CONNECT_ADDR: - connect_host = self.CONNECT_ADDR - args.append("--header=host: %s:%s" % (u.hostname, u.port)) - else: - connect_host = u.hostname - if options: - args.extend(options) - for xurl in url: - xu = urlparse(xurl) - nurl = "%s://%s:%s/%s" % (u.scheme, connect_host, xu.port, xu.path) - if xu.query: - nurl = "%s?%s" % (nurl, xu.query) - args.append(nurl) - return args - - def _baserun(self, url, timeout, options): - return self._run(self.complete_args(url, timeout, options)) - - def parse_output(self, btext) -> Dict: - # getting meta data and response body out of nghttp's output - # is a bit tricky. Without '-v' we just get the body. With '-v' meta - # data and timings in both directions are listed. - # We rely on response :status: to be unique and on - # response body not starting with space. - # Something not good enough for general purpose, but for these tests. - output = {} - body = '' - streams = {} - skip_indents = True - # chunk output into lines. nghttp mixes text - # meta output with bytes from the response body. - lines = [l.decode() for l in btext.split(b'\n')] - for lidx, l in enumerate(lines): - if len(l) == 0: - body += '\n' - continue - m = re.match(r'\[.*] recv \(stream_id=(\d+)\) (\S+): (\S*)', l) - if m: - s = self.get_stream(streams, m.group(1)) - hname = m.group(2) - hval = m.group(3) - print("stream %d header %s: %s" % (s["id"], hname, hval)) - header = s["header"] - if hname in header: - header[hname] += ", %s" % hval - else: - header[hname] = hval - body = '' - continue - - m = re.match(r'\[.*] recv HEADERS frame <.* stream_id=(\d+)>', l) - if m: - s = self.get_stream(streams, m.group(1)) - if s: - print("stream %d: recv %d header" % (s["id"], len(s["header"]))) - response = s["response"] - hkey = "header" - if "header" in response: - h = response["header"] - if ":status" in h and int(h[":status"]) >= 200: - hkey = "trailer" - else: - prev = { - "header": h - } - if "previous" in response: - prev["previous"] = response["previous"] - response["previous"] = prev - response[hkey] = s["header"] - s["header"] = {} - body = '' - continue - - m = re.match(r'(.*)\[.*] recv DATA frame ', l) - if m: - s = self.get_stream(streams, m.group(3)) - body += m.group(1) - blen = int(m.group(2)) - if s: - print("stream %d: %d DATA bytes added" % (s["id"], blen)) - padlen = 0 - if len(lines) > lidx + 2: - mpad = re.match(r' +\(padlen=(\d+)\)', lines[lidx+2]) - if mpad: - padlen = int(mpad.group(1)) - s["paddings"].append(padlen) - blen -= padlen - s["response"]["body"] += body[-blen:].encode() - body = '' - skip_indents = True - continue - - m = re.match(r'\[.*] recv PUSH_PROMISE frame <.* stream_id=(\d+)>', l) - if m: - s = self.get_stream(streams, m.group(1)) - if s: - # headers we have are request headers for the PUSHed stream - # these have been received on the originating stream, the promised - # stream id it mentioned in the following lines - print("stream %d: %d PUSH_PROMISE header" % (s["id"], len(s["header"]))) - if len(lines) > lidx+2: - m2 = re.match(r'\s+\(.*promised_stream_id=(\d+)\)', lines[lidx+2]) - if m2: - s2 = self.get_stream(streams, m2.group(1)) - s2["request"]["header"] = s["header"] - s["promises"].append(s2) - s["header"] = {} - continue - - m = re.match(r'(.*)\[.*] recv (\S+) frame ', l) - if m: - print("recv frame %s on stream %s" % (m.group(2), m.group(4))) - body += m.group(1) - skip_indents = True - continue - - m = re.match(r'(.*)\[.*] send (\S+) frame ', l) - if m: - print("send frame %s on stream %s" % (m.group(2), m.group(4))) - body += m.group(1) - skip_indents = True - continue - - if skip_indents and l.startswith(' '): - continue - - if '[' != l[0]: - skip_indents = None - body += l + '\n' - - # the main request is done on the lowest odd numbered id - main_stream = 99999999999 - for sid in streams: - s = streams[sid] - if ":status" in s["response"]["header"]: - s["response"]["status"] = int(s["response"]["header"][":status"]) - if (sid % 2) == 1 and sid < main_stream: - main_stream = sid - - output["streams"] = streams - if main_stream in streams: - output["response"] = streams[main_stream]["response"] - output["paddings"] = streams[main_stream]["paddings"] - return output - - def _raw(self, url, timeout, options): - args = ["-v"] - if options: - args.extend(options) - r = self._baserun(url, timeout, args) - if 0 == r.exit_code: - r.add_results(self.parse_output(r.outraw)) - return r - - def get(self, url, timeout=5, options=None): - return self._raw(url, timeout, options) - - def assets(self, url, timeout=5, options=None): - if not options: - options = [] - options.extend(["-ans"]) - r = self._baserun(url, timeout, options) - assets = [] - if 0 == r.exit_code: - lines = re.findall(r'[^\n]*\n', r.stdout, re.MULTILINE) - for lidx, l in enumerate(lines): - m = re.match(r'\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+/(.*)', l) - if m: - assets.append({ - "path": m.group(7), - "status": int(m.group(5)), - "size": m.group(6) - }) - assets.sort(key=_get_path) - r.add_assets(assets) - return r - - def post_data(self, url, data, timeout=5, options=None): - reqbody = ("%s/nghttp.req.body" % self.TMP_DIR) - with open(reqbody, 'wb') as f: - f.write(data.encode('utf-8')) - if not options: - options = [] - options.extend(["--data=%s" % reqbody]) - return self._raw(url, timeout, options) - - def post_name(self, url, name, timeout=5, options=None): - reqbody = ("%s/nghttp.req.body" % self.TMP_DIR) - with open(reqbody, 'w') as f: - f.write("--DSAJKcd9876\n") - f.write("Content-Disposition: form-data; name=\"value\"; filename=\"xxxxx\"\n") - f.write("Content-Type: text/plain\n") - f.write("\n%s\n" % name) - f.write("--DSAJKcd9876\n") - if not options: - options = [] - options.extend(["--data=%s" % reqbody]) - return self._raw(url, timeout, options) - - def upload(self, url, fpath, timeout=5, options=None): - if not options: - options = [] - options.extend(["--data=%s" % fpath]) - return self._raw(url, timeout, options) - - def upload_file(self, url, fpath, timeout=5, options=None): - fname = os.path.basename(fpath) - reqbody = ("%s/nghttp.req.body" % self.TMP_DIR) - with open(fpath, 'rb') as fin: - with open(reqbody, 'wb') as f: - f.write(("""--DSAJKcd9876 -Content-Disposition: form-data; name="xxx"; filename="xxxxx" -Content-Type: text/plain - -testing mod_h2 ---DSAJKcd9876 -Content-Disposition: form-data; name="file"; filename="%s" -Content-Type: application/octet-stream -Content-Transfer-Encoding: binary - -""" % fname).encode('utf-8')) - f.write(fin.read()) - f.write(""" ---DSAJKcd9876""".encode('utf-8')) - if not options: - options = [] - options.extend([ - "--data=%s" % reqbody, - "--expect-continue", - "-HContent-Type: multipart/form-data; boundary=DSAJKcd9876"]) - return self._raw(url, timeout, options) - - def _run(self, args) -> ExecResult: - print(("execute: %s" % " ".join(args))) - start = datetime.now() - p = subprocess.run(args, stderr=subprocess.PIPE, stdout=subprocess.PIPE) - return ExecResult(exit_code=p.returncode, stdout=p.stdout, stderr=p.stderr, - duration=datetime.now() - start) diff -Nru apache2-2.4.51/test/modules/http2/h2_result.py apache2-2.4.52/test/modules/http2/h2_result.py --- apache2-2.4.51/test/modules/http2/h2_result.py 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/h2_result.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -import json -from datetime import timedelta -from typing import Optional, Dict, List - - -class ExecResult: - - def __init__(self, exit_code: int, stdout: bytes, stderr: bytes = None, duration: timedelta = None): - self._exit_code = exit_code - self._raw = stdout if stdout else b'' - self._stdout = stdout.decode() if stdout is not None else "" - self._stderr = stderr.decode() if stderr is not None else "" - self._duration = duration if duration is not None else timedelta() - self._response = None - self._results = {} - self._assets = [] - # noinspection PyBroadException - try: - self._json_out = json.loads(self._stdout) - except: - self._json_out = None - - @property - def exit_code(self) -> int: - return self._exit_code - - @property - def outraw(self) -> bytes: - return self._raw - - @property - def stdout(self) -> str: - return self._stdout - - @property - def json(self) -> Optional[Dict]: - """Output as JSON dictionary or None if not parseable.""" - return self._json_out - - @property - def stderr(self) -> str: - return self._stderr - - @property - def duration(self) -> timedelta: - return self._duration - - @property - def response(self) -> Optional[Dict]: - return self._response - - @property - def results(self) -> Dict: - return self._results - - @property - def assets(self) -> List: - return self._assets - - def add_response(self, resp: Dict): - if self._response: - resp['previous'] = self._response - self._response = resp - - def add_results(self, results: Dict): - self._results.update(results) - if 'response' in results: - self.add_response(results['response']) - - def add_assets(self, assets: List): - self._assets.extend(assets) diff -Nru apache2-2.4.51/test/modules/http2/htdocs/alive.json apache2-2.4.52/test/modules/http2/htdocs/alive.json --- apache2-2.4.51/test/modules/http2/htdocs/alive.json 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/alive.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -{ - "host" : "generic", - "alive" : true -} diff -Nru apache2-2.4.51/test/modules/http2/htdocs/cgi/echo.py apache2-2.4.52/test/modules/http2/htdocs/cgi/echo.py --- apache2-2.4.51/test/modules/http2/htdocs/cgi/echo.py 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/cgi/echo.py 2021-12-14 11:26:52.000000000 +0000 @@ -9,6 +9,7 @@ # Just echo what we get print("Status: 200") +print(f"Request-Length: {len(content)}") print("Content-Type: application/data\n") sys.stdout.write(content) diff -Nru apache2-2.4.51/test/modules/http2/htdocs/forbidden.html apache2-2.4.52/test/modules/http2/htdocs/forbidden.html --- apache2-2.4.51/test/modules/http2/htdocs/forbidden.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/forbidden.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ - - - 403 - Forbidden - - -

    403 - Forbidden

    -

    - An example of an error document. -

    - - diff -Nru apache2-2.4.51/test/modules/http2/htdocs/index.html apache2-2.4.52/test/modules/http2/htdocs/index.html --- apache2-2.4.51/test/modules/http2/htdocs/index.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ - - - mod_h2 test site generic - - -

    mod_h2 test site generic

    - - - diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/001.html apache2-2.4.52/test/modules/http2/htdocs/test1/001.html --- apache2-2.4.51/test/modules/http2/htdocs/test1/001.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/001.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ - - - - HTML/2.0 Test File: 001 - - -

    HTML/2.0 Test File: 001

    -

    This file only contains a simple HTML structure with plain text.

    - - Binary files /srv/release.debian.org/tmp/n2Respj406/apache2-2.4.51/test/modules/http2/htdocs/test1/002.jpg and /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/002.jpg differ Binary files /srv/release.debian.org/tmp/n2Respj406/apache2-2.4.51/test/modules/http2/htdocs/test1/003/003_img.jpg and /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/003/003_img.jpg differ diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/003.html apache2-2.4.52/test/modules/http2/htdocs/test1/003.html --- apache2-2.4.51/test/modules/http2/htdocs/test1/003.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/003.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ - - - - HTML/2.0 Test File: 003 - - -

    HTML/2.0 Test File: 003

    -

    This is a text HTML file with a big image:

    -

    GSMA Logo

    - - Binary files /srv/release.debian.org/tmp/n2Respj406/apache2-2.4.51/test/modules/http2/htdocs/test1/004/gophertiles.jpg and /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/004/gophertiles.jpg differ diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/004.html apache2-2.4.52/test/modules/http2/htdocs/test1/004.html --- apache2-2.4.51/test/modules/http2/htdocs/test1/004.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/004.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ - - - HTML/2.0 Test File: 004 - - -

    HTML/2.0 Test File: 004

    - This file contains plain text with a bunch of images.
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    This page is developed using this template:HTTP/2 demo server -

    - - \ No newline at end of file diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/006/006.css apache2-2.4.52/test/modules/http2/htdocs/test1/006/006.css --- apache2-2.4.51/test/modules/http2/htdocs/test1/006/006.css 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/006/006.css 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -@CHARSET "ISO-8859-1"; -body{ - background:HoneyDew; -} -p{ -color:#0000FF; -text-align:left; -} - -h1{ -color:#FF0000; -text-align:center; -} - -.listTitle{ - font-size:large; -} - -.listElements{ - color:#3366FF -} \ No newline at end of file diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/006/006.js apache2-2.4.52/test/modules/http2/htdocs/test1/006/006.js --- apache2-2.4.51/test/modules/http2/htdocs/test1/006/006.js 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/006/006.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -/** - * JavaScript Functions File - */ -function returnDate() -{ - var currentDate; - currentDate=new Date(); - var dateString=(currentDate.getMonth()+1)+'/'+currentDate.getDate()+'/'+currentDate.getFullYear(); - return dateString; -} - -function returnHour() -{ - var currentDate; - currentDate=new Date(); - var hourString=currentDate.getHours()+':'+currentDate.getMinutes()+':'+currentDate.getSeconds(); - return hourString; -} - -function javaScriptMessage(){ - return 'This section is generated under JavaScript:
    '; -} - -function mainJavascript(){ - document.write(javaScriptMessage()) - document.write('
      '); - document.write('
    • Current date (dd/mm/yyyy): ' + returnDate()); - document.write('
      '); - document.write('
    • Current time (hh:mm:ss): '+returnHour()); - document.write('
    '); -} \ No newline at end of file diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/006/header.html apache2-2.4.52/test/modules/http2/htdocs/test1/006/header.html --- apache2-2.4.51/test/modules/http2/htdocs/test1/006/header.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/006/header.html 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -My Header Title diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/006.html apache2-2.4.52/test/modules/http2/htdocs/test1/006.html --- apache2-2.4.51/test/modules/http2/htdocs/test1/006.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/006.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ - - - - HTML/2.0 Test File: 006 - - - - -

    HTML/2.0 Test File: 006

    -
    This page contains: -
      -
    • HTML -
    • CSS -
    • JavaScript -
    -
    -
    - -
    - - \ No newline at end of file diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/007/007.py apache2-2.4.52/test/modules/http2/htdocs/test1/007/007.py --- apache2-2.4.51/test/modules/http2/htdocs/test1/007/007.py 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/007/007.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import cgi, sys -import cgitb; cgitb.enable() - -print "Content-Type: text/html;charset=UTF-8" -print - -print """\ - - HTML/2.0 Test File: 007 (received data) -

    HTML/2.0 Test File: 007

    """ - -# alternative output: parsed form params <-> plain POST body -parseContent = True # <-> False - -if parseContent: - print '

    Data processed:

      ' - form = cgi.FieldStorage() - for name in form: - print '
    • ', name, ': ', form[name].value, '
    • ' - print '
    ' -else: - print '

    POST data output:

    '
    -	data = sys.stdin.read()
    -	print data
    -	print '
    ' - -print '' \ No newline at end of file diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/007.html apache2-2.4.52/test/modules/http2/htdocs/test1/007.html --- apache2-2.4.51/test/modules/http2/htdocs/test1/007.html 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/007.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ - - - - -HTML/2.0 Test File: 007 - - -

    HTML/2.0 Test File: 007

    -

    This page is used to send data from the client to the server:

    -
    - - Name:
    - Age:
    - Gender: Male - Female
    - - -
    -
    - - \ No newline at end of file diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/009.py apache2-2.4.52/test/modules/http2/htdocs/test1/009.py --- apache2-2.4.51/test/modules/http2/htdocs/test1/009.py 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/009.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import cgi, sys, time -import cgitb; cgitb.enable() - -print "Content-Type: text/html;charset=UTF-8" -print - -print """\ - - HTML/2.0 Test File: 009 (server time) -

    HTML/2.0 Test File: 009

    -

    60 seconds of server time, one by one.

    """ - -for i in range(60): - s = time.strftime("%Y-%m-%d %H:%M:%S") - print "
    ", s, "
    " - sys.stdout.flush() - time.sleep(1) - -print "

    done.

    " \ No newline at end of file diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/alive.json apache2-2.4.52/test/modules/http2/htdocs/test1/alive.json --- apache2-2.4.51/test/modules/http2/htdocs/test1/alive.json 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/alive.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -{ - "host" : "test1", - "alive" : true -} - Binary files /srv/release.debian.org/tmp/n2Respj406/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/ant.jpg and /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/ant.jpg differ Binary files /srv/release.debian.org/tmp/n2Respj406/apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/asf_logo.png and /srv/release.debian.org/tmp/KUOHvjH8F7/apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/asf_logo.png differ diff -Nru apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js --- apache2-2.4.51/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js 2021-08-20 16:07:44.000000000 +0000 +++ apache2-2.4.52/test/modules/http2/htdocs/test1/apache.org-files/async-ads.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ -if(!window['googleNDT_']){window['googleNDT_']=(new Date()).getTime();}(function() {window.googleAltLoader=4;var version_='3.0';var hash_='1ac79f060b1e0868a225f2a9999fbf89c251fdf3';var module_='ads';var packages_='search';var googleApisBase_='//ajax.googleapis.com/ajax';var serviceBase_='//cse.google.com/uds';var serviceHost_='cse.google.com';var k;var aa=this,ba=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; -else if("function"==b&&"undefined"==typeof a.call)return"object";return b},ca=function(a){return null!=a},da=function(a){return"string"==typeof a},ea=function(a,b,c){return a.call.apply(a.bind,arguments)},fa=function(a,b,c){if(!a)throw Error();if(2this.Mf&&(Mb("Tried to set int value to a number too large ( "+a+" = "+b+")","sIGVV"),c=this.Mf);0>c&&(Mb("Tried to set int value to a number too small ( "+a+" = "+b+")","sIGVV"),c=0);return c};k.Ga=m(x.prototype.Ga,"fssiGVV");k.Db=function(){return this.value||0};k.Db=m(x.prototype.Db,"fssiTB");k.Ub=function(a){return a};k.Ub=m(x.prototype.Ub,"fssiPFB"); -k.Ra=function(){return this.value+""};k.Ra=m(x.prototype.Ra,"fssiTES");k.Oa=function(a){return parseInt(a,10)};k.Oa=m(x.prototype.Oa,"fssiPES");var Ib=function(){this.lb=this.value=null;this.U=!1},Ib=m(Ib,"fsES");k=Ib.prototype;k.Td=2;k.Ga=function(a,b){return b=b?b.toString():""};k.Ga=m(Ib.prototype.Ga,"fsesGVV");k.Ra=function(){return this.value?encodeURIComponent(this.value):""};k.Ra=m(Ib.prototype.Ra,"fsesTES");k.Oa=function(a){return decodeURIComponent(a)};k.Oa=m(Ib.prototype.Oa,"fsesPES"); -var Lb=[Jb,x,Ib],Nb=function(a){null==Hb&&Kb();return Hb.Qa(a)},Nb=m(Nb,"fsSC"),Pb=function(a,b){null==Hb&&Kb();null==t&&(t={},Ob());a.Ua=b;t[a.sessionId]=a},Pb=m(Pb,"fsLFC"),Ob=function(){window.setInterval(Qb,500);Hb.Ha()},Ob=m(Ob,"fsIL"),Qb=function(){for(var a in t)if(t.hasOwnProperty(a)){var b=t[a];b.Rb()||(b.Ua=null,delete t[a])}},Qb=m(Qb,"fsCDI"),Kb=function(){A.Oe();Hb=A.af?A:ra()?z:B},Kb=m(Kb,"fsLT"),z={Jf:"exists",Qa:function(a){if(!a.U)return!0;for(var b in a.state)if(a.state.hasOwnProperty(b)){var c= -a.state[b];if(c.U&&c.Db){var d=c.Tc,e=c.Db(),f=b+":";z.Md(f+z.Jf);for(var g=0,h=1;g")&&(a=a.replace(ac,">"));-1!=a.indexOf('"')&&(a=a.replace(bc,"""));-1!=a.indexOf("'")&&(a=a.replace(cc,"'"));-1!=a.indexOf("\x00")&&(a=a.replace(dc,"�"));return a},Zb=/&/g,$b=//g,bc=/"/g,cc=/'/g,dc=/\x00/g,Yb=/[\x00&<>"']/, -fc=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^ia()).toString(36)},gc=function(a,b){return ab?1:0};var hc=Array.prototype.filter?function(a,b,c){return Array.prototype.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=da(a)?a.split(""):a,h=0;h]*>|&[^;]+;/g,kc=function(a,b){return b?a.replace(jc,""):a},lc=RegExp("[A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff]"),mc=RegExp("^[^A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0800-\u1fff\u200e\u2c00-\ufb1c\ufe00-\ufe6f\ufefd-\uffff]*[\u0591-\u06ef\u06fa-\u07ff\u200f\ufb1d-\ufdff\ufe70-\ufefc]"),nc=/^http:\/\/.*/,oc=/\s+/,pc=/[\d\u06f0-\u06f9]/;var rc=function(){this.Kj="";this.$h=qc},qc={};var tc=function(){this.df="";this.ai=sc};tc.prototype.ve=function(){return 1};var uc=function(a){return a instanceof tc&&a.constructor===tc&&a.ai===sc?a.df:"type_error:SafeUrl"},sc={};var wc=function(){this.Lj="";this.bi=vc};wc.prototype.ve=function(){return 1};var xc=function(a){return a instanceof wc&&a.constructor===wc&&a.bi===vc?a.Lj:"type_error:TrustedResourceUrl"},vc={};var zc=function(){this.df="";this.Zh=yc;this.Ii=null};zc.prototype.ve=function(){return this.Ii};var yc={};var Ac=function(){return null},Bc=function(a){var b=arguments,c=b.length;return function(){for(var a,e=0;eparseFloat(a))?String(b):a}(),Qc={},Rc=function(a){var b;if(!(b=Qc[a])){b=0;for(var c=Xb(String(Pc)).split("."),d=Xb(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f"+b,d.removeChild(d.firstChild)):d.innerHTML=b;if(1==d.childNodes.length)d=d.removeChild(d.firstChild);else{for(c=c.createDocumentFragment();d.firstChild;)c.appendChild(d.firstChild);d=c}return d};Xc.prototype.appendChild=function(a,b){a.appendChild(b)}; -Xc.prototype.contains=function(a,b){if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a};E&&Rc(8);var ad={},bd={},cd={},dd={},ed={},fd={},gd=function(){throw Error("Do not instantiate directly");};gd.prototype.Ba=null;gd.prototype.toString=function(){return this.content};var hd=function(){gd.call(this)};ja(hd,gd);var id=function(a,b){return null!=a&&a.Ya===b},jd=function(a){if(null!=a)switch(a.Ba){case 1:return 1;case -1:return-1;case 0:return 0}return null},kd=function(){gd.call(this)};ja(kd,gd);kd.prototype.Ya=ad;var G=function(a){return null!=a&&a.Ya===ad?a:a instanceof zc?F(a instanceof zc&&a.constructor===zc&&a.Zh===yc?a.df:"type_error:SafeHtml",a.ve()):F(ec(String(String(a))),jd(a))},ld=function(){gd.call(this)};ja(ld,gd);ld.prototype.Ya={};ld.prototype.Ba=1;var md=function(){gd.call(this)};ja(md,gd); -md.prototype.Ya=bd;md.prototype.Ba=1;var nd=function(){gd.call(this)};ja(nd,gd);nd.prototype.Ya=cd;nd.prototype.Ba=1;var od=function(){gd.call(this)};ja(od,gd);od.prototype.Ya=dd;od.prototype.Ba=1;var pd=function(){gd.call(this)};ja(pd,gd);pd.prototype.Ya=ed;pd.prototype.Ba=1;var qd=function(a,b){this.content=String(a);this.Ba=null!=b?b:null};ja(qd,hd);qd.prototype.Ya=fd; -var rd=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a){return new b(String(a))}},F=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a,d){var e=new b(String(a));void 0!==d&&(e.Ba=d);return e}}(kd);rd(ld);var sd=rd(md);rd(nd); -var td=rd(od),ud=rd(pd),vd=function(a,b){function c(){}c.prototype=a;var d=new c,e;for(e in b)d[e]=b[e];return d},wd=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a){return(a=String(a))?new b(a):""}},xd=function(a){return(a=String(a))?new qd(a,void 0):""},I=function(a){function b(a){this.content=a}b.prototype=a.prototype;return function(a,d){var e=String(a);if(!e)return"";e=new b(e);void 0!==d&&(e.Ba=d);return e}}(kd);wd(ld);wd(nd);wd(md);wd(od); -var yd=wd(pd),K=function(a){return G(a)},zd=function(a){return a.replace(/<\//g,"<\\/").replace(/\]\]>/g,"]]\\>")},M=function(a){return id(a,ad)?(a=String(a.content).replace(Ad,"").replace(Bd,"<"),String(a).replace(Cd,Dd)):ec(String(a))},Fd=function(a){if(id(a,dd))return a.content.replace(/([^"'\s])$/,"$1 ");a=String(a);a=Ed.test(a)?a:"zSoyz";return a},Id=function(a){return String(a).replace(Gd,Hd)},O=function(a){if(id(a,bd)||id(a,cd))return String(a).replace(Gd,Hd);a instanceof tc?a=Id(uc(a)): -a instanceof wc?a=Id(xc(a)):(a=String(a),a=Jd.test(a)?a.replace(Gd,Hd):"#zSoyz");return a},Ld=function(a){if(id(a,bd)||id(a,cd))return String(a).replace(Gd,Hd);a instanceof tc?a=Id(uc(a)):a instanceof wc?a=Id(xc(a)):(a=String(a),a=Kd.test(a)?a.replace(Gd,Hd):"about:invalid#zSoyz");return a},P=function(a){if(id(a,ed))return zd(a.content);null==a?a="":a instanceof rc?(a=a instanceof rc&&a.constructor===rc&&a.$h===qc?a.Kj:"type_error:SafeStyle",a=zd(a)):(a=String(a),a=Md.test(a)?a:"zSoyz");return a}, -Q=function(a){return id(a,fd)?"zSoyz":a},Nd=function(a){var b=jd(a);if(null==b){var c=b=0,d=!1;a=kc(a+"",id(a,ad)).split(oc);for(var e=0;e":">","`":"`","\u0085":"…", -"\u00a0":" ","\u2028":"
","\u2029":"
"},Dd=function(a){return Od[a]},Pd={"\x00":"%00","\u0001":"%01","\u0002":"%02","\u0003":"%03","\u0004":"%04","\u0005":"%05","\u0006":"%06","\u0007":"%07","\b":"%08","\t":"%09","\n":"%0A","\x0B":"%0B","\f":"%0C","\r":"%0D","\u000e":"%0E","\u000f":"%0F","\u0010":"%10","\u0011":"%11","\u0012":"%12","\u0013":"%13","\u0014":"%14","\u0015":"%15","\u0016":"%16","\u0017":"%17","\u0018":"%18","\u0019":"%19","\u001a":"%1A","\u001b":"%1B","\u001c":"%1C", -"\u001d":"%1D","\u001e":"%1E","\u001f":"%1F"," ":"%20",'"':"%22","'":"%27","(":"%28",")":"%29","<":"%3C",">":"%3E","\\":"%5C","{":"%7B","}":"%7D","\u007f":"%7F","\u0085":"%C2%85","\u00a0":"%C2%A0","\u2028":"%E2%80%A8","\u2029":"%E2%80%A9","\uff01":"%EF%BC%81","\uff03":"%EF%BC%83","\uff04":"%EF%BC%84","\uff06":"%EF%BC%86","\uff07":"%EF%BC%87","\uff08":"%EF%BC%88","\uff09":"%EF%BC%89","\uff0a":"%EF%BC%8A","\uff0b":"%EF%BC%8B","\uff0c":"%EF%BC%8C","\uff0f":"%EF%BC%8F","\uff1a":"%EF%BC%9A","\uff1b":"%EF%BC%9B", -"\uff1d":"%EF%BC%9D","\uff1f":"%EF%BC%9F","\uff20":"%EF%BC%A0","\uff3b":"%EF%BC%BB","\uff3d":"%EF%BC%BD"},Hd=function(a){return Pd[a]},Cd=/[\x00\x22\x27\x3c\x3e]/g,Gd=/[\x00- \x22\x27-\x29\x3c\x3e\\\x7b\x7d\x7f\x85\xa0\u2028\u2029\uff01\uff03\uff04\uff06-\uff0c\uff0f\uff1a\uff1b\uff1d\uff1f\uff20\uff3b\uff3d]/g,Md=/^(?!-*(?:expression|(?:moz-)?binding))(?:[.#]?-?(?:[_a-z0-9-]+)(?:-[_a-z0-9-]+)*-?|-?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[a-z]{1,2}|%)?|!important|)$/i,Jd=/^(?![^#?]*\/(?:\.|%2E){2}(?:[\/?#]|$))(?:(?:https?|mailto):|[^&:\/?#]*(?:[\/?#]|$))/i, -Kd=/^[^&:\/?#]*(?:[\/?#]|$)|^https?:|^data:image\/[a-z0-9+]+;base64,[a-z0-9+\/]+=*$|^blob:/i,Ed=/^(?!on|src|(?:style|action|archive|background|cite|classid|codebase|data|dsync|href|longdesc|usemap)\s*$)(?:[a-z0-9_$:-]*)$/i,Ad=/<(?:!|\/?([a-zA-Z][a-zA-Z0-9:\-]*))(?:[^>'"]|"[^"]*"|'[^']*')*>/g,Bd=/"+G(a.content)+"")};if(window.IS_GOOGLE_AFS_IFRAME_){var Td=1,R=function(){return"e"+Td++},Ud=function(a){this.Cb=a};Ud.prototype.j=function(){return this.Cb};var S=new Ud("");S.G=function(){return[]}};if(window.IS_GOOGLE_AFS_IFRAME_)var Vd=function(a,b,c,d,e,f,g,h,l,r,u,y,C,H,J){this.eb=a;this.za=b;this.xi=c;this.Jb=d;this.me=e;this.Te=f;this.yb=g;this.xk=h;this.f=l;this.A=r;this.yj=u;this.bk=y;this.Y=C;this.ac=H;this.xg=!1;this.sg=J};var Wd=function(a,b){if(a.classList)return a.classList.contains(b);for(var c=a.className.split(" "),d=0;d"+ -a+"";var c;try{c=b.firstChild.firstChild.firstChild}catch(d){return null}return 1==c.nodeType&&"tr"==c.tagName.toLowerCase()?c:null},be=function(a){var b=a.parentNode,c=a.nextSibling,d=document.createElement("div");d.appendChild(a);b&&(c?b.insertBefore(d,c):b.appendChild(d));return d};var U=function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var d=a["on"+b];a["on"+b]=null!=d?Bc(c,d):c}},ce=function(a,b){U(a,"mousedown",b);U(a,"mousedown",function(a,b,e){var f=!1;return function(){f||(a.removeEventListener?a.removeEventListener(b,e,!1):a.detachEvent&&a.detachEvent("on"+b,e),f=!0)}}(a,"mousedown",b))};var de=function(a){de[" "](a);return a};de[" "]=function(){};E&&Rc("9");!Mc||Rc("528");Lc&&Rc("1.9b")||E&&Rc("8")||Jc&&Rc("9.5")||Mc&&Rc("528");Lc&&!Rc("8")||E&&Rc("9");var ee=function(a,b,c,d,e,f,g,h){this.Rc=a;this.Ef=b;this.Cf=c;this.Ff=d;this.Df=e;this.Gf=f;this.Rd=g;this.Hf=h};ee.prototype.clone=function(){return new ee(this.Rc,this.Ef,this.Cf,this.Ff,this.Df,this.Gf,this.Rd,this.Hf)}; -var fe=function(a,b){if(0==b)return a.Rc;if(1==b)return a.Rd;var c=Cc(a.Rc,a.Cf,b),d=Cc(a.Cf,a.Df,b),e=Cc(a.Df,a.Rd,b),c=Cc(c,d,b),d=Cc(d,e,b);return Cc(c,d,b)},he=function(a){var b=ge,c=(a-b.Rc)/(b.Rd-b.Rc);if(0>=c)return 0;if(1<=c)return 1;for(var d=0,e=1,f=0;8>f;f++){var g=fe(b,c),h=(fe(b,c+1E-6)-g)/1E-6;if(1E-6>Math.abs(g-a))return c;if(1E-6>Math.abs(h))break;else gf;f++)gNd(a.text),f:a.f}))},ne=function(a){return F(0'+G(a.text)+""+(a.f?"‏":"‎"):"")};var qe=function(a){return F('"+K(oe(a))+"")},re=function(a){return F('
    "+K(ne({text:a.Hd,Ia:!1,f:a.f}))+""+(a.mg?' ('+K(pe({text:a.mg,f:a.f}))+")":"")+"
    "+(a.Zi?"":''+K(oe(a))+""))},se=function(a){return F('"+K(ne({text:a.text,Ia:!1,f:a.f}))+"")},te=function(a){var b=F,c;c=a.wh;var d=a.xh;a=a.f;var e="";if(d&&0'+G(c)+"")},ue=function(a){return F('"+te(a)+"")},ve=function(a){return F("
    "+ -G(a.Ka)+"
    "+G(a.La)+"
    "+G(a.Ad))},we=function(a){return F("
    "+G(a.Ka)+"
    "+G(a.La))},xe=function(a){var b,c="",d=b=a.eb,e=typeof d;switch("object"==e&&null!=d||"function"==e?b.toString():b){case 1:c+="oneLine";break;case 2:c+="twoLine";break;case 3:c+="threeLine"}c=xd(c);a=""+('
    "+G(a.content)+"
    ");return F(a)};var ye=function(a){var b=Yc(a),c=new Vc(0,0),d;d=b?Yc(b):document;var e;(e=!E||9<=Uc)||(e="CSS1Compat"==Zc(d).qc.compatMode);if(a==(e?d.documentElement:d.body))return c;var f;a:{try{f=a.getBoundingClientRect()}catch(g){f={left:0,top:0,right:0,bottom:0};break a}E&&a.ownerDocument.body&&(a=a.ownerDocument,f.left-=a.documentElement.clientLeft+a.body.clientLeft,f.top-=a.documentElement.clientTop+a.body.clientTop)}a=Zc(b).qc;b=a.scrollingElement?a.scrollingElement:Mc||"CSS1Compat"!=a.compatMode?a.body|| -a.documentElement:a.documentElement;a=a.parentWindow||a.defaultView;b=E&&Rc("10")&&a.pageYOffset!=b.scrollTop?new Vc(b.scrollLeft,b.scrollTop):new Vc(a.pageXOffset||b.scrollLeft,a.pageYOffset||b.scrollTop);c.x=f.left+b.x;c.y=f.top+b.y;return c};var ze=function(a){return F(""+G(a.text)+"")};if(window.IS_GOOGLE_AFS_IFRAME_){var Ae=function(a,b){this.ki=a;this.D=b||ze};Ae.prototype.j=function(){return this.D({text:this.ki,ca:null})}};var Be=function(a){var b="";a=a.elements;for(var c=a.length,d=0;d';a=a.Jc;for(var c=a.length,d=0;d")};if(window.IS_GOOGLE_AFS_IFRAME_){var Ee=function(a,b){this.F=R();this.qb=a;this.D=b||De};Ee.prototype.j=function(){for(var a=[],b=0;b^<]*>/g,"")},Le=function(a){var b=a.offsetWidth;if(!Ge())return b;var c=document.defaultView||{};c&&c.getComputedStyle?(a=c.getComputedStyle(a,!1),b-=He(a.getPropertyValue("padding-left"))+He(a.getPropertyValue("padding-right"))):(a=a.currentStyle,b-=He(a.paddingLeft)+He(a.paddingRight));return b},Me=function(a){var b=a.cloneNode(!0);b.style.visibility="hidden";b.style.position="absolute";if(ra()){var c=a.ownerDocument.createElement("div"); -c.style.visibility="hidden";c.style.position="relative";c.style.width="9999px";c.appendChild(b);a.parentNode.appendChild(c)}else b.style.top="0",b.style.whiteSpace="nowrap",a.parentNode.appendChild(b);a=new Wc(b.offsetWidth,b.offsetHeight);ra()?c.parentNode.removeChild(c):b.parentNode.removeChild(b);return a},Ne=function(){var a=document.createElement("div");a.innerHTML="";return"http://www.w3.org/2000/svg"==(a.firstChild&&a.firstChild.namespaceURI)};var Oe=/([?|&]{1}nm=)([\d]{1,})/,Pe=/(\?|&)clkt=-?[\d]*/g,Qe=/[&\?]nb=\d/,Re=/(\?|&)nx=-?[\d]+/g,Se=/(\?|&)ny=-?[\d]+/g,Ue=function(a){return function(){for(var b=0;ba.length+b.length&&(a+=b+encodeURIComponent(c),1950'),c=a.Jc,d=c.length,e=0;e'+G(f)+"");b+=""}return F(b)},lf=function(a){var b=F;if("jfkButton"==a.Y){var c=a.ij,d=a.text;a=F(K(Sd({href:a.url,A:a.A,qa:"grayJfkButton",content:I((c?'': -"")+''+G(d)+"")})))}else a='";return b(a)};var mf=function(a){var b=a.rb?"right":"left";a=""+('
    '+G(a.Da)+'
    '+G(a.Ea)+"
    ");return F(a)},nf=function(a){var b=a.rb?"right":"left";return a=""+('
    '+Q(a.Da)+'
    '+Q(a.Ea)+"
    ")},of=function(a){var b= -a.f?"right":"left";a=""+('
    '+G(a.Ea)+''+G(a.Da)+"
    ");return F(a)};if(window.IS_GOOGLE_AFS_IFRAME_){var pf=function(a,b,c,d,e,f,g,h){this.F=R();this.va=a;this.aj=b;this.jj=c;this.Cb=d;this.ui=e;this.I=f;this.W=g;this.D=h||lf};pf.prototype.j=function(){return this.D({uid:this.F,url:this.va,zg:this.aj,ij:this.jj,text:this.Cb,Y:this.ui,f:this.I,A:this.W})};var qf=function(a,b,c,d,e){"svgIcon"==c&&(c=Ne()?c+"Ctc":"pngIcon");return new pf(a,(window._googCsaAlwaysHttps?"https:":"")+"//www.google.com/images/afs/mobile/button_ctc.png",(window._googCsaAlwaysHttps?"https:": -"")+"//www.google.com/images/afs/mobile/gray_phone_icon.png",b,c,d,e,void 0)},rf=function(a,b,c,d,e){"svgIcon"==c&&(c=Ne()?c+"Ctd":"pngIcon");return new pf(a,(window._googCsaAlwaysHttps?"https:":"")+"//www.google.com/images/afs/mobile/"+(c?"ctd_get_app.png":"ctd-dl-icon.png"),"",b,c,e,d,void 0)},sf=function(a,b){var c=[];a.ctc&&c.push(qf(a.ctc.u,a.ctc.bt,b.Y,b.f,b.A));a.ctd&&c.push(rf(a.u,a.ctd.ps,b.Y,b.f,b.A));!(1<=c.length)||b.Y||a.ctc&&a.ctc.coa||a.ctd||c.push(new pf(a.u,(window._googCsaAlwaysHttps? -"https:":"")+"//www.google.com/images/afs/mobile/button_visit_site.png","",b.xk,"",b.f,b.A,void 0));return c},tf=function(a,b,c,d){this.Nc=a;this.jc=b;this.o=c;this.D=d||of};tf.prototype.j=function(){var a={Da:this.jc.j(),Ea:this.Nc.j(),Z:this.o.ac?60:78,Li:"jfkButton"==this.o.Y?"top":"middle",ga:12,borderColor:"jfkButton"==this.o.Y||this.o.ac?"":"#DDDDDD",f:this.o.f};return this.D(a)};tf.prototype.M=function(a,b){this.Nc.M&&this.Nc.M(a,b);this.jc.M&&this.jc.M(a,b)};tf.prototype.G=function(a){var b= -[];this.Nc.G&&(b=b.concat(this.Nc.G(a)));this.jc.G&&(b=b.concat(this.jc.G(a)));return b};var uf=function(a,b,c){b=sf(b,c);return 1==b.length?new tf(a,b[0],c,void 0):a},vf=function(a,b){var c=sf(a,b);return 1a?b=0:.8a&&(.2>=c&&(g.style.paddingBottom="3px"),.95<=c?g.style.paddingBottom="1px":.85<=c&&(g.style.paddingBottom="2px"));g&&1==c&&(g.style.paddingBottom="");if(window.onresize)window.onresize();f.style.opacity=b},l=function(a){var b=2*(.5-a);.5a&&(c=1);f.style.height=e*c+"px";f.style.opacity=b;if(window.onresize)window.onresize()},r=new ke(350);return function(){r.$a||(Wd(b,"collapsed")?(r.Gb=h,Xd(b,"collapsed"),d&&Xd(d,"collapsed")):(r.Gb=l,Yd(b, -"collapsed"),d&&Yd(d,"collapsed")),le(r))}};var Af=function(a){return F('
    '+G(a.Ka)+"
    "+yf({content:I('
    '+(!a.J||!a.O||a.$&&a.V?"":zf({J:a.J,O:a.O,xd:!0}))+G(a.La)+'
    '+G(a.Ad)+"
    "),f:a.f,$:a.$,V:a.V,sa:a.sa,ra:a.ra,Z:a.$&&a.V?45:0,ga:0,rb:a.f,J:a.J,O:a.O})+"
    ")},Bf=function(a){return F('
    '+G(a.Ka)+"
    "+yf({content:I('
    '+ -(!a.J||!a.O||a.$&&a.V?"":zf({J:a.J,O:a.O,xd:!0}))+'
    '+G(a.La)+"
    "),f:a.f,$:a.$,V:a.V,sa:a.sa,ra:a.ra,Z:a.$&&a.V?45:0,ga:0,rb:a.f,J:a.J,O:a.O})+"
    ")},Cf=function(a){return F("
    "+(a.$&&a.V?'':"")+G(a.nj)+(a.J&&a.O?" "+zf({J:a.J,O:a.O,xd:!0}):"")+G(a.oj)+"
    ")},yf=function(a){return F(K(mf({Da:I(""+ -(a.$&&a.V?'
    '+(a.J&&a.O?zf({J:a.J,O:a.O,xd:!1}):"")+"
    ":"")),Ea:I(""+G(a.content)),Z:a.Z,ga:a.ga,rb:a.f})))},zf=function(a){return F('
    ('+ -G(a.O)+")
    ")};var Df=function(a){return F('')},Ef=function(a){return F('')};if(window.IS_GOOGLE_AFS_IFRAME_){var Gf=function(a){return a.adIconUrl&&"title-right"==a.adIconLocation?new Ff(a.adIconUrl,a.img?Df:Ef):S},Ff=function(a,b){this.ek=a;this.D=b};Ff.prototype.j=function(){return this.D({ya:this.ek})}};var Hf=function(a){return F((a.Ng?F(''):"")+'
    '+K(pe({text:a.Hd,f:a.f}))+"
    ")};if(window.IS_GOOGLE_AFS_IFRAME_){var If=function(a,b,c){this.Ic=a;this.I=b;this.D=c||Hf};If.prototype.j=function(){return this.D({Hd:this.Ic,f:this.I,Ng:!0})}};var Kf=function(a){return""+Jf({text:a.text.c,Ia:a.text.rtl,f:a.f})},Jf=function(a){return''+Q(a.text)+""+(a.f?"‏":"‎")};var Lf=function(a){return F(a.Ne?"
    "+K(pe({text:a.Ne,f:a.f}))+"
    ":"")};if(window.IS_GOOGLE_AFS_IFRAME_){var Mf=function(a,b,c){this.F=R();this.Cb=a;this.I=b;this.D=c||Lf};Mf.prototype.j=function(){return this.D({uid:this.F,Ne:this.Cb,f:this.I})};var Nf=function(a,b){return a.location?new Mf(a.location,b.f):S}};if(window.IS_GOOGLE_AFS_IFRAME_){var Pf=function(a,b,c,d){this.F=R();this.xa=a;this.Ce=b;this.zk=c;this.D=d||Of};Pf.prototype.j=function(){return this.D({uid:this.F,Gd:this.xa,tb:this.Ce,Hh:this.zk})};var Qf=function(a,b){var c=a.gt&&"oh"==a.gt.r&&a.gt.t?a.gt.t:null;return a.oh&&0",c=a.$e,d=c.length,e=0;e"}return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_){var Sf=function(a,b,c,d){this.F=R();this.jk=a;this.W=b;this.I=c;this.D=d||Rf};Sf.prototype.j=function(){return this.D({uid:this.F,$e:this.jk,A:this.W,f:this.I})};var Uf=function(a,b){return a.plus_ones?new Sf(Tf(a),b.A,b.f):S},Tf=function(a){var b=[];if(a.plus_ones)for(var c=0,d=a.plus_ones.length;c  ('+K(Sd({href:a.Mc.u,content:Math.round(10*a.Mc.r)/10,A:a.A,qa:"sr-gt sr-gl"}))+")":"")},Xf=function(a){for(var b='
    ',c=a.ik,d=c.length,e=0;e ':"LINK_START"==f?'":"LINK_END"==f?"":"NUM_START"==f?'':"NUM_END"== -f?" ":K(pe({text:f,f:a.f})));return F(b+"
    ")},Vf=function(a){return F('
    ')};if(window.IS_GOOGLE_AFS_IFRAME_){var Yf=function(a,b,c,d,e,f){this.F=R();this.Cb=a;this.W=b;this.Pa=c;this.va=d;this.I=e;this.D=f||Xf};Yf.prototype.j=function(){return this.D({uid:this.F,ik:this.Cb,A:this.W,r:this.Pa,vk:this.va,f:this.I})};var Zf=function(a,b){if(a.ctd&&a.ctd.r&&a.ctd.nr&&b.ac){var c=a.ctd.r;return new Yf(["NUM_START",c,"NUM_END","RATING"," ","("+a.ctd.nr+")"],!1,c,"",b.f)}return a.sr&&a.sr.nt&&a.sr.r&&a.sr.u?new Yf(a.sr.nt,b.A,a.sr.r,a.sr.u,b.f):S}};var ag=function(a){var b="";if(a.qf&&0'),c=a.qf,d=c.length,e=0;e";c=a.ck;d=c.length;for(e=0;e";if(a.Te&&a.na&&0';c=a.na;d=c.length;for(e=0;e"}}return F(b)}, -$f=function(a){return F("")},bg=function(a){for(var b='")},cg=function(a){return F('")},dg=function(a){return F('
    '+cg({uid:a.uid,na:a.na,A:a.A,qh:"sitelinksTruncatedWide",nh:"sitelinksTruncatedNarrow",Ih:"nonSfblSitelinksWrapper"})+ -"
    ")};if(window.IS_GOOGLE_AFS_IFRAME_){var eg=function(a,b,c,d,e){this.F=R();this.$b=a;this.W=b;this.Qj=c;this.I=d;this.D=e||ag};eg.prototype.j=function(){for(var a=[],b=[],c=0;c',c=a.be,d=c.length,e=0;e'+(0!=e?"· ":"")+K(pe({text:c[e],f:a.f}))+"";b+=""}return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_){var jg=function(a,b,c){this.vi=a;this.I=b;this.D=c||ig};jg.prototype.j=function(){return this.D({be:this.vi,f:this.I})};var kg=function(a,b){return a.cos&&0d&&(c=c.substring(0,d-3)+"...");a.nodeValue=c;return!1}c=a.textContent||a.innerText;if(!c||c.length<=(b?0:4))return a.parentNode.removeChild(a),!0;for(c=lg(a.lastChild,b);c;)c=lg(a.lastChild,c);return!1},mg=function(a,b){if(!(0>=b)){for(var c=a.innerHTML.length;0b;c--)for(var d=a,e=lg(d.lastChild,!1);e;)e=lg(d.lastChild, -e);a.offsetHeight>b&&(a.innerHTML="")}},ng=function(a,b){var c=a.style.whiteSpace,d=a.style.wordWrap;a.style.whiteSpace="nowrap";a.style.wordWrap="normal";var e=a.offsetHeight;a.style.whiteSpace=c;a.style.wordWrap=d;mg(a,e*b+b)},og=function(a,b,c,d,e){var f=a.offsetHeight;if(!(f<=b)){var g=be(a);a=be(g);g.style.overflow="hidden";g.style.position="relative";var h=document.createElement("div");try{h.style.backgroundImage="linear-gradient(to bottom, rgba(255,255,255,0), #ffffff)"}catch(L){}h.style.height= -"30px";h.style.position="absolute";h.style.bottom=0;h.style.width="100%";h.style.pointerEvents="none";g.appendChild(h);var l=document.createElement("div");l.innerHTML=c;l.className="expander";l.style.textAlign="center";l.style.color=e;l.style.cursor="pointer";l.style.fontSize="11px";a.appendChild(l);var r=b-l.offsetHeight;g.style.height=r+"px";var u=f-r,y=document.getElementById("adBlock"),C=function(a){var b=y?y.offsetHeight:null;g.style.height=r+a*u+"px";.8<=a&&(l.innerHTML=d,h.style.background= -"");y&&b&&y.offsetHeight>b&&(y&&.2>=a&&(y.style.paddingBottom="4px"),y&&.98<=a?y.style.paddingBottom="1px":y&&.97<=a?y.style.paddingBottom="2px":y&&.96<=a&&(y.style.paddingBottom="3px"));y&&1==a&&(y.style.paddingBottom="");if(window.onresize)window.onresize()},H=function(a){g.style.height=f-a*u+"px";if(.2>=a)try{h.style.backgroundImage="linear-gradient(to bottom, rgba(255,255,255,0), #ffffff)"}catch(b){}.8<=a&&(l.innerHTML=c);if(window.onresize)window.onresize()},J=new ke(400);U(l,"click",function(){J.$a|| -l.innerHTML!=c?J.$a||(J.Gb=H,le(J)):(J.Gb=C,le(J))})}};if(window.IS_GOOGLE_AFS_IFRAME_){var pg=function(a,b,c){ng(T(a.document,b),2);U(a,"resize",function(){var d=T(a.document,b);d.innerHTML=c;ng(d,2)})},qg=function(a,b,c,d,e,f,g,h,l,r,u,y,C,H){this.F=R();this.P=a;this.T=b;this.ob=R();this.R=c;this.zc=d;this.vb=e;this.oa=f;this.vc=g;this.Dc=h;this.Cc=l;this.Ac=r;this.Pa=u;this.zb=y;this.I=C;this.fa=H||Af;this.Fb=R();this.Ca=R()};qg.prototype.j=function(){var a=Be({elements:[this.oa.j(),this.R.j()]}),b=Be({elements:[this.P.j(),this.vb.j()]}),c=this.zc? -a:this.T.j(),d=this.zc?this.T.j():a,a=this.fa({Ka:b,La:c,Ad:d,Eb:this.F,oc:this.ob,$:this.vc,V:this.Dc,sa:this.Cc,ra:this.Ac,J:this.Pa,O:this.zb,Lc:!1,f:this.I}),b=this.fa({Ka:b,La:c,Ad:d,Eb:this.Fb,oc:this.Ca,J:this.Pa,O:this.zb,Lc:!0,f:this.I});return Be({elements:[a,b]})};qg.prototype.M=function(a){var b=T(a.document,this.ob).innerHTML;pg(a,this.ob,b);this.Ca&&(b=T(a.document,this.Ca).innerHTML,pg(a,this.Ca,b));this.Fb&&U(a,"resize",wf(a,this.F,this.Fb))};qg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a))}; -var rg=function(a,b,c,d,e,f,g,h,l,r,u,y,C){this.F=R();this.P=a;this.T=b;this.ob=R();this.R=c;this.vb=d;this.oa=e;this.vc=f;this.Dc=g;this.Cc=h;this.Ac=l;this.Pa=r;this.zb=u;this.I=y;this.fa=C||Bf;this.Fb=R();this.Ca=R()};rg.prototype.j=function(){var a=Be({elements:[this.P.j(),this.vb.j()]}),b=Be({elements:[this.oa.j()," ",this.R.j()," ",this.T.j()]}),c=this.fa({Ka:a,La:b,Eb:this.F,oc:this.ob,$:this.vc,V:this.Dc,sa:this.Cc,ra:this.Ac,J:this.Pa,O:this.zb,Lc:!1,f:this.I}),a=this.fa({Ka:a,La:b,Eb:this.Fb, -oc:this.Ca,J:this.Pa,O:this.zb,Lc:!0,f:this.I});return Be({elements:[c,a]})};rg.prototype.M=function(a){var b=T(a.document,this.ob).innerHTML;pg(a,this.ob,b);this.Ca&&(b=T(a.document,this.Ca).innerHTML,pg(a,this.Ca,b));this.Fb&&U(a,"resize",wf(a,this.F,this.Fb))};rg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a))};var sg=function(a,b,c,d,e,f,g,h,l,r,u){this.P=a;this.T=b;this.R=c;this.oa=d;this.vc=e;this.Dc=f;this.Cc=g;this.Ac=h;this.Pa=l;this.zb=r;this.fa=u||Cf};sg.prototype.j=function(){var a= -Be({elements:[this.oa.j()," ",this.P.j()," "]}),b=Be({elements:[" ",this.T.j()," ",this.R.j()]});return this.fa({nj:a,oj:b,$:this.vc,V:this.Dc,sa:this.Cc,ra:this.Ac,J:this.Pa,O:this.zb})};sg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a))}};if(window.IS_GOOGLE_AFS_IFRAME_){var yg=function(a,b,c,d,e){this.F=R();this.gc=a;this.caps_=b;this.o=c;this.D=e||tg;d=[];c.Y&&1!=c.eb&&(e=df(a,c),e=new Ee([e,Gf(a)]),d.push(new af(e,a,c)));e=c.Y&&1!=c.eb?S:df(a,c);var f=c.Y&&1!=c.eb?S:Gf(a),g=jf(a,c),h=gf(a,c);if(a.ctd){var l=a.ctd.iu;if(l)var r=a.ctd.ih>a.ctd.iw?"height":"width",u=a.u,y=a.ctd.ir;else y=u=r=void 0;var C=a.ctd.r,H=a.ctd.nr;switch(c.eb){case 1:e=new sg(e,h,g,c.yb,l,r,u,y,C,H);break;case 2:e=new rg(e,h,g,f,c.yb,l,r,u,y,C,H,c.f);break; -default:e=new qg(e,h,g,c.me,f,c.yb,l,r,u,y,C,H,c.f)}}else switch(c.eb){case 1:e=new ug(e,h,g,c.yb);break;case 2:e=new vg(e,h,g,f,c.yb);break;default:e=new wg(e,h,g,a.pn?new If(a.pn,c.f):S,c.me,f,c.yb)}e=new af(e,a,c);b=xg(a,b,c);c.Y?(b=new Ee([e].concat(b)),d.push(uf(b,a,c))):(d.push(uf(e,a,c)),d=d.concat(b));this.$c=new Ee(d);this.Wf=R()};yg.prototype.j=function(){var a={uid:this.F,B:this.gc,A:this.o.A,fi:this.$c.j(),Jb:this.o.za||this.o.Jb,Vf:this.Wf,kk:null,jh:null};return this.D(a)};yg.prototype.M= -function(a,b){var c=this.$c.G(a.document),d=document.getElementById(this.Wf);d&&c.push(new Ze(d,"&nb=18"));for(d=T(a.document,this.F);null!=d&&!Wd(d,"a_");)d=d.parentElement;d&&$e(c,d,T(a.document,"adBlock"),b);this.$c.M&&this.$c.M(a,b)};var wg=function(a,b,c,d,e,f,g,h){this.P=a;this.T=b;this.R=c;this.Ic=d;this.zc=e;this.vb=f;this.oa=g;this.fa=h||ve};wg.prototype.j=function(){var a=Be({elements:[this.oa.j(),this.R.j(),this.Ic.j()]});return this.fa({Ka:Be({elements:[this.P.j(),this.vb.j()]}),La:this.zc? -a:this.T.j(),Ad:this.zc?this.T.j():a})};wg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a).concat(this.T.G(a)))};var vg=function(a,b,c,d,e,f){this.P=a;this.T=b;this.R=c;this.vb=d;this.oa=e;this.fa=f||we};vg.prototype.j=function(){var a=Be({elements:[this.P.j(),this.vb.j()]}),b=Be({elements:[this.oa.j(),this.R.j(),this.T.j()]});return this.fa({Ka:a,La:b})};vg.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a).concat(this.T.G(a)))};var ug=function(a,b,c,d){this.P=a;this.T=b; -this.R=c;this.oa=d};ug.prototype.j=function(){return Be({elements:[this.oa.j(),this.P.j(),this.T.j(),F(""),this.R.j()]})};ug.prototype.G=function(a){return this.P.G(a).concat(this.R.G(a).concat(this.T.G(a)))}};var zg=function(a,b,c,d,e){this.gg=a;this.tg=b;this.hh=c;this.Oj=d;this.Nj=e||""};zg.prototype.$j=function(a){var b=new $a("https:"+Ka()+"/afs/gen_204");n(b,"client",this.gg);n(b,"zx",this.tg());n(b,"aqid",this.Nj);n(b,"action",a);this.hh(ab(b))};var Ag={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400", -darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc", -ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a", -lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1", -moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57", -seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};var Fg=function(a){var b={};a=String(a);var c="#"==a.charAt(0)?a:"#"+a;if(Bg.test(c))return b.ud=Cg(c),b.type="hex",b;a:{var d=a.match(Dg);if(d){var c=Number(d[1]),e=Number(d[2]),d=Number(d[3]);if(0<=c&&255>=c&&0<=e&&255>=e&&0<=d&&255>=d){c=[c,e,d];break a}}c=[]}if(c.length)return b.ud=Eg(c[0],c[1],c[2]),b.type="rgb",b;if(Ag&&(c=Ag[a.toLowerCase()]))return b.ud=c,b.type="named",b;throw Error(a+" is not a valid color string");},Gg=/#(.)(.)(.)/,Cg=function(a){if(!Bg.test(a))throw Error("'"+a+"' is not a valid hex color"); -4==a.length&&(a=a.replace(Gg,"#$1$1$2$2$3$3"));return a.toLowerCase()},Eg=function(a,b,c){a=Number(a);b=Number(b);c=Number(c);if(isNaN(a)||0>a||255b||255c||255'+Q(a[d])+"";return b};var Ng=function(a){return F(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&a.B.img?(a.kc?'':"")+''+(a.kc?"":""):"")},Og=function(a){return F(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&!a.B.img?'':"")};var Qg=function(a){var b=F,c='
    ',d;if(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&a.B.img&&a.B.adIconWidth){d=I(""+K(Ng({B:a.B,kc:a.Jb,A:a.A,Kg:a.Bk})));var e=I(""+Pg(a)),f=a.B.adIconSpacingAfter?a.B.adIconSpacingAfter:12,g=a.f?"right":"left";d=""+('
    '+G(d)+''+G(e)+"
    ");d=F(d);d=G(d)}else d=Pg(a);c=c+d+"
    ";d=a.expansion;d=F(d&&""!=d?'
    '+G(d)+"
    ":"");return b(c+d+(a.ii?F('
    '+(a.Fh?'': -'
    ')+'
    '+(a.Fh?'': -'
    ')+"
    "):"")+"
    ")},Pg=function(a){return F(G(a.li)+G(a.tk)+(a.Fg&&a.V?K(yf({content:a.eg,f:a.f,$:a.Fg,V:a.V,sa:a.sa,ra:a.ra,Z:45,ga:12,rb:a.f})):'
    '+G(a.eg)+"
    "))};if(window.IS_GOOGLE_AFS_IFRAME_){var Rg=function(a,b,c,d){this.gc=a;this.F=R();this.lj=R();var e=df(a,c),e=new Ee([e,Gf(a)]);this.Ah=new af(e,a,c);var f=jf(a,c),g=Zf(a,c),e=gf(a,c),f=new Ee([f,g],Ce),e=c.me?new Ee([f,e]):new Ee([e,f]),e=new Ee([new af(e,a,c),kg(a,c)]);this.fg=uf(e,a,c);this.qg=new Ee(xg(a,b,c));this.gj=!c.xg;c.xg=!0;this.o=c;this.Wi=a.ctc||a.ctd;this.Mg="collapse"==c.ac;a.ctd&&(this.Di=a.ctd.iu,this.Fi=a.ctd.ih>a.ctd.iw?"height":"width",this.Ei=a.u,this.fj=a.ctd.ir);this.D=d||Qg}; -Rg.prototype.j=function(){var a={tk:this.Ah.j(),li:this.o.yb.j(),eg:this.fg.j(),expansion:this.qg.j(),Eb:this.F,f:this.o.f,Fg:this.Di,V:this.Fi,sa:this.Ei,ra:this.fj,B:this.gc,Jb:this.o.za||this.o.Jb,A:this.o.A,Vf:this.lj,ii:this.Mg,Fh:Ne()};return this.D(a)};Rg.prototype.M=function(a,b){this.Ah.M(a,b);this.fg.M(a,b);this.qg.M(a,b);var c=T(a.document,this.F),d=c.parentNode;this.Wi||Yd(c,"n_");var e=Zd(c,"a","e_");0'+(a.gd?'':"")+G(a.$d)+(a.gd?"":"")+"":"")},Vg=function(a){return""+(a.Bc?''+Q(a.Bc)+"":"")};var tg=function(a){var b=(a.jh?"":Og(a))+'
    '+(a.jh?"":Ng({B:a.B,kc:a.Jb,A:a.A,Kg:a.Vf}))+'
    ',c;c=a.kk?F('"):"";return b+c+Q(a.fi)+"
    "+F(a.B.adIconUrl&&"ad-left"==a.B.adIconLocation&&!a.B.img?'
    ': -"")};var Wg=function(a){return F(a.text?'
    '+G(a.text)+"
    ":"")};var Xg=function(a){var b="";if(a.Kd&&0',c=a.Kd,d=c.length,e=0;e'+K(pe(f))+" - "+(f.rh?'"+K(pe({text:f.source,f:f.f}))+"":K(pe({text:f.source,f:f.f})))+"":""),b=b+f;b+=""}else a.tb&&(b+=K(Wg({text:a.tb})));return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_){var Yg=function(a,b,c,d){this.F=R();this.Tj=a;this.Ce=b;this.I=c;this.D=d||Xg};Yg.prototype.j=function(){return this.D({uid:this.F,Kd:this.Tj,tb:this.Ce,f:this.I})};var Zg=function(a,b){var c=a.gt&&"ar"==a.gt.r&&a.gt.t?a.gt.t:null;return a.ar&&0':"");a=a.Gd;for(var c=a.length,d=0;d'+(0!=d?"· ":"")+''+G(a[d].t)+" ";b+=""}else a.tb&&(b+=K(Wg({text:a.tb})));return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_)var xg=function(a,b,c){return b.isHighendMobile?c.ac?[Nf(a,c),hg(a,c)]:b.reviewUnderSellerRating?[kg(a,c),hg(a,c),Zf(a,c),Zg(a,c),Uf(a,c),Nf(a,c),Qf(a,c),vf(a,c)]:[kg(a,c),Zg(a,c),hg(a,c),Zf(a,c),Uf(a,c),Nf(a,c),Qf(a,c),vf(a,c)]:b.reviewUnderSellerRating?[kg(a,c),Uf(a,c),Nf(a,c),hg(a,c),Zf(a,c),Zg(a,c),Qf(a,c)]:[kg(a,c),Zg(a,c),Uf(a,c),Nf(a,c),hg(a,c),Zf(a,c),Qf(a,c)]},ch=function(a,b,c,d,e){var f=Rb(d),g=Sb(d),h=f("type")||"ads",l=a.linkColorSchemeVisUrlLinkColor|| -"#008000",r=a.linkColorSchemeTitleLinkColor||"#0000CC";a.isHighendMobile&&a.mobileUiFormat?(l="#006621",r="#1a0dab"):$g(d,a)&&(r=l="#4272db");var l=f("colorDomainLink",l),r=f("colorTitleLink",r),u=e.adBadgeColor||l,y="0.85em",C=f("fontSizeDomainLink");C&&(y=.85*C+"px");var H;H=(H=d.width)&&"auto"!=H?H:"100%";var J={Qb:!1,Ud:null,ae:null};if(d.verticalSpacing){var L=d.verticalSpacing/2;J.Qb=!0;J.Ud=Math.floor(L);J.ae=Math.ceil(L)}var L=(L=f("colorAdSeparator"))?L:a.isHighendMobile||a.isTablet?"#E6E6E6": -null,ua=f("colorAdBackground"),ka=f("colorAdBorder"),la=f("colorText"),qa=f("colorBackground"),eb=f("colorBorder"),sb=f("colorAttribution"),fb=f("colorPlusOnes"),qk=f("colorKeyword"),rk=f("colorLocation"),sk=f("colorAnnotation"),Qa;Qa=[[0,0,0],[255,255,255]];if(l){var Sc;Sc=Cg(l);Qa=Kg([parseInt(Sc.substr(1,2),16),parseInt(Sc.substr(3,2),16),parseInt(Sc.substr(5,2),16)],Qa);Qa=Eg(Qa[0],Qa[1],Qa[2])}else Qa=null;a={C:a,ti:H,Ta:J,fc:L,Va:ua,S:ka,da:la,mb:r,Mb:l,Lb:qa,Aa:eb,Kb:sb,hd:fb,hg:qk,Wa:rk,N:sk, -yi:u,zi:Qa,fontFamily:f("fontFamily"),qe:f("fontFamilyAttribution"),sb:f("fontSizeTitle"),wa:f("fontSizeDescription"),rc:C,Pb:f("fontSizeAttribution"),qd:f("fontSizePlusOnes"),od:f("fontSizeLocation"),K:f("fontSizeAnnotation"),Ni:y,mk:f("titleBold"),sk:e.titleInlineBlock,Uj:f("rolloverLinkBold"),fh:f("rolloverLinkColor"),eh:f("rolloverLinkBackgroundColor"),Vj:f("rolloverLinkUnderline"),dh:f("rolloverAdBackgroundColor"),Pg:f("noTitleUnderline"),zh:ah(a),Xc:g("adBorderSelections","left"),cc:g("adBorderSelections", -"right"),Yc:g("adBorderSelections","top"),Wc:g("adBorderSelections","bottom"),pi:g("borderSelections","left"),ag:g("borderSelections","right"),ri:g("borderSelections","top"),oi:g("borderSelections","bottom"),za:Tb(d,a),Tb:f("lineHeightTitle"),aa:f("lineHeightDescription"),ab:f("lineHeightDomainLink"),Zf:f("attributionSpacingBelow"),hj:$g(d,a),De:e.hasButtonRight};f("adIconUrl")?(a.Ib=f("adIconWidth"),a.kb=f("adIconHeight"),a.Hb=f("adIconLocation"),a.dc=f("adIconSpacingAbove"),a.ec=f("adIconSpacingBefore"), -a.Uf=f("adIconSpacingAfter"),a.ad=f("adIconSpacingBelow"),a.Vd=!0):f("adIconPageUrl")&&(a.Ib=f("adIconPageWidth"),a.kb=f("adIconPageHeight"),a.Hb=f("adIconPageLocation"),a.dc=f("adIconPageSpacingAbove"),a.ec=f("adIconPageSpacingBefore"),a.Uf=f("adIconPageSpacingAfter"),a.Vd=!1);"relatedsearch"==h&&(a.type="relatedsearch",a.Nb=f("columnSpacing"),a.vd=f("horizontalFlow"),a.ub=f("horizontalAlignment"));var v,h=a.C.isRtl?"right":"left";d=a.C.isRtl?"left":"right";f="";e=""),b,c)},dh=function(a,b,c,d,e,f,g,h,l){a="

    "+(f?a?ze({text:a,ca:"rhHeader"})+"
    ":Ug({$d:c,gd:b,ca:"rhHeader"})+(e?Vg({Bc:e,ca:"rhHeader",id:"megaLabel"}):Vg({Bc:d,ca:"lhHeader",id:"adsLabel"})):a?ze({text:a,ca:"lhHeader"}):(e?Vg({Bc:e,ca:"lhHeader",id:"megaLabel"}):Vg({Bc:d,ca:"rhHeader", -id:"adsLabel"}))+Ug({$d:c,gd:b,ca:"lhHeader"}))+"

    ";bh(a,g,h)},bh=function(a,b,c){da(a)||(a=a.toString());ra()?b.populate(a):c.appendChild($c(Zc(),a))};if(window.IS_GOOGLE_AFS_IFRAME_)var eh=/^((https?):)?\/\/afs.googleusercontent.com\//,fh=/^\/\/afs.googleusercontent.com\//,gh=function(a,b,c,d,e,f,g){if(!d||eh.test(b))for(var h=0;ha.which:2>a.button)&&Fa(Eb(b))}))}},nh,oh,mh=!1,kh=function(a){mh=!1;a=a.touches;1==a.length&&(a=a[0],nh=a.clientX,oh=a.clientY,mh=!0)},lh=function(a){a=a.touches[0]; -if(10'+G(a.Og)+"":'
    ')},wh=function(a){return ud(".sb_ {padding-top: 10px; text-align: right; height: 29px; font-size: 12px; color: #666666; line-height: 29px; margin-bottom: 2px;}.tb_ {padding-right: 10px; height: 100%; display: inline-block;}.lb_ {display: inline-block; text-align: center; border-radius: 2px; background: white; border: 1px solid #f3f3f3; cursor: default; white-space: nowrap; text-decoration: none; color: #444444; font-size: 11px; font-weight: bold; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;}.ub_.lb_ {height: 100%; width: 34px; font-size: inherit; position: relative;}.lb_.s_ {border: 1px solid #dcdcdc; background: #f5f5f5; z-index: 10;}.lb_.s_:active {-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1); box-shadow: inset 0 1px 2px rgba(0,0,0,.1); background: #f8f8f8; color: #333;}.lb_.s_:hover {border: 1px solid #c6c6c6; z-index: 20;}.left.lb_ {border-top-right-radius: 0; border-bottom-right-radius: 0;}.right.lb_ {border-top-left-radius: 0; border-bottom-left-radius: 0; margin-left: -1px;}.vb_ {margin-top: -3px; vertical-align: middle; filter: alpha(opacity=33); opacity: .333;}.lb_.s_:hover > .vb_ {filter: alpha(opacity=90); opacity: .9;}.lb_.s_ > .vb_ {filter: alpha(opacity=55); opacity: .55;}table {font-size: "+ -P(a.fontSize)+"px; border-collapse: collapse; display: inline-table; white-space: normal; margin-right: 10px; vertical-align: top; border-top: 1px solid #ebebeb;}.qb_ {position: relative; overflow: hidden;}.rb_ {white-space: nowrap; position: relative; left: 0px;}.j_ {color: #777777;}")};if(window.IS_GOOGLE_AFS_IFRAME_){var xh=function(a,b,c,d,e){this.xa=a;this.Fj=b;this.ak=c;this.xj=d;this.nb=0;this.Hc=[];this.D=e;this.Yd=new ke(300);this.Qg=R();this.kf=R();this.Sg=R();this.hf=R();this.jf=R();this.Tg=R()};k=xh.prototype;k.j=function(){return this.D({zj:this.Qg,Yj:this.kf,Dj:this.Sg,Wj:this.hf,Xj:this.jf,Ej:this.Tg,Og:0==this.xa.length?this.xj:""})};k.ug=function(a,b){return a==b?this.ak.replace("%1$d",""+a).replace("%2$d",""+this.xa.length):this.Fj.replace("%1$d",""+a).replace("%2$d", -""+b).replace("%3$d",""+this.xa.length)};k.Cj=function(a,b){if(0!=this.xa.length){var c=T(a,this.Qg);b-=c.offsetHeight;var d=T(a,this.kf),c=c.offsetWidth,e=a.createElement("table");e.style.width=c+"px";d.appendChild(e);for(var f=0,g=0;gb){var h=e.removeChild(e.lastChild);0==f&&(b=e.offsetHeight);this.Hc.push(this.ug(f+1,g));e=a.createElement("table");e.style.width=c+"px";d.appendChild(e);e.appendChild(h);f=g}this.Hc.push(this.ug(f+ -1,this.xa.length));this.Eh(a)}};k.cg=function(){return 0
    ';c='
    '+G(a.title)+"
    "+(a.ha?'
    '+G(a.ha)+"
    ":"");c=I(c);b+=(a.xb?K(mf({Da:I('
    '),Ea:I(""+G(c)),Z:69,ga:10})):G(c))+'
    '+G(a.sh)+"
    "+G(a.ah)+"
    ";return F(b)},zh= -function(a){for(var b='
    ';c='
    '+G(a.title)+'
    '+G(a.ha)+'
    '+G(a.sh)+"
    "+G(a.ah)+"
    ";c=I(c);b+=(a.xb?K(mf({Da:I('
    '+ -(a.description?'
    '+G(a.description)+"
    ":"")),Ea:I(""+G(c)),Z:224,ga:20})):G(c))+"
    ";return F(b)};var Bh=function(a){var b;return F(''+Ah(a)+""+K(null==(b=a.ma)?"":b)+''+G(a.Wb)+"")},Ah=function(a){return F('
    '+K(Sd({href:a.Ja,content:a.Ed,A:a.Ma,qa:xd("hb_"),Za:a.Dd}))+"
     
    ")},Ch=function(a){var b;return F(''+Ah(a)+""+K(null==(b=a.ma)?"":b)+"
    "+G(a.Wb)+'
    '+ -G(a.ua)+'
    '+K(Sd({href:a.Ja,content:"Buy",A:a.Ma,qa:xd("s_ kb_ lb_")}))+"")},Dh=function(a){return ud(".i_ {border-bottom: 1px solid #ebebeb; vertical-align: middle;}.i_ td {padding: 7px 4px 7px 0;}.gb_ {width: 40%;}.i_ .fb_ {text-align: right; padding: 7px 0; font-weight: bold;}.hb_ {text-decoration: none; color: "+P(a.linkColor)+"; display: block; overflow: hidden; text-overflow: ellipsis;}.hb_:hover {text-decoration: underline;}")},Eh=function(a){var b;a=a|| -{};return F(''+Ah(a)+'
    '+G(a.Wb)+'
    '+K(null==(b=a.ua)?"":b)+'
    '+K(null==(b=a.ma)?"":b)+"
    ")},Fh=function(a){return ud(".i_ {border-bottom: 1px solid #ebebeb; vertical-align: middle;}.i_ td {height: 50px; padding-right: 4px;}.gb_ {width: 40%;}.i_ .jb_ {text-align: right; padding-right: 0;}.kb_.lb_ {padding: 0 8px; min-width: 54px; height: 27px; line-height: 27px;}.hb_ {text-decoration: none; color: "+ -P(a.linkColor)+"; display: block; overflow: hidden; text-overflow: ellipsis;}.hb_:hover {text-decoration: underline;}.ib_ {color: #7d7d7d; font-size: 80%;}")};if(window.IS_GOOGLE_AFS_IFRAME_){var Gh=function(a,b){this.bg=a;this.maxHeight=b},Hh=new Gh(10,350),Ih=new Gh(20,700),Jh=function(a,b,c,d,e,f,g,h,l,r,u,y,C){this.Ee=a;this.P=b;this.T=c;this.pe=d;this.pj=e;this.dk=f;this.wj=g+" \u25bc";this.mj=h+" \u25b2";this.re=l;this.We=r;this.gk=y;this.D=C;this.Ab=u;this.Ab.height=Math.min(this.Ab.height,this.re.maxHeight);this.Ab.width=Math.min(this.Ab.width,1E3);this.yh=R();this.kg=R();this.Sf=R();this.Qf=R();this.yg=R()};Jh.prototype.j=function(){return this.D({xb:this.Ee, -title:this.P,description:this.T,ha:this.pe,sh:this.dk,ah:this.We.j(),si:this.Ab.width,uh:this.gk,Oc:this.yh,Hi:this.kg,Rf:this.Sf,ei:this.Qf,Xi:this.yg})};Jh.prototype.Vi=function(a){return T(a,"adBlock").offsetWidth};Jh.prototype.Mj=function(a){this.uk(a);var b=T(a,this.Sf).offsetHeight,b=b+2*this.re.bg;this.We.Cj(a,this.Ab.height-b);this.We.Zd(a)};Jh.prototype.uk=function(a){var b=T(a,this.yh);ng(b,3);if(b=a.getElementById(this.kg)){var c=Je(T(a,this.Qf)),c=c+2*this.re.bg;Je(T(a,this.yg));og(b, -this.Ab.height-c-50,this.wj,this.mj,this.pj)}};var Kh=function(a,b,c,d){var e,f,g,h=[],l=null,r=a.lc||"#0651cf";switch(a.id){case 1:case "SMALL_FORMAT":e=Bh;f=vh;g=yh;h.push(Dh({linkColor:r}));h.push(ud(wh({fontSize:12})));h.push(ud("#adBlock {font-family: arial; font-size: 0; width: 300px; background: white;}.h_ {font-size: 18px; font-weight: bold; color: #222222; word-wrap: break-word;}.xa_ {padding: 9px; border: 1px solid #e0e0e0;}.ab_ {max-width: 67px; max-height: 67px; vertical-align: middle;}.za_ {width: 67px; height: 67px; border: 1px solid #eeeeee; text-align: center; line-height: 67px;}.bb_ {padding: 10px 0; font-size: 12px; font-weight: bold; color: #222222;}.cb_ {color: #787878; font-size: 13px;}")); -d&&(e=Eh,h.push(ud(".i_ .nb_ {padding: 7px 0; width: 46px;}.i_ .fb_ {text-align: left; padding-right: 4px;}.ib_ {color: #7d7d7d; font-size: 90%; font-weight: normal;}")));l=Hh;break;case 3:case "WIDE_FORMAT":e=Ch;f=vh;g=zh;h.push(Fh({linkColor:r}));h.push(ud(wh({fontSize:14})));h.push(ud("#adBlock {font-family: arial; font-size: 0; background: white;}.xa_ {padding: 19px; border: 1px solid #e0e0e0;}.ab_ {max-width: 222px; max-height: 222px; vertical-align: middle;}.za_ {width: 222px; height: 222px; border: 1px solid #eeeeee; text-align: center; line-height: 222px; margin-bottom: 20px;}.eb_ {font-size: 12px; line-height: 18px; color: #222222; word-wrap: break-word;}.db_ {padding-bottom: 20px;}.h_ {font-size: 18px; font-weight: bold; color: #222222; word-wrap: break-word;}.cb_ {color: #7d7d7d; font-size: 13px;}.bb_ {font-size: 14px; font-weight: bold; color: #222222; padding-bottom: 8px;}")); -l=Ih;break;default:return Na.log({message:"Jackpot block json failed to provide a known format."},"crjc"),null}var u=[];a.offers&&(u=ic(a.offers,function(a){return new uh(a.u,a.m,a.pr,a.s,d&&a.ppu?a.ppu:"",c,e)}));f=new xh(u,b.pt,b.sipt,b.nl,f);return new Jh(a.pd.i,a.pd.t,a.pd.d,d&&a.pd.er?a.pd.er:"",r,b.sl,b.m,b.l,l,f,new Wc(a.mw,a.mh),h,g)}};var Lh=function(a){var b='
    ',c='
    '+K(Sd({href:a.Ja,content:a.title,A:a.Ma,qa:xd("oc_"),Za:a.Oc}))+'
    ',c=c+('
    '+G(a.Wb)+"
    "+(a.Id?(a.ma?'
    '+G(a.ma)+"
    ": -"")+(a.ha?'
    '+G(a.ha)+"
    ":"")+(a.ua?'
    '+G(a.ua)+"
    ":""):"")+'
    '+K(Sd({href:a.Ja,content:a.Ed,A:a.Ma,qa:xd("sc_"),Za:a.Dd}))+"
    "),b=b+K(mf({Da:I("
    "+K(Sd({href:a.Ja,content:I('
    '+G(a.$f)+"
    "),A:a.Ma,qa:xd("lc_"),Za:a.Dg}))+"
    "),Ea:I(c),Z:a.Fe,ga:a.xc}));return F(b+"
    ")},Mh=function(a){return ud(".hc_ {background: white; margin-right: "+ -P(a.yc)+"px; margin-bottom: "+P(a.yc)+"px;"+(a.og?P(Rd({value:yd("1px 2px 1px rgba(0, 0, 0, 0.1)")}))+"border: 1px solid #E0E0E0; box-sizing: border-box; border-radius: 3px;":P(Rd({value:yd("0 2px 1px rgba(0, 0, 0, 0.1), 0 0 1px rgba(0, 0, 0, 0.1)")}))+"border-radius: 2px;")+"width: "+P(a.hi)+"px; height: "+P(a.gi)+"px;"+P(Qd())+"}.ic_ {"+(a.og?"padding: "+P(a.xc-1)+"px;":"padding: "+P(a.xc)+"px;")+"position: relative;}.lc_ {text-decoration: none;}.jc_ {width: "+P(a.Fe)+"px; height: "+P(a.bj)+"px; background-repeat: no-repeat; background-position: center; background-size: contain; cursor: pointer; position: relative;}.mc_ {position: relative; height: "+ -P(a.Bi)+"px;}.oc_ {color: "+P(a.nk)+"; font-size: "+P(a.qk)+"px; text-decoration: none;}.nc_ {width: "+P(a.jd)+"px; word-wrap: break-word;}.mb_ {font-size: "+P(a.Ij)+"px; font-weight: bold; color: "+P(a.Xg)+";}.pc_ {color: "+P(a.Xg)+"; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: "+P(a.jd)+"px;}.sc_ {color: "+P(a.Lg)+"; text-decoration: none;}.rc_ {font-size: "+P(a.tj)+"px; padding-bottom: 2px; color: "+P(a.Lg)+"; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: "+ -P(a.jd)+"px;}.bb_ {font-size: 13px;"+P(Qd())+"text-decoration: none; background-color: #555555; position: absolute; bottom: 1px; left: 1px; padding: 0 3px; color: white; border-radius: 2px;}.qc_ {font-size: 12px; color: #777777; padding-bottom: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: "+P(a.jd)+"px;}")};var Nh=function(a){var b='
    '+K(Sd({href:a.Ja,content:I('
    '+G(a.$f)+"
    "),A:a.Ma,qa:xd("lc_"),Za:a.Dg}))+'
    '+K(Sd({href:a.Ja,content:a.title,A:a.Ma,qa:xd("oc_"),Za:a.Oc}))+'
    ',b=b+('
    '+G(a.Wb)+"
    "+(a.Id?(a.ma?'
    '+G(a.ma)+"
    ":"")+(a.ha?'
    '+G(a.ha)+"
    ":"")+(a.ua?'
    '+G(a.ua)+"
    ":""):"")+'
    '+K(Sd({href:a.Ja,content:a.Ed,A:a.Ma,qa:xd("sc_"),Za:a.Dd}))+"
    ");return F(b)},Oh=function(a){return ud(P(Mh(a))+".jc_ {margin-bottom: "+ -P(a.xc)+"px;}")};if(window.IS_GOOGLE_AFS_IFRAME_){var Ph=function(a,b,c,d,e,f,g,h,l,r,u,y,C){this.mi=c;this.Me=d;this.P=a.t;this.Qe=a.m;this.cf=a.pr;this.Ee=a.i;this.Nd=a.s;this.Qd=a.ppu;this.pe=a.er;this.Pj=u;this.Yi=b.h;this.yk=b.w;this.Ie=e;this.Hg=f;this.cj=b.ih;this.Eg=b.iw;this.jg=g;this.Ci=h;this.rk=b.ts;this.uj=b.ms;this.Jj=b.ps;this.pk=b.tc;this.sj=b.mc;this.Hj=b.pc;this.Xe=l;this.Ki=r;this.fk=y;this.D=C;this.Ag=R();this.Cg=R();this.vf=R();this.Cd=R();this.Wg=R()};k=Ph.prototype;k.j=function(){return this.D({Ug:this.Ag, -$f:this.mi,Ja:this.Me,xb:this.Ee,Dg:this.Cg,title:this.P,Oc:this.vf,Wb:this.cf,Ed:this.Qe,Dd:this.Cd,Vg:this.Wg,Fe:this.Eg,xc:this.Hg,Yg:this.Ai(),Ma:this.Xe,ma:this.Nd,ua:this.Qd,ha:this.pe,Id:this.Pj})};k.Ui=function(){return this.fk({hi:this.yk,gi:this.Yi,yc:this.Ie,xc:this.Hg,bj:this.cj,Fe:this.Eg,Bi:this.jg,jd:this.Ci,qk:this.rk,tj:this.uj,Ij:this.Jj,nk:this.pk,Lg:this.sj,Xg:this.Hj,og:this.Ki})};k.Ai=function(){return hc([this.Qd,this.Nd],ca).join("\n")};k.Bh=function(a){var b=a.document.getElementById(this.Wg); -b&&mg(a.document.getElementById(this.vf),this.jg-(b.offsetHeight+4));this.ic&&this.ic.Bh(a)};k.Xf=function(a){this.ic&&this.ic.Xf(a)};k.vg=function(a){return T(a,this.Ag)};k.wg=function(a){var b=this.ic?this.ic.wg(a):[];return[new Ze(T(a,this.vf),"&nb=0"),new Ze(T(a,this.Cd),"&nb=1"),new Ze(T(a,this.Cg),"&nb=9")].concat(b)};var Qh=function(a,b,c,d,e,f,g){var h=db(a.u),l=new Wc(b.w,b.h),r=new Wc(b.iw,b.ih),u=Math.floor((l.height-r.height)/2);return new Ph(a,b,c,h,d,u,r.height,l.width-(3*u+r.width), -e,f,g,Mh,Lh)},Rh=function(a,b,c,d,e,f,g){var h=db(a.u),l=new Wc(b.w,b.h),r=new Wc(b.iw,b.ih),u=Math.floor((l.width-r.width)/2);return new Ph(a,b,c,h,d,u,l.height-(3*u+r.height),r.width,e,f,g,Oh,Nh)}};var Sh=function(a){var b='
    ';a=a.Sj;for(var c=a.length,d=0;d
    ")};if(window.IS_GOOGLE_AFS_IFRAME_){var Th=function(a,b,c,d,e,f,g){this.Vb=a;this.kh=b;this.Ie=c;this.ni=d;this.Mi=e;this.ej=f;this.D=g};Th.prototype.j=function(){for(var a=[],b=0;b
    ';for(var d=a.ads,e=d.length,f=0;f"}return b+"
    '+(1==a.ads.length?'  ': -''+K(++c)+". ")+' '+Q(g.cleanTitle)+' opens new browser window'+ -Q(g.l1)+" "+Q(g.l2)+' '+Q(g.v)+"
    "}, -Vh=function(a){for(var b='
    ',c=a.ads,d=c.length,e=0;e");return b+="
      -  
    '+ -Q(f.l1)+" "+Q(f.l2)+'
    "};var Wh=function(a){var b,c=0;b='';for(var d=a.ads,e=d.length,f=0;f"}b+="
    '+K(++c)+'.  '+G(g.t)+'
    '+ -G(g.l1)+" "+G(g.l2)+' '+G(g.v)+"
    ";return F(b)},Xh=function(a){for(var b='',c=a.ads,d=c.length,e=0;e");b+="
    '+G(f.l1)+" "+G(f.l2)+'
    ";return F(b)},Yh=function(a){var b;b='';for(var c=a.ads,d=c.length,e=0;e"}b+="
    '+ -G(f.l1)+" "+G(f.l2)+' '+G(f.v)+"
    ";return F(b)},Zh=function(a){for(var b='',c=a.ads,d=c.length,e=0;e");b+="
      -  
    '+G(f.l1)+" "+G(f.l2)+'
    ";return F(b)},$h=function(a){var b,c=0;b='";return F(b)};if(window.IS_GOOGLE_AFS_IFRAME_)var ai=function(a,b){b=b||130;var c=b+Math.max(1.5*b,160),d=a.document.getElementById("wideSfbl"),e=a.document.getElementById("narrowSfbl");d&&e&&(Ie(a.document.body,!1)Ie(f,!1)){for(g=0;h=c[g];g++)h.style.display="none";for(g=0;h=d[g];g++)h.style.display="block"}else{for(g=0;h=c[g];g++)h.style.display="block";for(g=0;h=d[g];g++)h.style.display="none"}};var bi=function(a){return'"+(a.B.pn?Hf({Hd:a.B.pn,f:a.C.isRtl,Ng:!1})+"
    ":"")+(a.Gg?'
    '+Wf({Mc:a.B.sr})+"
    ":"")},ci=function(a){return""+(a.C.disableSellerFirstFavicon?bi({B:a.B,C:a.C,A:a.A,Gg:a.wd}):nf({Da:'',Ea:""+ -bi({B:a.B,C:a.C,A:a.A,Gg:a.wd}),Z:18,ga:3,rb:a.C.isRtl}))+(a.wd?"":'
    '+Wf({Mc:a.B.sr})+"
    ")},di=function(a){var b='
    ',c=a.B.l1r,d=a.B.l2r,e=a.C.isRtl,f="";if(d&&d.c)var g=c.rtl||d.rtl,f=f+Jf({Ia:g,f:e,text:Kf({text:c,f:g})+" "+Kf({text:d,f:g})});else f+=Kf({text:c,f:e});b=b+f+"
    "+ig({be:a.B.cos, -f:a.C.isRtl})+Xg({Kd:a.B.ar,tb:a.B.gt&&"ar"==a.B.gt.r?a.B.gt.t:null,f:a.C.isRtl})+Rf({$e:a.B.plus_ones,A:a.A})+Lf({Ne:a.B.location,f:a.C.isRtl})+Of({Gd:a.B.oh,tb:a.B.gt&&"oh"==a.B.gt.r?a.B.gt.t:null,Hh:a.C.offerHighlightWithIcon});a=a.B.sls&&0g?e?(e.style.display="none",c?c.style.display="":e.parentNode.style.display="none"):(d.style.display="none",c||(d.parentNode.style.display="none")):e?(e.style.display="",e.parentNode.style.display="",c&&(c.style.display="none")):(d.style.display="",d.parentNode.style.display="")}},Fi=m(Fi,"aH"),Oi=function(a){var b="master-"+Ai(a);a=Di(b,a);b="";if(a)try{b= -a.document.documentElement.lang}catch(c){}return b},Oi=m(Oi,"gMIHL"),Pi=function(a,b){try{if(a&&a.document.getElementsByTagName("html")){var c;(c=a.document.getElementsByTagName("html")[0])&&!c.lang&&(c.lang=b)}}catch(d){}},Pi=m(Pi,"sSIHL"),Ri=function(a,b,c){a=a.document.getElementsByTagName("table");for(var d=a.length,e=0;eMe(a).height},Si=m(Si,"iW"),Ti=function(a){for(;0e.length?e.push(h):"sl-right"==h.className&&3>f.length&&f.push(h);for(d=[];0e){c=Le(d)-15;125>c&&(c=125);for(var f=d.getElementsByTagName("div"),g=0,h=0,l;l=f[h];h++)Me(l).width<=c&&3>g?g++:l.style.display="none";g>e?(Wi(d,"visibility","visible"),a.style.display="none"):d.style.display="none"}else d.style.display="none"}},Vi=m(Vi,"uS"),Ui=function(a,b){var c=b.shift();if(c){for(;0< -b.length;)Ti(b.pop());c[1]&&(Si(c)||(Yd(c[0].firstChild,"l"),Yd(c[1].firstChild,"r"),c[0].innerHTML+=" - "+c[1].innerHTML),c[1].parentNode.removeChild(c[1]),c.pop());a.className="sl-table-ol";c[0].className="sl-left-ol";Si(c[0])&&Ti(c)}},Ui=m(Ui,"hSLS"),Xi=function(a,b){return Le(a)b||"number"==typeof c&&16>c)&&(a=a.document.getElementById("adBlock"))&&""!=a.innerHTML?!0:!1},lj=m(lj,"iCSI"),Ji=function(a,b){for(var c=!1,d=[],e=0;erb)for(a=0;a=f)a=g;else{a=[];for(var h= -0,l=0;l';e=g.length;for(b=0;b'+K(pe({text:a.t,f:f})),d+='
    ';c=F(d+"")}else{d=""+('");e=g.length;for(b=0;bf||2<=f&&b":"")+'";c=d+"
    ",l=g.length%f||f,d+='
    =g.length-l?" lr":"")+'">'+Og({B:a,kc:!1,qj:"_top"})+ -'
    '+Ng({B:a,kc:!1,qj:"_top"})+'
    "}return c},uj=m(uj,"cRSN"),gj=function(a,b,c,d,e,f,g,h,l,r,u){if(0>=a.length)return null;var y=Ub(e),C="";c=null;if(u.customAdIcons){var H="https"==window.location.protocol;null!=e.adIconUrl&&0
    '+nf({Da:""+ci(vd(a,{B:g,wd:!0})),Ea:""+di(vd(a,{B:g})),Z:null==(qa=a.Zj)?130:qa,ga:10,rb:a.C.isRtl})+"
    ";y+='";C=y+""}else{c=[];qa=g.ac?Rg:yg;for(y=0;y