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,20 @@
1
+
2
+ /*
3
+ * Copyright (C) Xiaozhe Wang (chaoslawful)
4
+ * Copyright (C) Yichun Zhang (agentzh)
5
+ */
6
+
7
+
8
+ #ifndef _NGX_HTTP_LUA_STRING_H_INCLUDED_
9
+ #define _NGX_HTTP_LUA_STRING_H_INCLUDED_
10
+
11
+
12
+ #include "ngx_http_lua_common.h"
13
+
14
+
15
+ void ngx_http_lua_inject_string_api(lua_State *L);
16
+
17
+
18
+ #endif /* _NGX_HTTP_LUA_STRING_H_INCLUDED_ */
19
+
20
+ /* vi:set ft=c ts=4 sw=4 et fdm=marker: */
@@ -0,0 +1,1741 @@
1
+
2
+ /*
3
+ * Copyright (C) Xiaozhe Wang (chaoslawful)
4
+ * Copyright (C) Yichun Zhang (agentzh)
5
+ */
6
+
7
+
8
+ #ifndef DDEBUG
9
+ #define DDEBUG 0
10
+ #endif
11
+ #include "ddebug.h"
12
+
13
+
14
+ #include "ngx_http_lua_subrequest.h"
15
+ #include "ngx_http_lua_util.h"
16
+ #include "ngx_http_lua_ctx.h"
17
+ #include "ngx_http_lua_contentby.h"
18
+ #include "ngx_http_lua_headers_in.h"
19
+ #if defined(NGX_DTRACE) && NGX_DTRACE
20
+ #include "ngx_http_probe.h"
21
+ #endif
22
+
23
+
24
+ #define NGX_HTTP_LUA_SHARE_ALL_VARS 0x01
25
+ #define NGX_HTTP_LUA_COPY_ALL_VARS 0x02
26
+
27
+
28
+ #define ngx_http_lua_method_name(m) { sizeof(m) - 1, (u_char *) m " " }
29
+
30
+ ngx_str_t ngx_http_lua_get_method = ngx_http_lua_method_name("GET");
31
+ ngx_str_t ngx_http_lua_put_method = ngx_http_lua_method_name("PUT");
32
+ ngx_str_t ngx_http_lua_post_method = ngx_http_lua_method_name("POST");
33
+ ngx_str_t ngx_http_lua_head_method = ngx_http_lua_method_name("HEAD");
34
+ ngx_str_t ngx_http_lua_delete_method =
35
+ ngx_http_lua_method_name("DELETE");
36
+ ngx_str_t ngx_http_lua_options_method =
37
+ ngx_http_lua_method_name("OPTIONS");
38
+ ngx_str_t ngx_http_lua_copy_method = ngx_http_lua_method_name("COPY");
39
+ ngx_str_t ngx_http_lua_move_method = ngx_http_lua_method_name("MOVE");
40
+ ngx_str_t ngx_http_lua_lock_method = ngx_http_lua_method_name("LOCK");
41
+ ngx_str_t ngx_http_lua_mkcol_method =
42
+ ngx_http_lua_method_name("MKCOL");
43
+ ngx_str_t ngx_http_lua_propfind_method =
44
+ ngx_http_lua_method_name("PROPFIND");
45
+ ngx_str_t ngx_http_lua_proppatch_method =
46
+ ngx_http_lua_method_name("PROPPATCH");
47
+ ngx_str_t ngx_http_lua_unlock_method =
48
+ ngx_http_lua_method_name("UNLOCK");
49
+ ngx_str_t ngx_http_lua_patch_method =
50
+ ngx_http_lua_method_name("PATCH");
51
+ ngx_str_t ngx_http_lua_trace_method =
52
+ ngx_http_lua_method_name("TRACE");
53
+
54
+
55
+ static ngx_str_t ngx_http_lua_content_length_header_key =
56
+ ngx_string("Content-Length");
57
+
58
+
59
+ static ngx_int_t ngx_http_lua_set_content_length_header(ngx_http_request_t *r,
60
+ off_t len);
61
+ static ngx_int_t ngx_http_lua_adjust_subrequest(ngx_http_request_t *sr,
62
+ ngx_uint_t method, int forward_body,
63
+ ngx_http_request_body_t *body, unsigned vars_action,
64
+ ngx_array_t *extra_vars);
65
+ static int ngx_http_lua_ngx_location_capture(lua_State *L);
66
+ static int ngx_http_lua_ngx_location_capture_multi(lua_State *L);
67
+ static void ngx_http_lua_process_vars_option(ngx_http_request_t *r,
68
+ lua_State *L, int table, ngx_array_t **varsp);
69
+ static ngx_int_t ngx_http_lua_subrequest_add_extra_vars(ngx_http_request_t *r,
70
+ ngx_array_t *extra_vars);
71
+ static ngx_int_t ngx_http_lua_subrequest(ngx_http_request_t *r,
72
+ ngx_str_t *uri, ngx_str_t *args, ngx_http_request_t **psr,
73
+ ngx_http_post_subrequest_t *ps, ngx_uint_t flags);
74
+ static ngx_int_t ngx_http_lua_subrequest_resume(ngx_http_request_t *r);
75
+ static void ngx_http_lua_handle_subreq_responses(ngx_http_request_t *r,
76
+ ngx_http_lua_ctx_t *ctx);
77
+ static void ngx_http_lua_cancel_subreq(ngx_http_request_t *r);
78
+ static ngx_int_t ngx_http_post_request_to_head(ngx_http_request_t *r);
79
+ static ngx_int_t ngx_http_lua_copy_in_file_request_body(ngx_http_request_t *r);
80
+ static ngx_int_t ngx_http_lua_copy_request_headers(ngx_http_request_t *sr,
81
+ ngx_http_request_t *r);
82
+
83
+
84
+ /* ngx.location.capture is just a thin wrapper around
85
+ * ngx.location.capture_multi */
86
+ static int
87
+ ngx_http_lua_ngx_location_capture(lua_State *L)
88
+ {
89
+ int n;
90
+
91
+ n = lua_gettop(L);
92
+
93
+ if (n != 1 && n != 2) {
94
+ return luaL_error(L, "expecting one or two arguments");
95
+ }
96
+
97
+ lua_createtable(L, n, 0); /* uri opts? table */
98
+ lua_insert(L, 1); /* table uri opts? */
99
+ if (n == 1) { /* table uri */
100
+ lua_rawseti(L, 1, 1); /* table */
101
+
102
+ } else { /* table uri opts */
103
+ lua_rawseti(L, 1, 2); /* table uri */
104
+ lua_rawseti(L, 1, 1); /* table */
105
+ }
106
+
107
+ lua_createtable(L, 1, 0); /* table table' */
108
+ lua_insert(L, 1); /* table' table */
109
+ lua_rawseti(L, 1, 1); /* table' */
110
+
111
+ return ngx_http_lua_ngx_location_capture_multi(L);
112
+ }
113
+
114
+
115
+ static int
116
+ ngx_http_lua_ngx_location_capture_multi(lua_State *L)
117
+ {
118
+ ngx_http_request_t *r;
119
+ ngx_http_request_t *sr; /* subrequest object */
120
+ ngx_http_post_subrequest_t *psr;
121
+ ngx_http_lua_ctx_t *sr_ctx;
122
+ ngx_http_lua_ctx_t *ctx;
123
+ ngx_array_t *extra_vars;
124
+ ngx_str_t uri;
125
+ ngx_str_t args;
126
+ ngx_str_t extra_args;
127
+ ngx_uint_t flags;
128
+ u_char *p;
129
+ u_char *q;
130
+ size_t len;
131
+ size_t nargs;
132
+ int rc;
133
+ int n;
134
+ int always_forward_body = 0;
135
+ ngx_uint_t method;
136
+ ngx_http_request_body_t *body;
137
+ int type;
138
+ ngx_buf_t *b;
139
+ unsigned vars_action;
140
+ ngx_uint_t nsubreqs;
141
+ ngx_uint_t index;
142
+ size_t sr_statuses_len;
143
+ size_t sr_headers_len;
144
+ size_t sr_bodies_len;
145
+ size_t sr_flags_len;
146
+ unsigned custom_ctx;
147
+ ngx_http_lua_co_ctx_t *coctx;
148
+
149
+ ngx_http_lua_post_subrequest_data_t *psr_data;
150
+
151
+ n = lua_gettop(L);
152
+ if (n != 1) {
153
+ return luaL_error(L, "only one argument is expected, but got %d", n);
154
+ }
155
+
156
+ luaL_checktype(L, 1, LUA_TTABLE);
157
+
158
+ nsubreqs = lua_objlen(L, 1);
159
+ if (nsubreqs == 0) {
160
+ return luaL_error(L, "at least one subrequest should be specified");
161
+ }
162
+
163
+ r = ngx_http_lua_get_req(L);
164
+ if (r == NULL) {
165
+ return luaL_error(L, "no request object found");
166
+ }
167
+
168
+ ctx = ngx_http_get_module_ctx(r, ngx_http_lua_module);
169
+ if (ctx == NULL) {
170
+ return luaL_error(L, "no ctx found");
171
+ }
172
+
173
+ ngx_http_lua_check_context(L, ctx, NGX_HTTP_LUA_CONTEXT_REWRITE
174
+ | NGX_HTTP_LUA_CONTEXT_ACCESS
175
+ | NGX_HTTP_LUA_CONTEXT_CONTENT);
176
+
177
+ coctx = ctx->cur_co_ctx;
178
+ if (coctx == NULL) {
179
+ return luaL_error(L, "no co ctx found");
180
+ }
181
+
182
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
183
+ "lua location capture, uri:\"%V\" c:%ud", &r->uri,
184
+ r->main->count);
185
+
186
+ sr_statuses_len = nsubreqs * sizeof(ngx_int_t);
187
+ sr_headers_len = nsubreqs * sizeof(ngx_http_headers_out_t *);
188
+ sr_bodies_len = nsubreqs * sizeof(ngx_str_t);
189
+ sr_flags_len = nsubreqs * sizeof(uint8_t);
190
+
191
+ p = ngx_pcalloc(r->pool, sr_statuses_len + sr_headers_len +
192
+ sr_bodies_len + sr_flags_len);
193
+
194
+ if (p == NULL) {
195
+ return luaL_error(L, "no memory");
196
+ }
197
+
198
+ coctx->sr_statuses = (void *) p;
199
+ p += sr_statuses_len;
200
+
201
+ coctx->sr_headers = (void *) p;
202
+ p += sr_headers_len;
203
+
204
+ coctx->sr_bodies = (void *) p;
205
+ p += sr_bodies_len;
206
+
207
+ coctx->sr_flags = (void *) p;
208
+
209
+ coctx->nsubreqs = nsubreqs;
210
+
211
+ coctx->pending_subreqs = 0;
212
+
213
+ extra_vars = NULL;
214
+
215
+ for (index = 0; index < nsubreqs; index++) {
216
+ coctx->pending_subreqs++;
217
+
218
+ lua_rawgeti(L, 1, index + 1);
219
+ if (lua_isnil(L, -1)) {
220
+ return luaL_error(L, "only array-like tables are allowed");
221
+ }
222
+
223
+ dd("queries query: top %d", lua_gettop(L));
224
+
225
+ if (lua_type(L, -1) != LUA_TTABLE) {
226
+ return luaL_error(L, "the query argument %d is not a table, "
227
+ "but a %s",
228
+ index, lua_typename(L, lua_type(L, -1)));
229
+ }
230
+
231
+ nargs = lua_objlen(L, -1);
232
+
233
+ if (nargs != 1 && nargs != 2) {
234
+ return luaL_error(L, "query argument %d expecting one or "
235
+ "two arguments", index);
236
+ }
237
+
238
+ lua_rawgeti(L, 2, 1); /* queries query uri */
239
+
240
+ dd("queries query uri: %d", lua_gettop(L));
241
+
242
+ dd("first arg in first query: %s", lua_typename(L, lua_type(L, -1)));
243
+
244
+ body = NULL;
245
+
246
+ ngx_str_null(&extra_args);
247
+
248
+ if (extra_vars != NULL) {
249
+ /* flush out existing elements in the array */
250
+ extra_vars->nelts = 0;
251
+ }
252
+
253
+ vars_action = 0;
254
+
255
+ custom_ctx = 0;
256
+
257
+ if (nargs == 2) {
258
+ /* check out the options table */
259
+
260
+ lua_rawgeti(L, 2, 2); /* queries query uri opts */
261
+
262
+ dd("queries query uri opts: %d", lua_gettop(L));
263
+
264
+ if (lua_type(L, 4) != LUA_TTABLE) {
265
+ return luaL_error(L, "expecting table as the 2nd argument for "
266
+ "subrequest %d, but got %s", index,
267
+ luaL_typename(L, 4));
268
+ }
269
+
270
+ dd("queries query uri opts: %d", lua_gettop(L));
271
+
272
+ /* check the args option */
273
+
274
+ lua_getfield(L, 4, "args");
275
+
276
+ type = lua_type(L, -1);
277
+
278
+ switch (type) {
279
+ case LUA_TTABLE:
280
+ ngx_http_lua_process_args_option(r, L, -1, &extra_args);
281
+ break;
282
+
283
+ case LUA_TNIL:
284
+ /* do nothing */
285
+ break;
286
+
287
+ case LUA_TNUMBER:
288
+ case LUA_TSTRING:
289
+ extra_args.data = (u_char *) lua_tolstring(L, -1, &len);
290
+ extra_args.len = len;
291
+
292
+ break;
293
+
294
+ default:
295
+ return luaL_error(L, "Bad args option value");
296
+ }
297
+
298
+ lua_pop(L, 1);
299
+
300
+ dd("queries query uri opts: %d", lua_gettop(L));
301
+
302
+ /* check the vars option */
303
+
304
+ lua_getfield(L, 4, "vars");
305
+
306
+ switch (lua_type(L, -1)) {
307
+ case LUA_TTABLE:
308
+ ngx_http_lua_process_vars_option(r, L, -1, &extra_vars);
309
+
310
+ dd("post process vars top: %d", lua_gettop(L));
311
+ break;
312
+
313
+ case LUA_TNIL:
314
+ /* do nothing */
315
+ break;
316
+
317
+ default:
318
+ return luaL_error(L, "Bad vars option value");
319
+ }
320
+
321
+ lua_pop(L, 1);
322
+
323
+ dd("queries query uri opts: %d", lua_gettop(L));
324
+
325
+ /* check the share_all_vars option */
326
+
327
+ lua_getfield(L, 4, "share_all_vars");
328
+
329
+ switch (lua_type(L, -1)) {
330
+ case LUA_TNIL:
331
+ /* do nothing */
332
+ break;
333
+
334
+ case LUA_TBOOLEAN:
335
+ if (lua_toboolean(L, -1)) {
336
+ vars_action |= NGX_HTTP_LUA_SHARE_ALL_VARS;
337
+ }
338
+ break;
339
+
340
+ default:
341
+ return luaL_error(L, "Bad share_all_vars option value");
342
+ }
343
+
344
+ lua_pop(L, 1);
345
+
346
+ dd("queries query uri opts: %d", lua_gettop(L));
347
+
348
+ /* check the copy_all_vars option */
349
+
350
+ lua_getfield(L, 4, "copy_all_vars");
351
+
352
+ switch (lua_type(L, -1)) {
353
+ case LUA_TNIL:
354
+ /* do nothing */
355
+ break;
356
+
357
+ case LUA_TBOOLEAN:
358
+ if (lua_toboolean(L, -1)) {
359
+ vars_action |= NGX_HTTP_LUA_COPY_ALL_VARS;
360
+ }
361
+ break;
362
+
363
+ default:
364
+ return luaL_error(L, "Bad copy_all_vars option value");
365
+ }
366
+
367
+ lua_pop(L, 1);
368
+
369
+ dd("queries query uri opts: %d", lua_gettop(L));
370
+
371
+ /* check the "forward_body" option */
372
+
373
+ lua_getfield(L, 4, "always_forward_body");
374
+ always_forward_body = lua_toboolean(L, -1);
375
+ lua_pop(L, 1);
376
+
377
+ dd("always foward body: %d", always_forward_body);
378
+
379
+ /* check the "method" option */
380
+
381
+ lua_getfield(L, 4, "method");
382
+
383
+ type = lua_type(L, -1);
384
+
385
+ if (type == LUA_TNIL) {
386
+ method = NGX_HTTP_GET;
387
+
388
+ } else {
389
+ if (type != LUA_TNUMBER) {
390
+ return luaL_error(L, "Bad http request method");
391
+ }
392
+
393
+ method = (ngx_uint_t) lua_tonumber(L, -1);
394
+ }
395
+
396
+ lua_pop(L, 1);
397
+
398
+ dd("queries query uri opts: %d", lua_gettop(L));
399
+
400
+ /* check the "ctx" option */
401
+
402
+ lua_getfield(L, 4, "ctx");
403
+
404
+ type = lua_type(L, -1);
405
+
406
+ if (type != LUA_TNIL) {
407
+ if (type != LUA_TTABLE) {
408
+ return luaL_error(L, "Bad ctx option value type %s, "
409
+ "expected a Lua table",
410
+ lua_typename(L, type));
411
+ }
412
+
413
+ custom_ctx = 1;
414
+
415
+ } else {
416
+ lua_pop(L, 1);
417
+ }
418
+
419
+ dd("queries query uri opts ctx?: %d", lua_gettop(L));
420
+
421
+ /* check the "body" option */
422
+
423
+ lua_getfield(L, 4, "body");
424
+
425
+ type = lua_type(L, -1);
426
+
427
+ if (type != LUA_TNIL) {
428
+ if (type != LUA_TSTRING && type != LUA_TNUMBER) {
429
+ return luaL_error(L, "Bad http request body");
430
+ }
431
+
432
+ body = ngx_pcalloc(r->pool, sizeof(ngx_http_request_body_t));
433
+
434
+ if (body == NULL) {
435
+ return luaL_error(L, "no memory");
436
+ }
437
+
438
+ q = (u_char *) lua_tolstring(L, -1, &len);
439
+
440
+ dd("request body: [%.*s]", (int) len, q);
441
+
442
+ if (len) {
443
+ b = ngx_create_temp_buf(r->pool, len);
444
+ if (b == NULL) {
445
+ return luaL_error(L, "no memory");
446
+ }
447
+
448
+ b->last = ngx_copy(b->last, q, len);
449
+
450
+ body->bufs = ngx_alloc_chain_link(r->pool);
451
+ if (body->bufs == NULL) {
452
+ return luaL_error(L, "no memory");
453
+ }
454
+
455
+ body->bufs->buf = b;
456
+ body->bufs->next = NULL;
457
+
458
+ body->buf = b;
459
+ }
460
+ }
461
+
462
+ lua_pop(L, 1); /* pop the body */
463
+
464
+ /* stack: queries query uri opts ctx? */
465
+
466
+ lua_remove(L, 4);
467
+
468
+ /* stack: queries query uri ctx? */
469
+
470
+ dd("queries query uri ctx?: %d", lua_gettop(L));
471
+
472
+ } else {
473
+ method = NGX_HTTP_GET;
474
+ }
475
+
476
+ /* stack: queries query uri ctx? */
477
+
478
+ p = (u_char *) luaL_checklstring(L, 3, &len);
479
+
480
+ uri.data = ngx_palloc(r->pool, len);
481
+ if (uri.data == NULL) {
482
+ return luaL_error(L, "memory allocation error");
483
+ }
484
+
485
+ ngx_memcpy(uri.data, p, len);
486
+
487
+ uri.len = len;
488
+
489
+ ngx_str_null(&args);
490
+
491
+ flags = 0;
492
+
493
+ rc = ngx_http_parse_unsafe_uri(r, &uri, &args, &flags);
494
+ if (rc != NGX_OK) {
495
+ dd("rc = %d", (int) rc);
496
+
497
+ return luaL_error(L, "unsafe uri in argument #1: %s", p);
498
+ }
499
+
500
+ if (args.len == 0) {
501
+ if (extra_args.len) {
502
+ p = ngx_palloc(r->pool, extra_args.len);
503
+ if (p == NULL) {
504
+ return luaL_error(L, "no memory");
505
+ }
506
+
507
+ ngx_memcpy(p, extra_args.data, extra_args.len);
508
+
509
+ args.data = p;
510
+ args.len = extra_args.len;
511
+ }
512
+
513
+ } else if (extra_args.len) {
514
+ /* concatenate the two parts of args together */
515
+ len = args.len + (sizeof("&") - 1) + extra_args.len;
516
+
517
+ p = ngx_palloc(r->pool, len);
518
+ if (p == NULL) {
519
+ return luaL_error(L, "no memory");
520
+ }
521
+
522
+ q = ngx_copy(p, args.data, args.len);
523
+ *q++ = '&';
524
+ ngx_memcpy(q, extra_args.data, extra_args.len);
525
+
526
+ args.data = p;
527
+ args.len = len;
528
+ }
529
+
530
+ p = ngx_pnalloc(r->pool, sizeof(ngx_http_post_subrequest_t)
531
+ + sizeof(ngx_http_lua_ctx_t)
532
+ + sizeof(ngx_http_lua_post_subrequest_data_t));
533
+ if (p == NULL) {
534
+ return luaL_error(L, "no memory");
535
+ }
536
+
537
+ psr = (ngx_http_post_subrequest_t *) p;
538
+
539
+ p += sizeof(ngx_http_post_subrequest_t);
540
+
541
+ sr_ctx = (ngx_http_lua_ctx_t *) p;
542
+
543
+ p += sizeof(ngx_http_lua_ctx_t);
544
+
545
+ psr_data = (ngx_http_lua_post_subrequest_data_t *) p;
546
+
547
+ ngx_memzero(sr_ctx, sizeof(ngx_http_lua_ctx_t));
548
+
549
+ /* set by ngx_memzero:
550
+ * sr_ctx->run_post_subrequest = 0
551
+ * sr_ctx->free = NULL
552
+ * sr_ctx->body = NULL
553
+ */
554
+
555
+ psr_data->ctx = sr_ctx;
556
+ psr_data->pr_co_ctx = coctx;
557
+
558
+ psr->handler = ngx_http_lua_post_subrequest;
559
+ psr->data = psr_data;
560
+
561
+ rc = ngx_http_lua_subrequest(r, &uri, &args, &sr, psr, 0);
562
+
563
+ if (rc != NGX_OK) {
564
+ return luaL_error(L, "failed to issue subrequest: %d", (int) rc);
565
+ }
566
+
567
+ ngx_http_lua_init_ctx(sr, sr_ctx);
568
+
569
+ sr_ctx->capture = 1;
570
+ sr_ctx->index = index;
571
+ sr_ctx->last_body = &sr_ctx->body;
572
+ sr_ctx->vm_state = ctx->vm_state;
573
+
574
+ ngx_http_set_ctx(sr, sr_ctx, ngx_http_lua_module);
575
+
576
+ rc = ngx_http_lua_adjust_subrequest(sr, method, always_forward_body,
577
+ body, vars_action, extra_vars);
578
+
579
+ if (rc != NGX_OK) {
580
+ ngx_http_lua_cancel_subreq(sr);
581
+ return luaL_error(L, "failed to adjust the subrequest: %d",
582
+ (int) rc);
583
+ }
584
+
585
+ dd("queries query uri opts ctx? %d", lua_gettop(L));
586
+
587
+ /* stack: queries query uri ctx? */
588
+
589
+ if (custom_ctx) {
590
+ ngx_http_lua_ngx_set_ctx_helper(L, sr, sr_ctx, -1);
591
+ lua_pop(L, 3);
592
+
593
+ } else {
594
+ lua_pop(L, 2);
595
+ }
596
+
597
+ /* stack: queries */
598
+ }
599
+
600
+ if (extra_vars) {
601
+ ngx_array_destroy(extra_vars);
602
+ }
603
+
604
+ ctx->no_abort = 1;
605
+
606
+ return lua_yield(L, 0);
607
+ }
608
+
609
+
610
+ static ngx_int_t
611
+ ngx_http_lua_adjust_subrequest(ngx_http_request_t *sr, ngx_uint_t method,
612
+ int always_forward_body, ngx_http_request_body_t *body,
613
+ unsigned vars_action, ngx_array_t *extra_vars)
614
+ {
615
+ ngx_http_request_t *r;
616
+ ngx_int_t rc;
617
+ ngx_http_core_main_conf_t *cmcf;
618
+ size_t size;
619
+
620
+ r = sr->parent;
621
+
622
+ sr->header_in = r->header_in;
623
+
624
+ if (body) {
625
+ sr->request_body = body;
626
+
627
+ rc = ngx_http_lua_set_content_length_header(sr,
628
+ body->buf
629
+ ? ngx_buf_size(body->buf)
630
+ : 0);
631
+
632
+ if (rc != NGX_OK) {
633
+ return NGX_ERROR;
634
+ }
635
+
636
+ } else if (!always_forward_body
637
+ && method != NGX_HTTP_PUT
638
+ && method != NGX_HTTP_POST
639
+ && r->headers_in.content_length_n > 0)
640
+ {
641
+ rc = ngx_http_lua_set_content_length_header(sr, 0);
642
+ if (rc != NGX_OK) {
643
+ return NGX_ERROR;
644
+ }
645
+
646
+ #if 1
647
+ sr->request_body = NULL;
648
+ #endif
649
+
650
+ } else {
651
+ if (ngx_http_lua_copy_request_headers(sr, r) != NGX_OK) {
652
+ return NGX_ERROR;
653
+ }
654
+
655
+ if (sr->request_body) {
656
+
657
+ /* deep-copy the request body */
658
+
659
+ if (sr->request_body->temp_file) {
660
+ if (ngx_http_lua_copy_in_file_request_body(sr) != NGX_OK) {
661
+ return NGX_ERROR;
662
+ }
663
+ }
664
+ }
665
+ }
666
+
667
+ sr->method = method;
668
+
669
+ switch (method) {
670
+ case NGX_HTTP_GET:
671
+ sr->method_name = ngx_http_lua_get_method;
672
+ break;
673
+
674
+ case NGX_HTTP_POST:
675
+ sr->method_name = ngx_http_lua_post_method;
676
+ break;
677
+
678
+ case NGX_HTTP_PUT:
679
+ sr->method_name = ngx_http_lua_put_method;
680
+ break;
681
+
682
+ case NGX_HTTP_HEAD:
683
+ sr->method_name = ngx_http_lua_head_method;
684
+ break;
685
+
686
+ case NGX_HTTP_DELETE:
687
+ sr->method_name = ngx_http_lua_delete_method;
688
+ break;
689
+
690
+ case NGX_HTTP_OPTIONS:
691
+ sr->method_name = ngx_http_lua_options_method;
692
+ break;
693
+
694
+ case NGX_HTTP_MKCOL:
695
+ sr->method_name = ngx_http_lua_mkcol_method;
696
+ break;
697
+
698
+ case NGX_HTTP_COPY:
699
+ sr->method_name = ngx_http_lua_copy_method;
700
+ break;
701
+
702
+ case NGX_HTTP_MOVE:
703
+ sr->method_name = ngx_http_lua_move_method;
704
+ break;
705
+
706
+ case NGX_HTTP_PROPFIND:
707
+ sr->method_name = ngx_http_lua_propfind_method;
708
+ break;
709
+
710
+ case NGX_HTTP_PROPPATCH:
711
+ sr->method_name = ngx_http_lua_proppatch_method;
712
+ break;
713
+
714
+ case NGX_HTTP_LOCK:
715
+ sr->method_name = ngx_http_lua_lock_method;
716
+ break;
717
+
718
+ case NGX_HTTP_UNLOCK:
719
+ sr->method_name = ngx_http_lua_unlock_method;
720
+ break;
721
+
722
+ case NGX_HTTP_PATCH:
723
+ sr->method_name = ngx_http_lua_patch_method;
724
+ break;
725
+
726
+ case NGX_HTTP_TRACE:
727
+ sr->method_name = ngx_http_lua_trace_method;
728
+ break;
729
+
730
+ default:
731
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
732
+ "unsupported HTTP method: %u", (unsigned) method);
733
+
734
+ return NGX_ERROR;
735
+ }
736
+
737
+ if (!(vars_action & NGX_HTTP_LUA_SHARE_ALL_VARS)) {
738
+ /* we do not inherit the parent request's variables */
739
+ cmcf = ngx_http_get_module_main_conf(sr, ngx_http_core_module);
740
+
741
+ size = cmcf->variables.nelts * sizeof(ngx_http_variable_value_t);
742
+
743
+ if (vars_action & NGX_HTTP_LUA_COPY_ALL_VARS) {
744
+
745
+ sr->variables = ngx_palloc(sr->pool, size);
746
+ if (sr->variables == NULL) {
747
+ return NGX_ERROR;
748
+ }
749
+
750
+ ngx_memcpy(sr->variables, r->variables, size);
751
+
752
+ } else {
753
+
754
+ /* we do not inherit the parent request's variables */
755
+
756
+ sr->variables = ngx_pcalloc(sr->pool, size);
757
+ if (sr->variables == NULL) {
758
+ return NGX_ERROR;
759
+ }
760
+ }
761
+ }
762
+
763
+ return ngx_http_lua_subrequest_add_extra_vars(sr, extra_vars);
764
+ }
765
+
766
+
767
+ static ngx_int_t
768
+ ngx_http_lua_subrequest_add_extra_vars(ngx_http_request_t *sr,
769
+ ngx_array_t *extra_vars)
770
+ {
771
+ ngx_http_core_main_conf_t *cmcf;
772
+ ngx_http_variable_t *v;
773
+ ngx_http_variable_value_t *vv;
774
+ u_char *val;
775
+ u_char *p;
776
+ ngx_uint_t i, hash;
777
+ ngx_str_t name;
778
+ size_t len;
779
+ ngx_hash_t *variables_hash;
780
+ ngx_keyval_t *var;
781
+
782
+ /* set any extra variables that were passed to the subrequest */
783
+
784
+ if (extra_vars == NULL || extra_vars->nelts == 0) {
785
+ return NGX_OK;
786
+ }
787
+
788
+ cmcf = ngx_http_get_module_main_conf(sr, ngx_http_core_module);
789
+
790
+ variables_hash = &cmcf->variables_hash;
791
+
792
+ var = extra_vars->elts;
793
+
794
+ for (i = 0; i < extra_vars->nelts; i++, var++) {
795
+ /* copy the variable's name and value because they are allocated
796
+ * by the lua VM */
797
+
798
+ len = var->key.len + var->value.len;
799
+
800
+ p = ngx_pnalloc(sr->pool, len);
801
+ if (p == NULL) {
802
+ return NGX_ERROR;
803
+ }
804
+
805
+ name.data = p;
806
+ name.len = var->key.len;
807
+
808
+ p = ngx_copy(p, var->key.data, var->key.len);
809
+
810
+ hash = ngx_hash_strlow(name.data, name.data, name.len);
811
+
812
+ val = p;
813
+ len = var->value.len;
814
+
815
+ ngx_memcpy(p, var->value.data, len);
816
+
817
+ v = ngx_hash_find(variables_hash, hash, name.data, name.len);
818
+
819
+ if (v) {
820
+ if (!(v->flags & NGX_HTTP_VAR_CHANGEABLE)) {
821
+ ngx_log_error(NGX_LOG_ERR, sr->connection->log, 0,
822
+ "variable \"%V\" not changeable", &name);
823
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
824
+ }
825
+
826
+ if (v->set_handler) {
827
+ vv = ngx_palloc(sr->pool, sizeof(ngx_http_variable_value_t));
828
+ if (vv == NULL) {
829
+ return NGX_ERROR;
830
+ }
831
+
832
+ vv->valid = 1;
833
+ vv->not_found = 0;
834
+ vv->no_cacheable = 0;
835
+
836
+ vv->data = val;
837
+ vv->len = len;
838
+
839
+ v->set_handler(sr, vv, v->data);
840
+
841
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, sr->connection->log, 0,
842
+ "variable \"%V\" set to value \"%v\"", &name,
843
+ vv);
844
+
845
+ continue;
846
+ }
847
+
848
+ if (v->flags & NGX_HTTP_VAR_INDEXED) {
849
+ vv = &sr->variables[v->index];
850
+
851
+ vv->valid = 1;
852
+ vv->not_found = 0;
853
+ vv->no_cacheable = 0;
854
+
855
+ vv->data = val;
856
+ vv->len = len;
857
+
858
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, sr->connection->log, 0,
859
+ "variable \"%V\" set to value \"%v\"",
860
+ &name, vv);
861
+
862
+ continue;
863
+ }
864
+ }
865
+
866
+ ngx_log_error(NGX_LOG_ERR, sr->connection->log, 0,
867
+ "variable \"%V\" cannot be assigned a value (maybe you "
868
+ "forgot to define it first?) ", &name);
869
+
870
+ return NGX_ERROR;
871
+ }
872
+
873
+ return NGX_OK;
874
+ }
875
+
876
+
877
+ static void
878
+ ngx_http_lua_process_vars_option(ngx_http_request_t *r, lua_State *L,
879
+ int table, ngx_array_t **varsp)
880
+ {
881
+ ngx_array_t *vars;
882
+ ngx_keyval_t *var;
883
+
884
+ if (table < 0) {
885
+ table = lua_gettop(L) + table + 1;
886
+ }
887
+
888
+ vars = *varsp;
889
+
890
+ if (vars == NULL) {
891
+
892
+ vars = ngx_array_create(r->pool, 4, sizeof(ngx_keyval_t));
893
+ if (vars == NULL) {
894
+ dd("here");
895
+ luaL_error(L, "no memory");
896
+ return;
897
+ }
898
+
899
+ *varsp = vars;
900
+ }
901
+
902
+ lua_pushnil(L);
903
+ while (lua_next(L, table) != 0) {
904
+
905
+ if (lua_type(L, -2) != LUA_TSTRING) {
906
+ luaL_error(L, "attempt to use a non-string key in the "
907
+ "\"vars\" option table");
908
+ return;
909
+ }
910
+
911
+ if (!lua_isstring(L, -1)) {
912
+ luaL_error(L, "attempt to use bad variable value type %s",
913
+ luaL_typename(L, -1));
914
+ return;
915
+ }
916
+
917
+ var = ngx_array_push(vars);
918
+ if (var == NULL) {
919
+ dd("here");
920
+ luaL_error(L, "no memory");
921
+ return;
922
+ }
923
+
924
+ var->key.data = (u_char *) lua_tolstring(L, -2, &var->key.len);
925
+ var->value.data = (u_char *) lua_tolstring(L, -1, &var->value.len);
926
+
927
+ lua_pop(L, 1);
928
+ }
929
+ }
930
+
931
+
932
+ ngx_int_t
933
+ ngx_http_lua_post_subrequest(ngx_http_request_t *r, void *data, ngx_int_t rc)
934
+ {
935
+ ngx_http_request_t *pr;
936
+ ngx_http_lua_ctx_t *pr_ctx;
937
+ ngx_http_lua_ctx_t *ctx; /* subrequest ctx */
938
+ ngx_http_lua_co_ctx_t *pr_coctx;
939
+ size_t len;
940
+ ngx_str_t *body_str;
941
+ u_char *p;
942
+ ngx_chain_t *cl;
943
+
944
+ ngx_http_lua_post_subrequest_data_t *psr_data = data;
945
+
946
+ ctx = psr_data->ctx;
947
+
948
+ if (ctx->run_post_subrequest) {
949
+ if (r != r->connection->data) {
950
+ r->connection->data = r;
951
+ }
952
+
953
+ return NGX_OK;
954
+ }
955
+
956
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
957
+ "lua run post subrequest handler, rc:%i c:%ud", rc,
958
+ r->main->count);
959
+
960
+ ctx->run_post_subrequest = 1;
961
+
962
+ pr = r->parent;
963
+
964
+ pr_ctx = ngx_http_get_module_ctx(pr, ngx_http_lua_module);
965
+ if (pr_ctx == NULL) {
966
+ return NGX_ERROR;
967
+ }
968
+
969
+ pr_coctx = psr_data->pr_co_ctx;
970
+ pr_coctx->pending_subreqs--;
971
+
972
+ if (pr_coctx->pending_subreqs == 0) {
973
+ dd("all subrequests are done");
974
+
975
+ pr_ctx->no_abort = 0;
976
+ pr_ctx->resume_handler = ngx_http_lua_subrequest_resume;
977
+ pr_ctx->cur_co_ctx = pr_coctx;
978
+ }
979
+
980
+ if (pr_ctx->entered_content_phase) {
981
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
982
+ "lua restoring write event handler");
983
+
984
+ pr->write_event_handler = ngx_http_lua_content_wev_handler;
985
+
986
+ } else {
987
+ pr->write_event_handler = ngx_http_core_run_phases;
988
+ }
989
+
990
+ dd("status rc = %d", (int) rc);
991
+ dd("status headers_out.status = %d", (int) r->headers_out.status);
992
+ dd("uri: %.*s", (int) r->uri.len, r->uri.data);
993
+
994
+ /* capture subrequest response status */
995
+
996
+ pr_coctx->sr_statuses[ctx->index] = r->headers_out.status;
997
+
998
+ if (pr_coctx->sr_statuses[ctx->index] == 0) {
999
+ if (rc == NGX_OK) {
1000
+ rc = NGX_HTTP_OK;
1001
+ }
1002
+
1003
+ if (rc == NGX_ERROR) {
1004
+ rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
1005
+ }
1006
+
1007
+ if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
1008
+ pr_coctx->sr_statuses[ctx->index] = rc;
1009
+ }
1010
+ }
1011
+
1012
+ if (!ctx->seen_last_for_subreq) {
1013
+ pr_coctx->sr_flags[ctx->index] |= NGX_HTTP_LUA_SUBREQ_TRUNCATED;
1014
+ }
1015
+
1016
+ dd("pr_coctx status: %d", (int) pr_coctx->sr_statuses[ctx->index]);
1017
+
1018
+ /* copy subrequest response headers */
1019
+
1020
+ pr_coctx->sr_headers[ctx->index] = &r->headers_out;
1021
+
1022
+ /* copy subrequest response body */
1023
+
1024
+ body_str = &pr_coctx->sr_bodies[ctx->index];
1025
+
1026
+ len = 0;
1027
+ for (cl = ctx->body; cl; cl = cl->next) {
1028
+ /* ignore all non-memory buffers */
1029
+ len += cl->buf->last - cl->buf->pos;
1030
+ }
1031
+
1032
+ body_str->len = len;
1033
+
1034
+ if (len == 0) {
1035
+ body_str->data = NULL;
1036
+
1037
+ } else {
1038
+ p = ngx_palloc(r->pool, len);
1039
+ if (p == NULL) {
1040
+ return NGX_ERROR;
1041
+ }
1042
+
1043
+ body_str->data = p;
1044
+
1045
+ /* copy from and then free the data buffers */
1046
+
1047
+ for (cl = ctx->body; cl; cl = cl->next) {
1048
+ p = ngx_copy(p, cl->buf->pos, cl->buf->last - cl->buf->pos);
1049
+
1050
+ cl->buf->last = cl->buf->pos;
1051
+
1052
+ #if 0
1053
+ dd("free body chain link buf ASAP");
1054
+ ngx_pfree(r->pool, cl->buf->start);
1055
+ #endif
1056
+ }
1057
+ }
1058
+
1059
+ if (ctx->body) {
1060
+
1061
+ #if defined(nginx_version) && nginx_version >= 1001004
1062
+ ngx_chain_update_chains(r->pool,
1063
+ #else
1064
+ ngx_chain_update_chains(
1065
+ #endif
1066
+ &pr_ctx->free_bufs, &pr_ctx->busy_bufs,
1067
+ &ctx->body,
1068
+ (ngx_buf_tag_t) &ngx_http_lua_module);
1069
+
1070
+ dd("free bufs: %p", pr_ctx->free_bufs);
1071
+ }
1072
+
1073
+ ngx_http_post_request_to_head(pr);
1074
+
1075
+ if (r != r->connection->data) {
1076
+ r->connection->data = r;
1077
+ }
1078
+
1079
+ if (rc == NGX_ERROR
1080
+ || rc == NGX_HTTP_CREATED
1081
+ || rc == NGX_HTTP_NO_CONTENT
1082
+ || (rc >= NGX_HTTP_SPECIAL_RESPONSE
1083
+ && rc != NGX_HTTP_CLOSE
1084
+ && rc != NGX_HTTP_REQUEST_TIME_OUT
1085
+ && rc != NGX_HTTP_CLIENT_CLOSED_REQUEST))
1086
+ {
1087
+ /* emulate ngx_http_special_response_handler */
1088
+
1089
+ if (rc > NGX_OK) {
1090
+ r->err_status = rc;
1091
+
1092
+ r->expect_tested = 1;
1093
+ r->headers_out.content_type.len = 0;
1094
+ r->headers_out.content_length_n = 0;
1095
+
1096
+ ngx_http_clear_accept_ranges(r);
1097
+ ngx_http_clear_last_modified(r);
1098
+
1099
+ rc = ngx_http_lua_send_header_if_needed(r, ctx);
1100
+ if (rc == NGX_ERROR) {
1101
+ return NGX_ERROR;
1102
+ }
1103
+ }
1104
+
1105
+ return NGX_OK;
1106
+ }
1107
+
1108
+ return rc;
1109
+ }
1110
+
1111
+
1112
+ static ngx_int_t
1113
+ ngx_http_lua_set_content_length_header(ngx_http_request_t *r, off_t len)
1114
+ {
1115
+ ngx_table_elt_t *h, *header;
1116
+ u_char *p;
1117
+ ngx_list_part_t *part;
1118
+ ngx_http_request_t *pr;
1119
+ ngx_uint_t i;
1120
+
1121
+ r->headers_in.content_length_n = len;
1122
+
1123
+ if (ngx_list_init(&r->headers_in.headers, r->pool, 20,
1124
+ sizeof(ngx_table_elt_t)) != NGX_OK)
1125
+ {
1126
+ return NGX_ERROR;
1127
+ }
1128
+
1129
+ h = ngx_list_push(&r->headers_in.headers);
1130
+ if (h == NULL) {
1131
+ return NGX_ERROR;
1132
+ }
1133
+
1134
+ h->key = ngx_http_lua_content_length_header_key;
1135
+ h->lowcase_key = ngx_pnalloc(r->pool, h->key.len);
1136
+ if (h->lowcase_key == NULL) {
1137
+ return NGX_ERROR;
1138
+ }
1139
+
1140
+ ngx_strlow(h->lowcase_key, h->key.data, h->key.len);
1141
+
1142
+ r->headers_in.content_length = h;
1143
+
1144
+ p = ngx_palloc(r->pool, NGX_OFF_T_LEN);
1145
+ if (p == NULL) {
1146
+ return NGX_ERROR;
1147
+ }
1148
+
1149
+ h->value.data = p;
1150
+
1151
+ h->value.len = ngx_sprintf(h->value.data, "%O", len) - h->value.data;
1152
+
1153
+ h->hash = ngx_http_lua_content_length_hash;
1154
+
1155
+ #if 0
1156
+ dd("content length hash: %lu == %lu", (unsigned long) h->hash,
1157
+ ngx_hash_key_lc((u_char *) "Content-Length",
1158
+ sizeof("Content-Length") - 1));
1159
+ #endif
1160
+
1161
+ dd("r content length: %.*s",
1162
+ (int)r->headers_in.content_length->value.len,
1163
+ r->headers_in.content_length->value.data);
1164
+
1165
+ pr = r->parent;
1166
+
1167
+ if (pr == NULL) {
1168
+ return NGX_OK;
1169
+ }
1170
+
1171
+ /* forward the parent request's all other request headers */
1172
+
1173
+ part = &pr->headers_in.headers.part;
1174
+ header = part->elts;
1175
+
1176
+ for (i = 0; /* void */; i++) {
1177
+
1178
+ if (i >= part->nelts) {
1179
+ if (part->next == NULL) {
1180
+ break;
1181
+ }
1182
+
1183
+ part = part->next;
1184
+ header = part->elts;
1185
+ i = 0;
1186
+ }
1187
+
1188
+ if (header[i].key.len == sizeof("Content-Length") - 1
1189
+ && ngx_strncasecmp(header[i].key.data, (u_char *) "Content-Length",
1190
+ sizeof("Content-Length") - 1) == 0)
1191
+ {
1192
+ continue;
1193
+ }
1194
+
1195
+ if (ngx_http_lua_set_input_header(r, header[i].key,
1196
+ header[i].value, 0) == NGX_ERROR)
1197
+ {
1198
+ return NGX_ERROR;
1199
+ }
1200
+ }
1201
+
1202
+ return NGX_OK;
1203
+ }
1204
+
1205
+
1206
+ static void
1207
+ ngx_http_lua_handle_subreq_responses(ngx_http_request_t *r,
1208
+ ngx_http_lua_ctx_t *ctx)
1209
+ {
1210
+ ngx_uint_t i, count;
1211
+ ngx_uint_t index;
1212
+ lua_State *co;
1213
+ ngx_str_t *body_str;
1214
+ ngx_table_elt_t *header;
1215
+ ngx_list_part_t *part;
1216
+ ngx_http_headers_out_t *sr_headers;
1217
+ ngx_http_lua_co_ctx_t *coctx;
1218
+
1219
+ u_char buf[sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1];
1220
+
1221
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1222
+ "lua handle subrequest responses");
1223
+
1224
+ coctx = ctx->cur_co_ctx;
1225
+ co = coctx->co;
1226
+
1227
+ for (index = 0; index < coctx->nsubreqs; index++) {
1228
+ dd("summary: reqs %d, subquery %d, pending %d, req %.*s",
1229
+ (int) coctx->nsubreqs,
1230
+ (int) index,
1231
+ (int) coctx->pending_subreqs,
1232
+ (int) r->uri.len, r->uri.data);
1233
+
1234
+ /* {{{ construct ret value */
1235
+ lua_createtable(co, 0 /* narr */, 4 /* nrec */);
1236
+
1237
+ /* copy captured status */
1238
+ lua_pushinteger(co, coctx->sr_statuses[index]);
1239
+ lua_setfield(co, -2, "status");
1240
+
1241
+ dd("captured subrequest flags: %d", (int) coctx->sr_flags[index]);
1242
+
1243
+ /* set truncated flag if truncation happens */
1244
+ if (coctx->sr_flags[index] & NGX_HTTP_LUA_SUBREQ_TRUNCATED) {
1245
+ lua_pushboolean(co, 1);
1246
+ lua_setfield(co, -2, "truncated");
1247
+
1248
+ } else {
1249
+ lua_pushboolean(co, 0);
1250
+ lua_setfield(co, -2, "truncated");
1251
+ }
1252
+
1253
+ /* copy captured body */
1254
+
1255
+ body_str = &coctx->sr_bodies[index];
1256
+
1257
+ lua_pushlstring(co, (char *) body_str->data, body_str->len);
1258
+ lua_setfield(co, -2, "body");
1259
+
1260
+ if (body_str->data) {
1261
+ dd("free body buffer ASAP");
1262
+ ngx_pfree(r->pool, body_str->data);
1263
+ }
1264
+
1265
+ /* copy captured headers */
1266
+
1267
+ sr_headers = coctx->sr_headers[index];
1268
+
1269
+ part = &sr_headers->headers.part;
1270
+ count = part->nelts;
1271
+ while (part->next) {
1272
+ part = part->next;
1273
+ count += part->nelts;
1274
+ }
1275
+
1276
+ lua_createtable(co, 0, count + 5); /* res.header */
1277
+
1278
+ dd("saving subrequest response headers");
1279
+
1280
+ part = &sr_headers->headers.part;
1281
+ header = part->elts;
1282
+
1283
+ for (i = 0; /* void */; i++) {
1284
+
1285
+ if (i >= part->nelts) {
1286
+ if (part->next == NULL) {
1287
+ break;
1288
+ }
1289
+
1290
+ part = part->next;
1291
+ header = part->elts;
1292
+ i = 0;
1293
+ }
1294
+
1295
+ dd("checking sr header %.*s", (int) header[i].key.len,
1296
+ header[i].key.data);
1297
+
1298
+ #if 1
1299
+ if (header[i].hash == 0) {
1300
+ continue;
1301
+ }
1302
+ #endif
1303
+
1304
+ header[i].hash = 0;
1305
+
1306
+ dd("pushing sr header %.*s", (int) header[i].key.len,
1307
+ header[i].key.data);
1308
+
1309
+ lua_pushlstring(co, (char *) header[i].key.data,
1310
+ header[i].key.len); /* header key */
1311
+ lua_pushvalue(co, -1); /* stack: table key key */
1312
+
1313
+ /* check if header already exists */
1314
+ lua_rawget(co, -3); /* stack: table key value */
1315
+
1316
+ if (lua_isnil(co, -1)) {
1317
+ lua_pop(co, 1); /* stack: table key */
1318
+
1319
+ lua_pushlstring(co, (char *) header[i].value.data,
1320
+ header[i].value.len);
1321
+ /* stack: table key value */
1322
+
1323
+ lua_rawset(co, -3); /* stack: table */
1324
+
1325
+ } else {
1326
+
1327
+ if (!lua_istable(co, -1)) { /* already inserted one value */
1328
+ lua_createtable(co, 4, 0);
1329
+ /* stack: table key value table */
1330
+
1331
+ lua_insert(co, -2); /* stack: table key table value */
1332
+ lua_rawseti(co, -2, 1); /* stack: table key table */
1333
+
1334
+ lua_pushlstring(co, (char *) header[i].value.data,
1335
+ header[i].value.len);
1336
+ /* stack: table key table value */
1337
+
1338
+ lua_rawseti(co, -2, lua_objlen(co, -2) + 1);
1339
+ /* stack: table key table */
1340
+
1341
+ lua_rawset(co, -3); /* stack: table */
1342
+
1343
+ } else {
1344
+ lua_pushlstring(co, (char *) header[i].value.data,
1345
+ header[i].value.len);
1346
+ /* stack: table key table value */
1347
+
1348
+ lua_rawseti(co, -2, lua_objlen(co, -2) + 1);
1349
+ /* stack: table key table */
1350
+
1351
+ lua_pop(co, 2); /* stack: table */
1352
+ }
1353
+ }
1354
+ }
1355
+
1356
+ if (sr_headers->content_type.len) {
1357
+ lua_pushliteral(co, "Content-Type"); /* header key */
1358
+ lua_pushlstring(co, (char *) sr_headers->content_type.data,
1359
+ sr_headers->content_type.len); /* head key value */
1360
+ lua_rawset(co, -3); /* head */
1361
+ }
1362
+
1363
+ if (sr_headers->content_length == NULL
1364
+ && sr_headers->content_length_n >= 0)
1365
+ {
1366
+ lua_pushliteral(co, "Content-Length"); /* header key */
1367
+
1368
+ lua_pushnumber(co, (lua_Number) sr_headers->content_length_n);
1369
+ /* head key value */
1370
+
1371
+ lua_rawset(co, -3); /* head */
1372
+ }
1373
+
1374
+ /* to work-around an issue in ngx_http_static_module
1375
+ * (github issue #41) */
1376
+ if (sr_headers->location && sr_headers->location->value.len) {
1377
+ lua_pushliteral(co, "Location"); /* header key */
1378
+ lua_pushlstring(co, (char *) sr_headers->location->value.data,
1379
+ sr_headers->location->value.len);
1380
+ /* head key value */
1381
+ lua_rawset(co, -3); /* head */
1382
+ }
1383
+
1384
+ if (sr_headers->last_modified_time != -1) {
1385
+ if (sr_headers->status != NGX_HTTP_OK
1386
+ && sr_headers->status != NGX_HTTP_PARTIAL_CONTENT
1387
+ && sr_headers->status != NGX_HTTP_NOT_MODIFIED
1388
+ && sr_headers->status != NGX_HTTP_NO_CONTENT)
1389
+ {
1390
+ sr_headers->last_modified_time = -1;
1391
+ sr_headers->last_modified = NULL;
1392
+ }
1393
+ }
1394
+
1395
+ if (sr_headers->last_modified == NULL
1396
+ && sr_headers->last_modified_time != -1)
1397
+ {
1398
+ (void) ngx_http_time(buf, sr_headers->last_modified_time);
1399
+
1400
+ lua_pushliteral(co, "Last-Modified"); /* header key */
1401
+ lua_pushlstring(co, (char *) buf, sizeof(buf)); /* head key value */
1402
+ lua_rawset(co, -3); /* head */
1403
+ }
1404
+
1405
+ lua_setfield(co, -2, "header");
1406
+
1407
+ /* }}} */
1408
+ }
1409
+ }
1410
+
1411
+
1412
+ void
1413
+ ngx_http_lua_inject_subrequest_api(lua_State *L)
1414
+ {
1415
+ lua_createtable(L, 0 /* narr */, 2 /* nrec */); /* .location */
1416
+
1417
+ lua_pushcfunction(L, ngx_http_lua_ngx_location_capture);
1418
+ lua_setfield(L, -2, "capture");
1419
+
1420
+ lua_pushcfunction(L, ngx_http_lua_ngx_location_capture_multi);
1421
+ lua_setfield(L, -2, "capture_multi");
1422
+
1423
+ lua_setfield(L, -2, "location");
1424
+ }
1425
+
1426
+
1427
+ static ngx_int_t
1428
+ ngx_http_lua_subrequest(ngx_http_request_t *r,
1429
+ ngx_str_t *uri, ngx_str_t *args, ngx_http_request_t **psr,
1430
+ ngx_http_post_subrequest_t *ps, ngx_uint_t flags)
1431
+ {
1432
+ ngx_time_t *tp;
1433
+ ngx_connection_t *c;
1434
+ ngx_http_request_t *sr;
1435
+ ngx_http_core_srv_conf_t *cscf;
1436
+
1437
+ r->main->subrequests--;
1438
+
1439
+ if (r->main->subrequests == 0) {
1440
+ #if defined(NGX_DTRACE) && NGX_DTRACE
1441
+ ngx_http_probe_subrequest_cycle(r, uri, args);
1442
+ #endif
1443
+
1444
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
1445
+ "subrequests cycle while processing \"%V\"", uri);
1446
+ r->main->subrequests = 1;
1447
+ return NGX_ERROR;
1448
+ }
1449
+
1450
+ sr = ngx_pcalloc(r->pool, sizeof(ngx_http_request_t));
1451
+ if (sr == NULL) {
1452
+ return NGX_ERROR;
1453
+ }
1454
+
1455
+ sr->signature = NGX_HTTP_MODULE;
1456
+
1457
+ c = r->connection;
1458
+ sr->connection = c;
1459
+
1460
+ sr->ctx = ngx_pcalloc(r->pool, sizeof(void *) * ngx_http_max_module);
1461
+ if (sr->ctx == NULL) {
1462
+ return NGX_ERROR;
1463
+ }
1464
+
1465
+ if (ngx_list_init(&sr->headers_out.headers, r->pool, 20,
1466
+ sizeof(ngx_table_elt_t))
1467
+ != NGX_OK)
1468
+ {
1469
+ return NGX_ERROR;
1470
+ }
1471
+
1472
+ cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
1473
+ sr->main_conf = cscf->ctx->main_conf;
1474
+ sr->srv_conf = cscf->ctx->srv_conf;
1475
+ sr->loc_conf = cscf->ctx->loc_conf;
1476
+
1477
+ sr->pool = r->pool;
1478
+
1479
+ sr->headers_in.content_length_n = -1;
1480
+ sr->headers_in.keep_alive_n = -1;
1481
+
1482
+ ngx_http_clear_content_length(sr);
1483
+ ngx_http_clear_accept_ranges(sr);
1484
+ ngx_http_clear_last_modified(sr);
1485
+
1486
+ sr->request_body = r->request_body;
1487
+
1488
+ #if (NGX_HTTP_SPDY)
1489
+ sr->spdy_stream = r->spdy_stream;
1490
+ #endif
1491
+
1492
+ #ifdef HAVE_ALLOW_REQUEST_BODY_UPDATING_PATCH
1493
+ sr->content_length_n = -1;
1494
+ #endif
1495
+
1496
+ sr->method = NGX_HTTP_GET;
1497
+ sr->http_version = r->http_version;
1498
+
1499
+ sr->request_line = r->request_line;
1500
+ sr->uri = *uri;
1501
+
1502
+ if (args) {
1503
+ sr->args = *args;
1504
+ }
1505
+
1506
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
1507
+ "http subrequest \"%V?%V\"", uri, &sr->args);
1508
+
1509
+ sr->subrequest_in_memory = (flags & NGX_HTTP_SUBREQUEST_IN_MEMORY) != 0;
1510
+ sr->waited = (flags & NGX_HTTP_SUBREQUEST_WAITED) != 0;
1511
+
1512
+ sr->unparsed_uri = r->unparsed_uri;
1513
+ sr->method_name = ngx_http_core_get_method;
1514
+ sr->http_protocol = r->http_protocol;
1515
+
1516
+ ngx_http_set_exten(sr);
1517
+
1518
+ sr->main = r->main;
1519
+ sr->parent = r;
1520
+ sr->post_subrequest = ps;
1521
+ sr->read_event_handler = ngx_http_request_empty_handler;
1522
+ sr->write_event_handler = ngx_http_handler;
1523
+
1524
+ sr->variables = r->variables;
1525
+
1526
+ sr->log_handler = r->log_handler;
1527
+
1528
+ sr->internal = 1;
1529
+
1530
+ sr->discard_body = r->discard_body;
1531
+ sr->expect_tested = 1;
1532
+ sr->main_filter_need_in_memory = r->main_filter_need_in_memory;
1533
+
1534
+ sr->uri_changes = NGX_HTTP_MAX_URI_CHANGES + 1;
1535
+
1536
+ tp = ngx_timeofday();
1537
+ sr->start_sec = tp->sec;
1538
+ sr->start_msec = tp->msec;
1539
+
1540
+ r->main->count++;
1541
+
1542
+ *psr = sr;
1543
+
1544
+ #if defined(NGX_DTRACE) && NGX_DTRACE
1545
+ ngx_http_probe_subrequest_start(sr);
1546
+ #endif
1547
+
1548
+ return ngx_http_post_request(sr, NULL);
1549
+ }
1550
+
1551
+
1552
+ static ngx_int_t
1553
+ ngx_http_lua_subrequest_resume(ngx_http_request_t *r)
1554
+ {
1555
+ lua_State *vm;
1556
+ ngx_int_t rc;
1557
+ ngx_connection_t *c;
1558
+ ngx_http_lua_ctx_t *ctx;
1559
+ ngx_http_lua_co_ctx_t *coctx;
1560
+
1561
+ ctx = ngx_http_get_module_ctx(r, ngx_http_lua_module);
1562
+ if (ctx == NULL) {
1563
+ return NGX_ERROR;
1564
+ }
1565
+
1566
+ ctx->resume_handler = ngx_http_lua_wev_handler;
1567
+
1568
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1569
+ "lua run subrequests done, resuming lua thread");
1570
+
1571
+ coctx = ctx->cur_co_ctx;
1572
+
1573
+ dd("nsubreqs: %d", (int) coctx->nsubreqs);
1574
+
1575
+ ngx_http_lua_handle_subreq_responses(r, ctx);
1576
+
1577
+ dd("free sr_statues/headers/bodies memory ASAP");
1578
+
1579
+ #if 1
1580
+ ngx_pfree(r->pool, coctx->sr_statuses);
1581
+
1582
+ coctx->sr_statuses = NULL;
1583
+ coctx->sr_headers = NULL;
1584
+ coctx->sr_bodies = NULL;
1585
+ coctx->sr_flags = NULL;
1586
+ #endif
1587
+
1588
+ c = r->connection;
1589
+ vm = ngx_http_lua_get_lua_vm(r, ctx);
1590
+
1591
+ rc = ngx_http_lua_run_thread(vm, r, ctx, coctx->nsubreqs);
1592
+
1593
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1594
+ "lua run thread returned %d", rc);
1595
+
1596
+ if (rc == NGX_AGAIN) {
1597
+ return ngx_http_lua_run_posted_threads(c, vm, r, ctx);
1598
+ }
1599
+
1600
+ if (rc == NGX_DONE) {
1601
+ ngx_http_lua_finalize_request(r, NGX_DONE);
1602
+ return ngx_http_lua_run_posted_threads(c, vm, r, ctx);
1603
+ }
1604
+
1605
+ /* rc == NGX_ERROR || rc >= NGX_OK */
1606
+
1607
+ if (ctx->entered_content_phase) {
1608
+ ngx_http_lua_finalize_request(r, rc);
1609
+ return NGX_DONE;
1610
+ }
1611
+
1612
+ return rc;
1613
+ }
1614
+
1615
+
1616
+ static void
1617
+ ngx_http_lua_cancel_subreq(ngx_http_request_t *r)
1618
+ {
1619
+ ngx_http_posted_request_t *pr;
1620
+ ngx_http_posted_request_t **p;
1621
+
1622
+ #if 1
1623
+ r->main->count--;
1624
+ r->main->subrequests++;
1625
+ #endif
1626
+
1627
+ p = &r->main->posted_requests;
1628
+ for (pr = r->main->posted_requests; pr->next; pr = pr->next) {
1629
+ p = &pr->next;
1630
+ }
1631
+
1632
+ *p = NULL;
1633
+
1634
+ r->connection->data = r->parent;
1635
+ }
1636
+
1637
+
1638
+ static ngx_int_t
1639
+ ngx_http_post_request_to_head(ngx_http_request_t *r)
1640
+ {
1641
+ ngx_http_posted_request_t *pr;
1642
+
1643
+ pr = ngx_palloc(r->pool, sizeof(ngx_http_posted_request_t));
1644
+ if (pr == NULL) {
1645
+ return NGX_ERROR;
1646
+ }
1647
+
1648
+ pr->request = r;
1649
+ pr->next = r->main->posted_requests;
1650
+ r->main->posted_requests = pr;
1651
+
1652
+ return NGX_OK;
1653
+ }
1654
+
1655
+
1656
+ static ngx_int_t
1657
+ ngx_http_lua_copy_in_file_request_body(ngx_http_request_t *r)
1658
+ {
1659
+ ngx_temp_file_t *tf;
1660
+
1661
+ ngx_http_request_body_t *body;
1662
+
1663
+ tf = r->request_body->temp_file;
1664
+
1665
+ if (!tf->persistent || !tf->clean) {
1666
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
1667
+ "the request body was not read by ngx_lua");
1668
+
1669
+ return NGX_ERROR;
1670
+ }
1671
+
1672
+ body = ngx_palloc(r->pool, sizeof(ngx_http_request_body_t));
1673
+ if (body == NULL) {
1674
+ return NGX_ERROR;
1675
+ }
1676
+
1677
+ ngx_memcpy(body, r->request_body, sizeof(ngx_http_request_body_t));
1678
+
1679
+ body->temp_file = ngx_palloc(r->pool, sizeof(ngx_temp_file_t));
1680
+ if (body->temp_file == NULL) {
1681
+ return NGX_ERROR;
1682
+ }
1683
+
1684
+ ngx_memcpy(body->temp_file, tf, sizeof(ngx_temp_file_t));
1685
+ dd("file fd: %d", body->temp_file->file.fd);
1686
+
1687
+ r->request_body = body;
1688
+
1689
+ return NGX_OK;
1690
+ }
1691
+
1692
+
1693
+ static ngx_int_t
1694
+ ngx_http_lua_copy_request_headers(ngx_http_request_t *sr, ngx_http_request_t *r)
1695
+ {
1696
+ ngx_table_elt_t *header;
1697
+ ngx_list_part_t *part;
1698
+ ngx_uint_t i;
1699
+
1700
+ if (ngx_list_init(&sr->headers_in.headers, sr->pool, 20,
1701
+ sizeof(ngx_table_elt_t)) != NGX_OK)
1702
+ {
1703
+ return NGX_ERROR;
1704
+ }
1705
+
1706
+ dd("before: parent req headers count: %d",
1707
+ (int) r->headers_in.headers.part.nelts);
1708
+
1709
+ part = &r->headers_in.headers.part;
1710
+ header = part->elts;
1711
+
1712
+ for (i = 0; /* void */; i++) {
1713
+
1714
+ if (i >= part->nelts) {
1715
+ if (part->next == NULL) {
1716
+ break;
1717
+ }
1718
+
1719
+ part = part->next;
1720
+ header = part->elts;
1721
+ i = 0;
1722
+ }
1723
+
1724
+ dd("setting request header %.*s: %.*s", (int) header[i].key.len,
1725
+ header[i].key.data, (int) header[i].value.len,
1726
+ header[i].value.data);
1727
+
1728
+ if (ngx_http_lua_set_input_header(sr, header[i].key,
1729
+ header[i].value, 0) == NGX_ERROR)
1730
+ {
1731
+ return NGX_ERROR;
1732
+ }
1733
+ }
1734
+
1735
+ dd("after: parent req headers count: %d",
1736
+ (int) r->headers_in.headers.part.nelts);
1737
+
1738
+ return NGX_OK;
1739
+ }
1740
+
1741
+ /* vi:set ft=c ts=4 sw=4 et fdm=marker: */