passenger 4.0.59 → 4.0.60
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/CHANGELOG +15 -0
- data/bin/passenger-install-apache2-module +2 -1
- data/bin/passenger-install-nginx-module +8 -2
- data/ext/apache2/Hooks.cpp +21 -2
- data/ext/apache2/MergeDirConfig.cpp +40 -40
- data/ext/common/ApplicationPool2/Group.h +14 -10
- data/ext/common/ApplicationPool2/Implementation.cpp +13 -7
- data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
- data/ext/common/Constants.h +1 -1
- data/ext/nginx/ContentHandler.c +17 -1
- data/lib/phusion_passenger.rb +4 -5
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +4 -3
- data/lib/phusion_passenger/platform_info/openssl.rb +61 -0
- data/lib/phusion_passenger/standalone/runtime_installer.rb +27 -22
- data/packaging/debian/LICENSE.md +19 -0
- data/packaging/debian/README.md +320 -0
- data/packaging/debian/Vagrantfile +25 -0
- data/packaging/debian/build +210 -0
- data/packaging/debian/debian_specs/nginx/changelog +1989 -0
- data/packaging/debian/debian_specs/nginx/compat.erb +5 -0
- data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +25 -0
- data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +24 -0
- data/packaging/debian/debian_specs/nginx/conf/koi-utf +109 -0
- data/packaging/debian/debian_specs/nginx/conf/koi-win +103 -0
- data/packaging/debian/debian_specs/nginx/conf/mime.types +89 -0
- data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +97 -0
- data/packaging/debian/debian_specs/nginx/conf/proxy_params +4 -0
- data/packaging/debian/debian_specs/nginx/conf/scgi_params +16 -0
- data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +93 -0
- data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +13 -0
- data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +5 -0
- data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +16 -0
- data/packaging/debian/debian_specs/nginx/conf/win-utf +125 -0
- data/packaging/debian/debian_specs/nginx/control.erb +226 -0
- data/packaging/debian/debian_specs/nginx/copyright +196 -0
- data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +1 -0
- data/packaging/debian/debian_specs/nginx/gbp.conf +2 -0
- data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +14 -0
- data/packaging/debian/debian_specs/nginx/help/docs/php +119 -0
- data/packaging/debian/debian_specs/nginx/help/docs/support-irc +28 -0
- data/packaging/debian/debian_specs/nginx/help/docs/upstream +51 -0
- data/packaging/debian/debian_specs/nginx/help/examples/drupal +114 -0
- data/packaging/debian/debian_specs/nginx/help/examples/http +59 -0
- data/packaging/debian/debian_specs/nginx/help/examples/mail +30 -0
- data/packaging/debian/debian_specs/nginx/help/examples/mailman +59 -0
- data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +34 -0
- data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +162 -0
- data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +155 -0
- data/packaging/debian/debian_specs/nginx/help/examples/wordpress +74 -0
- data/packaging/debian/debian_specs/nginx/helpers.rb +41 -0
- data/packaging/debian/debian_specs/nginx/index-debian.html.in +32 -0
- data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +32 -0
- data/packaging/debian/debian_specs/nginx/index.html.erb +10 -0
- data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +65 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +510 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +5 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +395 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +119 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +348 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +80 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +826 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +716 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +380 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +52 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +32 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +215 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +35 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +93 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +462 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +66 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +171 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +7 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +1803 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +29 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +9 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +824 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +139 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +395 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +1 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +10 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +597 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +35 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +15 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +2 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +7 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +43 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +78 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +6 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +49 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +63 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +62 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +124 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +48 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +136 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +797 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +17 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +24 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +113 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +2203 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +5423 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +227 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +72 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +98 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +66 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +112 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +16 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +291 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +117 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +77 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +200 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +155 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +58 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +43 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +129 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +30 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +192 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +396 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +44 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +72 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +171 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +57 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +82 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +138 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +35 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +165 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +67 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +583 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +215 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +7 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +103 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +602 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +44 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +434 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +37 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +14 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +205 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +27 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +6 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +1850 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +1558 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +109 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +344 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +282 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +15 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +183 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +16 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +429 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +18 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +178 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +13 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +667 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +137 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +452 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +31 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +208 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +16 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +788 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +96 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +13 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +298 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +58 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +110 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +9 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +131 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +38 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +24 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +206 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +54 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +191 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +59 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +73 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +783 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +31 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +361 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +120 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +1180 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +1 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +146 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +51 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +178 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +246 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +9 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +51 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +6954 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +363 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +5898 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +61 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +138 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +140 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +52 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +82 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +377 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +77 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +537 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +632 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +31 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +296 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +24 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +175 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +887 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +478 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +67 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +148 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +369 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +483 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +379 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +216 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +1081 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +56 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +58 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +33 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +302 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +29 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +1370 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +782 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +625 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +42 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +320 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +300 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +227 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +252 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +924 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +184 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +794 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +28 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +106 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +94 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +13 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +85 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +2468 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +1169 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +252 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +351 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +538 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +86 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +216 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +15 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +1844 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +52 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +191 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +5314 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +156 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +1624 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +56 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +704 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +1741 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +46 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +278 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +661 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +110 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +283 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +36 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +3972 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +423 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +499 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +64 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +17 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +39 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +55 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +27 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +415 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +62 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +64 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +102 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +10 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +144 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +107 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +329 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +1774 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +53 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +1356 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +37 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +24 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +20 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +182 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +8 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +23 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +1305 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +52 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +103 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +102 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +37 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +141 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +3 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +120 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +199 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +123 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +1298 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +275 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +820 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +470 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +82 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +83 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +81 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +93 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +34 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +415 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +716 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +29 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +64 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +63 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +539 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +682 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +341 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +1413 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +81 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +735 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +315 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +524 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +1749 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +874 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +136 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +32 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +32 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +108 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +59 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +5 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +7 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +29 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +129 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +135 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +45 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +32 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.install +3 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +2 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.manpages +1 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +10 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +214 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +18 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +37 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +66 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +46 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.preinst +47 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +28 -0
- data/packaging/debian/debian_specs/nginx/nginx-doc.docs +2 -0
- data/packaging/debian/debian_specs/nginx/nginx-doc.examples +1 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +17 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +1 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +44 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +22 -0
- data/packaging/debian/debian_specs/nginx/nginx.1 +47 -0
- data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +23 -0
- data/packaging/debian/debian_specs/nginx/patches/series +1 -0
- data/packaging/debian/debian_specs/nginx/rules.erb +185 -0
- data/packaging/debian/debian_specs/nginx/source/format +1 -0
- data/packaging/debian/debian_specs/nginx/tests/control +4 -0
- data/packaging/debian/debian_specs/nginx/ufw/nginx +14 -0
- data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +34 -0
- data/packaging/debian/debian_specs/nginx/watch +3 -0
- data/packaging/debian/debian_specs/passenger/README.Debian +12 -0
- data/packaging/debian/debian_specs/passenger/changelog +316 -0
- data/packaging/debian/debian_specs/passenger/compat +1 -0
- data/packaging/debian/debian_specs/passenger/control.erb +123 -0
- data/packaging/debian/debian_specs/passenger/copyright +385 -0
- data/packaging/debian/debian_specs/passenger/helpers.rb +24 -0
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +3 -0
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +36 -0
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +15 -0
- data/packaging/debian/debian_specs/passenger/locations.ini.erb +14 -0
- data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +3 -0
- data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +2 -0
- data/packaging/debian/debian_specs/passenger/passenger.conf +6 -0
- data/packaging/debian/debian_specs/passenger/passenger.docs +4 -0
- data/packaging/debian/debian_specs/passenger/passenger.install.erb +16 -0
- data/packaging/debian/debian_specs/passenger/passenger.load +3 -0
- data/packaging/debian/debian_specs/passenger/passenger.manpages +3 -0
- data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +29 -0
- data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +54 -0
- data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +37 -0
- data/packaging/debian/debian_specs/passenger/patches/series +0 -0
- data/packaging/debian/debian_specs/passenger/rules.erb +84 -0
- data/packaging/debian/debian_specs/passenger/source/format +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +12 -0
- data/packaging/debian/debian_specs/passenger_enterprise/changelog +316 -0
- data/packaging/debian/debian_specs/passenger_enterprise/compat +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/control.erb +123 -0
- data/packaging/debian/debian_specs/passenger_enterprise/copyright +385 -0
- data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +2 -0
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +36 -0
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +15 -0
- data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +14 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +2 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +4 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +14 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +6 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
- data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +84 -0
- data/packaging/debian/debian_specs/passenger_enterprise/source/format +1 -0
- data/packaging/debian/docker_images/Makefile +38 -0
- data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
- data/packaging/debian/docker_images/buildbox/Dockerfile +3 -0
- data/packaging/debian/docker_images/buildbox/Gemfile +9 -0
- data/packaging/debian/docker_images/buildbox/Gemfile.lock +42 -0
- data/packaging/debian/docker_images/buildbox/install.sh +85 -0
- data/packaging/debian/docker_images/buildbox/pbuilderrc +4 -0
- data/packaging/debian/docker_images/buildbox/sudoers.conf +6 -0
- data/packaging/debian/docker_images/setup-buildbox-docker-image +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +7 -0
- data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-debian-6/argparse.py +2374 -0
- data/packaging/debian/docker_images/testbox-debian-6/install.sh +78 -0
- data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-debian-7/install.sh +71 -0
- data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-debian-8/install.sh +70 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +69 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +69 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +69 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +69 -0
- data/packaging/debian/internal/build/Rakefile +235 -0
- data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +76 -0
- data/packaging/debian/internal/build/build-source-package.rb +121 -0
- data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +17 -0
- data/packaging/debian/internal/build/rakefile_support.rb +96 -0
- data/packaging/debian/internal/build/setup-environment-essentials.sh +15 -0
- data/packaging/debian/internal/build/setup-environment.sh +29 -0
- data/packaging/debian/internal/lib/distro_info.rb +82 -0
- data/packaging/debian/internal/lib/distro_info.sh +303 -0
- data/packaging/debian/internal/lib/distro_info.sh.erb +65 -0
- data/packaging/debian/internal/lib/library.sh +83 -0
- data/packaging/debian/internal/lib/preprocessor.rb +173 -0
- data/packaging/debian/internal/lib/tracking.rb +95 -0
- data/packaging/debian/internal/lib/tracking_category.rb +45 -0
- data/packaging/debian/internal/lib/tracking_database.rb +132 -0
- data/packaging/debian/internal/lib/tracking_task.rb +148 -0
- data/packaging/debian/internal/lib/utils.rb +78 -0
- data/packaging/debian/internal/publish/Rakefile +97 -0
- data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +1 -0
- data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +1 -0
- data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +1 -0
- data/packaging/debian/internal/publish/preinit.sh +7 -0
- data/packaging/debian/internal/publish/rakefile_support.rb +183 -0
- data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +11 -0
- data/packaging/debian/internal/scripts/initccache.sh +35 -0
- data/packaging/debian/internal/scripts/inituidgid.sh +19 -0
- data/packaging/debian/internal/scripts/my_init +340 -0
- data/packaging/debian/internal/scripts/pin_certificates +34 -0
- data/packaging/debian/internal/scripts/regen_distro_info_script.sh +3 -0
- data/packaging/debian/internal/scripts/setup-vagrant.sh +12 -0
- data/packaging/debian/internal/scripts/setuser +31 -0
- data/packaging/debian/internal/shell/initpbuilder.sh +3 -0
- data/packaging/debian/internal/shell/preinit.sh +28 -0
- data/packaging/debian/internal/shell/sudoers.conf +1 -0
- data/packaging/debian/internal/test/apache/apache-24.conf +5 -0
- data/packaging/debian/internal/test/apache/apache-pre-24.conf +4 -0
- data/packaging/debian/internal/test/apache/vhost.conf +17 -0
- data/packaging/debian/internal/test/misc/config.json +15 -0
- data/packaging/debian/internal/test/misc/hosts.conf +4 -0
- data/packaging/debian/internal/test/misc/init.sh +25 -0
- data/packaging/debian/internal/test/misc/nodejs_test_app.js +6 -0
- data/packaging/debian/internal/test/misc/python_test_app.py +3 -0
- data/packaging/debian/internal/test/misc/ruby_test_app.rb +5 -0
- data/packaging/debian/internal/test/misc/test_support.rb +61 -0
- data/packaging/debian/internal/test/nginx/vhost.conf +23 -0
- data/packaging/debian/internal/test/system_web_server_test.rb +126 -0
- data/packaging/debian/internal/test/test.sh +141 -0
- data/packaging/debian/jenkins/publish/clear_caches.rb +48 -0
- data/packaging/debian/jenkins/publish/publish.sh +69 -0
- data/packaging/debian/jenkins/test/test.sh +63 -0
- data/packaging/debian/passenger_apt_automation.sublime-project +14 -0
- data/packaging/debian/publish +172 -0
- data/packaging/debian/shell +116 -0
- data/packaging/debian/test +142 -0
- metadata +563 -3
- metadata.gz.asc +7 -7
- data/resources/oss-binaries.phusionpassenger.com.crt +0 -208
@@ -0,0 +1,199 @@
|
|
1
|
+
<?xml version="1.0" ?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
4
|
+
<head>
|
5
|
+
<title>nginx_substitutions_filter</title>
|
6
|
+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
7
|
+
<link rev="made" href="mailto:root@localhost" />
|
8
|
+
</head>
|
9
|
+
|
10
|
+
<body style="background-color: white">
|
11
|
+
|
12
|
+
<p><a name="__index__"></a></p>
|
13
|
+
<!-- INDEX BEGIN -->
|
14
|
+
|
15
|
+
<ul>
|
16
|
+
|
17
|
+
<li><a href="#nginx_substitutions_filter">nginx_substitutions_filter</a></li>
|
18
|
+
<ul>
|
19
|
+
|
20
|
+
<li><a href="#description">Description</a></li>
|
21
|
+
<li><a href="#example">Example</a></li>
|
22
|
+
<li><a href="#directives">Directives</a></li>
|
23
|
+
<ul>
|
24
|
+
|
25
|
+
<li><a href="#subs_filter_types">subs_filter_types</a></li>
|
26
|
+
<li><a href="#subs_filter">subs_filter</a></li>
|
27
|
+
<li><a href="#subs_filter_bypass">subs_filter_bypass</a></li>
|
28
|
+
</ul>
|
29
|
+
|
30
|
+
<li><a href="#installation">Installation</a></li>
|
31
|
+
<li><a href="#known_issue">Known issue</a></li>
|
32
|
+
<li><a href="#changes">CHANGES</a></li>
|
33
|
+
<li><a href="#reporting_a_bug">Reporting a bug</a></li>
|
34
|
+
</ul>
|
35
|
+
|
36
|
+
</ul>
|
37
|
+
<!-- INDEX END -->
|
38
|
+
|
39
|
+
<hr />
|
40
|
+
<p>
|
41
|
+
</p>
|
42
|
+
<h1><a name="nginx_substitutions_filter">nginx_substitutions_filter</a></h1>
|
43
|
+
<p><em>Note: this module is not distributed with the Nginx source. Installation instructions can be found <a href="#installation">below</a>. </em>></p>
|
44
|
+
<p>
|
45
|
+
</p>
|
46
|
+
<h2><a name="description">Description</a></h2>
|
47
|
+
<p><strong>nginx_substitutions_filter</strong> is a filter module which can do both regular expression and fixed string substitutions on response bodies. This module is quite different from the Nginx's native Substitution Module. It scans the output chains buffer and matches string line by line, just like Apache's mod_substitute (<a href="http://httpd.apache.org/docs/trunk/mod/mod_substitute.html">http://httpd.apache.org/docs/trunk/mod/mod_substitute.html</a>).</p>
|
48
|
+
<p>
|
49
|
+
</p>
|
50
|
+
<h2><a name="example">Example</a></h2>
|
51
|
+
<p>location / {</p>
|
52
|
+
<pre>
|
53
|
+
subs_filter_types text/html text/css text/xml;
|
54
|
+
subs_filter st(\d*).example.com $1.example.com ir;
|
55
|
+
subs_filter a.example.com s.example.com;</pre>
|
56
|
+
<p>}</p>
|
57
|
+
<p>
|
58
|
+
</p>
|
59
|
+
<h2><a name="directives">Directives</a></h2>
|
60
|
+
<ul>
|
61
|
+
<li>
|
62
|
+
<p><a href="#subs_filter_types">subs_filter_types</a></p>
|
63
|
+
</li>
|
64
|
+
<li>
|
65
|
+
<p><a href="#subs_filter">subs_filter</a></p>
|
66
|
+
</li>
|
67
|
+
</ul>
|
68
|
+
<p>
|
69
|
+
</p>
|
70
|
+
<h3><a name="subs_filter_types">subs_filter_types</a></h3>
|
71
|
+
<p><strong>syntax:</strong> <em>subs_filter_types mime-type [mime-types] </em></p>
|
72
|
+
<p><strong>default:</strong> <em>subs_filter_types text/html</em></p>
|
73
|
+
<p><strong>context:</strong> <em>http, server, location</em></p>
|
74
|
+
<p><em>subs_filter_types</em> is used to specify which content types should be checked for <em>subs_filter</em>. The default is only <em>text/html</em>.</p>
|
75
|
+
<p>This module just works with plain text. If the response is compressed, it can't uncompress the response and will ignore this response. This module can be compatible with gzip filter module. But it will not work with proxy compressed response. You can disable the compressed response like this:</p>
|
76
|
+
<p>proxy_set_header Accept-Encoding ``'';</p>
|
77
|
+
<p>
|
78
|
+
</p>
|
79
|
+
<h3><a name="subs_filter">subs_filter</a></h3>
|
80
|
+
<p><strong>syntax:</strong> <em>subs_filter source_str destination_str [gior] </em></p>
|
81
|
+
<p><strong>default:</strong> <em>none</em></p>
|
82
|
+
<p><strong>context:</strong> <em>http, server, location</em></p>
|
83
|
+
<p><em>subs_filter</em> allows replacing source string(regular expression or fixed) in the nginx response with destination string. Substitution text may contain variables. More than one substitution rules per location is supported. The meaning of the third flags are:</p>
|
84
|
+
<ul>
|
85
|
+
<li>
|
86
|
+
<p><em>g</em>(default): Replace all the match strings.</p>
|
87
|
+
</li>
|
88
|
+
<li>
|
89
|
+
<p><em>i</em>: Perform a case-insensitive match.</p>
|
90
|
+
</li>
|
91
|
+
<li>
|
92
|
+
<p><em>o</em>: Just replace the first one.</p>
|
93
|
+
</li>
|
94
|
+
<li>
|
95
|
+
<p><em>r</em>: The pattern is treated as a regular expression, default is fixed string.</p>
|
96
|
+
</li>
|
97
|
+
</ul>
|
98
|
+
<p>
|
99
|
+
</p>
|
100
|
+
<h3><a name="subs_filter_bypass">subs_filter_bypass</a></h3>
|
101
|
+
<p><strong>syntax:</strong> <em>subs_filter_bypass $variable1 ...</em></p>
|
102
|
+
<p><strong>default:</strong> <em>none</em></p>
|
103
|
+
<p><strong>context:</strong> <em>http, server, location</em></p>
|
104
|
+
<p>You can sepcify several variables with this directive. If at least one of the variable is not empty and is not equal to '0', this substitution filter will be disabled.</p>
|
105
|
+
<p>
|
106
|
+
</p>
|
107
|
+
<h2><a name="installation">Installation</a></h2>
|
108
|
+
<p>To install, get the source with subversion:</p>
|
109
|
+
<p>git clone <a href="git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git">git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git</a></p>
|
110
|
+
<p>and then compile nginx with the following option:</p>
|
111
|
+
<p>./configure --add-module=/path/to/module</p>
|
112
|
+
<p>
|
113
|
+
</p>
|
114
|
+
<h2><a name="known_issue">Known issue</a></h2>
|
115
|
+
<ul>
|
116
|
+
<li>
|
117
|
+
<p>Can't substitute the response header.</p>
|
118
|
+
</li>
|
119
|
+
</ul>
|
120
|
+
<p>
|
121
|
+
</p>
|
122
|
+
<h2><a name="changes">CHANGES</a></h2>
|
123
|
+
<p>Changes with nginx_substitutions_filter 0.6.4 2014-02-15</p>
|
124
|
+
<ul>
|
125
|
+
<li>
|
126
|
+
<p>Now non-200 response will work</p>
|
127
|
+
</li>
|
128
|
+
<li>
|
129
|
+
<p>added the subs_filter_bypass directive</p>
|
130
|
+
</li>
|
131
|
+
</ul>
|
132
|
+
<p>Changes with nginx_substitutions_filter 0.6.2 2012-08-26</p>
|
133
|
+
<ul>
|
134
|
+
<li>
|
135
|
+
<p>fixed a bug of buffer overlap</p>
|
136
|
+
</li>
|
137
|
+
<li>
|
138
|
+
<p>fixed a bug with last zero buffer</p>
|
139
|
+
</li>
|
140
|
+
</ul>
|
141
|
+
<p>Changes with nginx_substitutions_filter 0.6.0 2012-06-30</p>
|
142
|
+
<ul>
|
143
|
+
<li>
|
144
|
+
<p>refactor this module</p>
|
145
|
+
</li>
|
146
|
+
</ul>
|
147
|
+
<p>Changes with nginx_substitutions_filter 0.5.2 2010-08-11</p>
|
148
|
+
<ul>
|
149
|
+
<li>
|
150
|
+
<p>do many optimizing for this module</p>
|
151
|
+
</li>
|
152
|
+
<li>
|
153
|
+
<p>fix a bug of buffer overlap</p>
|
154
|
+
</li>
|
155
|
+
<li>
|
156
|
+
<p>fix a segment fault bug when output chain return NGX_AGAIN.</p>
|
157
|
+
</li>
|
158
|
+
<li>
|
159
|
+
<p>fix a bug about last buffer with no linefeed. This may cause segment fault. Thanks for Josef Fröhle</p>
|
160
|
+
</li>
|
161
|
+
</ul>
|
162
|
+
<p>Changes with nginx_substitutions_filter 0.5 2010-04-15</p>
|
163
|
+
<ul>
|
164
|
+
<li>
|
165
|
+
<p>refactor the source structure, create branches of dev</p>
|
166
|
+
</li>
|
167
|
+
<li>
|
168
|
+
<p>fix a bug of small chunk of buffers causing lose content</p>
|
169
|
+
</li>
|
170
|
+
<li>
|
171
|
+
<p>fix the bug of last_buf and the nginx's compatibility above 0.8.25</p>
|
172
|
+
</li>
|
173
|
+
<li>
|
174
|
+
<p>fix a bug with unwanted capture config error in fix string substitution</p>
|
175
|
+
</li>
|
176
|
+
<li>
|
177
|
+
<p>add feature of regex captures</p>
|
178
|
+
</li>
|
179
|
+
</ul>
|
180
|
+
<p>Changes with nginx_substitutions_filter 0.4 2009-12-23</p>
|
181
|
+
<ul>
|
182
|
+
<li>
|
183
|
+
<p>fix many bugs</p>
|
184
|
+
</li>
|
185
|
+
</ul>
|
186
|
+
<p>Changes with nginx_substitutions_filter 0.3 2009-02-04</p>
|
187
|
+
<ul>
|
188
|
+
<li>
|
189
|
+
<p>Initial public release</p>
|
190
|
+
</li>
|
191
|
+
</ul>
|
192
|
+
<p>
|
193
|
+
</p>
|
194
|
+
<h2><a name="reporting_a_bug">Reporting a bug</a></h2>
|
195
|
+
<p>Questions/patches may be directed to Weibin Yao, <a href="mailto:yaoweibin@gmail.com.">yaoweibin@gmail.com.</a></p>
|
196
|
+
|
197
|
+
</body>
|
198
|
+
|
199
|
+
</html>
|
@@ -0,0 +1,123 @@
|
|
1
|
+
= nginx_substitutions_filter =
|
2
|
+
|
3
|
+
''Note: this module is not distributed with the Nginx source. Installation instructions can be found [[#Installation|below]].''
|
4
|
+
|
5
|
+
== Description ==
|
6
|
+
|
7
|
+
'''nginx_substitutions_filter''' is a filter module which can do both regular expression and fixed string substitutions on response bodies. This module is quite different from the Nginx's native Substitution Module. It scans the output chains buffer and matches string line by line, just like Apache's [http://httpd.apache.org/docs/trunk/mod/mod_substitute.html mod_substitute].
|
8
|
+
|
9
|
+
== Example ==
|
10
|
+
|
11
|
+
<geshi lang="nginx">
|
12
|
+
location / {
|
13
|
+
|
14
|
+
subs_filter_types text/html text/css text/xml;
|
15
|
+
subs_filter st(\d*).example.com $1.example.com ir;
|
16
|
+
subs_filter a.example.com s.example.com;
|
17
|
+
|
18
|
+
}
|
19
|
+
</geshi>
|
20
|
+
|
21
|
+
== Directives ==
|
22
|
+
|
23
|
+
* [[#subs_filter_types|subs_filter_types]]
|
24
|
+
* [[#subs_filter|subs_filter]]
|
25
|
+
|
26
|
+
=== subs_filter_types ===
|
27
|
+
|
28
|
+
'''syntax:''' ''subs_filter_types mime-type [mime-types] ''
|
29
|
+
|
30
|
+
'''default:''' ''subs_filter_types text/html''
|
31
|
+
|
32
|
+
'''context:''' ''http, server, location''
|
33
|
+
|
34
|
+
''subs_filter_types'' is used to specify which content types should be checked for ''subs_filter''. The default is only ''text/html''.
|
35
|
+
|
36
|
+
This module just works with plain text. If the response is compressed, it can't uncompress the response and will ignore this response. This module can be compatible with gzip filter module. But it will not work with proxy compressed response. You can disable the compressed response like this:
|
37
|
+
|
38
|
+
proxy_set_header Accept-Encoding "";
|
39
|
+
|
40
|
+
=== subs_filter ===
|
41
|
+
|
42
|
+
'''syntax:''' ''subs_filter source_str destination_str [gior] ''
|
43
|
+
|
44
|
+
'''default:''' ''none''
|
45
|
+
|
46
|
+
'''context:''' ''http, server, location''
|
47
|
+
|
48
|
+
''subs_filter'' allows replacing source string(regular expression or fixed) in the nginx response with destination string. Substitution text may contain variables. More than one substitution rules per location is supported. The meaning of the third flags are:
|
49
|
+
* ''g''(default): Replace all the match strings.
|
50
|
+
* ''i'': Perform a case-insensitive match.
|
51
|
+
* ''o'': Just replace the first one.
|
52
|
+
* ''r'': The pattern is treated as a regular expression, default is fixed string.
|
53
|
+
|
54
|
+
=== subs_filter_bypass ===
|
55
|
+
|
56
|
+
'''syntax:''' ''subs_filter_bypass $variable1 ...''
|
57
|
+
|
58
|
+
'''default:''' ''none''
|
59
|
+
|
60
|
+
'''context:''' ''http, server, location''
|
61
|
+
|
62
|
+
You can sepcify several variables with this directive. If at least one of the variable is not empty and is not equal to '0', this substitution filter will be disabled.
|
63
|
+
|
64
|
+
== Installation ==
|
65
|
+
|
66
|
+
To install, get the source with subversion:
|
67
|
+
|
68
|
+
<code>
|
69
|
+
git clone git://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
|
70
|
+
</code>
|
71
|
+
|
72
|
+
and then compile nginx with the following option:
|
73
|
+
|
74
|
+
<code>
|
75
|
+
./configure --add-module=/path/to/module
|
76
|
+
</code>
|
77
|
+
|
78
|
+
== Known issue ==
|
79
|
+
* Can't substitute the response header.
|
80
|
+
|
81
|
+
== CHANGES ==
|
82
|
+
|
83
|
+
Changes with nginx_substitutions_filter 0.6.4 2014-02-15
|
84
|
+
|
85
|
+
* Now non-200 response will work
|
86
|
+
* added the subs_filter_bypass directive
|
87
|
+
|
88
|
+
Changes with nginx_substitutions_filter 0.6.2 2012-08-26
|
89
|
+
|
90
|
+
* fixed a bug of buffer overlap
|
91
|
+
* fixed a bug with last zero buffer
|
92
|
+
|
93
|
+
Changes with nginx_substitutions_filter 0.6.0 2012-06-30
|
94
|
+
|
95
|
+
* refactor this module
|
96
|
+
|
97
|
+
Changes with nginx_substitutions_filter 0.5.2 2010-08-11
|
98
|
+
|
99
|
+
* do many optimizing for this module
|
100
|
+
* fix a bug of buffer overlap
|
101
|
+
* fix a segment fault bug when output chain return NGX_AGAIN.
|
102
|
+
* fix a bug about last buffer with no linefeed. This may cause segment fault. Thanks for Josef Fröhle
|
103
|
+
|
104
|
+
Changes with nginx_substitutions_filter 0.5 2010-04-15
|
105
|
+
|
106
|
+
* refactor the source structure, create branches of dev
|
107
|
+
* fix a bug of small chunk of buffers causing lose content
|
108
|
+
* fix the bug of last_buf and the nginx's compatibility above 0.8.25
|
109
|
+
* fix a bug with unwanted capture config error in fix string substitution
|
110
|
+
* add feature of regex captures
|
111
|
+
|
112
|
+
Changes with nginx_substitutions_filter 0.4 2009-12-23
|
113
|
+
|
114
|
+
* fix many bugs
|
115
|
+
|
116
|
+
Changes with nginx_substitutions_filter 0.3 2009-02-04
|
117
|
+
|
118
|
+
* Initial public release
|
119
|
+
|
120
|
+
== Reporting a bug ==
|
121
|
+
|
122
|
+
Questions/patches may be directed to Weibin Yao, yaoweibin@gmail.com.
|
123
|
+
|
@@ -0,0 +1,1298 @@
|
|
1
|
+
/*
|
2
|
+
* Author: Weibin Yao(yaoweibin@gmail.com)
|
3
|
+
*
|
4
|
+
* Licence: This module could be distributed under the
|
5
|
+
* same terms as Nginx itself.
|
6
|
+
*/
|
7
|
+
|
8
|
+
|
9
|
+
#include <ngx_config.h>
|
10
|
+
#include <ngx_core.h>
|
11
|
+
#include <ngx_http.h>
|
12
|
+
#include <nginx.h>
|
13
|
+
|
14
|
+
|
15
|
+
#if (NGX_DEBUG)
|
16
|
+
#define SUBS_DEBUG 1
|
17
|
+
#else
|
18
|
+
#define SUBS_DEBUG 0
|
19
|
+
#endif
|
20
|
+
|
21
|
+
|
22
|
+
#ifndef NGX_HTTP_MAX_CAPTURES
|
23
|
+
#define NGX_HTTP_MAX_CAPTURES 9
|
24
|
+
#endif
|
25
|
+
|
26
|
+
|
27
|
+
#define ngx_buffer_init(b) b->pos = b->last = b->start;
|
28
|
+
|
29
|
+
|
30
|
+
typedef struct {
|
31
|
+
ngx_flag_t once;
|
32
|
+
ngx_flag_t regex;
|
33
|
+
ngx_flag_t insensitive;
|
34
|
+
|
35
|
+
/* If it has captured variables? */
|
36
|
+
ngx_flag_t has_captured;
|
37
|
+
|
38
|
+
ngx_str_t match;
|
39
|
+
#if (NGX_PCRE)
|
40
|
+
ngx_regex_t *match_regex;
|
41
|
+
int *captures;
|
42
|
+
ngx_int_t ncaptures;
|
43
|
+
#endif
|
44
|
+
|
45
|
+
ngx_str_t sub;
|
46
|
+
ngx_array_t *sub_lengths;
|
47
|
+
ngx_array_t *sub_values;
|
48
|
+
|
49
|
+
unsigned matched;
|
50
|
+
} sub_pair_t;
|
51
|
+
|
52
|
+
|
53
|
+
typedef struct {
|
54
|
+
ngx_hash_t types;
|
55
|
+
ngx_array_t *sub_pairs; /* array of sub_pair_t */
|
56
|
+
ngx_array_t *types_keys; /* array of ngx_hash_key_t */
|
57
|
+
ngx_array_t *bypass; /* array of ngx_http_complex_value_t */
|
58
|
+
size_t line_buffer_size;
|
59
|
+
ngx_bufs_t bufs;
|
60
|
+
} ngx_http_subs_loc_conf_t;
|
61
|
+
|
62
|
+
|
63
|
+
typedef struct {
|
64
|
+
ngx_array_t *sub_pairs; /* array of sub_pair_t */
|
65
|
+
|
66
|
+
ngx_chain_t *in;
|
67
|
+
|
68
|
+
/* the line input buffer before substitution */
|
69
|
+
ngx_buf_t *line_in;
|
70
|
+
/* the line destination buffer after substitution */
|
71
|
+
ngx_buf_t *line_dst;
|
72
|
+
|
73
|
+
/* the last output buffer */
|
74
|
+
ngx_buf_t *out_buf;
|
75
|
+
/* point to the last output chain's next chain */
|
76
|
+
ngx_chain_t **last_out;
|
77
|
+
ngx_chain_t *out;
|
78
|
+
|
79
|
+
ngx_chain_t *busy;
|
80
|
+
|
81
|
+
/* the freed chain buffers. */
|
82
|
+
ngx_chain_t *free;
|
83
|
+
|
84
|
+
ngx_int_t bufs;
|
85
|
+
|
86
|
+
unsigned last;
|
87
|
+
|
88
|
+
} ngx_http_subs_ctx_t;
|
89
|
+
|
90
|
+
|
91
|
+
static ngx_int_t ngx_http_subs_header_filter(ngx_http_request_t *r);
|
92
|
+
static ngx_int_t ngx_http_subs_init_context(ngx_http_request_t *r);
|
93
|
+
|
94
|
+
static ngx_int_t ngx_http_subs_body_filter(ngx_http_request_t *r,
|
95
|
+
ngx_chain_t *in);
|
96
|
+
static ngx_int_t ngx_http_subs_body_filter_init_context(ngx_http_request_t *r,
|
97
|
+
ngx_chain_t *in);
|
98
|
+
static ngx_int_t ngx_http_subs_body_filter_process_buffer(ngx_http_request_t *r,
|
99
|
+
ngx_buf_t *b);
|
100
|
+
static ngx_int_t ngx_http_subs_match(ngx_http_request_t *r,
|
101
|
+
ngx_http_subs_ctx_t *ctx);
|
102
|
+
#if (NGX_PCRE)
|
103
|
+
static ngx_int_t ngx_http_subs_match_regex_substituion(ngx_http_request_t *r,
|
104
|
+
sub_pair_t *pair, ngx_buf_t *b, ngx_buf_t *dst);
|
105
|
+
#endif
|
106
|
+
static ngx_int_t ngx_http_subs_match_fix_substituion(ngx_http_request_t *r,
|
107
|
+
sub_pair_t *pair, ngx_buf_t *b, ngx_buf_t *dst);
|
108
|
+
static ngx_buf_t * buffer_append_string(ngx_buf_t *b, u_char *s, size_t len,
|
109
|
+
ngx_pool_t *pool);
|
110
|
+
static ngx_int_t ngx_http_subs_out_chain_append(ngx_http_request_t *r,
|
111
|
+
ngx_http_subs_ctx_t *ctx, ngx_buf_t *b);
|
112
|
+
static ngx_int_t ngx_http_subs_get_chain_buf(ngx_http_request_t *r,
|
113
|
+
ngx_http_subs_ctx_t *ctx);
|
114
|
+
static ngx_int_t ngx_http_subs_output(ngx_http_request_t *r,
|
115
|
+
ngx_http_subs_ctx_t *ctx, ngx_chain_t *in);
|
116
|
+
|
117
|
+
static char * ngx_http_subs_filter(ngx_conf_t *cf, ngx_command_t *cmd,
|
118
|
+
void *conf);
|
119
|
+
static ngx_int_t ngx_http_subs_filter_regex_compile(sub_pair_t *pair,
|
120
|
+
ngx_http_script_compile_t *sc, ngx_conf_t *cf);
|
121
|
+
|
122
|
+
|
123
|
+
static void *ngx_http_subs_create_conf(ngx_conf_t *cf);
|
124
|
+
static char *ngx_http_subs_merge_conf(ngx_conf_t *cf, void *parent,
|
125
|
+
void *child);
|
126
|
+
|
127
|
+
static ngx_int_t ngx_http_subs_filter_init(ngx_conf_t *cf);
|
128
|
+
|
129
|
+
#if (NGX_PCRE)
|
130
|
+
static ngx_int_t ngx_http_subs_regex_capture_count(ngx_regex_t *re);
|
131
|
+
#endif
|
132
|
+
|
133
|
+
|
134
|
+
static ngx_command_t ngx_http_subs_filter_commands[] = {
|
135
|
+
|
136
|
+
{ ngx_string("subs_filter"),
|
137
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
|
138
|
+
ngx_http_subs_filter,
|
139
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
140
|
+
0,
|
141
|
+
NULL },
|
142
|
+
|
143
|
+
{ ngx_string("subs_filter_bypass"),
|
144
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
145
|
+
ngx_http_set_predicate_slot,
|
146
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
147
|
+
offsetof(ngx_http_subs_loc_conf_t, bypass),
|
148
|
+
NULL },
|
149
|
+
|
150
|
+
{ ngx_string("subs_filter_types"),
|
151
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
152
|
+
ngx_http_types_slot,
|
153
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
154
|
+
offsetof(ngx_http_subs_loc_conf_t, types_keys),
|
155
|
+
&ngx_http_html_default_types[0] },
|
156
|
+
|
157
|
+
{ ngx_string("subs_line_buffer_size"),
|
158
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
|
159
|
+
ngx_conf_set_size_slot,
|
160
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
161
|
+
offsetof(ngx_http_subs_loc_conf_t, line_buffer_size),
|
162
|
+
NULL },
|
163
|
+
|
164
|
+
{ ngx_string("subs_buffers"),
|
165
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE2,
|
166
|
+
ngx_conf_set_bufs_slot,
|
167
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
168
|
+
offsetof(ngx_http_subs_loc_conf_t, bufs),
|
169
|
+
NULL },
|
170
|
+
|
171
|
+
ngx_null_command
|
172
|
+
};
|
173
|
+
|
174
|
+
|
175
|
+
static ngx_http_module_t ngx_http_subs_filter_module_ctx = {
|
176
|
+
NULL, /* preconfiguration */
|
177
|
+
ngx_http_subs_filter_init, /* postconfiguration */
|
178
|
+
|
179
|
+
NULL, /* create main configuration */
|
180
|
+
NULL, /* init main configuration */
|
181
|
+
|
182
|
+
NULL, /* create server configuration */
|
183
|
+
NULL, /* merge server configuration */
|
184
|
+
|
185
|
+
ngx_http_subs_create_conf, /* create location configuration */
|
186
|
+
ngx_http_subs_merge_conf /* merge location configuration */
|
187
|
+
};
|
188
|
+
|
189
|
+
|
190
|
+
ngx_module_t ngx_http_subs_filter_module = {
|
191
|
+
NGX_MODULE_V1,
|
192
|
+
&ngx_http_subs_filter_module_ctx, /* module context */
|
193
|
+
ngx_http_subs_filter_commands, /* module directives */
|
194
|
+
NGX_HTTP_MODULE, /* module type */
|
195
|
+
NULL, /* init master */
|
196
|
+
NULL, /* init module */
|
197
|
+
NULL, /* init process */
|
198
|
+
NULL, /* init thread */
|
199
|
+
NULL, /* exit thread */
|
200
|
+
NULL, /* exit process */
|
201
|
+
NULL, /* exit master */
|
202
|
+
NGX_MODULE_V1_PADDING
|
203
|
+
};
|
204
|
+
|
205
|
+
|
206
|
+
static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
|
207
|
+
static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
|
208
|
+
|
209
|
+
extern volatile ngx_cycle_t *ngx_cycle;
|
210
|
+
|
211
|
+
|
212
|
+
static ngx_int_t
|
213
|
+
ngx_http_subs_header_filter(ngx_http_request_t *r)
|
214
|
+
{
|
215
|
+
ngx_http_subs_loc_conf_t *slcf;
|
216
|
+
|
217
|
+
slcf = ngx_http_get_module_loc_conf(r, ngx_http_subs_filter_module);
|
218
|
+
|
219
|
+
if (slcf->sub_pairs->nelts == 0
|
220
|
+
|| r->header_only
|
221
|
+
|| r->headers_out.content_type.len == 0
|
222
|
+
|| r->headers_out.content_length_n == 0)
|
223
|
+
{
|
224
|
+
return ngx_http_next_header_filter(r);
|
225
|
+
}
|
226
|
+
|
227
|
+
if (ngx_http_test_content_type(r, &slcf->types) == NULL) {
|
228
|
+
return ngx_http_next_header_filter(r);
|
229
|
+
}
|
230
|
+
|
231
|
+
switch (ngx_http_test_predicates(r, slcf->bypass)) {
|
232
|
+
|
233
|
+
case NGX_ERROR:
|
234
|
+
/*pass through*/
|
235
|
+
|
236
|
+
case NGX_DECLINED:
|
237
|
+
|
238
|
+
return ngx_http_next_header_filter(r);
|
239
|
+
|
240
|
+
default: /* NGX_OK */
|
241
|
+
break;
|
242
|
+
}
|
243
|
+
|
244
|
+
/* Don't do substitution with the compressed content */
|
245
|
+
if (r->headers_out.content_encoding
|
246
|
+
&& r->headers_out.content_encoding->value.len) {
|
247
|
+
|
248
|
+
ngx_log_error(NGX_LOG_WARN, r->connection->log, 0,
|
249
|
+
"http subs filter header ignored, this may be a "
|
250
|
+
"compressed response.");
|
251
|
+
|
252
|
+
return ngx_http_next_header_filter(r);
|
253
|
+
}
|
254
|
+
|
255
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
256
|
+
"http subs filter header \"%V\"", &r->uri);
|
257
|
+
|
258
|
+
if (ngx_http_subs_init_context(r) == NGX_ERROR) {
|
259
|
+
return NGX_ERROR;
|
260
|
+
}
|
261
|
+
|
262
|
+
r->filter_need_in_memory = 1;
|
263
|
+
|
264
|
+
if (r == r->main) {
|
265
|
+
ngx_http_clear_content_length(r);
|
266
|
+
ngx_http_clear_last_modified(r);
|
267
|
+
}
|
268
|
+
|
269
|
+
return ngx_http_next_header_filter(r);
|
270
|
+
}
|
271
|
+
|
272
|
+
|
273
|
+
static ngx_int_t
|
274
|
+
ngx_http_subs_init_context(ngx_http_request_t *r)
|
275
|
+
{
|
276
|
+
ngx_uint_t i;
|
277
|
+
sub_pair_t *src_pair, *dst_pair;
|
278
|
+
ngx_http_subs_ctx_t *ctx;
|
279
|
+
ngx_http_subs_loc_conf_t *slcf;
|
280
|
+
|
281
|
+
slcf = ngx_http_get_module_loc_conf(r, ngx_http_subs_filter_module);
|
282
|
+
|
283
|
+
/* Everything in ctx is NULL or 0. */
|
284
|
+
ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_subs_ctx_t));
|
285
|
+
if (ctx == NULL) {
|
286
|
+
return NGX_ERROR;
|
287
|
+
}
|
288
|
+
|
289
|
+
ngx_http_set_ctx(r, ctx, ngx_http_subs_filter_module);
|
290
|
+
|
291
|
+
ctx->sub_pairs = ngx_array_create(r->pool, slcf->sub_pairs->nelts,
|
292
|
+
sizeof(sub_pair_t));
|
293
|
+
if (slcf->sub_pairs == NULL) {
|
294
|
+
return NGX_ERROR;
|
295
|
+
}
|
296
|
+
|
297
|
+
/* Deep copy sub_pairs from slcf to ctx, matched and captures need it */
|
298
|
+
src_pair = (sub_pair_t *) slcf->sub_pairs->elts;
|
299
|
+
|
300
|
+
for (i = 0; i < slcf->sub_pairs->nelts; i++) {
|
301
|
+
|
302
|
+
dst_pair = ngx_array_push(ctx->sub_pairs);
|
303
|
+
if (dst_pair == NULL) {
|
304
|
+
return NGX_ERROR;
|
305
|
+
}
|
306
|
+
|
307
|
+
ngx_memcpy(dst_pair, src_pair + i, sizeof(sub_pair_t));
|
308
|
+
}
|
309
|
+
|
310
|
+
if (ctx->line_in == NULL) {
|
311
|
+
|
312
|
+
ctx->line_in = ngx_create_temp_buf(r->pool, slcf->line_buffer_size);
|
313
|
+
if (ctx->line_in == NULL) {
|
314
|
+
return NGX_ERROR;
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
318
|
+
if (ctx->line_dst == NULL) {
|
319
|
+
|
320
|
+
ctx->line_dst = ngx_create_temp_buf(r->pool, slcf->line_buffer_size);
|
321
|
+
if (ctx->line_dst == NULL) {
|
322
|
+
return NGX_ERROR;
|
323
|
+
}
|
324
|
+
}
|
325
|
+
|
326
|
+
return NGX_OK;
|
327
|
+
}
|
328
|
+
|
329
|
+
|
330
|
+
static ngx_int_t
|
331
|
+
ngx_http_subs_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
332
|
+
{
|
333
|
+
ngx_int_t rc;
|
334
|
+
ngx_log_t *log;
|
335
|
+
ngx_chain_t *cl, *temp;
|
336
|
+
ngx_http_subs_ctx_t *ctx;
|
337
|
+
ngx_http_subs_loc_conf_t *slcf;
|
338
|
+
|
339
|
+
log = r->connection->log;
|
340
|
+
|
341
|
+
slcf = ngx_http_get_module_loc_conf(r, ngx_http_subs_filter_module);
|
342
|
+
if (slcf == NULL) {
|
343
|
+
return ngx_http_next_body_filter(r, in);
|
344
|
+
}
|
345
|
+
|
346
|
+
ctx = ngx_http_get_module_ctx(r, ngx_http_subs_filter_module);
|
347
|
+
if (ctx == NULL) {
|
348
|
+
return ngx_http_next_body_filter(r, in);
|
349
|
+
}
|
350
|
+
|
351
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
|
352
|
+
"http subs filter \"%V\"", &r->uri);
|
353
|
+
|
354
|
+
if (in == NULL && ctx->busy == NULL) {
|
355
|
+
return ngx_http_next_body_filter(r, in);
|
356
|
+
}
|
357
|
+
|
358
|
+
if (ngx_http_subs_body_filter_init_context(r, in) != NGX_OK){
|
359
|
+
goto failed;
|
360
|
+
}
|
361
|
+
|
362
|
+
for (cl = ctx->in; cl; cl = cl->next) {
|
363
|
+
|
364
|
+
if (cl->buf->last_buf || cl->buf->last_in_chain){
|
365
|
+
ctx->last = 1;
|
366
|
+
}
|
367
|
+
|
368
|
+
/* TODO: check the flush flag */
|
369
|
+
rc = ngx_http_subs_body_filter_process_buffer(r, cl->buf);
|
370
|
+
|
371
|
+
if (rc == NGX_DECLINED) {
|
372
|
+
continue;
|
373
|
+
} else if (rc == NGX_ERROR) {
|
374
|
+
goto failed;
|
375
|
+
}
|
376
|
+
|
377
|
+
if (cl->next != NULL) {
|
378
|
+
continue;
|
379
|
+
}
|
380
|
+
|
381
|
+
if (ctx->last) {
|
382
|
+
|
383
|
+
/* copy line_in to ctx->out. */
|
384
|
+
if (ngx_buf_size(ctx->line_in) > 0) {
|
385
|
+
|
386
|
+
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
387
|
+
"[subs_filter] Lost last linefeed, output anyway.");
|
388
|
+
|
389
|
+
if (ngx_http_subs_out_chain_append(r, ctx, ctx->line_in)
|
390
|
+
!= NGX_OK) {
|
391
|
+
goto failed;
|
392
|
+
}
|
393
|
+
}
|
394
|
+
|
395
|
+
if (ctx->out_buf == NULL) {
|
396
|
+
|
397
|
+
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0,
|
398
|
+
"[subs_filter] The last buffer is zero size.");
|
399
|
+
|
400
|
+
/*
|
401
|
+
* This is a zero buffer, it should not be set the temporary
|
402
|
+
* or memory flag
|
403
|
+
* */
|
404
|
+
ctx->out_buf = ngx_calloc_buf(r->pool);
|
405
|
+
if (ctx->out_buf == NULL) {
|
406
|
+
goto failed;
|
407
|
+
}
|
408
|
+
|
409
|
+
ctx->out_buf->sync = 1;
|
410
|
+
|
411
|
+
temp = ngx_alloc_chain_link(r->pool);
|
412
|
+
if (temp == NULL) {
|
413
|
+
goto failed;
|
414
|
+
}
|
415
|
+
|
416
|
+
temp->buf = ctx->out_buf;
|
417
|
+
temp->next = NULL;
|
418
|
+
|
419
|
+
*ctx->last_out = temp;
|
420
|
+
ctx->last_out = &temp->next;
|
421
|
+
}
|
422
|
+
|
423
|
+
ctx->out_buf->last_buf = (r == r->main) ? 1 : 0;
|
424
|
+
ctx->out_buf->last_in_chain = cl->buf->last_in_chain;
|
425
|
+
|
426
|
+
break;
|
427
|
+
}
|
428
|
+
}
|
429
|
+
|
430
|
+
/* It doesn't output anything, return */
|
431
|
+
if ((ctx->out == NULL) && (ctx->busy == NULL)) {
|
432
|
+
return NGX_OK;
|
433
|
+
}
|
434
|
+
|
435
|
+
return ngx_http_subs_output(r, ctx, in);
|
436
|
+
|
437
|
+
failed:
|
438
|
+
|
439
|
+
ngx_log_error(NGX_LOG_ERR, log, 0,
|
440
|
+
"[subs_filter] ngx_http_subs_body_filter error.");
|
441
|
+
|
442
|
+
return NGX_ERROR;
|
443
|
+
}
|
444
|
+
|
445
|
+
|
446
|
+
static ngx_int_t
|
447
|
+
ngx_http_subs_body_filter_init_context(ngx_http_request_t *r, ngx_chain_t *in)
|
448
|
+
{
|
449
|
+
ngx_http_subs_ctx_t *ctx;
|
450
|
+
|
451
|
+
ctx = ngx_http_get_module_ctx(r, ngx_http_subs_filter_module);
|
452
|
+
|
453
|
+
r->connection->buffered |= NGX_HTTP_SUB_BUFFERED;
|
454
|
+
|
455
|
+
ctx->in = NULL;
|
456
|
+
|
457
|
+
if (in) {
|
458
|
+
if (ngx_chain_add_copy(r->pool, &ctx->in, in) != NGX_OK) {
|
459
|
+
return NGX_ERROR;
|
460
|
+
}
|
461
|
+
}
|
462
|
+
|
463
|
+
#if SUBS_DEBUG
|
464
|
+
if (ngx_buf_size(ctx->line_in) > 0) {
|
465
|
+
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
466
|
+
"subs line in buffer: %p, size:%uz",
|
467
|
+
ctx->line_in, ngx_buf_size(ctx->line_in));
|
468
|
+
}
|
469
|
+
#endif
|
470
|
+
|
471
|
+
#if SUBS_DEBUG
|
472
|
+
ngx_chain_t *cl;
|
473
|
+
|
474
|
+
for (cl = ctx->in; cl; cl = cl->next) {
|
475
|
+
if (cl->buf) {
|
476
|
+
ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
477
|
+
"subs in buffer:%p, size:%uz, "
|
478
|
+
"flush:%d, last_buf:%d",
|
479
|
+
cl->buf, ngx_buf_size(cl->buf),
|
480
|
+
cl->buf->flush, cl->buf->last_buf);
|
481
|
+
}
|
482
|
+
}
|
483
|
+
#endif
|
484
|
+
|
485
|
+
ctx->last_out = &ctx->out;
|
486
|
+
ctx->out_buf = NULL;
|
487
|
+
|
488
|
+
return NGX_OK;
|
489
|
+
}
|
490
|
+
|
491
|
+
|
492
|
+
static ngx_int_t
|
493
|
+
ngx_http_subs_body_filter_process_buffer(ngx_http_request_t *r, ngx_buf_t *b)
|
494
|
+
{
|
495
|
+
u_char *p, *last, *linefeed;
|
496
|
+
ngx_int_t len, rc;
|
497
|
+
ngx_http_subs_ctx_t *ctx;
|
498
|
+
|
499
|
+
ctx = ngx_http_get_module_ctx(r, ngx_http_subs_filter_module);
|
500
|
+
|
501
|
+
if (b == NULL) {
|
502
|
+
return NGX_DECLINED;
|
503
|
+
}
|
504
|
+
|
505
|
+
p = b->pos;
|
506
|
+
last = b->last;
|
507
|
+
b->pos = b->last;
|
508
|
+
|
509
|
+
ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
510
|
+
"subs process in buffer: %p %uz, line_in buffer: %p %uz",
|
511
|
+
b, last - p,
|
512
|
+
ctx->line_in, ngx_buf_size(ctx->line_in));
|
513
|
+
|
514
|
+
if ((last - p) == 0 && ngx_buf_size(ctx->line_in) == 0){
|
515
|
+
return NGX_OK;
|
516
|
+
}
|
517
|
+
|
518
|
+
if ((last - p) == 0 && ngx_buf_size(ctx->line_in) && ctx->last) {
|
519
|
+
|
520
|
+
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
521
|
+
"the last zero buffer, try to do substitution");
|
522
|
+
|
523
|
+
rc = ngx_http_subs_match(r, ctx);
|
524
|
+
if (rc < 0) {
|
525
|
+
return NGX_ERROR;
|
526
|
+
}
|
527
|
+
|
528
|
+
return NGX_OK;
|
529
|
+
}
|
530
|
+
|
531
|
+
while (p < last) {
|
532
|
+
|
533
|
+
linefeed = memchr(p, LF, last - p);
|
534
|
+
|
535
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "find linefeed: %p",
|
536
|
+
linefeed);
|
537
|
+
|
538
|
+
if (linefeed == NULL) {
|
539
|
+
|
540
|
+
if (ctx->last) {
|
541
|
+
linefeed = last - 1;
|
542
|
+
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
543
|
+
"the last buffer, not find linefeed");
|
544
|
+
}
|
545
|
+
}
|
546
|
+
|
547
|
+
if (linefeed) {
|
548
|
+
|
549
|
+
len = linefeed - p + 1;
|
550
|
+
|
551
|
+
if (buffer_append_string(ctx->line_in, p, len, r->pool) == NULL) {
|
552
|
+
return NGX_ERROR;
|
553
|
+
}
|
554
|
+
|
555
|
+
p += len;
|
556
|
+
|
557
|
+
rc = ngx_http_subs_match(r, ctx);
|
558
|
+
if (rc < 0) {
|
559
|
+
return NGX_ERROR;
|
560
|
+
}
|
561
|
+
|
562
|
+
} else {
|
563
|
+
|
564
|
+
/* Not find linefeed in this chain, save the left data to line_in */
|
565
|
+
if (buffer_append_string(ctx->line_in, p, last - p, r->pool)
|
566
|
+
== NULL) {
|
567
|
+
return NGX_ERROR;
|
568
|
+
}
|
569
|
+
|
570
|
+
break;
|
571
|
+
}
|
572
|
+
}
|
573
|
+
|
574
|
+
return NGX_OK;
|
575
|
+
}
|
576
|
+
|
577
|
+
|
578
|
+
/*
|
579
|
+
* Do the substitutions from ctx->line_in
|
580
|
+
* and output the chain buffers to ctx->out
|
581
|
+
* */
|
582
|
+
static ngx_int_t
|
583
|
+
ngx_http_subs_match(ngx_http_request_t *r, ngx_http_subs_ctx_t *ctx)
|
584
|
+
{
|
585
|
+
ngx_buf_t *src, *dst, *temp;
|
586
|
+
ngx_log_t *log;
|
587
|
+
ngx_int_t count, match_count;
|
588
|
+
sub_pair_t *pairs, *pair;
|
589
|
+
ngx_uint_t i;
|
590
|
+
|
591
|
+
count = 0;
|
592
|
+
match_count = 0;
|
593
|
+
|
594
|
+
log = r->connection->log;
|
595
|
+
|
596
|
+
src = ctx->line_in;
|
597
|
+
dst = ctx->line_dst;
|
598
|
+
|
599
|
+
pairs = (sub_pair_t *) ctx->sub_pairs->elts;
|
600
|
+
for (i = 0; i < ctx->sub_pairs->nelts; i++) {
|
601
|
+
|
602
|
+
pair = &pairs[i];
|
603
|
+
|
604
|
+
if (!pair->has_captured) {
|
605
|
+
if (pair->sub.data == NULL) {
|
606
|
+
if (ngx_http_script_run(r, &pair->sub, pair->sub_lengths->elts,
|
607
|
+
0, pair->sub_values->elts) == NULL)
|
608
|
+
{
|
609
|
+
goto failed;
|
610
|
+
}
|
611
|
+
}
|
612
|
+
|
613
|
+
} else {
|
614
|
+
pair->sub.data = NULL;
|
615
|
+
pair->sub.len = 0;
|
616
|
+
}
|
617
|
+
|
618
|
+
/* exchange the src and dst buffer */
|
619
|
+
if (dst->pos != dst->last) {
|
620
|
+
|
621
|
+
temp = src;
|
622
|
+
src = dst;
|
623
|
+
dst = temp;
|
624
|
+
|
625
|
+
ngx_buffer_init(dst);
|
626
|
+
}
|
627
|
+
|
628
|
+
if ((!pair->regex)
|
629
|
+
&& ((ngx_uint_t)(src->last - src->pos) < pair->match.len)) {
|
630
|
+
continue;
|
631
|
+
}
|
632
|
+
|
633
|
+
if (pair->once && pair->matched) {
|
634
|
+
continue;
|
635
|
+
}
|
636
|
+
|
637
|
+
if (pair->sub.data == NULL && !pair->has_captured) {
|
638
|
+
|
639
|
+
if (ngx_http_script_run(r, &pair->sub, pair->sub_lengths->elts, 0,
|
640
|
+
pair->sub_values->elts) == NULL)
|
641
|
+
{
|
642
|
+
goto failed;
|
643
|
+
}
|
644
|
+
}
|
645
|
+
|
646
|
+
/* regex substitution */
|
647
|
+
if (pair->regex || pair->insensitive) {
|
648
|
+
#if (NGX_PCRE)
|
649
|
+
count = ngx_http_subs_match_regex_substituion(r, pair, src, dst);
|
650
|
+
if (count == NGX_ERROR) {
|
651
|
+
goto failed;
|
652
|
+
}
|
653
|
+
#endif
|
654
|
+
} else {
|
655
|
+
/* fixed string substituion */
|
656
|
+
count = ngx_http_subs_match_fix_substituion(r, pair, src, dst);
|
657
|
+
if (count == NGX_ERROR) {
|
658
|
+
goto failed;
|
659
|
+
}
|
660
|
+
}
|
661
|
+
|
662
|
+
/* no match. */
|
663
|
+
if (count == 0){
|
664
|
+
continue;
|
665
|
+
}
|
666
|
+
|
667
|
+
if (src->pos < src->last) {
|
668
|
+
|
669
|
+
if (buffer_append_string(dst, src->pos, src->last - src->pos,
|
670
|
+
r->pool) == NULL) {
|
671
|
+
goto failed;
|
672
|
+
}
|
673
|
+
|
674
|
+
src->pos = src->last;
|
675
|
+
}
|
676
|
+
|
677
|
+
/* match */
|
678
|
+
match_count += count;
|
679
|
+
}
|
680
|
+
|
681
|
+
/* no match last time */
|
682
|
+
if (dst->pos == dst->last){
|
683
|
+
dst = src;
|
684
|
+
}
|
685
|
+
|
686
|
+
if (ngx_http_subs_out_chain_append(r, ctx, dst) != NGX_OK) {
|
687
|
+
goto failed;
|
688
|
+
}
|
689
|
+
|
690
|
+
ngx_buffer_init(ctx->line_in);
|
691
|
+
ngx_buffer_init(ctx->line_dst);
|
692
|
+
|
693
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "match counts: %i", match_count);
|
694
|
+
|
695
|
+
return match_count;
|
696
|
+
|
697
|
+
failed:
|
698
|
+
|
699
|
+
ngx_log_error(NGX_LOG_ERR, log, 0,
|
700
|
+
"[subs_filter] ngx_http_subs_match error.");
|
701
|
+
|
702
|
+
return -1;
|
703
|
+
}
|
704
|
+
|
705
|
+
|
706
|
+
#if (NGX_PCRE)
|
707
|
+
static ngx_int_t
|
708
|
+
ngx_http_subs_match_regex_substituion(ngx_http_request_t *r, sub_pair_t *pair,
|
709
|
+
ngx_buf_t *b, ngx_buf_t *dst)
|
710
|
+
{
|
711
|
+
ngx_str_t line;
|
712
|
+
ngx_log_t *log;
|
713
|
+
ngx_int_t rc, count = 0;
|
714
|
+
|
715
|
+
log = r->connection->log;
|
716
|
+
|
717
|
+
if (pair->captures == NULL || pair->ncaptures == 0) {
|
718
|
+
pair->ncaptures = (NGX_HTTP_MAX_CAPTURES + 1) * 3;
|
719
|
+
pair->captures = ngx_palloc(r->pool, pair->ncaptures * sizeof(int));
|
720
|
+
if (pair->captures == NULL) {
|
721
|
+
return NGX_ERROR;
|
722
|
+
}
|
723
|
+
}
|
724
|
+
|
725
|
+
while (b->pos < b->last) {
|
726
|
+
|
727
|
+
if (pair->once && pair->matched) {
|
728
|
+
break;
|
729
|
+
}
|
730
|
+
|
731
|
+
line.data = b->pos;
|
732
|
+
line.len = b->last - b->pos;
|
733
|
+
|
734
|
+
rc = ngx_regex_exec(pair->match_regex, &line,
|
735
|
+
(int *) pair->captures, pair->ncaptures);
|
736
|
+
|
737
|
+
if (rc == NGX_REGEX_NO_MATCHED) {
|
738
|
+
break;
|
739
|
+
|
740
|
+
} else if(rc < 0) {
|
741
|
+
ngx_log_error(NGX_LOG_ERR, log, 0,
|
742
|
+
ngx_regex_exec_n " failed: %i on \"%V\" using \"%V\"",
|
743
|
+
rc, &line, &pair->match);
|
744
|
+
|
745
|
+
return NGX_ERROR;
|
746
|
+
}
|
747
|
+
|
748
|
+
pair->matched++;
|
749
|
+
count++;
|
750
|
+
|
751
|
+
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, log, 0,
|
752
|
+
"regex match:%i, start:%d, end:%d ",
|
753
|
+
rc, pair->captures[0], pair->captures[1]);
|
754
|
+
|
755
|
+
if (pair->has_captured) {
|
756
|
+
r->captures = pair->captures;
|
757
|
+
r->ncaptures = pair->ncaptures;
|
758
|
+
r->captures_data = line.data;
|
759
|
+
|
760
|
+
if (ngx_http_script_run(r, &pair->sub, pair->sub_lengths->elts, 0,
|
761
|
+
pair->sub_values->elts) == NULL)
|
762
|
+
{
|
763
|
+
ngx_log_error(NGX_LOG_ALERT, log, 0,
|
764
|
+
"[subs_filter] ngx_http_script_run error.");
|
765
|
+
return NGX_ERROR;
|
766
|
+
}
|
767
|
+
}
|
768
|
+
|
769
|
+
if (buffer_append_string(dst, b->pos, pair->captures[0],
|
770
|
+
r->pool) == NULL) {
|
771
|
+
return NGX_ERROR;
|
772
|
+
}
|
773
|
+
|
774
|
+
if (buffer_append_string(dst, pair->sub.data, pair->sub.len,
|
775
|
+
r->pool) == NULL) {
|
776
|
+
return NGX_ERROR;
|
777
|
+
}
|
778
|
+
|
779
|
+
b->pos = b->pos + pair->captures[1];
|
780
|
+
}
|
781
|
+
|
782
|
+
return count;
|
783
|
+
}
|
784
|
+
#endif
|
785
|
+
|
786
|
+
|
787
|
+
/*
|
788
|
+
* Thanks to Laurent Ghigonis
|
789
|
+
* Taken from FreeBSD
|
790
|
+
* Find the first occurrence of the byte string s in byte string l.
|
791
|
+
*/
|
792
|
+
static void *
|
793
|
+
subs_memmem(const void *l, size_t l_len, const void *s, size_t s_len)
|
794
|
+
{
|
795
|
+
register char *cur, *last;
|
796
|
+
const char *cl = (const char *)l;
|
797
|
+
const char *cs = (const char *)s;
|
798
|
+
|
799
|
+
/* we need something to compare */
|
800
|
+
if (l_len == 0 || s_len == 0) {
|
801
|
+
return NULL;
|
802
|
+
}
|
803
|
+
|
804
|
+
/* "s" must be smaller or equal to "l" */
|
805
|
+
if (l_len < s_len) {
|
806
|
+
return NULL;
|
807
|
+
}
|
808
|
+
|
809
|
+
/* special case where s_len == 1 */
|
810
|
+
if (s_len == 1) {
|
811
|
+
return memchr(l, (int)*cs, l_len);
|
812
|
+
}
|
813
|
+
|
814
|
+
/* the last position where its possible to find "s" in "l" */
|
815
|
+
last = (char *)cl + l_len - s_len;
|
816
|
+
|
817
|
+
for (cur = (char *)cl; cur <= last; cur++) {
|
818
|
+
if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0) {
|
819
|
+
return cur;
|
820
|
+
}
|
821
|
+
}
|
822
|
+
|
823
|
+
return NULL;
|
824
|
+
}
|
825
|
+
|
826
|
+
|
827
|
+
static ngx_int_t
|
828
|
+
ngx_http_subs_match_fix_substituion(ngx_http_request_t *r,
|
829
|
+
sub_pair_t *pair, ngx_buf_t *b, ngx_buf_t *dst)
|
830
|
+
{
|
831
|
+
u_char *sub_start;
|
832
|
+
ngx_int_t count = 0;
|
833
|
+
|
834
|
+
while(b->pos < b->last) {
|
835
|
+
if (pair->once && pair->matched) {
|
836
|
+
break;
|
837
|
+
}
|
838
|
+
|
839
|
+
sub_start = subs_memmem(b->pos, b->last - b->pos,
|
840
|
+
pair->match.data, pair->match.len);
|
841
|
+
if (sub_start == NULL) {
|
842
|
+
break;
|
843
|
+
}
|
844
|
+
|
845
|
+
pair->matched++;
|
846
|
+
count++;
|
847
|
+
|
848
|
+
if (buffer_append_string(dst, b->pos, sub_start - b->pos,
|
849
|
+
r->pool) == NULL) {
|
850
|
+
return NGX_ERROR;
|
851
|
+
}
|
852
|
+
|
853
|
+
if (buffer_append_string(dst, pair->sub.data, pair->sub.len,
|
854
|
+
r->pool) == NULL) {
|
855
|
+
return NGX_ERROR;
|
856
|
+
}
|
857
|
+
|
858
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
859
|
+
"fixed string match: %p", sub_start);
|
860
|
+
|
861
|
+
b->pos = sub_start + pair->match.len;
|
862
|
+
|
863
|
+
if ((ngx_uint_t)(b->last - b->pos) < pair->match.len)
|
864
|
+
break;
|
865
|
+
}
|
866
|
+
|
867
|
+
return count;
|
868
|
+
}
|
869
|
+
|
870
|
+
|
871
|
+
static ngx_buf_t *
|
872
|
+
buffer_append_string(ngx_buf_t *b, u_char *s, size_t len, ngx_pool_t *pool)
|
873
|
+
{
|
874
|
+
u_char *p;
|
875
|
+
ngx_uint_t capacity, size;
|
876
|
+
|
877
|
+
if (len > (size_t) (b->end - b->last)) {
|
878
|
+
|
879
|
+
size = b->last - b->pos;
|
880
|
+
|
881
|
+
capacity = b->end - b->start;
|
882
|
+
capacity <<= 1;
|
883
|
+
|
884
|
+
if (capacity < (size + len)) {
|
885
|
+
capacity = size + len;
|
886
|
+
}
|
887
|
+
|
888
|
+
p = ngx_palloc(pool, capacity);
|
889
|
+
if (p == NULL) {
|
890
|
+
return NULL;
|
891
|
+
}
|
892
|
+
|
893
|
+
b->last = ngx_copy(p, b->pos, size);
|
894
|
+
|
895
|
+
b->start = b->pos = p;
|
896
|
+
b->end = p + capacity;
|
897
|
+
}
|
898
|
+
|
899
|
+
b->last = ngx_copy(b->last, s, len);
|
900
|
+
|
901
|
+
return b;
|
902
|
+
}
|
903
|
+
|
904
|
+
|
905
|
+
static ngx_int_t
|
906
|
+
ngx_http_subs_out_chain_append(ngx_http_request_t *r,
|
907
|
+
ngx_http_subs_ctx_t *ctx, ngx_buf_t *b)
|
908
|
+
{
|
909
|
+
size_t len, capcity;
|
910
|
+
|
911
|
+
if (b == NULL || ngx_buf_size(b) == 0) {
|
912
|
+
return NGX_OK;
|
913
|
+
}
|
914
|
+
|
915
|
+
if (ctx->out_buf == NULL) {
|
916
|
+
if (ngx_http_subs_get_chain_buf(r, ctx) != NGX_OK) {
|
917
|
+
return NGX_ERROR;
|
918
|
+
}
|
919
|
+
}
|
920
|
+
|
921
|
+
while (1) {
|
922
|
+
|
923
|
+
len = (size_t) ngx_buf_size(b);
|
924
|
+
if (len == 0) {
|
925
|
+
break;
|
926
|
+
}
|
927
|
+
|
928
|
+
capcity = ctx->out_buf->end - ctx->out_buf->last;
|
929
|
+
|
930
|
+
if (len <= capcity) {
|
931
|
+
ctx->out_buf->last = ngx_copy(ctx->out_buf->last, b->pos, len);
|
932
|
+
b->pos += len;
|
933
|
+
break;
|
934
|
+
|
935
|
+
} else {
|
936
|
+
ctx->out_buf->last = ngx_copy(ctx->out_buf->last,
|
937
|
+
b->pos, capcity);
|
938
|
+
}
|
939
|
+
|
940
|
+
b->pos += capcity;
|
941
|
+
|
942
|
+
/* get more buffers */
|
943
|
+
if (ngx_http_subs_get_chain_buf(r, ctx) != NGX_OK) {
|
944
|
+
return NGX_ERROR;
|
945
|
+
}
|
946
|
+
}
|
947
|
+
|
948
|
+
return NGX_OK;
|
949
|
+
}
|
950
|
+
|
951
|
+
|
952
|
+
static ngx_int_t
|
953
|
+
ngx_http_subs_get_chain_buf(ngx_http_request_t *r,
|
954
|
+
ngx_http_subs_ctx_t *ctx)
|
955
|
+
{
|
956
|
+
ngx_chain_t *temp;
|
957
|
+
ngx_http_subs_loc_conf_t *slcf;
|
958
|
+
|
959
|
+
slcf = ngx_http_get_module_loc_conf(r, ngx_http_subs_filter_module);
|
960
|
+
|
961
|
+
if (ctx->free) {
|
962
|
+
temp = ctx->free;
|
963
|
+
ctx->free = ctx->free->next;
|
964
|
+
|
965
|
+
} else {
|
966
|
+
temp = ngx_alloc_chain_link(r->pool);
|
967
|
+
if (temp == NULL) {
|
968
|
+
return NGX_ERROR;
|
969
|
+
}
|
970
|
+
|
971
|
+
temp->buf = ngx_create_temp_buf(r->pool, slcf->bufs.size);
|
972
|
+
if (temp->buf == NULL) {
|
973
|
+
return NGX_ERROR;
|
974
|
+
}
|
975
|
+
|
976
|
+
temp->buf->tag = (ngx_buf_tag_t) &ngx_http_subs_filter_module;
|
977
|
+
temp->buf->recycled = 1;
|
978
|
+
|
979
|
+
/* TODO: limit the buffer number */
|
980
|
+
ctx->bufs++;
|
981
|
+
}
|
982
|
+
|
983
|
+
temp->next = NULL;
|
984
|
+
|
985
|
+
ctx->out_buf = temp->buf;
|
986
|
+
*ctx->last_out = temp;
|
987
|
+
ctx->last_out = &temp->next;
|
988
|
+
|
989
|
+
return NGX_OK;
|
990
|
+
}
|
991
|
+
|
992
|
+
|
993
|
+
static ngx_int_t
|
994
|
+
ngx_http_subs_output(ngx_http_request_t *r, ngx_http_subs_ctx_t *ctx,
|
995
|
+
ngx_chain_t *in)
|
996
|
+
{
|
997
|
+
ngx_int_t rc;
|
998
|
+
|
999
|
+
#if SUBS_DEBUG
|
1000
|
+
ngx_buf_t *b;
|
1001
|
+
ngx_chain_t *cl;
|
1002
|
+
|
1003
|
+
for (cl = ctx->out; cl; cl = cl->next) {
|
1004
|
+
|
1005
|
+
b = cl->buf;
|
1006
|
+
|
1007
|
+
ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1008
|
+
"subs out buffer:%p, size:%uz, t:%d, l:%d",
|
1009
|
+
b, ngx_buf_size(b), b->temporary, b->last_buf);
|
1010
|
+
}
|
1011
|
+
#endif
|
1012
|
+
|
1013
|
+
/* ctx->out may not output all the data */
|
1014
|
+
rc = ngx_http_next_body_filter(r, ctx->out);
|
1015
|
+
if (rc == NGX_ERROR) {
|
1016
|
+
return NGX_ERROR;
|
1017
|
+
}
|
1018
|
+
|
1019
|
+
#if SUBS_DEBUG
|
1020
|
+
for (cl = ctx->out; cl; cl = cl->next) {
|
1021
|
+
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1022
|
+
"subs out end: %p %uz", cl->buf, ngx_buf_size(cl->buf));
|
1023
|
+
}
|
1024
|
+
#endif
|
1025
|
+
|
1026
|
+
#if defined(nginx_version) && (nginx_version >= 1001004)
|
1027
|
+
ngx_chain_update_chains(r->pool, &ctx->free, &ctx->busy, &ctx->out,
|
1028
|
+
(ngx_buf_tag_t) &ngx_http_subs_filter_module);
|
1029
|
+
#else
|
1030
|
+
ngx_chain_update_chains(&ctx->free, &ctx->busy, &ctx->out,
|
1031
|
+
(ngx_buf_tag_t) &ngx_http_subs_filter_module);
|
1032
|
+
#endif
|
1033
|
+
|
1034
|
+
if (ctx->last) {
|
1035
|
+
r->connection->buffered &= ~NGX_HTTP_SUB_BUFFERED;
|
1036
|
+
}
|
1037
|
+
|
1038
|
+
return rc;
|
1039
|
+
}
|
1040
|
+
|
1041
|
+
|
1042
|
+
static char *
|
1043
|
+
ngx_http_subs_filter( ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
1044
|
+
{
|
1045
|
+
ngx_int_t n;
|
1046
|
+
ngx_uint_t i;
|
1047
|
+
ngx_str_t *value;
|
1048
|
+
ngx_str_t *option;
|
1049
|
+
sub_pair_t *pair;
|
1050
|
+
ngx_http_subs_loc_conf_t *slcf = conf;
|
1051
|
+
ngx_http_script_compile_t sc;
|
1052
|
+
|
1053
|
+
value = cf->args->elts;
|
1054
|
+
|
1055
|
+
if (slcf->sub_pairs == NULL) {
|
1056
|
+
slcf->sub_pairs = ngx_array_create(cf->pool, 4, sizeof(sub_pair_t));
|
1057
|
+
if (slcf->sub_pairs == NULL) {
|
1058
|
+
return NGX_CONF_ERROR;
|
1059
|
+
}
|
1060
|
+
}
|
1061
|
+
|
1062
|
+
pair = ngx_array_push(slcf->sub_pairs);
|
1063
|
+
if (pair == NULL) {
|
1064
|
+
return NGX_CONF_ERROR;
|
1065
|
+
}
|
1066
|
+
ngx_memzero(pair, sizeof(sub_pair_t));
|
1067
|
+
|
1068
|
+
pair->match = value[1];
|
1069
|
+
|
1070
|
+
n = ngx_http_script_variables_count(&value[2]);
|
1071
|
+
if (n != 0) {
|
1072
|
+
ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
|
1073
|
+
|
1074
|
+
sc.cf = cf;
|
1075
|
+
sc.source = &value[2];
|
1076
|
+
sc.lengths = &pair->sub_lengths;
|
1077
|
+
sc.values = &pair->sub_values;
|
1078
|
+
sc.variables = n;
|
1079
|
+
sc.complete_lengths = 1;
|
1080
|
+
sc.complete_values = 1;
|
1081
|
+
|
1082
|
+
if (ngx_http_script_compile(&sc) != NGX_OK) {
|
1083
|
+
return NGX_CONF_ERROR;
|
1084
|
+
}
|
1085
|
+
|
1086
|
+
/* Dirty hack, if it has captured variables */
|
1087
|
+
if (sc.captures_mask) {
|
1088
|
+
pair->has_captured = 1;
|
1089
|
+
}
|
1090
|
+
|
1091
|
+
} else {
|
1092
|
+
pair->sub = value[2];
|
1093
|
+
}
|
1094
|
+
|
1095
|
+
if (cf->args->nelts > 3) {
|
1096
|
+
option = &value[3];
|
1097
|
+
for(i = 0; i < option->len; i++) {
|
1098
|
+
|
1099
|
+
switch (option->data[i]){
|
1100
|
+
case 'i':
|
1101
|
+
pair->insensitive = 1;
|
1102
|
+
break;
|
1103
|
+
|
1104
|
+
case 'o':
|
1105
|
+
pair->once = 1;
|
1106
|
+
break;
|
1107
|
+
|
1108
|
+
case 'r':
|
1109
|
+
pair->regex = 1;
|
1110
|
+
break;
|
1111
|
+
|
1112
|
+
case 'g':
|
1113
|
+
default:
|
1114
|
+
continue;
|
1115
|
+
}
|
1116
|
+
}
|
1117
|
+
}
|
1118
|
+
|
1119
|
+
if (pair->regex || pair->insensitive) {
|
1120
|
+
if (ngx_http_subs_filter_regex_compile(pair, &sc, cf) == NGX_ERROR) {
|
1121
|
+
return NGX_CONF_ERROR;
|
1122
|
+
}
|
1123
|
+
}
|
1124
|
+
|
1125
|
+
return NGX_CONF_OK;
|
1126
|
+
}
|
1127
|
+
|
1128
|
+
|
1129
|
+
static ngx_int_t
|
1130
|
+
ngx_http_subs_filter_regex_compile(sub_pair_t *pair,
|
1131
|
+
ngx_http_script_compile_t *sc, ngx_conf_t *cf)
|
1132
|
+
{
|
1133
|
+
/* Caseless match can only be implemented in regex. */
|
1134
|
+
#if (NGX_PCRE)
|
1135
|
+
u_char errstr[NGX_MAX_CONF_ERRSTR];
|
1136
|
+
ngx_int_t n, options;
|
1137
|
+
ngx_str_t err, *value;
|
1138
|
+
ngx_uint_t mask;
|
1139
|
+
|
1140
|
+
value = cf->args->elts;
|
1141
|
+
|
1142
|
+
err.len = NGX_MAX_CONF_ERRSTR;
|
1143
|
+
err.data = errstr;
|
1144
|
+
|
1145
|
+
options = (pair->insensitive ? NGX_REGEX_CASELESS : 0);
|
1146
|
+
|
1147
|
+
/* make nginx-0.8.25+ happy */
|
1148
|
+
#if defined(nginx_version) && nginx_version >= 8025
|
1149
|
+
ngx_regex_compile_t rc;
|
1150
|
+
|
1151
|
+
rc.pattern = pair->match;
|
1152
|
+
rc.pool = cf->pool;
|
1153
|
+
rc.err = err;
|
1154
|
+
rc.options = options;
|
1155
|
+
|
1156
|
+
if (ngx_regex_compile(&rc) != NGX_OK) {
|
1157
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
|
1158
|
+
return NGX_ERROR;
|
1159
|
+
}
|
1160
|
+
|
1161
|
+
pair->match_regex = rc.regex;
|
1162
|
+
|
1163
|
+
#else
|
1164
|
+
pair->match_regex = ngx_regex_compile(&pair->match, options,
|
1165
|
+
cf->pool, &err);
|
1166
|
+
#endif
|
1167
|
+
|
1168
|
+
if (pair->match_regex == NULL) {
|
1169
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &err);
|
1170
|
+
return NGX_ERROR;
|
1171
|
+
}
|
1172
|
+
|
1173
|
+
n = ngx_http_subs_regex_capture_count(pair->match_regex);
|
1174
|
+
|
1175
|
+
if (pair->has_captured) {
|
1176
|
+
mask = ((1 << (n + 1)) - 1);
|
1177
|
+
if ( mask < sc->captures_mask ) {
|
1178
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
1179
|
+
"You want to capture too many regex substrings, "
|
1180
|
+
"more than %i in \"%V\"",
|
1181
|
+
n, &value[2]);
|
1182
|
+
|
1183
|
+
return NGX_ERROR;
|
1184
|
+
}
|
1185
|
+
}
|
1186
|
+
#else
|
1187
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
1188
|
+
"the using of the regex \"%V\" requires PCRE library",
|
1189
|
+
&pair->match);
|
1190
|
+
|
1191
|
+
return NGX_ERROR;
|
1192
|
+
#endif
|
1193
|
+
|
1194
|
+
return NGX_OK;
|
1195
|
+
}
|
1196
|
+
|
1197
|
+
|
1198
|
+
#if (NGX_PCRE)
|
1199
|
+
static ngx_int_t
|
1200
|
+
ngx_http_subs_regex_capture_count(ngx_regex_t *re)
|
1201
|
+
{
|
1202
|
+
int rc, n;
|
1203
|
+
|
1204
|
+
n = 0;
|
1205
|
+
|
1206
|
+
#if defined(nginx_version) && nginx_version >= 1002002
|
1207
|
+
rc = pcre_fullinfo(re->code, NULL, PCRE_INFO_CAPTURECOUNT, &n);
|
1208
|
+
#elif defined(nginx_version) && nginx_version >= 1001012
|
1209
|
+
rc = pcre_fullinfo(re->pcre, NULL, PCRE_INFO_CAPTURECOUNT, &n);
|
1210
|
+
#else
|
1211
|
+
rc = pcre_fullinfo(re, NULL, PCRE_INFO_CAPTURECOUNT, &n);
|
1212
|
+
#endif
|
1213
|
+
|
1214
|
+
if (rc < 0) {
|
1215
|
+
return (ngx_int_t) rc;
|
1216
|
+
}
|
1217
|
+
|
1218
|
+
return (ngx_int_t) n;
|
1219
|
+
}
|
1220
|
+
#endif
|
1221
|
+
|
1222
|
+
|
1223
|
+
static void *
|
1224
|
+
ngx_http_subs_create_conf(ngx_conf_t *cf)
|
1225
|
+
{
|
1226
|
+
ngx_http_subs_loc_conf_t *conf;
|
1227
|
+
|
1228
|
+
conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_subs_loc_conf_t));
|
1229
|
+
if (conf == NULL) {
|
1230
|
+
return NGX_CONF_ERROR;
|
1231
|
+
}
|
1232
|
+
|
1233
|
+
/*
|
1234
|
+
* set by ngx_pcalloc():
|
1235
|
+
*
|
1236
|
+
* conf->sub_pairs = NULL;
|
1237
|
+
* conf->types = {NULL, 0};
|
1238
|
+
* conf->types_keys = NULL;
|
1239
|
+
* conf->bufs.num = 0;
|
1240
|
+
*/
|
1241
|
+
|
1242
|
+
conf->line_buffer_size = NGX_CONF_UNSET_SIZE;
|
1243
|
+
conf->bypass = NGX_CONF_UNSET_PTR;
|
1244
|
+
|
1245
|
+
return conf;
|
1246
|
+
}
|
1247
|
+
|
1248
|
+
|
1249
|
+
static char *
|
1250
|
+
ngx_http_subs_merge_conf(ngx_conf_t *cf, void *parent, void *child)
|
1251
|
+
{
|
1252
|
+
ngx_http_subs_loc_conf_t *prev = parent;
|
1253
|
+
ngx_http_subs_loc_conf_t *conf = child;
|
1254
|
+
|
1255
|
+
if (conf->sub_pairs == NULL) {
|
1256
|
+
if (prev->sub_pairs == NULL) {
|
1257
|
+
conf->sub_pairs = ngx_array_create(cf->pool, 4, sizeof(sub_pair_t));
|
1258
|
+
if (conf->sub_pairs == NULL) {
|
1259
|
+
return NGX_CONF_ERROR;
|
1260
|
+
}
|
1261
|
+
} else {
|
1262
|
+
conf->sub_pairs = prev->sub_pairs;
|
1263
|
+
}
|
1264
|
+
}
|
1265
|
+
|
1266
|
+
ngx_conf_merge_ptr_value(conf->bypass,
|
1267
|
+
prev->bypass, NULL);
|
1268
|
+
|
1269
|
+
if (ngx_http_merge_types(cf, &conf->types_keys, &conf->types,
|
1270
|
+
&prev->types_keys, &prev->types,
|
1271
|
+
ngx_http_html_default_types)
|
1272
|
+
!= NGX_OK)
|
1273
|
+
{
|
1274
|
+
return NGX_CONF_ERROR;
|
1275
|
+
}
|
1276
|
+
|
1277
|
+
ngx_conf_merge_size_value(conf->line_buffer_size,
|
1278
|
+
prev->line_buffer_size, 8 * ngx_pagesize);
|
1279
|
+
|
1280
|
+
/* Default total buffer size is 128k */
|
1281
|
+
ngx_conf_merge_bufs_value(conf->bufs, prev->bufs,
|
1282
|
+
(128 * 1024) / ngx_pagesize, ngx_pagesize);
|
1283
|
+
|
1284
|
+
return NGX_CONF_OK;
|
1285
|
+
}
|
1286
|
+
|
1287
|
+
|
1288
|
+
static ngx_int_t
|
1289
|
+
ngx_http_subs_filter_init(ngx_conf_t *cf)
|
1290
|
+
{
|
1291
|
+
ngx_http_next_header_filter = ngx_http_top_header_filter;
|
1292
|
+
ngx_http_top_header_filter = ngx_http_subs_header_filter;
|
1293
|
+
|
1294
|
+
ngx_http_next_body_filter = ngx_http_top_body_filter;
|
1295
|
+
ngx_http_top_body_filter = ngx_http_subs_body_filter;
|
1296
|
+
|
1297
|
+
return NGX_OK;
|
1298
|
+
}
|