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