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.

Files changed (579) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/CHANGELOG +15 -0
  5. data/bin/passenger-install-apache2-module +2 -1
  6. data/bin/passenger-install-nginx-module +8 -2
  7. data/ext/apache2/Hooks.cpp +21 -2
  8. data/ext/apache2/MergeDirConfig.cpp +40 -40
  9. data/ext/common/ApplicationPool2/Group.h +14 -10
  10. data/ext/common/ApplicationPool2/Implementation.cpp +13 -7
  11. data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
  12. data/ext/common/Constants.h +1 -1
  13. data/ext/nginx/ContentHandler.c +17 -1
  14. data/lib/phusion_passenger.rb +4 -5
  15. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +4 -3
  16. data/lib/phusion_passenger/platform_info/openssl.rb +61 -0
  17. data/lib/phusion_passenger/standalone/runtime_installer.rb +27 -22
  18. data/packaging/debian/LICENSE.md +19 -0
  19. data/packaging/debian/README.md +320 -0
  20. data/packaging/debian/Vagrantfile +25 -0
  21. data/packaging/debian/build +210 -0
  22. data/packaging/debian/debian_specs/nginx/changelog +1989 -0
  23. data/packaging/debian/debian_specs/nginx/compat.erb +5 -0
  24. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +25 -0
  25. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +24 -0
  26. data/packaging/debian/debian_specs/nginx/conf/koi-utf +109 -0
  27. data/packaging/debian/debian_specs/nginx/conf/koi-win +103 -0
  28. data/packaging/debian/debian_specs/nginx/conf/mime.types +89 -0
  29. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +97 -0
  30. data/packaging/debian/debian_specs/nginx/conf/proxy_params +4 -0
  31. data/packaging/debian/debian_specs/nginx/conf/scgi_params +16 -0
  32. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +93 -0
  33. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +13 -0
  34. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +5 -0
  35. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +16 -0
  36. data/packaging/debian/debian_specs/nginx/conf/win-utf +125 -0
  37. data/packaging/debian/debian_specs/nginx/control.erb +226 -0
  38. data/packaging/debian/debian_specs/nginx/copyright +196 -0
  39. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +1 -0
  40. data/packaging/debian/debian_specs/nginx/gbp.conf +2 -0
  41. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +14 -0
  42. data/packaging/debian/debian_specs/nginx/help/docs/php +119 -0
  43. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +28 -0
  44. data/packaging/debian/debian_specs/nginx/help/docs/upstream +51 -0
  45. data/packaging/debian/debian_specs/nginx/help/examples/drupal +114 -0
  46. data/packaging/debian/debian_specs/nginx/help/examples/http +59 -0
  47. data/packaging/debian/debian_specs/nginx/help/examples/mail +30 -0
  48. data/packaging/debian/debian_specs/nginx/help/examples/mailman +59 -0
  49. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +34 -0
  50. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +162 -0
  51. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +155 -0
  52. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +74 -0
  53. data/packaging/debian/debian_specs/nginx/helpers.rb +41 -0
  54. data/packaging/debian/debian_specs/nginx/index-debian.html.in +32 -0
  55. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +32 -0
  56. data/packaging/debian/debian_specs/nginx/index.html.erb +10 -0
  57. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +65 -0
  58. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +510 -0
  59. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +5 -0
  60. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +395 -0
  61. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +119 -0
  62. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +348 -0
  63. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +80 -0
  64. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +826 -0
  65. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +26 -0
  66. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +716 -0
  67. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +26 -0
  68. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +380 -0
  69. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +52 -0
  70. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +32 -0
  71. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +215 -0
  72. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +35 -0
  73. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +25 -0
  74. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +93 -0
  75. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +4 -0
  76. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +462 -0
  77. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +66 -0
  78. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +26 -0
  79. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +171 -0
  80. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +7 -0
  81. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +21 -0
  82. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +1803 -0
  83. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +29 -0
  84. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +9 -0
  85. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +824 -0
  86. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +139 -0
  87. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +395 -0
  88. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +1 -0
  89. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +10 -0
  90. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +8 -0
  91. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +597 -0
  92. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +5 -0
  93. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +12 -0
  94. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +22 -0
  95. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +25 -0
  96. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +35 -0
  97. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +22 -0
  98. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +3 -0
  99. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +4 -0
  100. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +5 -0
  101. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +15 -0
  102. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +2 -0
  103. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +7 -0
  104. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +43 -0
  105. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +78 -0
  106. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +6 -0
  107. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +12 -0
  108. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +49 -0
  109. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +63 -0
  110. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +62 -0
  111. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +124 -0
  112. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +48 -0
  113. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +45 -0
  114. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +12 -0
  115. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +4 -0
  116. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +136 -0
  117. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +797 -0
  118. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +17 -0
  119. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +24 -0
  120. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +113 -0
  121. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +2203 -0
  122. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +5423 -0
  123. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +227 -0
  124. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +72 -0
  125. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +98 -0
  126. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +66 -0
  127. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +112 -0
  128. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +16 -0
  129. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +291 -0
  130. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +19 -0
  131. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +117 -0
  132. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +77 -0
  133. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +200 -0
  134. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +155 -0
  135. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +58 -0
  136. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +43 -0
  137. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +5 -0
  138. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +129 -0
  139. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +30 -0
  140. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +192 -0
  141. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +21 -0
  142. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +396 -0
  143. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +44 -0
  144. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +72 -0
  145. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +171 -0
  146. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +57 -0
  147. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +12 -0
  148. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +82 -0
  149. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +45 -0
  150. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +138 -0
  151. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +3 -0
  152. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +35 -0
  153. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +3 -0
  154. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +165 -0
  155. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +67 -0
  156. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +583 -0
  157. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +22 -0
  158. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +20 -0
  159. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +12 -0
  160. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +215 -0
  161. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +7 -0
  162. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +103 -0
  163. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +26 -0
  164. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +602 -0
  165. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +44 -0
  166. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +434 -0
  167. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +37 -0
  168. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +14 -0
  169. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +205 -0
  170. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +27 -0
  171. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +45 -0
  172. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +6 -0
  173. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +25 -0
  174. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +1850 -0
  175. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +5 -0
  176. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +1558 -0
  177. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +109 -0
  178. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +344 -0
  179. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +25 -0
  180. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +282 -0
  181. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +15 -0
  182. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +183 -0
  183. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +16 -0
  184. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +429 -0
  185. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +18 -0
  186. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +178 -0
  187. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +13 -0
  188. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +667 -0
  189. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +137 -0
  190. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +452 -0
  191. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +31 -0
  192. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +208 -0
  193. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +16 -0
  194. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +788 -0
  195. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +19 -0
  196. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +96 -0
  197. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +13 -0
  198. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +298 -0
  199. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +58 -0
  200. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +110 -0
  201. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +9 -0
  202. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +45 -0
  203. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +8 -0
  204. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +131 -0
  205. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +38 -0
  206. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +24 -0
  207. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +206 -0
  208. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +54 -0
  209. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +26 -0
  210. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +191 -0
  211. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +59 -0
  212. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +73 -0
  213. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +783 -0
  214. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +31 -0
  215. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +361 -0
  216. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +120 -0
  217. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +1180 -0
  218. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +1 -0
  219. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +146 -0
  220. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +5 -0
  221. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +51 -0
  222. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +178 -0
  223. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +5 -0
  224. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +246 -0
  225. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +9 -0
  226. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +51 -0
  227. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +6954 -0
  228. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +363 -0
  229. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +5898 -0
  230. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +61 -0
  231. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +3 -0
  232. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +138 -0
  233. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +140 -0
  234. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +52 -0
  235. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +82 -0
  236. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +377 -0
  237. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +22 -0
  238. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +77 -0
  239. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +537 -0
  240. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +20 -0
  241. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +632 -0
  242. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +31 -0
  243. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +296 -0
  244. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +24 -0
  245. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +175 -0
  246. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +20 -0
  247. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +887 -0
  248. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +22 -0
  249. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +478 -0
  250. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +67 -0
  251. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +19 -0
  252. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +148 -0
  253. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +20 -0
  254. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +369 -0
  255. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +26 -0
  256. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +483 -0
  257. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +20 -0
  258. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +379 -0
  259. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +23 -0
  260. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +216 -0
  261. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +23 -0
  262. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +1081 -0
  263. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +56 -0
  264. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +58 -0
  265. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +33 -0
  266. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +302 -0
  267. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +29 -0
  268. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +1370 -0
  269. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +22 -0
  270. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +782 -0
  271. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +22 -0
  272. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +625 -0
  273. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +23 -0
  274. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +42 -0
  275. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +23 -0
  276. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +320 -0
  277. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +25 -0
  278. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +300 -0
  279. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +20 -0
  280. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +227 -0
  281. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +22 -0
  282. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +252 -0
  283. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +20 -0
  284. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +924 -0
  285. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +184 -0
  286. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +21 -0
  287. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +794 -0
  288. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +28 -0
  289. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +106 -0
  290. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +23 -0
  291. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +94 -0
  292. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +13 -0
  293. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +85 -0
  294. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +2468 -0
  295. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +22 -0
  296. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +1169 -0
  297. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +20 -0
  298. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +252 -0
  299. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +19 -0
  300. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +351 -0
  301. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +22 -0
  302. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +538 -0
  303. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +86 -0
  304. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +216 -0
  305. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +15 -0
  306. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +1844 -0
  307. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +52 -0
  308. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +191 -0
  309. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +20 -0
  310. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +5314 -0
  311. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +156 -0
  312. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +1624 -0
  313. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +56 -0
  314. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +704 -0
  315. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +20 -0
  316. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +1741 -0
  317. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +46 -0
  318. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +278 -0
  319. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +21 -0
  320. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +661 -0
  321. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +20 -0
  322. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +110 -0
  323. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +20 -0
  324. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +283 -0
  325. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +36 -0
  326. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +3972 -0
  327. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +423 -0
  328. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +499 -0
  329. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +20 -0
  330. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +64 -0
  331. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +17 -0
  332. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +5 -0
  333. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +39 -0
  334. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +55 -0
  335. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +27 -0
  336. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +415 -0
  337. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +62 -0
  338. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +64 -0
  339. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +8 -0
  340. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +8 -0
  341. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +102 -0
  342. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +10 -0
  343. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +4 -0
  344. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +144 -0
  345. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +107 -0
  346. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +25 -0
  347. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +8 -0
  348. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +329 -0
  349. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +3 -0
  350. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +1774 -0
  351. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +53 -0
  352. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +3 -0
  353. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +1356 -0
  354. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +37 -0
  355. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +24 -0
  356. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +20 -0
  357. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +182 -0
  358. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +8 -0
  359. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +23 -0
  360. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +1305 -0
  361. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +52 -0
  362. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +103 -0
  363. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +102 -0
  364. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +37 -0
  365. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +141 -0
  366. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +3 -0
  367. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +120 -0
  368. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +199 -0
  369. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +123 -0
  370. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +1298 -0
  371. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +275 -0
  372. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +820 -0
  373. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +470 -0
  374. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +82 -0
  375. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +83 -0
  376. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +81 -0
  377. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +93 -0
  378. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +34 -0
  379. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +415 -0
  380. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +716 -0
  381. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +29 -0
  382. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +64 -0
  383. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +63 -0
  384. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +539 -0
  385. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +682 -0
  386. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +341 -0
  387. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +1413 -0
  388. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +81 -0
  389. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +735 -0
  390. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +315 -0
  391. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +524 -0
  392. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +1749 -0
  393. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +874 -0
  394. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +136 -0
  395. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +32 -0
  396. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +32 -0
  397. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +108 -0
  398. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +59 -0
  399. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +5 -0
  400. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +7 -0
  401. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +29 -0
  402. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +129 -0
  403. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +135 -0
  404. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +45 -0
  405. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +32 -0
  406. data/packaging/debian/debian_specs/nginx/nginx-common.install +3 -0
  407. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +2 -0
  408. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +1 -0
  409. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +10 -0
  410. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +214 -0
  411. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +18 -0
  412. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +37 -0
  413. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +66 -0
  414. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +46 -0
  415. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +47 -0
  416. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +28 -0
  417. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +2 -0
  418. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +1 -0
  419. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +17 -0
  420. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +1 -0
  421. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +44 -0
  422. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +22 -0
  423. data/packaging/debian/debian_specs/nginx/nginx.1 +47 -0
  424. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +23 -0
  425. data/packaging/debian/debian_specs/nginx/patches/series +1 -0
  426. data/packaging/debian/debian_specs/nginx/rules.erb +185 -0
  427. data/packaging/debian/debian_specs/nginx/source/format +1 -0
  428. data/packaging/debian/debian_specs/nginx/tests/control +4 -0
  429. data/packaging/debian/debian_specs/nginx/ufw/nginx +14 -0
  430. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +34 -0
  431. data/packaging/debian/debian_specs/nginx/watch +3 -0
  432. data/packaging/debian/debian_specs/passenger/README.Debian +12 -0
  433. data/packaging/debian/debian_specs/passenger/changelog +316 -0
  434. data/packaging/debian/debian_specs/passenger/compat +1 -0
  435. data/packaging/debian/debian_specs/passenger/control.erb +123 -0
  436. data/packaging/debian/debian_specs/passenger/copyright +385 -0
  437. data/packaging/debian/debian_specs/passenger/helpers.rb +24 -0
  438. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +3 -0
  439. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +36 -0
  440. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +15 -0
  441. data/packaging/debian/debian_specs/passenger/locations.ini.erb +14 -0
  442. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +3 -0
  443. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +2 -0
  444. data/packaging/debian/debian_specs/passenger/passenger.conf +6 -0
  445. data/packaging/debian/debian_specs/passenger/passenger.docs +4 -0
  446. data/packaging/debian/debian_specs/passenger/passenger.install.erb +16 -0
  447. data/packaging/debian/debian_specs/passenger/passenger.load +3 -0
  448. data/packaging/debian/debian_specs/passenger/passenger.manpages +3 -0
  449. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +29 -0
  450. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +54 -0
  451. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +37 -0
  452. data/packaging/debian/debian_specs/passenger/patches/series +0 -0
  453. data/packaging/debian/debian_specs/passenger/rules.erb +84 -0
  454. data/packaging/debian/debian_specs/passenger/source/format +1 -0
  455. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +12 -0
  456. data/packaging/debian/debian_specs/passenger_enterprise/changelog +316 -0
  457. data/packaging/debian/debian_specs/passenger_enterprise/compat +1 -0
  458. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +123 -0
  459. data/packaging/debian/debian_specs/passenger_enterprise/copyright +385 -0
  460. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +2 -0
  461. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +3 -0
  462. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +36 -0
  463. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +15 -0
  464. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +14 -0
  465. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +3 -0
  466. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +2 -0
  467. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +4 -0
  468. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +14 -0
  469. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +3 -0
  470. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +6 -0
  471. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +3 -0
  472. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +1 -0
  473. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +1 -0
  474. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +1 -0
  475. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  476. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +84 -0
  477. data/packaging/debian/debian_specs/passenger_enterprise/source/format +1 -0
  478. data/packaging/debian/docker_images/Makefile +38 -0
  479. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  480. data/packaging/debian/docker_images/buildbox/Dockerfile +3 -0
  481. data/packaging/debian/docker_images/buildbox/Gemfile +9 -0
  482. data/packaging/debian/docker_images/buildbox/Gemfile.lock +42 -0
  483. data/packaging/debian/docker_images/buildbox/install.sh +85 -0
  484. data/packaging/debian/docker_images/buildbox/pbuilderrc +4 -0
  485. data/packaging/debian/docker_images/buildbox/sudoers.conf +6 -0
  486. data/packaging/debian/docker_images/setup-buildbox-docker-image +7 -0
  487. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +7 -0
  488. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +7 -0
  489. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +7 -0
  490. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +7 -0
  491. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +7 -0
  492. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +7 -0
  493. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +7 -0
  494. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +3 -0
  495. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +2 -0
  496. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +23 -0
  497. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +2374 -0
  498. data/packaging/debian/docker_images/testbox-debian-6/install.sh +78 -0
  499. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +3 -0
  500. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +2 -0
  501. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +23 -0
  502. data/packaging/debian/docker_images/testbox-debian-7/install.sh +71 -0
  503. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +3 -0
  504. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +2 -0
  505. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +23 -0
  506. data/packaging/debian/docker_images/testbox-debian-8/install.sh +70 -0
  507. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +3 -0
  508. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +2 -0
  509. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +23 -0
  510. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +69 -0
  511. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +3 -0
  512. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +2 -0
  513. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +23 -0
  514. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +69 -0
  515. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +3 -0
  516. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +2 -0
  517. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +23 -0
  518. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +69 -0
  519. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +3 -0
  520. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +2 -0
  521. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +23 -0
  522. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +69 -0
  523. data/packaging/debian/internal/build/Rakefile +235 -0
  524. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +76 -0
  525. data/packaging/debian/internal/build/build-source-package.rb +121 -0
  526. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +17 -0
  527. data/packaging/debian/internal/build/rakefile_support.rb +96 -0
  528. data/packaging/debian/internal/build/setup-environment-essentials.sh +15 -0
  529. data/packaging/debian/internal/build/setup-environment.sh +29 -0
  530. data/packaging/debian/internal/lib/distro_info.rb +82 -0
  531. data/packaging/debian/internal/lib/distro_info.sh +303 -0
  532. data/packaging/debian/internal/lib/distro_info.sh.erb +65 -0
  533. data/packaging/debian/internal/lib/library.sh +83 -0
  534. data/packaging/debian/internal/lib/preprocessor.rb +173 -0
  535. data/packaging/debian/internal/lib/tracking.rb +95 -0
  536. data/packaging/debian/internal/lib/tracking_category.rb +45 -0
  537. data/packaging/debian/internal/lib/tracking_database.rb +132 -0
  538. data/packaging/debian/internal/lib/tracking_task.rb +148 -0
  539. data/packaging/debian/internal/lib/utils.rb +78 -0
  540. data/packaging/debian/internal/publish/Rakefile +97 -0
  541. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +1 -0
  542. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +1 -0
  543. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +1 -0
  544. data/packaging/debian/internal/publish/preinit.sh +7 -0
  545. data/packaging/debian/internal/publish/rakefile_support.rb +183 -0
  546. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +11 -0
  547. data/packaging/debian/internal/scripts/initccache.sh +35 -0
  548. data/packaging/debian/internal/scripts/inituidgid.sh +19 -0
  549. data/packaging/debian/internal/scripts/my_init +340 -0
  550. data/packaging/debian/internal/scripts/pin_certificates +34 -0
  551. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +3 -0
  552. data/packaging/debian/internal/scripts/setup-vagrant.sh +12 -0
  553. data/packaging/debian/internal/scripts/setuser +31 -0
  554. data/packaging/debian/internal/shell/initpbuilder.sh +3 -0
  555. data/packaging/debian/internal/shell/preinit.sh +28 -0
  556. data/packaging/debian/internal/shell/sudoers.conf +1 -0
  557. data/packaging/debian/internal/test/apache/apache-24.conf +5 -0
  558. data/packaging/debian/internal/test/apache/apache-pre-24.conf +4 -0
  559. data/packaging/debian/internal/test/apache/vhost.conf +17 -0
  560. data/packaging/debian/internal/test/misc/config.json +15 -0
  561. data/packaging/debian/internal/test/misc/hosts.conf +4 -0
  562. data/packaging/debian/internal/test/misc/init.sh +25 -0
  563. data/packaging/debian/internal/test/misc/nodejs_test_app.js +6 -0
  564. data/packaging/debian/internal/test/misc/python_test_app.py +3 -0
  565. data/packaging/debian/internal/test/misc/ruby_test_app.rb +5 -0
  566. data/packaging/debian/internal/test/misc/test_support.rb +61 -0
  567. data/packaging/debian/internal/test/nginx/vhost.conf +23 -0
  568. data/packaging/debian/internal/test/system_web_server_test.rb +126 -0
  569. data/packaging/debian/internal/test/test.sh +141 -0
  570. data/packaging/debian/jenkins/publish/clear_caches.rb +48 -0
  571. data/packaging/debian/jenkins/publish/publish.sh +69 -0
  572. data/packaging/debian/jenkins/test/test.sh +63 -0
  573. data/packaging/debian/passenger_apt_automation.sublime-project +14 -0
  574. data/packaging/debian/publish +172 -0
  575. data/packaging/debian/shell +116 -0
  576. data/packaging/debian/test +142 -0
  577. metadata +563 -3
  578. metadata.gz.asc +7 -7
  579. 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&amp;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("&gt;")
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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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&amp;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, "..&gt;</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
+ */