Merge ~nacc/ubuntu/+source/apache2:lp1702582 into ~usd-import-team/ubuntu/+source/apache2:debian/sid

Proposed by Nish Aravamudan on 2017-07-07
Status: Superseded
Proposed branch: ~nacc/ubuntu/+source/apache2:lp1702582
Merge into: ~usd-import-team/ubuntu/+source/apache2:debian/sid
Diff against target: 418927 lines (+410177/-14)
1373 files modified
debian/apache2-bin.install (+1/-0)
debian/apache2-systemd.conf (+3/-0)
debian/apache2-utils.ufw.profile (+14/-0)
debian/apache2.dirs (+1/-0)
debian/apache2.install (+2/-0)
debian/apache2.postrm (+1/-0)
debian/apache2.py (+48/-0)
debian/changelog (+1169/-0)
debian/control (+3/-2)
debian/index.html (+19/-12)
debian/patches/086_svn_cross_compiles (+118/-0)
debian/patches/series (+3/-0)
debian/source/include-binaries (+1/-0)
docs/manual/style/latex/atbeginend.sty (+80/-0)
docs/manual/style/manualpage.dtd (+29/-0)
docs/manual/style/modulesynopsis.dtd (+77/-0)
docs/manual/style/scripts/MINIFY (+5/-0)
docs/manual/style/scripts/prettify.js (+1622/-0)
docs/manual/style/scripts/prettify.min.js (+123/-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 (+530/-0)
docs/manual/upgrading.html.fr (+527/-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 (+337/-0)
docs/manual/vhosts/mass.html.fr (+352/-0)
docs/manual/vhosts/mass.html.ko.euc-kr (+453/-0)
docs/manual/vhosts/mass.html.tr.utf8 (+324/-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)
emacs-style (+12/-0)
httpd.dep (+68/-0)
httpd.dsp (+111/-0)
httpd.mak (+344/-0)
httpd.spec (+505/-0)
include/.indent.pro (+54/-0)
include/ap_compat.h (+30/-0)
include/ap_config.h (+206/-0)
include/ap_config_auto.h.in (+297/-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 (+536/-0)
include/ap_mpm.h (+235/-0)
include/ap_provider.h (+100/-0)
include/ap_regex.h (+248/-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 (+1379/-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 (+998/-0)
include/http_request.h (+630/-0)
include/http_vhost.h (+119/-0)
include/httpd.h (+2403/-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 (+244/-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 (+813/-0)
libhttpd.mak (+1325/-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 (+374/-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 (+2106/-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 (+1954/-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 (+1164/-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 (+403/-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 (+389/-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 (+426/-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 (+788/-0)
modules/cache/cache_storage.h (+76/-0)
modules/cache/cache_util.c (+1326/-0)
modules/cache/cache_util.h (+335/-0)
modules/cache/config.m4 (+142/-0)
modules/cache/mod_cache.c (+2714/-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 (+1541/-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 (+955/-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 (+719/-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 (+4953/-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 (+250/-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 (+145/-0)
modules/filters/libsed.h (+172/-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 (+949/-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 (+765/-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 (+4236/-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 (+1281/-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 (+356/-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 (+730/-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 (+631/-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 (+2340/-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 (+1286/-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 (+1985/-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 (+1868/-0)
modules/http/http_protocol.c (+1694/-0)
modules/http/http_request.c (+836/-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 (+397/-0)
modules/http2/NWGNUproxyht2 (+288/-0)
modules/http2/README.h2 (+70/-0)
modules/http2/config2.m4 (+228/-0)
modules/http2/h2.h (+147/-0)
modules/http2/h2_alt_svc.c (+130/-0)
modules/http2/h2_alt_svc.h (+39/-0)
modules/http2/h2_bucket_beam.c (+1149/-0)
modules/http2/h2_bucket_beam.h (+379/-0)
modules/http2/h2_bucket_eoc.c (+110/-0)
modules/http2/h2_bucket_eoc.h (+32/-0)
modules/http2/h2_bucket_eos.c (+111/-0)
modules/http2/h2_bucket_eos.h (+31/-0)
modules/http2/h2_config.c (+684/-0)
modules/http2/h2_config.h (+105/-0)
modules/http2/h2_conn.c (+324/-0)
modules/http2/h2_conn.h (+75/-0)
modules/http2/h2_conn_io.c (+431/-0)
modules/http2/h2_conn_io.h (+76/-0)
modules/http2/h2_ctx.c (+120/-0)
modules/http2/h2_ctx.h (+77/-0)
modules/http2/h2_filter.c (+531/-0)
modules/http2/h2_filter.h (+77/-0)
modules/http2/h2_from_h1.c (+839/-0)
modules/http2/h2_from_h1.h (+49/-0)
modules/http2/h2_h2.c (+764/-0)
modules/http2/h2_h2.h (+78/-0)
modules/http2/h2_headers.c (+161/-0)
modules/http2/h2_headers.h (+70/-0)
modules/http2/h2_mplx.c (+1419/-0)
modules/http2/h2_mplx.h (+356/-0)
modules/http2/h2_ngn_shed.c (+380/-0)
modules/http2/h2_ngn_shed.h (+78/-0)
modules/http2/h2_private.h (+27/-0)
modules/http2/h2_proxy_session.c (+1546/-0)
modules/http2/h2_proxy_session.h (+117/-0)
modules/http2/h2_proxy_util.c (+1055/-0)
modules/http2/h2_proxy_util.h (+204/-0)
modules/http2/h2_push.c (+1060/-0)
modules/http2/h2_push.h (+118/-0)
modules/http2/h2_request.c (+334/-0)
modules/http2/h2_request.h (+47/-0)
modules/http2/h2_session.c (+2337/-0)
modules/http2/h2_session.h (+233/-0)
modules/http2/h2_stream.c (+810/-0)
modules/http2/h2_stream.h (+273/-0)
modules/http2/h2_switch.c (+185/-0)
modules/http2/h2_switch.h (+29/-0)
modules/http2/h2_task.c (+696/-0)
modules/http2/h2_task.h (+125/-0)
modules/http2/h2_util.c (+1436/-0)
modules/http2/h2_util.h (+412/-0)
modules/http2/h2_version.h (+40/-0)
modules/http2/h2_worker.c (+103/-0)
modules/http2/h2_worker.h (+135/-0)
modules/http2/h2_workers.c (+416/-0)
modules/http2/h2_workers.h (+120/-0)
modules/http2/mod_http2.c (+366/-0)
modules/http2/mod_http2.dep (+1551/-0)
modules/http2/mod_http2.dsp (+203/-0)
modules/http2/mod_http2.h (+95/-0)
modules/http2/mod_http2.mak (+560/-0)
modules/http2/mod_proxy_http2.c (+656/-0)
modules/http2/mod_proxy_http2.dep (+208/-0)
modules/http2/mod_proxy_http2.dsp (+119/-0)
modules/http2/mod_proxy_http2.h (+20/-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 (+3222/-0)
modules/ldap/util_ldap_cache.c (+464/-0)
modules/ldap/util_ldap_cache.h (+204/-0)
modules/ldap/util_ldap_cache_mgr.c (+882/-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 (+284/-0)
modules/lua/README (+80/-0)
modules/lua/config.m4 (+208/-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 (+100/-0)
modules/lua/lua_apr.h (+36/-0)
modules/lua/lua_config.c (+276/-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 (+2955/-0)
modules/lua/lua_request.h (+58/-0)
modules/lua/lua_vmprep.c (+532/-0)
modules/lua/lua_vmprep.h (+147/-0)
modules/lua/mod_lua.c (+2175/-0)
modules/lua/mod_lua.dep (+418/-0)
modules/lua/mod_lua.dsp (+163/-0)
modules/lua/mod_lua.h (+176/-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 (+226/-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 (+3223/-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 (+5267/-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/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 (+179/-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 (+466/-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 (+408/-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 (+160/-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 (+200/-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 (+169/-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 (+466/-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 (+76/-0)
modules/proxy/libproxy.exp (+1/-0)
modules/proxy/mod_proxy.c (+2908/-0)
modules/proxy/mod_proxy.dep (+153/-0)
modules/proxy/mod_proxy.dsp (+127/-0)
modules/proxy/mod_proxy.h (+1209/-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 (+1824/-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 (+990/-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 (+1177/-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 (+2043/-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_wstunnel.c (+376/-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 (+3864/-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 (+668/-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 (+809/-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 (+659/-0)
modules/ssl/mod_ssl.dep (+1086/-0)
modules/ssl/mod_ssl.dsp (+195/-0)
modules/ssl/mod_ssl.h (+88/-0)
modules/ssl/mod_ssl.mak (+487/-0)
modules/ssl/mod_ssl_openssl.h (+73/-0)
modules/ssl/ssl_engine_config.c (+1983/-0)
modules/ssl/ssl_engine_init.c (+1923/-0)
modules/ssl/ssl_engine_io.c (+2147/-0)
modules/ssl/ssl_engine_kernel.c (+2434/-0)
modules/ssl/ssl_engine_log.c (+238/-0)
modules/ssl/ssl_engine_mutex.c (+111/-0)
modules/ssl/ssl_engine_ocsp.c (+300/-0)
modules/ssl/ssl_engine_pphrase.c (+621/-0)
modules/ssl/ssl_engine_rand.c (+177/-0)
modules/ssl/ssl_engine_vars.c (+1237/-0)
modules/ssl/ssl_private.h (+991/-0)
modules/ssl/ssl_scache.c (+239/-0)
modules/ssl/ssl_util.c (+425/-0)
modules/ssl/ssl_util_ocsp.c (+342/-0)
modules/ssl/ssl_util_ssl.c (+505/-0)
modules/ssl/ssl_util_ssl.h (+74/-0)
modules/ssl/ssl_util_stapling.c (+866/-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 (+541/-0)
os/unix/unixd.h (+117/-0)
os/win32/BaseAddr.ref (+131/-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 (+103/-0)
server/NWGNUmakefile (+261/-0)
server/buildmark.c (+29/-0)
server/config.c (+2699/-0)
server/config.m4 (+19/-0)
server/connection.c (+228/-0)
server/core.c (+5391/-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 (+922/-0)
server/log.c (+1932/-0)
server/main.c (+815/-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 (+3699/-0)
server/mpm/event/fdqueue.c (+533/-0)
server/mpm/event/fdqueue.h (+106/-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 (+1617/-0)
server/mpm/winnt/Makefile.in (+1/-0)
server/mpm/winnt/child.c (+1268/-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/fdqueue.c (+412/-0)
server/mpm/worker/fdqueue.h (+75/-0)
server/mpm/worker/mpm_default.h (+55/-0)
server/mpm/worker/worker.c (+2530/-0)
server/mpm_common.c (+571/-0)
server/mpm_unix.c (+1079/-0)
server/protocol.c (+2305/-0)
server/provider.c (+197/-0)
server/request.c (+2485/-0)
server/scoreboard.c (+666/-0)
server/util.c (+3330/-0)
server/util_cfgtree.c (+46/-0)
server/util_charset.c (+28/-0)
server/util_cookies.c (+290/-0)
server/util_debug.c (+225/-0)
server/util_ebcdic.c (+117/-0)
server/util_expr_eval.c (+1806/-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 (+287/-0)
server/util_filter.c (+732/-0)
server/util_md5.c (+166/-0)
server/util_mutex.c (+561/-0)
server/util_pcre.c (+299/-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 (+1270/-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 (+2505/-0)
support/ab.dep (+37/-0)
support/ab.dsp (+106/-0)
support/ab.mak (+317/-0)
support/abs.dep (+37/-0)
support/abs.dsp (+117/-0)
support/abs.mak (+336/-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 (+293/-0)
support/htdigest.dep (+27/-0)
support/htdigest.dsp (+106/-0)
support/htdigest.mak (+317/-0)
support/htpasswd.c (+509/-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 (+123/-0)
support/phf_abuse_log.cgi.in (+38/-0)
support/rotatelogs.c (+731/-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 (+652/-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
Andreas Hasenack (community) 2017-07-07 Approve on 2017-07-17
Review via email: mp+327021@code.launchpad.net

This proposal has been superseded by a proposal from 2017-07-27.

To post a comment you must log in.
Nish Aravamudan (nacc) wrote :

Note that the below diff appears to be huge, but is actually incorrect.

pkg=apache2; git ubuntu clone $pkg; cd $pkg; git ubuntu remote add nacc

Will result in a repository locally that will allow for review

Andreas Hasenack (ahasenack) wrote :

libnghttp2-dev is still in universe, shouldn't it have been dropped from d/control's build-depends? In fact, that used to be our delta at least up to 2.4.25-3ubuntu3.

It was dropped in 2.4.25-3ubuntu3, then 2.4.25-4 was a debian build with CVEs, and this branch introduces 2.4.25-4ubuntu1 with no mention of keeping the drop in remaining merges.

review: Needs Information
Nish Aravamudan (nacc) wrote :

On Fri, Jul 14, 2017 at 1:53 PM, Andreas Hasenack <email address hidden> wrote:
> Review: Needs Information
>
> libnghttp2-dev is still in universe, shouldn't it have been dropped from d/control's build-depends? In fact, that used to be our delta at least up to 2.4.25-3ubuntu3.
>

No, I think you misunderstand the history a bit. 2.4.25-3ubuntu3 is
stuck in proposed specifically because of the above, because I
re-dropped the delta (it is *not* present i 2.4.25-3ubuntu3). A MIR is
filed and pending review.

> It was dropped in 2.4.25-3ubuntu3, then 2.4.25-4 was a debian build with CVEs, and this branch introduces 2.4.25-4ubuntu1 with no mention of keeping the drop in remaining merges.
>

Right, it was *dropped* in 2.4.25-3ubuntu3, which means it is no
longer part of the delta. It would not be documented in a subsequent
merge, as it the drop was removal of delta.

Andreas Hasenack (ahasenack) wrote :

Ok, I see. So this new upload's fate is to also remain stuck in proposed, since it requires libnghttp2-dev which is still in universe, rght?

For reference, the MIR: https://bugs.launchpad.net/ubuntu/+source/nghttp2/+bug/1687454

This MP looks good:
- package builds, installs, upgrades
- confirmed the remaining delta with what's mentioned in d/changelog
- http2 works over ssl:
$ nghttp -nv https://artful-apache.lxd/
[ 0.003] Connected
The negotiated protocol: h2
(...)
- server logs confirm:
10.0.100.1 - - [17/Jul/2017:13:40:29 +0000] "GET / HTTP/2.0" 200 3138 "-" "nghttp2/1.7.1"

Thanks!

review: Approve
Nish Aravamudan (nacc) wrote :

Thanks for the review, Andreas. A new version is in Debian already and I'm going to superseded this with that merge. Please re-review.

Unmerged commits

6e859d2... by Nish Aravamudan on 2017-07-05

update-maintainer

f0b4fa6... by Nish Aravamudan on 2017-07-05

reconstruct-changelog

e63c753... by Nish Aravamudan on 2017-07-05

merge-changelogs

5d78d39... by Nish Aravamudan on 2016-12-09

      + d/apache2.install: place the apache2-systemd.conf file in the
        correct location.

f3364d3... by Nish Aravamudan on 2016-12-09

    - Correct systemd-sysv-generator behavior by customizing some
      parameters:
      + d/apache2-systemd.conf: add a drop-in file to specify some
        parameters for the systemd unit (type=Forking and
        RemainsAfterExit=no), this allow a correct state synchronisation
        between systemctl status and actual state of apache2 daemon.

d3ac006... by Nish Aravamudan on 2016-12-09

      + d/source/include-binaries: add Ubuntu icon file

70abf4c... by Nish Aravamudan on 2016-12-09

    - d/index.html, d/icons/ubuntu-logo.png, d/apache2.postrm: replace
      Debian with Ubuntu on default page.

061c2e4... by Nish Aravamudan on 2016-12-09

    - debian/patches/086_svn_cross_compiles: Backport several cross
      fixes from upstream

9052ec1... by Nish Aravamudan on 2016-12-09

    - debian/apache2.py, debian/apache2-bin.install: Add apport hook.

ac90c0c... by Nish Aravamudan on 2016-12-09

    - debian/{control, apache2.install, apache2-utils.ufw.profile,
      apache2.dirs}: Add ufw profiles.

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

Subscribers

People subscribed via source and target branches