Merge ~ahasenack/ubuntu/+source/apache2:cosmic-merge-apache-2.4.34-1 into ubuntu/+source/apache2:debian/sid

Proposed by Andreas Hasenack
Status: Merged
Approved by: Robie Basak
Approved revision: f8172108ee63c9c1806453fe22352f81156c5808
Merge reported by: Andreas Hasenack
Merged at revision: f8172108ee63c9c1806453fe22352f81156c5808
Proposed branch: ~ahasenack/ubuntu/+source/apache2:cosmic-merge-apache-2.4.34-1
Merge into: ubuntu/+source/apache2:debian/sid
Diff against target: 443421 lines (+434287/-33)
1422 files modified
debian/apache2-bin.install (+1/-0)
debian/apache2-utils.ufw.profile (+14/-0)
debian/apache2.dirs (+1/-0)
debian/apache2.install (+1/-0)
debian/apache2.postrm (+1/-0)
debian/apache2.py (+48/-0)
debian/changelog (+1375/-0)
debian/control (+7/-19)
debian/index.html (+19/-12)
debian/patches/086_svn_cross_compiles (+118/-0)
debian/patches/series (+3/-0)
debian/rules (+2/-1)
debian/source/include-binaries (+1/-0)
debian/tests/check-http2 (+41/-0)
debian/tests/control (+4/-0)
dev/null (+0/-1)
docs/manual/style/latex/atbeginend.sty (+80/-0)
docs/manual/style/manualpage.dtd (+29/-0)
docs/manual/style/modulesynopsis.dtd (+92/-0)
docs/manual/style/scripts/MINIFY (+5/-0)
docs/manual/style/scripts/prettify.js (+1622/-0)
docs/manual/style/scripts/prettify.min.js (+124/-0)
docs/manual/style/sitemap.dtd (+42/-0)
docs/manual/style/version.ent (+24/-0)
docs/manual/suexec.html (+21/-0)
docs/manual/suexec.html.en (+643/-0)
docs/manual/suexec.html.fr (+689/-0)
docs/manual/suexec.html.ja.utf8 (+643/-0)
docs/manual/suexec.html.ko.euc-kr (+564/-0)
docs/manual/suexec.html.tr.utf8 (+583/-0)
docs/manual/upgrading.html (+9/-0)
docs/manual/upgrading.html.en (+537/-0)
docs/manual/upgrading.html.fr (+598/-0)
docs/manual/urlmapping.html (+21/-0)
docs/manual/urlmapping.html.en (+379/-0)
docs/manual/urlmapping.html.fr (+402/-0)
docs/manual/urlmapping.html.ja.utf8 (+318/-0)
docs/manual/urlmapping.html.ko.euc-kr (+277/-0)
docs/manual/urlmapping.html.tr.utf8 (+365/-0)
docs/manual/vhosts/details.html (+17/-0)
docs/manual/vhosts/details.html.en (+348/-0)
docs/manual/vhosts/details.html.fr (+369/-0)
docs/manual/vhosts/details.html.ko.euc-kr (+412/-0)
docs/manual/vhosts/details.html.tr.utf8 (+319/-0)
docs/manual/vhosts/examples.html (+21/-0)
docs/manual/vhosts/examples.html.en (+566/-0)
docs/manual/vhosts/examples.html.fr (+586/-0)
docs/manual/vhosts/examples.html.ja.utf8 (+680/-0)
docs/manual/vhosts/examples.html.ko.euc-kr (+657/-0)
docs/manual/vhosts/examples.html.tr.utf8 (+562/-0)
docs/manual/vhosts/fd-limits.html (+21/-0)
docs/manual/vhosts/fd-limits.html.en (+155/-0)
docs/manual/vhosts/fd-limits.html.fr (+167/-0)
docs/manual/vhosts/fd-limits.html.ja.utf8 (+157/-0)
docs/manual/vhosts/fd-limits.html.ko.euc-kr (+152/-0)
docs/manual/vhosts/fd-limits.html.tr.utf8 (+150/-0)
docs/manual/vhosts/index.html (+29/-0)
docs/manual/vhosts/index.html.de (+124/-0)
docs/manual/vhosts/index.html.en (+126/-0)
docs/manual/vhosts/index.html.fr (+127/-0)
docs/manual/vhosts/index.html.ja.utf8 (+120/-0)
docs/manual/vhosts/index.html.ko.euc-kr (+119/-0)
docs/manual/vhosts/index.html.tr.utf8 (+123/-0)
docs/manual/vhosts/index.html.zh-cn.utf8 (+105/-0)
docs/manual/vhosts/ip-based.html (+21/-0)
docs/manual/vhosts/ip-based.html.en (+210/-0)
docs/manual/vhosts/ip-based.html.fr (+213/-0)
docs/manual/vhosts/ip-based.html.ja.utf8 (+190/-0)
docs/manual/vhosts/ip-based.html.ko.euc-kr (+180/-0)
docs/manual/vhosts/ip-based.html.tr.utf8 (+211/-0)
docs/manual/vhosts/mass.html (+17/-0)
docs/manual/vhosts/mass.html.en (+348/-0)
docs/manual/vhosts/mass.html.fr (+363/-0)
docs/manual/vhosts/mass.html.ko.euc-kr (+453/-0)
docs/manual/vhosts/mass.html.tr.utf8 (+334/-0)
docs/manual/vhosts/name-based.html (+25/-0)
docs/manual/vhosts/name-based.html.de (+299/-0)
docs/manual/vhosts/name-based.html.en (+224/-0)
docs/manual/vhosts/name-based.html.fr (+267/-0)
docs/manual/vhosts/name-based.html.ja.utf8 (+303/-0)
docs/manual/vhosts/name-based.html.ko.euc-kr (+266/-0)
docs/manual/vhosts/name-based.html.tr.utf8 (+238/-0)
docs/server-status/README.md (+40/-0)
docs/server-status/server-status.lua (+1901/-0)
emacs-style (+12/-0)
httpd.dep (+68/-0)
httpd.dsp (+111/-0)
httpd.mak (+344/-0)
httpd.spec (+493/-0)
include/.indent.pro (+54/-0)
include/ap_compat.h (+30/-0)
include/ap_config.h (+206/-0)
include/ap_config_auto.h.in (+319/-0)
include/ap_config_layout.h.in (+64/-0)
include/ap_expr.h (+353/-0)
include/ap_hooks.h (+162/-0)
include/ap_listen.h (+163/-0)
include/ap_mmn.h (+557/-0)
include/ap_mpm.h (+235/-0)
include/ap_provider.h (+100/-0)
include/ap_regex.h (+275/-0)
include/ap_regkey.h (+219/-0)
include/ap_release.h (+83/-0)
include/ap_slotmem.h (+199/-0)
include/ap_socache.h (+230/-0)
include/apache_noprobes.h (+344/-0)
include/heartbeat.h (+60/-0)
include/http_config.h (+1416/-0)
include/http_connection.h (+168/-0)
include/http_core.h (+1049/-0)
include/http_log.h (+836/-0)
include/http_main.h (+88/-0)
include/http_protocol.h (+1023/-0)
include/http_request.h (+630/-0)
include/http_vhost.h (+119/-0)
include/httpd.h (+2405/-0)
include/mod_auth.h (+141/-0)
include/mod_core.h (+103/-0)
include/mod_request.h (+64/-0)
include/mpm_common.h (+470/-0)
include/scoreboard.h (+246/-0)
include/util_cfgtree.h (+98/-0)
include/util_charset.h (+72/-0)
include/util_cookies.h (+146/-0)
include/util_ebcdic.h (+92/-0)
include/util_fcgi.h (+280/-0)
include/util_filter.h (+639/-0)
include/util_ldap.h (+398/-0)
include/util_md5.h (+72/-0)
include/util_mutex.h (+223/-0)
include/util_script.h (+233/-0)
include/util_time.h (+117/-0)
include/util_varbuf.h (+197/-0)
include/util_xml.h (+51/-0)
libhttpd.dep (+2421/-0)
libhttpd.dsp (+846/-0)
libhttpd.mak (+1366/-0)
modules/Makefile.in (+6/-0)
modules/NWGNUmakefile (+121/-0)
modules/README (+67/-0)
modules/aaa/.indent.pro (+54/-0)
modules/aaa/Makefile.in (+3/-0)
modules/aaa/NWGNUaccesscompat (+248/-0)
modules/aaa/NWGNUallowmethods (+248/-0)
modules/aaa/NWGNUauthbasc (+248/-0)
modules/aaa/NWGNUauthdigt (+248/-0)
modules/aaa/NWGNUauthform (+250/-0)
modules/aaa/NWGNUauthnano (+248/-0)
modules/aaa/NWGNUauthndbd (+249/-0)
modules/aaa/NWGNUauthndbm (+248/-0)
modules/aaa/NWGNUauthnfil (+248/-0)
modules/aaa/NWGNUauthnsocache (+248/-0)
modules/aaa/NWGNUauthnzldap (+264/-0)
modules/aaa/NWGNUauthzdbd (+249/-0)
modules/aaa/NWGNUauthzdbm (+248/-0)
modules/aaa/NWGNUauthzgrp (+247/-0)
modules/aaa/NWGNUauthzusr (+247/-0)
modules/aaa/NWGNUmakefile (+270/-0)
modules/aaa/config.m4 (+84/-0)
modules/aaa/mod_access_compat.c (+377/-0)
modules/aaa/mod_access_compat.dep (+59/-0)
modules/aaa/mod_access_compat.dsp (+111/-0)
modules/aaa/mod_access_compat.mak (+353/-0)
modules/aaa/mod_allowmethods.c (+158/-0)
modules/aaa/mod_allowmethods.dep (+56/-0)
modules/aaa/mod_allowmethods.dsp (+111/-0)
modules/aaa/mod_allowmethods.mak (+353/-0)
modules/aaa/mod_auth_basic.c (+512/-0)
modules/aaa/mod_auth_basic.dep (+63/-0)
modules/aaa/mod_auth_basic.dsp (+111/-0)
modules/aaa/mod_auth_basic.mak (+353/-0)
modules/aaa/mod_auth_digest.c (+1976/-0)
modules/aaa/mod_auth_digest.dep (+68/-0)
modules/aaa/mod_auth_digest.dsp (+111/-0)
modules/aaa/mod_auth_digest.mak (+353/-0)
modules/aaa/mod_auth_form.c (+1333/-0)
modules/aaa/mod_auth_form.dep (+66/-0)
modules/aaa/mod_auth_form.dsp (+111/-0)
modules/aaa/mod_auth_form.mak (+353/-0)
modules/aaa/mod_authn_anon.c (+215/-0)
modules/aaa/mod_authn_anon.dep (+58/-0)
modules/aaa/mod_authn_anon.dsp (+111/-0)
modules/aaa/mod_authn_anon.mak (+381/-0)
modules/aaa/mod_authn_core.c (+386/-0)
modules/aaa/mod_authn_core.dep (+58/-0)
modules/aaa/mod_authn_core.dsp (+111/-0)
modules/aaa/mod_authn_core.mak (+381/-0)
modules/aaa/mod_authn_dbd.c (+309/-0)
modules/aaa/mod_authn_dbd.dep (+56/-0)
modules/aaa/mod_authn_dbd.dsp (+115/-0)
modules/aaa/mod_authn_dbd.mak (+409/-0)
modules/aaa/mod_authn_dbm.c (+208/-0)
modules/aaa/mod_authn_dbm.dep (+61/-0)
modules/aaa/mod_authn_dbm.dsp (+111/-0)
modules/aaa/mod_authn_dbm.mak (+381/-0)
modules/aaa/mod_authn_file.c (+194/-0)
modules/aaa/mod_authn_file.dep (+60/-0)
modules/aaa/mod_authn_file.dsp (+111/-0)
modules/aaa/mod_authn_file.mak (+381/-0)
modules/aaa/mod_authn_socache.c (+475/-0)
modules/aaa/mod_authn_socache.dep (+62/-0)
modules/aaa/mod_authn_socache.dsp (+111/-0)
modules/aaa/mod_authn_socache.mak (+353/-0)
modules/aaa/mod_authnz_fcgi.c (+1363/-0)
modules/aaa/mod_authnz_fcgi.dep (+61/-0)
modules/aaa/mod_authnz_fcgi.dsp (+119/-0)
modules/aaa/mod_authnz_fcgi.mak (+353/-0)
modules/aaa/mod_authnz_ldap.c (+1962/-0)
modules/aaa/mod_authnz_ldap.dep (+70/-0)
modules/aaa/mod_authnz_ldap.dsp (+111/-0)
modules/aaa/mod_authnz_ldap.mak (+381/-0)
modules/aaa/mod_authz_core.c (+1175/-0)
modules/aaa/mod_authz_core.dep (+60/-0)
modules/aaa/mod_authz_core.dsp (+111/-0)
modules/aaa/mod_authz_core.mak (+381/-0)
modules/aaa/mod_authz_dbd.c (+409/-0)
modules/aaa/mod_authz_dbd.dep (+61/-0)
modules/aaa/mod_authz_dbd.dsp (+119/-0)
modules/aaa/mod_authz_dbd.h (+44/-0)
modules/aaa/mod_authz_dbd.mak (+409/-0)
modules/aaa/mod_authz_dbm.c (+336/-0)
modules/aaa/mod_authz_dbm.dep (+62/-0)
modules/aaa/mod_authz_dbm.dsp (+111/-0)
modules/aaa/mod_authz_dbm.mak (+381/-0)
modules/aaa/mod_authz_groupfile.c (+331/-0)
modules/aaa/mod_authz_groupfile.dep (+61/-0)
modules/aaa/mod_authz_groupfile.dsp (+111/-0)
modules/aaa/mod_authz_groupfile.mak (+381/-0)
modules/aaa/mod_authz_host.c (+410/-0)
modules/aaa/mod_authz_host.dep (+60/-0)
modules/aaa/mod_authz_host.dsp (+111/-0)
modules/aaa/mod_authz_host.mak (+381/-0)
modules/aaa/mod_authz_owner.c (+189/-0)
modules/aaa/mod_authz_owner.dep (+59/-0)
modules/aaa/mod_authz_owner.dsp (+111/-0)
modules/aaa/mod_authz_owner.h (+27/-0)
modules/aaa/mod_authz_owner.mak (+381/-0)
modules/aaa/mod_authz_user.c (+146/-0)
modules/aaa/mod_authz_user.dep (+58/-0)
modules/aaa/mod_authz_user.dsp (+111/-0)
modules/aaa/mod_authz_user.mak (+381/-0)
modules/arch/netware/libprews.c (+79/-0)
modules/arch/netware/mod_netware.c (+206/-0)
modules/arch/netware/mod_nw_ssl.c (+1285/-0)
modules/arch/unix/Makefile.in (+3/-0)
modules/arch/unix/config5.m4 (+24/-0)
modules/arch/unix/mod_privileges.c (+588/-0)
modules/arch/unix/mod_unixd.c (+433/-0)
modules/arch/unix/mod_unixd.h (+41/-0)
modules/arch/win32/Makefile.in (+3/-0)
modules/arch/win32/config.m4 (+9/-0)
modules/arch/win32/mod_isapi.c (+1727/-0)
modules/arch/win32/mod_isapi.dep (+61/-0)
modules/arch/win32/mod_isapi.dsp (+115/-0)
modules/arch/win32/mod_isapi.h (+271/-0)
modules/arch/win32/mod_isapi.mak (+353/-0)
modules/arch/win32/mod_win32.c (+563/-0)
modules/cache/.indent.pro (+54/-0)
modules/cache/Makefile.in (+3/-0)
modules/cache/NWGNUcach_dsk (+262/-0)
modules/cache/NWGNUcach_socache (+263/-0)
modules/cache/NWGNUmakefile (+250/-0)
modules/cache/NWGNUmod_cach (+265/-0)
modules/cache/NWGNUsocachdbm (+261/-0)
modules/cache/NWGNUsocachmem (+261/-0)
modules/cache/NWGNUsocachshmcb (+261/-0)
modules/cache/cache_common.h (+56/-0)
modules/cache/cache_disk_common.h (+68/-0)
modules/cache/cache_socache_common.h (+57/-0)
modules/cache/cache_storage.c (+791/-0)
modules/cache/cache_storage.h (+76/-0)
modules/cache/cache_util.c (+1344/-0)
modules/cache/cache_util.h (+341/-0)
modules/cache/config.m4 (+142/-0)
modules/cache/mod_cache.c (+2720/-0)
modules/cache/mod_cache.dep (+194/-0)
modules/cache/mod_cache.dsp (+131/-0)
modules/cache/mod_cache.h (+192/-0)
modules/cache/mod_cache.mak (+370/-0)
modules/cache/mod_cache_disk.c (+1584/-0)
modules/cache/mod_cache_disk.dep (+59/-0)
modules/cache/mod_cache_disk.dsp (+115/-0)
modules/cache/mod_cache_disk.h (+91/-0)
modules/cache/mod_cache_disk.mak (+381/-0)
modules/cache/mod_cache_socache.c (+1543/-0)
modules/cache/mod_cache_socache.dep (+67/-0)
modules/cache/mod_cache_socache.dsp (+115/-0)
modules/cache/mod_cache_socache.mak (+381/-0)
modules/cache/mod_file_cache.c (+414/-0)
modules/cache/mod_file_cache.dep (+56/-0)
modules/cache/mod_file_cache.dsp (+111/-0)
modules/cache/mod_file_cache.exp (+1/-0)
modules/cache/mod_file_cache.mak (+353/-0)
modules/cache/mod_socache_dbm.c (+595/-0)
modules/cache/mod_socache_dbm.dep (+60/-0)
modules/cache/mod_socache_dbm.dsp (+111/-0)
modules/cache/mod_socache_dbm.mak (+353/-0)
modules/cache/mod_socache_dc.c (+198/-0)
modules/cache/mod_socache_dc.dep (+55/-0)
modules/cache/mod_socache_dc.dsp (+111/-0)
modules/cache/mod_socache_dc.mak (+353/-0)
modules/cache/mod_socache_memcache.c (+431/-0)
modules/cache/mod_socache_memcache.dep (+59/-0)
modules/cache/mod_socache_memcache.dsp (+111/-0)
modules/cache/mod_socache_memcache.mak (+353/-0)
modules/cache/mod_socache_shmcb.c (+1072/-0)
modules/cache/mod_socache_shmcb.dep (+56/-0)
modules/cache/mod_socache_shmcb.dsp (+111/-0)
modules/cache/mod_socache_shmcb.mak (+353/-0)
modules/cluster/Makefile.in (+3/-0)
modules/cluster/NWGNUmakefile (+246/-0)
modules/cluster/NWGNUmodheartbeat (+257/-0)
modules/cluster/NWGNUmodheartmonitor (+257/-0)
modules/cluster/README.heartbeat (+33/-0)
modules/cluster/README.heartmonitor (+30/-0)
modules/cluster/config5.m4 (+17/-0)
modules/cluster/mod_heartbeat.c (+228/-0)
modules/cluster/mod_heartbeat.dep (+55/-0)
modules/cluster/mod_heartbeat.dsp (+123/-0)
modules/cluster/mod_heartbeat.mak (+380/-0)
modules/cluster/mod_heartmonitor.c (+918/-0)
modules/cluster/mod_heartmonitor.dep (+63/-0)
modules/cluster/mod_heartmonitor.dsp (+123/-0)
modules/cluster/mod_heartmonitor.mak (+380/-0)
modules/config7.m4 (+56/-0)
modules/core/Makefile.in (+3/-0)
modules/core/NWGNUmakefile (+257/-0)
modules/core/config.m4 (+60/-0)
modules/core/mod_macro.c (+950/-0)
modules/core/mod_macro.dep (+45/-0)
modules/core/mod_macro.dsp (+111/-0)
modules/core/mod_macro.mak (+353/-0)
modules/core/mod_so.c (+442/-0)
modules/core/mod_so.h (+38/-0)
modules/core/mod_watchdog.c (+723/-0)
modules/core/mod_watchdog.dep (+59/-0)
modules/core/mod_watchdog.dsp (+115/-0)
modules/core/mod_watchdog.h (+213/-0)
modules/core/mod_watchdog.mak (+353/-0)
modules/core/test/Makefile (+67/-0)
modules/core/test/conf/inc63_1.conf (+5/-0)
modules/core/test/conf/inc63_2.conf (+3/-0)
modules/core/test/conf/test01.conf (+3/-0)
modules/core/test/conf/test02.conf (+3/-0)
modules/core/test/conf/test03.conf (+5/-0)
modules/core/test/conf/test04.conf (+5/-0)
modules/core/test/conf/test05.conf (+5/-0)
modules/core/test/conf/test06.conf (+6/-0)
modules/core/test/conf/test07.conf (+3/-0)
modules/core/test/conf/test08.conf (+3/-0)
modules/core/test/conf/test09.conf (+6/-0)
modules/core/test/conf/test10.conf (+10/-0)
modules/core/test/conf/test11.conf (+15/-0)
modules/core/test/conf/test12.conf (+12/-0)
modules/core/test/conf/test13.conf (+18/-0)
modules/core/test/conf/test14.conf (+23/-0)
modules/core/test/conf/test15.conf (+9/-0)
modules/core/test/conf/test16.conf (+11/-0)
modules/core/test/conf/test17.conf (+10/-0)
modules/core/test/conf/test18.conf (+10/-0)
modules/core/test/conf/test19.conf (+26/-0)
modules/core/test/conf/test20.conf (+11/-0)
modules/core/test/conf/test21.conf (+11/-0)
modules/core/test/conf/test22.conf (+11/-0)
modules/core/test/conf/test23.conf (+15/-0)
modules/core/test/conf/test24.conf (+23/-0)
modules/core/test/conf/test25.conf (+27/-0)
modules/core/test/conf/test26.conf (+19/-0)
modules/core/test/conf/test27.conf (+22/-0)
modules/core/test/conf/test28.conf (+13/-0)
modules/core/test/conf/test29.conf (+10/-0)
modules/core/test/conf/test30.conf (+12/-0)
modules/core/test/conf/test31.conf (+16/-0)
modules/core/test/conf/test32.conf (+7/-0)
modules/core/test/conf/test33.conf (+3/-0)
modules/core/test/conf/test34.conf (+14/-0)
modules/core/test/conf/test35.conf (+10/-0)
modules/core/test/conf/test36.conf (+12/-0)
modules/core/test/conf/test37.conf (+7/-0)
modules/core/test/conf/test38.conf (+10/-0)
modules/core/test/conf/test39.conf (+23/-0)
modules/core/test/conf/test40.conf (+33/-0)
modules/core/test/conf/test41.conf (+20/-0)
modules/core/test/conf/test42.conf (+13/-0)
modules/core/test/conf/test43.conf (+29/-0)
modules/core/test/conf/test44.conf (+19/-0)
modules/core/test/conf/test45.conf (+7/-0)
modules/core/test/conf/test46.conf (+11/-0)
modules/core/test/conf/test47.conf (+15/-0)
modules/core/test/conf/test48.conf (+23/-0)
modules/core/test/conf/test49.conf (+2/-0)
modules/core/test/conf/test50.conf (+5/-0)
modules/core/test/conf/test51.conf (+9/-0)
modules/core/test/conf/test52.conf (+8/-0)
modules/core/test/conf/test53.conf (+2/-0)
modules/core/test/conf/test54.conf (+6/-0)
modules/core/test/conf/test55.conf (+11/-0)
modules/core/test/conf/test56.conf (+18/-0)
modules/core/test/conf/test57.conf (+4/-0)
modules/core/test/conf/test58.conf (+4/-0)
modules/core/test/conf/test59.conf (+4/-0)
modules/core/test/conf/test60.conf (+17/-0)
modules/core/test/conf/test61.conf (+18/-0)
modules/core/test/conf/test62.conf (+25/-0)
modules/core/test/conf/test63.conf (+9/-0)
modules/core/test/conf/test64.conf (+5/-0)
modules/core/test/conf/test65.conf (+11/-0)
modules/core/test/conf/test66.conf (+7/-0)
modules/core/test/conf/test67.conf (+1/-0)
modules/core/test/conf/test68.conf (+5/-0)
modules/core/test/conf/test69.conf (+14/-0)
modules/core/test/ref/test01.out (+3/-0)
modules/core/test/ref/test02.out (+3/-0)
modules/core/test/ref/test03.out (+3/-0)
modules/core/test/ref/test04.out (+3/-0)
modules/core/test/ref/test05.out (+3/-0)
modules/core/test/ref/test06.out (+3/-0)
modules/core/test/ref/test07.out (+3/-0)
modules/core/test/ref/test08.out (+3/-0)
modules/core/test/ref/test09.out (+3/-0)
modules/core/test/ref/test10.out (+3/-0)
modules/core/test/ref/test11.out (+6/-0)
modules/core/test/ref/test12.out (+7/-0)
modules/core/test/ref/test13.out (+8/-0)
modules/core/test/ref/test14.out (+14/-0)
modules/core/test/ref/test15.out (+6/-0)
modules/core/test/ref/test16.out (+5/-0)
modules/core/test/ref/test17.out (+7/-0)
modules/core/test/ref/test18.out (+7/-0)
modules/core/test/ref/test19.out (+9/-0)
modules/core/test/ref/test20.out (+4/-0)
modules/core/test/ref/test21.out (+5/-0)
modules/core/test/ref/test22.out (+6/-0)
modules/core/test/ref/test23.out (+7/-0)
modules/core/test/ref/test24.out (+8/-0)
modules/core/test/ref/test25.out (+9/-0)
modules/core/test/ref/test26.out (+11/-0)
modules/core/test/ref/test27.out (+8/-0)
modules/core/test/ref/test28.out (+6/-0)
modules/core/test/ref/test29.out (+4/-0)
modules/core/test/ref/test30.out (+7/-0)
modules/core/test/ref/test31.out (+23/-0)
modules/core/test/ref/test32.out (+3/-0)
modules/core/test/ref/test33.out (+3/-0)
modules/core/test/ref/test34.out (+13/-0)
modules/core/test/ref/test35.out (+13/-0)
modules/core/test/ref/test36.out (+20/-0)
modules/core/test/ref/test37.out (+3/-0)
modules/core/test/ref/test38.out (+6/-0)
modules/core/test/ref/test39.out (+7/-0)
modules/core/test/ref/test40.out (+18/-0)
modules/core/test/ref/test41.out (+9/-0)
modules/core/test/ref/test42.out (+15/-0)
modules/core/test/ref/test43.out (+8/-0)
modules/core/test/ref/test44.out (+5/-0)
modules/core/test/ref/test45.out (+19/-0)
modules/core/test/ref/test46.out (+9/-0)
modules/core/test/ref/test47.out (+8/-0)
modules/core/test/ref/test48.out (+20/-0)
modules/core/test/ref/test49.out (+3/-0)
modules/core/test/ref/test50.out (+3/-0)
modules/core/test/ref/test51.out (+3/-0)
modules/core/test/ref/test52.out (+6/-0)
modules/core/test/ref/test53.out (+3/-0)
modules/core/test/ref/test54.out (+6/-0)
modules/core/test/ref/test55.out (+8/-0)
modules/core/test/ref/test56.out (+12/-0)
modules/core/test/ref/test57.out (+3/-0)
modules/core/test/ref/test58.out (+3/-0)
modules/core/test/ref/test59.out (+3/-0)
modules/core/test/ref/test60.out (+15/-0)
modules/core/test/ref/test61.out (+9/-0)
modules/core/test/ref/test62.out (+15/-0)
modules/core/test/ref/test63.out (+10/-0)
modules/core/test/ref/test64.out (+7/-0)
modules/core/test/ref/test65.out (+7/-0)
modules/core/test/ref/test66.out (+7/-0)
modules/core/test/ref/test67.out (+5/-0)
modules/core/test/ref/test68.out (+6/-0)
modules/core/test/ref/test69.out (+10/-0)
modules/database/Makefile.in (+3/-0)
modules/database/NWGNUmakefile (+262/-0)
modules/database/config.m4 (+8/-0)
modules/database/mod_dbd.c (+992/-0)
modules/database/mod_dbd.dep (+58/-0)
modules/database/mod_dbd.dsp (+115/-0)
modules/database/mod_dbd.h (+123/-0)
modules/database/mod_dbd.mak (+353/-0)
modules/dav/fs/Makefile.in (+3/-0)
modules/dav/fs/NWGNUmakefile (+269/-0)
modules/dav/fs/config6.m4 (+23/-0)
modules/dav/fs/dbm.c (+771/-0)
modules/dav/fs/lock.c (+1445/-0)
modules/dav/fs/mod_dav_fs.c (+108/-0)
modules/dav/fs/mod_dav_fs.dep (+203/-0)
modules/dav/fs/mod_dav_fs.dsp (+135/-0)
modules/dav/fs/mod_dav_fs.mak (+407/-0)
modules/dav/fs/repos.c (+2254/-0)
modules/dav/fs/repos.h (+84/-0)
modules/dav/lock/Makefile.in (+3/-0)
modules/dav/lock/NWGNUmakefile (+259/-0)
modules/dav/lock/config6.m4 (+17/-0)
modules/dav/lock/locks.c (+1211/-0)
modules/dav/lock/locks.h (+33/-0)
modules/dav/lock/mod_dav_lock.c (+104/-0)
modules/dav/lock/mod_dav_lock.dep (+100/-0)
modules/dav/lock/mod_dav_lock.dsp (+127/-0)
modules/dav/lock/mod_dav_lock.mak (+389/-0)
modules/dav/main/Makefile.in (+3/-0)
modules/dav/main/NWGNUmakefile (+268/-0)
modules/dav/main/config5.m4 (+21/-0)
modules/dav/main/liveprop.c (+140/-0)
modules/dav/main/mod_dav.c (+4946/-0)
modules/dav/main/mod_dav.dep (+354/-0)
modules/dav/main/mod_dav.dsp (+147/-0)
modules/dav/main/mod_dav.h (+2553/-0)
modules/dav/main/mod_dav.mak (+406/-0)
modules/dav/main/props.c (+1125/-0)
modules/dav/main/providers.c (+58/-0)
modules/dav/main/std_liveprop.c (+226/-0)
modules/dav/main/util.c (+2152/-0)
modules/dav/main/util_lock.c (+798/-0)
modules/debugging/Makefile.in (+3/-0)
modules/debugging/NWGNUmakefile (+246/-0)
modules/debugging/NWGNUmodbucketeer (+248/-0)
modules/debugging/NWGNUmoddumpio (+248/-0)
modules/debugging/README (+1/-0)
modules/debugging/config.m4 (+7/-0)
modules/debugging/mod_bucketeer.c (+187/-0)
modules/debugging/mod_bucketeer.dep (+53/-0)
modules/debugging/mod_bucketeer.dsp (+111/-0)
modules/debugging/mod_bucketeer.mak (+353/-0)
modules/debugging/mod_dumpio.c (+255/-0)
modules/debugging/mod_dumpio.dep (+50/-0)
modules/debugging/mod_dumpio.dsp (+111/-0)
modules/debugging/mod_dumpio.mak (+353/-0)
modules/echo/.indent.pro (+54/-0)
modules/echo/Makefile.in (+3/-0)
modules/echo/NWGNUmakefile (+257/-0)
modules/echo/config.m4 (+9/-0)
modules/echo/mod_echo.c (+218/-0)
modules/echo/mod_echo.dep (+56/-0)
modules/echo/mod_echo.dsp (+111/-0)
modules/echo/mod_echo.mak (+353/-0)
modules/examples/Makefile.in (+3/-0)
modules/examples/NWGNUcase_flt (+256/-0)
modules/examples/NWGNUcase_flt_in (+256/-0)
modules/examples/NWGNUexample_hooks (+257/-0)
modules/examples/NWGNUexample_ipc (+257/-0)
modules/examples/NWGNUmakefile (+257/-0)
modules/examples/README (+54/-0)
modules/examples/config.m4 (+9/-0)
modules/examples/mod_case_filter.c (+139/-0)
modules/examples/mod_case_filter.dep (+46/-0)
modules/examples/mod_case_filter.dsp (+111/-0)
modules/examples/mod_case_filter.mak (+353/-0)
modules/examples/mod_case_filter_in.c (+160/-0)
modules/examples/mod_case_filter_in.dep (+46/-0)
modules/examples/mod_case_filter_in.dsp (+111/-0)
modules/examples/mod_case_filter_in.mak (+353/-0)
modules/examples/mod_example_hooks.c (+1534/-0)
modules/examples/mod_example_hooks.dep (+62/-0)
modules/examples/mod_example_hooks.dsp (+111/-0)
modules/examples/mod_example_hooks.mak (+353/-0)
modules/examples/mod_example_ipc.c (+356/-0)
modules/examples/mod_example_ipc.dep (+56/-0)
modules/examples/mod_example_ipc.dsp (+111/-0)
modules/examples/mod_example_ipc.mak (+353/-0)
modules/experimental/.indent.pro (+54/-0)
modules/experimental/Makefile.in (+3/-0)
modules/experimental/NWGNUmakefile (+253/-0)
modules/experimental/config.m4 (+4/-0)
modules/filters/.indent.pro (+54/-0)
modules/filters/Makefile.in (+3/-0)
modules/filters/NWGNUcharsetl (+257/-0)
modules/filters/NWGNUdeflate (+279/-0)
modules/filters/NWGNUextfiltr (+248/-0)
modules/filters/NWGNUmakefile (+273/-0)
modules/filters/NWGNUmod_data (+248/-0)
modules/filters/NWGNUmod_filter (+248/-0)
modules/filters/NWGNUmod_request (+248/-0)
modules/filters/NWGNUmodbuffer (+256/-0)
modules/filters/NWGNUmodsed (+259/-0)
modules/filters/NWGNUproxyhtml (+261/-0)
modules/filters/NWGNUratelimit (+256/-0)
modules/filters/NWGNUreflector (+256/-0)
modules/filters/NWGNUreqtimeout (+256/-0)
modules/filters/NWGNUsubstitute (+256/-0)
modules/filters/NWGNUxml2enc (+258/-0)
modules/filters/config.m4 (+197/-0)
modules/filters/libsed.h (+172/-0)
modules/filters/mod_brotli.c (+592/-0)
modules/filters/mod_brotli.dep (+45/-0)
modules/filters/mod_brotli.dsp (+111/-0)
modules/filters/mod_brotli.mak (+353/-0)
modules/filters/mod_buffer.c (+353/-0)
modules/filters/mod_buffer.dep (+48/-0)
modules/filters/mod_buffer.dsp (+111/-0)
modules/filters/mod_buffer.mak (+353/-0)
modules/filters/mod_charset_lite.c (+1142/-0)
modules/filters/mod_charset_lite.dep (+60/-0)
modules/filters/mod_charset_lite.dsp (+111/-0)
modules/filters/mod_charset_lite.exp (+1/-0)
modules/filters/mod_charset_lite.mak (+353/-0)
modules/filters/mod_data.c (+255/-0)
modules/filters/mod_data.dep (+55/-0)
modules/filters/mod_data.dsp (+111/-0)
modules/filters/mod_data.mak (+353/-0)
modules/filters/mod_deflate.c (+1912/-0)
modules/filters/mod_deflate.dep (+52/-0)
modules/filters/mod_deflate.dsp (+111/-0)
modules/filters/mod_deflate.exp (+1/-0)
modules/filters/mod_deflate.mak (+353/-0)
modules/filters/mod_ext_filter.c (+956/-0)
modules/filters/mod_ext_filter.dep (+58/-0)
modules/filters/mod_ext_filter.dsp (+111/-0)
modules/filters/mod_ext_filter.exp (+1/-0)
modules/filters/mod_ext_filter.mak (+353/-0)
modules/filters/mod_filter.c (+767/-0)
modules/filters/mod_filter.dep (+50/-0)
modules/filters/mod_filter.dsp (+111/-0)
modules/filters/mod_filter.mak (+353/-0)
modules/filters/mod_include.c (+4237/-0)
modules/filters/mod_include.dep (+63/-0)
modules/filters/mod_include.dsp (+115/-0)
modules/filters/mod_include.exp (+1/-0)
modules/filters/mod_include.h (+120/-0)
modules/filters/mod_include.mak (+353/-0)
modules/filters/mod_proxy_html.c (+1334/-0)
modules/filters/mod_proxy_html.dep (+58/-0)
modules/filters/mod_proxy_html.dsp (+123/-0)
modules/filters/mod_proxy_html.mak (+352/-0)
modules/filters/mod_ratelimit.c (+341/-0)
modules/filters/mod_ratelimit.dep (+45/-0)
modules/filters/mod_ratelimit.dsp (+115/-0)
modules/filters/mod_ratelimit.h (+51/-0)
modules/filters/mod_ratelimit.mak (+353/-0)
modules/filters/mod_reflector.c (+226/-0)
modules/filters/mod_reflector.dep (+57/-0)
modules/filters/mod_reflector.dsp (+111/-0)
modules/filters/mod_reflector.mak (+353/-0)
modules/filters/mod_reqtimeout.c (+657/-0)
modules/filters/mod_reqtimeout.dep (+58/-0)
modules/filters/mod_reqtimeout.dsp (+111/-0)
modules/filters/mod_reqtimeout.mak (+353/-0)
modules/filters/mod_request.c (+397/-0)
modules/filters/mod_request.dep (+55/-0)
modules/filters/mod_request.dsp (+115/-0)
modules/filters/mod_request.mak (+353/-0)
modules/filters/mod_sed.c (+537/-0)
modules/filters/mod_sed.dep (+109/-0)
modules/filters/mod_sed.dsp (+135/-0)
modules/filters/mod_sed.mak (+380/-0)
modules/filters/mod_substitute.c (+763/-0)
modules/filters/mod_substitute.dep (+53/-0)
modules/filters/mod_substitute.dsp (+111/-0)
modules/filters/mod_substitute.mak (+353/-0)
modules/filters/mod_xml2enc.c (+657/-0)
modules/filters/mod_xml2enc.dep (+54/-0)
modules/filters/mod_xml2enc.dsp (+123/-0)
modules/filters/mod_xml2enc.h (+55/-0)
modules/filters/mod_xml2enc.mak (+352/-0)
modules/filters/regexp.c (+599/-0)
modules/filters/regexp.h (+112/-0)
modules/filters/sed.h (+61/-0)
modules/filters/sed0.c (+1026/-0)
modules/filters/sed1.c (+1020/-0)
modules/generators/.indent.pro (+54/-0)
modules/generators/Makefile.in (+3/-0)
modules/generators/NWGNUautoindex (+249/-0)
modules/generators/NWGNUinfo (+248/-0)
modules/generators/NWGNUmakefile (+249/-0)
modules/generators/NWGNUmod_asis (+249/-0)
modules/generators/NWGNUmod_cgi (+249/-0)
modules/generators/NWGNUstatus (+248/-0)
modules/generators/config5.m4 (+81/-0)
modules/generators/mod_asis.c (+128/-0)
modules/generators/mod_asis.dep (+56/-0)
modules/generators/mod_asis.dsp (+111/-0)
modules/generators/mod_asis.exp (+1/-0)
modules/generators/mod_asis.mak (+353/-0)
modules/generators/mod_autoindex.c (+2348/-0)
modules/generators/mod_autoindex.dep (+61/-0)
modules/generators/mod_autoindex.dsp (+111/-0)
modules/generators/mod_autoindex.exp (+1/-0)
modules/generators/mod_autoindex.mak (+353/-0)
modules/generators/mod_cgi.c (+1281/-0)
modules/generators/mod_cgi.dep (+64/-0)
modules/generators/mod_cgi.dsp (+115/-0)
modules/generators/mod_cgi.exp (+1/-0)
modules/generators/mod_cgi.h (+67/-0)
modules/generators/mod_cgi.mak (+353/-0)
modules/generators/mod_cgid.c (+1980/-0)
modules/generators/mod_cgid.exp (+1/-0)
modules/generators/mod_info.c (+1011/-0)
modules/generators/mod_info.dep (+66/-0)
modules/generators/mod_info.dsp (+111/-0)
modules/generators/mod_info.exp (+1/-0)
modules/generators/mod_info.mak (+353/-0)
modules/generators/mod_status.c (+1014/-0)
modules/generators/mod_status.dep (+60/-0)
modules/generators/mod_status.dsp (+111/-0)
modules/generators/mod_status.exp (+1/-0)
modules/generators/mod_status.h (+64/-0)
modules/generators/mod_status.mak (+353/-0)
modules/generators/mod_suexec.c (+139/-0)
modules/generators/mod_suexec.h (+33/-0)
modules/http/.indent.pro (+54/-0)
modules/http/Makefile.in (+3/-0)
modules/http/byterange_filter.c (+611/-0)
modules/http/chunk_filter.c (+196/-0)
modules/http/config.m4 (+20/-0)
modules/http/http_core.c (+328/-0)
modules/http/http_etag.c (+220/-0)
modules/http/http_filters.c (+1907/-0)
modules/http/http_protocol.c (+1690/-0)
modules/http/http_request.c (+862/-0)
modules/http/mod_mime.c (+1026/-0)
modules/http/mod_mime.dep (+55/-0)
modules/http/mod_mime.dsp (+111/-0)
modules/http/mod_mime.exp (+1/-0)
modules/http/mod_mime.mak (+353/-0)
modules/http2/.gitignore (+35/-0)
modules/http2/Makefile.in (+20/-0)
modules/http2/NWGNUmakefile (+246/-0)
modules/http2/NWGNUmod_http2 (+395/-0)
modules/http2/NWGNUproxyht2 (+288/-0)
modules/http2/README.h2 (+70/-0)
modules/http2/config2.m4 (+235/-0)
modules/http2/h2.h (+166/-0)
modules/http2/h2_alt_svc.c (+131/-0)
modules/http2/h2_alt_svc.h (+40/-0)
modules/http2/h2_bucket_beam.c (+1283/-0)
modules/http2/h2_bucket_beam.h (+406/-0)
modules/http2/h2_bucket_eos.c (+127/-0)
modules/http2/h2_bucket_eos.h (+32/-0)
modules/http2/h2_config.c (+702/-0)
modules/http2/h2_config.h (+106/-0)
modules/http2/h2_conn.c (+361/-0)
modules/http2/h2_conn.h (+77/-0)
modules/http2/h2_conn_io.c (+389/-0)
modules/http2/h2_conn_io.h (+77/-0)
modules/http2/h2_ctx.c (+121/-0)
modules/http2/h2_ctx.h (+78/-0)
modules/http2/h2_filter.c (+568/-0)
modules/http2/h2_filter.h (+73/-0)
modules/http2/h2_from_h1.c (+867/-0)
modules/http2/h2_from_h1.h (+50/-0)
modules/http2/h2_h2.c (+765/-0)
modules/http2/h2_h2.h (+79/-0)
modules/http2/h2_headers.c (+179/-0)
modules/http2/h2_headers.h (+79/-0)
modules/http2/h2_mplx.c (+1278/-0)
modules/http2/h2_mplx.h (+330/-0)
modules/http2/h2_ngn_shed.c (+392/-0)
modules/http2/h2_ngn_shed.h (+79/-0)
modules/http2/h2_private.h (+28/-0)
modules/http2/h2_proxy_session.c (+1584/-0)
modules/http2/h2_proxy_session.h (+128/-0)
modules/http2/h2_proxy_util.c (+1335/-0)
modules/http2/h2_proxy_util.h (+256/-0)
modules/http2/h2_push.c (+1060/-0)
modules/http2/h2_push.h (+120/-0)
modules/http2/h2_request.c (+339/-0)
modules/http2/h2_request.h (+48/-0)
modules/http2/h2_session.c (+2292/-0)
modules/http2/h2_session.h (+225/-0)
modules/http2/h2_stream.c (+1078/-0)
modules/http2/h2_stream.h (+309/-0)
modules/http2/h2_switch.c (+194/-0)
modules/http2/h2_switch.h (+30/-0)
modules/http2/h2_task.c (+769/-0)
modules/http2/h2_task.h (+127/-0)
modules/http2/h2_util.c (+2011/-0)
modules/http2/h2_util.h (+544/-0)
modules/http2/h2_version.h (+41/-0)
modules/http2/h2_workers.c (+383/-0)
modules/http2/h2_workers.h (+82/-0)
modules/http2/mod_http2.c (+393/-0)
modules/http2/mod_http2.dep (+1433/-0)
modules/http2/mod_http2.dsp (+195/-0)
modules/http2/mod_http2.h (+101/-0)
modules/http2/mod_http2.mak (+542/-0)
modules/http2/mod_proxy_http2.c (+674/-0)
modules/http2/mod_proxy_http2.dep (+208/-0)
modules/http2/mod_proxy_http2.dsp (+119/-0)
modules/http2/mod_proxy_http2.h (+21/-0)
modules/http2/mod_proxy_http2.mak (+427/-0)
modules/ldap/Makefile.in (+3/-0)
modules/ldap/NWGNUmakefile (+264/-0)
modules/ldap/README.ldap (+47/-0)
modules/ldap/config.m4 (+25/-0)
modules/ldap/mod_ldap.dep (+192/-0)
modules/ldap/mod_ldap.dsp (+127/-0)
modules/ldap/mod_ldap.mak (+371/-0)
modules/ldap/util_ldap.c (+3221/-0)
modules/ldap/util_ldap_cache.c (+467/-0)
modules/ldap/util_ldap_cache.h (+206/-0)
modules/ldap/util_ldap_cache_mgr.c (+901/-0)
modules/loggers/.indent.pro (+54/-0)
modules/loggers/Makefile.in (+3/-0)
modules/loggers/NWGNUforensic (+258/-0)
modules/loggers/NWGNUlogdebug (+258/-0)
modules/loggers/NWGNUmakefile (+247/-0)
modules/loggers/NWGNUmodlogio (+258/-0)
modules/loggers/config.m4 (+20/-0)
modules/loggers/mod_log_config.c (+1858/-0)
modules/loggers/mod_log_config.dep (+62/-0)
modules/loggers/mod_log_config.dsp (+111/-0)
modules/loggers/mod_log_config.exp (+1/-0)
modules/loggers/mod_log_config.h (+74/-0)
modules/loggers/mod_log_config.mak (+353/-0)
modules/loggers/mod_log_debug.c (+287/-0)
modules/loggers/mod_log_debug.dep (+54/-0)
modules/loggers/mod_log_debug.dsp (+111/-0)
modules/loggers/mod_log_debug.mak (+325/-0)
modules/loggers/mod_log_forensic.c (+289/-0)
modules/loggers/mod_log_forensic.dep (+53/-0)
modules/loggers/mod_log_forensic.dsp (+111/-0)
modules/loggers/mod_log_forensic.exp (+1/-0)
modules/loggers/mod_log_forensic.mak (+353/-0)
modules/loggers/mod_logio.c (+284/-0)
modules/loggers/mod_logio.dep (+59/-0)
modules/loggers/mod_logio.dsp (+111/-0)
modules/loggers/mod_logio.mak (+353/-0)
modules/lua/Makefile.in (+3/-0)
modules/lua/NWGNUmakefile (+287/-0)
modules/lua/README (+54/-0)
modules/lua/config.m4 (+121/-0)
modules/lua/docs/README (+12/-0)
modules/lua/docs/basic-configuration.txt (+141/-0)
modules/lua/docs/building-from-subversion.txt (+72/-0)
modules/lua/docs/running-developer-tests.txt (+16/-0)
modules/lua/docs/writing-handlers.txt (+49/-0)
modules/lua/lua_apr.c (+104/-0)
modules/lua/lua_apr.h (+36/-0)
modules/lua/lua_config.c (+277/-0)
modules/lua/lua_config.h (+31/-0)
modules/lua/lua_dbd.c (+843/-0)
modules/lua/lua_dbd.h (+66/-0)
modules/lua/lua_passwd.c (+178/-0)
modules/lua/lua_passwd.h (+90/-0)
modules/lua/lua_request.c (+3024/-0)
modules/lua/lua_request.h (+58/-0)
modules/lua/lua_vmprep.c (+551/-0)
modules/lua/lua_vmprep.h (+147/-0)
modules/lua/mod_lua.c (+2174/-0)
modules/lua/mod_lua.dep (+418/-0)
modules/lua/mod_lua.dsp (+163/-0)
modules/lua/mod_lua.h (+177/-0)
modules/lua/mod_lua.mak (+407/-0)
modules/lua/test/helpers.lua (+36/-0)
modules/lua/test/htdocs/config_tests.lua (+37/-0)
modules/lua/test/htdocs/filters.lua (+7/-0)
modules/lua/test/htdocs/find_me.txt (+1/-0)
modules/lua/test/htdocs/headers.lua (+6/-0)
modules/lua/test/htdocs/hooks.lua (+29/-0)
modules/lua/test/htdocs/other.lua (+21/-0)
modules/lua/test/htdocs/simple.lua (+4/-0)
modules/lua/test/htdocs/test.lua (+129/-0)
modules/lua/test/lib/kangaroo.lua (+19/-0)
modules/lua/test/moonunit.lua (+52/-0)
modules/lua/test/test.lua (+126/-0)
modules/lua/test/test_httpd.conf (+31/-0)
modules/mappers/.indent.pro (+54/-0)
modules/mappers/Makefile.in (+3/-0)
modules/mappers/NWGNUactions (+248/-0)
modules/mappers/NWGNUimagemap (+249/-0)
modules/mappers/NWGNUmakefile (+250/-0)
modules/mappers/NWGNUrewrite (+250/-0)
modules/mappers/NWGNUspeling (+248/-0)
modules/mappers/NWGNUuserdir (+249/-0)
modules/mappers/NWGNUvhost (+249/-0)
modules/mappers/config9.m4 (+19/-0)
modules/mappers/mod_actions.c (+230/-0)
modules/mappers/mod_actions.dep (+58/-0)
modules/mappers/mod_actions.dsp (+111/-0)
modules/mappers/mod_actions.exp (+1/-0)
modules/mappers/mod_actions.mak (+353/-0)
modules/mappers/mod_alias.c (+726/-0)
modules/mappers/mod_alias.dep (+51/-0)
modules/mappers/mod_alias.dsp (+111/-0)
modules/mappers/mod_alias.exp (+1/-0)
modules/mappers/mod_alias.mak (+353/-0)
modules/mappers/mod_dir.c (+417/-0)
modules/mappers/mod_dir.dep (+60/-0)
modules/mappers/mod_dir.dsp (+111/-0)
modules/mappers/mod_dir.exp (+1/-0)
modules/mappers/mod_dir.mak (+353/-0)
modules/mappers/mod_imagemap.c (+897/-0)
modules/mappers/mod_imagemap.dep (+60/-0)
modules/mappers/mod_imagemap.dsp (+111/-0)
modules/mappers/mod_imagemap.exp (+1/-0)
modules/mappers/mod_imagemap.mak (+353/-0)
modules/mappers/mod_negotiation.c (+3228/-0)
modules/mappers/mod_negotiation.dep (+58/-0)
modules/mappers/mod_negotiation.dsp (+111/-0)
modules/mappers/mod_negotiation.exp (+1/-0)
modules/mappers/mod_negotiation.mak (+353/-0)
modules/mappers/mod_rewrite.c (+5328/-0)
modules/mappers/mod_rewrite.dep (+65/-0)
modules/mappers/mod_rewrite.dsp (+111/-0)
modules/mappers/mod_rewrite.exp (+1/-0)
modules/mappers/mod_rewrite.h (+42/-0)
modules/mappers/mod_rewrite.mak (+353/-0)
modules/mappers/mod_speling.c (+533/-0)
modules/mappers/mod_speling.dep (+51/-0)
modules/mappers/mod_speling.dsp (+111/-0)
modules/mappers/mod_speling.exp (+1/-0)
modules/mappers/mod_speling.mak (+353/-0)
modules/mappers/mod_userdir.c (+390/-0)
modules/mappers/mod_userdir.dep (+46/-0)
modules/mappers/mod_userdir.dsp (+111/-0)
modules/mappers/mod_userdir.exp (+1/-0)
modules/mappers/mod_userdir.mak (+353/-0)
modules/mappers/mod_vhost_alias.c (+457/-0)
modules/mappers/mod_vhost_alias.dep (+50/-0)
modules/mappers/mod_vhost_alias.dsp (+111/-0)
modules/mappers/mod_vhost_alias.exp (+1/-0)
modules/mappers/mod_vhost_alias.mak (+353/-0)
modules/md/Makefile.in (+20/-0)
modules/md/config2.m4 (+297/-0)
modules/md/md.h (+290/-0)
modules/md/md_acme.c (+529/-0)
modules/md/md_acme.h (+267/-0)
modules/md/md_acme_acct.c (+670/-0)
modules/md/md_acme_acct.h (+49/-0)
modules/md/md_acme_authz.c (+723/-0)
modules/md/md_acme_authz.h (+104/-0)
modules/md/md_acme_drive.c (+1021/-0)
modules/md/md_core.c (+428/-0)
modules/md/md_crypt.c (+1323/-0)
modules/md/md_crypt.h (+135/-0)
modules/md/md_curl.c (+307/-0)
modules/md/md_curl.h (+24/-0)
modules/md/md_http.c (+245/-0)
modules/md/md_http.h (+102/-0)
modules/md/md_json.c (+1037/-0)
modules/md/md_json.h (+122/-0)
modules/md/md_jws.c (+106/-0)
modules/md/md_jws.h (+30/-0)
modules/md/md_log.c (+78/-0)
modules/md/md_log.h (+56/-0)
modules/md/md_reg.c (+996/-0)
modules/md/md_reg.h (+177/-0)
modules/md/md_store.c (+319/-0)
modules/md/md_store.h (+157/-0)
modules/md/md_store_fs.c (+883/-0)
modules/md/md_store_fs.h (+65/-0)
modules/md/md_util.c (+1254/-0)
modules/md/md_util.h (+148/-0)
modules/md/md_version.h (+42/-0)
modules/md/mod_md.c (+1460/-0)
modules/md/mod_md.dep (+5/-0)
modules/md/mod_md.dsp (+180/-0)
modules/md/mod_md.h (+50/-0)
modules/md/mod_md.mak (+520/-0)
modules/md/mod_md_config.c (+950/-0)
modules/md/mod_md_config.h (+102/-0)
modules/md/mod_md_os.c (+89/-0)
modules/md/mod_md_os.h (+37/-0)
modules/md/mod_md_private.h (+24/-0)
modules/metadata/.indent.pro (+54/-0)
modules/metadata/Makefile.in (+3/-0)
modules/metadata/NWGNUcernmeta (+248/-0)
modules/metadata/NWGNUexpires (+248/-0)
modules/metadata/NWGNUheaders (+249/-0)
modules/metadata/NWGNUmakefile (+254/-0)
modules/metadata/NWGNUmimemagi (+248/-0)
modules/metadata/NWGNUmodident (+248/-0)
modules/metadata/NWGNUmodversion (+248/-0)
modules/metadata/NWGNUremoteip (+248/-0)
modules/metadata/NWGNUuniqueid (+257/-0)
modules/metadata/NWGNUusertrk (+248/-0)
modules/metadata/config.m4 (+24/-0)
modules/metadata/mod_cern_meta.c (+371/-0)
modules/metadata/mod_cern_meta.dep (+55/-0)
modules/metadata/mod_cern_meta.dsp (+111/-0)
modules/metadata/mod_cern_meta.exp (+1/-0)
modules/metadata/mod_cern_meta.mak (+353/-0)
modules/metadata/mod_env.c (+189/-0)
modules/metadata/mod_env.dep (+47/-0)
modules/metadata/mod_env.dsp (+111/-0)
modules/metadata/mod_env.exp (+1/-0)
modules/metadata/mod_env.mak (+353/-0)
modules/metadata/mod_expires.c (+571/-0)
modules/metadata/mod_expires.dep (+54/-0)
modules/metadata/mod_expires.dsp (+111/-0)
modules/metadata/mod_expires.exp (+1/-0)
modules/metadata/mod_expires.mak (+353/-0)
modules/metadata/mod_headers.c (+1020/-0)
modules/metadata/mod_headers.dep (+57/-0)
modules/metadata/mod_headers.dsp (+111/-0)
modules/metadata/mod_headers.exp (+1/-0)
modules/metadata/mod_headers.mak (+353/-0)
modules/metadata/mod_ident.c (+344/-0)
modules/metadata/mod_ident.dep (+52/-0)
modules/metadata/mod_ident.dsp (+111/-0)
modules/metadata/mod_ident.exp (+1/-0)
modules/metadata/mod_ident.mak (+353/-0)
modules/metadata/mod_mime_magic.c (+2471/-0)
modules/metadata/mod_mime_magic.dep (+58/-0)
modules/metadata/mod_mime_magic.dsp (+111/-0)
modules/metadata/mod_mime_magic.exp (+1/-0)
modules/metadata/mod_mime_magic.mak (+353/-0)
modules/metadata/mod_remoteip.c (+1249/-0)
modules/metadata/mod_remoteip.dep (+53/-0)
modules/metadata/mod_remoteip.dsp (+111/-0)
modules/metadata/mod_remoteip.mak (+353/-0)
modules/metadata/mod_setenvif.c (+648/-0)
modules/metadata/mod_setenvif.dep (+56/-0)
modules/metadata/mod_setenvif.dsp (+111/-0)
modules/metadata/mod_setenvif.exp (+1/-0)
modules/metadata/mod_setenvif.mak (+353/-0)
modules/metadata/mod_unique_id.c (+316/-0)
modules/metadata/mod_unique_id.dep (+50/-0)
modules/metadata/mod_unique_id.dsp (+111/-0)
modules/metadata/mod_unique_id.exp (+1/-0)
modules/metadata/mod_unique_id.mak (+353/-0)
modules/metadata/mod_usertrack.c (+459/-0)
modules/metadata/mod_usertrack.dep (+51/-0)
modules/metadata/mod_usertrack.dsp (+111/-0)
modules/metadata/mod_usertrack.exp (+1/-0)
modules/metadata/mod_usertrack.mak (+353/-0)
modules/metadata/mod_version.c (+313/-0)
modules/metadata/mod_version.dep (+45/-0)
modules/metadata/mod_version.dsp (+111/-0)
modules/metadata/mod_version.exp (+1/-0)
modules/metadata/mod_version.mak (+353/-0)
modules/proxy/.indent.pro (+58/-0)
modules/proxy/CHANGES (+223/-0)
modules/proxy/Makefile.in (+4/-0)
modules/proxy/NWGNUmakefile (+259/-0)
modules/proxy/NWGNUproxy (+337/-0)
modules/proxy/NWGNUproxyajp (+264/-0)
modules/proxy/NWGNUproxybalancer (+260/-0)
modules/proxy/NWGNUproxycon (+251/-0)
modules/proxy/NWGNUproxyexpress (+256/-0)
modules/proxy/NWGNUproxyfcgi (+261/-0)
modules/proxy/NWGNUproxyftp (+260/-0)
modules/proxy/NWGNUproxyhcheck (+254/-0)
modules/proxy/NWGNUproxyhtp (+260/-0)
modules/proxy/NWGNUproxylbm_busy (+250/-0)
modules/proxy/NWGNUproxylbm_hb (+251/-0)
modules/proxy/NWGNUproxylbm_req (+251/-0)
modules/proxy/NWGNUproxylbm_traf (+251/-0)
modules/proxy/NWGNUproxyscgi (+260/-0)
modules/proxy/NWGNUproxywstunnel (+250/-0)
modules/proxy/ajp.h (+520/-0)
modules/proxy/ajp_header.c (+885/-0)
modules/proxy/ajp_header.h (+195/-0)
modules/proxy/ajp_link.c (+115/-0)
modules/proxy/ajp_msg.c (+641/-0)
modules/proxy/ajp_utils.c (+137/-0)
modules/proxy/balancers/Makefile.in (+3/-0)
modules/proxy/balancers/config2.m4 (+8/-0)
modules/proxy/balancers/mod_lbmethod_bybusyness.c (+98/-0)
modules/proxy/balancers/mod_lbmethod_bybusyness.dep (+76/-0)
modules/proxy/balancers/mod_lbmethod_bybusyness.dsp (+123/-0)
modules/proxy/balancers/mod_lbmethod_bybusyness.mak (+408/-0)
modules/proxy/balancers/mod_lbmethod_byrequests.c (+143/-0)
modules/proxy/balancers/mod_lbmethod_byrequests.dep (+76/-0)
modules/proxy/balancers/mod_lbmethod_byrequests.dsp (+123/-0)
modules/proxy/balancers/mod_lbmethod_byrequests.mak (+408/-0)
modules/proxy/balancers/mod_lbmethod_bytraffic.c (+113/-0)
modules/proxy/balancers/mod_lbmethod_bytraffic.dep (+76/-0)
modules/proxy/balancers/mod_lbmethod_bytraffic.dsp (+123/-0)
modules/proxy/balancers/mod_lbmethod_bytraffic.mak (+408/-0)
modules/proxy/balancers/mod_lbmethod_heartbeat.c (+467/-0)
modules/proxy/balancers/mod_lbmethod_heartbeat.dep (+77/-0)
modules/proxy/balancers/mod_lbmethod_heartbeat.dsp (+123/-0)
modules/proxy/balancers/mod_lbmethod_heartbeat.mak (+408/-0)
modules/proxy/config.m4 (+79/-0)
modules/proxy/libproxy.exp (+1/-0)
modules/proxy/mod_proxy.c (+3089/-0)
modules/proxy/mod_proxy.dep (+153/-0)
modules/proxy/mod_proxy.dsp (+127/-0)
modules/proxy/mod_proxy.h (+1269/-0)
modules/proxy/mod_proxy.mak (+361/-0)
modules/proxy/mod_proxy_ajp.c (+829/-0)
modules/proxy/mod_proxy_ajp.dep (+356/-0)
modules/proxy/mod_proxy_ajp.dsp (+151/-0)
modules/proxy/mod_proxy_ajp.mak (+416/-0)
modules/proxy/mod_proxy_balancer.c (+1941/-0)
modules/proxy/mod_proxy_balancer.dep (+76/-0)
modules/proxy/mod_proxy_balancer.dsp (+123/-0)
modules/proxy/mod_proxy_balancer.mak (+380/-0)
modules/proxy/mod_proxy_connect.c (+486/-0)
modules/proxy/mod_proxy_connect.dep (+73/-0)
modules/proxy/mod_proxy_connect.dsp (+123/-0)
modules/proxy/mod_proxy_connect.mak (+380/-0)
modules/proxy/mod_proxy_express.c (+221/-0)
modules/proxy/mod_proxy_express.dep (+74/-0)
modules/proxy/mod_proxy_express.dsp (+123/-0)
modules/proxy/mod_proxy_express.mak (+380/-0)
modules/proxy/mod_proxy_fcgi.c (+1200/-0)
modules/proxy/mod_proxy_fcgi.dep (+75/-0)
modules/proxy/mod_proxy_fcgi.dsp (+123/-0)
modules/proxy/mod_proxy_fcgi.mak (+380/-0)
modules/proxy/mod_proxy_fdpass.c (+241/-0)
modules/proxy/mod_proxy_fdpass.h (+41/-0)
modules/proxy/mod_proxy_ftp.c (+2125/-0)
modules/proxy/mod_proxy_ftp.dep (+74/-0)
modules/proxy/mod_proxy_ftp.dsp (+123/-0)
modules/proxy/mod_proxy_ftp.mak (+380/-0)
modules/proxy/mod_proxy_hcheck.c (+1224/-0)
modules/proxy/mod_proxy_hcheck.dep (+5/-0)
modules/proxy/mod_proxy_hcheck.dsp (+123/-0)
modules/proxy/mod_proxy_hcheck.mak (+380/-0)
modules/proxy/mod_proxy_http.c (+2070/-0)
modules/proxy/mod_proxy_http.dep (+73/-0)
modules/proxy/mod_proxy_http.dsp (+123/-0)
modules/proxy/mod_proxy_http.mak (+380/-0)
modules/proxy/mod_proxy_scgi.c (+674/-0)
modules/proxy/mod_proxy_scgi.dep (+75/-0)
modules/proxy/mod_proxy_scgi.dsp (+123/-0)
modules/proxy/mod_proxy_scgi.mak (+380/-0)
modules/proxy/mod_proxy_uwsgi.c (+551/-0)
modules/proxy/mod_proxy_uwsgi.dep (+75/-0)
modules/proxy/mod_proxy_uwsgi.dsp (+123/-0)
modules/proxy/mod_proxy_uwsgi.mak (+380/-0)
modules/proxy/mod_proxy_wstunnel.c (+391/-0)
modules/proxy/mod_proxy_wstunnel.dep (+73/-0)
modules/proxy/mod_proxy_wstunnel.dsp (+123/-0)
modules/proxy/mod_proxy_wstunnel.mak (+380/-0)
modules/proxy/proxy_util.c (+4031/-0)
modules/proxy/proxy_util.h (+45/-0)
modules/proxy/scgi.h (+36/-0)
modules/session/Makefile.in (+4/-0)
modules/session/NWGNUmakefile (+257/-0)
modules/session/NWGNUsession (+254/-0)
modules/session/NWGNUsession_cookie (+253/-0)
modules/session/NWGNUsession_crypto (+255/-0)
modules/session/NWGNUsession_dbd (+253/-0)
modules/session/config.m4 (+68/-0)
modules/session/mod_session.c (+671/-0)
modules/session/mod_session.dep (+56/-0)
modules/session/mod_session.dsp (+115/-0)
modules/session/mod_session.h (+186/-0)
modules/session/mod_session.mak (+353/-0)
modules/session/mod_session_cookie.c (+284/-0)
modules/session/mod_session_cookie.dep (+49/-0)
modules/session/mod_session_cookie.dsp (+111/-0)
modules/session/mod_session_cookie.mak (+381/-0)
modules/session/mod_session_crypto.c (+805/-0)
modules/session/mod_session_crypto.dep (+57/-0)
modules/session/mod_session_crypto.dsp (+111/-0)
modules/session/mod_session_crypto.mak (+381/-0)
modules/session/mod_session_dbd.c (+640/-0)
modules/session/mod_session_dbd.dep (+60/-0)
modules/session/mod_session_dbd.dsp (+111/-0)
modules/session/mod_session_dbd.mak (+409/-0)
modules/slotmem/Makefile.in (+3/-0)
modules/slotmem/NWGNUmakefile (+246/-0)
modules/slotmem/NWGNUslotmem_plain (+250/-0)
modules/slotmem/NWGNUslotmem_shm (+250/-0)
modules/slotmem/config.m4 (+10/-0)
modules/slotmem/mod_slotmem_plain.c (+343/-0)
modules/slotmem/mod_slotmem_plain.dep (+51/-0)
modules/slotmem/mod_slotmem_plain.dsp (+111/-0)
modules/slotmem/mod_slotmem_plain.mak (+353/-0)
modules/slotmem/mod_slotmem_shm.c (+789/-0)
modules/slotmem/mod_slotmem_shm.dep (+57/-0)
modules/slotmem/mod_slotmem_shm.dsp (+111/-0)
modules/slotmem/mod_slotmem_shm.mak (+353/-0)
modules/ssl/Makefile.in (+20/-0)
modules/ssl/NWGNUmakefile (+327/-0)
modules/ssl/README (+106/-0)
modules/ssl/README.dsov.fig (+346/-0)
modules/ssl/README.dsov.ps (+1138/-0)
modules/ssl/config.m4 (+57/-0)
modules/ssl/mod_ssl.c (+760/-0)
modules/ssl/mod_ssl.dep (+1086/-0)
modules/ssl/mod_ssl.dsp (+195/-0)
modules/ssl/mod_ssl.h (+91/-0)
modules/ssl/mod_ssl.mak (+500/-0)
modules/ssl/mod_ssl_openssl.h (+73/-0)
modules/ssl/ssl_engine_config.c (+2111/-0)
modules/ssl/ssl_engine_init.c (+2152/-0)
modules/ssl/ssl_engine_io.c (+2217/-0)
modules/ssl/ssl_engine_kernel.c (+2500/-0)
modules/ssl/ssl_engine_log.c (+238/-0)
modules/ssl/ssl_engine_mutex.c (+111/-0)
modules/ssl/ssl_engine_ocsp.c (+311/-0)
modules/ssl/ssl_engine_pphrase.c (+621/-0)
modules/ssl/ssl_engine_rand.c (+177/-0)
modules/ssl/ssl_engine_vars.c (+1252/-0)
modules/ssl/ssl_private.h (+1093/-0)
modules/ssl/ssl_scache.c (+239/-0)
modules/ssl/ssl_util.c (+465/-0)
modules/ssl/ssl_util_ocsp.c (+419/-0)
modules/ssl/ssl_util_ssl.c (+538/-0)
modules/ssl/ssl_util_ssl.h (+80/-0)
modules/ssl/ssl_util_stapling.c (+873/-0)
modules/test/.indent.pro (+54/-0)
modules/test/Makefile.in (+3/-0)
modules/test/NWGNUmakefile (+257/-0)
modules/test/NWGNUoptfnexport (+256/-0)
modules/test/NWGNUoptfnimport (+256/-0)
modules/test/NWGNUopthookexport (+256/-0)
modules/test/NWGNUopthookimport (+256/-0)
modules/test/README (+1/-0)
modules/test/config.m4 (+13/-0)
modules/test/mod_dialup.c (+306/-0)
modules/test/mod_optional_fn_export.c (+48/-0)
modules/test/mod_optional_fn_export.h (+19/-0)
modules/test/mod_optional_fn_import.c (+55/-0)
modules/test/mod_optional_hook_export.c (+44/-0)
modules/test/mod_optional_hook_export.h (+24/-0)
modules/test/mod_optional_hook_import.c (+45/-0)
os/.indent.pro (+54/-0)
os/Makefile.in (+4/-0)
os/bs2000/ebcdic.c (+210/-0)
os/bs2000/ebcdic.h (+33/-0)
os/bs2000/os.c (+136/-0)
os/bs2000/os.h (+40/-0)
os/config.m4 (+26/-0)
os/netware/modules.c (+117/-0)
os/netware/netware_config_layout.h (+31/-0)
os/netware/os.h (+57/-0)
os/netware/pre_nw.h (+70/-0)
os/netware/util_nw.c (+112/-0)
os/os2/Makefile.in (+5/-0)
os/os2/config.m4 (+3/-0)
os/os2/core.mk (+7/-0)
os/os2/core_header.def (+19/-0)
os/os2/os.h (+40/-0)
os/os2/util_os2.c (+39/-0)
os/unix/Makefile.in (+5/-0)
os/unix/config.m4 (+7/-0)
os/unix/os.h (+52/-0)
os/unix/unixd.c (+733/-0)
os/unix/unixd.h (+142/-0)
os/win32/BaseAddr.ref (+134/-0)
os/win32/Makefile.in (+5/-0)
os/win32/ap_regkey.c (+642/-0)
os/win32/modules.c (+56/-0)
os/win32/os.h (+139/-0)
os/win32/util_win32.c (+148/-0)
os/win32/win32_config_layout.h (+31/-0)
server/.indent.pro (+54/-0)
server/Makefile.in (+105/-0)
server/NWGNUmakefile (+261/-0)
server/buildmark.c (+29/-0)
server/config.c (+2738/-0)
server/config.m4 (+19/-0)
server/connection.c (+221/-0)
server/core.c (+5470/-0)
server/core_filters.c (+889/-0)
server/eoc_bucket.c (+55/-0)
server/eor_bucket.c (+102/-0)
server/error_bucket.c (+77/-0)
server/gen_test_char.c (+173/-0)
server/gen_test_char.dep (+7/-0)
server/gen_test_char.dsp (+94/-0)
server/gen_test_char.mak (+234/-0)
server/listen.c (+938/-0)
server/log.c (+1957/-0)
server/main.c (+851/-0)
server/mpm/MPM.NAMING (+14/-0)
server/mpm/Makefile.in (+4/-0)
server/mpm/config.m4 (+128/-0)
server/mpm/config2.m4 (+89/-0)
server/mpm/event/Makefile.in (+1/-0)
server/mpm/event/config.m4 (+15/-0)
server/mpm/event/config3.m4 (+7/-0)
server/mpm/event/event.c (+3876/-0)
server/mpm/event/mpm_default.h (+56/-0)
server/mpm/mpmt_os2/Makefile.in (+1/-0)
server/mpm/mpmt_os2/config.m4 (+10/-0)
server/mpm/mpmt_os2/config5.m4 (+3/-0)
server/mpm/mpmt_os2/mpm_default.h (+57/-0)
server/mpm/mpmt_os2/mpmt_os2.c (+614/-0)
server/mpm/mpmt_os2/mpmt_os2_child.c (+488/-0)
server/mpm/netware/mpm_default.h (+78/-0)
server/mpm/netware/mpm_netware.c (+1363/-0)
server/mpm/prefork/Makefile.in (+1/-0)
server/mpm/prefork/config.m4 (+7/-0)
server/mpm/prefork/config3.m4 (+1/-0)
server/mpm/prefork/mpm_default.h (+51/-0)
server/mpm/prefork/prefork.c (+1513/-0)
server/mpm/winnt/Makefile.in (+1/-0)
server/mpm/winnt/child.c (+1266/-0)
server/mpm/winnt/config.m4 (+10/-0)
server/mpm/winnt/config3.m4 (+2/-0)
server/mpm/winnt/mpm_default.h (+60/-0)
server/mpm/winnt/mpm_winnt.c (+1785/-0)
server/mpm/winnt/mpm_winnt.h (+96/-0)
server/mpm/winnt/nt_eventlog.c (+171/-0)
server/mpm/winnt/service.c (+1241/-0)
server/mpm/worker/Makefile.in (+2/-0)
server/mpm/worker/config.m4 (+11/-0)
server/mpm/worker/config3.m4 (+5/-0)
server/mpm/worker/mpm_default.h (+55/-0)
server/mpm/worker/worker.c (+2378/-0)
server/mpm_common.c (+571/-0)
server/mpm_fdqueue.c (+530/-0)
server/mpm_fdqueue.h (+110/-0)
server/mpm_unix.c (+1107/-0)
server/protocol.c (+2456/-0)
server/provider.c (+197/-0)
server/request.c (+2511/-0)
server/scoreboard.c (+672/-0)
server/util.c (+3309/-0)
server/util_cfgtree.c (+46/-0)
server/util_charset.c (+28/-0)
server/util_cookies.c (+290/-0)
server/util_debug.c (+236/-0)
server/util_ebcdic.c (+117/-0)
server/util_expr_eval.c (+1822/-0)
server/util_expr_parse.c (+2130/-0)
server/util_expr_parse.h (+104/-0)
server/util_expr_parse.y (+217/-0)
server/util_expr_private.h (+141/-0)
server/util_expr_scan.c (+2669/-0)
server/util_expr_scan.l (+400/-0)
server/util_fcgi.c (+290/-0)
server/util_filter.c (+732/-0)
server/util_md5.c (+166/-0)
server/util_mutex.c (+561/-0)
server/util_pcre.c (+343/-0)
server/util_regex.c (+210/-0)
server/util_script.c (+900/-0)
server/util_time.c (+306/-0)
server/util_xml.c (+140/-0)
server/vhost.c (+1267/-0)
srclib/Makefile.in (+5/-0)
support/.indent.pro (+54/-0)
support/Makefile.in (+89/-0)
support/NWGNUab (+330/-0)
support/NWGNUhtcacheclean (+253/-0)
support/NWGNUhtdbm (+252/-0)
support/NWGNUhtdigest (+251/-0)
support/NWGNUhtpasswd (+252/-0)
support/NWGNUhttxt2dbm (+251/-0)
support/NWGNUlogres (+258/-0)
support/NWGNUmakefile (+51/-0)
support/NWGNUrotlogs (+250/-0)
support/README (+65/-0)
support/SHA1/README.sha1 (+34/-0)
support/SHA1/convert-sha1.pl (+36/-0)
support/SHA1/htpasswd-sha1.pl (+22/-0)
support/SHA1/ldif-sha1.example (+19/-0)
support/ab.c (+2623/-0)
support/ab.dep (+37/-0)
support/ab.dsp (+106/-0)
support/ab.mak (+317/-0)
support/abs.dep (+37/-0)
support/abs.dsp (+144/-0)
support/abs.mak (+374/-0)
support/apachectl.in (+106/-0)
support/apxs.in (+791/-0)
support/check_forensic (+51/-0)
support/checkgid.c (+110/-0)
support/config.m4 (+151/-0)
support/dbmmanage.in (+312/-0)
support/envvars-std.in (+28/-0)
support/fcgistarter.c (+220/-0)
support/fcgistarter.dep (+29/-0)
support/fcgistarter.dsp (+106/-0)
support/fcgistarter.mak (+317/-0)
support/htcacheclean.c (+1829/-0)
support/htcacheclean.dep (+37/-0)
support/htcacheclean.dsp (+106/-0)
support/htcacheclean.mak (+317/-0)
support/htdbm.c (+472/-0)
support/htdbm.dep (+58/-0)
support/htdbm.dsp (+110/-0)
support/htdbm.mak (+326/-0)
support/htdigest.c (+303/-0)
support/htdigest.dep (+27/-0)
support/htdigest.dsp (+106/-0)
support/htdigest.mak (+317/-0)
support/htpasswd.c (+524/-0)
support/htpasswd.dep (+57/-0)
support/htpasswd.dsp (+110/-0)
support/htpasswd.mak (+326/-0)
support/httxt2dbm.c (+335/-0)
support/httxt2dbm.dep (+26/-0)
support/httxt2dbm.dsp (+106/-0)
support/httxt2dbm.mak (+317/-0)
support/list_hooks.pl (+101/-0)
support/log_server_status.in (+76/-0)
support/logresolve.c (+329/-0)
support/logresolve.dep (+26/-0)
support/logresolve.dsp (+106/-0)
support/logresolve.mak (+317/-0)
support/logresolve.pl.in (+225/-0)
support/passwd_common.c (+344/-0)
support/passwd_common.h (+128/-0)
support/phf_abuse_log.cgi.in (+38/-0)
support/rotatelogs.c (+781/-0)
support/rotatelogs.dep (+28/-0)
support/rotatelogs.dsp (+106/-0)
support/rotatelogs.mak (+317/-0)
support/split-logfile.in (+69/-0)
support/suexec.c (+685/-0)
support/suexec.h (+109/-0)
support/win32/ApacheMonitor.c (+1671/-0)
support/win32/ApacheMonitor.dep (+18/-0)
support/win32/ApacheMonitor.dsp (+143/-0)
support/win32/ApacheMonitor.h (+78/-0)
support/win32/ApacheMonitor.mak (+309/-0)
support/win32/ApacheMonitor.manifest (+10/-0)
support/win32/ApacheMonitor.rc (+103/-0)
support/win32/wintty.c (+374/-0)
support/win32/wintty.dep (+5/-0)
support/win32/wintty.dsp (+106/-0)
support/win32/wintty.mak (+317/-0)
test/.indent.pro (+54/-0)
test/Makefile.in (+20/-0)
test/README (+3/-0)
test/check_chunked (+58/-0)
test/cls.c (+182/-0)
test/make_sni.sh (+396/-0)
test/tcpdumpscii.txt (+50/-0)
test/test-writev.c (+101/-0)
test/test_find.c (+78/-0)
test/test_limits.c (+200/-0)
test/test_parser.c (+75/-0)
test/test_select.c (+46/-0)
test/time-sem.c (+591/-0)
Reviewer Review Type Date Requested Status
Robie Basak Approve
Canonical Server Pending
Review via email: mp+352331@code.launchpad.net

Description of the change

Please use local git for the review, as the LP diff is incorrect. It's correct until it reaches docs/manual, where it breaks. Probably because of the empty-dir-in-git problem.

Merge from debian's 2.4.34-1. The tricky part here was to recover the rich history from the previous uploads to ubuntu: 2.4.33-3ubuntu1, 3ubuntu2 and 3ubuntu3, as the upload tag didn't match what was expected due to the empty directories in the apache2 orig tarball.

I think I recovered that just fine, and wrote up what I did in my tips & tricks doc at https://docs.google.com/document/d/1uS-Ci89VWnl_M7DqqOuj5yM6_hx13EwNI86a0n25qVw/edit#bookmark=id.w6zg30wxw10h

Besides that, of note in this merge is that you can see in the 3ubuntu2 and 3ubuntu3 uploads that I first dropped both mod_md and mod_uwsgi_proxy, and later restored uwsgi, so I squashed all that together which resulted in just the removal of mod_md.

This upload is also fixing #1782806, which I will link to the MP and close manually later.

I can make the google doc public, or better yet, update our wiki.

PPA with test packages: ppa:ahasenack/apache2-merge-2.4.34-1

To post a comment you must log in.
Revision history for this message
Andreas Hasenack (ahasenack) wrote :

I'm still going to run the lp:qa-regression-testing apache test script.

Revision history for this message
Andreas Hasenack (ahasenack) wrote :
Download full text (3.3 KiB)

qa-regression-testing tests are fine:
(master)ubuntu@cosmic-apache-merge:~/qa-regression-testing/scripts$ sudo ./test-apache2.py 2>&1 | tee ~/test-apache2.log
test_basic_rewrite (__main__.BasicTest)
Test basic rewrite functionality ... ok
test_cve_2007_6203 (__main__.BasicTest)
Test CVE-2007-6203 ... ok
test_cve_2007_6420 (__main__.BasicTest)
Test CVE-2007-6420 ... ok
test_cve_2008_2168 (__main__.BasicTest)
Test CVE-2008-2168 ... ok
test_cve_2008_2939 (__main__.BasicTest)
Test CVE-2008-2939 ... ok
test_cve_2009_1890 (__main__.BasicTest)
Test CVE-2009-1890 ... ok
test_cve_2011_0419 (__main__.BasicTest)
Test CVE-2011-0419 ... ok
test_cve_2011_3192 (__main__.BasicTest)
Test CVE-2011-3192 ... ok
test_cve_2011_3192_gzip (__main__.BasicTest)
Test CVE-2011-3192 (gzip) ... ok
test_cve_2011_3192_regression_1 (__main__.BasicTest)
Test CVE-2011-3192 regression 1 ... ok
test_cve_2011_3192_regression_2 (__main__.BasicTest)
Test CVE-2011-3192 regression 2 ... ok
test_cve_2011_3192_request_range (__main__.BasicTest)
Test CVE-2011-3192 (Request-Range) ... ok
test_cve_2011_3368 (__main__.BasicTest)
Test CVE-2011-3368 ... ok
test_cve_2011_3368_proto_09 (__main__.BasicTest)
Test CVE-2011-3368 w/http protocol 0.9 ... ok
test_cve_2011_4317 (__main__.BasicTest)
Test CVE-2011-4317 ... ok
test_cve_2012_4929_default (__main__.BasicTest)
Test CVE-2012-4929 (compression default setting) ... ok
test_cve_2012_4929_off (__main__.BasicTest)
Test CVE-2012-4929 (compression off) ... ok
test_cve_2012_4929_on (__main__.BasicTest)
Test CVE-2012-4929 (compression on) ... ok
test_daemons (__main__.BasicTest)
Test daemon ... ok
test_http (__main__.BasicTest)
Test http ... ok
test_lp1626883 (__main__.BasicTest)
Test lp1626883 ... ok
test_mod_cgid (__main__.BasicTest)
Test mod_cgid ... ok
test_mod_dav (__main__.BasicTest)
Test mod_dav ... ok
test_mod_dav_svn (__main__.BasicTest)
Test mod_dav_svn ... ok
test_mod_deflate_input (__main__.BasicTest)
Test mod_deflate input compression ... ok
test_mod_status (__main__.BasicTest)
Test mod_status ... ok
test_php (__main__.BasicTest)
Test php ... ok
test_proxy_ftp (__main__.BasicTest)
Test ftp proxy ... ok
test_ssl (__main__.BasicTest)
Test https ... ok
test_ssl_tls_md5 (__main__.BasicTest)
Test whether https allows MD5 ... ok
test_ssl_tls_v1 (__main__.BasicTest)
Test connecting with TLS v1.0 ... ok
test_ssl_tls_v1_1 (__main__.BasicTest)
Test connecting with TLS v1.1 ... ok
test_ssl_tls_v1_2 (__main__.BasicTest)
Test connecting with TLS v1.2 ... ok
test_status (__main__.BasicTest)
Test status (apache2ctl) ... ok
test_htpasswd_des (__main__.HTPasswdTest)
Test htpasswd to ensure crypt returns sane des results ... ok
test_htpasswd_md5 (__main__.HTPasswdTest)
Test htpasswd to ensure crypt returns sane md5 results ... ok
test_htpasswd_sha (__main__.HTPasswdTest)
Test htpasswd to ensure crypt returns sane sha results ... ok

----------------------------------------------------------------------
Ran 37 tests in 430.533s

OK

(master)ubuntu@cosmic-apache-merge:~/qa-regression-testing/scripts$ apt-cache policy apache2
apache2:
  Installed: 2.4.34-1ubuntu1~ppa1
  Candidate: 2.4.34-1ubuntu1~ppa1
  Version table:
 *** 2.4.34-1ubuntu1~ppa1 500
        50...

Read more...

Revision history for this message
Robie Basak (racb) wrote :

Tags are structurally correct, except for an expected mismatch against old/ubuntu to both deconstruct and logical which I assume is an empty directory change artifact.

Logical verified transferred exactly, no changes. Changelog entry accurately describes changes. All of the delta seems appropriate to keep. md disablement still seems relevant as libxmltooling7 still requires libcurl3. I'm OK with this given that md is still listed as experimental upstream.

lgtm

review: Approve
Revision history for this message
Andreas Hasenack (ahasenack) wrote :

DEP8 tests are also good:
(...)
autopkgtest [11:27:56]: test chroot: - - - - - - - - - - results - - - - - - - - - -
chroot PASS
autopkgtest [11:27:56]: @@@@@@@@@@@@@@@@@@@@ summary
run-test-suite PASS
duplicate-module-load PASS
htcacheclean PASS
default-mods PASS
ssl-passphrase PASS
check-http2 PASS
chroot PASS

Revision history for this message
Andreas Hasenack (ahasenack) wrote :

Thanks for the review, Robie. Could you please set the MP to "approved" and push the upload tag? I can then dput the package and follow it through migration.

Revision history for this message
Robie Basak (racb) wrote :

On Mon, Aug 06, 2018 at 02:30:05PM -0000, Andreas Hasenack wrote:
> Thanks for the review, Robie. Could you please set the MP to "approved" and push the upload tag?

Sorry, I keep forgetting about this. Now done.

Revision history for this message
Andreas Hasenack (ahasenack) wrote :

apache2 migrated, marking MP as merged and closing linked bug.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/apache2-bin.install b/debian/apache2-bin.install
2index 63c573f..3d1bdf1 100644
3--- a/debian/apache2-bin.install
4+++ b/debian/apache2-bin.install
5@@ -1,2 +1,3 @@
6 /usr/lib/apache2/modules/
7 /usr/sbin/apache2
8+debian/apache2.py usr/share/apport/package-hooks
9diff --git a/debian/apache2-utils.ufw.profile b/debian/apache2-utils.ufw.profile
10new file mode 100644
11index 0000000..974a655
12--- /dev/null
13+++ b/debian/apache2-utils.ufw.profile
14@@ -0,0 +1,14 @@
15+[Apache]
16+title=Web Server
17+description=Apache v2 is the next generation of the omnipresent Apache web server.
18+ports=80/tcp
19+
20+[Apache Secure]
21+title=Web Server (HTTPS)
22+description=Apache v2 is the next generation of the omnipresent Apache web server.
23+ports=443/tcp
24+
25+[Apache Full]
26+title=Web Server (HTTP,HTTPS)
27+description=Apache v2 is the next generation of the omnipresent Apache web server.
28+ports=80,443/tcp
29diff --git a/debian/apache2.dirs b/debian/apache2.dirs
30index 6089013..1aa6d3c 100644
31--- a/debian/apache2.dirs
32+++ b/debian/apache2.dirs
33@@ -10,3 +10,4 @@ var/cache/apache2/mod_cache_disk
34 var/lib/apache2
35 var/log/apache2
36 var/www/html
37+/etc/ufw/applications.d/apache2
38diff --git a/debian/apache2.install b/debian/apache2.install
39index b6ad789..92865fc 100644
40--- a/debian/apache2.install
41+++ b/debian/apache2.install
42@@ -8,3 +8,4 @@ debian/config-dir/*.conf /etc/apache2
43 debian/config-dir/envvars /etc/apache2
44 debian/config-dir/magic /etc/apache2
45 debian/debhelper/apache2-maintscript-helper /usr/share/apache2/
46+debian/apache2-utils.ufw.profile /etc/ufw/applications.d/
47diff --git a/debian/apache2.postrm b/debian/apache2.postrm
48index a68583c..b0e5d7b 100644
49--- a/debian/apache2.postrm
50+++ b/debian/apache2.postrm
51@@ -33,6 +33,7 @@ is_default_index_html () {
52 776221a94e5a174dc2396c0f3f6b6a74
53 c481228d439cbb54bdcedbaec5bbb11a
54 e2620d4a5a0f8d80dd4b16de59af981f
55+ 3526531ccd6c6a1d2340574a305a18f8
56 EOF
57 }
58
59diff --git a/debian/apache2.py b/debian/apache2.py
60new file mode 100644
61index 0000000..a9fb9d8
62--- /dev/null
63+++ b/debian/apache2.py
64@@ -0,0 +1,48 @@
65+#!/usr/bin/python
66+
67+'''apport hook for apache2
68+
69+(c) 2010 Adam Sommer.
70+Author: Adam Sommer <asommer@ubuntu.com>
71+
72+This program is free software; you can redistribute it and/or modify it
73+under the terms of the GNU General Public License as published by the
74+Free Software Foundation; either version 2 of the License, or (at your
75+option) any later version. See http://www.gnu.org/copyleft/gpl.html for
76+the full text of the license.
77+'''
78+
79+from apport.hookutils import *
80+import os
81+
82+SITES_ENABLED_DIR = '/etc/apache2/sites-enabled/'
83+
84+def add_info(report, ui):
85+ if os.path.isdir(SITES_ENABLED_DIR):
86+ response = ui.yesno("The contents of your " + SITES_ENABLED_DIR + " directory "
87+ "may help developers diagnose your bug more "
88+ "quickly. However, it may contain sensitive "
89+ "information. Do you want to include it in your "
90+ "bug report?")
91+
92+ if response == None: # user cancelled
93+ raise StopIteration
94+
95+ elif response == True:
96+ # Attache config files in /etc/apache2/sites-enabled and listing of files in /etc/apache2/conf.d
97+ for conf_file in os.listdir(SITES_ENABLED_DIR):
98+ attach_file_if_exists(report, SITES_ENABLED_DIR + conf_file, conf_file)
99+
100+ try:
101+ report['Apache2ConfdDirListing'] = str(os.listdir('/etc/apache2/conf.d'))
102+ except OSError:
103+ report['Apache2ConfdDirListing'] = str(False)
104+
105+ # Attach default config files if changed.
106+ attach_conffiles(report, 'apache2', conffiles=None)
107+
108+ # Attach the error.log file.
109+ attach_file(report, '/var/log/apache2/error.log', key='error.log')
110+
111+ # Get loaded modules.
112+ report['Apache2Modules'] = root_command_output(['/usr/sbin/apachectl', '-D DUMP_MODULES'])
113diff --git a/debian/changelog b/debian/changelog
114index 42e2f4f..5a42a14 100644
115--- a/debian/changelog
116+++ b/debian/changelog
117@@ -1,3 +1,24 @@
118+apache2 (2.4.34-1ubuntu1) cosmic; urgency=medium
119+
120+ * Merge with Debian unstable. Remaining changes:
121+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
122+ apache2.dirs}: Add ufw profiles.
123+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
124+ - debian/patches/086_svn_cross_compiles: Backport several cross
125+ fixes from upstream
126+ - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm: replace
127+ Debian with Ubuntu on default page.
128+ + d/source/include-binaries: add Ubuntu icon file
129+ - d/t/control, d/t/check-http2: add basic test for http2 support
130+ - d/control, d/rules, d/config-dir/mods-available/md.load: don't build
131+ libapache2-mod-md, as that makes apache2-bin pull in libcurl4 which
132+ cannot be coinstalled with libcurl3. That situation breaks the
133+ installation of libapache2-mod-shib2. See
134+ https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1770242/comments/1
135+ for details.
136+
137+ -- Andreas Hasenack <andreas@canonical.com> Fri, 03 Aug 2018 17:09:27 -0300
138+
139 apache2 (2.4.34-1) unstable; urgency=medium
140
141 [ Ondřej Surý ]
142@@ -16,6 +37,87 @@ apache2 (2.4.34-1) unstable; urgency=medium
143
144 -- Stefan Fritsch <sf@debian.org> Fri, 27 Jul 2018 21:37:37 +0200
145
146+apache2 (2.4.33-3ubuntu3) cosmic; urgency=medium
147+
148+ * d/control, d/rules, d/config-dir/mods-available/proxy_uwsgi.load:
149+ re-enable proxy_uwsgi, as the uwsgi source no longer builds this module.
150+
151+ -- Andreas Hasenack <andreas@canonical.com> Thu, 28 Jun 2018 10:07:06 -0300
152+
153+apache2 (2.4.33-3ubuntu2) cosmic; urgency=medium
154+
155+ * d/control, d/rules: Don't build libapache2-mod-proxy-uwsgi and
156+ libapache2-mod-md until we figure out their transitions. libapache2-mod-md
157+ in particular is problematic because that makes apache2-bin pull in
158+ libcurl4 which cannot be coinstalled with libcurl3. That situation breaks
159+ the installation of libapache2-mod-shib2. See
160+ https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/1770242/comments/1
161+ for details.
162+ - Don't ship md.load and remove build-requires that were added because of
163+ mod-md (see
164+ https://salsa.debian.org/apache-team/apache2/commit/b9d37f2a96da2fd69bf)
165+ - Remove proxy_uwsgi.load as we are not building it for now (see
166+ https://salsa.debian.org/apache-team/apache2/commit/4e3168562d75ce398b9)
167+
168+ -- Andreas Hasenack <andreas@canonical.com> Thu, 17 May 2018 14:46:19 +0000
169+
170+apache2 (2.4.33-3ubuntu1) cosmic; urgency=medium
171+
172+ * Merge with Debian unstable (LP: #1770242). Remaining changes:
173+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
174+ apache2.dirs}: Add ufw profiles.
175+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
176+ - debian/patches/086_svn_cross_compiles: Backport several cross
177+ fixes from upstream
178+ - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm: replace
179+ Debian with Ubuntu on default page.
180+ + d/source/include-binaries: add Ubuntu icon file
181+ - d/t/control, d/t/check-http2: add basic test for http2 support
182+ * Drop:
183+ - SECURITY UPDATE: DoS via missing header with AuthLDAPCharsetConfig
184+ + debian/patches/CVE-2017-15710.patch: fix language long names
185+ detection as short name in modules/aaa/mod_authnz_ldap.c.
186+ + CVE-2017-15710
187+ - SECURITY UPDATE: incorrect <FilesMatch> matching
188+ + debian/patches/CVE-2017-15715.patch: allow to configure
189+ global/default options for regexes, like caseless matching or
190+ extended format in include/ap_regex.h, server/core.c,
191+ server/util_pcre.c.
192+ + CVE-2017-15715
193+ - SECURITY UPDATE: mod_session header manipulation
194+ + debian/patches/CVE-2018-1283.patch: strip Session header when
195+ SessionEnv is on in modules/session/mod_session.c.
196+ + CVE-2018-1283
197+ - SECURITY UPDATE: DoS via specially-crafted request
198+ + debian/patches/CVE-2018-1301.patch: ensure that read lines are NUL
199+ terminated on any error, not only on buffer full in
200+ server/protocol.c.
201+ + CVE-2018-1301
202+ - SECURITY UPDATE: mod_cache_socache DoS
203+ + debian/patches/CVE-2018-1303.patch: fix caching of empty headers up
204+ to carriage return in modules/cache/mod_cache_socache.c.
205+ + CVE-2018-1303
206+ - SECURITY UPDATE: insecure nonce generation
207+ + debian/patches/CVE-2018-1312.patch: actually use the secret when
208+ generating nonces in modules/aaa/mod_auth_digest.c.
209+ + CVE-2018-1312
210+ - Correct systemd-sysv-generator behavior by customizing some
211+ parameters:
212+ + d/apache2-systemd.conf: add a drop-in file to specify some
213+ parameters for the systemd unit (type=Forking and
214+ RemainsAfterExit=no), this allow a correct state synchronisation
215+ between systemctl status and actual state of apache2 daemon.
216+ + d/apache2.install: place the apache2-systemd.conf file in the
217+ correct location.
218+ [type=Forking already in the base systemd service file, and
219+ RemainsAfterExit=no is the default value, so no need to
220+ customize these anymore.]
221+ - Avoid crashes, hangs and loops by fixing mod_ldap locking: (LP #1752683)
222+ + added debian/patches/util_ldap_cache_lock_fix.patch
223+ [Already applied upstream]
224+
225+ -- Andreas Hasenack <andreas@canonical.com> Tue, 15 May 2018 11:03:34 -0300
226+
227 apache2 (2.4.33-3) unstable; urgency=medium
228
229 * Add Breaks for libapache2-mod-proxy-uwsgi and libapache2-mod-md, too.
230@@ -88,6 +190,91 @@ apache2 (2.4.29-2) unstable; urgency=medium
231
232 -- Ondřej Surý <ondrej@debian.org> Sun, 14 Jan 2018 11:01:58 +0000
233
234+apache2 (2.4.29-1ubuntu4.1) bionic-security; urgency=medium
235+
236+ * SECURITY UPDATE: DoS via missing header with AuthLDAPCharsetConfig
237+ - debian/patches/CVE-2017-15710.patch: fix language long names
238+ detection as short name in modules/aaa/mod_authnz_ldap.c.
239+ - CVE-2017-15710
240+ * SECURITY UPDATE: incorrect <FilesMatch> matching
241+ - debian/patches/CVE-2017-15715.patch: allow to configure
242+ global/default options for regexes, like caseless matching or
243+ extended format in include/ap_regex.h, server/core.c,
244+ server/util_pcre.c.
245+ - CVE-2017-15715
246+ * SECURITY UPDATE: mod_session header manipulation
247+ - debian/patches/CVE-2018-1283.patch: strip Session header when
248+ SessionEnv is on in modules/session/mod_session.c.
249+ - CVE-2018-1283
250+ * SECURITY UPDATE: DoS via specially-crafted request
251+ - debian/patches/CVE-2018-1301.patch: ensure that read lines are NUL
252+ terminated on any error, not only on buffer full in
253+ server/protocol.c.
254+ - CVE-2018-1301
255+ * SECURITY UPDATE: mod_cache_socache DoS
256+ - debian/patches/CVE-2018-1303.patch: fix caching of empty headers up
257+ to carriage return in modules/cache/mod_cache_socache.c.
258+ - CVE-2018-1303
259+ * SECURITY UPDATE: insecure nonce generation
260+ - debian/patches/CVE-2018-1312.patch: actually use the secret when
261+ generating nonces in modules/aaa/mod_auth_digest.c.
262+ - CVE-2018-1312
263+
264+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Wed, 25 Apr 2018 07:38:24 -0400
265+
266+apache2 (2.4.29-1ubuntu4) bionic; urgency=medium
267+
268+ * Avoid crashes, hangs and loops by fixing mod_ldap locking: (LP: #1752683)
269+ - added debian/patches/util_ldap_cache_lock_fix.patch
270+
271+ -- Rafael David Tinoco <rafael.tinoco@canonical.com> Fri, 02 Mar 2018 02:19:31 +0000
272+
273+apache2 (2.4.29-1ubuntu3) bionic; urgency=medium
274+
275+ * Switch back to OpenSSL 1.1.
276+
277+ -- Dimitri John Ledkov <xnox@ubuntu.com> Tue, 06 Feb 2018 11:57:20 +0000
278+
279+apache2 (2.4.29-1ubuntu2) bionic; urgency=medium
280+
281+ * enable http2 (LP: #1687454) by stopping to disable it
282+ - debian/control: no more removed libnghttp2-dev Build-Depends (in universe).
283+ - debian/config-dir/mods-available/http2.load: no more removed.
284+ - debian/rules: no more removed proxy_http2 from configure.
285+ * d/t/control, d/t/check-http2: add basic test for http2 support
286+
287+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Tue, 05 Dec 2017 17:25:39 +0100
288+
289+apache2 (2.4.29-1ubuntu1) bionic; urgency=medium
290+
291+ * Merge with Debian unstable. Remaining changes:
292+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
293+ apache2.dirs}: Add ufw profiles.
294+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
295+ - debian/patches/086_svn_cross_compiles: Backport several cross
296+ fixes from upstream
297+ - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm: replace
298+ Debian with Ubuntu on default page.
299+ + d/source/include-binaries: add Ubuntu icon file
300+ - Correct systemd-sysv-generator behavior by customizing some
301+ parameters:
302+ + d/apache2-systemd.conf: add a drop-in file to specify some
303+ parameters for the systemd unit (type=Forking and
304+ RemainsAfterExit=no), this allow a correct state synchronisation
305+ between systemctl status and actual state of apache2 daemon.
306+ + d/apache2.install: place the apache2-systemd.conf file in the
307+ correct location.
308+ - Don't build http2 module (nghttp2 still not in main) (LP 1687454)
309+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
310+ + debian/config-dir/mods-available/http2.load: removed.
311+ + debian/rules: removed proxy_http2 from configure.
312+ * Switch back to OpenSSL 1.0 as we don't yet have 1.1:
313+ - debian/control: switch BuildDepends to libssl1.0-dev
314+ - debian/control: remove Breaks on gridsite and libapache2-mod-dacs
315+ - debian/rules: remove openssl virtual package and logic
316+
317+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Fri, 10 Nov 2017 10:51:46 -0500
318+
319 apache2 (2.4.29-1) unstable; urgency=medium
320
321 [ Stefan Fritsch ]
322@@ -152,6 +339,47 @@ apache2 (2.4.27-3) experimental; urgency=medium
323
324 -- Stefan Fritsch <sf@debian.org> Sun, 16 Jul 2017 23:11:07 +0200
325
326+apache2 (2.4.27-2ubuntu3) artful; urgency=medium
327+
328+ * SECURITY UPDATE: optionsbleed information leak
329+ - debian/patches/CVE-2017-9798.patch: disallow method registration
330+ at run time in server/core.c.
331+ - CVE-2017-9798
332+
333+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Mon, 18 Sep 2017 11:05:48 -0400
334+
335+apache2 (2.4.27-2ubuntu2) artful; urgency=medium
336+
337+ * Undrop (LP 1658469):
338+ - Don't build http2 module (nghttp2 still not in main) (LP 1687454)
339+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
340+ + debian/config-dir/mods-available/http2.load: removed.
341+ + debian/rules: removed proxy_http2 from configure.
342+
343+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Wed, 02 Aug 2017 13:04:45 -0400
344+
345+apache2 (2.4.27-2ubuntu1) artful; urgency=medium
346+
347+ * Merge with Debian unstable (LP: #1702582). Remaining changes:
348+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
349+ apache2.dirs}: Add ufw profiles.
350+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
351+ - debian/patches/086_svn_cross_compiles: Backport several cross
352+ fixes from upstream
353+ - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm: replace
354+ Debian with Ubuntu on default page.
355+ + d/source/include-binaries: add Ubuntu icon file
356+ - Correct systemd-sysv-generator behavior by customizing some
357+ parameters:
358+ + d/apache2-systemd.conf: add a drop-in file to specify some
359+ parameters for the systemd unit (type=Forking and
360+ RemainsAfterExit=no), this allow a correct state synchronisation
361+ between systemctl status and actual state of apache2 daemon.
362+ + d/apache2.install: place the apache2-systemd.conf file in the
363+ correct location.
364+
365+ -- Nishanth Aravamudan <nish.aravamudan@canonical.com> Thu, 27 Jul 2017 13:38:39 -0700
366+
367 apache2 (2.4.27-2) unstable; urgency=medium
368
369 * Switch back to openssl 1.0 for now. The transition to 1.1 needs more
370@@ -181,6 +409,55 @@ apache2 (2.4.25-4) unstable; urgency=high
371
372 -- Stefan Fritsch <sf@debian.org> Tue, 20 Jun 2017 21:31:51 +0200
373
374+apache2 (2.4.25-3ubuntu3) artful; urgency=medium
375+
376+ * Re-Drop (LP: #1658469):
377+ - Don't build experimental http2 module for LTS:
378+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
379+ + debian/config-dir/mods-available/http2.load: removed.
380+ + debian/rules: removed proxy_http2 from configure.
381+ + debian/apache2.maintscript: remove http2 conffile.
382+
383+ -- Nishanth Aravamudan <nish.aravamudan@canonical.com> Mon, 01 May 2017 09:55:11 -0700
384+
385+apache2 (2.4.25-3ubuntu2) zesty; urgency=medium
386+ * Undrop (LP 1658469):
387+ - Don't build experimental http2 module for LTS:
388+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
389+ + debian/config-dir/mods-available/http2.load: removed.
390+ + debian/rules: removed proxy_http2 from configure.
391+ + debian/apache2.maintscript: remove http2 conffile.
392+
393+ -- Nishanth Aravamudan <nish.aravamudan@canonical.com> Fri, 10 Feb 2017 08:53:43 -0800
394+
395+apache2 (2.4.25-3ubuntu1) zesty; urgency=medium
396+
397+ * Merge from Debian unstable (LP: #1663425). Remaining changes:
398+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
399+ apache2.dirs}: Add ufw profiles.
400+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
401+ - debian/patches/086_svn_cross_compiles: Backport several cross
402+ fixes from upstream
403+ - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm: replace
404+ Debian with Ubuntu on default page.
405+ + d/source/include-binaries: add Ubuntu icon file
406+ - Correct systemd-sysv-generator behavior by customizing some
407+ parameters:
408+ + d/apache2-systemd.conf: add a drop-in file to specify some
409+ parameters for the systemd unit (type=Forking and
410+ RemainsAfterExit=no), this allow a correct state synchronisation
411+ between systemctl status and actual state of apache2 daemon.
412+ + d/apache2.install: place the apache2-systemd.conf file in the
413+ correct location.
414+ * Drop (LP: #1658469):
415+ - Don't build experimental http2 module for LTS:
416+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
417+ + debian/config-dir/mods-available/http2.load: removed.
418+ + debian/rules: removed proxy_http2 from configure.
419+ + debian/apache2.maintscript: remove http2 conffile.
420+
421+ -- Nishanth Aravamudan <nish.aravamudan@canonical.com> Thu, 09 Feb 2017 15:48:28 -0800
422+
423 apache2 (2.4.25-3) unstable; urgency=medium
424
425 * Fix detection of systemd to fix 'apache2ctl start' on sysv-init.
426@@ -242,6 +519,39 @@ apache2 (2.4.25-1) unstable; urgency=medium
427
428 -- Stefan Fritsch <sf@debian.org> Wed, 21 Dec 2016 23:46:06 +0100
429
430+apache2 (2.4.23-8ubuntu1) zesty; urgency=medium
431+
432+ * Merge from Debian unstable (LP: #). Remaining changes:
433+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
434+ apache2.dirs}: Add ufw profiles.
435+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
436+ - debian/patches/086_svn_cross_compiles: Backport several cross
437+ fixes from upstream
438+ - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm,
439+ d/source/include-binaries: replace Debian with Ubuntu on default
440+ page.
441+ [ include-binaries change previously undocumented ]
442+ - Don't build experimental http2 module for LTS:
443+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
444+ + debian/config-dir/mods-available/http2.load: removed.
445+ + debian/rules: removed proxy_http2 from configure.
446+ + debian/apache2.maintscript: remove http2 conffile.
447+ [ Previously undocumented ]
448+ - Correct systemd-sysv-generator behavior by customizing some
449+ parameters:
450+ + d/apache2-systemd.conf: add a drop-in file to specify some
451+ parameters for the systemd unit (type=Forking and
452+ RemainsAfterExit=no), this allow a correct state synchronisation
453+ between systemctl status and actual state of apache2 daemon.
454+ + d/apache2.install: place the apache2-systemd.conf file in the
455+ correct location.
456+ * Drop:
457+ - debian/rules: Fix cross-building by passing
458+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
459+ [ Incorrectly indicated as delta, fixed by Debian in 2.4.18-2 ]
460+
461+ -- Nishanth Aravamudan <nish.aravamudan@canonical.com> Fri, 09 Dec 2016 11:02:38 +0100
462+
463 apache2 (2.4.23-8) unstable; urgency=medium
464
465 * Move the mod_ssl_openssl.h header and the dependency on libssl-dev to a
466@@ -252,6 +562,33 @@ apache2 (2.4.23-8) unstable; urgency=medium
467
468 -- Stefan Fritsch <sf@debian.org> Sun, 20 Nov 2016 00:33:13 +0100
469
470+apache2 (2.4.23-7ubuntu1) zesty; urgency=medium
471+
472+ * Merge from Debian unstable. Remaining changes:
473+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
474+ apache2.dirs}: Add ufw profiles.
475+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
476+ - debian/rules: Fix cross-building by passing
477+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
478+ - debian/patches/086_svn_cross_compiles: Backport several cross
479+ fixes from upstream
480+ - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm: replace
481+ Debian with Ubuntu on default page.
482+ - Don't build experimental http2 module for LTS:
483+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
484+ + debian/config-dir/mods-available/http2.load: removed.
485+ + debian/rules: removed proxy_http2 from configure.
486+ - Correct systemd-sysv-generator behavior by customizing some
487+ parameters:
488+ + d/apache2-systemd.conf: add a drop-in file to specify some
489+ parameters for the systemd unit (type=Forking and
490+ RemainsAfterExit=no), this allow a correct state synchronisation
491+ between systemctl status and actual state of apache2 daemon.
492+ + d/apache2.install: place the apache2-systemd.conf file in the
493+ correct location.
494+
495+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Wed, 16 Nov 2016 09:17:24 -0500
496+
497 apache2 (2.4.23-7) unstable; urgency=medium
498
499 * Make apache2-dev depend on openssl 1.0, too. Closes: #844160
500@@ -366,6 +703,55 @@ apache2 (2.4.20-1) unstable; urgency=medium
501
502 -- Stefan Fritsch <sf@debian.org> Sun, 10 Apr 2016 14:03:41 +0200
503
504+apache2 (2.4.18-2ubuntu4) yakkety; urgency=medium
505+
506+ * SECURITY UPDATE: proxy request header vulnerability (httpoxy)
507+ - debian/patches/CVE-2016-5387.patch: don't pass through HTTP_PROXY in
508+ server/util_script.c.
509+ - CVE-2016-5387
510+
511+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Mon, 18 Jul 2016 14:32:02 -0400
512+
513+apache2 (2.4.18-2ubuntu3) xenial; urgency=medium
514+
515+ [ Ryan Harper ]
516+ * Drop /etc/apache2/mods-available/http2.load. This was inadvertently
517+ introduced in 2.4.18-2ubuntu1. The intention is to not carry this at
518+ all, since http2 support is intentionally disabled (see LP 1531864).
519+ * d/apache2.maintscript: handle removal of http2.load conffile.
520+
521+ [ Robie Basak ]
522+ * Re-write Ryan's changelog entry.
523+
524+ -- Robie Basak <robie.basak@ubuntu.com> Fri, 15 Apr 2016 18:00:57 +0000
525+
526+apache2 (2.4.18-2ubuntu2) xenial; urgency=medium
527+
528+ * Correct systemd-sysv-generator behavior by customizing some parameters (LP: #1488962)
529+ - d/apache2-systemd.conf: add a drop-in file to specify some parameters for the systemd
530+ unit (type=Forking and RemainsAfterExit=no), this allow a correct state synchronisation
531+ between systemctl status and actual state of apache2 daemon.
532+ - d/apache2.install: place the apache2-systemd.conf file in the correct location.
533+
534+ -- Pierre-André MOREY <pierre-andre.morey@canonical.com> Fri, 08 Apr 2016 11:48:00 +0200
535+
536+apache2 (2.4.18-2ubuntu1) xenial; urgency=medium
537+
538+ * Merge from Debian unstable. Remaining changes:
539+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
540+ apache2.dirs}: Add ufw profiles.
541+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
542+ - debian/rules: Fix cross-building by passing
543+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
544+ - debian/patches/086_svn_cross_compiles: Backport several cross
545+ fixes from upstream
546+ - d/index.html: replace Debian with Ubuntu on default page.
547+ - Don't build experimental http2 module for LTS:
548+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
549+ + debian/config-dir/mods-available/http2.load: removed.
550+
551+ -- Timo Aaltonen <tjaalton@debian.org> Wed, 06 Apr 2016 00:18:31 +0300
552+
553 apache2 (2.4.18-2) unstable; urgency=low
554
555 * htcacheclean:
556@@ -391,6 +777,24 @@ apache2 (2.4.18-2) unstable; urgency=low
557
558 -- Stefan Fritsch <sf@debian.org> Mon, 28 Mar 2016 21:58:54 +0200
559
560+apache2 (2.4.18-1ubuntu1) xenial; urgency=medium
561+
562+ * Merge from Debian unstable. Remaining changes:
563+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
564+ apache2.dirs}: Add ufw profiles.
565+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
566+ - Add dep8 tests.
567+ - debian/rules: Fix cross-building by passing
568+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
569+ - debian/patches/086_svn_cross_compiles: Backport several cross
570+ fixes from upstream
571+ - d/index.html: replace Debian with Ubuntu on default page.
572+ - Don't build experimental http2 module for LTS:
573+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
574+ + debian/config-dir/mods-available/http2.load: removed.
575+
576+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Thu, 21 Jan 2016 15:15:22 -0500
577+
578 apache2 (2.4.18-1) unstable; urgency=medium
579
580 * New upstream release:
581@@ -398,12 +802,48 @@ apache2 (2.4.18-1) unstable; urgency=medium
582
583 -- Stefan Fritsch <sf@debian.org> Sat, 19 Dec 2015 09:26:14 +0100
584
585+apache2 (2.4.17-3ubuntu1) xenial; urgency=medium
586+
587+ * Merge from Debian unstable. Remaining changes:
588+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
589+ apache2.dirs}: Add ufw profiles.
590+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
591+ - Add dep8 tests.
592+ - debian/rules: Fix cross-building by passing
593+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
594+ - debian/patches/086_svn_cross_compiles: Backport several cross
595+ fixes from upstream
596+ - d/index.html: replace Debian with Ubuntu on default page.
597+ - Don't build experimental http2 module for LTS:
598+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
599+ + debian/config-dir/mods-available/http2.load: removed.
600+
601+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Thu, 03 Dec 2015 10:07:35 -0500
602+
603 apache2 (2.4.17-3) unstable; urgency=medium
604
605 * mpm_prefork: Fix segfault if started with -X. Closes: #805737
606
607 -- Stefan Fritsch <sf@debian.org> Mon, 23 Nov 2015 19:52:09 +0100
608
609+apache2 (2.4.17-2ubuntu1) xenial; urgency=medium
610+
611+ * Merge from Debian unstable. Remaining changes:
612+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
613+ apache2.dirs}: Add ufw profiles.
614+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
615+ - Add dep8 tests.
616+ - debian/rules: Fix cross-building by passing
617+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
618+ - debian/patches/086_svn_cross_compiles: Backport several cross
619+ fixes from upstream
620+ - d/index.html: replace Debian with Ubuntu on default page.
621+ - Don't build experimental http2 module for LTS:
622+ + debian/control: removed libnghttp2-dev Build-Depends (in universe).
623+ + debian/config-dir/mods-available/http2.load: removed.
624+
625+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Fri, 20 Nov 2015 09:11:52 -0500
626+
627 apache2 (2.4.17-2) unstable; urgency=medium
628
629 * Revert REDIRECT_URL to pre-2.4.17 behavior for now. The change broke
630@@ -414,6 +854,31 @@ apache2 (2.4.17-2) unstable; urgency=medium
631
632 -- Stefan Fritsch <sf@debian.org> Sat, 31 Oct 2015 23:17:11 +0100
633
634+apache2 (2.4.17-1ubuntu1) xenial; urgency=medium
635+
636+ * Merge from Debian unstable. Remaining changes:
637+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
638+ apache2.dirs}: Add ufw profiles.
639+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
640+ - Add dep8 tests.
641+ - debian/rules: Fix cross-building by passing
642+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
643+ - debian/patches/086_svn_cross_compiles: Backport several cross
644+ fixes from upstream
645+ - d/index.html: replace Debian with Ubuntu on default page.
646+ * Drop patches (applied upstream):
647+ - debian/patches/CVE-2015-3183.patch
648+ - debian/patches/CVE-2015-3185.patch
649+ * Drop changes (adopted in Debian):
650+ - Allow "triggers-awaited" and "triggers-pending" states in addition
651+ to "installed" when determining whether to defer actions or
652+ process deferred actions.
653+ * Don't build experimental http2 module for LTS
654+ - debian/control: removed libnghttp2-dev Build-Depends (in universe).
655+ - debian/config-dir/mods-available/http2.load: removed.
656+
657+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Fri, 30 Oct 2015 09:35:46 -0400
658+
659 apache2 (2.4.17-1) unstable; urgency=medium
660
661 [ Stefan Fritsch ]
662@@ -479,6 +944,49 @@ apache2 (2.4.16-1) unstable; urgency=medium
663
664 -- Stefan Fritsch <sf@debian.org> Sun, 02 Aug 2015 00:44:07 +0200
665
666+apache2 (2.4.12-2ubuntu2) wily; urgency=medium
667+
668+ * SECURITY UPDATE: request smuggling via chunked transfer encoding
669+ - debian/patches/CVE-2015-3183.patch: refactor chunk parsing in
670+ modules/http/http_filters.c.
671+ - CVE-2015-3183
672+ * SECURITY UPDATE: access restriction bypass via deprecated API
673+ - debian/patches/CVE-2015-3185.patch: deprecate old API and add new one
674+ in include/http_request.h, server/request.c.
675+ - CVE-2015-3185
676+
677+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Fri, 24 Jul 2015 09:56:09 -0400
678+
679+apache2 (2.4.12-2ubuntu1) wily; urgency=medium
680+
681+ * Merge from Debian unstable. Remaining changes:
682+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
683+ apache2.dirs}: Add ufw profiles.
684+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
685+ - Add dep8 tests.
686+ - debian/rules: Fix cross-building by passing
687+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
688+ - debian/patches/086_svn_cross_compiles: Backport several cross
689+ fixes from upstream
690+ - d/index.html: replace Debian with Ubuntu on default page.
691+ - Allow "triggers-awaited" and "triggers-pending" states in addition
692+ to "installed" when determining whether to defer actions or
693+ process deferred actions.
694+ * Drop patches (applied upstream):
695+ - d/p/split-logfile.patch
696+ - d/p/CVE-2015-0228.patch
697+ * Drop changes (superceded in Debian):
698+ - Cherry-pick versioned build-depend on dpkg from Debian for correct
699+ dpkg-maintscript-helper symlink_to_dir support.
700+ * Drop changes (adopted in Debian):
701+ - d/control, d/config-dir/mods-available/ssl.conf,
702+ d/ask-for-passphrase, d/apache2.install: Plymouth aware passphrase
703+ dialog program ask-for-passphrase.
704+ * Fix cross-building configure line in d/rules, which had bit-rotted in
705+ previous merges.
706+
707+ -- Robie Basak <robie.basak@ubuntu.com> Thu, 28 May 2015 16:34:00 +0000
708+
709 apache2 (2.4.12-2) unstable; urgency=medium
710
711 [ Jean-Michel Nirgal Vourgère ]
712@@ -528,6 +1036,28 @@ apache2 (2.4.10-10) unstable; urgency=medium
713
714 -- Stefan Fritsch <sf@debian.org> Sun, 15 Mar 2015 10:47:36 +0100
715
716+apache2 (2.4.10-9ubuntu1) vivid; urgency=medium
717+
718+ * Merge from Debian unstable. Remaining changes:
719+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
720+ apache2.dirs}: Add ufw profiles.
721+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
722+ - d/control, d/config-dir/mods-available/ssl.conf,
723+ - Add dep8 tests.
724+ - debian/rules: Fix cross-building by passing
725+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
726+ - debian/patches/086_svn_cross_compiles: Backport several cross
727+ fixes from upstream
728+ - d/index.html: replace Debian with Ubuntu on default page.
729+ - d/p/split-logfile.patch: fix completely broken split-logfile
730+ command.
731+ - d/p/CVE-2015-0228.patch: fix logic in modules/lua/lua_request.c to fix a
732+ denial of service in mod_lua via websockets PING
733+ * debian/tests/ssl-passphrase: Add password responder for
734+ systemd-ask-passphrase.
735+
736+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 09 Mar 2015 12:03:16 +0100
737+
738 apache2 (2.4.10-9) unstable; urgency=medium
739
740 * CVE-2014-8109: mod_lua: Fix handling of the Require line when a
741@@ -542,6 +1072,54 @@ apache2 (2.4.10-9) unstable; urgency=medium
742
743 -- Stefan Fritsch <sf@debian.org> Mon, 22 Dec 2014 20:24:36 +0100
744
745+apache2 (2.4.10-8ubuntu3) vivid; urgency=medium
746+
747+ * SECURITY UPDATE: restriction bypass in mod_lua via multiple Require
748+ directives
749+ - debian/patches/CVE-2014-8109.patch: handle multiple Require
750+ directives with different arguments in modules/lua/mod_lua.c.
751+ - CVE-2014-8109
752+ * SECURITY UPDATE: denial of service in mod_lua via websockets PING
753+ - debian/patches/CVE-2015-0228.patch: fix logic in
754+ modules/lua/lua_request.c.
755+ - CVE-2015-0228
756+
757+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Thu, 05 Mar 2015 10:56:34 -0500
758+
759+apache2 (2.4.10-8ubuntu2) vivid; urgency=medium
760+
761+ * Allow "triggers-awaited" and "triggers-pending" states in addition to
762+ "installed" when determining whether to defer actions or process
763+ deferred actions (LP: #1393832).
764+
765+ -- Colin Watson <cjwatson@ubuntu.com> Wed, 26 Nov 2014 11:31:44 +0000
766+
767+apache2 (2.4.10-8ubuntu1) vivid; urgency=medium
768+
769+ * Merge from Debian unstable. Remaining changes:
770+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
771+ apache2.dirs}: Add ufw profiles.
772+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
773+ - d/control, d/config-dir/mods-available/ssl.conf,
774+ d/ask-for-passphrase, d/apache2.install: Plymouth aware passphrase
775+ dialog program ask-for-passphrase.
776+ - Add dep8 tests.
777+ - debian/rules: Fix cross-building by passing
778+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
779+ - debian/patches/086_svn_cross_compiles: Backport several cross
780+ fixes from upstream
781+ - d/index.html: replace Debian with Ubuntu on default page.
782+ - d/p/split-logfile.patch: fix completely broken split-logfile
783+ command.
784+ * Fixes from Debian included in merge:
785+ - Crash caused by OCSP stapling code; this was erroneously
786+ attributed to Debian in my previous merge, but actually only
787+ appears in 2.4.10-8; with thanks to Stefan Fritsch (LP: #1366174).
788+ * Cherry-pick versioned build-depend on dpkg from Debian for correct
789+ dpkg-maintscript-helper symlink_to_dir support.
790+
791+ -- Robie Basak <robie.basak@ubuntu.com> Fri, 21 Nov 2014 15:15:58 +0000
792+
793 apache2 (2.4.10-8) unstable; urgency=medium
794
795 * Bump dpkg Pre-Depends to version that supports relative symlinks in
796@@ -556,6 +1134,33 @@ apache2 (2.4.10-8) unstable; urgency=medium
797
798 -- Stefan Fritsch <sf@debian.org> Tue, 18 Nov 2014 15:18:18 +0100
799
800+apache2 (2.4.10-7ubuntu1) vivid; urgency=medium
801+
802+ * Merge from Debian unstable. Remaining changes:
803+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
804+ apache2.dirs}: Add ufw profiles.
805+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
806+ - d/control, d/config-dir/mods-available/ssl.conf,
807+ d/ask-for-passphrase, d/apache2.install: Plymouth aware passphrase
808+ dialog program ask-for-passphrase.
809+ - Add dep8 tests.
810+ - debian/rules: Fix cross-building by passing
811+ DEB_{HOST,BUILD}_GNU_TYPE to configure.
812+ - debian/patches/086_svn_cross_compiles: Backport several cross
813+ fixes from upstream
814+ - d/index.html: replace Debian with Ubuntu on default page.
815+ - d/p/split-logfile.patch: fix completely broken split-logfile command.
816+ * Fixes from Debian included in merge:
817+ - Don't use a2query in preinst, as it may not be available yet
818+ (LP: #1312533).
819+ - Crash caused by OCSP stapling code (LP: #1366174).
820+ - Disable SSLv3 in default config (LP: #1358305).
821+ - If apache2 is not configured yet, defer actions executed via
822+ apache2-maintscript-helper. This fixes installation failures if a
823+ module package is configured first (LP: #1312854).
824+
825+ -- Robie Basak <robie.basak@ubuntu.com> Mon, 17 Nov 2014 18:04:40 +0000
826+
827 apache2 (2.4.10-7) unstable; urgency=medium
828
829 * Handle transitions of doc dirs and symlinks correctly during upgrade.
830@@ -639,6 +1244,25 @@ apache2 (2.4.10-2) unstable; urgency=medium
831
832 -- Stefan Fritsch <sf@debian.org> Sun, 21 Sep 2014 22:58:33 +0200
833
834+apache2 (2.4.10-1ubuntu1) utopic; urgency=medium
835+
836+ * Merge from Debian unstable. Remaining changes:
837+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
838+ apache2.dirs}: Add ufw profiles.
839+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
840+ - d/control, d/config-dir/mods-available/ssl.conf, d/ask-for-passphrase,
841+ d/apache2.install: Plymouth aware passphrase dialog program
842+ ask-for-passphrase.
843+ - Add dep8 tests.
844+ - debian/rules: Fix cross-building by passing DEB_{HOST,BUILD}_GNU_TYPE to
845+ configure.
846+ - debian/patches/086_svn_cross_compiles: Backport several cross fixes from
847+ upstream
848+ - d/index.html: replace Debian with Ubuntu on default page.
849+ - d/p/split-logfile.patch: fix completely broken split-logfile command.
850+
851+ -- Robie Basak <robie.basak@ubuntu.com> Thu, 24 Jul 2014 15:13:16 +0000
852+
853 apache2 (2.4.10-1) unstable; urgency=medium
854
855 [ Arno Töll ]
856@@ -686,6 +1310,45 @@ apache2 (2.4.9-2) unstable; urgency=medium
857
858 -- Stefan Fritsch <sf@debian.org> Sun, 08 Jun 2014 10:38:04 +0200
859
860+apache2 (2.4.9-1ubuntu2) utopic; urgency=medium
861+
862+ * Revert 2.4.4-6ubuntu3 and build against lua 5.1 again, since Apache doesn't
863+ yet support building against lua 5.2 (LP: #1323930).
864+
865+ -- Robie Basak <robie.basak@ubuntu.com> Wed, 28 May 2014 08:55:25 +0000
866+
867+apache2 (2.4.9-1ubuntu1) utopic; urgency=medium
868+
869+ * Merge from Debian unstable. Remaining changes:
870+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
871+ apache2.dirs}: Add ufw profiles.
872+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
873+ - d/control, d/config-dir/mods-available/ssl.conf, d/ask-for-passphrase,
874+ d/apache2.install, d/tests/ssl-passphrase: Plymouth aware passphrase
875+ dialog program ask-for-passphrase.
876+ - debian/rules: Fix cross-building by passing DEB_{HOST,BUILD}_GNU_TYPE to
877+ configure.
878+ - debian/patches/086_svn_cross_compiles: Backport several cross fixes from
879+ upstream
880+ - Build using lua5.2.
881+ - d/tests/chroot: dep8 test for ChrootDir case.
882+ - d/tests/ssl-passphrase: update for new default path /var/www/html.
883+ - d/tests/duplicate-module-load: check for duplicate module loads.
884+ - d/index.html: replace Debian with Ubuntu on default page (LP: #1288690).
885+ - d/p/split-logfile.patch: fix completely broken split-logfile command
886+ (LP: #1299162). Thanks to Holger Mauermann.
887+ * Drop changes (upstreamed):
888+ - d/p/ignore-quilt-dir: adjust build system so that it does not use
889+ files find inside the .pc directory. This stops a double module load
890+ causing later havoc, including "ChrootDir" directive failure.
891+ - debian/patches/CVE-2013-6438.patch: properly calculate correct length
892+ in modules/dav/main/util.c.
893+ - debian/patches/CVE-2014-0098.patch: properly parse tokens in
894+ modules/loggers/mod_log_config.c.
895+ * d/tests/control: adjust dep8 tests for new "breaks-testbed" facility.
896+
897+ -- Robie Basak <robie.basak@ubuntu.com> Fri, 09 May 2014 19:30:04 +0000
898+
899 apache2 (2.4.9-1) unstable; urgency=medium
900
901 * New upstream version.
902@@ -718,6 +1381,63 @@ apache2 (2.4.9-1) unstable; urgency=medium
903
904 -- Stefan Fritsch <sf@debian.org> Sat, 29 Mar 2014 22:50:32 +0100
905
906+apache2 (2.4.7-1ubuntu4) trusty; urgency=medium
907+
908+ * d/p/split-logfile.patch: fix completely broken split-logfile command
909+ (LP: #1299162). Thanks to Holger Mauermann.
910+
911+ -- Robie Basak <robie.basak@ubuntu.com> Thu, 03 Apr 2014 11:21:22 +0000
912+
913+apache2 (2.4.7-1ubuntu3) trusty; urgency=medium
914+
915+ * SECURITY UPDATE: denial of service via mod_dav incorrect end of string
916+ calculation
917+ - debian/patches/CVE-2013-6438.patch: properly calculate correct length
918+ in modules/dav/main/util.c.
919+ - CVE-2013-6438
920+ * SECURITY UPDATE: denial of service via truncated cookie and
921+ mod_log_config
922+ - debian/patches/CVE-2014-0098.patch: properly parse tokens in
923+ modules/loggers/mod_log_config.c.
924+ - CVE-2014-0098
925+
926+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Thu, 20 Mar 2014 08:34:10 -0400
927+
928+apache2 (2.4.7-1ubuntu2) trusty; urgency=medium
929+
930+ * d/index.html: replace Debian with Ubuntu on default page
931+ (LP: #1288690).
932+
933+ -- Robie Basak <robie.basak@ubuntu.com> Wed, 19 Mar 2014 11:04:21 +0000
934+
935+apache2 (2.4.7-1ubuntu1) trusty; urgency=medium
936+
937+ * Merge from Debian unstable. Remaining changes:
938+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
939+ apache2.dirs}: Add ufw profiles.
940+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
941+ - d/control, d/config-dir/mods-available/ssl.conf,
942+ d/ask-for-passphrase, d/apache2.install, d/tests/ssl-passphrase:
943+ Plymouth aware passphrase dialog program ask-for-passphrase.
944+ - debian/rules: Fix cross-building by passing DEB_{HOST,BUILD}_GNU_TYPE
945+ to configure.
946+ - debian/patches/086_svn_cross_compiles: Backport several cross fixes
947+ from upstream
948+ - Build using lua5.2.
949+ - d/tests/chroot: dep8 test for ChrootDir case.
950+ - d/p/ignore-quilt-dir: adjust build system so that it does not use
951+ files find inside the .pc directory. This stops a double module load
952+ causing later havoc, including "ChrootDir" directive failure.
953+ * Drop changes:
954+ - debian/{control, rules}: Enable PIE hardening: no longer required;
955+ 2.4.7-1 is already hardened.
956+ - d/p/itk-rerun-configure.patch: no longer needed, as ITK support has moved
957+ out of this package.
958+ * d/tests/ssl-passphrase: update for new default path /var/www/html.
959+ * d/tests/duplicate-module-load: check for duplicate module loads.
960+
961+ -- Robie Basak <robie.basak@ubuntu.com> Tue, 14 Jan 2014 17:23:47 +0000
962+
963 apache2 (2.4.7-1) unstable; urgency=low
964
965 New upstream version
966@@ -781,6 +1501,53 @@ apache2 (2.4.6-3) unstable; urgency=low
967
968 -- Stefan Fritsch <sf@debian.org> Mon, 12 Aug 2013 20:15:38 +0200
969
970+apache2 (2.4.6-2ubuntu4) trusty; urgency=low
971+
972+ * d/p/ignore-quilt-dir, d/p/itk-rerun-configure.patch: adjust build system so
973+ that it does not use files find inside the .pc directory. This stops a
974+ double module load causing later havoc, including "ChrootDir" directive
975+ failure (LP: #1251939). Thanks to Stefan Fritsch.
976+ * d/tests/chroot: dep8 test for ChrootDir case.
977+
978+ -- Robie Basak <robie.basak@ubuntu.com> Thu, 28 Nov 2013 16:21:51 +0000
979+
980+apache2 (2.4.6-2ubuntu3) trusty; urgency=low
981+
982+ * debian/apache2.install: Correct path for ufw.
983+ (LP: #1252722)
984+
985+ -- Chuck Short <zulcss@ubuntu.com> Tue, 19 Nov 2013 08:59:54 -0500
986+
987+apache2 (2.4.6-2ubuntu2) saucy; urgency=low
988+
989+ * d/ask-for-passphrase: mark executable so that apache2 can run it. Fixes
990+ passphrase prompting for SSL certificates that are passphrase protected.
991+ * Add dep8 test for SSL passphrase prompting.
992+
993+ -- Robie Basak <robie.basak@ubuntu.com> Fri, 09 Aug 2013 13:08:52 +0000
994+
995+apache2 (2.4.6-2ubuntu1) saucy; urgency=low
996+
997+ * Merge from Debian unstable. Remaining changes:
998+ - debian/{control, rules}: Enable PIE hardening.
999+ - debian/{control, apache2.install, apache2-utils.ufw.profile,
1000+ apache2.dirs}: Add ufw profiles.
1001+ - debian/apache2.py, debian/apache2-bin.install: Add apport hook.
1002+ - debian/control, debian/config-dir/mods-available/ssl.conf,
1003+ debian/ask-for-passphrase, debian/apache2.install: Plymouth aware
1004+ passphrase dialog program ask-for-passphrase.
1005+ - debian/rules: Fix cross-building by passing DEB_{HOST,BUILD}_GNU_TYPE
1006+ to configure.
1007+ - debian/patches/086_svn_cross_compiles: Backport several cross fixes
1008+ from upstream
1009+ * Dropped changes:
1010+ - debian/patches/CVE-2013-1896.patch: upstream
1011+ * Fixed module dependencies (LP: #1205314)
1012+ - debian/config-dir/mods-available/lbmethod_*: properly specify
1013+ proxy_balancer, not mod_proxy_balancer.
1014+
1015+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Fri, 26 Jul 2013 08:31:33 -0400
1016+
1017 apache2 (2.4.6-2) unstable; urgency=low
1018
1019 [ Stefan Fritsch ]
1020@@ -833,6 +1600,56 @@ apache2 (2.4.6-1) unstable; urgency=low
1021
1022 -- Arno Töll <arno@debian.org> Sun, 21 Jul 2013 18:44:42 +0200
1023
1024+apache2 (2.4.4-6ubuntu5) saucy; urgency=low
1025+
1026+ * SECURITY UPDATE: denial of service via MERGE request
1027+ - debian/patches/CVE-2013-1896.patch: make sure DAV is enabled for URI
1028+ in modules/dav/main/mod_dav.c.
1029+ - CVE-2013-1896
1030+
1031+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Thu, 18 Jul 2013 11:20:47 -0400
1032+
1033+apache2 (2.4.4-6ubuntu4) saucy; urgency=low
1034+
1035+ * d/apache2-{utils,bin}.install: move apport hook from apache2-utils to
1036+ apache2-bin. apache2-utils is only suggested by apache2, so may not
1037+ always be installed by bug reporters. However, apache2-bin will always
1038+ need to be installed for Apache to be functional, so this is a better
1039+ place for the apport hook. apache2-bin already Conflicts/Replaces
1040+ apache2.2-common, so this also fixes (LP: #1199318).
1041+ * d/apache2.py: adjust apport hook for new location of configuration
1042+ files in apache2 >= 2.4: they have moved from apache2.2-common to
1043+ apache2.
1044+
1045+ -- Robie Basak <robie.basak@ubuntu.com> Wed, 17 Jul 2013 17:54:22 +0000
1046+
1047+apache2 (2.4.4-6ubuntu3) saucy; urgency=low
1048+
1049+ * Build using lua5.2.
1050+
1051+ -- Matthias Klose <doko@ubuntu.com> Wed, 17 Jul 2013 14:24:42 +0200
1052+
1053+apache2 (2.4.4-6ubuntu2) saucy; urgency=low
1054+
1055+ * debian/rules: Fix FTBFS while installing ufw.
1056+
1057+ -- Chuck Short <zulcss@ubuntu.com> Tue, 02 Jul 2013 10:10:14 -0500
1058+
1059+apache2 (2.4.4-6ubuntu1) saucy; urgency=low
1060+
1061+ * Merge from Debian unstable. Remaining changes:
1062+ - debian/{control, rules}: Enable PIE hardening.
1063+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1064+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1065+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1066+ Plymouth aware passphrase dialog program ask-for-passphrase.
1067+ * Dropped changes:
1068+ - debian/patches/CVE-2012-2687.patch: Dropped no longer needed.
1069+ - debian/patches/CVE-2012-3499_4558.patch: Dropped no longer needed.
1070+ - debian/patches/CVE-2012-4929.patch: Dropped no longer needed.
1071+
1072+ -- Chuck Short <zulcss@ubuntu.com> Tue, 02 Jul 2013 08:34:01 -0500
1073+
1074 apache2 (2.4.4-6) unstable; urgency=low
1075
1076 * Denote exact versions breaking gnome-user-share now that Gnome maintainers
1077@@ -1304,6 +2121,122 @@ apache2 (2.4.1-1) experimental; urgency=low
1078
1079 -- Stefan Fritsch <sf@debian.org> Mon, 19 Mar 2012 10:46:02 +0100
1080
1081+apache2 (2.2.22-6ubuntu5) raring; urgency=low
1082+
1083+ * SECURITY UPDATE: multiple cross-site scripting issues
1084+ - debian/patches/CVE-2012-3499_4558.patch: properly escape html in
1085+ modules/generators/{mod_info.c,mod_status.c},
1086+ modules/ldap/util_ldap_cache_mgr.c, modules/mappers/mod_imagemap.c,
1087+ modules/proxy/{mod_proxy_balancer.c,mod_proxy_ftp.c}.
1088+ - CVE-2012-3499
1089+ - CVE-2012-4558
1090+ * SECURITY UPDATE: symlink attack in apache2ctl script
1091+ - debian/apache2ctl: introduce and use a safer mkdir_chown() function.
1092+ - Thanks to Stefan Fritsch for the fix.
1093+ - CVE-2013-1048
1094+
1095+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Fri, 15 Mar 2013 07:59:58 -0400
1096+
1097+apache2 (2.2.22-6ubuntu4) raring; urgency=low
1098+
1099+ * Fix cross-building by passing DEB_{HOST,BUILD}_GNU_TYPE to configure.
1100+ * Skip module sanity check between MPMs if cross-building without the
1101+ kernel/binfmt support to run our target binaries on the build system.
1102+ * Backport several cross fixes from upstream as 086_svn_cross_compiles.
1103+
1104+ -- Adam Conrad <adconrad@ubuntu.com> Wed, 05 Dec 2012 02:21:46 -0700
1105+
1106+apache2 (2.2.22-6ubuntu3) raring; urgency=low
1107+
1108+ * SECURITY UPDATE: XSS vulnerability in mod_negotiation
1109+ - debian/patches/CVE-2012-2687.patch: escape filenames in
1110+ modules/mappers/mod_negotiation.c.
1111+ - CVE-2012-2687
1112+ * SECURITY UPDATE: CRIME attack ssl attack (LP: #1068854)
1113+ - debian/patches/CVE-2012-4929.patch: backport SSLCompression on|off
1114+ directive. Defaults to off as enabling compression enables the CRIME
1115+ attack.
1116+ - CVE-2012-4929
1117+
1118+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Thu, 08 Nov 2012 17:56:24 -0500
1119+
1120+apache2 (2.2.22-6ubuntu2) quantal; urgency=low
1121+
1122+ * debian/apache2.py
1123+ - Update apport hook for python3 ; thanks to Edward Donovan (LP: #1013171)
1124+ - Check if this directory exists: /etc/apache2/sites-enabled/
1125+
1126+ -- Matthieu Baerts (matttbe) <matttbe@gmail.com> Mon, 16 Jul 2012 10:02:18 +0200
1127+
1128+apache2 (2.2.22-6ubuntu1) quantal; urgency=low
1129+
1130+ * Merge from Debian unstable. Remaining changes:
1131+ - debian/{control, rules}: Enable PIE hardening.
1132+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1133+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1134+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1135+ Plymouth aware passphrase dialog program ask-for-passphrase.
1136+ * Dropped changes:
1137+ - debian/control: Add bzr tag and point it to our tree; this is not
1138+ really required and just increases the delta.
1139+
1140+ -- Robie Basak <robie.basak@ubuntu.com> Fri, 08 Jun 2012 11:37:31 +0100
1141+
1142+apache2 (2.2.22-6) unstable; urgency=low
1143+
1144+ [ Stefan Fritsch ]
1145+ * Fix regression causing apache2 to cache "206 partial content" responses,
1146+ and then serving these partial responses when replying to normal requests.
1147+ Closes: #671204
1148+ * Add section to security.conf that shows how to forbid access to VCS
1149+ directories. Closes: #548213
1150+ * Update ssl default cipher config, add alternative speed optimized config.
1151+ Closes: #649020
1152+ * Add "AddCharset" for .brf files in default mod_mime config.
1153+ Closes: #402567
1154+ * Don't create httpd.conf anymore and don't include it in apache2.conf. If
1155+ it contains local modifications, move it to /etc/apache2/conf.d/httpd.conf
1156+ * Port some of the comments in apache2.conf from the 2.4 package.
1157+ * Compile mod_version statically, drop associated module load file.
1158+ * If apache2 is not running, make "/etc/init.d/apache2 reload" skip the
1159+ configtest.
1160+ * Note in README.Debian that future versions of the package will have the
1161+ include statements changed to include only *.conf.
1162+ * Change compiled-in document root to /var/www, to avoid strange error
1163+ messages.
1164+ * Use "dh --with autotools_dev" instead of patching config.sub/config.guess.
1165+
1166+ [ Arno Töll ]
1167+ * Fix apxs to import LDFLAGS from config_vars.mk. Moreover, make it possible
1168+ to override LDFLAGS at compile time by defining LDLAGS in the environment,
1169+ just like it is possible for CFLAGS. This also means, config_vars.mk now
1170+ exports hardening build flags by default.
1171+ * Update doc-base metadata for the apache2-doc package.
1172+
1173+ -- Stefan Fritsch <sf@debian.org> Tue, 29 May 2012 22:05:48 +0200
1174+
1175+apache2 (2.2.22-5) unstable; urgency=low
1176+
1177+ * Make LoadFile and LoadModule look in the standard search paths if the
1178+ dso file name is given as a pure filename. This helps with the multi-arch
1179+ transition.
1180+
1181+ -- Stefan Fritsch <sf@debian.org> Mon, 30 Apr 2012 23:38:33 +0200
1182+
1183+apache2 (2.2.22-4) unstable; urgency=high
1184+
1185+ * CVE-2012-0216: Remove "Alias /doc /usr/share/doc" from the default virtual
1186+ hosts' config files.
1187+ If scripting modules like mod_php or mod_rivet are enabled on systems
1188+ where either 1) some frontend server forwards connections to an apache2
1189+ backend server on the localhost address, or 2) the machine running
1190+ apache2 is also used for web browsing, this could allow a remote
1191+ attacker to execute example scripts stored under /usr/share/doc.
1192+ Depending on the installed packages, this could lead to issues like cross
1193+ site scripting, code execution, or leakage of sensitive data.
1194+
1195+ -- Stefan Fritsch <sf@debian.org> Sun, 15 Apr 2012 23:41:43 +0200
1196+
1197 apache2 (2.2.22-3) unstable; urgency=low
1198
1199 * Fix "FTBFS: mkdir: cannot create directory `debian/build-tree/arch':
1200@@ -1324,6 +2257,18 @@ apache2 (2.2.22-2) unstable; urgency=low
1201
1202 -- Stefan Fritsch <sf@debian.org> Thu, 15 Mar 2012 00:02:31 +0100
1203
1204+apache2 (2.2.22-1ubuntu1) precise; urgency=low
1205+
1206+ * Merge from Debian testing. Remaining changes:
1207+ - debian/{control, rules}: Enable PIE hardening.
1208+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1209+ - debian/control: Add bzr tag and point it to our tree
1210+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1211+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1212+ Plymouth aware passphrase dialog program ask-for-passphrase.
1213+
1214+ -- Chuck Short <zulcss@ubuntu.com> Sun, 12 Feb 2012 20:06:35 -0500
1215+
1216 apache2 (2.2.22-1) unstable; urgency=low
1217
1218 [ Stefan Fritsch ]
1219@@ -1341,6 +2286,18 @@ apache2 (2.2.22-1) unstable; urgency=low
1220
1221 -- Stefan Fritsch <sf@debian.org> Wed, 01 Feb 2012 21:49:04 +0100
1222
1223+apache2 (2.2.21-5ubuntu1) precise; urgency=low
1224+
1225+ * Merge from Debian testing. Remaining changes:
1226+ - debian/{control, rules}: Enable PIE hardening.
1227+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1228+ - debian/control: Add bzr tag and point it to our tree
1229+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1230+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1231+ Plymouth aware passphrase dialog program ask-for-passphrase.
1232+
1233+ -- Chuck Short <zulcss@ubuntu.com> Mon, 09 Jan 2012 06:26:31 +0000
1234+
1235 apache2 (2.2.21-5) unstable; urgency=low
1236
1237 [ Arno Töll ]
1238@@ -1394,6 +2351,26 @@ apache2 (2.2.21-4) unstable; urgency=low
1239
1240 -- Stefan Fritsch <sf@debian.org> Thu, 29 Dec 2011 12:09:14 +0100
1241
1242+apache2 (2.2.21-3ubuntu2) precise; urgency=low
1243+
1244+ * d/ask-for-passphrase: Flip the logic of this script so that it checks
1245+ first to see if apache is being started from a TTY, and then if not,
1246+ tries plymouth. (LP: #887410)
1247+
1248+ -- Clint Byrum <clint@ubuntu.com> Tue, 06 Dec 2011 16:49:33 -0800
1249+
1250+apache2 (2.2.21-3ubuntu1) precise; urgency=low
1251+
1252+ * Merge from Debian testing. Remaining changes:
1253+ - debian/{control, rules}: Enable PIE hardening.
1254+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1255+ - debian/control: Add bzr tag and point it to our tree
1256+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1257+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1258+ Plymouth aware passphrase dialog program ask-for-passphrase.
1259+
1260+ -- Chuck Short <zulcss@ubuntu.com> Fri, 09 Dec 2011 05:20:43 +0000
1261+
1262 apache2 (2.2.21-3) unstable; urgency=medium
1263
1264 * Fix CVE-2011-4317: Prevent unintended pattern expansion in some
1265@@ -1408,6 +2385,24 @@ apache2 (2.2.21-3) unstable; urgency=medium
1266
1267 -- Stefan Fritsch <sf@debian.org> Sat, 03 Dec 2011 18:54:03 +0100
1268
1269+apache2 (2.2.21-2ubuntu2) precise; urgency=low
1270+
1271+ * No-change rebuild to drop spurious libsfgcc1 dependency on armhf.
1272+
1273+ -- Adam Conrad <adconrad@ubuntu.com> Fri, 02 Dec 2011 17:36:28 -0700
1274+
1275+apache2 (2.2.21-2ubuntu1) precise; urgency=low
1276+
1277+ * Merge from debian unstable. Remaining changes:
1278+ - debian/{control, rules}: Enable PIE hardening.
1279+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1280+ - debian/control: Add bzr tag and point it to our tree
1281+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1282+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1283+ Plymouth aware passphrase dialog program ask-for-passphrase.
1284+
1285+ -- Chuck Short <zulcss@ubuntu.com> Fri, 14 Oct 2011 16:01:29 +0000
1286+
1287 apache2 (2.2.21-2) unstable; urgency=high
1288
1289 * Fix CVE-2011-3368: Prevent unintended pattern expansion in some
1290@@ -1425,6 +2420,19 @@ apache2 (2.2.21-1) unstable; urgency=low
1291
1292 -- Stefan Fritsch <sf@debian.org> Mon, 26 Sep 2011 18:16:11 +0200
1293
1294+apache2 (2.2.20-1ubuntu1) oneiric; urgency=low
1295+
1296+ * Merge from debian unstable to fix CVE-2011-3192 (LP: #837991).
1297+ Remaining changes:
1298+ - debian/{control, rules}: Enable PIE hardening.
1299+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1300+ - debian/control: Add bzr tag and point it to our tree
1301+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1302+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1303+ Plymouth aware passphrase dialog program ask-for-passphrase.
1304+
1305+ -- Steve Beattie <sbeattie@ubuntu.com> Tue, 06 Sep 2011 01:17:15 -0700
1306+
1307 apache2 (2.2.20-1) unstable; urgency=low
1308
1309 * New upstream release.
1310@@ -1447,6 +2455,18 @@ apache2 (2.2.19-2) unstable; urgency=high
1311
1312 -- Stefan Fritsch <sf@debian.org> Mon, 29 Aug 2011 17:08:17 +0200
1313
1314+apache2 (2.2.19-1ubuntu1) oneiric; urgency=low
1315+
1316+ * Merge from debian unstable (LP: #787013). Remaining changes:
1317+ - debian/{control, rules}: Enable PIE hardening.
1318+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1319+ - debian/control: Add bzr tag and point it to our tree
1320+ - debian/apache2.py, debian/apache2.2-common.install: Add apport hook.
1321+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1322+ Plymouth aware passphrase dialog program ask-for-passphrase.
1323+
1324+ -- Andres Rodriguez <andreserl@ubuntu.com> Mon, 23 May 2011 10:16:09 -0400
1325+
1326 apache2 (2.2.19-1) unstable; urgency=low
1327
1328 * New upstream release.
1329@@ -1464,6 +2484,18 @@ apache2 (2.2.19-1) unstable; urgency=low
1330
1331 -- Stefan Fritsch <sf@debian.org> Sun, 22 May 2011 10:21:21 +0200
1332
1333+apache2 (2.2.17-3ubuntu1) oneiric; urgency=low
1334+
1335+ * Merge from debian unstable. Remaining changes:
1336+ - debian/{control, rules}: Enable PIE hardening.
1337+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1338+ - debian/control: Add bzr tag and point it to our tree
1339+ - debain/apache2.py, debian/apache2.2-common.isntall: Add apport hook.
1340+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1341+ Plymouth aware passphrase dialog program ask-for-passphrase.
1342+
1343+ -- Chuck Short <zulcss@ubuntu.com> Mon, 11 Apr 2011 02:13:30 +0100
1344+
1345 apache2 (2.2.17-3) unstable; urgency=low
1346
1347 * Fix compilation with OpenSSL without SSLv2 support. Closes: #622049
1348@@ -1490,6 +2522,18 @@ apache2 (2.2.17-2) unstable; urgency=high
1349
1350 -- Stefan Fritsch <sf@debian.org> Mon, 21 Mar 2011 23:01:17 +0100
1351
1352+apache2 (2.2.17-1ubuntu1) natty; urgency=low
1353+
1354+ * Merge from debian unstable, remaining changes:
1355+ - debian/{control, rules}: Enable PIE hardening.
1356+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1357+ - debian/control: Add bzr tag and point it to our tree
1358+ - debain/apache2.py, debian/apache2.2-common.isntall: Add apport hook.
1359+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1360+ Plymouth aware passphrase dialog program ask-for-passphrase.
1361+
1362+ -- Chuck Short <zulcss@ubuntu.com> Tue, 22 Feb 2011 13:02:08 -0500
1363+
1364 apache2 (2.2.17-1) unstable; urgency=low
1365
1366 * New upstream version
1367@@ -1498,6 +2542,32 @@ apache2 (2.2.17-1) unstable; urgency=low
1368
1369 -- Stefan Fritsch <sf@debian.org> Tue, 15 Feb 2011 23:30:18 +0100
1370
1371+apache2 (2.2.16-6ubuntu3) natty; urgency=low
1372+
1373+ * debian/rules: Don't use "-fno-strict-aliasing" since it causes
1374+ apache FTBFS on amd64. (LP: #711293)
1375+
1376+ -- Chuck Short <zulcss@ubuntu.com> Tue, 01 Feb 2011 10:19:55 -0500
1377+
1378+apache2 (2.2.16-6ubuntu2) natty; urgency=low
1379+
1380+ * debian/rules: Use "-fno-strict-aliasing" to work around a gcc bug.
1381+ (LP: #697105)
1382+
1383+ -- Chuck Short <zulcss@ubuntu.com> Tue, 25 Jan 2011 11:14:58 -0500
1384+
1385+apache2 (2.2.16-6ubuntu1) natty; urgency=low
1386+
1387+ * Merge from debian unstable. Remaining changes:
1388+ - debian/{control, rules}: Enable PIE hardening.
1389+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1390+ - debian/control: Add bzr tag and point it to our tree
1391+ - debain/apache2.py, debian/apache2.2-common.isntall: Add apport hook.
1392+ - debian/control, debian/ask-for-passphrase, debian/config-dir/mods-available/ssl.conf:
1393+ Plymouth aware passphrase dialog program ask-for-passphrase.
1394+
1395+ -- Chuck Short <zulcss@ubuntu.com> Sun, 02 Jan 2011 06:05:51 +0000
1396+
1397 apache2 (2.2.16-6) unstable; urgency=low
1398
1399 * Also add $named to the secondary-init-script example.
1400@@ -1513,6 +2583,30 @@ apache2 (2.2.16-5) unstable; urgency=medium
1401
1402 -- Stefan Fritsch <sf@debian.org> Fri, 31 Dec 2010 01:22:19 +0100
1403
1404+apache2 (2.2.16-4ubuntu2) natty; urgency=low
1405+
1406+ [Clint Byrum]
1407+ * Adding plymouth aware passphrase dialog program ask-for-passphrase.
1408+ (LP: #582963)
1409+ + debian/control: apache2.2-common depends on bash for ask-for-passphrase
1410+ + debian/config-dir/mods-available/ssl.conf:
1411+ - SSLPassPhraseDialog now uses exec:/usr/share/apache2/ask-for-passhrase
1412+
1413+ [Chuck Short]
1414+ * Add apport hook. (LP: #609177)
1415+ + debian/apache2.py, debian/apache2.2-common.install
1416+
1417+ -- Chuck Short <zulcss@ubuntu.com> Mon, 22 Nov 2010 09:43:43 -0500
1418+
1419+apache2 (2.2.16-4ubuntu1) natty; urgency=low
1420+
1421+ * Merge from debian unstable. Remaining changes:
1422+ - debian/{control, rules}: Enable PIE hardening.
1423+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1424+ - debian/control: Add bzr tag and point it to our tree
1425+
1426+ -- Chuck Short <zulcss@ubuntu.com> Mon, 22 Nov 2010 09:43:41 -0500
1427+
1428 apache2 (2.2.16-4) unstable; urgency=medium
1429
1430 * Increase the mod_reqtimeout default timeouts to avoid potential problems
1431@@ -1523,6 +2617,15 @@ apache2 (2.2.16-4) unstable; urgency=medium
1432
1433 -- Stefan Fritsch <sf@debian.org> Sun, 14 Nov 2010 19:05:55 +0100
1434
1435+apache2 (2.2.16-3ubuntu1) natty; urgency=low
1436+
1437+ * Merge from debian unstable. Remaining changes:
1438+ - debian/{control, rules}: Enable PIE hardening.
1439+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1440+ - debian/control: Add bzr tag and point it to our tree.
1441+
1442+ -- Chuck Short <zulcss@ubuntu.com> Tue, 12 Oct 2010 11:54:48 +0100
1443+
1444 apache2 (2.2.16-3) unstable; urgency=high
1445
1446 * CVE-2010-1623: mod_reqtimeout: Fix potential DoS by high memory usage.
1447@@ -1545,6 +2648,30 @@ apache2 (2.2.16-2) unstable; urgency=low
1448
1449 -- Stefan Fritsch <sf@debian.org> Sun, 29 Aug 2010 15:29:21 +0200
1450
1451+apache2 (2.2.16-1ubuntu3) maverick; urgency=low
1452+
1453+ * Revert "stty sane" to unbreak apache starting, this will have to be
1454+ fixed a different way. (LP: #626723)
1455+
1456+ -- Chuck Short <zulcss@ubuntu.com> Wed, 08 Sep 2010 08:33:17 -0400
1457+
1458+apache2 (2.2.16-1ubuntu2) maverick; urgency=low
1459+
1460+ * debian/apache2.2-common.apache2.init: Add stty sane so that users will get a
1461+ password prompt when using apache-ssl. (LP: #582963)
1462+
1463+ -- Chuck Short <zulcss@ubuntu.com> Wed, 25 Aug 2010 09:25:05 -0400
1464+
1465+apache2 (2.2.16-1ubuntu1) maverick; urgency=low
1466+
1467+ * Merge from debian unstable. Remaining changes:
1468+ - debian/{control, rules}: Enable PIE hardening.
1469+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1470+ - debian/control: Add bzr tag and point it to our tree.
1471+ - debian/apache2-2.common.apache2.init: Add graceful restart (LP: #456381)
1472+
1473+ -- Chuck Short <zulcss@ubuntu.com> Mon, 26 Jul 2010 20:21:37 +0100
1474+
1475 apache2 (2.2.16-1) unstable; urgency=medium
1476
1477 * Urgency medium for security fix.
1478@@ -1577,6 +2704,24 @@ apache2 (2.2.15-6) unstable; urgency=low
1479
1480 -- Stefan Fritsch <sf@debian.org> Fri, 16 Jul 2010 23:41:08 +0200
1481
1482+apache2 (2.2.15-5ubuntu1) maverick; urgency=low
1483+
1484+ * Merge from debian unstable. Remaining changes:
1485+ - debian/{control, rules}: Enable PIE hardening.
1486+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1487+ - debian/control: Add bzr tag and point it to our tree.
1488+ - debian/apache2-2.common.apache2.init: Add graceful restart (LP: #456381)
1489+ + Dropped:
1490+ - debian/patches/206-fix-potential-memory-leaks.dpatch: No longer needed.
1491+ - debian/patches/206-report-max-client-mpm-worker.dpatch: No longer needed.
1492+ - debian/config-dir/apache2.conf: Merged back from debian.
1493+ - mod-reqtimeout functionality: Merge back from debian.
1494+ - debian/patches/204_CVE-2010-0408.dpatch: No longer needed.
1495+ - debian/patches/205_CVE-2010-0434.dpatch: No longer needed.
1496+ - debian/patches/203_fix-ab-segfault.dpatch: No longer needed.
1497+
1498+ -- Chuck Short <zulcss@ubuntu.com> Wed, 05 May 2010 01:28:04 +0100
1499+
1500 apache2 (2.2.15-5) unstable; urgency=low
1501
1502 * Conflict with apache package as we now include apachectl. Closes: #579065
1503@@ -1697,6 +2842,80 @@ apache2 (2.2.14-6) unstable; urgency=low
1504
1505 -- Stefan Fritsch <sf@debian.org> Sun, 07 Feb 2010 17:29:45 +0100
1506
1507+apache2 (2.2.14-5ubuntu8) lucid; urgency=low
1508+
1509+ * debian/patches/210-backport-mod-reqtimeout-ftbfs.dpatch: Add missing mod_reqtime.so
1510+ (LP: #562370)
1511+
1512+ -- Chuck Short <zulcss@ubuntu.com> Tue, 13 Apr 2010 15:09:57 -0400
1513+
1514+apache2 (2.2.14-5ubuntu7) lucid; urgency=low
1515+
1516+ * debian/patches/206-fix-potential-memory-leaks.dpatch: Fix potential memory
1517+ leaks by making sure to not destroy bucket brigades that have been created
1518+ by earlier filters. Backported from 2.2.15.
1519+ * debian/patches/206-report-max-client-mpm-worker.dpatch: Don't report server
1520+ has reached MaxClients until it has. Backported from 2.2.15
1521+ * debian/config-dir/apache2.conf: Make the Files ~ "^\.ht" block in apache2.conf
1522+ more secure by adding Satisfy all. (Debian bug: #572075)
1523+ * debian/rules, debian/patches/209-backport-mod-reqtimeout.dpatch,
1524+ debian/config2-dir/mods-available/reqtimeout.load,
1525+ debian/config2-dir/mods-available/reqtimeout.conf debian/NEWS : Backport the
1526+ mod-reqtimeout module from 2.2.15, this will mitigate apache slowloris
1527+ bug in apache. Enable it by default. (LP: #392759)
1528+
1529+ -- Chuck Short <zulcss@ubuntu.com> Mon, 05 Apr 2010 09:53:35 -0400
1530+
1531+apache2 (2.2.14-5ubuntu6) lucid; urgency=low
1532+
1533+ * debian/apache2.2-common.apache2.init: Fix thinko. (LP: #551681)
1534+
1535+ -- Chuck Short <zulcss@ubuntu.com> Tue, 30 Mar 2010 09:41:11 -0400
1536+
1537+apache2 (2.2.14-5ubuntu5) lucid; urgency=low
1538+
1539+ * Revert 99-fix-mod-dav-permissions.dpatch
1540+
1541+ -- Chuck Short <zulcss@ubuntu.com> Tue, 30 Mar 2010 07:55:46 -0400
1542+
1543+apache2 (2.2.14-5ubuntu4) lucid; urgency=low
1544+
1545+ * debian/patches/99-fix-mod-dav-permissions.dpatch: Fix permisisons when
1546+ downloading files from webdav (LP: #540747)
1547+ * debian/apache2.2-common.apache2.init: Add graceful restart (LP: #456381)
1548+
1549+ -- Chuck Short <zulcss@ubuntu.com> Mon, 29 Mar 2010 13:37:39 -0400
1550+
1551+apache2 (2.2.14-5ubuntu3) lucid; urgency=low
1552+
1553+ * SECURITY UPDATE: denial of service via crafted request in mod_proxy_ajp
1554+ - debian/patches/204_CVE-2010-0408.dpatch: return the right error code
1555+ in modules/proxy/mod_proxy_ajp.c.
1556+ - CVE-2010-0408
1557+ * SECURITY UPDATE: information disclosure via improper handling of
1558+ headers in subrequests
1559+ - debian/patches/205_CVE-2010-0434.dpatch: use a copy of r->headers_in
1560+ in server/protocol.c.
1561+ - CVE-2010-0434
1562+
1563+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Wed, 10 Mar 2010 14:48:48 -0500
1564+
1565+apache2 (2.2.14-5ubuntu2) lucid; urgency=low
1566+
1567+ * debian/patches/203_fix-ab-segfault.dpatch: Fix segfaulting ab when using really
1568+ wacky options. (LP: #450501)
1569+
1570+ -- Chuck Short <zulcss@ubuntu.com> Mon, 08 Mar 2010 14:53:17 -0500
1571+
1572+apache2 (2.2.14-5ubuntu1) lucid; urgency=low
1573+
1574+ * Merge from debian testing. Remaining changes: LP: #506862
1575+ - debian/{control, rules}: Enable PIE hardening.
1576+ - debian/{control, rules, apache2.2-common.ufw.profile}: Add ufw profiles.
1577+ - debian/control: Add bzr tag and point it to our tree.
1578+
1579+ -- Bhavani Shankar <right2bhavi@gmail.com> Wed, 13 Jan 2010 14:28:41 +0530
1580+
1581 apache2 (2.2.14-5) unstable; urgency=low
1582
1583 * Security: Further mitigation for the TLS renegotation attack
1584@@ -1720,6 +2939,15 @@ apache2 (2.2.14-5) unstable; urgency=low
1585
1586 -- Stefan Fritsch <sf@debian.org> Sat, 02 Jan 2010 22:44:15 +0100
1587
1588+apache2 (2.2.14-4ubuntu1) lucid; urgency=low
1589+
1590+ * Resynchronzie with Debian, remaining changes are:
1591+ - debian/{control, rules}: Enable PIE hardening.
1592+ - debian/{control, rules, pache2.2-common.ufw.profile}: Add ufw profiles.
1593+ - debian/control: Add bzr tag and point it to our tree.
1594+
1595+ -- Chuck Short <zulcss@ubuntu.com> Wed, 23 Dec 2009 14:44:51 -0500
1596+
1597 apache2 (2.2.14-4) unstable; urgency=low
1598
1599 * Disable localized error pages again by default because they break
1600@@ -1770,6 +2998,17 @@ apache2 (2.2.14-2) unstable; urgency=medium
1601
1602 -- Stefan Fritsch <sf@debian.org> Sat, 07 Nov 2009 14:37:37 +0100
1603
1604+apache2 (2.2.14-1ubuntu1) lucid; urgency=low
1605+
1606+ * Merge from debian testing, remaining changes:
1607+ - debian/{control, rules}: Enable PIE hardening.
1608+ - debian/{control, rules, pache2.2-common.ufw.profile}: Add ufw profiles.
1609+ - debian/conrol: Add bzr tag and point it to our tree.
1610+ - Dropped debian/patches/203_fix_legacy_ap_rputs_segfaults.dpatch:
1611+ Already applied upstream.
1612+
1613+ -- Chuck Short <zulcss@ubuntu.com> Fri, 06 Nov 2009 00:29:03 +0000
1614+
1615 apache2 (2.2.14-1) unstable; urgency=low
1616
1617 * New upstream version:
1618@@ -1804,6 +3043,24 @@ apache2 (2.2.13-1) unstable; urgency=low
1619
1620 -- Stefan Fritsch <sf@debian.org> Mon, 31 Aug 2009 20:28:56 +0200
1621
1622+apache2 (2.2.12-1ubuntu2) karmic; urgency=low
1623+
1624+ * debian/patches/203_fix_legacy_ap_rputs_segfaults.dpatch:
1625+ - Fix potential segfaults with the use of the legacy ap_rputs() etc
1626+ interfaces, in cases where an output filter fails. This happens
1627+ frequently after CVE-2009-1891 got fixed. (LP: #409987)
1628+
1629+ -- Marc Deslauriers <marc.deslauriers@ubuntu.com> Mon, 17 Aug 2009 15:38:47 -0400
1630+
1631+apache2 (2.2.12-1ubuntu1) karmic; urgency=low
1632+
1633+ * Merge from debian unstable, remaining changes:
1634+ - debian/{control,rules}: enable PIE hardening.
1635+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1636+ - Dropped debian/patches/203_fix-ssl-timeftm-ignored.dpatch.
1637+
1638+ -- Chuck Short <zulcss@ubuntu.com> Tue, 04 Aug 2009 20:04:24 +0100
1639+
1640 apache2 (2.2.12-1) unstable; urgency=low
1641
1642 * New upstream release:
1643@@ -1851,6 +3108,16 @@ apache2 (2.2.12-1) unstable; urgency=low
1644
1645 -- Stefan Fritsch <sf@debian.org> Tue, 04 Aug 2009 11:02:34 +0200
1646
1647+apache2 (2.2.11-7ubuntu1) karmic; urgency=low
1648+
1649+ * Merge from debian unstable, remaining changes: LP: #398130
1650+ - debian/patches/203_fix-ssl-timeftm-ignored.dpatch:
1651+ Fix timefmt is ignored when XBitHack is on. (LP: #258914)
1652+ - debian/{control,rules}: enable PIE hardening.
1653+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1654+
1655+ -- Bhavani Shankar <right2bhavi@gmail.com> Sat, 11 Jul 2009 16:34:32 +0530
1656+
1657 apache2 (2.2.11-7) unstable; urgency=low
1658
1659 * Security fixes:
1660@@ -1865,6 +3132,16 @@ apache2 (2.2.11-7) unstable; urgency=low
1661
1662 -- Stefan Fritsch <sf@debian.org> Fri, 10 Jul 2009 22:42:57 +0200
1663
1664+apache2 (2.2.11-6ubuntu1) karmic; urgency=low
1665+
1666+ * Merge from debian unstable, remaining changes:
1667+ - debian/patches/203_fix-ssl-timeftm-ignored.dpatch:
1668+ Fix timefmt is ignored when XBitHack is on. (LP: #258914)
1669+ - debian/{control,rules}: enable PIE hardening.
1670+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1671+
1672+ -- Chuck Short <zulcss@ubuntu.com> Tue, 09 Jun 2009 01:01:23 +0100
1673+
1674 apache2 (2.2.11-6) unstable; urgency=high
1675
1676 * CVE-2009-1195: mod_include allowed to bypass IncludesNoExec for Server
1677@@ -1873,6 +3150,16 @@ apache2 (2.2.11-6) unstable; urgency=high
1678
1679 -- Stefan Fritsch <sf@debian.org> Mon, 08 Jun 2009 19:22:58 +0200
1680
1681+apache2 (2.2.11-5ubuntu1) karmic; urgency=low
1682+
1683+ * Merge from debian unstable, remaining changes:
1684+ - debian/patches/203_fix-ssi-timeftm-ignored.dpatch:
1685+ Fix timefmt is ignored when XBitHack is on. (LP: #258914)
1686+ - debian/{control,rules}: enable PIE hardening.
1687+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1688+
1689+ -- Andrew Mitchell <ajmitch@ubuntu.com> Wed, 03 Jun 2009 14:10:54 +1200
1690+
1691 apache2 (2.2.11-5) unstable; urgency=low
1692
1693 * Move all binaries into a new package apache2.2-bin and make
1694@@ -1921,6 +3208,16 @@ apache2 (2.2.11-4) unstable; urgency=low
1695
1696 -- Stefan Fritsch <sf@debian.org> Tue, 19 May 2009 22:55:27 +0200
1697
1698+apache2 (2.2.11-3ubuntu1) karmic; urgency=low
1699+
1700+ * Merge from debian unstable, remaining changes:
1701+ - debian/patches/203_fix-ssi-timeftm-ignored.dpatch:
1702+ Fix timefmt is ignored when XBitHack is on. (LP: #258914)
1703+ - debian/{control,rules}: enable PIE hardening.
1704+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1705+
1706+ -- Andrew Mitchell <ajmitch@ubuntu.com> Tue, 12 May 2009 16:15:34 +1200
1707+
1708 apache2 (2.2.11-3) unstable; urgency=low
1709
1710 * Rebuild against apr-util 1.3, to fix undefined symbol errors in mod_ldap
1711@@ -1929,6 +3226,21 @@ apache2 (2.2.11-3) unstable; urgency=low
1712
1713 -- Stefan Fritsch <sf@debian.org> Tue, 31 Mar 2009 21:07:26 +0200
1714
1715+apache2 (2.2.11-2ubuntu2) jaunty; urgency=low
1716+
1717+ * debian/patches/203_fix-ssi-timeftm-ignored.dpatch:
1718+ Fix timefmt is ignored when XBitHack is on. (LP: #258914)
1719+
1720+ -- Chuck Short <zulcss@ubuntu.com> Wed, 01 Apr 2009 11:39:17 -0400
1721+
1722+apache2 (2.2.11-2ubuntu1) jaunty; urgency=low
1723+
1724+ * Merge from debian unstable, remaining changes:
1725+ - debian/{contro,rules}: enable PIE hardening.
1726+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1727+
1728+ -- Chuck Short <zulcss@ubuntu.com> Sat, 17 Jan 2009 00:02:55 +0000
1729+
1730 apache2 (2.2.11-2) unstable; urgency=low
1731
1732 * Report an error instead instead of segfaulting when apr_pollset_create
1733@@ -1938,6 +3250,14 @@ apache2 (2.2.11-2) unstable; urgency=low
1734
1735 -- Stefan Fritsch <sf@debian.org> Fri, 16 Jan 2009 19:01:59 +0100
1736
1737+apache2 (2.2.11-1ubuntu1) jaunty; urgency=low
1738+
1739+ * Merge from debian unstable, remaining changes:
1740+ - debian/{control, rules}: enable PIE hardening.
1741+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1742+
1743+ -- Chuck Short <zulcss@ubuntu.com> Mon, 15 Dec 2008 00:06:50 +0000
1744+
1745 apache2 (2.2.11-1) unstable; urgency=low
1746
1747 [Thom May]
1748@@ -1952,6 +3272,14 @@ apache2 (2.2.11-1) unstable; urgency=low
1749
1750 -- Stefan Fritsch <sf@debian.org> Sun, 14 Dec 2008 09:34:24 +0100
1751
1752+apache2 (2.2.9-11ubuntu1) jaunty; urgency=low
1753+
1754+ * Merge from debian unstable, remaining changes: (LP: #303375)
1755+ - debian/{control, rules}: enable PIE hardening.
1756+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1757+
1758+ -- Bhavani Shankar <right2bhavi@gmail.com> Sat, 29 Nov 2008 14:02:31 +0530
1759+
1760 apache2 (2.2.9-11) unstable; urgency=low
1761
1762 * Regression fix from upstream svn for mod_proxy:
1763@@ -1966,6 +3294,14 @@ apache2 (2.2.9-11) unstable; urgency=low
1764
1765 -- Stefan Fritsch <sf@debian.org> Wed, 26 Nov 2008 23:10:22 +0100
1766
1767+apache2 (2.2.9-10ubuntu1) jaunty; urgency=low
1768+
1769+ * Merge from debian unstable, remaining changes:
1770+ - debian/{control, rules}: enable PIE hardening.
1771+ - debian/{control, rules, apache2.2-common.ufw.profile}: add ufw profiles.
1772+
1773+ -- Chuck Short <zulcss@ubuntu.com> Wed, 05 Nov 2008 02:23:18 -0400
1774+
1775 apache2 (2.2.9-10) unstable; urgency=low
1776
1777 * Regression fix from upstream svn for mod_proxy_http:
1778@@ -1996,6 +3332,27 @@ apache2 (2.2.9-8) unstable; urgency=low
1779
1780 -- Stefan Fritsch <sf@debian.org> Thu, 11 Sep 2008 09:17:33 +0200
1781
1782+apache2 (2.2.9-7ubuntu3) intrepid; urgency=low
1783+
1784+ * Revert logrotate change since it will break it for everyone.
1785+
1786+ -- Chuck Short <zulcss@ubuntu.com> Fri, 19 Sep 2008 09:32:01 -0400
1787+
1788+apache2 (2.2.9-7ubuntu2) intrepid; urgency=low
1789+
1790+ * debian/logrotate: Restart rather than reload for busy websites.
1791+ (LP: #270899)
1792+
1793+ -- Chuck Short <zulcss@ubuntu.com> Thu, 18 Sep 2008 08:42:22 -0400
1794+
1795+apache2 (2.2.9-7ubuntu1) intrepid; urgency=low
1796+
1797+ * Merge from debian unstable, remaining changes:
1798+ - debian/{control,rules}: enable PIE hardening.
1799+ - debian/{control,rules,apache2.2-common.ufw.profile}: add ufw profiles.
1800+
1801+ -- Kees Cook <kees@ubuntu.com> Thu, 28 Aug 2008 08:10:59 -0700
1802+
1803 apache2 (2.2.9-7) unstable; urgency=low
1804
1805 * Fix XSS in mod_proxy_ftp (CVE-2008-2939).
1806@@ -2038,6 +3395,23 @@ apache2 (2.2.9-4) unstable; urgency=low
1807
1808 -- Stefan Fritsch <sf@debian.org> Sun, 06 Jul 2008 10:38:37 +0200
1809
1810+apache2 (2.2.9-3ubuntu2) intrepid; urgency=low
1811+
1812+ * add ufw integration (see
1813+ https://wiki.ubuntu.com/UbuntuFirewall#Integrating%20UFW%20with%20Packages)
1814+ (LP: #261198)
1815+ - debian/control: suggest ufw for apache2.2-common
1816+ - add apache2.2-common.ufw.profile with 3 profiles and install it to
1817+ /etc/ufw/applications.d/apache2.2-common
1818+
1819+ -- Didier Roche <didrocks@ubuntu-fr.org> Tue, 26 Aug 2008 19:03:42 +0200
1820+
1821+apache2 (2.2.9-3ubuntu1) intrepid; urgency=low
1822+
1823+ * debian/{control,rules}: enable PIE hardening
1824+
1825+ -- Kees Cook <kees@ubuntu.com> Wed, 20 Aug 2008 15:45:00 -0700
1826+
1827 apache2 (2.2.9-3) unstable; urgency=low
1828
1829 [ Stefan Fritsch ]
1830@@ -4118,3 +5492,4 @@ apache2 (2.0.18-1) unstable; urgency=low
1831 * Initial Release.
1832
1833 -- Daniel Stone <daniel@sfarc.net> Wed, 4 Jul 2001 21:29:29 +1000
1834+
1835diff --git a/debian/config-dir/mods-available/md.load b/debian/config-dir/mods-available/md.load
1836deleted file mode 100644
1837index 812a6a6..0000000
1838--- a/debian/config-dir/mods-available/md.load
1839+++ /dev/null
1840@@ -1 +0,0 @@
1841-LoadModule md_module /usr/lib/apache2/modules/mod_md.so
1842diff --git a/debian/control b/debian/control
1843index a72cfff..05adf99 100644
1844--- a/debian/control
1845+++ b/debian/control
1846@@ -1,7 +1,8 @@
1847 Source: apache2
1848 Section: httpd
1849 Priority: optional
1850-Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
1851+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
1852+XSBC-Original-Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
1853 Uploaders: Stefan Fritsch <sf@debian.org>,
1854 Arno Töll <arno@debian.org>,
1855 Ondřej Surý <ondrej@debian.org>
1856@@ -18,9 +19,7 @@ Build-Depends: debhelper (>= 9.20160709~),
1857 libxml2-dev,
1858 lsb-release,
1859 perl,
1860- zlib1g-dev,
1861- libcurl4-openssl-dev | libcurl4-dev,
1862- libjansson-dev
1863+ zlib1g-dev
1864 Build-Conflicts: autoconf2.13
1865 Standards-Version: 4.1.2
1866 Vcs-Browser: https://salsa.debian.org/apache-team/apache2
1867@@ -44,15 +43,14 @@ Provides: httpd,
1868 Recommends: ssl-cert
1869 Conflicts: apache2.2-bin,
1870 apache2.2-common
1871-Breaks: libapache2-mod-md (<< 2.4.33),
1872- libapache2-mod-proxy-uwsgi (<< 2.4.33)
1873+Breaks: libapache2-mod-proxy-uwsgi (<< 2.4.33)
1874 Replaces: apache2.2-bin,
1875 apache2.2-common,
1876- libapache2-mod-md (<< 2.4.33),
1877 libapache2-mod-proxy-uwsgi (<< 2.4.33)
1878 Suggests: apache2-doc,
1879 apache2-suexec-pristine | apache2-suexec-custom,
1880- www-browser
1881+ www-browser,
1882+ ufw
1883 Description: Apache HTTP Server
1884 The Apache HTTP Server Project's goal is to build a secure, efficient and
1885 extensible HTTP server as standards-compliant open source software. The
1886@@ -81,10 +79,8 @@ Depends: ${misc:Depends},
1887 Provides: ${apache2:API}
1888 Breaks: gridsite (<< 3.0.0~20170225gitd51b2fd-1~),
1889 libapache2-mod-dacs (<= 1.4.38a-2),
1890- libapache2-mod-md (<< 2.4.33),
1891 libapache2-mod-proxy-uwsgi (<< 2.4.33)
1892-Replaces: libapache2-mod-md (<< 2.4.33),
1893- libapache2-mod-proxy-uwsgi (<< 2.4.33)
1894+Replaces: libapache2-mod-proxy-uwsgi (<< 2.4.33)
1895 Suggests: apache2-doc,
1896 apache2-suexec-pristine | apache2-suexec-custom,
1897 www-browser
1898@@ -210,14 +206,6 @@ Description: Apache debugging symbols
1899 crashing server instances and modules. See
1900 /usr/share/doc/apache2/README.backtrace for more information.
1901
1902-Package: libapache2-mod-md
1903-Architecture: any
1904-Section: oldlibs
1905-Depends: ${misc:Depends}, apache2 (= ${binary:Version})
1906-Description: transitional package
1907- This is a transitional package to apache2 for users of libapache2-mod-md.
1908- It can be safely removed after the installation is complete.
1909-
1910 Package: libapache2-mod-proxy-uwsgi
1911 Architecture: any
1912 Section: oldlibs
1913diff --git a/debian/icons/ubuntu-logo.png b/debian/icons/ubuntu-logo.png
1914new file mode 100644
1915index 0000000..4db2fa1
1916Binary files /dev/null and b/debian/icons/ubuntu-logo.png differ
1917diff --git a/debian/index.html b/debian/index.html
1918index 766401d..96ed444 100644
1919--- a/debian/index.html
1920+++ b/debian/index.html
1921@@ -1,9 +1,14 @@
1922
1923 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1924 <html xmlns="http://www.w3.org/1999/xhtml">
1925+ <!--
1926+ Modified from the Debian original for Ubuntu
1927+ Last updated: 2016-11-16
1928+ See: https://launchpad.net/bugs/1288690
1929+ -->
1930 <head>
1931 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
1932- <title>Apache2 Debian Default Page: It works</title>
1933+ <title>Apache2 Ubuntu Default Page: It works</title>
1934 <style type="text/css" media="screen">
1935 * {
1936 margin: 0px 0px 0px 0px;
1937@@ -188,9 +193,9 @@
1938 <body>
1939 <div class="main_page">
1940 <div class="page_header floating_element">
1941- <img src="/icons/openlogo-75.png" alt="Debian Logo" class="floating_element"/>
1942+ <img src="/icons/ubuntu-logo.png" alt="Ubuntu Logo" class="floating_element"/>
1943 <span class="floating_element">
1944- Apache2 Debian Default Page
1945+ Apache2 Ubuntu Default Page
1946 </span>
1947 </div>
1948 <!-- <div class="table_of_contents floating_element">
1949@@ -221,7 +226,9 @@
1950 <div class="content_section_text">
1951 <p>
1952 This is the default welcome page used to test the correct
1953- operation of the Apache2 server after installation on Debian systems.
1954+ operation of the Apache2 server after installation on Ubuntu systems.
1955+ It is based on the equivalent page on Debian, from which the Ubuntu Apache
1956+ packaging is derived.
1957 If you can read this page, it means that the Apache HTTP server installed at
1958 this site is working properly. You should <b>replace this file</b> (located at
1959 <tt>/var/www/html/index.html</tt>) before continuing to operate your HTTP server.
1960@@ -242,9 +249,9 @@
1961 </div>
1962 <div class="content_section_text">
1963 <p>
1964- Debian's Apache2 default configuration is different from the
1965+ Ubuntu's Apache2 default configuration is different from the
1966 upstream default configuration, and split into several files optimized for
1967- interaction with Debian tools. The configuration system is
1968+ interaction with Ubuntu tools. The configuration system is
1969 <b>fully documented in
1970 /usr/share/doc/apache2/README.Debian.gz</b>. Refer to this for the full
1971 documentation. Documentation for the web server itself can be
1972@@ -253,7 +260,7 @@
1973
1974 </p>
1975 <p>
1976- The configuration layout for an Apache2 web server installation on Debian systems is as follows:
1977+ The configuration layout for an Apache2 web server installation on Ubuntu systems is as follows:
1978 </p>
1979 <pre>
1980 /etc/apache2/
1981@@ -324,7 +331,7 @@
1982
1983 <div class="content_section_text">
1984 <p>
1985- By default, Debian does not allow access through the web browser to
1986+ By default, Ubuntu does not allow access through the web browser to
1987 <em>any</em> file apart of those located in <tt>/var/www</tt>,
1988 <a href="http://httpd.apache.org/docs/2.4/mod/mod_userdir.html" rel="nofollow">public_html</a>
1989 directories (when enabled) and <tt>/usr/share</tt> (for web
1990@@ -333,7 +340,7 @@
1991 document root directory in <tt>/etc/apache2/apache2.conf</tt>.
1992 </p>
1993 <p>
1994- The default Debian document root is <tt>/var/www/html</tt>. You
1995+ The default Ubuntu document root is <tt>/var/www/html</tt>. You
1996 can make your own virtual hosts under /var/www. This is different
1997 to previous releases which provides better security out of the box.
1998 </p>
1999@@ -345,9 +352,9 @@
2000 </div>
2001 <div class="content_section_text">
2002 <p>
2003- Please use the <tt>reportbug</tt> tool to report bugs in the
2004- Apache2 package with Debian. However, check <a
2005- href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?ordering=normal;archive=0;src=apache2;repeatmerged=0"
2006+ Please use the <tt>ubuntu-bug</tt> tool to report bugs in the
2007+ Apache2 package with Ubuntu. However, check <a
2008+ href="https://bugs.launchpad.net/ubuntu/+source/apache2"
2009 rel="nofollow">existing bug reports</a> before reporting a new bug.
2010 </p>
2011 <p>
2012diff --git a/debian/patches/086_svn_cross_compiles b/debian/patches/086_svn_cross_compiles
2013new file mode 100644
2014index 0000000..b237908
2015--- /dev/null
2016+++ b/debian/patches/086_svn_cross_compiles
2017@@ -0,0 +1,118 @@
2018+Description: Pull upstream fixes for autotools for cross-compiling
2019+Author: Adam Conrad <adconrad@ubuntu.com>
2020+Origin: upstream, http://svn.eu.apache.org/viewvc?view=revision&revision=1328445
2021+Origin: upstream, http://svn.eu.apache.org/viewvc?view=revision&revision=1327907
2022+Origin: upstream, http://svn.eu.apache.org/viewvc?view=revision&revision=1328390
2023+Origin: upstream, http://svn.eu.apache.org/viewvc?view=revision&revision=1328714
2024+Forwarded: not-needed
2025+
2026+Index: apache2-2.4.29/acinclude.m4
2027+===================================================================
2028+--- apache2-2.4.29.orig/acinclude.m4 2017-11-10 10:56:51.488205250 -0500
2029++++ apache2-2.4.29/acinclude.m4 2017-11-10 10:56:51.484205199 -0500
2030+@@ -55,6 +55,8 @@ AC_DEFUN([APACHE_GEN_CONFIG_VARS],[
2031+ APACHE_SUBST(CPPFLAGS)
2032+ APACHE_SUBST(CFLAGS)
2033+ APACHE_SUBST(CXXFLAGS)
2034++ APACHE_SUBST(CC_FOR_BUILD)
2035++ APACHE_SUBST(CFLAGS_FOR_BUILD)
2036+ APACHE_SUBST(LTFLAGS)
2037+ APACHE_SUBST(LDFLAGS)
2038+ APACHE_SUBST(LT_LDFLAGS)
2039+@@ -697,7 +699,7 @@ int main(void)
2040+ {
2041+ return sizeof(void *) < sizeof(long);
2042+ }], [ap_cv_void_ptr_lt_long=no], [ap_cv_void_ptr_lt_long=yes],
2043+- [ap_cv_void_ptr_lt_long=yes])])
2044++ [ap_cv_void_ptr_lt_long="cross compile - not checked"])])
2045+
2046+ if test "$ap_cv_void_ptr_lt_long" = "yes"; then
2047+ AC_MSG_ERROR([Size of "void *" is less than size of "long"])
2048+Index: apache2-2.4.29/configure
2049+===================================================================
2050+--- apache2-2.4.29.orig/configure 2017-11-10 10:56:51.488205250 -0500
2051++++ apache2-2.4.29/configure 2017-11-10 10:56:51.488205250 -0500
2052+@@ -662,6 +662,8 @@ HTTPD_LDFLAGS
2053+ SH_LDFLAGS
2054+ LT_LDFLAGS
2055+ LTFLAGS
2056++CFLAGS_FOR_BUILD
2057++CC_FOR_BUILD
2058+ CXXFLAGS
2059+ CXX
2060+ other_targets
2061+@@ -6071,6 +6073,12 @@ fi
2062+
2063+
2064+
2065++if test "x${build_alias}" != "x${host_alias}"; then
2066++ if test "x${CC_FOR_BUILD}" = "x"; then
2067++ CC_FOR_BUILD=cc
2068++ fi
2069++fi
2070++
2071+ if test "x${cache_file}" = "x/dev/null"; then
2072+ # Likewise, ensure that CC and CPP are passed through to the pcre
2073+ # configure script iff caching is disabled (the autoconf 2.5x default).
2074+@@ -7698,7 +7706,7 @@ if ${ap_cv_void_ptr_lt_long+:} false; th
2075+ $as_echo_n "(cached) " >&6
2076+ else
2077+ if test "$cross_compiling" = yes; then :
2078+- ap_cv_void_ptr_lt_long=yes
2079++ ap_cv_void_ptr_lt_long="cross compile - not checked"
2080+ else
2081+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2082+ /* end confdefs.h. */
2083+@@ -37522,6 +37530,14 @@ $as_echo "$as_me: " >&6;}
2084+
2085+
2086+
2087++ APACHE_VAR_SUBST="$APACHE_VAR_SUBST CC_FOR_BUILD"
2088++
2089++
2090++
2091++ APACHE_VAR_SUBST="$APACHE_VAR_SUBST CFLAGS_FOR_BUILD"
2092++
2093++
2094++
2095+ APACHE_VAR_SUBST="$APACHE_VAR_SUBST LTFLAGS"
2096+
2097+
2098+Index: apache2-2.4.29/configure.in
2099+===================================================================
2100+--- apache2-2.4.29.orig/configure.in 2017-11-10 10:56:51.488205250 -0500
2101++++ apache2-2.4.29/configure.in 2017-11-10 10:56:51.488205250 -0500
2102+@@ -206,6 +206,14 @@ AC_PROG_CPP
2103+ dnl Try to get c99 support for variadic macros
2104+ ifdef([AC_PROG_CC_C99], [AC_PROG_CC_C99])
2105+
2106++dnl In case of cross compilation we set CC_FOR_BUILD to cc unless
2107++dnl we got already CC_FOR_BUILD from environment.
2108++if test "x${build_alias}" != "x${host_alias}"; then
2109++ if test "x${CC_FOR_BUILD}" = "x"; then
2110++ CC_FOR_BUILD=cc
2111++ fi
2112++fi
2113++
2114+ if test "x${cache_file}" = "x/dev/null"; then
2115+ # Likewise, ensure that CC and CPP are passed through to the pcre
2116+ # configure script iff caching is disabled (the autoconf 2.5x default).
2117+Index: apache2-2.4.29/server/Makefile.in
2118+===================================================================
2119+--- apache2-2.4.29.orig/server/Makefile.in 2017-11-10 10:56:51.488205250 -0500
2120++++ apache2-2.4.29/server/Makefile.in 2017-11-10 10:56:51.488205250 -0500
2121+@@ -24,9 +24,14 @@ TARGETS = delete-exports $(LTLIBRARY_NAM
2122+ include $(top_builddir)/build/rules.mk
2123+ include $(top_srcdir)/build/library.mk
2124+
2125++ifdef CC_FOR_BUILD
2126++gen_test_char: gen_test_char.c
2127++ $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) -DCROSS_COMPILE -o $@ $<
2128++else
2129+ gen_test_char_OBJECTS = gen_test_char.lo
2130+ gen_test_char: $(gen_test_char_OBJECTS)
2131+ $(LINK) $(EXTRA_LDFLAGS) $(gen_test_char_OBJECTS) $(EXTRA_LIBS)
2132++endif
2133+
2134+ test_char.h: gen_test_char
2135+ ./gen_test_char > test_char.h
2136diff --git a/debian/patches/series b/debian/patches/series
2137index 145853d..6e33289 100644
2138--- a/debian/patches/series
2139+++ b/debian/patches/series
2140@@ -9,3 +9,6 @@ reproducible_builds.diff
2141 #suexec-custom.patch
2142
2143 remove_mod_lbmethod_load_order_dependency.diff
2144+
2145+# Patches added by Ubuntu
2146+086_svn_cross_compiles
2147diff --git a/debian/rules b/debian/rules
2148index e2d693c..5654762 100755
2149--- a/debian/rules
2150+++ b/debian/rules
2151@@ -113,6 +113,7 @@ configure-stamp: prebuild-checks-stamp support/suexec-custom.c
2152 --with-apr=/usr/bin/apr-1-config --with-apr-util=/usr/bin/apu-1-config \
2153 --with-pcre=yes \
2154 --enable-pie \
2155+ --disable-md \
2156 --enable-mpms-shared=all \
2157 --enable-mods-shared="all brotli cgi ident authnz_fcgi imagemap cern_meta proxy_fdpass proxy_http2 bucketeer case_filter case_filter_in" \
2158 --enable-mods-static="unixd logio watchdog version" \
2159@@ -177,7 +178,7 @@ override_dh_installdocs-indep:
2160 dh_installdocs -i
2161
2162 override_dh_installdocs-arch:
2163- dh_installdocs --link-doc=apache2 -papache2 -papache2-dbg -plibapache2-mod-md -plibapache2-mod-proxy-uwsgi
2164+ dh_installdocs --link-doc=apache2 -papache2 -papache2-dbg -plibapache2-mod-proxy-uwsgi
2165 dh_installdocs --link-doc=apache2-dev -papache2-ssl-dev
2166 dh_installdocs -a
2167
2168diff --git a/debian/source/include-binaries b/debian/source/include-binaries
2169index b6a30fe..c9128c9 100644
2170--- a/debian/source/include-binaries
2171+++ b/debian/source/include-binaries
2172@@ -16,6 +16,7 @@ debian/icons/odf6odp-20x22.png
2173 debian/icons/odf6otp-20x22.png
2174 debian/icons/odf6oth-20x22.png
2175 debian/icons/openlogo-75.png
2176+debian/icons/ubuntu-logo.png
2177 debian/upstream/signing-key.pgp
2178 debian/perl-framework/t/htdocs/apache/acceptpathinfo/index.shtml
2179 debian/perl-framework/t/htdocs/apache/acceptpathinfo/info.php
2180diff --git a/debian/tests/check-http2 b/debian/tests/check-http2
2181new file mode 100644
2182index 0000000..6bc9125
2183--- /dev/null
2184+++ b/debian/tests/check-http2
2185@@ -0,0 +1,41 @@
2186+#!/bin/sh
2187+set -uxe
2188+
2189+# http2 is rather new, check that it at least generally works
2190+# Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
2191+
2192+a2enmod http2
2193+a2enmod ssl
2194+a2ensite default-ssl
2195+# Enable globally
2196+echo "Protocols h2c h2 http/1.1" >> /etc/apache2/apache2.conf
2197+service apache2 restart
2198+
2199+# Use curl here. wget doesn't work on Debian, even with --no-check-certificate
2200+# wget on Debian gives me:
2201+# GnuTLS: A TLS warning alert has been received.
2202+# Unable to establish SSL connection.
2203+# Presumably this is due to the self-signed certificate, but I'm not sure how
2204+# to skip the warning with wget. curl will do for now.
2205+echo "Hello, world!" > /var/www/html/hello.txt
2206+
2207+testapache () {
2208+ cmd="${1}"
2209+ result=$(${cmd})
2210+
2211+ if [ "$result" != "Hello, world!" ]; then
2212+ echo "Unexpected result: ${result}" >&2
2213+ exit 1
2214+ else
2215+ echo OK
2216+ fi
2217+}
2218+
2219+# https shall not affect http
2220+testapache "curl -s -k http://localhost/hello.txt"
2221+# https shall not affect https
2222+testapache "curl -s -k https://localhost/hello.txt"
2223+#plain http2
2224+testapache "nghttp --no-verify-peer https://localhost/hello.txt"
2225+#http2 upgrade
2226+testapache "nghttp -u --no-verify-peer http://localhost/hello.txt"
2227diff --git a/debian/tests/control b/debian/tests/control
2228index fb913b5..230f19e 100644
2229--- a/debian/tests/control
2230+++ b/debian/tests/control
2231@@ -23,6 +23,10 @@ Tests: ssl-passphrase
2232 Restrictions: needs-root allow-stderr breaks-testbed
2233 Depends: apache2, curl, expect, ssl-cert
2234
2235+Tests: check-http2
2236+Restrictions: needs-root allow-stderr breaks-testbed
2237+Depends: apache2, curl, ssl-cert, nghttp2-client
2238+
2239 Tests: chroot
2240 Features: no-build-needed
2241 Restrictions: needs-root allow-stderr breaks-testbed
2242diff --git a/docs/manual/style/latex/atbeginend.sty b/docs/manual/style/latex/atbeginend.sty
2243new file mode 100644
2244index 0000000..79b555d
2245--- /dev/null
2246+++ b/docs/manual/style/latex/atbeginend.sty
2247@@ -0,0 +1,80 @@
2248+% atbeginend.sty
2249+%
2250+% Licensed to the Apache Software Foundation (ASF) under one or more
2251+% contributor license agreements. See the NOTICE file distributed with
2252+% this work for additional information regarding copyright ownership.
2253+% The ASF licenses this file to You under the Apache License, Version 2.0
2254+% (the "License"); you may not use this file except in compliance with
2255+% the License. You may obtain a copy of the License at
2256+%
2257+% http://www.apache.org/licenses/LICENSE-2.0
2258+%
2259+% Unless required by applicable law or agreed to in writing, software
2260+% distributed under the License is distributed on an "AS IS" BASIS,
2261+% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2262+% See the License for the specific language governing permissions and
2263+% limitations under the License.
2264+
2265+% defines
2266+% \BeforeBegin{environment}{code-to-execute}
2267+% \BeforeEnd {environment}{code-to-execute}
2268+% \AfterBegin {environment}{code-to-execute}
2269+% \AfterEnd {environment}{code-to-execute}
2270+%
2271+% Save \begin and \end to \BeginEnvironment and \EndEnvironment
2272+\let\BeginEnvironment=\begin
2273+\let\EndEnvironment=\end
2274+
2275+\def\IfUnDef#1{\expandafter\ifx\csname#1\endcsname\relax}
2276+
2277+% Null command needed to for \nothing{something}=.nothing.
2278+\def\NullCom#1{}
2279+
2280+\def\begin#1{%
2281+%
2282+% if defined \BeforeBeg for this environment, execute it
2283+\IfUnDef{BeforeBeg#1}\else\csname BeforeBeg#1\endcsname\fi%
2284+%
2285+%
2286+%
2287+\IfUnDef{AfterBeg#1}% This is done to skip the command for environments
2288+ % which can take arguments, like multicols; YOU MUST NOT
2289+ % USE \AfterBegin{...}{...} for such environments!
2290+ \let\SaveBegEng=\BeginEnvironment%
2291+\else%
2292+ % Start this environment
2293+ \BeginEnvironment{#1}%
2294+ % and execute code after \begin{environment}
2295+ \csname AfterBeg#1\endcsname%
2296+ %
2297+ \let\SaveBegEng=\NullCom%
2298+\fi%
2299+\SaveBegEng{#1}%
2300+}
2301+
2302+
2303+\def\end#1{%
2304+%
2305+% execute code before \end{environment}
2306+\IfUnDef{BeforeEnd#1}\else\csname BeforeEnd#1\endcsname\fi%
2307+%
2308+% close this environment
2309+\EndEnvironment{#1}%
2310+%
2311+% and execute code after \begin{environment}
2312+\IfUnDef{AfterEnd#1}\else\csname AfterEnd#1\endcsname\fi%
2313+}
2314+
2315+
2316+%% Now, define commands
2317+% \BeforeBegin{environment}{code-to-execute}
2318+% \BeforeEnd {environment}{code-to-execute}
2319+% \AfterBegin {environment}{code-to-execute}
2320+% \AfterEnd {environment}{code-to-execute}
2321+
2322+\def\BeforeBegin#1#2{\expandafter\gdef\csname BeforeBeg#1\endcsname
2323+{#2}}
2324+\def\BeforeEnd #1#2{\expandafter\gdef\csname BeforeEnd#1\endcsname
2325+{#2}}
2326+\def\AfterBegin #1#2{\expandafter\gdef\csname AfterBeg#1\endcsname {#2}}
2327+\def\AfterEnd #1#2{\expandafter\gdef\csname AfterEnd#1\endcsname{#2}}
2328diff --git a/docs/manual/style/manualpage.dtd b/docs/manual/style/manualpage.dtd
2329new file mode 100644
2330index 0000000..e9c22a0
2331--- /dev/null
2332+++ b/docs/manual/style/manualpage.dtd
2333@@ -0,0 +1,29 @@
2334+<?xml version='1.0' encoding='UTF-8' ?>
2335+
2336+<!--
2337+ Licensed to the Apache Software Foundation (ASF) under one or more
2338+ contributor license agreements. See the NOTICE file distributed with
2339+ this work for additional information regarding copyright ownership.
2340+ The ASF licenses this file to You under the Apache License, Version 2.0
2341+ (the "License"); you may not use this file except in compliance with
2342+ the License. You may obtain a copy of the License at
2343+
2344+ http://www.apache.org/licenses/LICENSE-2.0
2345+
2346+ Unless required by applicable law or agreed to in writing, software
2347+ distributed under the License is distributed on an "AS IS" BASIS,
2348+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2349+ See the License for the specific language governing permissions and
2350+ limitations under the License.
2351+-->
2352+
2353+<!ENTITY % common SYSTEM "common.dtd">
2354+%common;
2355+
2356+<!-- <manualpage> is the root element -->
2357+<!ELEMENT manualpage (parentdocument?, title, summary?,
2358+seealso*, section*)>
2359+
2360+<!ATTLIST manualpage metafile CDATA #REQUIRED
2361+ upgrade CDATA #IMPLIED
2362+>
2363diff --git a/docs/manual/style/modulesynopsis.dtd b/docs/manual/style/modulesynopsis.dtd
2364new file mode 100644
2365index 0000000..aa3d6ee
2366--- /dev/null
2367+++ b/docs/manual/style/modulesynopsis.dtd
2368@@ -0,0 +1,92 @@
2369+<?xml version='1.0' encoding='UTF-8' ?>
2370+
2371+<!--
2372+ Licensed to the Apache Software Foundation (ASF) under one or more
2373+ contributor license agreements. See the NOTICE file distributed with
2374+ this work for additional information regarding copyright ownership.
2375+ The ASF licenses this file to You under the Apache License, Version 2.0
2376+ (the "License"); you may not use this file except in compliance with
2377+ the License. You may obtain a copy of the License at
2378+
2379+ http://www.apache.org/licenses/LICENSE-2.0
2380+
2381+ Unless required by applicable law or agreed to in writing, software
2382+ distributed under the License is distributed on an "AS IS" BASIS,
2383+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2384+ See the License for the specific language governing permissions and
2385+ limitations under the License.
2386+-->
2387+
2388+<!ENTITY % sitemap SYSTEM "sitemap.dtd">
2389+%sitemap;
2390+
2391+<!ELEMENT modulesynopsis (name , description, status, hint?, sourcefile?,
2392+identifier? , compatibility? , summary? , seealso* , section*,
2393+directivesynopsis*)>
2394+
2395+<!ATTLIST modulesynopsis metafile CDATA #REQUIRED
2396+ upgrade CDATA #IMPLIED>
2397+
2398+<!ELEMENT directivesynopsis (name , description? , syntax? , default?
2399+, contextlist? , override? , modulelist?, status?, compatibility? ,
2400+usage?, seealso*)>
2401+
2402+<!ELEMENT name (#PCDATA)>
2403+
2404+<!ELEMENT status (#PCDATA)>
2405+
2406+<!ELEMENT hint %Inline;>
2407+
2408+<!ELEMENT identifier (#PCDATA)>
2409+
2410+<!ELEMENT sourcefile (#PCDATA)>
2411+
2412+<!ELEMENT compatibility %Inline;>
2413+
2414+<!ELEMENT description %Inline;>
2415+
2416+<!--
2417+ idtype is appended to the directive name when generating links to allow
2418+ a directive of type section to share the name with another directive.
2419+ The attribute type could have been (re)used instead but it would have broken
2420+ pre-existing links.
2421+-->
2422+<!ATTLIST directivesynopsis type CDATA #IMPLIED
2423+ idtype CDATA #IMPLIED
2424+ location CDATA #IMPLIED >
2425+
2426+<!ELEMENT syntax %Inline;>
2427+
2428+<!ELEMENT default (#PCDATA | directive | br)*>
2429+
2430+<!ELEMENT contextlist (context+)+>
2431+
2432+<!ELEMENT context (#PCDATA)>
2433+
2434+<!ELEMENT override (#PCDATA)>
2435+
2436+<!ELEMENT usage %Block;>
2437+
2438+<!-- Used in index.xml -->
2439+<!ELEMENT moduleindex (title, summary, seealso*)>
2440+
2441+<!ATTLIST moduleindex metafile CDATA #REQUIRED>
2442+
2443+<!-- Used in directive.xml -->
2444+<!ELEMENT directiveindex (title | summary)+>
2445+
2446+<!ATTLIST directiveindex metafile CDATA #REQUIRED>
2447+
2448+<!-- Used in quickreference.xml -->
2449+<!ELEMENT quickreference (title | summary | legend)+>
2450+<!ATTLIST quickreference metafile CDATA #REQUIRED>
2451+
2452+<!ELEMENT legend (table, table)>
2453+
2454+<!-- Used in overrides.xml -->
2455+<!ELEMENT overrideindex (title | summary | overridesummary)+>
2456+<!ATTLIST overrideindex metafile CDATA #REQUIRED>
2457+
2458+<!ELEMENT overridesummary %Block;>
2459+<!ATTLIST overridesummary class CDATA #IMPLIED
2460+ fallback CDATA #IMPLIED>
2461diff --git a/docs/manual/style/scripts/MINIFY b/docs/manual/style/scripts/MINIFY
2462new file mode 100644
2463index 0000000..2c1efc3
2464--- /dev/null
2465+++ b/docs/manual/style/scripts/MINIFY
2466@@ -0,0 +1,5 @@
2467+#!/bin/sh
2468+
2469+(echo '// see prettify.js for copyright, license and expanded version'; python -mrjsmin <prettify.js) >prettify.min.js
2470+
2471+# needs python and rjsmin installed
2472diff --git a/docs/manual/style/scripts/prettify.js b/docs/manual/style/scripts/prettify.js
2473new file mode 100644
2474index 0000000..2df198d
2475--- /dev/null
2476+++ b/docs/manual/style/scripts/prettify.js
2477@@ -0,0 +1,1622 @@
2478+// Copyright (C) 2006 Google Inc.
2479+//
2480+// Licensed under the Apache License, Version 2.0 (the "License");
2481+// you may not use this file except in compliance with the License.
2482+// You may obtain a copy of the License at
2483+//
2484+// http://www.apache.org/licenses/LICENSE-2.0
2485+//
2486+// Unless required by applicable law or agreed to in writing, software
2487+// distributed under the License is distributed on an "AS IS" BASIS,
2488+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2489+// See the License for the specific language governing permissions and
2490+// limitations under the License.
2491+
2492+
2493+/**
2494+ * @fileoverview
2495+ * some functions for browser-side pretty printing of code contained in html.
2496+ *
2497+ * <p>
2498+ * For a fairly comprehensive set of languages see the
2499+ * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
2500+ * file that came with this source. At a minimum, the lexer should work on a
2501+ * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
2502+ * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk
2503+ * and a subset of Perl, but, because of commenting conventions, doesn't work on
2504+ * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
2505+ * <p>
2506+ * Usage: <ol>
2507+ * <li> include this source file in an html page via
2508+ * {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
2509+ * <li> define style rules. See the example page for examples.
2510+ * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
2511+ * {@code class=prettyprint.}
2512+ * You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
2513+ * printer needs to do more substantial DOM manipulations to support that, so
2514+ * some css styles may not be preserved.
2515+ * </ol>
2516+ * That's it. I wanted to keep the API as simple as possible, so there's no
2517+ * need to specify which language the code is in, but if you wish, you can add
2518+ * another class to the {@code <pre>} or {@code <code>} element to specify the
2519+ * language, as in {@code <pre class="prettyprint lang-java">}. Any class that
2520+ * starts with "lang-" followed by a file extension, specifies the file type.
2521+ * See the "lang-*.js" files in this directory for code that implements
2522+ * per-language file handlers.
2523+ * <p>
2524+ * Change log:<br>
2525+ * cbeust, 2006/08/22
2526+ * <blockquote>
2527+ * Java annotations (start with "@") are now captured as literals ("lit")
2528+ * </blockquote>
2529+ * @requires console
2530+ */
2531+
2532+// JSLint declarations
2533+/*global console, document, navigator, setTimeout, window, define */
2534+
2535+/**
2536+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
2537+ * UI events.
2538+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
2539+ */
2540+window['PR_SHOULD_USE_CONTINUATION'] = true;
2541+
2542+/**
2543+ * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
2544+ * {@code class=prettyprint} and prettify them.
2545+ *
2546+ * @param {Function?} opt_whenDone if specified, called when the last entry
2547+ * has been finished.
2548+ */
2549+var prettyPrintOne;
2550+/**
2551+ * Pretty print a chunk of code.
2552+ *
2553+ * @param {string} sourceCodeHtml code as html
2554+ * @return {string} code as html, but prettier
2555+ */
2556+var prettyPrint;
2557+
2558+
2559+(function () {
2560+ var win = window;
2561+ // Keyword lists for various languages.
2562+ // We use things that coerce to strings to make them compact when minified
2563+ // and to defeat aggressive optimizers that fold large string constants.
2564+ var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
2565+ var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," +
2566+ "double,enum,extern,float,goto,int,long,register,short,signed,sizeof,module," +
2567+ "static,struct,switch,typedef,union,unsigned,void,volatile"];
2568+ var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
2569+ "new,operator,private,protected,public,this,throw,true,try,typeof"];
2570+ var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
2571+ "concept,concept_map,const_cast,constexpr,decltype," +
2572+ "dynamic_cast,explicit,export,friend,inline,late_check," +
2573+ "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
2574+ "template,typeid,typename,using,virtual,where,request_req"];
2575+ var JAVA_KEYWORDS = [COMMON_KEYWORDS,
2576+ "abstract,boolean,byte,extends,final,finally,implements,import," +
2577+ "instanceof,null,native,package,strictfp,super,synchronized,throws," +
2578+ "transient"];
2579+ var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
2580+ "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
2581+ "fixed,foreach,from,group,implicit,in,interface,internal,into,is,let," +
2582+ "lock,object,out,override,orderby,params,partial,readonly,ref,sbyte," +
2583+ "sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort," +
2584+ "var,virtual,where"];
2585+ var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
2586+ "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
2587+ "throw,true,try,unless,until,when,while,yes";
2588+ var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
2589+ "debugger,eval,export,function,get,null,set,undefined,var,with," +
2590+ "Infinity,NaN"];
2591+ var PERL_KEYWORDS = "caller,delete,die,do,dump,else,elsif,eval,exit,foreach,for," +
2592+ "goto,if,import,last,local,my,next,no,our,print,printf,package,redo,require," +
2593+ "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
2594+ var PHP_KEYWORDS = "abstract,and,array,as,break,case,catch,cfunction,class," +
2595+ "clone,const,continue,declare,default,do,else,elseif,enddeclare,endfor," +
2596+ "endforeach,endif,endswitch,endwhile,extends,final,for,foreach,function," +
2597+ "global,goto,if,implements,interface,instanceof,namespace,new,old_function," +
2598+ "or,private,protected,public,static,switch,throw,try,use,var,while,xor," +
2599+ "die,echo,empty,exit,eval,include,include_once,isset,list,require," +
2600+ "require_once,return,print,unset";
2601+ var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
2602+ "elif,except,exec,finally,from,global,import,in,is,lambda," +
2603+ "nonlocal,not,or,pass,print,raise,try,with,yield," +
2604+ "False,True,None"];
2605+ var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
2606+ "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
2607+ "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
2608+ "BEGIN,END"];
2609+ var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
2610+ "function,in,local,set,then,until,echo"];
2611+ var CONFIG_ENVS = ["User-Agent,HTTP_USER_AGENT,HTTP_REFERER,HTTP_COOKIE,HTTP_FORWARDED,HTTP_HOST,HTTP_PROXY_CONNECTION,HTTP_ACCEPT,REMOTE_ADDR,REMOTE_HOST,REMOTE_PORT,REMOTE_USER,REMOTE_IDENT,REQUEST_METHOD,SCRIPT_FILENAME,PATH_INFO,QUERY_STRING,AUTH_TYPE,DOCUMENT_ROOT,SERVER_ADMIN,SERVER_NAME,SERVER_ADDR,SERVER_PORT,SERVER_PROTOCOL,SERVER_SOFTWARE,TIME_YEAR,TIME_MON,TIME_DAY,TIME_HOUR,TIME_MIN,TIME_SEC,TIME_WDAY,TIME,API_VERSION,THE_REQUEST,REQUEST_URI,REQUEST_FILENAME,IS_SUBREQ,HTTPS,REQUEST_SCHEME"];
2612+ var CONFIG_KEYWORDS = ["<AuthnProviderAlias>,<AuthzProviderAlias>,<Directory>,<DirectoryMatch>,<Else>,<ElseIf>,<Files>,<FilesMatch>,<If>,<IfDefine>,<IfModule>,<IfVersion>,<Limit>,<LimitExcept>,<Location>,<LocationMatch>,<MDomainSet>,<Macro>,<Proxy>,<ProxyMatch>,<RequireAll>,<RequireAny>,<RequireNone>,<VirtualHost>,AcceptFilter,AcceptPathInfo,AccessFileName,Action,AddAlt,AddAltByEncoding,AddAltByType,AddCharset,AddDefaultCharset,AddDescription,AddEncoding,AddHandler,AddIcon,AddIconByEncoding,AddIconByType,AddInputFilter,AddLanguage,AddModuleInfo,AddOutputFilter,AddOutputFilterByType,AddType,Alias,AliasMatch,Allow,AllowCONNECT,AllowEncodedSlashes,AllowMethods,AllowOverride,AllowOverrideList,Anonymous,Anonymous_LogEmail,Anonymous_MustGiveEmail,Anonymous_NoUserID,Anonymous_VerifyEmail,AsyncRequestWorkerFactor,AuthBasicAuthoritative,AuthBasicFake,AuthBasicProvider,AuthBasicUseDigestAlgorithm,AuthDBDUserPWQuery,AuthDBDUserRealmQuery,AuthDBMGroupFile,AuthDBMType,AuthDBMUserFile,AuthDigestAlgorithm,AuthDigestDomain,AuthDigestNonceLifetime,AuthDigestProvider,AuthDigestQop,AuthDigestShmemSize,AuthFormAuthoritative,AuthFormBody,AuthFormDisableNoStore,AuthFormFakeBasicAuth,AuthFormLocation,AuthFormLoginRequiredLocation,AuthFormLoginSuccessLocation,AuthFormLogoutLocation,AuthFormMethod,AuthFormMimetype,AuthFormPassword,AuthFormProvider,AuthFormSitePassphrase,AuthFormSize,AuthFormUsername,AuthGroupFile,AuthLDAPAuthorizePrefix,AuthLDAPBindAuthoritative,AuthLDAPBindDN,AuthLDAPBindPassword,AuthLDAPCharsetConfig,AuthLDAPCompareAsUser,AuthLDAPCompareDNOnServer,AuthLDAPDereferenceAliases,AuthLDAPGroupAttribute,AuthLDAPGroupAttributeIsDN,AuthLDAPInitialBindAsUser,AuthLDAPInitialBindPattern,AuthLDAPMaxSubGroupDepth,AuthLDAPRemoteUserAttribute,AuthLDAPRemoteUserIsDN,AuthLDAPSearchAsUser,AuthLDAPSubGroupAttribute,AuthLDAPSubGroupClass,AuthLDAPUrl,AuthMerging,AuthName,AuthType,AuthUserFile,AuthnCacheContext,AuthnCacheEnable,AuthnCacheProvideFor,AuthnCacheSOCache,AuthnCacheTimeout,AuthnzFcgiCheckAuthnProvider,AuthnzFcgiDefineProvider,AuthzDBDLoginToReferer,AuthzDBDQuery,AuthzDBDRedirectQuery,AuthzDBMType,AuthzSendForbiddenOnFailure,BalancerGrowth,BalancerInherit,BalancerMember,BalancerPersist,BrotliAlterETag,BrotliCompressionMaxInputBlock,BrotliCompressionQuality,BrotliCompressionWindow,BrotliFilterNote,BrowserMatch,BrowserMatchNoCase,BufferSize,BufferedLogs,CGIDScriptTimeout,CGIMapExtension,CGIPassAuth,CGIVar,CacheDefaultExpire,CacheDetailHeader,CacheDirLength,CacheDirLevels,CacheDisable,CacheEnable,CacheFile,CacheHeader,CacheIgnoreCacheControl,CacheIgnoreHeaders,CacheIgnoreNoLastMod,CacheIgnoreQueryString,CacheIgnoreURLSessionIdentifiers,CacheKeyBaseURL,CacheLastModifiedFactor,CacheLock,CacheLockMaxAge,CacheLockPath,CacheMaxExpire,CacheMaxFileSize,CacheMinExpire,CacheMinFileSize,CacheNegotiatedDocs,CacheQuickHandler,CacheReadSize,CacheReadTime,CacheRoot,CacheSocache,CacheSocacheMaxSize,CacheSocacheMaxTime,CacheSocacheMinTime,CacheSocacheReadSize,CacheSocacheReadTime,CacheStaleOnError,CacheStoreExpired,CacheStoreNoStore,CacheStorePrivate,CharsetDefault,CharsetOptions,CharsetSourceEnc,CheckCaseOnly,CheckSpelling,ChrootDir,ContentDigest,CookieDomain,CookieExpires,CookieName,CookieStyle,CookieTracking,CoreDumpDirectory,CustomLog,DBDExptime,DBDInitSQL,DBDKeep,DBDMax,DBDMin,DBDParams,DBDPersist,DBDPrepareSQL,DBDriver,DTracePrivileges,Dav,DavDepthInfinity,DavGenericLockDB,DavLockDB,DavMinTimeout,DefaultIcon,DefaultLanguage,DefaultRuntimeDir,DefaultType,Define,DeflateBufferSize,DeflateCompressionLevel,DeflateFilterNote,DeflateInflateLimitRequestBody,DeflateInflateRatioBurst,DeflateInflateRatioLimit,DeflateMemLevel,DeflateWindowSize,Deny,DirectoryCheckHandler,DirectoryIndex,DirectoryIndexRedirect,DirectorySlash,DocumentRoot,DumpIOInput,DumpIOOutput,EnableExceptionHook,EnableMMAP,EnableSendfile,Error,ErrorDocument,ErrorLog,ErrorLogFormat,Example,ExpiresActive,ExpiresByType,ExpiresDefault,ExtFilterDefine,ExtFilterOptions,ExtendedStatus,FallbackResource,FileETag,FilterChain,FilterDeclare,FilterProtocol,FilterProvider,FilterTrace,ForceLanguagePriority,ForceType,ForensicLog,GlobalLog,GprofDir,GracefulShutdownTimeout,Group,H2CopyFiles,H2Direct,H2EarlyHints,H2MaxSessionStreams,H2MaxWorkerIdleSeconds,H2MaxWorkers,H2MinWorkers,H2ModernTLSOnly,H2Push,H2PushDiarySize,H2PushPriority,H2PushResource,H2SerializeHeaders,H2StreamMaxMemSize,H2TLSCoolDownSecs,H2TLSWarmUpSize,H2Upgrade,H2WindowSize,Header,HeaderName,HeartbeatAddress,HeartbeatListen,HeartbeatMaxServers,HeartbeatStorage,HeartbeatStorage,HostnameLookups,HttpProtocolOptions,ISAPIAppendLogToErrors,ISAPIAppendLogToQuery,ISAPICacheFile,ISAPIFakeAsync,ISAPILogNotSupported,ISAPIReadAheadBuffer,IdentityCheck,IdentityCheckTimeout,ImapBase,ImapDefault,ImapMenu,Include,IncludeOptional,IndexHeadInsert,IndexIgnore,IndexIgnoreReset,IndexOptions,IndexOrderDefault,IndexStyleSheet,InputSed,KeepAlive,KeepAliveTimeout,KeptBodySize,LDAPCacheEntries,LDAPCacheTTL,LDAPConnectionPoolTTL,LDAPConnectionTimeout,LDAPLibraryDebug,LDAPOpCacheEntries,LDAPOpCacheTTL,LDAPReferralHopLimit,LDAPReferrals,LDAPRetries,LDAPRetryDelay,LDAPSharedCacheFile,LDAPSharedCacheSize,LDAPTimeout,LDAPTrustedClientCert,LDAPTrustedGlobalCert,LDAPTrustedMode,LDAPVerifyServerCert,LanguagePriority,LimitInternalRecursion,LimitRequestBody,LimitRequestFieldSize,LimitRequestFields,LimitRequestLine,LimitXMLRequestBody,Listen,ListenBackLog,ListenCoresBucketsRatio,LoadFile,LoadModule,LogFormat,LogIOTrackTTFB,LogLevel,LogMessage,LuaAuthzProvider,LuaCodeCache,LuaHookAccessChecker,LuaHookAuthChecker,LuaHookCheckUserID,LuaHookFixups,LuaHookInsertFilter,LuaHookLog,LuaHookMapToStorage,LuaHookTranslateName,LuaHookTypeChecker,LuaInherit,LuaInputFilter,LuaMapHandler,LuaOutputFilter,LuaPackageCPath,LuaPackagePath,LuaQuickHandler,LuaRoot,LuaScope,MDBaseServer,MDCAChallenges,MDCertificateAgreement,MDCertificateAuthority,MDCertificateProtocol,MDDriveMode,MDHttpProxy,MDMember,MDMembers,MDMustStaple,MDNotifyCmd,MDPortMap,MDPrivateKeys,MDRenewWindow,MDRequireHttps,MDStoreDir,MDomain,MMapFile,MaxConnectionsPerChild,MaxKeepAliveRequests,MaxMemFree,MaxRangeOverlaps,MaxRangeReversals,MaxRanges,MaxRequestWorkers,MaxSpareServers,MaxSpareThreads,MaxThreads,MemcacheConnTTL,MergeTrailers,MetaDir,MetaFiles,MetaSuffix,MimeMagicFile,MinSpareServers,MinSpareThreads,ModMimeUsePathInfo,ModemStandard,MultiviewsMatch,Mutex,NWSSLTrustedCerts,NWSSLUpgradeable,NameVirtualHost,NoProxy,Options,Order,OutputSed,PassEnv,PidFile,PrivilegesMode,Protocol,ProtocolEcho,Protocols,ProtocolsHonorOrder,ProxyAddHeaders,ProxyBadHeader,ProxyBlock,ProxyDomain,ProxyErrorOverride,ProxyExpressDBMFile,ProxyExpressDBMType,ProxyExpressEnable,ProxyFCGIBackendType,ProxyFCGISetEnvIf,ProxyFtpDirCharset,ProxyFtpEscapeWildcards,ProxyFtpListOnWildcard,ProxyHCExpr,ProxyHCTPsize,ProxyHCTemplate,ProxyHTMLBufSize,ProxyHTMLCharsetOut,ProxyHTMLDocType,ProxyHTMLEnable,ProxyHTMLEvents,ProxyHTMLExtended,ProxyHTMLFixups,ProxyHTMLInterp,ProxyHTMLLinks,ProxyHTMLMeta,ProxyHTMLStripComments,ProxyHTMLURLMap,ProxyIOBufferSize,ProxyMaxForwards,ProxyPass,ProxyPassInherit,ProxyPassInterpolateEnv,ProxyPassMatch,ProxyPassReverse,ProxyPassReverseCookieDomain,ProxyPassReverseCookiePath,ProxyPreserveHost,ProxyReceiveBufferSize,ProxyRemote,ProxyRemoteMatch,ProxyRequests,ProxySCGIInternalRedirect,ProxySCGISendfile,ProxySet,ProxySourceAddress,ProxyStatus,ProxyTimeout,ProxyVia,QualifyRedirectURL,RLimitCPU,RLimitMEM,RLimitNPROC,ReadmeName,ReceiveBufferSize,Redirect,RedirectMatch,RedirectPermanent,RedirectTemp,ReflectorHeader,RegisterHttpMethod,RemoteIPHeader,RemoteIPInternalProxy,RemoteIPInternalProxyList,RemoteIPProxiesHeader,RemoteIPTrustedProxy,RemoteIPTrustedProxyList,RemoveCharset,RemoveEncoding,RemoveHandler,RemoveInputFilter,RemoveLanguage,RemoveOutputFilter,RemoveType,RequestHeader,RequestReadTimeout,Require,RewriteBase,RewriteCond,RewriteEngine,RewriteMap,RewriteOptions,RewriteRule,SSIETag,SSIEndTag,SSIErrorMsg,SSILastModified,SSILegacyExprParser,SSIStartTag,SSITimeFormat,SSIUndefinedEcho,SSLCACertificateFile,SSLCACertificatePath,SSLCADNRequestFile,SSLCADNRequestPath,SSLCARevocationCheck,SSLCARevocationFile,SSLCARevocationPath,SSLCertificateChainFile,SSLCertificateFile,SSLCertificateKeyFile,SSLCipherSuite,SSLCompression,SSLCryptoDevice,SSLEngine,SSLFIPS,SSLHonorCipherOrder,SSLInsecureRenegotiation,SSLOCSPDefaultResponder,SSLOCSPEnable,SSLOCSPNoverify,SSLOCSPOverrideResponder,SSLOCSPProxyURL,SSLOCSPResponderCertificateFile,SSLOCSPResponderTimeout,SSLOCSPResponseMaxAge,SSLOCSPResponseTimeSkew,SSLOCSPUseRequestNonce,SSLOpenSSLConfCmd,SSLOptions,SSLPassPhraseDialog,SSLProtocol,SSLProxyCACertificateFile,SSLProxyCACertificatePath,SSLProxyCARevocationCheck,SSLProxyCARevocationFile,SSLProxyCARevocationPath,SSLProxyCheckPeerCN,SSLProxyCheckPeerExpire,SSLProxyCheckPeerName,SSLProxyCipherSuite,SSLProxyEngine,SSLProxyMachineCertificateChainFile,SSLProxyMachineCertificateFile,SSLProxyMachineCertificatePath,SSLProxyProtocol,SSLProxyVerify,SSLProxyVerifyDepth,SSLRandomSeed,SSLRenegBufferSize,SSLRequire,SSLRequireSSL,SSLSRPUnknownUserSeed,SSLSRPVerifierFile,SSLSessionCache,SSLSessionCacheTimeout,SSLSessionTicketKeyFile,SSLSessionTickets,SSLStaplingCache,SSLStaplingErrorCacheTimeout,SSLStaplingFakeTryLater,SSLStaplingForceURL,SSLStaplingResponderTimeout,SSLStaplingResponseMaxAge,SSLStaplingResponseTimeSkew,SSLStaplingReturnResponderErrors,SSLStaplingStandardCacheTimeout,SSLStrictSNIVHostCheck,SSLUseStapling,SSLUserName,SSLVerifyClient,SSLVerifyDepth,Satisfy,ScoreBoardFile,Script,ScriptAlias,ScriptAliasMatch,ScriptInterpreterSource,ScriptLog,ScriptLogBuffer,ScriptLogLength,ScriptSock,SecureListen,SeeRequestTail,SendBufferSize,ServerAdmin,ServerAlias,ServerLimit,ServerName,ServerPath,ServerRoot,ServerSignature,ServerTokens,Session,SessionCookieName,SessionCookieName2,SessionCookieRemove,SessionCryptoCipher,SessionCryptoDriver,SessionCryptoPassphrase,SessionCryptoPassphraseFile,SessionDBDCookieName,SessionDBDCookieName2,SessionDBDCookieRemove,SessionDBDDeleteLabel,SessionDBDInsertLabel,SessionDBDPerUser,SessionDBDSelectLabel,SessionDBDUpdateLabel,SessionEnv,SessionExclude,SessionHeader,SessionInclude,SessionMaxAge,SetEnv,SetEnvIf,SetEnvIfExpr,SetEnvIfNoCase,SetHandler,SetInputFilter,SetOutputFilter,StartServers,StartThreads,Substitute,SubstituteInheritBefore,SubstituteMaxLineLength,Suexec,SuexecUserGroup,ThreadLimit,ThreadStackSize,ThreadsPerChild,TimeOut,TraceEnable,TransferLog,TypesConfig,UnDefine,UndefMacro,UnsetEnv,Use,UseCanonicalName,UseCanonicalPhysicalPort,User,UserDir,VHostCGIMode,VHostCGIPrivs,VHostGroup,VHostPrivs,VHostSecure,VHostUser,VirtualDocumentRoot,VirtualDocumentRootIP,VirtualScriptAlias,VirtualScriptAliasIP,WatchdogInterval,XBitHack,xml2EncAlias,xml2EncDefault,xml2StartParse"]
2613+ var CONFIG_OPTIONS = /^[\\+\\-]?(AuthConfig|IncludesNOEXEC|ExecCGI|FollowSymLinks|MultiViews|Includes|Indexes|SymLinksIfOwnerMatch)\b/i;
2614+ var ALL_KEYWORDS = [
2615+ CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
2616+ PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS, CONFIG_KEYWORDS, PHP_KEYWORDS];
2617+ var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float|char|void|const|static|struct)\d*(_t)?\b)|[a-z_]+_rec|cmd_parms\b/;
2618+
2619+ // token style names. correspond to css classes
2620+ /**
2621+ * token style for a string literal
2622+ * @const
2623+ */
2624+ var PR_STRING = 'str';
2625+ /**
2626+ * token style for a keyword
2627+ * @const
2628+ */
2629+ var PR_KEYWORD = 'kwd';
2630+ /**
2631+ * token style for a comment
2632+ * @const
2633+ */
2634+ var PR_COMMENT = 'com';
2635+ /**
2636+ * token style for a type
2637+ * @const
2638+ */
2639+ var PR_TYPE = 'typ';
2640+ /**
2641+ * token style for a literal value. e.g. 1, null, true.
2642+ * @const
2643+ */
2644+ var PR_LITERAL = 'lit';
2645+ /**
2646+ * token style for a punctuation string.
2647+ * @const
2648+ */
2649+ var PR_PUNCTUATION = 'pun';
2650+ /**
2651+ * token style for plain text.
2652+ * @const
2653+ */
2654+ var PR_PLAIN = 'pln';
2655+
2656+ /**
2657+ * token style for an sgml tag.
2658+ * @const
2659+ */
2660+ var PR_TAG = 'tag';
2661+ /**
2662+ * token style for a markup declaration such as a DOCTYPE.
2663+ * @const
2664+ */
2665+ var PR_DECLARATION = 'dec';
2666+ /**
2667+ * token style for embedded source.
2668+ * @const
2669+ */
2670+ var PR_SOURCE = 'src';
2671+ /**
2672+ * token style for an sgml attribute name.
2673+ * @const
2674+ */
2675+ var PR_ATTRIB_NAME = 'atn';
2676+ /**
2677+ * token style for an sgml attribute value.
2678+ * @const
2679+ */
2680+ var PR_ATTRIB_VALUE = 'atv';
2681+
2682+ /**
2683+ * A class that indicates a section of markup that is not code, e.g. to allow
2684+ * embedding of line numbers within code listings.
2685+ * @const
2686+ */
2687+ var PR_NOCODE = 'nocode';
2688+
2689+
2690+
2691+/**
2692+ * A set of tokens that can precede a regular expression literal in
2693+ * javascript
2694+ * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
2695+ * has the full list, but I've removed ones that might be problematic when
2696+ * seen in languages that don't support regular expression literals.
2697+ *
2698+ * <p>Specifically, I've removed any keywords that can't precede a regexp
2699+ * literal in a syntactically legal javascript program, and I've removed the
2700+ * "in" keyword since it's not a keyword in many languages, and might be used
2701+ * as a count of inches.
2702+ *
2703+ * <p>The link above does not accurately describe EcmaScript rules since
2704+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
2705+ * very well in practice.
2706+ *
2707+ * @private
2708+ * @const
2709+ */
2710+var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
2711+
2712+// CAVEAT: this does not properly handle the case where a regular
2713+// expression immediately follows another since a regular expression may
2714+// have flags for case-sensitivity and the like. Having regexp tokens
2715+// adjacent is not valid in any language I'm aware of, so I'm punting.
2716+// TODO: maybe style special characters inside a regexp as punctuation.
2717+
2718+
2719+ /**
2720+ * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
2721+ * matches the union of the sets of strings matched by the input RegExp.
2722+ * Since it matches globally, if the input strings have a start-of-input
2723+ * anchor (/^.../), it is ignored for the purposes of unioning.
2724+ * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
2725+ * @return {RegExp} a global regex.
2726+ */
2727+ function combinePrefixPatterns(regexs) {
2728+ var capturedGroupIndex = 0;
2729+
2730+ var needToFoldCase = false;
2731+ var ignoreCase = false;
2732+ for (var i = 0, n = regexs.length; i < n; ++i) {
2733+ var regex = regexs[i];
2734+ if (regex.ignoreCase) {
2735+ ignoreCase = true;
2736+ } else if (/[a-z]/i.test(regex.source.replace(
2737+ /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
2738+ needToFoldCase = true;
2739+ ignoreCase = false;
2740+ break;
2741+ }
2742+ }
2743+
2744+ var escapeCharToCodeUnit = {
2745+ 'b': 8,
2746+ 't': 9,
2747+ 'n': 0xa,
2748+ 'v': 0xb,
2749+ 'f': 0xc,
2750+ 'r': 0xd
2751+ };
2752+
2753+ function decodeEscape(charsetPart) {
2754+ var cc0 = charsetPart.charCodeAt(0);
2755+ if (cc0 !== 92 /* \\ */) {
2756+ return cc0;
2757+ }
2758+ var c1 = charsetPart.charAt(1);
2759+ cc0 = escapeCharToCodeUnit[c1];
2760+ if (cc0) {
2761+ return cc0;
2762+ } else if ('0' <= c1 && c1 <= '7') {
2763+ return parseInt(charsetPart.substring(1), 8);
2764+ } else if (c1 === 'u' || c1 === 'x') {
2765+ return parseInt(charsetPart.substring(2), 16);
2766+ } else {
2767+ return charsetPart.charCodeAt(1);
2768+ }
2769+ }
2770+
2771+ function encodeEscape(charCode) {
2772+ if (charCode < 0x20) {
2773+ return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
2774+ }
2775+ var ch = String.fromCharCode(charCode);
2776+ return (ch === '\\' || ch === '-' || ch === ']' || ch === '^')
2777+ ? "\\" + ch : ch;
2778+ }
2779+
2780+ function caseFoldCharset(charSet) {
2781+ var charsetParts = charSet.substring(1, charSet.length - 1).match(
2782+ new RegExp(
2783+ '\\\\u[0-9A-Fa-f]{4}'
2784+ + '|\\\\x[0-9A-Fa-f]{2}'
2785+ + '|\\\\[0-3][0-7]{0,2}'
2786+ + '|\\\\[0-7]{1,2}'
2787+ + '|\\\\[\\s\\S]'
2788+ + '|-'
2789+ + '|[^-\\\\]',
2790+ 'g'));
2791+ var ranges = [];
2792+ var inverse = charsetParts[0] === '^';
2793+
2794+ var out = ['['];
2795+ if (inverse) { out.push('^'); }
2796+
2797+ for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
2798+ var p = charsetParts[i];
2799+ if (/\\[bdsw]/i.test(p)) { // Don't muck with named groups.
2800+ out.push(p);
2801+ } else {
2802+ var start = decodeEscape(p);
2803+ var end;
2804+ if (i + 2 < n && '-' === charsetParts[i + 1]) {
2805+ end = decodeEscape(charsetParts[i + 2]);
2806+ i += 2;
2807+ } else {
2808+ end = start;
2809+ }
2810+ ranges.push([start, end]);
2811+ // If the range might intersect letters, then expand it.
2812+ // This case handling is too simplistic.
2813+ // It does not deal with non-latin case folding.
2814+ // It works for latin source code identifiers though.
2815+ if (!(end < 65 || start > 122)) {
2816+ if (!(end < 65 || start > 90)) {
2817+ ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
2818+ }
2819+ if (!(end < 97 || start > 122)) {
2820+ ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
2821+ }
2822+ }
2823+ }
2824+ }
2825+
2826+ // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
2827+ // -> [[1, 12], [14, 14], [16, 17]]
2828+ ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
2829+ var consolidatedRanges = [];
2830+ var lastRange = [];
2831+ for (var i = 0; i < ranges.length; ++i) {
2832+ var range = ranges[i];
2833+ if (range[0] <= lastRange[1] + 1) {
2834+ lastRange[1] = Math.max(lastRange[1], range[1]);
2835+ } else {
2836+ consolidatedRanges.push(lastRange = range);
2837+ }
2838+ }
2839+
2840+ for (var i = 0; i < consolidatedRanges.length; ++i) {
2841+ var range = consolidatedRanges[i];
2842+ out.push(encodeEscape(range[0]));
2843+ if (range[1] > range[0]) {
2844+ if (range[1] + 1 > range[0]) { out.push('-'); }
2845+ out.push(encodeEscape(range[1]));
2846+ }
2847+ }
2848+ out.push(']');
2849+ return out.join('');
2850+ }
2851+
2852+ function allowAnywhereFoldCaseAndRenumberGroups(regex) {
2853+ // Split into character sets, escape sequences, punctuation strings
2854+ // like ('(', '(?:', ')', '^'), and runs of characters that do not
2855+ // include any of the above.
2856+ var parts = regex.source.match(
2857+ new RegExp(
2858+ '(?:'
2859+ + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
2860+ + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
2861+ + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
2862+ + '|\\\\[0-9]+' // a back-reference or octal escape
2863+ + '|\\\\[^ux0-9]' // other escape sequence
2864+ + '|\\(\\?[:!=]' // start of a non-capturing group
2865+ + '|[\\(\\)\\^]' // start/end of a group, or line start
2866+ + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
2867+ + ')',
2868+ 'g'));
2869+ var n = parts.length;
2870+
2871+ // Maps captured group numbers to the number they will occupy in
2872+ // the output or to -1 if that has not been determined, or to
2873+ // undefined if they need not be capturing in the output.
2874+ var capturedGroups = [];
2875+
2876+ // Walk over and identify back references to build the capturedGroups
2877+ // mapping.
2878+ for (var i = 0, groupIndex = 0; i < n; ++i) {
2879+ var p = parts[i];
2880+ if (p === '(') {
2881+ // groups are 1-indexed, so max group index is count of '('
2882+ ++groupIndex;
2883+ } else if ('\\' === p.charAt(0)) {
2884+ var decimalValue = +p.substring(1);
2885+ if (decimalValue) {
2886+ if (decimalValue <= groupIndex) {
2887+ capturedGroups[decimalValue] = -1;
2888+ } else {
2889+ // Replace with an unambiguous escape sequence so that
2890+ // an octal escape sequence does not turn into a backreference
2891+ // to a capturing group from an earlier regex.
2892+ parts[i] = encodeEscape(decimalValue);
2893+ }
2894+ }
2895+ }
2896+ }
2897+
2898+ // Renumber groups and reduce capturing groups to non-capturing groups
2899+ // where possible.
2900+ for (var i = 1; i < capturedGroups.length; ++i) {
2901+ if (-1 === capturedGroups[i]) {
2902+ capturedGroups[i] = ++capturedGroupIndex;
2903+ }
2904+ }
2905+ for (var i = 0, groupIndex = 0; i < n; ++i) {
2906+ var p = parts[i];
2907+ if (p === '(') {
2908+ ++groupIndex;
2909+ if (!capturedGroups[groupIndex]) {
2910+ parts[i] = '(?:';
2911+ }
2912+ } else if ('\\' === p.charAt(0)) {
2913+ var decimalValue = +p.substring(1);
2914+ if (decimalValue && decimalValue <= groupIndex) {
2915+ parts[i] = '\\' + capturedGroups[decimalValue];
2916+ }
2917+ }
2918+ }
2919+
2920+ // Remove any prefix anchors so that the output will match anywhere.
2921+ // ^^ really does mean an anchored match though.
2922+ for (var i = 0; i < n; ++i) {
2923+ if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
2924+ }
2925+
2926+ // Expand letters to groups to handle mixing of case-sensitive and
2927+ // case-insensitive patterns if necessary.
2928+ if (regex.ignoreCase && needToFoldCase) {
2929+ for (var i = 0; i < n; ++i) {
2930+ var p = parts[i];
2931+ var ch0 = p.charAt(0);
2932+ if (p.length >= 2 && ch0 === '[') {
2933+ parts[i] = caseFoldCharset(p);
2934+ } else if (ch0 !== '\\') {
2935+ // TODO: handle letters in numeric escapes.
2936+ parts[i] = p.replace(
2937+ /[a-zA-Z]/g,
2938+ function (ch) {
2939+ var cc = ch.charCodeAt(0);
2940+ return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
2941+ });
2942+ }
2943+ }
2944+ }
2945+
2946+ return parts.join('');
2947+ }
2948+
2949+ var rewritten = [];
2950+ for (var i = 0, n = regexs.length; i < n; ++i) {
2951+ var regex = regexs[i];
2952+ if (regex.global || regex.multiline) { throw new Error('' + regex); }
2953+ rewritten.push(
2954+ '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
2955+ }
2956+
2957+ return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
2958+ }
2959+
2960+
2961+ /**
2962+ * Split markup into a string of source code and an array mapping ranges in
2963+ * that string to the text nodes in which they appear.
2964+ *
2965+ * <p>
2966+ * The HTML DOM structure:</p>
2967+ * <pre>
2968+ * (Element "p"
2969+ * (Element "b"
2970+ * (Text "print ")) ; #1
2971+ * (Text "'Hello '") ; #2
2972+ * (Element "br") ; #3
2973+ * (Text " + 'World';")) ; #4
2974+ * </pre>
2975+ * <p>
2976+ * corresponds to the HTML
2977+ * {@code <p><b>print </b>'Hello '<br> + 'World';</p>}.</p>
2978+ *
2979+ * <p>
2980+ * It will produce the output:</p>
2981+ * <pre>
2982+ * {
2983+ * sourceCode: "print 'Hello '\n + 'World';",
2984+ * // 1 2
2985+ * // 012345678901234 5678901234567
2986+ * spans: [0, #1, 6, #2, 14, #3, 15, #4]
2987+ * }
2988+ * </pre>
2989+ * <p>
2990+ * where #1 is a reference to the {@code "print "} text node above, and so
2991+ * on for the other text nodes.
2992+ * </p>
2993+ *
2994+ * <p>
2995+ * The {@code} spans array is an array of pairs. Even elements are the start
2996+ * indices of substrings, and odd elements are the text nodes (or BR elements)
2997+ * that contain the text for those substrings.
2998+ * Substrings continue until the next index or the end of the source.
2999+ * </p>
3000+ *
3001+ * @param {Node} node an HTML DOM subtree containing source-code.
3002+ * @param {boolean} isPreformatted true if white-space in text nodes should
3003+ * be considered significant.
3004+ * @return {Object} source code and the text nodes in which they occur.
3005+ */
3006+ function extractSourceSpans(node, isPreformatted) {
3007+ var nocode = /(?:^|\s)nocode(?:\s|$)/;
3008+
3009+ var chunks = [];
3010+ var length = 0;
3011+ var spans = [];
3012+ var k = 0;
3013+
3014+ function walk(node) {
3015+ switch (node.nodeType) {
3016+ case 1: // Element
3017+ if (nocode.test(node.className)) { return; }
3018+ for (var child = node.firstChild; child; child = child.nextSibling) {
3019+ walk(child);
3020+ }
3021+ var nodeName = node.nodeName.toLowerCase();
3022+ if ('br' === nodeName || 'li' === nodeName) {
3023+ chunks[k] = '\n';
3024+ spans[k << 1] = length++;
3025+ spans[(k++ << 1) | 1] = node;
3026+ }
3027+ break;
3028+ case 3: case 4: // Text
3029+ var text = node.nodeValue;
3030+ if (text.length) {
3031+ if (!isPreformatted) {
3032+ text = text.replace(/[ \t\r\n]+/g, ' ');
3033+ } else {
3034+ text = text.replace(/\r\n?/g, '\n'); // Normalize newlines.
3035+ text = text.replace(/^(\r?\n\s*)+/g, ''); // Remove leading newlines
3036+ text = text.replace(/^\s*/g, ''); // Remove leading spaces due to indented formatting
3037+ text = text.replace(/(\r?\n\s*)+$/g, ''); // Remove ending newlines
3038+
3039+ }
3040+ // TODO: handle tabs here?
3041+ chunks[k] = text;
3042+ spans[k << 1] = length;
3043+ length += text.length;
3044+ spans[(k++ << 1) | 1] = node;
3045+ }
3046+ break;
3047+ }
3048+ }
3049+
3050+ walk(node);
3051+
3052+ return {
3053+ sourceCode: chunks.join('').replace(/\n$/, ''),
3054+ spans: spans
3055+ };
3056+ }
3057+
3058+
3059+ /**
3060+ * Apply the given language handler to sourceCode and add the resulting
3061+ * decorations to out.
3062+ * @param {number} basePos the index of sourceCode within the chunk of source
3063+ * whose decorations are already present on out.
3064+ */
3065+ function appendDecorations(basePos, sourceCode, langHandler, out) {
3066+ if (!sourceCode) { return; }
3067+ var job = {
3068+ sourceCode: sourceCode,
3069+ basePos: basePos
3070+ };
3071+ langHandler(job);
3072+ out.push.apply(out, job.decorations);
3073+ }
3074+
3075+ var notWs = /\S/;
3076+
3077+ /**
3078+ * Given an element, if it contains only one child element and any text nodes
3079+ * it contains contain only space characters, return the sole child element.
3080+ * Otherwise returns undefined.
3081+ * <p>
3082+ * This is meant to return the CODE element in {@code <pre><code ...>} when
3083+ * there is a single child element that contains all the non-space textual
3084+ * content, but not to return anything where there are multiple child elements
3085+ * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
3086+ * is textual content.
3087+ */
3088+ function childContentWrapper(element) {
3089+ var wrapper = undefined;
3090+ for (var c = element.firstChild; c; c = c.nextSibling) {
3091+ var type = c.nodeType;
3092+ wrapper = (type === 1) // Element Node
3093+ ? (wrapper ? element : c)
3094+ : (type === 3) // Text Node
3095+ ? (notWs.test(c.nodeValue) ? element : wrapper)
3096+ : wrapper;
3097+ }
3098+ return wrapper === element ? undefined : wrapper;
3099+ }
3100+
3101+ /** Given triples of [style, pattern, context] returns a lexing function,
3102+ * The lexing function interprets the patterns to find token boundaries and
3103+ * returns a decoration list of the form
3104+ * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
3105+ * where index_n is an index into the sourceCode, and style_n is a style
3106+ * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
3107+ * all characters in sourceCode[index_n-1:index_n].
3108+ *
3109+ * The stylePatterns is a list whose elements have the form
3110+ * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
3111+ *
3112+ * Style is a style constant like PR_PLAIN, or can be a string of the
3113+ * form 'lang-FOO', where FOO is a language extension describing the
3114+ * language of the portion of the token in $1 after pattern executes.
3115+ * E.g., if style is 'lang-lisp', and group 1 contains the text
3116+ * '(hello (world))', then that portion of the token will be passed to the
3117+ * registered lisp handler for formatting.
3118+ * The text before and after group 1 will be restyled using this decorator
3119+ * so decorators should take care that this doesn't result in infinite
3120+ * recursion. For example, the HTML lexer rule for SCRIPT elements looks
3121+ * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
3122+ * '<script>foo()<\/script>', which would cause the current decorator to
3123+ * be called with '<script>' which would not match the same rule since
3124+ * group 1 must not be empty, so it would be instead styled as PR_TAG by
3125+ * the generic tag rule. The handler registered for the 'js' extension would
3126+ * then be called with 'foo()', and finally, the current decorator would
3127+ * be called with '<\/script>' which would not match the original rule and
3128+ * so the generic tag rule would identify it as a tag.
3129+ *
3130+ * Pattern must only match prefixes, and if it matches a prefix, then that
3131+ * match is considered a token with the same style.
3132+ *
3133+ * Context is applied to the last non-whitespace, non-comment token
3134+ * recognized.
3135+ *
3136+ * Shortcut is an optional string of characters, any of which, if the first
3137+ * character, gurantee that this pattern and only this pattern matches.
3138+ *
3139+ * @param {Array} shortcutStylePatterns patterns that always start with
3140+ * a known character. Must have a shortcut string.
3141+ * @param {Array} fallthroughStylePatterns patterns that will be tried in
3142+ * order if the shortcut ones fail. May have shortcuts.
3143+ *
3144+ * @return {function (Object)} a
3145+ * function that takes source code and returns a list of decorations.
3146+ */
3147+ function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
3148+ var shortcuts = {};
3149+ var tokenizer;
3150+ (function () {
3151+ var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
3152+ var allRegexs = [];
3153+ var regexKeys = {};
3154+ for (var i = 0, n = allPatterns.length; i < n; ++i) {
3155+ var patternParts = allPatterns[i];
3156+ var shortcutChars = patternParts[3];
3157+ if (shortcutChars) {
3158+ for (var c = shortcutChars.length; --c >= 0;) {
3159+ shortcuts[shortcutChars.charAt(c)] = patternParts;
3160+ }
3161+ }
3162+ var regex = patternParts[1];
3163+ var k = '' + regex;
3164+ if (!regexKeys.hasOwnProperty(k)) {
3165+ allRegexs.push(regex);
3166+ regexKeys[k] = null;
3167+ }
3168+ }
3169+ allRegexs.push(/[\0-\uffff]/);
3170+ tokenizer = combinePrefixPatterns(allRegexs);
3171+ })();
3172+
3173+ var nPatterns = fallthroughStylePatterns.length;
3174+
3175+ /**
3176+ * Lexes job.sourceCode and produces an output array job.decorations of
3177+ * style classes preceded by the position at which they start in
3178+ * job.sourceCode in order.
3179+ *
3180+ * @param {Object} job an object like <pre>{
3181+ * sourceCode: {string} sourceText plain text,
3182+ * basePos: {int} position of job.sourceCode in the larger chunk of
3183+ * sourceCode.
3184+ * }</pre>
3185+ */
3186+ var decorate = function (job) {
3187+ var sourceCode = job.sourceCode, basePos = job.basePos;
3188+ /** Even entries are positions in source in ascending order. Odd enties
3189+ * are style markers (e.g., PR_COMMENT) that run from that position until
3190+ * the end.
3191+ * @type {Array.<number|string>}
3192+ */
3193+ var decorations = [basePos, PR_PLAIN];
3194+ var pos = 0; // index into sourceCode
3195+ var tokens = sourceCode.match(tokenizer) || [];
3196+ var styleCache = {};
3197+
3198+ for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
3199+ var token = tokens[ti];
3200+ var style = styleCache[token];
3201+ var match = void 0;
3202+
3203+ var isEmbedded;
3204+ if (typeof style === 'string') {
3205+ isEmbedded = false;
3206+ } else {
3207+ var patternParts = shortcuts[token.charAt(0)];
3208+ if (patternParts) {
3209+ match = token.match(patternParts[1]);
3210+ style = patternParts[0];
3211+ } else {
3212+ for (var i = 0; i < nPatterns; ++i) {
3213+ patternParts = fallthroughStylePatterns[i];
3214+ match = token.match(patternParts[1]);
3215+ if (match) {
3216+ style = patternParts[0];
3217+ break;
3218+ }
3219+ }
3220+
3221+ if (!match) { // make sure that we make progress
3222+ style = PR_PLAIN;
3223+ }
3224+ }
3225+
3226+ isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
3227+ if (isEmbedded && !(match && typeof match[1] === 'string')) {
3228+ isEmbedded = false;
3229+ style = PR_SOURCE;
3230+ }
3231+
3232+ if (!isEmbedded) { styleCache[token] = style; }
3233+ }
3234+
3235+ var tokenStart = pos;
3236+ pos += token.length;
3237+
3238+ if (!isEmbedded) {
3239+ decorations.push(basePos + tokenStart, style);
3240+ } else { // Treat group 1 as an embedded block of source code.
3241+ var embeddedSource = match[1];
3242+ var embeddedSourceStart = token.indexOf(embeddedSource);
3243+ var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
3244+ if (match[2]) {
3245+ // If embeddedSource can be blank, then it would match at the
3246+ // beginning which would cause us to infinitely recurse on the
3247+ // entire token, so we catch the right context in match[2].
3248+ embeddedSourceEnd = token.length - match[2].length;
3249+ embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
3250+ }
3251+ var lang = style.substring(5);
3252+ // Decorate the left of the embedded source
3253+ appendDecorations(
3254+ basePos + tokenStart,
3255+ token.substring(0, embeddedSourceStart),
3256+ decorate, decorations);
3257+ // Decorate the embedded source
3258+ appendDecorations(
3259+ basePos + tokenStart + embeddedSourceStart,
3260+ embeddedSource,
3261+ langHandlerForExtension(lang, embeddedSource),
3262+ decorations);
3263+ // Decorate the right of the embedded section
3264+ appendDecorations(
3265+ basePos + tokenStart + embeddedSourceEnd,
3266+ token.substring(embeddedSourceEnd),
3267+ decorate, decorations);
3268+ }
3269+ }
3270+ job.decorations = decorations;
3271+ };
3272+ return decorate;
3273+ }
3274+
3275+ /** returns a function that produces a list of decorations from source text.
3276+ *
3277+ * This code treats ", ', and ` as string delimiters, and \ as a string
3278+ * escape. It does not recognize perl's qq() style strings.
3279+ * It has no special handling for double delimiter escapes as in basic, or
3280+ * the tripled delimiters used in python, but should work on those regardless
3281+ * although in those cases a single string literal may be broken up into
3282+ * multiple adjacent string literals.
3283+ *
3284+ * It recognizes C, C++, and shell style comments.
3285+ *
3286+ * @param {Object} options a set of optional parameters.
3287+ * @return {function (Object)} a function that examines the source code
3288+ * in the input job and builds the decoration list.
3289+ */
3290+ function sourceDecorator(options) {
3291+ var shortcutStylePatterns = [], fallthroughStylePatterns = [];
3292+ if (options['tripleQuotedStrings']) {
3293+ // '''multi-line-string''', 'single-line-string', and double-quoted
3294+ shortcutStylePatterns.push(
3295+ [PR_STRING, /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
3296+ null, '\'"']);
3297+ } else if (options['multiLineStrings']) {
3298+ // 'multi-line-string', "multi-line-string"
3299+ shortcutStylePatterns.push(
3300+ [PR_STRING, /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
3301+ null, '\'"`']);
3302+ } else {
3303+ // 'single-line-string', "single-line-string"
3304+ shortcutStylePatterns.push(
3305+ [PR_STRING,
3306+ /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
3307+ null, '"\'']);
3308+ }
3309+ if (options['verbatimStrings']) {
3310+ // verbatim-string-literal production from the C# grammar. See issue 93.
3311+ fallthroughStylePatterns.push(
3312+ [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
3313+ }
3314+ var hc = options['hashComments'];
3315+ if (hc) {
3316+ if (options['cStyleComments']) {
3317+ if (hc > 1) { // multiline hash comments
3318+ shortcutStylePatterns.push(
3319+ [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
3320+ } else {
3321+ // Stop C preprocessor declarations at an unclosed open comment
3322+ shortcutStylePatterns.push(
3323+ [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
3324+ null, '#']);
3325+ }
3326+ // #include <stdio.h>
3327+ fallthroughStylePatterns.push(
3328+ [PR_STRING,
3329+ /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,
3330+ null]);
3331+ } else {
3332+ shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
3333+ }
3334+ }
3335+ if (options['cStyleComments']) {
3336+ fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
3337+ fallthroughStylePatterns.push(
3338+ [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
3339+ }
3340+ if (options['regexLiterals']) {
3341+ /**
3342+ * @const
3343+ */
3344+ var REGEX_LITERAL = (
3345+ // A regular expression literal starts with a slash that is
3346+ // not followed by * or / so that it is not confused with
3347+ // comments.
3348+ '/(?=[^/*])'
3349+ // and then contains any number of raw characters,
3350+ + '(?:[^/\\x5B\\x5C]'
3351+ // escape sequences (\x5C),
3352+ + '|\\x5C[\\s\\S]'
3353+ // or non-nesting character sets (\x5B\x5D);
3354+ + '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
3355+ // finally closed by a /.
3356+ + '/');
3357+ fallthroughStylePatterns.push(
3358+ ['lang-regex',
3359+ new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
3360+ ]);
3361+ }
3362+
3363+ var types = options['types'];
3364+ if (types) {
3365+ fallthroughStylePatterns.push([PR_TYPE, types]);
3366+ }
3367+
3368+ if (options['strings']) {
3369+ var strings = ("" + options['strings']).replace(/^ | $/g, '').replace(/-/g, '\\-');
3370+ fallthroughStylePatterns.push(
3371+ [PR_STRING,
3372+ new RegExp('(?:' + strings.replace(/[\s,]+/g, '|') + ')'),
3373+ , null]
3374+ );
3375+ }
3376+
3377+ var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
3378+ if (keywords.length) {
3379+ fallthroughStylePatterns.push(
3380+ [PR_KEYWORD,
3381+ new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
3382+ null]);
3383+ }
3384+
3385+ shortcutStylePatterns.push([PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0']);
3386+ if (options['httpdComments']) {
3387+ fallthroughStylePatterns.push(
3388+ [PR_PLAIN, /^.*\S.*#/i, null]
3389+ );
3390+ }
3391+
3392+ fallthroughStylePatterns.push(
3393+ // TODO(mikesamuel): recognize non-latin letters and numerals in idents
3394+ [PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*|\bNULL\b/i, null],
3395+ [PR_LITERAL, CONFIG_OPTIONS, null],
3396+ //[PR_STRING, CONFIG_ENVS, null],
3397+ [PR_TAG, /^\b(AuthzProviderAlias|AuthnProviderAlias|RequireAny|RequireAll|RequireNone|Directory|DirectoryMatch|Location|LocationMatch|VirtualHost|If|Else|ElseIf|Proxy\b|LoadBalancer|Files|FilesMatch|Limit|LimitExcept|IfDefine|IfModule|IfVersion)\b/, null],
3398+ [PR_TYPE, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_(t|req|module)\b)/, null],
3399+ [PR_TAG, /^apr_[a-z_0-9]+|ap_[a-z_0-9]+/i, null],
3400+ [PR_PLAIN, /^[a-z_$][a-z_$@0-9\-]*/i, null],
3401+ [PR_LITERAL,
3402+ new RegExp(
3403+ '^(?:'
3404+ // A hex number
3405+ + '0x[a-f0-9]+'
3406+ // An IPv6 Address
3407+ + '|[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+'
3408+ // or an octal or decimal number,
3409+ + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
3410+ // possibly in scientific notation
3411+ + '(?:e[+\\-]?\\d+)?'
3412+ + ')'
3413+ // with an optional modifier like UL for unsigned long
3414+ + '[a-z]*', 'i'),
3415+ null, '0123456789'],
3416+ // Don't treat escaped quotes in bash as starting strings. See issue 144.
3417+ [PR_PLAIN, /^\\[\s\S]?/, null],
3418+ [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
3419+
3420+ return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
3421+ }
3422+
3423+ var decorateSource = sourceDecorator({
3424+ 'keywords': ALL_KEYWORDS,
3425+ 'hashComments': true,
3426+ 'cStyleComments': true,
3427+ 'multiLineStrings': true,
3428+ 'regexLiterals': true
3429+ });
3430+
3431+ /**
3432+ * Given a DOM subtree, wraps it in a list, and puts each line into its own
3433+ * list item.
3434+ *
3435+ * @param {Node} node modified in place. Its content is pulled into an
3436+ * HTMLOListElement, and each line is moved into a separate list item.
3437+ * This requires cloning elements, so the input might not have unique
3438+ * IDs after numbering.
3439+ * @param {boolean} isPreformatted true iff white-space in text nodes should
3440+ * be treated as significant.
3441+ */
3442+ function numberLines(node, opt_startLineNum, isPreformatted) {
3443+ var nocode = /(?:^|\s)nocode(?:\s|$)/;
3444+ var lineBreak = /\r\n?|\n/;
3445+
3446+ var document = node.ownerDocument;
3447+
3448+ var li = document.createElement('li');
3449+ while (node.firstChild) {
3450+ li.appendChild(node.firstChild);
3451+ }
3452+ // An array of lines. We split below, so this is initialized to one
3453+ // un-split line.
3454+ var listItems = [li];
3455+
3456+ function walk(node) {
3457+ switch (node.nodeType) {
3458+ case 1: // Element
3459+ if (nocode.test(node.className)) { break; }
3460+ if ('br' === node.nodeName) {
3461+ breakAfter(node);
3462+ // Discard the <BR> since it is now flush against a </LI>.
3463+ if (node.parentNode) {
3464+ node.parentNode.removeChild(node);
3465+ }
3466+ } else {
3467+ for (var child = node.firstChild; child; child = child.nextSibling) {
3468+ walk(child);
3469+ }
3470+ }
3471+ break;
3472+ case 3: case 4: // Text
3473+ if (isPreformatted) {
3474+ var text = node.nodeValue;
3475+ var match = text.match(lineBreak);
3476+ if (match) {
3477+ var firstLine = text.substring(0, match.index);
3478+ node.nodeValue = firstLine;
3479+ var tail = text.substring(match.index + match[0].length);
3480+ if (tail) {
3481+ var parent = node.parentNode;
3482+ parent.insertBefore(
3483+ document.createTextNode(tail), node.nextSibling);
3484+ }
3485+ breakAfter(node);
3486+ if (!firstLine) {
3487+ // Don't leave blank text nodes in the DOM.
3488+ node.parentNode.removeChild(node);
3489+ }
3490+ }
3491+ }
3492+ break;
3493+ }
3494+ }
3495+
3496+ // Split a line after the given node.
3497+ function breakAfter(lineEndNode) {
3498+ // If there's nothing to the right, then we can skip ending the line
3499+ // here, and move root-wards since splitting just before an end-tag
3500+ // would require us to create a bunch of empty copies.
3501+ while (!lineEndNode.nextSibling) {
3502+ lineEndNode = lineEndNode.parentNode;
3503+ if (!lineEndNode) { return; }
3504+ }
3505+
3506+ function breakLeftOf(limit, copy) {
3507+ // Clone shallowly if this node needs to be on both sides of the break.
3508+ var rightSide = copy ? limit.cloneNode(false) : limit;
3509+ var parent = limit.parentNode;
3510+ if (parent) {
3511+ // We clone the parent chain.
3512+ // This helps us resurrect important styling elements that cross lines.
3513+ // E.g. in <i>Foo<br>Bar</i>
3514+ // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
3515+ var parentClone = breakLeftOf(parent, 1);
3516+ // Move the clone and everything to the right of the original
3517+ // onto the cloned parent.
3518+ var next = limit.nextSibling;
3519+ parentClone.appendChild(rightSide);
3520+ for (var sibling = next; sibling; sibling = next) {
3521+ next = sibling.nextSibling;
3522+ parentClone.appendChild(sibling);
3523+ }
3524+ }
3525+ return rightSide;
3526+ }
3527+
3528+ var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
3529+
3530+ // Walk the parent chain until we reach an unattached LI.
3531+ for (var parent;
3532+ // Check nodeType since IE invents document fragments.
3533+ (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
3534+ copiedListItem = parent;
3535+ }
3536+ // Put it on the list of lines for later processing.
3537+ listItems.push(copiedListItem);
3538+ }
3539+
3540+ // Split lines while there are lines left to split.
3541+ for (var i = 0; // Number of lines that have been split so far.
3542+ i < listItems.length; // length updated by breakAfter calls.
3543+ ++i) {
3544+ walk(listItems[i]);
3545+ }
3546+
3547+ // Make sure numeric indices show correctly.
3548+ if (opt_startLineNum === (opt_startLineNum|0)) {
3549+ listItems[0].setAttribute('value', opt_startLineNum);
3550+ }
3551+
3552+ var ol = document.createElement('ol');
3553+ ol.className = 'linenums';
3554+ var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
3555+ for (var i = 0, n = listItems.length; i < n; ++i) {
3556+ li = listItems[i];
3557+ // Stick a class on the LIs so that stylesheets can
3558+ // color odd/even rows, or any other row pattern that
3559+ // is co-prime with 10.
3560+ li.className = 'L' + ((i + offset) % 1);
3561+ if (!li.firstChild) {
3562+ li.appendChild(document.createTextNode('\xA0'));
3563+ }
3564+ ol.appendChild(li);
3565+ }
3566+
3567+ node.appendChild(ol);
3568+ }
3569+
3570+ /**
3571+ * Breaks {@code job.sourceCode} around style boundaries in
3572+ * {@code job.decorations} and modifies {@code job.sourceNode} in place.
3573+ * @param {Object} job like <pre>{
3574+ * sourceCode: {string} source as plain text,
3575+ * spans: {Array.<number|Node>} alternating span start indices into source
3576+ * and the text node or element (e.g. {@code <BR>}) corresponding to that
3577+ * span.
3578+ * decorations: {Array.<number|string} an array of style classes preceded
3579+ * by the position at which they start in job.sourceCode in order
3580+ * }</pre>
3581+ * @private
3582+ */
3583+ function recombineTagsAndDecorations(job) {
3584+ var isIE8OrEarlier = /\bMSIE\s(\d+)/.exec(navigator.userAgent);
3585+ isIE8OrEarlier = isIE8OrEarlier && +isIE8OrEarlier[1] <= 8;
3586+ var newlineRe = /\n/g;
3587+
3588+ var source = job.sourceCode;
3589+ var sourceLength = source.length;
3590+ // Index into source after the last code-unit recombined.
3591+ var sourceIndex = 0;
3592+
3593+ var spans = job.spans;
3594+ var nSpans = spans.length;
3595+ // Index into spans after the last span which ends at or before sourceIndex.
3596+ var spanIndex = 0;
3597+
3598+ var decorations = job.decorations;
3599+ var nDecorations = decorations.length;
3600+ // Index into decorations after the last decoration which ends at or before
3601+ // sourceIndex.
3602+ var decorationIndex = 0;
3603+
3604+ // Remove all zero-length decorations.
3605+ decorations[nDecorations] = sourceLength;
3606+ var decPos, i;
3607+ for (i = decPos = 0; i < nDecorations;) {
3608+ if (decorations[i] !== decorations[i + 2]) {
3609+ decorations[decPos++] = decorations[i++];
3610+ decorations[decPos++] = decorations[i++];
3611+ } else {
3612+ i += 2;
3613+ }
3614+ }
3615+ nDecorations = decPos;
3616+
3617+ // Simplify decorations.
3618+ for (i = decPos = 0; i < nDecorations;) {
3619+ var startPos = decorations[i];
3620+ // Conflate all adjacent decorations that use the same style.
3621+ var startDec = decorations[i + 1];
3622+ var end = i + 2;
3623+ while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
3624+ end += 2;
3625+ }
3626+ decorations[decPos++] = startPos;
3627+ decorations[decPos++] = startDec;
3628+ i = end;
3629+ }
3630+
3631+ nDecorations = decorations.length = decPos;
3632+
3633+ var sourceNode = job.sourceNode;
3634+ var oldDisplay;
3635+ if (sourceNode) {
3636+ oldDisplay = sourceNode.style.display;
3637+ sourceNode.style.display = 'none';
3638+ }
3639+ try {
3640+ var decoration = null;
3641+ var X = 0;
3642+ while (spanIndex < nSpans) {
3643+ X = X + 1;
3644+ if (X > 5000) { break; }
3645+ var spanStart = spans[spanIndex];
3646+ var spanEnd = spans[spanIndex + 2] || sourceLength;
3647+
3648+ var decEnd = decorations[decorationIndex + 2] || sourceLength;
3649+
3650+ var end = Math.min(spanEnd, decEnd);
3651+
3652+ var textNode = spans[spanIndex + 1];
3653+ var styledText;
3654+ if (textNode.nodeType !== 1 // Don't muck with <BR>s or <LI>s
3655+ // Don't introduce spans around empty text nodes.
3656+ && (styledText = source.substring(sourceIndex, end))) {
3657+ // This may seem bizarre, and it is. Emitting LF on IE causes the
3658+ // code to display with spaces instead of line breaks.
3659+ // Emitting Windows standard issue linebreaks (CRLF) causes a blank
3660+ // space to appear at the beginning of every line but the first.
3661+ // Emitting an old Mac OS 9 line separator makes everything spiffy.
3662+ if (isIE8OrEarlier) {
3663+ styledText = styledText.replace(newlineRe, '\r');
3664+ }
3665+ textNode.nodeValue = styledText;
3666+ var document = textNode.ownerDocument;
3667+ var span = document.createElement('span');
3668+ span.className = decorations[decorationIndex + 1];
3669+ var parentNode = textNode.parentNode;
3670+ parentNode.replaceChild(span, textNode);
3671+ span.appendChild(textNode);
3672+ if (sourceIndex < spanEnd) { // Split off a text node.
3673+ spans[spanIndex + 1] = textNode
3674+ // TODO: Possibly optimize by using '' if there's no flicker.
3675+ = document.createTextNode(source.substring(end, spanEnd));
3676+ parentNode.insertBefore(textNode, span.nextSibling);
3677+ }
3678+ }
3679+
3680+ sourceIndex = end;
3681+
3682+ if (sourceIndex >= spanEnd) {
3683+ spanIndex += 2;
3684+ }
3685+ if (sourceIndex >= decEnd) {
3686+ decorationIndex += 2;
3687+ }
3688+ }
3689+ } finally {
3690+ if (sourceNode) {
3691+ sourceNode.style.display = oldDisplay;
3692+ }
3693+ }
3694+ }
3695+
3696+
3697+ /** Maps language-specific file extensions to handlers. */
3698+ var langHandlerRegistry = {};
3699+ /** Register a language handler for the given file extensions.
3700+ * @param {function (Object)} handler a function from source code to a list
3701+ * of decorations. Takes a single argument job which describes the
3702+ * state of the computation. The single parameter has the form
3703+ * {@code {
3704+ * sourceCode: {string} as plain text.
3705+ * decorations: {Array.<number|string>} an array of style classes
3706+ * preceded by the position at which they start in
3707+ * job.sourceCode in order.
3708+ * The language handler should assigned this field.
3709+ * basePos: {int} the position of source in the larger source chunk.
3710+ * All positions in the output decorations array are relative
3711+ * to the larger source chunk.
3712+ * } }
3713+ * @param {Array.<string>} fileExtensions
3714+ */
3715+ function registerLangHandler(handler, fileExtensions) {
3716+ for (var i = fileExtensions.length; --i >= 0;) {
3717+ var ext = fileExtensions[i];
3718+ if (!langHandlerRegistry.hasOwnProperty(ext)) {
3719+ langHandlerRegistry[ext] = handler;
3720+ } else if (win['console']) {
3721+ console['warn']('cannot override language handler %s', ext);
3722+ }
3723+ }
3724+ }
3725+ function langHandlerForExtension(extension, source) {
3726+ if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
3727+ // Treat it as markup if the first non whitespace character is a < and
3728+ // the last non-whitespace character is a >.
3729+ extension = /^\s*</.test(source)
3730+ ? 'default-markup'
3731+ : 'default-code';
3732+ }
3733+ return langHandlerRegistry[extension];
3734+ }
3735+ registerLangHandler(decorateSource, ['default-code']);
3736+ registerLangHandler(
3737+ createSimpleLexer(
3738+ [],
3739+ [
3740+ [PR_PLAIN, /^[^<?]+/],
3741+ [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
3742+ [PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/],
3743+ // Unescaped content in an unknown language
3744+ ['lang-', /^<\?([\s\S]+?)(?:\?>|$)/],
3745+ ['lang-', /^<%([\s\S]+?)(?:%>|$)/],
3746+ [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
3747+ ['lang-', /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
3748+ // Unescaped content in javascript. (Or possibly vbscript).
3749+ ['lang-js', /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
3750+ // Contains unescaped stylesheet content
3751+ ['lang-css', /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
3752+ ['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i]
3753+ ]),
3754+ ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
3755+ registerLangHandler(
3756+ createSimpleLexer(
3757+ [
3758+ [PR_PLAIN, /^[\s]+/, null, ' \t\r\n'],
3759+ [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
3760+ ],
3761+ [
3762+ [PR_TAG, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
3763+ [PR_ATTRIB_NAME, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
3764+ ['lang-uq.val', /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
3765+ [PR_PUNCTUATION, /^[=<>\/]+/],
3766+ ['lang-js', /^on\w+\s*=\s*\"([^\"]+)\"/i],
3767+ ['lang-js', /^on\w+\s*=\s*\'([^\']+)\'/i],
3768+ ['lang-js', /^on\w+\s*=\s*([^\"\'>\s]+)/i],
3769+ ['lang-css', /^style\s*=\s*\"([^\"]+)\"/i],
3770+ ['lang-css', /^style\s*=\s*\'([^\']+)\'/i],
3771+ ['lang-css', /^style\s*=\s*([^\"\'>\s]+)/i]
3772+ ]),
3773+ ['in.tag']);
3774+ registerLangHandler(
3775+ createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
3776+ registerLangHandler(sourceDecorator({
3777+ 'keywords': CPP_KEYWORDS,
3778+ 'hashComments': true,
3779+ 'cStyleComments': true,
3780+ 'types': C_TYPES
3781+ }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
3782+ registerLangHandler(sourceDecorator({
3783+ 'keywords': PHP_KEYWORDS,
3784+ 'hashComments': false,
3785+ 'cStyleComments': true,
3786+ 'multiLineStrings': true,
3787+ 'regexLiterals': true
3788+// 'types': C_TYPES,
3789+ }), ['php', 'phtml', 'inc']);
3790+ registerLangHandler(sourceDecorator({
3791+ 'keywords': 'null,true,false'
3792+ }), ['json']);
3793+ registerLangHandler(sourceDecorator({
3794+ 'keywords': CSHARP_KEYWORDS,
3795+ 'hashComments': true,
3796+ 'cStyleComments': true,
3797+ 'verbatimStrings': true,
3798+ 'types': C_TYPES
3799+ }), ['cs']);
3800+ registerLangHandler(sourceDecorator({
3801+ 'keywords': JAVA_KEYWORDS,
3802+ 'cStyleComments': true
3803+ }), ['java']);
3804+ registerLangHandler(sourceDecorator({
3805+ 'keywords': SH_KEYWORDS,
3806+ 'hashComments': true,
3807+ 'multiLineStrings': true
3808+ }), ['bsh', 'csh', 'sh']);
3809+ registerLangHandler(sourceDecorator({
3810+ 'keywords': PYTHON_KEYWORDS,
3811+ 'hashComments': true,
3812+ 'multiLineStrings': true,
3813+ 'tripleQuotedStrings': true
3814+ }), ['cv', 'py']);
3815+ registerLangHandler(sourceDecorator({
3816+ 'keywords': PERL_KEYWORDS,
3817+ 'hashComments': true,
3818+ 'multiLineStrings': true,
3819+ 'regexLiterals': true
3820+ }), ['perl', 'pl', 'pm']);
3821+ registerLangHandler(sourceDecorator({
3822+ 'keywords': RUBY_KEYWORDS,
3823+ 'hashComments': true,
3824+ 'multiLineStrings': true,
3825+ 'regexLiterals': true
3826+ }), ['rb']);
3827+ registerLangHandler(sourceDecorator({
3828+ 'keywords': JSCRIPT_KEYWORDS,
3829+ 'cStyleComments': true,
3830+ 'regexLiterals': true
3831+ }), ['js']);
3832+ registerLangHandler(sourceDecorator({
3833+ 'keywords': COFFEE_KEYWORDS,
3834+ 'hashComments': 3, // ### style block comments
3835+ 'cStyleComments': true,
3836+ 'multilineStrings': true,
3837+ 'tripleQuotedStrings': true,
3838+ 'regexLiterals': true
3839+ }), ['coffee']);
3840+ registerLangHandler(
3841+ createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
3842+ registerLangHandler(sourceDecorator({
3843+ 'keywords': CONFIG_KEYWORDS,
3844+ 'literals': CONFIG_OPTIONS,
3845+ 'strings': CONFIG_ENVS,
3846+ 'hashComments': true,
3847+ 'cStyleComments': false,
3848+ 'multiLineStrings': false,
3849+ 'regexLiterals': false,
3850+ 'httpdComments': true
3851+ }), ['config']);
3852+
3853+ function applyDecorator(job) {
3854+ var opt_langExtension = job.langExtension;
3855+
3856+ try {
3857+ // Extract tags, and convert the source code to plain text.
3858+ var sourceAndSpans = extractSourceSpans(job.sourceNode, job.pre);
3859+ /** Plain text. @type {string} */
3860+ var source = sourceAndSpans.sourceCode;
3861+ job.sourceCode = source;
3862+ job.spans = sourceAndSpans.spans;
3863+ job.basePos = 0;
3864+
3865+ // Apply the appropriate language handler
3866+ langHandlerForExtension(opt_langExtension, source)(job);
3867+
3868+ // Integrate the decorations and tags back into the source code,
3869+ // modifying the sourceNode in place.
3870+ recombineTagsAndDecorations(job);
3871+ } catch (e) {
3872+ if (win['console']) {
3873+ console['log'](e && e['stack'] ? e['stack'] : e);
3874+ }
3875+ }
3876+ }
3877+
3878+ /**
3879+ * @param sourceCodeHtml {string} The HTML to pretty print.
3880+ * @param opt_langExtension {string} The language name to use.
3881+ * Typically, a filename extension like 'cpp' or 'java'.
3882+ * @param opt_numberLines {number|boolean} True to number lines,
3883+ * or the 1-indexed number of the first line in sourceCodeHtml.
3884+ */
3885+ function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
3886+ var container = document.createElement('pre');
3887+ // This could cause images to load and onload listeners to fire.
3888+ // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
3889+ // We assume that the inner HTML is from a trusted source.
3890+ container.innerHTML = sourceCodeHtml;
3891+ if (opt_numberLines) {
3892+ numberLines(container, opt_numberLines, true);
3893+ }
3894+
3895+ var job = {
3896+ langExtension: opt_langExtension,
3897+ numberLines: opt_numberLines,
3898+ sourceNode: container,
3899+ pre: 1
3900+ };
3901+ applyDecorator(job);
3902+ return container.innerHTML;
3903+ }
3904+
3905+ function prettyPrint(opt_whenDone) {
3906+ function byTagName(tn) { return document.getElementsByTagName(tn); }
3907+ // fetch a list of nodes to rewrite
3908+ var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
3909+ var elements = [];
3910+ for (var i = 0; i < codeSegments.length; ++i) {
3911+ for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
3912+ elements.push(codeSegments[i][j]);
3913+ }
3914+ }
3915+ codeSegments = null;
3916+
3917+ var clock = Date;
3918+ if (!clock['now']) {
3919+ clock = { 'now': function () { return +(new Date); } };
3920+ }
3921+
3922+ // The loop is broken into a series of continuations to make sure that we
3923+ // don't make the browser unresponsive when rewriting a large page.
3924+ var k = 0;
3925+ var prettyPrintingJob;
3926+
3927+ var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
3928+ var prettyPrintRe = /\bprettyprint\b/;
3929+ var prettyPrintedRe = /\bprettyprinted\b/;
3930+ var preformattedTagNameRe = /pre|xmp/i;
3931+ var codeRe = /^code$/i;
3932+ var preCodeXmpRe = /^(?:pre|code|xmp)$/i;
3933+
3934+ function doWork() {
3935+ var endTime = (win['PR_SHOULD_USE_CONTINUATION'] ?
3936+ clock['now']() + 250 /* ms */ :
3937+ Infinity);
3938+ for (; k < elements.length && clock['now']() < endTime; k++) {
3939+ var cs = elements[k];
3940+ var className = cs.className;
3941+ if (prettyPrintRe.test(className)
3942+ // Don't redo this if we've already done it.
3943+ // This allows recalling pretty print to just prettyprint elements
3944+ // that have been added to the page since last call.
3945+ && !prettyPrintedRe.test(className)) {
3946+
3947+ // make sure this is not nested in an already prettified element
3948+ var nested = false;
3949+ for (var p = cs.parentNode; p; p = p.parentNode) {
3950+ var tn = p.tagName;
3951+ if (preCodeXmpRe.test(tn)
3952+ && p.className && prettyPrintRe.test(p.className)) {
3953+ nested = true;
3954+ break;
3955+ }
3956+ }
3957+ if (!nested) {
3958+ // Mark done. If we fail to prettyprint for whatever reason,
3959+ // we shouldn't try again.
3960+ cs.className += ' prettyprinted';
3961+
3962+ // If the classes includes a language extensions, use it.
3963+ // Language extensions can be specified like
3964+ // <pre class="prettyprint lang-cpp">
3965+ // the language extension "cpp" is used to find a language handler
3966+ // as passed to PR.registerLangHandler.
3967+ // HTML5 recommends that a language be specified using "language-"
3968+ // as the prefix instead. Google Code Prettify supports both.
3969+ // http://dev.w3.org/html5/spec-author-view/the-code-element.html
3970+ var langExtension = className.match(langExtensionRe);
3971+ // Support <pre class="prettyprint"><code class="language-c">
3972+ var wrapper;
3973+ if (!langExtension && (wrapper = childContentWrapper(cs))
3974+ && codeRe.test(wrapper.tagName)) {
3975+ langExtension = wrapper.className.match(langExtensionRe);
3976+ }
3977+
3978+ if (langExtension) { langExtension = langExtension[1]; }
3979+
3980+ var preformatted;
3981+ if (preformattedTagNameRe.test(cs.tagName)) {
3982+ preformatted = 1;
3983+ } else {
3984+ var currentStyle = cs['currentStyle'];
3985+ var whitespace = (
3986+ currentStyle
3987+ ? currentStyle['whiteSpace']
3988+ : (document.defaultView
3989+ && document.defaultView.getComputedStyle)
3990+ ? document.defaultView.getComputedStyle(cs, null)
3991+ .getPropertyValue('white-space')
3992+ : 0);
3993+ preformatted = whitespace
3994+ && 'pre' === whitespace.substring(0, 3);
3995+ }
3996+
3997+ // Look for a class like linenums or linenums:<n> where <n> is the
3998+ // 1-indexed number of the first line.
3999+ var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
4000+ lineNums = lineNums
4001+ ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
4002+ : false;
4003+ if (lineNums) { numberLines(cs, lineNums, preformatted); }
4004+
4005+ // do the pretty printing
4006+ prettyPrintingJob = {
4007+ langExtension: langExtension,
4008+ sourceNode: cs,
4009+ numberLines: lineNums,
4010+ pre: preformatted
4011+ };
4012+ applyDecorator(prettyPrintingJob);
4013+ }
4014+ }
4015+ }
4016+ if (k < elements.length) {
4017+ // finish up in a continuation
4018+ setTimeout(doWork, 250);
4019+ } else if (opt_whenDone) {
4020+ opt_whenDone();
4021+ }
4022+ }
4023+
4024+ doWork();
4025+ }
4026+
4027+ /**
4028+ * Contains functions for creating and registering new language handlers.
4029+ * @type {Object}
4030+ */
4031+ var PR = win['PR'] = {
4032+ 'createSimpleLexer': createSimpleLexer,
4033+ 'registerLangHandler': registerLangHandler,
4034+ 'sourceDecorator': sourceDecorator,
4035+ 'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
4036+ 'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
4037+ 'PR_COMMENT': PR_COMMENT,
4038+ 'PR_DECLARATION': PR_DECLARATION,
4039+ 'PR_KEYWORD': PR_KEYWORD,
4040+ 'PR_LITERAL': PR_LITERAL,
4041+ 'PR_NOCODE': PR_NOCODE,
4042+ 'PR_PLAIN': PR_PLAIN,
4043+ 'PR_PUNCTUATION': PR_PUNCTUATION,
4044+ 'PR_SOURCE': PR_SOURCE,
4045+ 'PR_STRING': PR_STRING,
4046+ 'PR_TAG': PR_TAG,
4047+ 'PR_TYPE': PR_TYPE,
4048+ 'prettyPrintOne': win['prettyPrintOne'] = prettyPrintOne,
4049+ 'prettyPrint': win['prettyPrint'] = prettyPrint
4050+ };
4051+
4052+
4053+/* Register Lua syntaxes */
4054+ PR['registerLangHandler'](
4055+ PR['createSimpleLexer'](
4056+ [
4057+ // Whitespace
4058+ [PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
4059+ // A double or single quoted, possibly multi-line, string.
4060+ [PR['PR_STRING'], /^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/, null, '"\'']
4061+ ],
4062+ [
4063+ // A comment is either a line comment that starts with two dashes, or
4064+ // two dashes preceding a long bracketed block.
4065+ [PR['PR_COMMENT'], /^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/],
4066+ [PR['PR_TYPE'], /^nil|false|true/],
4067+ // A long bracketed block not preceded by -- is a string.
4068+ [PR['PR_STRING'], /^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/],
4069+ [PR['PR_KEYWORD'], /^(?:and|break|do|else|elseif|end|for|function|if|in|local|not|or|repeat|require|return|then|until|while)\b/, null],
4070+ // A number is a hex integer literal, a decimal real literal, or in
4071+ // scientific notation.
4072+ [PR['PR_LITERAL'],
4073+ /^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],
4074+ // An identifier
4075+ [PR['PR_PLAIN'], /^[a-z_]\w*/i],
4076+ // A run of punctuation
4077+ [PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/]
4078+ ]),
4079+ ['lua']);
4080+
4081+
4082+ // Make PR available via the Asynchronous Module Definition (AMD) API.
4083+ // Per https://github.com/amdjs/amdjs-api/wiki/AMD:
4084+ // The Asynchronous Module Definition (AMD) API specifies a
4085+ // mechanism for defining modules such that the module and its
4086+ // dependencies can be asynchronously loaded.
4087+ // ...
4088+ // To allow a clear indicator that a global define function (as
4089+ // needed for script src browser loading) conforms to the AMD API,
4090+ // any global define function SHOULD have a property called "amd"
4091+ // whose value is an object. This helps avoid conflict with any
4092+ // other existing JavaScript code that could have defined a define()
4093+ // function that does not conform to the AMD API.
4094+ if (typeof define === "function" && define['amd']) {
4095+ define("google-code-prettify", [], function () {
4096+ return PR;
4097+ });
4098+ }
4099+})();
4100diff --git a/docs/manual/style/scripts/prettify.min.js b/docs/manual/style/scripts/prettify.min.js
4101new file mode 100644
4102index 0000000..bd72256
4103--- /dev/null
4104+++ b/docs/manual/style/scripts/prettify.min.js
4105@@ -0,0 +1,124 @@
4106+// see prettify.js for copyright, license and expanded version
4107+window['PR_SHOULD_USE_CONTINUATION']=true;var prettyPrintOne;var prettyPrint;(function(){var win=window;var FLOW_CONTROL_KEYWORDS=["break,continue,do,else,for,if,return,while"];var C_KEYWORDS=[FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default,"+"double,enum,extern,float,goto,int,long,register,short,signed,sizeof,module,"+"static,struct,switch,typedef,union,unsigned,void,volatile"];var COMMON_KEYWORDS=[C_KEYWORDS,"catch,class,delete,false,import,"+"new,operator,private,protected,public,this,throw,true,try,typeof"];var CPP_KEYWORDS=[COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool,"+"concept,concept_map,const_cast,constexpr,decltype,"+"dynamic_cast,explicit,export,friend,inline,late_check,"+"mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,"+"template,typeid,typename,using,virtual,where,request_req"];var JAVA_KEYWORDS=[COMMON_KEYWORDS,"abstract,boolean,byte,extends,final,finally,implements,import,"+"instanceof,null,native,package,strictfp,super,synchronized,throws,"+"transient"];var CSHARP_KEYWORDS=[JAVA_KEYWORDS,"as,base,by,checked,decimal,delegate,descending,dynamic,event,"+"fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,"+"lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,"+"sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,"+"var,virtual,where"];var COFFEE_KEYWORDS="all,and,by,catch,class,else,extends,false,finally,"+"for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,"+"throw,true,try,unless,until,when,while,yes";var JSCRIPT_KEYWORDS=[COMMON_KEYWORDS,"debugger,eval,export,function,get,null,set,undefined,var,with,"+"Infinity,NaN"];var PERL_KEYWORDS="caller,delete,die,do,dump,else,elsif,eval,exit,foreach,for,"+"goto,if,import,last,local,my,next,no,our,print,printf,package,redo,require,"+"sub,undef,unless,until,use,wantarray,while,BEGIN,END";var PHP_KEYWORDS="abstract,and,array,as,break,case,catch,cfunction,class,"+"clone,const,continue,declare,default,do,else,elseif,enddeclare,endfor,"+"endforeach,endif,endswitch,endwhile,extends,final,for,foreach,function,"+"global,goto,if,implements,interface,instanceof,namespace,new,old_function,"+"or,private,protected,public,static,switch,throw,try,use,var,while,xor,"+"die,echo,empty,exit,eval,include,include_once,isset,list,require,"+"require_once,return,print,unset";var PYTHON_KEYWORDS=[FLOW_CONTROL_KEYWORDS,"and,as,assert,class,def,del,"+"elif,except,exec,finally,from,global,import,in,is,lambda,"+"nonlocal,not,or,pass,print,raise,try,with,yield,"+"False,True,None"];var RUBY_KEYWORDS=[FLOW_CONTROL_KEYWORDS,"alias,and,begin,case,class,"+"def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,"+"rescue,retry,self,super,then,true,undef,unless,until,when,yield,"+"BEGIN,END"];var SH_KEYWORDS=[FLOW_CONTROL_KEYWORDS,"case,done,elif,esac,eval,fi,"+"function,in,local,set,then,until,echo"];var CONFIG_ENVS=["User-Agent,HTTP_USER_AGENT,HTTP_REFERER,HTTP_COOKIE,HTTP_FORWARDED,HTTP_HOST,HTTP_PROXY_CONNECTION,HTTP_ACCEPT,REMOTE_ADDR,REMOTE_HOST,REMOTE_PORT,REMOTE_USER,REMOTE_IDENT,REQUEST_METHOD,SCRIPT_FILENAME,PATH_INFO,QUERY_STRING,AUTH_TYPE,DOCUMENT_ROOT,SERVER_ADMIN,SERVER_NAME,SERVER_ADDR,SERVER_PORT,SERVER_PROTOCOL,SERVER_SOFTWARE,TIME_YEAR,TIME_MON,TIME_DAY,TIME_HOUR,TIME_MIN,TIME_SEC,TIME_WDAY,TIME,API_VERSION,THE_REQUEST,REQUEST_URI,REQUEST_FILENAME,IS_SUBREQ,HTTPS,REQUEST_SCHEME"];var CONFIG_KEYWORDS=["<AuthnProviderAlias>,<AuthzProviderAlias>,<Directory>,<DirectoryMatch>,<Else>,<ElseIf>,<Files>,<FilesMatch>,<If>,<IfDefine>,<IfModule>,<IfVersion>,<Limit>,<LimitExcept>,<Location>,<LocationMatch>,<MDomainSet>,<Macro>,<Proxy>,<ProxyMatch>,<RequireAll>,<RequireAny>,<RequireNone>,<VirtualHost>,AcceptFilter,AcceptPathInfo,AccessFileName,Action,AddAlt,AddAltByEncoding,AddAltByType,AddCharset,AddDefaultCharset,AddDescription,AddEncoding,AddHandler,AddIcon,AddIconByEncoding,AddIconByType,AddInputFilter,AddLanguage,AddModuleInfo,AddOutputFilter,AddOutputFilterByType,AddType,Alias,AliasMatch,Allow,AllowCONNECT,AllowEncodedSlashes,AllowMethods,AllowOverride,AllowOverrideList,Anonymous,Anonymous_LogEmail,Anonymous_MustGiveEmail,Anonymous_NoUserID,Anonymous_VerifyEmail,AsyncRequestWorkerFactor,AuthBasicAuthoritative,AuthBasicFake,AuthBasicProvider,AuthBasicUseDigestAlgorithm,AuthDBDUserPWQuery,AuthDBDUserRealmQuery,AuthDBMGroupFile,AuthDBMType,AuthDBMUserFile,AuthDigestAlgorithm,AuthDigestDomain,AuthDigestNonceLifetime,AuthDigestProvider,AuthDigestQop,AuthDigestShmemSize,AuthFormAuthoritative,AuthFormBody,AuthFormDisableNoStore,AuthFormFakeBasicAuth,AuthFormLocation,AuthFormLoginRequiredLocation,AuthFormLoginSuccessLocation,AuthFormLogoutLocation,AuthFormMethod,AuthFormMimetype,AuthFormPassword,AuthFormProvider,AuthFormSitePassphrase,AuthFormSize,AuthFormUsername,AuthGroupFile,AuthLDAPAuthorizePrefix,AuthLDAPBindAuthoritative,AuthLDAPBindDN,AuthLDAPBindPassword,AuthLDAPCharsetConfig,AuthLDAPCompareAsUser,AuthLDAPCompareDNOnServer,AuthLDAPDereferenceAliases,AuthLDAPGroupAttribute,AuthLDAPGroupAttributeIsDN,AuthLDAPInitialBindAsUser,AuthLDAPInitialBindPattern,AuthLDAPMaxSubGroupDepth,AuthLDAPRemoteUserAttribute,AuthLDAPRemoteUserIsDN,AuthLDAPSearchAsUser,AuthLDAPSubGroupAttribute,AuthLDAPSubGroupClass,AuthLDAPUrl,AuthMerging,AuthName,AuthType,AuthUserFile,AuthnCacheContext,AuthnCacheEnable,AuthnCacheProvideFor,AuthnCacheSOCache,AuthnCacheTimeout,AuthnzFcgiCheckAuthnProvider,AuthnzFcgiDefineProvider,AuthzDBDLoginToReferer,AuthzDBDQuery,AuthzDBDRedirectQuery,AuthzDBMType,AuthzSendForbiddenOnFailure,BalancerGrowth,BalancerInherit,BalancerMember,BalancerPersist,BrotliAlterETag,BrotliCompressionMaxInputBlock,BrotliCompressionQuality,BrotliCompressionWindow,BrotliFilterNote,BrowserMatch,BrowserMatchNoCase,BufferSize,BufferedLogs,CGIDScriptTimeout,CGIMapExtension,CGIPassAuth,CGIVar,CacheDefaultExpire,CacheDetailHeader,CacheDirLength,CacheDirLevels,CacheDisable,CacheEnable,CacheFile,CacheHeader,CacheIgnoreCacheControl,CacheIgnoreHeaders,CacheIgnoreNoLastMod,CacheIgnoreQueryString,CacheIgnoreURLSessionIdentifiers,CacheKeyBaseURL,CacheLastModifiedFactor,CacheLock,CacheLockMaxAge,CacheLockPath,CacheMaxExpire,CacheMaxFileSize,CacheMinExpire,CacheMinFileSize,CacheNegotiatedDocs,CacheQuickHandler,CacheReadSize,CacheReadTime,CacheRoot,CacheSocache,CacheSocacheMaxSize,CacheSocacheMaxTime,CacheSocacheMinTime,CacheSocacheReadSize,CacheSocacheReadTime,CacheStaleOnError,CacheStoreExpired,CacheStoreNoStore,CacheStorePrivate,CharsetDefault,CharsetOptions,CharsetSourceEnc,CheckCaseOnly,CheckSpelling,ChrootDir,ContentDigest,CookieDomain,CookieExpires,CookieName,CookieStyle,CookieTracking,CoreDumpDirectory,CustomLog,DBDExptime,DBDInitSQL,DBDKeep,DBDMax,DBDMin,DBDParams,DBDPersist,DBDPrepareSQL,DBDriver,DTracePrivileges,Dav,DavDepthInfinity,DavGenericLockDB,DavLockDB,DavMinTimeout,DefaultIcon,DefaultLanguage,DefaultRuntimeDir,DefaultType,Define,DeflateBufferSize,DeflateCompressionLevel,DeflateFilterNote,DeflateInflateLimitRequestBody,DeflateInflateRatioBurst,DeflateInflateRatioLimit,DeflateMemLevel,DeflateWindowSize,Deny,DirectoryCheckHandler,DirectoryIndex,DirectoryIndexRedirect,DirectorySlash,DocumentRoot,DumpIOInput,DumpIOOutput,EnableExceptionHook,EnableMMAP,EnableSendfile,Error,ErrorDocument,ErrorLog,ErrorLogFormat,Example,ExpiresActive,ExpiresByType,ExpiresDefault,ExtFilterDefine,ExtFilterOptions,ExtendedStatus,FallbackResource,FileETag,FilterChain,FilterDeclare,FilterProtocol,FilterProvider,FilterTrace,ForceLanguagePriority,ForceType,ForensicLog,GlobalLog,GprofDir,GracefulShutdownTimeout,Group,H2CopyFiles,H2Direct,H2EarlyHints,H2MaxSessionStreams,H2MaxWorkerIdleSeconds,H2MaxWorkers,H2MinWorkers,H2ModernTLSOnly,H2Push,H2PushDiarySize,H2PushPriority,H2PushResource,H2SerializeHeaders,H2StreamMaxMemSize,H2TLSCoolDownSecs,H2TLSWarmUpSize,H2Upgrade,H2WindowSize,Header,HeaderName,HeartbeatAddress,HeartbeatListen,HeartbeatMaxServers,HeartbeatStorage,HeartbeatStorage,HostnameLookups,HttpProtocolOptions,ISAPIAppendLogToErrors,ISAPIAppendLogToQuery,ISAPICacheFile,ISAPIFakeAsync,ISAPILogNotSupported,ISAPIReadAheadBuffer,IdentityCheck,IdentityCheckTimeout,ImapBase,ImapDefault,ImapMenu,Include,IncludeOptional,IndexHeadInsert,IndexIgnore,IndexIgnoreReset,IndexOptions,IndexOrderDefault,IndexStyleSheet,InputSed,KeepAlive,KeepAliveTimeout,KeptBodySize,LDAPCacheEntries,LDAPCacheTTL,LDAPConnectionPoolTTL,LDAPConnectionTimeout,LDAPLibraryDebug,LDAPOpCacheEntries,LDAPOpCacheTTL,LDAPReferralHopLimit,LDAPReferrals,LDAPRetries,LDAPRetryDelay,LDAPSharedCacheFile,LDAPSharedCacheSize,LDAPTimeout,LDAPTrustedClientCert,LDAPTrustedGlobalCert,LDAPTrustedMode,LDAPVerifyServerCert,LanguagePriority,LimitInternalRecursion,LimitRequestBody,LimitRequestFieldSize,LimitRequestFields,LimitRequestLine,LimitXMLRequestBody,Listen,ListenBackLog,ListenCoresBucketsRatio,LoadFile,LoadModule,LogFormat,LogIOTrackTTFB,LogLevel,LogMessage,LuaAuthzProvider,LuaCodeCache,LuaHookAccessChecker,LuaHookAuthChecker,LuaHookCheckUserID,LuaHookFixups,LuaHookInsertFilter,LuaHookLog,LuaHookMapToStorage,LuaHookTranslateName,LuaHookTypeChecker,LuaInherit,LuaInputFilter,LuaMapHandler,LuaOutputFilter,LuaPackageCPath,LuaPackagePath,LuaQuickHandler,LuaRoot,LuaScope,MDBaseServer,MDCAChallenges,MDCertificateAgreement,MDCertificateAuthority,MDCertificateProtocol,MDDriveMode,MDHttpProxy,MDMember,MDMembers,MDMustStaple,MDNotifyCmd,MDPortMap,MDPrivateKeys,MDRenewWindow,MDRequireHttps,MDStoreDir,MDomain,MMapFile,MaxConnectionsPerChild,MaxKeepAliveRequests,MaxMemFree,MaxRangeOverlaps,MaxRangeReversals,MaxRanges,MaxRequestWorkers,MaxSpareServers,MaxSpareThreads,MaxThreads,MemcacheConnTTL,MergeTrailers,MetaDir,MetaFiles,MetaSuffix,MimeMagicFile,MinSpareServers,MinSpareThreads,ModMimeUsePathInfo,ModemStandard,MultiviewsMatch,Mutex,NWSSLTrustedCerts,NWSSLUpgradeable,NameVirtualHost,NoProxy,Options,Order,OutputSed,PassEnv,PidFile,PrivilegesMode,Protocol,ProtocolEcho,Protocols,ProtocolsHonorOrder,ProxyAddHeaders,ProxyBadHeader,ProxyBlock,ProxyDomain,ProxyErrorOverride,ProxyExpressDBMFile,ProxyExpressDBMType,ProxyExpressEnable,ProxyFCGIBackendType,ProxyFCGISetEnvIf,ProxyFtpDirCharset,ProxyFtpEscapeWildcards,ProxyFtpListOnWildcard,ProxyHCExpr,ProxyHCTPsize,ProxyHCTemplate,ProxyHTMLBufSize,ProxyHTMLCharsetOut,ProxyHTMLDocType,ProxyHTMLEnable,ProxyHTMLEvents,ProxyHTMLExtended,ProxyHTMLFixups,ProxyHTMLInterp,ProxyHTMLLinks,ProxyHTMLMeta,ProxyHTMLStripComments,ProxyHTMLURLMap,ProxyIOBufferSize,ProxyMaxForwards,ProxyPass,ProxyPassInherit,ProxyPassInterpolateEnv,ProxyPassMatch,ProxyPassReverse,ProxyPassReverseCookieDomain,ProxyPassReverseCookiePath,ProxyPreserveHost,ProxyReceiveBufferSize,ProxyRemote,ProxyRemoteMatch,ProxyRequests,ProxySCGIInternalRedirect,ProxySCGISendfile,ProxySet,ProxySourceAddress,ProxyStatus,ProxyTimeout,ProxyVia,QualifyRedirectURL,RLimitCPU,RLimitMEM,RLimitNPROC,ReadmeName,ReceiveBufferSize,Redirect,RedirectMatch,RedirectPermanent,RedirectTemp,ReflectorHeader,RegisterHttpMethod,RemoteIPHeader,RemoteIPInternalProxy,RemoteIPInternalProxyList,RemoteIPProxiesHeader,RemoteIPTrustedProxy,RemoteIPTrustedProxyList,RemoveCharset,RemoveEncoding,RemoveHandler,RemoveInputFilter,RemoveLanguage,RemoveOutputFilter,RemoveType,RequestHeader,RequestReadTimeout,Require,RewriteBase,RewriteCond,RewriteEngine,RewriteMap,RewriteOptions,RewriteRule,SSIETag,SSIEndTag,SSIErrorMsg,SSILastModified,SSILegacyExprParser,SSIStartTag,SSITimeFormat,SSIUndefinedEcho,SSLCACertificateFile,SSLCACertificatePath,SSLCADNRequestFile,SSLCADNRequestPath,SSLCARevocationCheck,SSLCARevocationFile,SSLCARevocationPath,SSLCertificateChainFile,SSLCertificateFile,SSLCertificateKeyFile,SSLCipherSuite,SSLCompression,SSLCryptoDevice,SSLEngine,SSLFIPS,SSLHonorCipherOrder,SSLInsecureRenegotiation,SSLOCSPDefaultResponder,SSLOCSPEnable,SSLOCSPNoverify,SSLOCSPOverrideResponder,SSLOCSPProxyURL,SSLOCSPResponderCertificateFile,SSLOCSPResponderTimeout,SSLOCSPResponseMaxAge,SSLOCSPResponseTimeSkew,SSLOCSPUseRequestNonce,SSLOpenSSLConfCmd,SSLOptions,SSLPassPhraseDialog,SSLProtocol,SSLProxyCACertificateFile,SSLProxyCACertificatePath,SSLProxyCARevocationCheck,SSLProxyCARevocationFile,SSLProxyCARevocationPath,SSLProxyCheckPeerCN,SSLProxyCheckPeerExpire,SSLProxyCheckPeerName,SSLProxyCipherSuite,SSLProxyEngine,SSLProxyMachineCertificateChainFile,SSLProxyMachineCertificateFile,SSLProxyMachineCertificatePath,SSLProxyProtocol,SSLProxyVerify,SSLProxyVerifyDepth,SSLRandomSeed,SSLRenegBufferSize,SSLRequire,SSLRequireSSL,SSLSRPUnknownUserSeed,SSLSRPVerifierFile,SSLSessionCache,SSLSessionCacheTimeout,SSLSessionTicketKeyFile,SSLSessionTickets,SSLStaplingCache,SSLStaplingErrorCacheTimeout,SSLStaplingFakeTryLater,SSLStaplingForceURL,SSLStaplingResponderTimeout,SSLStaplingResponseMaxAge,SSLStaplingResponseTimeSkew,SSLStaplingReturnResponderErrors,SSLStaplingStandardCacheTimeout,SSLStrictSNIVHostCheck,SSLUseStapling,SSLUserName,SSLVerifyClient,SSLVerifyDepth,Satisfy,ScoreBoardFile,Script,ScriptAlias,ScriptAliasMatch,ScriptInterpreterSource,ScriptLog,ScriptLogBuffer,ScriptLogLength,ScriptSock,SecureListen,SeeRequestTail,SendBufferSize,ServerAdmin,ServerAlias,ServerLimit,ServerName,ServerPath,ServerRoot,ServerSignature,ServerTokens,Session,SessionCookieName,SessionCookieName2,SessionCookieRemove,SessionCryptoCipher,SessionCryptoDriver,SessionCryptoPassphrase,SessionCryptoPassphraseFile,SessionDBDCookieName,SessionDBDCookieName2,SessionDBDCookieRemove,SessionDBDDeleteLabel,SessionDBDInsertLabel,SessionDBDPerUser,SessionDBDSelectLabel,SessionDBDUpdateLabel,SessionEnv,SessionExclude,SessionHeader,SessionInclude,SessionMaxAge,SetEnv,SetEnvIf,SetEnvIfExpr,SetEnvIfNoCase,SetHandler,SetInputFilter,SetOutputFilter,StartServers,StartThreads,Substitute,SubstituteInheritBefore,SubstituteMaxLineLength,Suexec,SuexecUserGroup,ThreadLimit,ThreadStackSize,ThreadsPerChild,TimeOut,TraceEnable,TransferLog,TypesConfig,UnDefine,UndefMacro,UnsetEnv,Use,UseCanonicalName,UseCanonicalPhysicalPort,User,UserDir,VHostCGIMode,VHostCGIPrivs,VHostGroup,VHostPrivs,VHostSecure,VHostUser,VirtualDocumentRoot,VirtualDocumentRootIP,VirtualScriptAlias,VirtualScriptAliasIP,WatchdogInterval,XBitHack,xml2EncAlias,xml2EncDefault,xml2StartParse"]
4108+var CONFIG_OPTIONS=/^[\\+\\-]?(AuthConfig|IncludesNOEXEC|ExecCGI|FollowSymLinks|MultiViews|Includes|Indexes|SymLinksIfOwnerMatch)\b/i;var ALL_KEYWORDS=[CPP_KEYWORDS,CSHARP_KEYWORDS,JSCRIPT_KEYWORDS,PERL_KEYWORDS+
4109+PYTHON_KEYWORDS,RUBY_KEYWORDS,SH_KEYWORDS,CONFIG_KEYWORDS,PHP_KEYWORDS];var C_TYPES=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float|char|void|const|static|struct)\d*(_t)?\b)|[a-z_]+_rec|cmd_parms\b/;var PR_STRING='str';var PR_KEYWORD='kwd';var PR_COMMENT='com';var PR_TYPE='typ';var PR_LITERAL='lit';var PR_PUNCTUATION='pun';var PR_PLAIN='pln';var PR_TAG='tag';var PR_DECLARATION='dec';var PR_SOURCE='src';var PR_ATTRIB_NAME='atn';var PR_ATTRIB_VALUE='atv';var PR_NOCODE='nocode';var REGEXP_PRECEDER_PATTERN='(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';function combinePrefixPatterns(regexs){var capturedGroupIndex=0;var needToFoldCase=false;var ignoreCase=false;for(var i=0,n=regexs.length;i<n;++i){var regex=regexs[i];if(regex.ignoreCase){ignoreCase=true;}else if(/[a-z]/i.test(regex.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,''))){needToFoldCase=true;ignoreCase=false;break;}}
4110+var escapeCharToCodeUnit={'b':8,'t':9,'n':0xa,'v':0xb,'f':0xc,'r':0xd};function decodeEscape(charsetPart){var cc0=charsetPart.charCodeAt(0);if(cc0!==92){return cc0;}
4111+var c1=charsetPart.charAt(1);cc0=escapeCharToCodeUnit[c1];if(cc0){return cc0;}else if('0'<=c1&&c1<='7'){return parseInt(charsetPart.substring(1),8);}else if(c1==='u'||c1==='x'){return parseInt(charsetPart.substring(2),16);}else{return charsetPart.charCodeAt(1);}}
4112+function encodeEscape(charCode){if(charCode<0x20){return(charCode<0x10?'\\x0':'\\x')+charCode.toString(16);}
4113+var ch=String.fromCharCode(charCode);return(ch==='\\'||ch==='-'||ch===']'||ch==='^')?"\\"+ch:ch;}
4114+function caseFoldCharset(charSet){var charsetParts=charSet.substring(1,charSet.length-1).match(new RegExp('\\\\u[0-9A-Fa-f]{4}'
4115++'|\\\\x[0-9A-Fa-f]{2}'
4116++'|\\\\[0-3][0-7]{0,2}'
4117++'|\\\\[0-7]{1,2}'
4118++'|\\\\[\\s\\S]'
4119++'|-'
4120++'|[^-\\\\]','g'));var ranges=[];var inverse=charsetParts[0]==='^';var out=['['];if(inverse){out.push('^');}
4121+for(var i=inverse?1:0,n=charsetParts.length;i<n;++i){var p=charsetParts[i];if(/\\[bdsw]/i.test(p)){out.push(p);}else{var start=decodeEscape(p);var end;if(i+2<n&&'-'===charsetParts[i+1]){end=decodeEscape(charsetParts[i+2]);i+=2;}else{end=start;}
4122+ranges.push([start,end]);if(!(end<65||start>122)){if(!(end<65||start>90)){ranges.push([Math.max(65,start)|32,Math.min(end,90)|32]);}
4123+if(!(end<97||start>122)){ranges.push([Math.max(97,start)&~32,Math.min(end,122)&~32]);}}}}
4124+ranges.sort(function(a,b){return(a[0]-b[0])||(b[1]-a[1]);});var consolidatedRanges=[];var lastRange=[];for(var i=0;i<ranges.length;++i){var range=ranges[i];if(range[0]<=lastRange[1]+1){lastRange[1]=Math.max(lastRange[1],range[1]);}else{consolidatedRanges.push(lastRange=range);}}
4125+for(var i=0;i<consolidatedRanges.length;++i){var range=consolidatedRanges[i];out.push(encodeEscape(range[0]));if(range[1]>range[0]){if(range[1]+1>range[0]){out.push('-');}
4126+out.push(encodeEscape(range[1]));}}
4127+out.push(']');return out.join('');}
4128+function allowAnywhereFoldCaseAndRenumberGroups(regex){var parts=regex.source.match(new RegExp('(?:'
4129++'\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'
4130++'|\\\\u[A-Fa-f0-9]{4}'
4131++'|\\\\x[A-Fa-f0-9]{2}'
4132++'|\\\\[0-9]+'
4133++'|\\\\[^ux0-9]'
4134++'|\\(\\?[:!=]'
4135++'|[\\(\\)\\^]'
4136++'|[^\\x5B\\x5C\\(\\)\\^]+'
4137++')','g'));var n=parts.length;var capturedGroups=[];for(var i=0,groupIndex=0;i<n;++i){var p=parts[i];if(p==='('){++groupIndex;}else if('\\'===p.charAt(0)){var decimalValue=+p.substring(1);if(decimalValue){if(decimalValue<=groupIndex){capturedGroups[decimalValue]=-1;}else{parts[i]=encodeEscape(decimalValue);}}}}
4138+for(var i=1;i<capturedGroups.length;++i){if(-1===capturedGroups[i]){capturedGroups[i]=++capturedGroupIndex;}}
4139+for(var i=0,groupIndex=0;i<n;++i){var p=parts[i];if(p==='('){++groupIndex;if(!capturedGroups[groupIndex]){parts[i]='(?:';}}else if('\\'===p.charAt(0)){var decimalValue=+p.substring(1);if(decimalValue&&decimalValue<=groupIndex){parts[i]='\\'+capturedGroups[decimalValue];}}}
4140+for(var i=0;i<n;++i){if('^'===parts[i]&&'^'!==parts[i+1]){parts[i]='';}}
4141+if(regex.ignoreCase&&needToFoldCase){for(var i=0;i<n;++i){var p=parts[i];var ch0=p.charAt(0);if(p.length>=2&&ch0==='['){parts[i]=caseFoldCharset(p);}else if(ch0!=='\\'){parts[i]=p.replace(/[a-zA-Z]/g,function(ch){var cc=ch.charCodeAt(0);return'['+String.fromCharCode(cc&~32,cc|32)+']';});}}}
4142+return parts.join('');}
4143+var rewritten=[];for(var i=0,n=regexs.length;i<n;++i){var regex=regexs[i];if(regex.global||regex.multiline){throw new Error(''+regex);}
4144+rewritten.push('(?:'+allowAnywhereFoldCaseAndRenumberGroups(regex)+')');}
4145+return new RegExp(rewritten.join('|'),ignoreCase?'gi':'g');}
4146+function extractSourceSpans(node,isPreformatted){var nocode=/(?:^|\s)nocode(?:\s|$)/;var chunks=[];var length=0;var spans=[];var k=0;function walk(node){switch(node.nodeType){case 1:if(nocode.test(node.className)){return;}
4147+for(var child=node.firstChild;child;child=child.nextSibling){walk(child);}
4148+var nodeName=node.nodeName.toLowerCase();if('br'===nodeName||'li'===nodeName){chunks[k]='\n';spans[k<<1]=length++;spans[(k++<<1)|1]=node;}
4149+break;case 3:case 4:var text=node.nodeValue;if(text.length){if(!isPreformatted){text=text.replace(/[ \t\r\n]+/g,' ');}else{text=text.replace(/\r\n?/g,'\n');text=text.replace(/^(\r?\n\s*)+/g,'');text=text.replace(/^\s*/g,'');text=text.replace(/(\r?\n\s*)+$/g,'');}
4150+chunks[k]=text;spans[k<<1]=length;length+=text.length;spans[(k++<<1)|1]=node;}
4151+break;}}
4152+walk(node);return{sourceCode:chunks.join('').replace(/\n$/,''),spans:spans};}
4153+function appendDecorations(basePos,sourceCode,langHandler,out){if(!sourceCode){return;}
4154+var job={sourceCode:sourceCode,basePos:basePos};langHandler(job);out.push.apply(out,job.decorations);}
4155+var notWs=/\S/;function childContentWrapper(element){var wrapper=undefined;for(var c=element.firstChild;c;c=c.nextSibling){var type=c.nodeType;wrapper=(type===1)?(wrapper?element:c):(type===3)?(notWs.test(c.nodeValue)?element:wrapper):wrapper;}
4156+return wrapper===element?undefined:wrapper;}
4157+function createSimpleLexer(shortcutStylePatterns,fallthroughStylePatterns){var shortcuts={};var tokenizer;(function(){var allPatterns=shortcutStylePatterns.concat(fallthroughStylePatterns);var allRegexs=[];var regexKeys={};for(var i=0,n=allPatterns.length;i<n;++i){var patternParts=allPatterns[i];var shortcutChars=patternParts[3];if(shortcutChars){for(var c=shortcutChars.length;--c>=0;){shortcuts[shortcutChars.charAt(c)]=patternParts;}}
4158+var regex=patternParts[1];var k=''+regex;if(!regexKeys.hasOwnProperty(k)){allRegexs.push(regex);regexKeys[k]=null;}}
4159+allRegexs.push(/[\0-\uffff]/);tokenizer=combinePrefixPatterns(allRegexs);})();var nPatterns=fallthroughStylePatterns.length;var decorate=function(job){var sourceCode=job.sourceCode,basePos=job.basePos;var decorations=[basePos,PR_PLAIN];var pos=0;var tokens=sourceCode.match(tokenizer)||[];var styleCache={};for(var ti=0,nTokens=tokens.length;ti<nTokens;++ti){var token=tokens[ti];var style=styleCache[token];var match=void 0;var isEmbedded;if(typeof style==='string'){isEmbedded=false;}else{var patternParts=shortcuts[token.charAt(0)];if(patternParts){match=token.match(patternParts[1]);style=patternParts[0];}else{for(var i=0;i<nPatterns;++i){patternParts=fallthroughStylePatterns[i];match=token.match(patternParts[1]);if(match){style=patternParts[0];break;}}
4160+if(!match){style=PR_PLAIN;}}
4161+isEmbedded=style.length>=5&&'lang-'===style.substring(0,5);if(isEmbedded&&!(match&&typeof match[1]==='string')){isEmbedded=false;style=PR_SOURCE;}
4162+if(!isEmbedded){styleCache[token]=style;}}
4163+var tokenStart=pos;pos+=token.length;if(!isEmbedded){decorations.push(basePos+tokenStart,style);}else{var embeddedSource=match[1];var embeddedSourceStart=token.indexOf(embeddedSource);var embeddedSourceEnd=embeddedSourceStart+embeddedSource.length;if(match[2]){embeddedSourceEnd=token.length-match[2].length;embeddedSourceStart=embeddedSourceEnd-embeddedSource.length;}
4164+var lang=style.substring(5);appendDecorations(basePos+tokenStart,token.substring(0,embeddedSourceStart),decorate,decorations);appendDecorations(basePos+tokenStart+embeddedSourceStart,embeddedSource,langHandlerForExtension(lang,embeddedSource),decorations);appendDecorations(basePos+tokenStart+embeddedSourceEnd,token.substring(embeddedSourceEnd),decorate,decorations);}}
4165+job.decorations=decorations;};return decorate;}
4166+function sourceDecorator(options){var shortcutStylePatterns=[],fallthroughStylePatterns=[];if(options['tripleQuotedStrings']){shortcutStylePatterns.push([PR_STRING,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,'\'"']);}else if(options['multiLineStrings']){shortcutStylePatterns.push([PR_STRING,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,'\'"`']);}else{shortcutStylePatterns.push([PR_STRING,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,'"\'']);}
4167+if(options['verbatimStrings']){fallthroughStylePatterns.push([PR_STRING,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null]);}
4168+var hc=options['hashComments'];if(hc){if(options['cStyleComments']){if(hc>1){shortcutStylePatterns.push([PR_COMMENT,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,'#']);}else{shortcutStylePatterns.push([PR_COMMENT,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,'#']);}
4169+fallthroughStylePatterns.push([PR_STRING,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,null]);}else{shortcutStylePatterns.push([PR_COMMENT,/^#[^\r\n]*/,null,'#']);}}
4170+if(options['cStyleComments']){fallthroughStylePatterns.push([PR_COMMENT,/^\/\/[^\r\n]*/,null]);fallthroughStylePatterns.push([PR_COMMENT,/^\/\*[\s\S]*?(?:\*\/|$)/,null]);}
4171+if(options['regexLiterals']){var REGEX_LITERAL=('/(?=[^/*])'
4172++'(?:[^/\\x5B\\x5C]'
4173++'|\\x5C[\\s\\S]'
4174++'|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
4175++'/');fallthroughStylePatterns.push(['lang-regex',new RegExp('^'+REGEXP_PRECEDER_PATTERN+'('+REGEX_LITERAL+')')]);}
4176+var types=options['types'];if(types){fallthroughStylePatterns.push([PR_TYPE,types]);}
4177+if(options['strings']){var strings=(""+options['strings']).replace(/^ | $/g,'').replace(/-/g,'\\-');fallthroughStylePatterns.push([PR_STRING,new RegExp('(?:'+strings.replace(/[\s,]+/g,'|')+')'),,null]);}
4178+var keywords=(""+options['keywords']).replace(/^ | $/g,'');if(keywords.length){fallthroughStylePatterns.push([PR_KEYWORD,new RegExp('^(?:'+keywords.replace(/[\s,]+/g,'|')+')\\b'),null]);}
4179+shortcutStylePatterns.push([PR_PLAIN,/^\s+/,null,' \r\n\t\xA0']);if(options['httpdComments']){fallthroughStylePatterns.push([PR_PLAIN,/^.*\S.*#/i,null]);}
4180+fallthroughStylePatterns.push([PR_LITERAL,/^@[a-z_$][a-z_$@0-9]*|\bNULL\b/i,null],[PR_LITERAL,CONFIG_OPTIONS,null],[PR_TAG,/^\b(AuthzProviderAlias|AuthnProviderAlias|RequireAny|RequireAll|RequireNone|Directory|DirectoryMatch|Location|LocationMatch|VirtualHost|If|Else|ElseIf|Proxy\b|LoadBalancer|Files|FilesMatch|Limit|LimitExcept|IfDefine|IfModule|IfVersion)\b/,null],[PR_TYPE,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_(t|req|module)\b)/,null],[PR_TAG,/^apr_[a-z_0-9]+|ap_[a-z_0-9]+/i,null],[PR_PLAIN,/^[a-z_$][a-z_$@0-9\-]*/i,null],[PR_LITERAL,new RegExp('^(?:'
4181++'0x[a-f0-9]+'
4182++'|[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+:[a-f0-9:]+'
4183++'|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
4184++'(?:e[+\\-]?\\d+)?'
4185++')'
4186++'[a-z]*','i'),null,'0123456789'],[PR_PLAIN,/^\\[\s\S]?/,null],[PR_PUNCTUATION,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return createSimpleLexer(shortcutStylePatterns,fallthroughStylePatterns);}
4187+var decorateSource=sourceDecorator({'keywords':ALL_KEYWORDS,'hashComments':true,'cStyleComments':true,'multiLineStrings':true,'regexLiterals':true});function numberLines(node,opt_startLineNum,isPreformatted){var nocode=/(?:^|\s)nocode(?:\s|$)/;var lineBreak=/\r\n?|\n/;var document=node.ownerDocument;var li=document.createElement('li');while(node.firstChild){li.appendChild(node.firstChild);}
4188+var listItems=[li];function walk(node){switch(node.nodeType){case 1:if(nocode.test(node.className)){break;}
4189+if('br'===node.nodeName){breakAfter(node);if(node.parentNode){node.parentNode.removeChild(node);}}else{for(var child=node.firstChild;child;child=child.nextSibling){walk(child);}}
4190+break;case 3:case 4:if(isPreformatted){var text=node.nodeValue;var match=text.match(lineBreak);if(match){var firstLine=text.substring(0,match.index);node.nodeValue=firstLine;var tail=text.substring(match.index+match[0].length);if(tail){var parent=node.parentNode;parent.insertBefore(document.createTextNode(tail),node.nextSibling);}
4191+breakAfter(node);if(!firstLine){node.parentNode.removeChild(node);}}}
4192+break;}}
4193+function breakAfter(lineEndNode){while(!lineEndNode.nextSibling){lineEndNode=lineEndNode.parentNode;if(!lineEndNode){return;}}
4194+function breakLeftOf(limit,copy){var rightSide=copy?limit.cloneNode(false):limit;var parent=limit.parentNode;if(parent){var parentClone=breakLeftOf(parent,1);var next=limit.nextSibling;parentClone.appendChild(rightSide);for(var sibling=next;sibling;sibling=next){next=sibling.nextSibling;parentClone.appendChild(sibling);}}
4195+return rightSide;}
4196+var copiedListItem=breakLeftOf(lineEndNode.nextSibling,0);for(var parent;(parent=copiedListItem.parentNode)&&parent.nodeType===1;){copiedListItem=parent;}
4197+listItems.push(copiedListItem);}
4198+for(var i=0;i<listItems.length;++i){walk(listItems[i]);}
4199+if(opt_startLineNum===(opt_startLineNum|0)){listItems[0].setAttribute('value',opt_startLineNum);}
4200+var ol=document.createElement('ol');ol.className='linenums';var offset=Math.max(0,((opt_startLineNum-1))|0)||0;for(var i=0,n=listItems.length;i<n;++i){li=listItems[i];li.className='L'+((i+offset)%1);if(!li.firstChild){li.appendChild(document.createTextNode('\xA0'));}
4201+ol.appendChild(li);}
4202+node.appendChild(ol);}
4203+function recombineTagsAndDecorations(job){var isIE8OrEarlier=/\bMSIE\s(\d+)/.exec(navigator.userAgent);isIE8OrEarlier=isIE8OrEarlier&&+isIE8OrEarlier[1]<=8;var newlineRe=/\n/g;var source=job.sourceCode;var sourceLength=source.length;var sourceIndex=0;var spans=job.spans;var nSpans=spans.length;var spanIndex=0;var decorations=job.decorations;var nDecorations=decorations.length;var decorationIndex=0;decorations[nDecorations]=sourceLength;var decPos,i;for(i=decPos=0;i<nDecorations;){if(decorations[i]!==decorations[i+2]){decorations[decPos++]=decorations[i++];decorations[decPos++]=decorations[i++];}else{i+=2;}}
4204+nDecorations=decPos;for(i=decPos=0;i<nDecorations;){var startPos=decorations[i];var startDec=decorations[i+1];var end=i+2;while(end+2<=nDecorations&&decorations[end+1]===startDec){end+=2;}
4205+decorations[decPos++]=startPos;decorations[decPos++]=startDec;i=end;}
4206+nDecorations=decorations.length=decPos;var sourceNode=job.sourceNode;var oldDisplay;if(sourceNode){oldDisplay=sourceNode.style.display;sourceNode.style.display='none';}
4207+try{var decoration=null;var X=0;while(spanIndex<nSpans){X=X+1;if(X>5000){break;}
4208+var spanStart=spans[spanIndex];var spanEnd=spans[spanIndex+2]||sourceLength;var decEnd=decorations[decorationIndex+2]||sourceLength;var end=Math.min(spanEnd,decEnd);var textNode=spans[spanIndex+1];var styledText;if(textNode.nodeType!==1&&(styledText=source.substring(sourceIndex,end))){if(isIE8OrEarlier){styledText=styledText.replace(newlineRe,'\r');}
4209+textNode.nodeValue=styledText;var document=textNode.ownerDocument;var span=document.createElement('span');span.className=decorations[decorationIndex+1];var parentNode=textNode.parentNode;parentNode.replaceChild(span,textNode);span.appendChild(textNode);if(sourceIndex<spanEnd){spans[spanIndex+1]=textNode=document.createTextNode(source.substring(end,spanEnd));parentNode.insertBefore(textNode,span.nextSibling);}}
4210+sourceIndex=end;if(sourceIndex>=spanEnd){spanIndex+=2;}
4211+if(sourceIndex>=decEnd){decorationIndex+=2;}}}finally{if(sourceNode){sourceNode.style.display=oldDisplay;}}}
4212+var langHandlerRegistry={};function registerLangHandler(handler,fileExtensions){for(var i=fileExtensions.length;--i>=0;){var ext=fileExtensions[i];if(!langHandlerRegistry.hasOwnProperty(ext)){langHandlerRegistry[ext]=handler;}else if(win['console']){console['warn']('cannot override language handler %s',ext);}}}
4213+function langHandlerForExtension(extension,source){if(!(extension&&langHandlerRegistry.hasOwnProperty(extension))){extension=/^\s*</.test(source)?'default-markup':'default-code';}
4214+return langHandlerRegistry[extension];}
4215+registerLangHandler(decorateSource,['default-code']);registerLangHandler(createSimpleLexer([],[[PR_PLAIN,/^[^<?]+/],[PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],['lang-',/^<\?([\s\S]+?)(?:\?>|$)/],['lang-',/^<%([\s\S]+?)(?:%>|$)/],[PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],['lang-',/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],['lang-js',/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],['lang-css',/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],['lang-in.tag',/^(<\/?[a-z][^<>]*>)/i]]),['default-markup','htm','html','mxml','xhtml','xml','xsl']);registerLangHandler(createSimpleLexer([[PR_PLAIN,/^[\s]+/,null,' \t\r\n'],[PR_ATTRIB_VALUE,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,'\"\'']],[[PR_TAG,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[PR_ATTRIB_NAME,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],['lang-uq.val',/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[PR_PUNCTUATION,/^[=<>\/]+/],['lang-js',/^on\w+\s*=\s*\"([^\"]+)\"/i],['lang-js',/^on\w+\s*=\s*\'([^\']+)\'/i],['lang-js',/^on\w+\s*=\s*([^\"\'>\s]+)/i],['lang-css',/^style\s*=\s*\"([^\"]+)\"/i],['lang-css',/^style\s*=\s*\'([^\']+)\'/i],['lang-css',/^style\s*=\s*([^\"\'>\s]+)/i]]),['in.tag']);registerLangHandler(createSimpleLexer([],[[PR_ATTRIB_VALUE,/^[\s\S]+/]]),['uq.val']);registerLangHandler(sourceDecorator({'keywords':CPP_KEYWORDS,'hashComments':true,'cStyleComments':true,'types':C_TYPES}),['c','cc','cpp','cxx','cyc','m']);registerLangHandler(sourceDecorator({'keywords':PHP_KEYWORDS,'hashComments':false,'cStyleComments':true,'multiLineStrings':true,'regexLiterals':true}),['php','phtml','inc']);registerLangHandler(sourceDecorator({'keywords':'null,true,false'}),['json']);registerLangHandler(sourceDecorator({'keywords':CSHARP_KEYWORDS,'hashComments':true,'cStyleComments':true,'verbatimStrings':true,'types':C_TYPES}),['cs']);registerLangHandler(sourceDecorator({'keywords':JAVA_KEYWORDS,'cStyleComments':true}),['java']);registerLangHandler(sourceDecorator({'keywords':SH_KEYWORDS,'hashComments':true,'multiLineStrings':true}),['bsh','csh','sh']);registerLangHandler(sourceDecorator({'keywords':PYTHON_KEYWORDS,'hashComments':true,'multiLineStrings':true,'tripleQuotedStrings':true}),['cv','py']);registerLangHandler(sourceDecorator({'keywords':PERL_KEYWORDS,'hashComments':true,'multiLineStrings':true,'regexLiterals':true}),['perl','pl','pm']);registerLangHandler(sourceDecorator({'keywords':RUBY_KEYWORDS,'hashComments':true,'multiLineStrings':true,'regexLiterals':true}),['rb']);registerLangHandler(sourceDecorator({'keywords':JSCRIPT_KEYWORDS,'cStyleComments':true,'regexLiterals':true}),['js']);registerLangHandler(sourceDecorator({'keywords':COFFEE_KEYWORDS,'hashComments':3,'cStyleComments':true,'multilineStrings':true,'tripleQuotedStrings':true,'regexLiterals':true}),['coffee']);registerLangHandler(createSimpleLexer([],[[PR_STRING,/^[\s\S]+/]]),['regex']);registerLangHandler(sourceDecorator({'keywords':CONFIG_KEYWORDS,'literals':CONFIG_OPTIONS,'strings':CONFIG_ENVS,'hashComments':true,'cStyleComments':false,'multiLineStrings':false,'regexLiterals':false,'httpdComments':true}),['config']);function applyDecorator(job){var opt_langExtension=job.langExtension;try{var sourceAndSpans=extractSourceSpans(job.sourceNode,job.pre);var source=sourceAndSpans.sourceCode;job.sourceCode=source;job.spans=sourceAndSpans.spans;job.basePos=0;langHandlerForExtension(opt_langExtension,source)(job);recombineTagsAndDecorations(job);}catch(e){if(win['console']){console['log'](e&&e['stack']?e['stack']:e);}}}
4216+function prettyPrintOne(sourceCodeHtml,opt_langExtension,opt_numberLines){var container=document.createElement('pre');container.innerHTML=sourceCodeHtml;if(opt_numberLines){numberLines(container,opt_numberLines,true);}
4217+var job={langExtension:opt_langExtension,numberLines:opt_numberLines,sourceNode:container,pre:1};applyDecorator(job);return container.innerHTML;}
4218+function prettyPrint(opt_whenDone){function byTagName(tn){return document.getElementsByTagName(tn);}
4219+var codeSegments=[byTagName('pre'),byTagName('code'),byTagName('xmp')];var elements=[];for(var i=0;i<codeSegments.length;++i){for(var j=0,n=codeSegments[i].length;j<n;++j){elements.push(codeSegments[i][j]);}}
4220+codeSegments=null;var clock=Date;if(!clock['now']){clock={'now':function(){return+(new Date);}};}
4221+var k=0;var prettyPrintingJob;var langExtensionRe=/\blang(?:uage)?-([\w.]+)(?!\S)/;var prettyPrintRe=/\bprettyprint\b/;var prettyPrintedRe=/\bprettyprinted\b/;var preformattedTagNameRe=/pre|xmp/i;var codeRe=/^code$/i;var preCodeXmpRe=/^(?:pre|code|xmp)$/i;function doWork(){var endTime=(win['PR_SHOULD_USE_CONTINUATION']?clock['now']()+250:Infinity);for(;k<elements.length&&clock['now']()<endTime;k++){var cs=elements[k];var className=cs.className;if(prettyPrintRe.test(className)&&!prettyPrintedRe.test(className)){var nested=false;for(var p=cs.parentNode;p;p=p.parentNode){var tn=p.tagName;if(preCodeXmpRe.test(tn)&&p.className&&prettyPrintRe.test(p.className)){nested=true;break;}}
4222+if(!nested){cs.className+=' prettyprinted';var langExtension=className.match(langExtensionRe);var wrapper;if(!langExtension&&(wrapper=childContentWrapper(cs))&&codeRe.test(wrapper.tagName)){langExtension=wrapper.className.match(langExtensionRe);}
4223+if(langExtension){langExtension=langExtension[1];}
4224+var preformatted;if(preformattedTagNameRe.test(cs.tagName)){preformatted=1;}else{var currentStyle=cs['currentStyle'];var whitespace=(currentStyle?currentStyle['whiteSpace']:(document.defaultView&&document.defaultView.getComputedStyle)?document.defaultView.getComputedStyle(cs,null).getPropertyValue('white-space'):0);preformatted=whitespace&&'pre'===whitespace.substring(0,3);}
4225+var lineNums=cs.className.match(/\blinenums\b(?::(\d+))?/);lineNums=lineNums?lineNums[1]&&lineNums[1].length?+lineNums[1]:true:false;if(lineNums){numberLines(cs,lineNums,preformatted);}
4226+prettyPrintingJob={langExtension:langExtension,sourceNode:cs,numberLines:lineNums,pre:preformatted};applyDecorator(prettyPrintingJob);}}}
4227+if(k<elements.length){setTimeout(doWork,250);}else if(opt_whenDone){opt_whenDone();}}
4228+doWork();}
4229+var PR=win['PR']={'createSimpleLexer':createSimpleLexer,'registerLangHandler':registerLangHandler,'sourceDecorator':sourceDecorator,'PR_ATTRIB_NAME':PR_ATTRIB_NAME,'PR_ATTRIB_VALUE':PR_ATTRIB_VALUE,'PR_COMMENT':PR_COMMENT,'PR_DECLARATION':PR_DECLARATION,'PR_KEYWORD':PR_KEYWORD,'PR_LITERAL':PR_LITERAL,'PR_NOCODE':PR_NOCODE,'PR_PLAIN':PR_PLAIN,'PR_PUNCTUATION':PR_PUNCTUATION,'PR_SOURCE':PR_SOURCE,'PR_STRING':PR_STRING,'PR_TAG':PR_TAG,'PR_TYPE':PR_TYPE,'prettyPrintOne':win['prettyPrintOne']=prettyPrintOne,'prettyPrint':win['prettyPrint']=prettyPrint};PR['registerLangHandler'](PR['createSimpleLexer']([[PR['PR_PLAIN'],/^[\t\n\r \xA0]+/,null,'\t\n\r \xA0'],[PR['PR_STRING'],/^(?:\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)|\'(?:[^\'\\]|\\[\s\S])*(?:\'|$))/,null,'"\'']],[[PR['PR_COMMENT'],/^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/],[PR['PR_TYPE'],/^nil|false|true/],[PR['PR_STRING'],/^\[(=*)\[[\s\S]*?(?:\]\1\]|$)/],[PR['PR_KEYWORD'],/^(?:and|break|do|else|elseif|end|for|function|if|in|local|not|or|repeat|require|return|then|until|while)\b/,null],[PR['PR_LITERAL'],/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],[PR['PR_PLAIN'],/^[a-z_]\w*/i],[PR['PR_PUNCTUATION'],/^[^\w\t\n\r \xA0][^\w\t\n\r \xA0\"\'\-\+=]*/]]),['lua']);if(typeof define==="function"&&define['amd']){define("google-code-prettify",[],function(){return PR;});}})();
4230\ No newline at end of file
4231diff --git a/docs/manual/style/sitemap.dtd b/docs/manual/style/sitemap.dtd
4232new file mode 100644
4233index 0000000..829f326
4234--- /dev/null
4235+++ b/docs/manual/style/sitemap.dtd
4236@@ -0,0 +1,42 @@
4237+<?xml version='1.0' encoding='UTF-8' ?>
4238+
4239+<!--
4240+ Licensed to the Apache Software Foundation (ASF) under one or more
4241+ contributor license agreements. See the NOTICE file distributed with
4242+ this work for additional information regarding copyright ownership.
4243+ The ASF licenses this file to You under the Apache License, Version 2.0
4244+ (the "License"); you may not use this file except in compliance with
4245+ the License. You may obtain a copy of the License at
4246+
4247+ http://www.apache.org/licenses/LICENSE-2.0
4248+
4249+ Unless required by applicable law or agreed to in writing, software
4250+ distributed under the License is distributed on an "AS IS" BASIS,
4251+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4252+ See the License for the specific language governing permissions and
4253+ limitations under the License.
4254+-->
4255+
4256+<!ENTITY % common SYSTEM "common.dtd">
4257+%common;
4258+
4259+<!-- <sitemap> is the root element -->
4260+<!ELEMENT sitemap (title, summary?, seealso*, category*)>
4261+
4262+<!ATTLIST sitemap metafile CDATA #REQUIRED
4263+ upgrade CDATA #IMPLIED
4264+>
4265+
4266+<!-- <indexpage> is another root element -->
4267+<!ELEMENT indexpage (parentdocument, title, category*)>
4268+
4269+<!ATTLIST indexpage metafile CDATA #REQUIRED
4270+ upgrade CDATA #IMPLIED
4271+>
4272+
4273+<!ELEMENT category (title, page*)>
4274+<!ATTLIST category id ID #IMPLIED>
4275+
4276+<!ELEMENT page (#PCDATA)>
4277+<!ATTLIST page href CDATA #IMPLIED
4278+ separate (yes | no) "no" >
4279diff --git a/docs/manual/style/version.ent b/docs/manual/style/version.ent
4280new file mode 100644
4281index 0000000..786d470
4282--- /dev/null
4283+++ b/docs/manual/style/version.ent
4284@@ -0,0 +1,24 @@
4285+<?xml version='1.0' encoding='UTF-8' ?>
4286+
4287+<!--
4288+ Licensed to the Apache Software Foundation (ASF) under one or more
4289+ contributor license agreements. See the NOTICE file distributed with
4290+ this work for additional information regarding copyright ownership.
4291+ The ASF licenses this file to You under the Apache License, Version 2.0
4292+ (the "License"); you may not use this file except in compliance with
4293+ the License. You may obtain a copy of the License at
4294+
4295+ http://www.apache.org/licenses/LICENSE-2.0
4296+
4297+ Unless required by applicable law or agreed to in writing, software
4298+ distributed under the License is distributed on an "AS IS" BASIS,
4299+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4300+ See the License for the specific language governing permissions and
4301+ limitations under the License.
4302+-->
4303+
4304+<!ENTITY httpd.major "2">
4305+<!ENTITY httpd.minor "4">
4306+<!ENTITY httpd.patch "34">
4307+
4308+<!ENTITY httpd.docs "2.4">
4309diff --git a/docs/manual/suexec.html b/docs/manual/suexec.html
4310new file mode 100644
4311index 0000000..c4cc65b
4312--- /dev/null
4313+++ b/docs/manual/suexec.html
4314@@ -0,0 +1,21 @@
4315+# GENERATED FROM XML -- DO NOT EDIT
4316+
4317+URI: suexec.html.en
4318+Content-Language: en
4319+Content-type: text/html; charset=ISO-8859-1
4320+
4321+URI: suexec.html.fr
4322+Content-Language: fr
4323+Content-type: text/html; charset=ISO-8859-1
4324+
4325+URI: suexec.html.ja.utf8
4326+Content-Language: ja
4327+Content-type: text/html; charset=UTF-8
4328+
4329+URI: suexec.html.ko.euc-kr
4330+Content-Language: ko
4331+Content-type: text/html; charset=EUC-KR
4332+
4333+URI: suexec.html.tr.utf8
4334+Content-Language: tr
4335+Content-type: text/html; charset=UTF-8
4336diff --git a/docs/manual/suexec.html.en b/docs/manual/suexec.html.en
4337new file mode 100644
4338index 0000000..526e793
4339--- /dev/null
4340+++ b/docs/manual/suexec.html.en
4341@@ -0,0 +1,643 @@
4342+<?xml version="1.0" encoding="ISO-8859-1"?>
4343+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4344+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
4345+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
4346+<!--
4347+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4348+ This file is generated from xml source: DO NOT EDIT
4349+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4350+ -->
4351+<title>suEXEC Support - Apache HTTP Server Version 2.4</title>
4352+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
4353+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
4354+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
4355+<script src="./style/scripts/prettify.min.js" type="text/javascript">
4356+</script>
4357+
4358+<link href="./images/favicon.ico" rel="shortcut icon" /></head>
4359+<body id="manual-page"><div id="page-header">
4360+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
4361+<p class="apache">Apache HTTP Server Version 2.4</p>
4362+<img alt="" src="./images/feather.png" /></div>
4363+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
4364+<div id="path">
4365+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1>suEXEC Support</h1>
4366+<div class="toplang">
4367+<p><span>Available Languages: </span><a href="./en/suexec.html" title="English">&nbsp;en&nbsp;</a> |
4368+<a href="./fr/suexec.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a> |
4369+<a href="./ja/suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
4370+<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
4371+<a href="./tr/suexec.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</a></p>
4372+</div>
4373+
4374+ <p>The <strong>suEXEC</strong> feature provides users of the Apache
4375+ HTTP Server the ability
4376+ to run <strong>CGI</strong> and <strong>SSI</strong> programs
4377+ under user IDs different from the user ID of the calling
4378+ web server. Normally, when a CGI or SSI program executes, it
4379+ runs as the same user who is running the web server.</p>
4380+
4381+ <p>Used properly, this feature can reduce
4382+ considerably the security risks involved with allowing users to
4383+ develop and run private CGI or SSI programs. However, if suEXEC
4384+ is improperly configured, it can cause any number of problems
4385+ and possibly create new holes in your computer's security. If
4386+ you aren't familiar with managing <em>setuid root</em> programs
4387+ and the security issues they present, we highly recommend that
4388+ you not consider using suEXEC.</p>
4389+ </div>
4390+<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#before">Before we begin</a></li>
4391+<li><img alt="" src="./images/down.gif" /> <a href="#model">suEXEC Security Model</a></li>
4392+<li><img alt="" src="./images/down.gif" /> <a href="#install">Configuring &amp; Installing
4393+ suEXEC</a></li>
4394+<li><img alt="" src="./images/down.gif" /> <a href="#enable">Enabling &amp; Disabling
4395+ suEXEC</a></li>
4396+<li><img alt="" src="./images/down.gif" /> <a href="#usage">Using suEXEC</a></li>
4397+<li><img alt="" src="./images/down.gif" /> <a href="#debug">Debugging suEXEC</a></li>
4398+<li><img alt="" src="./images/down.gif" /> <a href="#jabberwock">Beware the Jabberwock:
4399+ Warnings &amp; Examples</a></li>
4400+</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
4401+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
4402+<div class="section">
4403+<h2><a name="before" id="before">Before we begin</a></h2>
4404+
4405+ <p>Before jumping head-first into this document,
4406+ you should be aware that certain assumptions are made about you and
4407+ the environment in which you will be using suexec.</p>
4408+
4409+ <p>First, it is assumed that you are using a UNIX
4410+ derivative operating system that is capable of
4411+ <strong>setuid</strong> and <strong>setgid</strong> operations.
4412+ All command examples are given in this regard. Other platforms,
4413+ if they are capable of supporting suEXEC, may differ in their
4414+ configuration.</p>
4415+
4416+ <p>Second, it is assumed you are familiar with
4417+ some basic concepts of your computer's security and its
4418+ administration. This involves an understanding of
4419+ <strong>setuid/setgid</strong> operations and the various
4420+ effects they may have on your system and its level of
4421+ security.</p>
4422+
4423+ <p>Third, it is assumed that you are using an
4424+ <strong>unmodified</strong> version of suEXEC code. All code
4425+ for suEXEC has been carefully scrutinized and tested by the
4426+ developers as well as numerous beta testers. Every precaution
4427+ has been taken to ensure a simple yet solidly safe base of
4428+ code. Altering this code can cause unexpected problems and new
4429+ security risks. It is <strong>highly</strong> recommended you
4430+ not alter the suEXEC code unless you are well versed in the
4431+ particulars of security programming and are willing to share
4432+ your work with the Apache HTTP Server development team for consideration.</p>
4433+
4434+ <p>Fourth, and last, it has been the decision of
4435+ the Apache HTTP Server development team to <strong>NOT</strong> make suEXEC part of
4436+ the default installation of Apache httpd. To this end, suEXEC
4437+ configuration requires of the administrator careful attention
4438+ to details. After due consideration has been given to the
4439+ various settings for suEXEC, the administrator may install
4440+ suEXEC through normal installation methods. The values for
4441+ these settings need to be carefully determined and specified by
4442+ the administrator to properly maintain system security during
4443+ the use of suEXEC functionality. It is through this detailed
4444+ process that we hope to limit suEXEC
4445+ installation only to those who are careful and determined
4446+ enough to use it.</p>
4447+
4448+ <p>Still with us? Yes? Good. Let's move on!</p>
4449+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
4450+<div class="section">
4451+<h2><a name="model" id="model">suEXEC Security Model</a></h2>
4452+
4453+ <p>Before we begin configuring and installing
4454+ suEXEC, we will first discuss the security model you are about
4455+ to implement. By doing so, you may better understand what
4456+ exactly is going on inside suEXEC and what precautions are
4457+ taken to ensure your system's security.</p>
4458+
4459+ <p><strong>suEXEC</strong> is based on a setuid
4460+ "wrapper" program that is called by the main Apache HTTP Server.
4461+ This wrapper is called when an HTTP request is made for a CGI
4462+ or SSI program that the administrator has designated to run as
4463+ a userid other than that of the main server. When such a
4464+ request is made, Apache httpd provides the suEXEC wrapper with the
4465+ program's name and the user and group IDs under which the
4466+ program is to execute.</p>
4467+
4468+ <p>The wrapper then employs the following process
4469+ to determine success or failure -- if any one of these
4470+ conditions fail, the program logs the failure and exits with an
4471+ error, otherwise it will continue:</p>
4472+
4473+ <ol>
4474+ <li>
4475+ <strong>Is the user executing this wrapper a valid user of
4476+ this system?</strong>
4477+
4478+ <p class="indent">
4479+ This is to ensure that the user executing the wrapper is
4480+ truly a user of the system.
4481+ </p>
4482+ </li>
4483+
4484+ <li>
4485+ <strong>Was the wrapper called with the proper number of
4486+ arguments?</strong>
4487+
4488+ <p class="indent">
4489+ The wrapper will only execute if it is given the proper
4490+ number of arguments. The proper argument format is known
4491+ to the Apache HTTP Server. If the wrapper is not receiving
4492+ the proper number of arguments, it is either being
4493+ hacked, or there is something wrong with the suEXEC
4494+ portion of your Apache httpd binary.
4495+ </p>
4496+ </li>
4497+
4498+ <li>
4499+ <strong>Is this valid user allowed to run the
4500+ wrapper?</strong>
4501+
4502+ <p class="indent">
4503+ Is this user the user allowed to run this wrapper? Only
4504+ one user (the Apache user) is allowed to execute this
4505+ program.
4506+ </p>
4507+ </li>
4508+
4509+ <li>
4510+ <strong>Does the target CGI or SSI program have an unsafe
4511+ hierarchical reference?</strong>
4512+
4513+ <p class="indent">
4514+ Does the target CGI or SSI program's path contain a leading
4515+ '/' or have a '..' backreference? These are not allowed; the
4516+ target CGI/SSI program must reside within suEXEC's document
4517+ root (see <code>--with-suexec-docroot=<em>DIR</em></code>
4518+ below).
4519+ </p>
4520+ </li>
4521+
4522+ <li>
4523+ <strong>Is the target user name valid?</strong>
4524+
4525+ <p class="indent">
4526+ Does the target user exist?
4527+ </p>
4528+ </li>
4529+
4530+ <li>
4531+ <strong>Is the target group name valid?</strong>
4532+
4533+ <p class="indent">
4534+ Does the target group exist?
4535+ </p>
4536+ </li>
4537+
4538+ <li>
4539+ <strong>Is the target user <em>NOT</em> superuser?</strong>
4540+
4541+
4542+ <p class="indent">
4543+ suEXEC does not allow <code><em>root</em></code>
4544+ to execute CGI/SSI programs.
4545+ </p>
4546+ </li>
4547+
4548+ <li>
4549+ <strong>Is the target userid <em>ABOVE</em> the minimum ID
4550+ number?</strong>
4551+
4552+ <p class="indent">
4553+ The minimum user ID number is specified during
4554+ configuration. This allows you to set the lowest possible
4555+ userid that will be allowed to execute CGI/SSI programs.
4556+ This is useful to block out "system" accounts.
4557+ </p>
4558+ </li>
4559+
4560+ <li>
4561+ <strong>Is the target group <em>NOT</em> the superuser
4562+ group?</strong>
4563+
4564+ <p class="indent">
4565+ Presently, suEXEC does not allow the <code><em>root</em></code>
4566+ group to execute CGI/SSI programs.
4567+ </p>
4568+ </li>
4569+
4570+ <li>
4571+ <strong>Is the target groupid <em>ABOVE</em> the minimum ID
4572+ number?</strong>
4573+
4574+ <p class="indent">
4575+ The minimum group ID number is specified during
4576+ configuration. This allows you to set the lowest possible
4577+ groupid that will be allowed to execute CGI/SSI programs.
4578+ This is useful to block out "system" groups.
4579+ </p>
4580+ </li>
4581+
4582+ <li>
4583+ <strong>Can the wrapper successfully become the target user
4584+ and group?</strong>
4585+
4586+ <p class="indent">
4587+ Here is where the program becomes the target user and
4588+ group via setuid and setgid calls. The group access list
4589+ is also initialized with all of the groups of which the
4590+ user is a member.
4591+ </p>
4592+ </li>
4593+
4594+ <li>
4595+ <strong>Can we change directory to the one in which the target
4596+ CGI/SSI program resides?</strong>
4597+
4598+ <p class="indent">
4599+ If it doesn't exist, it can't very well contain files. If we
4600+ can't change directory to it, it might as well not exist.
4601+ </p>
4602+ </li>
4603+
4604+ <li>
4605+ <strong>Is the directory within the httpd webspace?</strong>
4606+
4607+ <p class="indent">
4608+ If the request is for a regular portion of the server, is
4609+ the requested directory within suEXEC's document root? If
4610+ the request is for a <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code>, is the requested directory
4611+ within the directory configured as suEXEC's userdir (see
4612+ <a href="#install">suEXEC's configuration options</a>)?
4613+ </p>
4614+ </li>
4615+
4616+ <li>
4617+ <strong>Is the directory <em>NOT</em> writable by anyone
4618+ else?</strong>
4619+
4620+ <p class="indent">
4621+ We don't want to open up the directory to others; only
4622+ the owner user may be able to alter this directories
4623+ contents.
4624+ </p>
4625+ </li>
4626+
4627+ <li>
4628+ <strong>Does the target CGI/SSI program exist?</strong>
4629+
4630+ <p class="indent">
4631+ If it doesn't exists, it can't very well be executed.
4632+ </p>
4633+ </li>
4634+
4635+ <li>
4636+ <strong>Is the target CGI/SSI program <em>NOT</em> writable
4637+ by anyone else?</strong>
4638+
4639+ <p class="indent">
4640+ We don't want to give anyone other than the owner the
4641+ ability to change the CGI/SSI program.
4642+ </p>
4643+ </li>
4644+
4645+ <li>
4646+ <strong>Is the target CGI/SSI program <em>NOT</em> setuid or
4647+ setgid?</strong>
4648+
4649+ <p class="indent">
4650+ We do not want to execute programs that will then change
4651+ our UID/GID again.
4652+ </p>
4653+ </li>
4654+
4655+ <li>
4656+ <strong>Is the target user/group the same as the program's
4657+ user/group?</strong>
4658+
4659+ <p class="indent">
4660+ Is the user the owner of the file?
4661+ </p>
4662+ </li>
4663+
4664+ <li>
4665+ <strong>Can we successfully clean the process environment
4666+ to ensure safe operations?</strong>
4667+
4668+ <p class="indent">
4669+ suEXEC cleans the process' environment by establishing a
4670+ safe execution PATH (defined during configuration), as
4671+ well as only passing through those variables whose names
4672+ are listed in the safe environment list (also created
4673+ during configuration).
4674+ </p>
4675+ </li>
4676+
4677+ <li>
4678+ <strong>Can we successfully become the target CGI/SSI program
4679+ and execute?</strong>
4680+
4681+ <p class="indent">
4682+ Here is where suEXEC ends and the target CGI/SSI program begins.
4683+ </p>
4684+ </li>
4685+ </ol>
4686+
4687+ <p>This is the standard operation of the
4688+ suEXEC wrapper's security model. It is somewhat stringent and
4689+ can impose new limitations and guidelines for CGI/SSI design,
4690+ but it was developed carefully step-by-step with security in
4691+ mind.</p>
4692+
4693+ <p>For more information as to how this security
4694+ model can limit your possibilities in regards to server
4695+ configuration, as well as what security risks can be avoided
4696+ with a proper suEXEC setup, see the <a href="#jabberwock">"Beware the Jabberwock"</a> section of this
4697+ document.</p>
4698+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
4699+<div class="section">
4700+<h2><a name="install" id="install">Configuring &amp; Installing
4701+ suEXEC</a></h2>
4702+
4703+ <p>Here's where we begin the fun.</p>
4704+
4705+ <p><strong>suEXEC configuration
4706+ options</strong><br />
4707+ </p>
4708+
4709+ <dl>
4710+ <dt><code>--enable-suexec</code></dt>
4711+
4712+ <dd>This option enables the suEXEC feature which is never
4713+ installed or activated by default. At least one
4714+ <code>--with-suexec-xxxxx</code> option has to be provided
4715+ together with the <code>--enable-suexec</code> option to let
4716+ APACI accept your request for using the suEXEC feature.</dd>
4717+
4718+ <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
4719+
4720+ <dd>The path to the <code>suexec</code> binary must be hard-coded
4721+ in the server for security reasons. Use this option to override
4722+ the default path. <em>e.g.</em>
4723+ <code>--with-suexec-bin=/usr/sbin/suexec</code></dd>
4724+
4725+ <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
4726+
4727+ <dd>The <a href="mod/mpm_common.html#user">username</a> under which
4728+ httpd normally runs. This is the only user allowed to
4729+ execute the suEXEC wrapper.</dd>
4730+
4731+ <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
4732+
4733+ <dd>Define to be the subdirectory under users' home
4734+ directories where suEXEC access should be allowed. All
4735+ executables under this directory will be executable by suEXEC
4736+ as the user so they should be "safe" programs. If you are
4737+ using a "simple" <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code>
4738+ directive (ie. one without a "*" in it) this should be set to the same
4739+ value. suEXEC will not work properly in cases where the <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> directive points to
4740+ a location that is not the same as the user's home directory
4741+ as referenced in the <code>passwd</code> file. Default value is
4742+ "<code>public_html</code>".<br />
4743+ If you have virtual hosts with a different <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> for each,
4744+ you will need to define them to all reside in one parent
4745+ directory; then name that parent directory here. <strong>If
4746+ this is not defined properly, "~userdir" cgi requests will
4747+ not work!</strong></dd>
4748+
4749+ <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
4750+
4751+ <dd>Define as the DocumentRoot set for httpd. This will be
4752+ the only hierarchy (aside from <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code>s) that can be used for suEXEC behavior. The
4753+ default directory is the <code>--datadir</code> value with the suffix
4754+ "<code>/htdocs</code>", <em>e.g.</em> if you configure with
4755+ "<code>--datadir=/home/apache</code>" the directory
4756+ "<code>/home/apache/htdocs</code>" is used as document root for the
4757+ suEXEC wrapper.</dd>
4758+
4759+ <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
4760+
4761+ <dd>Define this as the lowest UID allowed to be a target user
4762+ for suEXEC. For most systems, 500 or 100 is common. Default
4763+ value is 100.</dd>
4764+
4765+ <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
4766+
4767+ <dd>Define this as the lowest GID allowed to be a target
4768+ group for suEXEC. For most systems, 100 is common and
4769+ therefore used as default value.</dd>
4770+
4771+ <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
4772+
4773+ <dd>This defines the filename to which all suEXEC
4774+ transactions and errors are logged (useful for auditing and
4775+ debugging purposes). By default the logfile is named
4776+ "<code>suexec_log</code>" and located in your standard logfile
4777+ directory (<code>--logfiledir</code>).</dd>
4778+
4779+ <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
4780+
4781+ <dd>Define a safe PATH environment to pass to CGI
4782+ executables. Default value is
4783+ "<code>/usr/local/bin:/usr/bin:/bin</code>".</dd>
4784+ </dl>
4785+
4786+ <h3>Compiling and installing the suEXEC wrapper</h3>
4787+
4788+
4789+ <p>If you have enabled the suEXEC feature with the
4790+ <code>--enable-suexec</code> option the <code>suexec</code> binary
4791+ (together with httpd itself) is automatically built if you execute
4792+ the <code>make</code> command.</p>
4793+
4794+ <p>After all components have been built you can execute the
4795+ command <code>make install</code> to install them. The binary image
4796+ <code>suexec</code> is installed in the directory defined by the
4797+ <code>--sbindir</code> option. The default location is
4798+ "/usr/local/apache2/bin/suexec".</p>
4799+
4800+ <p>Please note that you need <strong><em>root
4801+ privileges</em></strong> for the installation step. In order
4802+ for the wrapper to set the user ID, it must be installed as
4803+ owner <code><em>root</em></code> and must have the setuserid
4804+ execution bit set for file modes.</p>
4805+
4806+
4807+ <h3>Setting paranoid permissions</h3>
4808+
4809+
4810+ <p>Although the suEXEC wrapper will check to ensure that its
4811+ caller is the correct user as specified with the
4812+ <code>--with-suexec-caller</code> <code class="program"><a href="./programs/configure.html">configure</a></code>
4813+ option, there is
4814+ always the possibility that a system or library call suEXEC uses
4815+ before this check may be exploitable on your system. To counter
4816+ this, and because it is best-practise in general, you should use
4817+ filesystem permissions to ensure that only the group httpd
4818+ runs as may execute suEXEC.</p>
4819+
4820+ <p>If for example, your web server is configured to run as:</p>
4821+
4822+ <pre class="prettyprint lang-config">User www
4823+Group webgroup</pre>
4824+
4825+
4826+ <p>and <code class="program"><a href="./programs/suexec.html">suexec</a></code> is installed at
4827+ "/usr/local/apache2/bin/suexec", you should run:</p>
4828+
4829+ <div class="example"><p><code>
4830+ chgrp webgroup /usr/local/apache2/bin/suexec<br />
4831+ chmod 4750 /usr/local/apache2/bin/suexec<br />
4832+ </code></p></div>
4833+
4834+ <p>This will ensure that only the group httpd runs as can even
4835+ execute the suEXEC wrapper.</p>
4836+
4837+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
4838+<div class="section">
4839+<h2><a name="enable" id="enable">Enabling &amp; Disabling
4840+ suEXEC</a></h2>
4841+
4842+ <p>Upon startup of httpd, it looks for the file
4843+ <code class="program"><a href="./programs/suexec.html">suexec</a></code> in the directory defined by the
4844+ <code>--sbindir</code> option (default is
4845+ "/usr/local/apache/sbin/suexec"). If httpd finds a properly
4846+ configured suEXEC wrapper, it will print the following message
4847+ to the error log:</p>
4848+
4849+<div class="example"><p><code>
4850+ [notice] suEXEC mechanism enabled (wrapper: <var>/path/to/suexec</var>)
4851+</code></p></div>
4852+
4853+ <p>If you don't see this message at server startup, the server is
4854+ most likely not finding the wrapper program where it expects
4855+ it, or the executable is not installed <em>setuid root</em>.</p>
4856+
4857+ <p>If you want to enable the suEXEC mechanism for the first time
4858+ and an Apache HTTP Server is already running you must kill and
4859+ restart httpd. Restarting it with a simple HUP or USR1 signal
4860+ will not be enough. </p>
4861+ <p>If you want to disable suEXEC you should kill and restart
4862+ httpd after you have removed the <code class="program"><a href="./programs/suexec.html">suexec</a></code> file.</p>
4863+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
4864+<div class="section">
4865+<h2><a name="usage" id="usage">Using suEXEC</a></h2>
4866+
4867+ <p>Requests for CGI programs will call the suEXEC wrapper only if
4868+ they are for a virtual host containing a <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> directive or if
4869+ they are processed by <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>.</p>
4870+
4871+ <p><strong>Virtual Hosts:</strong><br /> One way to use the suEXEC
4872+ wrapper is through the <code class="directive"><a href="./mod/mod_suexec.html#suexecusergroup">SuexecUserGroup</a></code> directive in
4873+ <code class="directive"><a href="./mod/core.html#virtualhost">VirtualHost</a></code> definitions. By
4874+ setting this directive to values different from the main server
4875+ user ID, all requests for CGI resources will be executed as the
4876+ <em>User</em> and <em>Group</em> defined for that <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>. If this
4877+ directive is not specified for a <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code> then the main server userid
4878+ is assumed.</p>
4879+
4880+ <p><strong>User directories:</strong><br /> Requests that are
4881+ processed by <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code> will call the suEXEC
4882+ wrapper to execute CGI programs under the userid of the requested
4883+ user directory. The only requirement needed for this feature to
4884+ work is for CGI execution to be enabled for the user and that the
4885+ script must meet the scrutiny of the <a href="#model">security
4886+ checks</a> above. See also the
4887+ <code>--with-suexec-userdir</code> <a href="#install">compile
4888+ time option</a>.</p> </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
4889+<div class="section">
4890+<h2><a name="debug" id="debug">Debugging suEXEC</a></h2>
4891+
4892+ <p>The suEXEC wrapper will write log information
4893+ to the file defined with the <code>--with-suexec-logfile</code>
4894+ option as indicated above. If you feel you have configured and
4895+ installed the wrapper properly, have a look at this log and the
4896+ error_log for the server to see where you may have gone astray.</p>
4897+
4898+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
4899+<div class="section">
4900+<h2><a name="jabberwock" id="jabberwock">Beware the Jabberwock:
4901+ Warnings &amp; Examples</a></h2>
4902+
4903+ <p><strong>NOTE!</strong> This section may not be
4904+ complete. For the latest revision of this section of the
4905+ documentation, see the <a href="http://httpd.apache.org/docs/2.4/suexec.html">Online
4906+ Documentation</a> version.</p>
4907+
4908+ <p>There are a few points of interest regarding
4909+ the wrapper that can cause limitations on server setup. Please
4910+ review these before submitting any "bugs" regarding suEXEC.</p>
4911+
4912+ <ul>
4913+ <li><strong>suEXEC Points Of Interest</strong></li>
4914+
4915+ <li>
4916+ Hierarchy limitations
4917+
4918+ <p class="indent">
4919+ For security and efficiency reasons, all suEXEC requests
4920+ must remain within either a top-level document root for
4921+ virtual host requests, or one top-level personal document
4922+ root for userdir requests. For example, if you have four
4923+ VirtualHosts configured, you would need to structure all
4924+ of your VHosts' document roots off of one main httpd
4925+ document hierarchy to take advantage of suEXEC for
4926+ VirtualHosts. (Example forthcoming.)
4927+ </p>
4928+ </li>
4929+
4930+ <li>
4931+ suEXEC's PATH environment variable
4932+
4933+ <p class="indent">
4934+ This can be a dangerous thing to change. Make certain
4935+ every path you include in this define is a
4936+ <strong>trusted</strong> directory. You don't want to
4937+ open people up to having someone from across the world
4938+ running a trojan horse on them.
4939+ </p>
4940+ </li>
4941+
4942+ <li>
4943+ Altering the suEXEC code
4944+
4945+ <p class="indent">
4946+ Again, this can cause <strong>Big Trouble</strong> if you
4947+ try this without knowing what you are doing. Stay away
4948+ from it if at all possible.
4949+ </p>
4950+ </li>
4951+ </ul>
4952+
4953+</div></div>
4954+<div class="bottomlang">
4955+<p><span>Available Languages: </span><a href="./en/suexec.html" title="English">&nbsp;en&nbsp;</a> |
4956+<a href="./fr/suexec.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a> |
4957+<a href="./ja/suexec.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
4958+<a href="./ko/suexec.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
4959+<a href="./tr/suexec.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</a></p>
4960+</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
4961+<script type="text/javascript"><!--//--><![CDATA[//><!--
4962+var comments_shortname = 'httpd';
4963+var comments_identifier = 'http://httpd.apache.org/docs/2.4/suexec.html';
4964+(function(w, d) {
4965+ if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
4966+ d.write('<div id="comments_thread"><\/div>');
4967+ var s = d.createElement('script');
4968+ s.type = 'text/javascript';
4969+ s.async = true;
4970+ s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
4971+ (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
4972+ }
4973+ else {
4974+ d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
4975+ }
4976+})(window, document);
4977+//--><!]]></script></div><div id="footer">
4978+<p class="apache">Copyright 2018 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
4979+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
4980+if (typeof(prettyPrint) !== 'undefined') {
4981+ prettyPrint();
4982+}
4983+//--><!]]></script>
4984+</body></html>
4985\ No newline at end of file
4986diff --git a/docs/manual/suexec.html.fr b/docs/manual/suexec.html.fr
4987new file mode 100644
4988index 0000000..97e7a37
4989--- /dev/null
4990+++ b/docs/manual/suexec.html.fr
4991@@ -0,0 +1,689 @@
4992+<?xml version="1.0" encoding="ISO-8859-1"?>
4993+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4994+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
4995+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
4996+<!--
4997+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4998+ This file is generated from xml source: DO NOT EDIT
4999+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5000+ -->
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches