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,37 @@
|
|
1
|
+
# Change Log
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
## Unreleased
|
5
|
+
### Added
|
6
|
+
- New feature: Allow setting the default sort criterion using the
|
7
|
+
`fancyindex_default_sort` configuration directive. (Patch by
|
8
|
+
Алексей Урбанский).
|
9
|
+
- New feature: Allos changing the maximum length of file names, using
|
10
|
+
the `fancyindex_name_length` configuration directive. (Patch by
|
11
|
+
Martin Herkt).
|
12
|
+
### Changed
|
13
|
+
- Renames `NEWS.rst` to `CHANGELOG.md`, which follows the recommendations
|
14
|
+
from [Keep a Change Log](http://keepachangelog.com/).
|
15
|
+
|
16
|
+
## 0.3.4 - 2014-09-03
|
17
|
+
### Added
|
18
|
+
- Viewport is now defined in the generated HTML, which works better
|
19
|
+
for mobile devices.
|
20
|
+
### Changed
|
21
|
+
- Even-odd row styling moved to the CSS using :nth-child(). This
|
22
|
+
makes the HTML served to clients smaller.
|
23
|
+
|
24
|
+
## 0.3.3 - 2013-10-25
|
25
|
+
### Added
|
26
|
+
- New feature: table headers in the default template are now clickable
|
27
|
+
to set the sorting criteria and direction of the index entries.
|
28
|
+
(https://github.com/aperezdc/ngx-fancyindex/issues/7)
|
29
|
+
|
30
|
+
## 0.3.2 - 2013-06-05
|
31
|
+
### Fixed
|
32
|
+
- Solved a bug that would leave certain clients stalled forever.
|
33
|
+
- Improved handling of subrequests for non-builtin headers/footers.
|
34
|
+
|
35
|
+
## 0.3.1 - 2011-04-04
|
36
|
+
### Added
|
37
|
+
- `NEWS.rst` file, to act as change log.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Fancy Index module Hacking HOW-TO
|
2
|
+
|
3
|
+
## How to modify the template
|
4
|
+
|
5
|
+
The template is in the `template.html` file. Note that comment markers are
|
6
|
+
used to control how the `template.awk` Awk script generates the C header
|
7
|
+
which gets ultimately included in the compiled object code. Comment markers
|
8
|
+
have the `<!-- var identifier -->` format. Here `identifier` must be
|
9
|
+
a valid C identifier. All the text following the marker until the next
|
10
|
+
marker will be flattened into a C string.
|
11
|
+
|
12
|
+
If the identifier is `NONE` (capitalized) the text from that marker up to
|
13
|
+
the next marker will be discarded.
|
14
|
+
|
15
|
+
|
16
|
+
## Regenerating the C header
|
17
|
+
|
18
|
+
You will need Awk. I hope any decent implementation will do, but the GNU one
|
19
|
+
is known to work flawlessly. Just do:
|
20
|
+
|
21
|
+
$ awk -f template.awk template.html > template.h
|
22
|
+
|
23
|
+
If your copy of `awk` is not the GNU implementation, you will need to
|
24
|
+
install it and use `gawk` instead in the command line above.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Redistribution and use in source and binary forms, with or without
|
2
|
+
modification, are permitted provided that the following conditions
|
3
|
+
are met:
|
4
|
+
1. Redistributions of source code must retain the above copyright
|
5
|
+
notice, this list of conditions and the following disclaimer.
|
6
|
+
2. Redistributions in binary form must reproduce the above copyright
|
7
|
+
notice, this list of conditions and the following disclaimer in the
|
8
|
+
documentation and/or other materials provided with the distribution.
|
9
|
+
|
10
|
+
THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
11
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
12
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
13
|
+
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
14
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
15
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
16
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
17
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
18
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
19
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
20
|
+
SUCH DAMAGE.
|
@@ -0,0 +1,182 @@
|
|
1
|
+
========================
|
2
|
+
Nginx Fancy Index module
|
3
|
+
========================
|
4
|
+
|
5
|
+
.. image:: https://drone.io/github.com/aperezdc/ngx-fancyindex/status.png
|
6
|
+
:target: https://drone.io/github.com/aperezdc/ngx-fancyindex/latest
|
7
|
+
:alt: Build Status
|
8
|
+
|
9
|
+
.. contents::
|
10
|
+
|
11
|
+
The Fancy Index module makes possible the generation of file listings, like
|
12
|
+
the built-in `autoindex <http://wiki.nginx.org/NginxHttpAutoindexModule>`__
|
13
|
+
module does, but adding a touch of style. This is possible because the module
|
14
|
+
module allows a certain degree of customization of the generated content:
|
15
|
+
|
16
|
+
* Custom headers. Either local or stored remotely.
|
17
|
+
* Custom footers. Either local or stored remotely.
|
18
|
+
* Add you own CSS style rules.
|
19
|
+
* Allow choosing to sort elements by name (default), modification time, or
|
20
|
+
size; both ascending (default), or descending.
|
21
|
+
|
22
|
+
This module is designed to work with Nginx_, a high performance open source web
|
23
|
+
server written by `Igor Sysoev <http://sysoev.ru>`__.
|
24
|
+
|
25
|
+
|
26
|
+
Requirements
|
27
|
+
============
|
28
|
+
|
29
|
+
You will need the sources for Nginx_. Any version starting from the 0.7
|
30
|
+
series onwards will work. Note that the modules *might* compile with
|
31
|
+
versions in the 0.6 series by applying ``nginx-0.6-support.patch``, but this
|
32
|
+
is unsupported (YMMV).
|
33
|
+
|
34
|
+
|
35
|
+
Building
|
36
|
+
========
|
37
|
+
|
38
|
+
1. Unpack the Nginx_ sources::
|
39
|
+
|
40
|
+
$ gunzip -c nginx-?.?.?.tar.gz | tar -xvf -
|
41
|
+
|
42
|
+
2. Unpack the sources for the fancy indexing module::
|
43
|
+
|
44
|
+
$ gunzip -c nginx-fancyindex-?.?.?.tar.gz | tar -xvf -
|
45
|
+
|
46
|
+
3. Change to the directory which contains the Nginx_ sources, run the
|
47
|
+
configuration script with the desired options and be sure to put an
|
48
|
+
``--add-module`` flag pointing to the directory which contains the source
|
49
|
+
of the fancy indexing module::
|
50
|
+
|
51
|
+
$ cd nginx-?.?.?
|
52
|
+
$ ./configure --add-module=../nginx-fancyindex-?.?.? [extra desired options]
|
53
|
+
|
54
|
+
4. Build and install the software::
|
55
|
+
|
56
|
+
$ make
|
57
|
+
|
58
|
+
And then, as ``root``::
|
59
|
+
|
60
|
+
# make install
|
61
|
+
|
62
|
+
5. Configure Nginx_ by using the modules' configuration directives_.
|
63
|
+
|
64
|
+
|
65
|
+
Example
|
66
|
+
=======
|
67
|
+
|
68
|
+
You can test the default built-in style by adding the following lines into
|
69
|
+
a ``server`` section in your Nginx_ configuration file::
|
70
|
+
|
71
|
+
location / {
|
72
|
+
fancyindex on; # Enable fancy indexes.
|
73
|
+
fancyindex_exact_size off; # Output human-readable file sizes.
|
74
|
+
}
|
75
|
+
|
76
|
+
|
77
|
+
Advanced Theming
|
78
|
+
~~~~~~~~~~~~~~~~
|
79
|
+
|
80
|
+
For a more elaborate example using `fancyindex_header`_ and
|
81
|
+
`fancyindex_footer`_ you can check `nice theme
|
82
|
+
<https://github.com/TheInsomniac/Nginx-Fancyindex-Theme>`__
|
83
|
+
designed by `@TheInsomniac <https://github.com/TheInsomniac>`__.
|
84
|
+
|
85
|
+
|
86
|
+
Directives
|
87
|
+
==========
|
88
|
+
|
89
|
+
fancyindex
|
90
|
+
~~~~~~~~~~
|
91
|
+
:Syntax: *fancyindex* [*on* | *off*]
|
92
|
+
:Default: fancyindex off
|
93
|
+
:Context: http, server, location
|
94
|
+
:Description:
|
95
|
+
Enables or disables fancy directory indexes.
|
96
|
+
|
97
|
+
fancyindex_default_sort
|
98
|
+
~~~~~~~~~~~~~~~~~~~~~~~
|
99
|
+
:Syntax: *fancyindex_default_sort* [*name* | *size* | *date* | *name_desc* | *size_desc* | *date_desc*]
|
100
|
+
:Default: fancyindex_default_sort name
|
101
|
+
:Context: http, server, location
|
102
|
+
:Description:
|
103
|
+
Defines sorting criterion by default.
|
104
|
+
|
105
|
+
fancyindex_css_href
|
106
|
+
~~~~~~~~~~~~~~~~~~~
|
107
|
+
:Syntax: *fancyindex_css_href uri*
|
108
|
+
:Default: fancyindex_css_href ""
|
109
|
+
:Context: http, server, location
|
110
|
+
:Description:
|
111
|
+
Allows inserting a link to a CSS style sheet in generated listings. The
|
112
|
+
provided *uri* parameter will be inserted as-is in a ``<link>`` HTML tag.
|
113
|
+
The link is inserted after the built-in CSS rules, so you can override the
|
114
|
+
default styles.
|
115
|
+
|
116
|
+
fancyindex_exact_size
|
117
|
+
~~~~~~~~~~~~~~~~~~~~~
|
118
|
+
:Syntax: *fancyindex_exact_size* [*on* | *off*]
|
119
|
+
:Default: fancyindex_exact_size on
|
120
|
+
:Context: http, server, location
|
121
|
+
:Description:
|
122
|
+
Defines how to represent file sizes in the directory listing; either
|
123
|
+
accurately, or rounding off to the kilobyte, the megabyte and the
|
124
|
+
gigabyte.
|
125
|
+
|
126
|
+
fancyindex_name_length
|
127
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
128
|
+
:Syntax: *fancyindex_name_length length*
|
129
|
+
:Default: fancyindex_name_length 50
|
130
|
+
:Context: http, server, location
|
131
|
+
:Description:
|
132
|
+
Defines the maximum file name length limit in bytes.
|
133
|
+
|
134
|
+
fancyindex_footer
|
135
|
+
~~~~~~~~~~~~~~~~~
|
136
|
+
:Syntax: *fancyindex_footer path*
|
137
|
+
:Default: fancyindex_footer ""
|
138
|
+
:Context: http, server, location
|
139
|
+
:Description:
|
140
|
+
Specifies which file should be inserted at the foot of directory listings.
|
141
|
+
If set to an empty string, the default footer supplied by the module will
|
142
|
+
be sent.
|
143
|
+
|
144
|
+
.. warning:: When inserting custom header/footer a subrequest will be
|
145
|
+
issued so potentially any URL can be used as source for them. Although it
|
146
|
+
will work with external URLs, only using internal ones is supported.
|
147
|
+
External URLs are totally untested and using them will make Nginx_ block
|
148
|
+
while waiting for the subrequest to complete. If you feel like external
|
149
|
+
header/footer is a must-have for you, please
|
150
|
+
`let me know <mailto:aperez@igalia.com>`__.
|
151
|
+
|
152
|
+
fancyindex_header
|
153
|
+
~~~~~~~~~~~~~~~~~
|
154
|
+
:Syntax: *fancyindex_header path*
|
155
|
+
:Default: fancyindex_header ""
|
156
|
+
:Context: http, server, location
|
157
|
+
:Description:
|
158
|
+
Specifies which file should be inserted at the head of directory listings.
|
159
|
+
If set to an empty string, the default header supplied by the module will
|
160
|
+
be sent.
|
161
|
+
|
162
|
+
fancyindex_ignore
|
163
|
+
~~~~~~~~~~~~~~~~~
|
164
|
+
:Syntax: *fancyindex_ignore string1 [string2 [... stringN]]*
|
165
|
+
:Default: No default.
|
166
|
+
:Context: http, server, location
|
167
|
+
:Description:
|
168
|
+
Specifies a list of file names which will be not be shown in generated
|
169
|
+
listings. If Nginx was built with PCRE support strings are interpreted as
|
170
|
+
regular expressions.
|
171
|
+
|
172
|
+
fancyindex_localtime
|
173
|
+
~~~~~~~~~~~~~~~~~~~~
|
174
|
+
:Syntax: *fancyindex_localtime* [*on* | *off*]
|
175
|
+
:Default: fancyindex_localtime off
|
176
|
+
:Context: http, server, location
|
177
|
+
:Description:
|
178
|
+
Enables showing file times as local time. Default is “off” (GMT time).
|
179
|
+
|
180
|
+
.. _nginx: http://nginx.net
|
181
|
+
|
182
|
+
.. vim:ft=rst:spell:spelllang=en:
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# vim:ft=sh:
|
2
|
+
ngx_addon_name=ngx_http_fancyindex_module
|
3
|
+
|
4
|
+
# XXX: Insert fancyindex module *after* index module!
|
5
|
+
#
|
6
|
+
HTTP_MODULES=`echo "${HTTP_MODULES}" | sed -e \
|
7
|
+
's/ngx_http_index_module/ngx_http_fancyindex_module ngx_http_index_module/'`
|
8
|
+
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fancyindex_module.c"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
=== modified file 'ngx_http_fancyindex_module.c'
|
2
|
+
--- ngx_http_fancyindex_module.c 2008-09-11 17:55:52 +0000
|
3
|
+
+++ ngx_http_fancyindex_module.c 2008-12-10 01:33:43 +0000
|
4
|
+
@@ -383,7 +383,7 @@
|
5
|
+
entry->mtime = ngx_de_mtime(&dir);
|
6
|
+
entry->size = ngx_de_size(&dir);
|
7
|
+
entry->utf_len = (r->utf8)
|
8
|
+
- ? ngx_utf8_length(entry->name.data, entry->name.len)
|
9
|
+
+ ? ngx_utf_length(entry->name.data, entry->name.len)
|
10
|
+
: len;
|
11
|
+
}
|
12
|
+
|
13
|
+
@@ -478,8 +478,7 @@
|
14
|
+
copy = NGX_HTTP_FANCYINDEX_NAME_LEN + 1;
|
15
|
+
}
|
16
|
+
|
17
|
+
- b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data,
|
18
|
+
- copy, entry[i].name.len);
|
19
|
+
+ b->last = ngx_utf_cpystrn(b->last, entry[i].name.data, copy);
|
20
|
+
last = b->last;
|
21
|
+
|
22
|
+
} else {
|
23
|
+
|
@@ -0,0 +1,1305 @@
|
|
1
|
+
/*
|
2
|
+
* ngx_http_fancyindex_module.c
|
3
|
+
* Copyright © 2007-2013 Adrian Perez <aperez@igalia.com>
|
4
|
+
*
|
5
|
+
* Module used for fancy indexing of directories. Features and differences
|
6
|
+
* with the stock nginx autoindex module:
|
7
|
+
*
|
8
|
+
* - Output is a table instead of a <pre> element with embedded <a> links.
|
9
|
+
* - Header and footer may be added to every generated directory listing.
|
10
|
+
* - Default header and/or footer are generated if custom ones are not
|
11
|
+
* configured. Files used for header and footer can only be local path
|
12
|
+
* names (i.e. you cannot insert the result of a subrequest.)
|
13
|
+
* - Proper HTML is generated: it should validate both as XHTML 1.0 Strict
|
14
|
+
* and HTML 4.01.
|
15
|
+
*
|
16
|
+
* Base functionality heavy based upon the stock nginx autoindex module,
|
17
|
+
* which in turn was made by Igor Sysoev, like the majority of nginx.
|
18
|
+
*
|
19
|
+
* Distributed under terms of the BSD license.
|
20
|
+
*/
|
21
|
+
|
22
|
+
#include <ngx_config.h>
|
23
|
+
#include <ngx_core.h>
|
24
|
+
#include <ngx_http.h>
|
25
|
+
#include <ngx_log.h>
|
26
|
+
|
27
|
+
#include "template.h"
|
28
|
+
|
29
|
+
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
30
|
+
# define ngx_force_inline __attribute__((__always_inline__))
|
31
|
+
#else /* !__GNUC__ */
|
32
|
+
# define ngx_force_inline
|
33
|
+
#endif /* __GNUC__ */
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Configuration structure for the fancyindex module. The configuration
|
39
|
+
* commands defined in the module do fill in the members of this structure.
|
40
|
+
*/
|
41
|
+
typedef struct {
|
42
|
+
ngx_flag_t enable; /**< Module is enabled. */
|
43
|
+
ngx_uint_t default_sort; /**< Default sort criterion. */
|
44
|
+
ngx_flag_t localtime; /**< File mtime dates are sent in local time. */
|
45
|
+
ngx_flag_t exact_size; /**< Sizes are sent always in bytes. */
|
46
|
+
ngx_uint_t name_length; /**< Maximum length of file names in bytes. */
|
47
|
+
|
48
|
+
ngx_str_t header; /**< File name for header, or empty if none. */
|
49
|
+
ngx_str_t footer; /**< File name for footer, or empty if none. */
|
50
|
+
ngx_str_t css_href; /**< Link to a CSS stylesheet, or empty if none. */
|
51
|
+
|
52
|
+
ngx_array_t *ignore; /**< List of files to ignore in listings. */
|
53
|
+
} ngx_http_fancyindex_loc_conf_t;
|
54
|
+
|
55
|
+
#define NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME 0
|
56
|
+
#define NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE 1
|
57
|
+
#define NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE 2
|
58
|
+
#define NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC 3
|
59
|
+
#define NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC 4
|
60
|
+
#define NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC 5
|
61
|
+
|
62
|
+
static ngx_conf_enum_t ngx_http_fancyindex_sort_criteria[] = {
|
63
|
+
{ ngx_string("name"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME },
|
64
|
+
{ ngx_string("size"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE },
|
65
|
+
{ ngx_string("date"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE },
|
66
|
+
{ ngx_string("name_desc"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC },
|
67
|
+
{ ngx_string("size_desc"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC },
|
68
|
+
{ ngx_string("date_desc"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC },
|
69
|
+
{ ngx_null_string, 0 }
|
70
|
+
};
|
71
|
+
|
72
|
+
|
73
|
+
#define NGX_HTTP_FANCYINDEX_PREALLOCATE 50
|
74
|
+
|
75
|
+
|
76
|
+
/**
|
77
|
+
* Calculates the length of a NULL-terminated string. It is ugly having to
|
78
|
+
* remember to substract 1 from the sizeof result.
|
79
|
+
*/
|
80
|
+
#define ngx_sizeof_ssz(_s) (sizeof(_s) - 1)
|
81
|
+
|
82
|
+
|
83
|
+
/**
|
84
|
+
* Copy a static zero-terminated string. Useful to output template
|
85
|
+
* string pieces into a temporary buffer.
|
86
|
+
*/
|
87
|
+
#define ngx_cpymem_ssz(_p, _t) \
|
88
|
+
(ngx_cpymem((_p), (_t), sizeof(_t) - 1))
|
89
|
+
|
90
|
+
/**
|
91
|
+
* Copy a ngx_str_t.
|
92
|
+
*/
|
93
|
+
#define ngx_cpymem_str(_p, _s) \
|
94
|
+
(ngx_cpymem((_p), (_s).data, (_s).len))
|
95
|
+
|
96
|
+
/**
|
97
|
+
* Check whether a particular bit is set in a particular value.
|
98
|
+
*/
|
99
|
+
#define ngx_has_flag(_where, _what) \
|
100
|
+
(((_where) & (_what)) == (_what))
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
typedef struct {
|
106
|
+
ngx_str_t name;
|
107
|
+
size_t utf_len;
|
108
|
+
ngx_uint_t escape;
|
109
|
+
ngx_uint_t dir;
|
110
|
+
time_t mtime;
|
111
|
+
off_t size;
|
112
|
+
} ngx_http_fancyindex_entry_t;
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
static int ngx_libc_cdecl
|
117
|
+
ngx_http_fancyindex_cmp_entries_name_desc(const void *one, const void *two);
|
118
|
+
static int ngx_libc_cdecl
|
119
|
+
ngx_http_fancyindex_cmp_entries_size_desc(const void *one, const void *two);
|
120
|
+
static int ngx_libc_cdecl
|
121
|
+
ngx_http_fancyindex_cmp_entries_mtime_desc(const void *one, const void *two);
|
122
|
+
static int ngx_libc_cdecl
|
123
|
+
ngx_http_fancyindex_cmp_entries_name_asc(const void *one, const void *two);
|
124
|
+
static int ngx_libc_cdecl
|
125
|
+
ngx_http_fancyindex_cmp_entries_size_asc(const void *one, const void *two);
|
126
|
+
static int ngx_libc_cdecl
|
127
|
+
ngx_http_fancyindex_cmp_entries_mtime_asc(const void *one, const void *two);
|
128
|
+
|
129
|
+
static ngx_int_t ngx_http_fancyindex_error(ngx_http_request_t *r,
|
130
|
+
ngx_dir_t *dir, ngx_str_t *name);
|
131
|
+
|
132
|
+
static ngx_int_t ngx_http_fancyindex_init(ngx_conf_t *cf);
|
133
|
+
|
134
|
+
static void *ngx_http_fancyindex_create_loc_conf(ngx_conf_t *cf);
|
135
|
+
|
136
|
+
static char *ngx_http_fancyindex_merge_loc_conf(ngx_conf_t *cf,
|
137
|
+
void *parent, void *child);
|
138
|
+
|
139
|
+
static char *ngx_http_fancyindex_ignore(ngx_conf_t *cf,
|
140
|
+
ngx_command_t *cmd,
|
141
|
+
void *conf);
|
142
|
+
|
143
|
+
static uintptr_t
|
144
|
+
ngx_fancyindex_escape_uri(u_char *dst, u_char*src, size_t size);
|
145
|
+
|
146
|
+
/*
|
147
|
+
* These are used only once per handler invocation. We can tell GCC to
|
148
|
+
* inline them always, if possible (see how ngx_force_inline is defined
|
149
|
+
* above).
|
150
|
+
*/
|
151
|
+
static ngx_inline ngx_buf_t*
|
152
|
+
make_header_buf(ngx_http_request_t *r, const ngx_str_t css_href)
|
153
|
+
ngx_force_inline;
|
154
|
+
|
155
|
+
static ngx_inline ngx_buf_t*
|
156
|
+
make_footer_buf(ngx_http_request_t *r)
|
157
|
+
ngx_force_inline;
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
static ngx_command_t ngx_http_fancyindex_commands[] = {
|
162
|
+
|
163
|
+
{ ngx_string("fancyindex"),
|
164
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
165
|
+
ngx_conf_set_flag_slot,
|
166
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
167
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, enable),
|
168
|
+
NULL },
|
169
|
+
|
170
|
+
{ ngx_string("fancyindex_default_sort"),
|
171
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
|
172
|
+
ngx_conf_set_enum_slot,
|
173
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
174
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, default_sort),
|
175
|
+
&ngx_http_fancyindex_sort_criteria },
|
176
|
+
|
177
|
+
{ ngx_string("fancyindex_localtime"),
|
178
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
179
|
+
ngx_conf_set_flag_slot,
|
180
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
181
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, localtime),
|
182
|
+
NULL },
|
183
|
+
|
184
|
+
{ ngx_string("fancyindex_exact_size"),
|
185
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
186
|
+
ngx_conf_set_flag_slot,
|
187
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
188
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, exact_size),
|
189
|
+
NULL },
|
190
|
+
|
191
|
+
{ ngx_string("fancyindex_name_length"),
|
192
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
193
|
+
ngx_conf_set_num_slot,
|
194
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
195
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, name_length),
|
196
|
+
NULL },
|
197
|
+
|
198
|
+
{ ngx_string("fancyindex_header"),
|
199
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
200
|
+
ngx_conf_set_str_slot,
|
201
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
202
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, header),
|
203
|
+
NULL },
|
204
|
+
|
205
|
+
{ ngx_string("fancyindex_footer"),
|
206
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
207
|
+
ngx_conf_set_str_slot,
|
208
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
209
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, footer),
|
210
|
+
NULL },
|
211
|
+
|
212
|
+
{ ngx_string("fancyindex_css_href"),
|
213
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
214
|
+
ngx_conf_set_str_slot,
|
215
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
216
|
+
offsetof(ngx_http_fancyindex_loc_conf_t, css_href),
|
217
|
+
NULL },
|
218
|
+
|
219
|
+
{ ngx_string("fancyindex_ignore"),
|
220
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
221
|
+
ngx_http_fancyindex_ignore,
|
222
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
223
|
+
0,
|
224
|
+
NULL },
|
225
|
+
|
226
|
+
ngx_null_command
|
227
|
+
};
|
228
|
+
|
229
|
+
|
230
|
+
static ngx_http_module_t ngx_http_fancyindex_module_ctx = {
|
231
|
+
NULL, /* preconfiguration */
|
232
|
+
ngx_http_fancyindex_init, /* postconfiguration */
|
233
|
+
|
234
|
+
NULL, /* create main configuration */
|
235
|
+
NULL, /* init main configuration */
|
236
|
+
|
237
|
+
NULL, /* create server configuration */
|
238
|
+
NULL, /* merge server configuration */
|
239
|
+
|
240
|
+
ngx_http_fancyindex_create_loc_conf, /* create location configration */
|
241
|
+
ngx_http_fancyindex_merge_loc_conf /* merge location configration */
|
242
|
+
};
|
243
|
+
|
244
|
+
|
245
|
+
ngx_module_t ngx_http_fancyindex_module = {
|
246
|
+
NGX_MODULE_V1,
|
247
|
+
&ngx_http_fancyindex_module_ctx, /* module context */
|
248
|
+
ngx_http_fancyindex_commands, /* module directives */
|
249
|
+
NGX_HTTP_MODULE, /* module type */
|
250
|
+
NULL, /* init master */
|
251
|
+
NULL, /* init module */
|
252
|
+
NULL, /* init process */
|
253
|
+
NULL, /* init thread */
|
254
|
+
NULL, /* exit thread */
|
255
|
+
NULL, /* exit process */
|
256
|
+
NULL, /* exit master */
|
257
|
+
NGX_MODULE_V1_PADDING
|
258
|
+
};
|
259
|
+
|
260
|
+
|
261
|
+
|
262
|
+
static const ngx_str_t css_href_pre =
|
263
|
+
ngx_string("<link rel=\"stylesheet\" href=\"");
|
264
|
+
static const ngx_str_t css_href_post =
|
265
|
+
ngx_string("\" type=\"text/css\"/>\n");
|
266
|
+
|
267
|
+
|
268
|
+
static uintptr_t
|
269
|
+
ngx_fancyindex_escape_uri(u_char *dst, u_char *src, size_t size)
|
270
|
+
{
|
271
|
+
/*
|
272
|
+
* The ngx_escape_uri() function will not escape colons or the
|
273
|
+
* ? character, which signals the beginning of the query string.
|
274
|
+
* So we handle those characters ourselves.
|
275
|
+
*
|
276
|
+
* TODO: Get rid of this once ngx_escape_uri() works as expected!
|
277
|
+
*/
|
278
|
+
|
279
|
+
u_int escapes = 0;
|
280
|
+
u_char *psrc = src;
|
281
|
+
size_t psize = size;
|
282
|
+
|
283
|
+
while (psize--) {
|
284
|
+
switch (*psrc++) {
|
285
|
+
case ':':
|
286
|
+
case '?':
|
287
|
+
escapes++;
|
288
|
+
break;
|
289
|
+
}
|
290
|
+
}
|
291
|
+
|
292
|
+
if (dst == NULL) {
|
293
|
+
return escapes + ngx_escape_uri(NULL, src, size, NGX_ESCAPE_HTML);
|
294
|
+
}
|
295
|
+
else if (escapes == 0) {
|
296
|
+
/* No need to do extra escaping, avoid the temporary buffer */
|
297
|
+
return ngx_escape_uri(dst, src, size, NGX_ESCAPE_HTML);
|
298
|
+
}
|
299
|
+
else {
|
300
|
+
uintptr_t uescapes = ngx_escape_uri(NULL, src, size, NGX_ESCAPE_HTML);
|
301
|
+
size_t bufsz = size + 2 * uescapes;
|
302
|
+
|
303
|
+
/*
|
304
|
+
* GCC and CLANG both support stack-allocated variable length
|
305
|
+
* arrays. Take advantage of that to avoid a malloc-free cycle.
|
306
|
+
*/
|
307
|
+
#if defined(__GNUC__) || defined(__clang__)
|
308
|
+
u_char cbuf[bufsz];
|
309
|
+
u_char *buf = cbuf;
|
310
|
+
#else /* __GNUC__ || __clang__ */
|
311
|
+
u_char *buf = (u_char*) malloc(sizeof(u_char) * bufsz);
|
312
|
+
#endif /* __GNUC__ || __clang__ */
|
313
|
+
|
314
|
+
ngx_escape_uri(buf, src, size, NGX_ESCAPE_HTML);
|
315
|
+
|
316
|
+
while (bufsz--) {
|
317
|
+
switch (*buf) {
|
318
|
+
case ':':
|
319
|
+
*dst++ = '%';
|
320
|
+
*dst++ = '3';
|
321
|
+
*dst++ = 'A';
|
322
|
+
break;
|
323
|
+
case '?':
|
324
|
+
*dst++ = '%';
|
325
|
+
*dst++ = '3';
|
326
|
+
*dst++ = 'F';
|
327
|
+
break;
|
328
|
+
default:
|
329
|
+
*dst++ = *buf;
|
330
|
+
}
|
331
|
+
buf++;
|
332
|
+
}
|
333
|
+
|
334
|
+
#if !defined(__GNUC__) && !defined(__clang__)
|
335
|
+
free(buf);
|
336
|
+
#endif /* !__GNUC__ && !__clang__ */
|
337
|
+
|
338
|
+
return escapes + uescapes;
|
339
|
+
}
|
340
|
+
}
|
341
|
+
|
342
|
+
|
343
|
+
static ngx_inline ngx_buf_t*
|
344
|
+
make_header_buf(ngx_http_request_t *r, const ngx_str_t css_href)
|
345
|
+
{
|
346
|
+
size_t blen = r->uri.len
|
347
|
+
+ ngx_sizeof_ssz(t01_head1)
|
348
|
+
+ ngx_sizeof_ssz(t02_head2)
|
349
|
+
+ ngx_sizeof_ssz(t03_head3)
|
350
|
+
+ ngx_sizeof_ssz(t04_body1)
|
351
|
+
;
|
352
|
+
|
353
|
+
if (css_href.len) {
|
354
|
+
blen += css_href_pre.len \
|
355
|
+
+ css_href.len \
|
356
|
+
+ css_href_post.len
|
357
|
+
;
|
358
|
+
}
|
359
|
+
|
360
|
+
ngx_buf_t *b = ngx_create_temp_buf(r->pool, blen);
|
361
|
+
|
362
|
+
if (b == NULL) goto bailout;
|
363
|
+
|
364
|
+
b->last = ngx_cpymem_ssz(b->last, t01_head1);
|
365
|
+
|
366
|
+
if (css_href.len) {
|
367
|
+
b->last = ngx_cpymem_str(b->last, css_href_pre);
|
368
|
+
b->last = ngx_cpymem_str(b->last, css_href);
|
369
|
+
b->last = ngx_cpymem_str(b->last, css_href_post);
|
370
|
+
}
|
371
|
+
|
372
|
+
b->last = ngx_cpymem_ssz(b->last, t02_head2);
|
373
|
+
b->last = ngx_cpymem_str(b->last, r->uri);
|
374
|
+
b->last = ngx_cpymem_ssz(b->last, t03_head3);
|
375
|
+
b->last = ngx_cpymem_ssz(b->last, t04_body1);
|
376
|
+
|
377
|
+
bailout:
|
378
|
+
return b;
|
379
|
+
}
|
380
|
+
|
381
|
+
|
382
|
+
|
383
|
+
static ngx_inline ngx_buf_t*
|
384
|
+
make_footer_buf(ngx_http_request_t *r)
|
385
|
+
{
|
386
|
+
/*
|
387
|
+
* TODO: Make this buffer static (i.e. readonly and reusable from
|
388
|
+
* one request to another.
|
389
|
+
*/
|
390
|
+
ngx_buf_t *b = ngx_create_temp_buf(r->pool, ngx_sizeof_ssz(t08_foot1));
|
391
|
+
|
392
|
+
if (b == NULL) goto bailout;
|
393
|
+
|
394
|
+
b->last = ngx_cpymem_ssz(b->last, t08_foot1);
|
395
|
+
|
396
|
+
bailout:
|
397
|
+
return b;
|
398
|
+
}
|
399
|
+
|
400
|
+
|
401
|
+
|
402
|
+
static ngx_inline ngx_int_t
|
403
|
+
make_content_buf(
|
404
|
+
ngx_http_request_t *r, ngx_buf_t **pb,
|
405
|
+
ngx_http_fancyindex_loc_conf_t *alcf)
|
406
|
+
{
|
407
|
+
ngx_http_fancyindex_entry_t *entry;
|
408
|
+
|
409
|
+
int (*sort_cmp_func) (const void*, const void*);
|
410
|
+
const char *sort_url_args = "";
|
411
|
+
|
412
|
+
off_t length;
|
413
|
+
size_t len, root, copy, allocated;
|
414
|
+
u_char *filename, *last, scale;
|
415
|
+
ngx_tm_t tm;
|
416
|
+
ngx_array_t entries;
|
417
|
+
ngx_time_t *tp;
|
418
|
+
ngx_uint_t i;
|
419
|
+
ngx_int_t size;
|
420
|
+
ngx_str_t path;
|
421
|
+
ngx_dir_t dir;
|
422
|
+
ngx_buf_t *b;
|
423
|
+
|
424
|
+
static char *months[] = {
|
425
|
+
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
426
|
+
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
|
427
|
+
};
|
428
|
+
|
429
|
+
/*
|
430
|
+
* NGX_DIR_MASK_LEN is lesser than NGX_HTTP_FANCYINDEX_PREALLOCATE
|
431
|
+
*/
|
432
|
+
if ((last = ngx_http_map_uri_to_path(r, &path, &root,
|
433
|
+
NGX_HTTP_FANCYINDEX_PREALLOCATE)) == NULL)
|
434
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
435
|
+
|
436
|
+
allocated = path.len;
|
437
|
+
path.len = last - path.data - 1;
|
438
|
+
path.data[path.len] = '\0';
|
439
|
+
|
440
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
441
|
+
"http fancyindex: \"%s\"", path.data);
|
442
|
+
|
443
|
+
if (ngx_open_dir(&path, &dir) == NGX_ERROR) {
|
444
|
+
ngx_int_t rc, err = ngx_errno;
|
445
|
+
ngx_uint_t level;
|
446
|
+
|
447
|
+
if (err == NGX_ENOENT || err == NGX_ENOTDIR || err == NGX_ENAMETOOLONG) {
|
448
|
+
level = NGX_LOG_ERR;
|
449
|
+
rc = NGX_HTTP_NOT_FOUND;
|
450
|
+
} else if (err == NGX_EACCES) {
|
451
|
+
level = NGX_LOG_ERR;
|
452
|
+
rc = NGX_HTTP_FORBIDDEN;
|
453
|
+
} else {
|
454
|
+
level = NGX_LOG_CRIT;
|
455
|
+
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
456
|
+
}
|
457
|
+
|
458
|
+
ngx_log_error(level, r->connection->log, err,
|
459
|
+
ngx_open_dir_n " \"%s\" failed", path.data);
|
460
|
+
|
461
|
+
return rc;
|
462
|
+
}
|
463
|
+
|
464
|
+
#if (NGX_SUPPRESS_WARN)
|
465
|
+
/* MSVC thinks 'entries' may be used without having been initialized */
|
466
|
+
ngx_memzero(&entries, sizeof(ngx_array_t));
|
467
|
+
#endif /* NGX_SUPPRESS_WARN */
|
468
|
+
|
469
|
+
|
470
|
+
if (ngx_array_init(&entries, r->pool, 40,
|
471
|
+
sizeof(ngx_http_fancyindex_entry_t)) != NGX_OK)
|
472
|
+
return ngx_http_fancyindex_error(r, &dir, &path);
|
473
|
+
|
474
|
+
filename = path.data;
|
475
|
+
filename[path.len] = '/';
|
476
|
+
|
477
|
+
/* Read directory entries and their associated information. */
|
478
|
+
for (;;) {
|
479
|
+
ngx_set_errno(0);
|
480
|
+
|
481
|
+
if (ngx_read_dir(&dir) == NGX_ERROR) {
|
482
|
+
ngx_int_t err = ngx_errno;
|
483
|
+
|
484
|
+
if (err != NGX_ENOMOREFILES) {
|
485
|
+
ngx_log_error(NGX_LOG_CRIT, r->connection->log, err,
|
486
|
+
ngx_read_dir_n " \"%V\" failed", &path);
|
487
|
+
return ngx_http_fancyindex_error(r, &dir, &path);
|
488
|
+
}
|
489
|
+
break;
|
490
|
+
}
|
491
|
+
|
492
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
493
|
+
"http fancyindex file: \"%s\"", ngx_de_name(&dir));
|
494
|
+
|
495
|
+
len = ngx_de_namelen(&dir);
|
496
|
+
|
497
|
+
if (ngx_de_name(&dir)[0] == '.')
|
498
|
+
continue;
|
499
|
+
|
500
|
+
#if NGX_PCRE
|
501
|
+
{
|
502
|
+
ngx_str_t str = { len, ngx_de_name(&dir) };
|
503
|
+
|
504
|
+
if (alcf->ignore && ngx_regex_exec_array(alcf->ignore, &str,
|
505
|
+
r->connection->log)
|
506
|
+
!= NGX_DECLINED)
|
507
|
+
{
|
508
|
+
continue;
|
509
|
+
}
|
510
|
+
}
|
511
|
+
#else /* !NGX_PCRE */
|
512
|
+
if (alcf->ignore) {
|
513
|
+
u_int match_found = 0;
|
514
|
+
ngx_str_t *s = alcf->ignore->elts;
|
515
|
+
|
516
|
+
for (i = 0; i < alcf->ignore->nelts; i++, s++) {
|
517
|
+
if (ngx_strcmp(ngx_de_name(&dir), s->data) == 0) {
|
518
|
+
match_found = 1;
|
519
|
+
break;
|
520
|
+
}
|
521
|
+
}
|
522
|
+
|
523
|
+
if (match_found) {
|
524
|
+
continue;
|
525
|
+
}
|
526
|
+
}
|
527
|
+
#endif /* NGX_PCRE */
|
528
|
+
|
529
|
+
if (!dir.valid_info) {
|
530
|
+
/* 1 byte for '/' and 1 byte for terminating '\0' */
|
531
|
+
if (path.len + 1 + len + 1 > allocated) {
|
532
|
+
allocated = path.len + 1 + len + 1
|
533
|
+
+ NGX_HTTP_FANCYINDEX_PREALLOCATE;
|
534
|
+
|
535
|
+
if ((filename = ngx_palloc(r->pool, allocated)) == NULL)
|
536
|
+
return ngx_http_fancyindex_error(r, &dir, &path);
|
537
|
+
|
538
|
+
last = ngx_cpystrn(filename, path.data, path.len + 1);
|
539
|
+
*last++ = '/';
|
540
|
+
}
|
541
|
+
|
542
|
+
ngx_cpystrn(last, ngx_de_name(&dir), len + 1);
|
543
|
+
|
544
|
+
if (ngx_de_info(filename, &dir) == NGX_FILE_ERROR) {
|
545
|
+
ngx_int_t err = ngx_errno;
|
546
|
+
|
547
|
+
if (err != NGX_ENOENT) {
|
548
|
+
ngx_log_error(NGX_LOG_ERR, r->connection->log, err,
|
549
|
+
ngx_de_info_n " \"%s\" failed", filename);
|
550
|
+
continue;
|
551
|
+
}
|
552
|
+
|
553
|
+
if (ngx_de_link_info(filename, &dir) == NGX_FILE_ERROR) {
|
554
|
+
ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
|
555
|
+
ngx_de_link_info_n " \"%s\" failed", filename);
|
556
|
+
return ngx_http_fancyindex_error(r, &dir, &path);
|
557
|
+
}
|
558
|
+
}
|
559
|
+
}
|
560
|
+
|
561
|
+
if ((entry = ngx_array_push(&entries)) == NULL)
|
562
|
+
return ngx_http_fancyindex_error(r, &dir, &path);
|
563
|
+
|
564
|
+
entry->name.len = len;
|
565
|
+
entry->name.data = ngx_palloc(r->pool, len + 1);
|
566
|
+
if (entry->name.data == NULL)
|
567
|
+
return ngx_http_fancyindex_error(r, &dir, &path);
|
568
|
+
|
569
|
+
ngx_cpystrn(entry->name.data, ngx_de_name(&dir), len + 1);
|
570
|
+
entry->escape = 2 * ngx_fancyindex_escape_uri(NULL,
|
571
|
+
ngx_de_name(&dir),
|
572
|
+
len);
|
573
|
+
|
574
|
+
entry->dir = ngx_de_is_dir(&dir);
|
575
|
+
entry->mtime = ngx_de_mtime(&dir);
|
576
|
+
entry->size = ngx_de_size(&dir);
|
577
|
+
entry->utf_len = (r->headers_out.charset.len == 5 &&
|
578
|
+
ngx_strncasecmp(r->headers_out.charset.data, (u_char*) "utf-8", 5) == 0)
|
579
|
+
? ngx_utf8_length(entry->name.data, entry->name.len)
|
580
|
+
: len;
|
581
|
+
}
|
582
|
+
|
583
|
+
if (ngx_close_dir(&dir) == NGX_ERROR) {
|
584
|
+
ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
|
585
|
+
ngx_close_dir_n " \"%s\" failed", &path);
|
586
|
+
}
|
587
|
+
|
588
|
+
/*
|
589
|
+
* Calculate needed buffer length.
|
590
|
+
*/
|
591
|
+
len = r->uri.len
|
592
|
+
+ ngx_sizeof_ssz(t05_body2)
|
593
|
+
+ ngx_sizeof_ssz(t06_list1)
|
594
|
+
+ ngx_sizeof_ssz(t_parentdir_entry)
|
595
|
+
+ ngx_sizeof_ssz(t07_list2)
|
596
|
+
;
|
597
|
+
|
598
|
+
entry = entries.elts;
|
599
|
+
for (i = 0; i < entries.nelts; i++) {
|
600
|
+
/*
|
601
|
+
* Genearated table rows are as follows, unneeded whitespace
|
602
|
+
* is stripped out:
|
603
|
+
*
|
604
|
+
* <tr>
|
605
|
+
* <td><a href="U[?sort]">fname</a></td>
|
606
|
+
* <td>size</td><td>date</td>
|
607
|
+
* </tr>
|
608
|
+
*/
|
609
|
+
len += ngx_sizeof_ssz("<tr><td><a href=\"")
|
610
|
+
+ entry[i].name.len + entry[i].escape /* Escaped URL */
|
611
|
+
+ ngx_sizeof_ssz("?C=x&O=y") /* URL sorting arguments */
|
612
|
+
+ ngx_sizeof_ssz("\">")
|
613
|
+
+ entry[i].name.len + entry[i].utf_len
|
614
|
+
+ alcf->name_length + ngx_sizeof_ssz(">")
|
615
|
+
+ ngx_sizeof_ssz("</a></td><td>")
|
616
|
+
+ 20 /* File size */
|
617
|
+
+ ngx_sizeof_ssz("</td><td>")
|
618
|
+
+ ngx_sizeof_ssz(" 28-Sep-1970 12:00 ")
|
619
|
+
+ ngx_sizeof_ssz("</td></tr>\n")
|
620
|
+
+ 2 /* CR LF */
|
621
|
+
;
|
622
|
+
}
|
623
|
+
|
624
|
+
if ((b = ngx_create_temp_buf(r->pool, len)) == NULL)
|
625
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
626
|
+
|
627
|
+
/*
|
628
|
+
* Determine the sorting criteria. URL arguments look like:
|
629
|
+
*
|
630
|
+
* C=x[&O=y]
|
631
|
+
*
|
632
|
+
* Where x={M,S,N} and y={A,D}
|
633
|
+
*/
|
634
|
+
if ((r->args.len == 3 || (r->args.len == 7 && r->args.data[3] == '&')) &&
|
635
|
+
r->args.data[0] == 'C' && r->args.data[1] == '=')
|
636
|
+
{
|
637
|
+
/* Determine whether the direction of the sorting */
|
638
|
+
ngx_int_t sort_descending = r->args.len == 7
|
639
|
+
&& r->args.data[4] == 'O'
|
640
|
+
&& r->args.data[5] == '='
|
641
|
+
&& r->args.data[6] == 'D';
|
642
|
+
|
643
|
+
/* Pick the sorting criteria */
|
644
|
+
switch (r->args.data[2]) {
|
645
|
+
case 'M': /* Sort by mtime */
|
646
|
+
if (sort_descending) {
|
647
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_desc;
|
648
|
+
if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC)
|
649
|
+
sort_url_args = "?C=M&O=D";
|
650
|
+
}
|
651
|
+
else {
|
652
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_asc;
|
653
|
+
if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE)
|
654
|
+
sort_url_args = "?C=M&O=A";
|
655
|
+
}
|
656
|
+
break;
|
657
|
+
case 'S': /* Sort by size */
|
658
|
+
if (sort_descending) {
|
659
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_desc;
|
660
|
+
if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC)
|
661
|
+
sort_url_args = "?C=S&O=D";
|
662
|
+
}
|
663
|
+
else {
|
664
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_asc;
|
665
|
+
if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE)
|
666
|
+
sort_url_args = "?C=S&O=A";
|
667
|
+
}
|
668
|
+
break;
|
669
|
+
case 'N': /* Sort by name */
|
670
|
+
default:
|
671
|
+
if (sort_descending) {
|
672
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_desc;
|
673
|
+
if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC)
|
674
|
+
sort_url_args = "?C=N&O=D";
|
675
|
+
}
|
676
|
+
else {
|
677
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_asc;
|
678
|
+
if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME)
|
679
|
+
sort_url_args = "?C=N&O=A";
|
680
|
+
}
|
681
|
+
break;
|
682
|
+
}
|
683
|
+
}
|
684
|
+
else {
|
685
|
+
switch (alcf->default_sort) {
|
686
|
+
case NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC:
|
687
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_desc;
|
688
|
+
break;
|
689
|
+
case NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE:
|
690
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_asc;
|
691
|
+
break;
|
692
|
+
case NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC:
|
693
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_desc;
|
694
|
+
break;
|
695
|
+
case NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE:
|
696
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_asc;
|
697
|
+
break;
|
698
|
+
case NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC:
|
699
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_desc;
|
700
|
+
break;
|
701
|
+
case NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME:
|
702
|
+
default:
|
703
|
+
sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_asc;
|
704
|
+
break;
|
705
|
+
}
|
706
|
+
}
|
707
|
+
|
708
|
+
/* Sort entries, if needed */
|
709
|
+
if (entries.nelts > 1) {
|
710
|
+
ngx_qsort(entry, (size_t) entries.nelts,
|
711
|
+
sizeof(ngx_http_fancyindex_entry_t),
|
712
|
+
sort_cmp_func);
|
713
|
+
}
|
714
|
+
|
715
|
+
b->last = ngx_cpymem_str(b->last, r->uri);
|
716
|
+
b->last = ngx_cpymem_ssz(b->last, t05_body2);
|
717
|
+
b->last = ngx_cpymem_ssz(b->last, t06_list1);
|
718
|
+
|
719
|
+
tp = ngx_timeofday();
|
720
|
+
|
721
|
+
/* "Parent dir" entry, always first */
|
722
|
+
b->last = ngx_cpymem_ssz(b->last,
|
723
|
+
"<tr>"
|
724
|
+
"<td><a href=\"../");
|
725
|
+
if (*sort_url_args) {
|
726
|
+
b->last = ngx_cpymem(b->last,
|
727
|
+
sort_url_args,
|
728
|
+
ngx_sizeof_ssz("?C=N&O=A"));
|
729
|
+
}
|
730
|
+
b->last = ngx_cpymem_ssz(b->last,
|
731
|
+
"\">Parent directory/</a></td>"
|
732
|
+
"<td>-</td>"
|
733
|
+
"<td>-</td>"
|
734
|
+
"</tr>");
|
735
|
+
|
736
|
+
/* Entries for directories and files */
|
737
|
+
for (i = 0; i < entries.nelts; i++) {
|
738
|
+
b->last = ngx_cpymem_ssz(b->last, "<tr><td><a href=\"");
|
739
|
+
|
740
|
+
if (entry[i].escape) {
|
741
|
+
ngx_fancyindex_escape_uri(b->last,
|
742
|
+
entry[i].name.data,
|
743
|
+
entry[i].name.len);
|
744
|
+
|
745
|
+
b->last += entry[i].name.len + entry[i].escape;
|
746
|
+
|
747
|
+
} else {
|
748
|
+
b->last = ngx_cpymem_str(b->last, entry[i].name);
|
749
|
+
}
|
750
|
+
|
751
|
+
if (entry[i].dir) {
|
752
|
+
*b->last++ = '/';
|
753
|
+
if (*sort_url_args) {
|
754
|
+
b->last = ngx_cpymem(b->last,
|
755
|
+
sort_url_args,
|
756
|
+
ngx_sizeof_ssz("?C=x&O=y"));
|
757
|
+
}
|
758
|
+
}
|
759
|
+
|
760
|
+
*b->last++ = '"';
|
761
|
+
*b->last++ = '>';
|
762
|
+
|
763
|
+
len = entry[i].utf_len;
|
764
|
+
|
765
|
+
if (entry[i].name.len - len) {
|
766
|
+
if (len > alcf->name_length) {
|
767
|
+
copy = alcf->name_length - 3 + 1;
|
768
|
+
} else {
|
769
|
+
copy = alcf->name_length + 1;
|
770
|
+
}
|
771
|
+
|
772
|
+
b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data,
|
773
|
+
copy, entry[i].name.len);
|
774
|
+
last = b->last;
|
775
|
+
|
776
|
+
} else {
|
777
|
+
b->last = ngx_cpystrn(b->last, entry[i].name.data,
|
778
|
+
alcf->name_length + 1);
|
779
|
+
last = b->last - 3;
|
780
|
+
}
|
781
|
+
|
782
|
+
if (len > alcf->name_length) {
|
783
|
+
b->last = ngx_cpymem_ssz(last, "..></a></td><td>");
|
784
|
+
|
785
|
+
} else {
|
786
|
+
if (entry[i].dir && alcf->name_length - len > 0) {
|
787
|
+
*b->last++ = '/';
|
788
|
+
len++;
|
789
|
+
}
|
790
|
+
|
791
|
+
b->last = ngx_cpymem_ssz(b->last, "</a></td><td>");
|
792
|
+
}
|
793
|
+
|
794
|
+
if (alcf->exact_size) {
|
795
|
+
if (entry[i].dir) {
|
796
|
+
*b->last++ = '-';
|
797
|
+
} else {
|
798
|
+
b->last = ngx_sprintf(b->last, "%19O", entry[i].size);
|
799
|
+
}
|
800
|
+
|
801
|
+
} else {
|
802
|
+
if (entry[i].dir) {
|
803
|
+
*b->last++ = '-';
|
804
|
+
} else {
|
805
|
+
length = entry[i].size;
|
806
|
+
|
807
|
+
if (length > 1024 * 1024 * 1024 - 1) {
|
808
|
+
size = (ngx_int_t) (length / (1024 * 1024 * 1024));
|
809
|
+
if ((length % (1024 * 1024 * 1024))
|
810
|
+
> (1024 * 1024 * 1024 / 2 - 1))
|
811
|
+
{
|
812
|
+
size++;
|
813
|
+
}
|
814
|
+
scale = 'G';
|
815
|
+
|
816
|
+
} else if (length > 1024 * 1024 - 1) {
|
817
|
+
size = (ngx_int_t) (length / (1024 * 1024));
|
818
|
+
if ((length % (1024 * 1024)) > (1024 * 1024 / 2 - 1)) {
|
819
|
+
size++;
|
820
|
+
}
|
821
|
+
scale = 'M';
|
822
|
+
|
823
|
+
} else if (length > 9999) {
|
824
|
+
size = (ngx_int_t) (length / 1024);
|
825
|
+
if (length % 1024 > 511) {
|
826
|
+
size++;
|
827
|
+
}
|
828
|
+
scale = 'K';
|
829
|
+
|
830
|
+
} else {
|
831
|
+
size = (ngx_int_t) length;
|
832
|
+
scale = '\0';
|
833
|
+
}
|
834
|
+
|
835
|
+
if (scale) {
|
836
|
+
b->last = ngx_sprintf(b->last, "%6i%c", size, scale);
|
837
|
+
|
838
|
+
} else {
|
839
|
+
b->last = ngx_sprintf(b->last, " %6i", size);
|
840
|
+
}
|
841
|
+
}
|
842
|
+
}
|
843
|
+
|
844
|
+
ngx_gmtime(entry[i].mtime + tp->gmtoff * 60 * alcf->localtime, &tm);
|
845
|
+
|
846
|
+
b->last = ngx_sprintf(b->last, "</td><td>%02d-%s-%d %02d:%02d</td></tr>",
|
847
|
+
tm.ngx_tm_mday,
|
848
|
+
months[tm.ngx_tm_mon - 1],
|
849
|
+
tm.ngx_tm_year,
|
850
|
+
tm.ngx_tm_hour,
|
851
|
+
tm.ngx_tm_min);
|
852
|
+
|
853
|
+
|
854
|
+
*b->last++ = CR;
|
855
|
+
*b->last++ = LF;
|
856
|
+
}
|
857
|
+
|
858
|
+
/* Output table bottom */
|
859
|
+
b->last = ngx_cpymem_ssz(b->last, t07_list2);
|
860
|
+
|
861
|
+
*pb = b;
|
862
|
+
return NGX_OK;
|
863
|
+
}
|
864
|
+
|
865
|
+
|
866
|
+
|
867
|
+
static ngx_int_t
|
868
|
+
ngx_http_fancyindex_handler(ngx_http_request_t *r)
|
869
|
+
{
|
870
|
+
ngx_http_request_t *sr;
|
871
|
+
ngx_str_t *sr_uri;
|
872
|
+
ngx_str_t rel_uri;
|
873
|
+
ngx_int_t rc;
|
874
|
+
ngx_http_fancyindex_loc_conf_t *alcf;
|
875
|
+
ngx_chain_t out[3] = {
|
876
|
+
{ NULL, NULL }, { NULL, NULL}, { NULL, NULL }};
|
877
|
+
|
878
|
+
|
879
|
+
if (r->uri.data[r->uri.len - 1] != '/') {
|
880
|
+
return NGX_DECLINED;
|
881
|
+
}
|
882
|
+
|
883
|
+
/* TODO: Win32 */
|
884
|
+
#if defined(nginx_version) \
|
885
|
+
&& ((nginx_version < 7066) \
|
886
|
+
|| ((nginx_version > 8000) && (nginx_version < 8038)))
|
887
|
+
if (r->zero_in_uri) {
|
888
|
+
return NGX_DECLINED;
|
889
|
+
}
|
890
|
+
#endif
|
891
|
+
|
892
|
+
if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) {
|
893
|
+
return NGX_DECLINED;
|
894
|
+
}
|
895
|
+
|
896
|
+
alcf = ngx_http_get_module_loc_conf(r, ngx_http_fancyindex_module);
|
897
|
+
|
898
|
+
if (!alcf->enable) {
|
899
|
+
return NGX_DECLINED;
|
900
|
+
}
|
901
|
+
|
902
|
+
if ((rc = make_content_buf(r, &out[0].buf, alcf) != NGX_OK))
|
903
|
+
return rc;
|
904
|
+
|
905
|
+
out[0].buf->last_in_chain = 1;
|
906
|
+
|
907
|
+
r->headers_out.status = NGX_HTTP_OK;
|
908
|
+
r->headers_out.content_type_len = ngx_sizeof_ssz("text/html");
|
909
|
+
r->headers_out.content_type.len = ngx_sizeof_ssz("text/html");
|
910
|
+
r->headers_out.content_type.data = (u_char *) "text/html";
|
911
|
+
|
912
|
+
rc = ngx_http_send_header(r);
|
913
|
+
|
914
|
+
if (rc != NGX_OK || r->header_only)
|
915
|
+
return rc;
|
916
|
+
|
917
|
+
if (alcf->header.len > 0) {
|
918
|
+
/* URI is configured, make Nginx take care of with a subrequest. */
|
919
|
+
sr_uri = &alcf->header;
|
920
|
+
|
921
|
+
if (*sr_uri->data != '/') {
|
922
|
+
/* Relative path */
|
923
|
+
rel_uri.len = r->uri.len + alcf->header.len;
|
924
|
+
rel_uri.data = ngx_palloc(r->pool, rel_uri.len);
|
925
|
+
if (rel_uri.data == NULL) {
|
926
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
927
|
+
}
|
928
|
+
ngx_memcpy(ngx_cpymem(rel_uri.data, r->uri.data, r->uri.len),
|
929
|
+
alcf->header.data, alcf->header.len);
|
930
|
+
sr_uri = &rel_uri;
|
931
|
+
}
|
932
|
+
|
933
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
934
|
+
"http fancyindex: header subrequest \"%V\"", sr_uri);
|
935
|
+
|
936
|
+
rc = ngx_http_subrequest(r, sr_uri, NULL, &sr, NULL, 0);
|
937
|
+
if (rc == NGX_ERROR || rc == NGX_DONE) {
|
938
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
939
|
+
"http fancyindex: header subrequest for \"%V\" failed", sr_uri);
|
940
|
+
return rc;
|
941
|
+
}
|
942
|
+
|
943
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
944
|
+
"http fancyindex: header subrequest status = %i",
|
945
|
+
sr->headers_out.status);
|
946
|
+
/* ngx_http_subrequest returns NGX_OK(0), not NGX_HTTP_OK(200) */
|
947
|
+
if (sr->headers_out.status != NGX_OK) {
|
948
|
+
/*
|
949
|
+
* XXX: Should we write a message to the error log just in case
|
950
|
+
* we get something different from a 404?
|
951
|
+
*/
|
952
|
+
goto add_builtin_header;
|
953
|
+
}
|
954
|
+
}
|
955
|
+
else {
|
956
|
+
add_builtin_header:
|
957
|
+
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
958
|
+
"http fancyindex: adding built-in header");
|
959
|
+
/* Make space before */
|
960
|
+
out[1].next = out[0].next;
|
961
|
+
out[1].buf = out[0].buf;
|
962
|
+
/* Chain header buffer */
|
963
|
+
out[0].next = &out[1];
|
964
|
+
out[0].buf = make_header_buf(r, alcf->css_href);
|
965
|
+
}
|
966
|
+
|
967
|
+
/* If footer is disabled, chain up footer buffer. */
|
968
|
+
if (alcf->footer.len == 0) {
|
969
|
+
ngx_uint_t last = (alcf->header.len == 0) ? 2 : 1;
|
970
|
+
|
971
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
972
|
+
"http fancyindex: adding built-in footer at %i", last);
|
973
|
+
|
974
|
+
out[last-1].next = &out[last];
|
975
|
+
out[last].buf = make_footer_buf(r);
|
976
|
+
|
977
|
+
out[last-1].buf->last_in_chain = 0;
|
978
|
+
out[last].buf->last_in_chain = 1;
|
979
|
+
out[last].buf->last_buf = 1;
|
980
|
+
/* Send everything with a single call :D */
|
981
|
+
return ngx_http_output_filter(r, &out[0]);
|
982
|
+
}
|
983
|
+
|
984
|
+
/*
|
985
|
+
* If we reach here, we were asked to send a custom footer. We need to:
|
986
|
+
* partially send whatever is referenced from out[0] and then send the
|
987
|
+
* footer as a subrequest. If the subrequest fails, we should send the
|
988
|
+
* standard footer as well.
|
989
|
+
*/
|
990
|
+
rc = ngx_http_output_filter(r, &out[0]);
|
991
|
+
|
992
|
+
if (rc != NGX_OK && rc != NGX_AGAIN)
|
993
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
994
|
+
|
995
|
+
/* URI is configured, make Nginx take care of with a subrequest. */
|
996
|
+
sr_uri = &alcf->footer;
|
997
|
+
|
998
|
+
if (*sr_uri->data != '/') {
|
999
|
+
/* Relative path */
|
1000
|
+
rel_uri.len = r->uri.len + alcf->footer.len;
|
1001
|
+
rel_uri.data = ngx_palloc(r->pool, rel_uri.len);
|
1002
|
+
if (rel_uri.data == NULL) {
|
1003
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
1004
|
+
}
|
1005
|
+
ngx_memcpy(ngx_cpymem(rel_uri.data, r->uri.data, r->uri.len),
|
1006
|
+
alcf->footer.data, alcf->footer.len);
|
1007
|
+
sr_uri = &rel_uri;
|
1008
|
+
}
|
1009
|
+
|
1010
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1011
|
+
"http fancyindex: footer subrequest \"%V\"", sr_uri);
|
1012
|
+
|
1013
|
+
rc = ngx_http_subrequest(r, sr_uri, NULL, &sr, NULL, 0);
|
1014
|
+
if (rc == NGX_ERROR || rc == NGX_DONE) {
|
1015
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1016
|
+
"http fancyindex: footer subrequest for \"%V\" failed", sr_uri);
|
1017
|
+
return rc;
|
1018
|
+
}
|
1019
|
+
|
1020
|
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1021
|
+
"http fancyindex: header subrequest status = %i",
|
1022
|
+
sr->headers_out.status);
|
1023
|
+
|
1024
|
+
/* see above: ngx_http_subrequest resturns NGX_OK (0) not NGX_HTTP_OK (200) */
|
1025
|
+
if (sr->headers_out.status != NGX_OK) {
|
1026
|
+
/*
|
1027
|
+
* XXX: Should we write a message to the error log just in case
|
1028
|
+
* we get something different from a 404?
|
1029
|
+
*/
|
1030
|
+
out[0].next = NULL;
|
1031
|
+
out[0].buf = make_footer_buf(r);
|
1032
|
+
out[0].buf->last_in_chain = 1;
|
1033
|
+
out[0].buf->last_buf = 1;
|
1034
|
+
/* Directly send out the builtin footer */
|
1035
|
+
return ngx_http_output_filter(r, &out[0]);
|
1036
|
+
}
|
1037
|
+
|
1038
|
+
return (r != r->main) ? rc : ngx_http_send_special(r, NGX_HTTP_LAST);
|
1039
|
+
}
|
1040
|
+
|
1041
|
+
|
1042
|
+
static int ngx_libc_cdecl
|
1043
|
+
ngx_http_fancyindex_cmp_entries_name_desc(const void *one, const void *two)
|
1044
|
+
{
|
1045
|
+
ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
|
1046
|
+
ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
|
1047
|
+
|
1048
|
+
/* move the directories to the start */
|
1049
|
+
if (first->dir && !second->dir) {
|
1050
|
+
return -1;
|
1051
|
+
}
|
1052
|
+
if (!first->dir && second->dir) {
|
1053
|
+
return 1;
|
1054
|
+
}
|
1055
|
+
|
1056
|
+
return (int) ngx_strcmp(second->name.data, first->name.data);
|
1057
|
+
}
|
1058
|
+
|
1059
|
+
|
1060
|
+
static int ngx_libc_cdecl
|
1061
|
+
ngx_http_fancyindex_cmp_entries_size_desc(const void *one, const void *two)
|
1062
|
+
{
|
1063
|
+
ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
|
1064
|
+
ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
|
1065
|
+
|
1066
|
+
/* move the directories to the start */
|
1067
|
+
if (first->dir && !second->dir) {
|
1068
|
+
return -1;
|
1069
|
+
}
|
1070
|
+
if (!first->dir && second->dir) {
|
1071
|
+
return 1;
|
1072
|
+
}
|
1073
|
+
|
1074
|
+
return second->size - first->size;
|
1075
|
+
}
|
1076
|
+
|
1077
|
+
|
1078
|
+
static int ngx_libc_cdecl
|
1079
|
+
ngx_http_fancyindex_cmp_entries_mtime_desc(const void *one, const void *two)
|
1080
|
+
{
|
1081
|
+
ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
|
1082
|
+
ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
|
1083
|
+
|
1084
|
+
/* move the directories to the start */
|
1085
|
+
if (first->dir && !second->dir) {
|
1086
|
+
return -1;
|
1087
|
+
}
|
1088
|
+
if (!first->dir && second->dir) {
|
1089
|
+
return 1;
|
1090
|
+
}
|
1091
|
+
|
1092
|
+
return second->mtime - first->mtime;
|
1093
|
+
}
|
1094
|
+
|
1095
|
+
|
1096
|
+
static int ngx_libc_cdecl
|
1097
|
+
ngx_http_fancyindex_cmp_entries_name_asc(const void *one, const void *two)
|
1098
|
+
{
|
1099
|
+
ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
|
1100
|
+
ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
|
1101
|
+
|
1102
|
+
/* move the directories to the start */
|
1103
|
+
if (first->dir && !second->dir) {
|
1104
|
+
return -1;
|
1105
|
+
}
|
1106
|
+
if (!first->dir && second->dir) {
|
1107
|
+
return 1;
|
1108
|
+
}
|
1109
|
+
|
1110
|
+
return (int) ngx_strcmp(first->name.data, second->name.data);
|
1111
|
+
}
|
1112
|
+
|
1113
|
+
|
1114
|
+
static int ngx_libc_cdecl
|
1115
|
+
ngx_http_fancyindex_cmp_entries_size_asc(const void *one, const void *two)
|
1116
|
+
{
|
1117
|
+
ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
|
1118
|
+
ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
|
1119
|
+
|
1120
|
+
/* move the directories to the start */
|
1121
|
+
if (first->dir && !second->dir) {
|
1122
|
+
return -1;
|
1123
|
+
}
|
1124
|
+
if (!first->dir && second->dir) {
|
1125
|
+
return 1;
|
1126
|
+
}
|
1127
|
+
|
1128
|
+
return first->size - second->size;
|
1129
|
+
}
|
1130
|
+
|
1131
|
+
|
1132
|
+
static int ngx_libc_cdecl
|
1133
|
+
ngx_http_fancyindex_cmp_entries_mtime_asc(const void *one, const void *two)
|
1134
|
+
{
|
1135
|
+
ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
|
1136
|
+
ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
|
1137
|
+
|
1138
|
+
/* move the directories to the start */
|
1139
|
+
if (first->dir && !second->dir) {
|
1140
|
+
return -1;
|
1141
|
+
}
|
1142
|
+
if (!first->dir && second->dir) {
|
1143
|
+
return 1;
|
1144
|
+
}
|
1145
|
+
|
1146
|
+
return first->mtime - second->mtime;
|
1147
|
+
}
|
1148
|
+
|
1149
|
+
|
1150
|
+
static ngx_int_t
|
1151
|
+
ngx_http_fancyindex_error(ngx_http_request_t *r, ngx_dir_t *dir, ngx_str_t *name)
|
1152
|
+
{
|
1153
|
+
if (ngx_close_dir(dir) == NGX_ERROR) {
|
1154
|
+
ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
|
1155
|
+
ngx_close_dir_n " \"%V\" failed", name);
|
1156
|
+
}
|
1157
|
+
|
1158
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
1159
|
+
}
|
1160
|
+
|
1161
|
+
|
1162
|
+
static void *
|
1163
|
+
ngx_http_fancyindex_create_loc_conf(ngx_conf_t *cf)
|
1164
|
+
{
|
1165
|
+
ngx_http_fancyindex_loc_conf_t *conf;
|
1166
|
+
|
1167
|
+
conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_fancyindex_loc_conf_t));
|
1168
|
+
if (conf == NULL) {
|
1169
|
+
return NGX_CONF_ERROR;
|
1170
|
+
}
|
1171
|
+
|
1172
|
+
/*
|
1173
|
+
* Set by ngx_pcalloc:
|
1174
|
+
* conf->header.len = 0
|
1175
|
+
* conf->header.data = NULL
|
1176
|
+
* conf->footer.len = 0
|
1177
|
+
* conf->footer.data = NULL
|
1178
|
+
*/
|
1179
|
+
conf->enable = NGX_CONF_UNSET;
|
1180
|
+
conf->default_sort = NGX_CONF_UNSET_UINT;
|
1181
|
+
conf->localtime = NGX_CONF_UNSET;
|
1182
|
+
conf->name_length = NGX_CONF_UNSET_UINT;
|
1183
|
+
conf->exact_size = NGX_CONF_UNSET;
|
1184
|
+
conf->ignore = NGX_CONF_UNSET_PTR;
|
1185
|
+
|
1186
|
+
return conf;
|
1187
|
+
}
|
1188
|
+
|
1189
|
+
|
1190
|
+
static char *
|
1191
|
+
ngx_http_fancyindex_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
1192
|
+
{
|
1193
|
+
ngx_http_fancyindex_loc_conf_t *prev = parent;
|
1194
|
+
ngx_http_fancyindex_loc_conf_t *conf = child;
|
1195
|
+
|
1196
|
+
ngx_conf_merge_value(conf->enable, prev->enable, 0);
|
1197
|
+
ngx_conf_merge_uint_value(conf->default_sort, prev->default_sort, NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME);
|
1198
|
+
ngx_conf_merge_value(conf->localtime, prev->localtime, 0);
|
1199
|
+
ngx_conf_merge_value(conf->exact_size, prev->exact_size, 1);
|
1200
|
+
ngx_conf_merge_uint_value(conf->name_length, prev->name_length, 50);
|
1201
|
+
|
1202
|
+
ngx_conf_merge_str_value(conf->header, prev->header, "");
|
1203
|
+
ngx_conf_merge_str_value(conf->footer, prev->footer, "");
|
1204
|
+
|
1205
|
+
ngx_conf_merge_ptr_value(conf->ignore, prev->ignore, NULL);
|
1206
|
+
|
1207
|
+
return NGX_CONF_OK;
|
1208
|
+
}
|
1209
|
+
|
1210
|
+
|
1211
|
+
static char*
|
1212
|
+
ngx_http_fancyindex_ignore(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
1213
|
+
{
|
1214
|
+
ngx_http_fancyindex_loc_conf_t *alcf = conf;
|
1215
|
+
ngx_str_t *value;
|
1216
|
+
|
1217
|
+
#if (NGX_PCRE)
|
1218
|
+
ngx_uint_t i;
|
1219
|
+
ngx_regex_elt_t *re;
|
1220
|
+
ngx_regex_compile_t rc;
|
1221
|
+
u_char errstr[NGX_MAX_CONF_ERRSTR];
|
1222
|
+
|
1223
|
+
if (alcf->ignore == NGX_CONF_UNSET_PTR) {
|
1224
|
+
alcf->ignore = ngx_array_create(cf->pool, 2, sizeof(ngx_regex_elt_t));
|
1225
|
+
if (alcf->ignore == NULL) {
|
1226
|
+
return NGX_CONF_ERROR;
|
1227
|
+
}
|
1228
|
+
}
|
1229
|
+
|
1230
|
+
value = cf->args->elts;
|
1231
|
+
|
1232
|
+
ngx_memzero(&rc, sizeof(ngx_regex_compile_t));
|
1233
|
+
|
1234
|
+
rc.err.data = errstr;
|
1235
|
+
rc.err.len = NGX_MAX_CONF_ERRSTR;
|
1236
|
+
rc.pool = cf->pool;
|
1237
|
+
|
1238
|
+
for (i = 1; i < cf->args->nelts; i++) {
|
1239
|
+
re = ngx_array_push(alcf->ignore);
|
1240
|
+
if (re == NULL) {
|
1241
|
+
return NGX_CONF_ERROR;
|
1242
|
+
}
|
1243
|
+
|
1244
|
+
rc.pattern = value[i];
|
1245
|
+
rc.options = NGX_REGEX_CASELESS;
|
1246
|
+
|
1247
|
+
if (ngx_regex_compile(&rc) != NGX_OK) {
|
1248
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
|
1249
|
+
return NGX_CONF_ERROR;
|
1250
|
+
}
|
1251
|
+
|
1252
|
+
re->name = value[i].data;
|
1253
|
+
re->regex = rc.regex;
|
1254
|
+
}
|
1255
|
+
|
1256
|
+
return NGX_CONF_OK;
|
1257
|
+
#else /* !NGX_PCRE */
|
1258
|
+
ngx_uint_t i;
|
1259
|
+
ngx_str_t *str;
|
1260
|
+
|
1261
|
+
if (alcf->ignore == NGX_CONF_UNSET_PTR) {
|
1262
|
+
alcf->ignore = ngx_array_create(cf->pool, 2, sizeof(ngx_str_t));
|
1263
|
+
if (alcf->ignore == NULL) {
|
1264
|
+
return NGX_CONF_ERROR;
|
1265
|
+
}
|
1266
|
+
}
|
1267
|
+
|
1268
|
+
value = cf->args->elts;
|
1269
|
+
|
1270
|
+
for (i = 1; i < cf->args->nelts; i++) {
|
1271
|
+
str = ngx_array_push(alcf->ignore);
|
1272
|
+
if (str == NULL) {
|
1273
|
+
return NGX_CONF_ERROR;
|
1274
|
+
}
|
1275
|
+
|
1276
|
+
str->data = value[i].data;
|
1277
|
+
str->len = value[i].len;
|
1278
|
+
}
|
1279
|
+
|
1280
|
+
return NGX_CONF_OK;
|
1281
|
+
#endif /* NGX_PCRE */
|
1282
|
+
|
1283
|
+
}
|
1284
|
+
|
1285
|
+
|
1286
|
+
static ngx_int_t
|
1287
|
+
ngx_http_fancyindex_init(ngx_conf_t *cf)
|
1288
|
+
{
|
1289
|
+
ngx_http_handler_pt *h;
|
1290
|
+
ngx_http_core_main_conf_t *cmcf;
|
1291
|
+
|
1292
|
+
cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
|
1293
|
+
|
1294
|
+
h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
|
1295
|
+
if (h == NULL) {
|
1296
|
+
return NGX_ERROR;
|
1297
|
+
}
|
1298
|
+
|
1299
|
+
*h = ngx_http_fancyindex_handler;
|
1300
|
+
|
1301
|
+
return NGX_OK;
|
1302
|
+
}
|
1303
|
+
|
1304
|
+
/* vim:et:sw=4:ts=4:
|
1305
|
+
*/
|