passenger 4.0.60 → 5.0.0.beta1

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 (1301) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +5 -0
  5. data/.travis.yml +3 -2
  6. data/CHANGELOG +31 -53
  7. data/CONTRIBUTING.md +4 -4
  8. data/CONTRIBUTORS +0 -1
  9. data/Gemfile +18 -0
  10. data/Gemfile.lock +41 -0
  11. data/Rakefile +16 -0
  12. data/bin/passenger +2 -2
  13. data/bin/passenger-install-apache2-module +12 -12
  14. data/bin/passenger-install-nginx-module +9 -14
  15. data/bin/passenger-status +125 -87
  16. data/build/agents.rb +112 -140
  17. data/build/apache2.rb +4 -9
  18. data/build/basics.rb +5 -3
  19. data/build/common_library.rb +1 -0
  20. data/build/cxx_tests.rb +69 -47
  21. data/build/debian.rb +4 -2
  22. data/build/documentation.rb +1 -0
  23. data/build/integration_tests.rb +28 -43
  24. data/build/misc.rb +0 -18
  25. data/build/nginx.rb +2 -6
  26. data/build/packaging.rb +33 -22
  27. data/build/preprocessor.rb +2 -4
  28. data/build/ruby_tests.rb +7 -26
  29. data/build/test_basics.rb +24 -25
  30. data/debian.template/control.template +2 -2
  31. data/debian.template/locations.ini.template +2 -3
  32. data/debian.template/passenger.install.template +2 -2
  33. data/debian.template/rules.template +1 -1
  34. data/dev/ci/run_jenkins.sh +0 -1
  35. data/dev/ci/run_rpm_tests.sh +3 -0
  36. data/dev/ci/run_travis.sh +63 -17
  37. data/dev/copy_boost_headers +22 -6
  38. data/dev/ruby_server.rb +244 -0
  39. data/dev/vagrant/provision.sh +3 -1
  40. data/doc/DebuggingAndStressTesting.md +3 -3
  41. data/doc/Design and Architecture.txt +5 -6
  42. data/doc/Packaging.txt.md +35 -6
  43. data/doc/ServerOptimizationGuide.txt.md +339 -0
  44. data/doc/Users guide Apache.idmap.txt +177 -187
  45. data/doc/Users guide Apache.txt +143 -219
  46. data/doc/Users guide Nginx.idmap.txt +166 -166
  47. data/doc/Users guide Nginx.txt +265 -223
  48. data/doc/Users guide Standalone.txt +3 -3
  49. data/doc/templates/markdown.html.erb +37 -6
  50. data/doc/users_guide_snippets/environment_variables.txt +1 -1
  51. data/doc/users_guide_snippets/support_information.txt +1 -1
  52. data/doc/users_guide_snippets/tips.txt +2 -2
  53. data/ext/apache2/Configuration.cpp +23 -81
  54. data/ext/apache2/Configuration.hpp +18 -92
  55. data/ext/apache2/ConfigurationCommands.cpp +64 -15
  56. data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
  57. data/ext/apache2/ConfigurationFields.hpp +12 -0
  58. data/ext/apache2/ConfigurationSetters.cpp +73 -1
  59. data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
  60. data/ext/apache2/CreateDirConfig.cpp +6 -0
  61. data/ext/apache2/DirectoryMapper.h +11 -6
  62. data/ext/apache2/Hooks.cpp +291 -408
  63. data/ext/apache2/MergeDirConfig.cpp +42 -0
  64. data/ext/apache2/SetHeaders.cpp +61 -16
  65. data/ext/apache2/SetHeaders.cpp.erb +9 -7
  66. data/ext/boost/container/allocator_traits.hpp +400 -0
  67. data/ext/boost/container/deque.hpp +2012 -0
  68. data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
  69. data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
  70. data/ext/boost/container/detail/algorithms.hpp +84 -0
  71. data/ext/boost/container/detail/allocation_type.hpp +54 -0
  72. data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
  73. data/ext/boost/container/detail/config_begin.hpp +49 -0
  74. data/ext/boost/container/detail/config_end.hpp +17 -0
  75. data/ext/boost/container/detail/destroyers.hpp +365 -0
  76. data/ext/boost/container/detail/flat_tree.hpp +1055 -0
  77. data/ext/boost/container/detail/function_detector.hpp +88 -0
  78. data/ext/boost/container/detail/iterators.hpp +611 -0
  79. data/ext/boost/container/detail/math_functions.hpp +113 -0
  80. data/ext/boost/container/detail/memory_util.hpp +83 -0
  81. data/ext/boost/container/detail/mpl.hpp +160 -0
  82. data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
  83. data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
  84. data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
  85. data/ext/boost/container/detail/pair.hpp +354 -0
  86. data/ext/boost/container/detail/pool_common.hpp +52 -0
  87. data/ext/boost/container/detail/preprocessor.hpp +232 -0
  88. data/ext/boost/container/detail/transform_iterator.hpp +176 -0
  89. data/ext/boost/container/detail/tree.hpp +1134 -0
  90. data/ext/boost/container/detail/type_traits.hpp +210 -0
  91. data/ext/boost/container/detail/utilities.hpp +1141 -0
  92. data/ext/boost/container/detail/value_init.hpp +45 -0
  93. data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
  94. data/ext/boost/container/detail/version_type.hpp +92 -0
  95. data/ext/boost/container/detail/workaround.hpp +44 -0
  96. data/ext/boost/container/flat_map.hpp +1674 -0
  97. data/ext/boost/container/flat_set.hpp +1408 -0
  98. data/ext/boost/container/list.hpp +1475 -0
  99. data/ext/boost/container/map.hpp +1508 -0
  100. data/ext/boost/container/scoped_allocator.hpp +1503 -0
  101. data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
  102. data/ext/boost/container/set.hpp +1280 -0
  103. data/ext/boost/container/slist.hpp +1706 -0
  104. data/ext/boost/container/stable_vector.hpp +1869 -0
  105. data/ext/boost/container/static_vector.hpp +1053 -0
  106. data/ext/boost/container/string.hpp +2856 -0
  107. data/ext/boost/container/throw_exception.hpp +110 -0
  108. data/ext/boost/container/vector.hpp +2671 -0
  109. data/ext/boost/detail/is_xxx.hpp +61 -0
  110. data/ext/boost/intrusive/any_hook.hpp +344 -0
  111. data/ext/boost/intrusive/avl_set.hpp +2528 -0
  112. data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
  113. data/ext/boost/intrusive/avltree.hpp +1786 -0
  114. data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
  115. data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
  116. data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
  117. data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
  118. data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
  119. data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
  120. data/ext/boost/intrusive/detail/assert.hpp +41 -0
  121. data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
  122. data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
  123. data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
  124. data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
  125. data/ext/boost/intrusive/detail/config_end.hpp +15 -0
  126. data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
  127. data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
  128. data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
  129. data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
  130. data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
  131. data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
  132. data/ext/boost/intrusive/detail/list_node.hpp +196 -0
  133. data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
  134. data/ext/boost/intrusive/detail/mpl.hpp +383 -0
  135. data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
  136. data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
  137. data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
  138. data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
  139. data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
  140. data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
  141. data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
  142. data/ext/boost/intrusive/detail/utilities.hpp +858 -0
  143. data/ext/boost/intrusive/detail/workaround.hpp +22 -0
  144. data/ext/boost/intrusive/hashtable.hpp +3110 -0
  145. data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
  146. data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
  147. data/ext/boost/intrusive/link_mode.hpp +46 -0
  148. data/ext/boost/intrusive/list.hpp +1525 -0
  149. data/ext/boost/intrusive/list_hook.hpp +290 -0
  150. data/ext/boost/intrusive/member_value_traits.hpp +70 -0
  151. data/ext/boost/intrusive/options.hpp +810 -0
  152. data/ext/boost/intrusive/parent_from_member.hpp +42 -0
  153. data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
  154. data/ext/boost/intrusive/pointer_traits.hpp +265 -0
  155. data/ext/boost/intrusive/priority_compare.hpp +39 -0
  156. data/ext/boost/intrusive/rbtree.hpp +1785 -0
  157. data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
  158. data/ext/boost/intrusive/set.hpp +2554 -0
  159. data/ext/boost/intrusive/set_hook.hpp +300 -0
  160. data/ext/boost/intrusive/sg_set.hpp +2601 -0
  161. data/ext/boost/intrusive/sgtree.hpp +2009 -0
  162. data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
  163. data/ext/boost/intrusive/slist.hpp +2219 -0
  164. data/ext/boost/intrusive/slist_hook.hpp +294 -0
  165. data/ext/boost/intrusive/splay_set.hpp +2575 -0
  166. data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
  167. data/ext/boost/intrusive/splaytree.hpp +1784 -0
  168. data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
  169. data/ext/boost/intrusive/treap.hpp +1882 -0
  170. data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
  171. data/ext/boost/intrusive/treap_set.hpp +2751 -0
  172. data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
  173. data/ext/boost/intrusive/unordered_set.hpp +2115 -0
  174. data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
  175. data/ext/boost/intrusive_ptr.hpp +18 -0
  176. data/ext/boost/math/common_factor_ct.hpp +180 -0
  177. data/ext/boost/math_fwd.hpp +108 -0
  178. data/ext/boost/move/detail/move_helpers.hpp +175 -0
  179. data/ext/boost/parameter.hpp +21 -0
  180. data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
  181. data/ext/boost/parameter/aux_/cast.hpp +143 -0
  182. data/ext/boost/parameter/aux_/default.hpp +69 -0
  183. data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
  184. data/ext/boost/parameter/aux_/maybe.hpp +120 -0
  185. data/ext/boost/parameter/aux_/overloads.hpp +88 -0
  186. data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
  187. data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
  188. data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
  189. data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
  190. data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
  191. data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
  192. data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
  193. data/ext/boost/parameter/aux_/set.hpp +67 -0
  194. data/ext/boost/parameter/aux_/tag.hpp +38 -0
  195. data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
  196. data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
  197. data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
  198. data/ext/boost/parameter/aux_/void.hpp +29 -0
  199. data/ext/boost/parameter/aux_/yesno.hpp +26 -0
  200. data/ext/boost/parameter/binding.hpp +106 -0
  201. data/ext/boost/parameter/config.hpp +14 -0
  202. data/ext/boost/parameter/keyword.hpp +152 -0
  203. data/ext/boost/parameter/macros.hpp +99 -0
  204. data/ext/boost/parameter/match.hpp +55 -0
  205. data/ext/boost/parameter/name.hpp +156 -0
  206. data/ext/boost/parameter/parameters.hpp +931 -0
  207. data/ext/boost/parameter/preprocessor.hpp +1178 -0
  208. data/ext/boost/parameter/python.hpp +735 -0
  209. data/ext/boost/parameter/value_type.hpp +108 -0
  210. data/ext/boost/pool/detail/for.m4 +107 -0
  211. data/ext/boost/pool/detail/guard.hpp +69 -0
  212. data/ext/boost/pool/detail/mutex.hpp +42 -0
  213. data/ext/boost/pool/detail/pool_construct.bat +24 -0
  214. data/ext/boost/pool/detail/pool_construct.ipp +852 -0
  215. data/ext/boost/pool/detail/pool_construct.m4 +84 -0
  216. data/ext/boost/pool/detail/pool_construct.sh +12 -0
  217. data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
  218. data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
  219. data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
  220. data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
  221. data/ext/boost/pool/object_pool.hpp +287 -0
  222. data/ext/boost/pool/pool.hpp +1024 -0
  223. data/ext/boost/pool/pool_alloc.hpp +488 -0
  224. data/ext/boost/pool/poolfwd.hpp +82 -0
  225. data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
  226. data/ext/boost/pool/singleton_pool.hpp +251 -0
  227. data/ext/boost/preprocessor/arithmetic.hpp +25 -0
  228. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  229. data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
  230. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  231. data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
  232. data/ext/boost/preprocessor/array.hpp +32 -0
  233. data/ext/boost/preprocessor/array/enum.hpp +33 -0
  234. data/ext/boost/preprocessor/array/insert.hpp +55 -0
  235. data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
  236. data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
  237. data/ext/boost/preprocessor/array/push_back.hpp +33 -0
  238. data/ext/boost/preprocessor/array/push_front.hpp +33 -0
  239. data/ext/boost/preprocessor/array/remove.hpp +54 -0
  240. data/ext/boost/preprocessor/array/replace.hpp +49 -0
  241. data/ext/boost/preprocessor/array/reverse.hpp +29 -0
  242. data/ext/boost/preprocessor/array/to_list.hpp +33 -0
  243. data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
  244. data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
  245. data/ext/boost/preprocessor/assert_msg.hpp +17 -0
  246. data/ext/boost/preprocessor/comma.hpp +17 -0
  247. data/ext/boost/preprocessor/comparison.hpp +24 -0
  248. data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
  249. data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
  250. data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  251. data/ext/boost/preprocessor/comparison/less.hpp +46 -0
  252. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  253. data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
  254. data/ext/boost/preprocessor/config/limits.hpp +30 -0
  255. data/ext/boost/preprocessor/control.hpp +22 -0
  256. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  257. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  258. data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  259. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  260. data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
  261. data/ext/boost/preprocessor/debug.hpp +18 -0
  262. data/ext/boost/preprocessor/debug/assert.hpp +44 -0
  263. data/ext/boost/preprocessor/debug/line.hpp +35 -0
  264. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  265. data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
  266. data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
  267. data/ext/boost/preprocessor/detail/null.hpp +17 -0
  268. data/ext/boost/preprocessor/detail/split.hpp +35 -0
  269. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  270. data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
  271. data/ext/boost/preprocessor/expand.hpp +17 -0
  272. data/ext/boost/preprocessor/expr_if.hpp +17 -0
  273. data/ext/boost/preprocessor/facilities.hpp +23 -0
  274. data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
  275. data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
  276. data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
  277. data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
  278. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
  279. data/ext/boost/preprocessor/for.hpp +17 -0
  280. data/ext/boost/preprocessor/if.hpp +17 -0
  281. data/ext/boost/preprocessor/iteration.hpp +19 -0
  282. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  283. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  284. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  285. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  286. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  287. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  288. data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  289. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  290. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  291. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  292. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  293. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  294. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  295. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  296. data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
  297. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  298. data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
  299. data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
  300. data/ext/boost/preprocessor/iteration/local.hpp +26 -0
  301. data/ext/boost/preprocessor/iteration/self.hpp +19 -0
  302. data/ext/boost/preprocessor/library.hpp +36 -0
  303. data/ext/boost/preprocessor/limits.hpp +17 -0
  304. data/ext/boost/preprocessor/list.hpp +37 -0
  305. data/ext/boost/preprocessor/list/at.hpp +39 -0
  306. data/ext/boost/preprocessor/list/cat.hpp +42 -0
  307. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  308. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  309. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  310. data/ext/boost/preprocessor/list/enum.hpp +41 -0
  311. data/ext/boost/preprocessor/list/filter.hpp +54 -0
  312. data/ext/boost/preprocessor/list/first_n.hpp +58 -0
  313. data/ext/boost/preprocessor/list/for_each.hpp +49 -0
  314. data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
  315. data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
  316. data/ext/boost/preprocessor/list/size.hpp +58 -0
  317. data/ext/boost/preprocessor/list/to_array.hpp +123 -0
  318. data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
  319. data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
  320. data/ext/boost/preprocessor/logical.hpp +29 -0
  321. data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
  322. data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
  323. data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
  324. data/ext/boost/preprocessor/logical/nor.hpp +30 -0
  325. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  326. data/ext/boost/preprocessor/logical/or.hpp +30 -0
  327. data/ext/boost/preprocessor/logical/xor.hpp +30 -0
  328. data/ext/boost/preprocessor/max.hpp +17 -0
  329. data/ext/boost/preprocessor/min.hpp +17 -0
  330. data/ext/boost/preprocessor/punctuation.hpp +20 -0
  331. data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  332. data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
  333. data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
  334. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  335. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  336. data/ext/boost/preprocessor/repetition.hpp +32 -0
  337. data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  338. data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  339. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  340. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  341. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  342. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  343. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  344. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  345. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  346. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  347. data/ext/boost/preprocessor/selection.hpp +18 -0
  348. data/ext/boost/preprocessor/selection/max.hpp +39 -0
  349. data/ext/boost/preprocessor/selection/min.hpp +39 -0
  350. data/ext/boost/preprocessor/seq.hpp +43 -0
  351. data/ext/boost/preprocessor/seq/cat.hpp +49 -0
  352. data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
  353. data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
  354. data/ext/boost/preprocessor/seq/filter.hpp +54 -0
  355. data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
  356. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  357. data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
  358. data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
  359. data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
  360. data/ext/boost/preprocessor/seq/insert.hpp +28 -0
  361. data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
  362. data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
  363. data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
  364. data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
  365. data/ext/boost/preprocessor/seq/remove.hpp +29 -0
  366. data/ext/boost/preprocessor/seq/replace.hpp +29 -0
  367. data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
  368. data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
  369. data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
  370. data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
  371. data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
  372. data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
  373. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  374. data/ext/boost/preprocessor/slot.hpp +17 -0
  375. data/ext/boost/preprocessor/slot/counter.hpp +25 -0
  376. data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
  377. data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  378. data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  379. data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  380. data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  381. data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  382. data/ext/boost/preprocessor/tuple.hpp +28 -0
  383. data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
  384. data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
  385. data/ext/boost/preprocessor/tuple/size.hpp +28 -0
  386. data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
  387. data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
  388. data/ext/boost/preprocessor/variadic.hpp +23 -0
  389. data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
  390. data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
  391. data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
  392. data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
  393. data/ext/boost/preprocessor/while.hpp +17 -0
  394. data/ext/boost/preprocessor/wstringize.hpp +29 -0
  395. data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
  396. data/ext/common/AccountsDatabase.h +3 -4
  397. data/ext/common/AgentsStarter.cpp +12 -15
  398. data/ext/common/AgentsStarter.h +54 -120
  399. data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
  400. data/ext/common/ApplicationPool2/AppTypes.h +21 -14
  401. data/ext/common/ApplicationPool2/Common.h +36 -19
  402. data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
  403. data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
  404. data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
  405. data/ext/common/ApplicationPool2/Group.h +304 -171
  406. data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
  407. data/ext/common/ApplicationPool2/Options.h +50 -62
  408. data/ext/common/ApplicationPool2/Pool.h +285 -189
  409. data/ext/common/ApplicationPool2/Process.h +126 -115
  410. data/ext/common/ApplicationPool2/Session.h +70 -30
  411. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
  412. data/ext/common/ApplicationPool2/Socket.h +57 -43
  413. data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
  414. data/ext/common/ApplicationPool2/Spawner.h +59 -38
  415. data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
  416. data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
  417. data/ext/common/BackgroundEventLoop.cpp +48 -1
  418. data/ext/common/BackgroundEventLoop.h +3 -1
  419. data/ext/common/Constants.h +30 -8
  420. data/ext/common/DataStructures/HashedStaticString.h +103 -0
  421. data/ext/common/DataStructures/LString.h +396 -0
  422. data/ext/common/DataStructures/StringKeyTable.h +588 -0
  423. data/ext/common/EventedMessageServer.h +1 -0
  424. data/ext/common/FileDescriptor.h +5 -0
  425. data/ext/common/InstanceDirectory.h +240 -0
  426. data/ext/common/Logging.cpp +38 -13
  427. data/ext/common/Logging.h +53 -22
  428. data/ext/common/MemoryKit/mbuf.cpp +413 -0
  429. data/ext/common/MemoryKit/mbuf.h +266 -0
  430. data/ext/common/MemoryKit/palloc.cpp +337 -0
  431. data/ext/common/MemoryKit/palloc.h +121 -0
  432. data/ext/common/ResourceLocator.h +62 -6
  433. data/ext/common/SafeLibev.h +4 -4
  434. data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
  435. data/ext/common/ServerKit/Channel.h +747 -0
  436. data/ext/common/ServerKit/Client.h +166 -0
  437. data/ext/common/ServerKit/ClientRef.h +130 -0
  438. data/ext/common/ServerKit/Context.h +129 -0
  439. data/ext/common/ServerKit/Errors.h +103 -0
  440. data/ext/common/ServerKit/FdSinkChannel.h +206 -0
  441. data/ext/common/ServerKit/FdSourceChannel.h +230 -0
  442. data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
  443. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
  444. data/ext/common/ServerKit/HeaderTable.h +472 -0
  445. data/ext/common/ServerKit/Hooks.h +79 -0
  446. data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
  447. data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
  448. data/ext/common/ServerKit/HttpClient.h +94 -0
  449. data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
  450. data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
  451. data/ext/common/ServerKit/HttpRequest.h +276 -0
  452. data/ext/common/ServerKit/HttpRequestRef.h +130 -0
  453. data/ext/common/ServerKit/HttpServer.h +1152 -0
  454. data/ext/common/ServerKit/Implementation.cpp +47 -0
  455. data/ext/common/ServerKit/Server.h +1040 -0
  456. data/ext/common/ServerKit/http_parser.cpp +2259 -0
  457. data/ext/common/ServerKit/http_parser.h +330 -0
  458. data/ext/common/StaticString.h +8 -0
  459. data/ext/common/Utils.cpp +14 -12
  460. data/ext/common/Utils.h +9 -103
  461. data/ext/common/Utils/BufferedIO.h +1 -0
  462. data/ext/common/Utils/CachedFileStat.hpp +1 -7
  463. data/ext/common/Utils/DateParsing.h +379 -0
  464. data/ext/common/Utils/FileChangeChecker.h +3 -9
  465. data/ext/common/Utils/Hasher.cpp +52 -0
  466. data/ext/common/Utils/Hasher.h +58 -0
  467. data/ext/common/Utils/IOUtils.cpp +62 -62
  468. data/ext/common/Utils/JsonUtils.h +21 -0
  469. data/ext/common/Utils/OptionParsing.h +75 -0
  470. data/ext/common/Utils/StrIntUtils.cpp +112 -19
  471. data/ext/common/Utils/StrIntUtils.h +52 -12
  472. data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
  473. data/ext/common/Utils/VariantMap.h +18 -7
  474. data/ext/common/Utils/modp_b64.cpp +290 -0
  475. data/ext/common/Utils/modp_b64.h +241 -0
  476. data/ext/common/Utils/modp_b64_data.h +479 -0
  477. data/ext/common/Utils/sysqueue.h +811 -0
  478. data/ext/common/agents/Base.cpp +71 -98
  479. data/ext/common/agents/Base.h +11 -3
  480. data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
  481. data/ext/common/agents/HelperAgent/Main.cpp +899 -487
  482. data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
  484. data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
  485. data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
  486. data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
  487. data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
  488. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
  489. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
  490. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
  491. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
  492. data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
  493. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
  494. data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
  495. data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
  496. data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
  497. data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
  498. data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
  499. data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
  500. data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
  501. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  502. data/ext/common/agents/Main.cpp +107 -0
  503. data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
  504. data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
  505. data/ext/common/agents/Watchdog/AdminServer.h +390 -0
  506. data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
  507. data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
  508. data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
  509. data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
  510. data/ext/common/agents/Watchdog/Main.cpp +743 -202
  511. data/ext/libeio/eio.c +17 -0
  512. data/ext/libeio/eio.h +2 -0
  513. data/ext/nginx/CacheLocationConfig.c +177 -198
  514. data/ext/nginx/CacheLocationConfig.c.erb +35 -22
  515. data/ext/nginx/Configuration.c +402 -236
  516. data/ext/nginx/Configuration.h +12 -5
  517. data/ext/nginx/ConfigurationCommands.c +35 -15
  518. data/ext/nginx/ConfigurationCommands.c.erb +4 -4
  519. data/ext/nginx/ConfigurationFields.h +9 -5
  520. data/ext/nginx/ConfigurationFields.h.erb +3 -1
  521. data/ext/nginx/ContentHandler.c +393 -362
  522. data/ext/nginx/CreateLocationConfig.c +8 -4
  523. data/ext/nginx/CreateLocationConfig.c.erb +8 -3
  524. data/ext/nginx/MergeLocationConfig.c +36 -6
  525. data/ext/nginx/MergeLocationConfig.c.erb +42 -1
  526. data/ext/nginx/ngx_http_passenger_module.c +28 -15
  527. data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
  528. data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
  529. data/ext/oxt/implementation.cpp +92 -20
  530. data/ext/oxt/thread.hpp +5 -0
  531. data/ext/ruby/extconf.rb +3 -6
  532. data/ext/ruby/passenger_native_support.c +13 -40
  533. data/helper-scripts/download_binaries/extconf.rb +4 -4
  534. data/helper-scripts/meteor-loader.rb +12 -112
  535. data/helper-scripts/node-loader.js +3 -91
  536. data/helper-scripts/rack-loader.rb +13 -14
  537. data/helper-scripts/rack-preloader.rb +16 -17
  538. data/helper-scripts/wsgi-loader.py +11 -7
  539. data/lib/phusion_passenger.rb +100 -79
  540. data/lib/phusion_passenger/abstract_installer.rb +28 -3
  541. data/lib/phusion_passenger/admin_tools.rb +3 -3
  542. data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
  543. data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
  544. data/lib/phusion_passenger/apache2/config_options.rb +72 -22
  545. data/lib/phusion_passenger/common_library.rb +79 -14
  546. data/lib/phusion_passenger/config/about_command.rb +17 -23
  547. data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
  548. data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
  549. data/lib/phusion_passenger/config/command.rb +1 -4
  550. data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
  551. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
  552. data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
  553. data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
  554. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
  555. data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
  556. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
  557. data/lib/phusion_passenger/config/installation_utils.rb +241 -0
  558. data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
  559. data/lib/phusion_passenger/config/main.rb +43 -14
  560. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
  561. data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
  562. data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
  563. data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
  564. data/lib/phusion_passenger/config/utils.rb +64 -39
  565. data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
  566. data/lib/phusion_passenger/constants.rb +27 -6
  567. data/lib/phusion_passenger/debug_logging.rb +32 -15
  568. data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
  569. data/lib/phusion_passenger/message_client.rb +21 -22
  570. data/lib/phusion_passenger/native_support.rb +26 -31
  571. data/lib/phusion_passenger/nginx/config_options.rb +32 -19
  572. data/lib/phusion_passenger/packaging.rb +7 -3
  573. data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
  574. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
  575. data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
  576. data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
  577. data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  578. data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
  579. data/lib/phusion_passenger/request_handler.rb +47 -82
  580. data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
  581. data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
  582. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
  583. data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
  584. data/lib/phusion_passenger/standalone/command.rb +27 -275
  585. data/lib/phusion_passenger/standalone/command2.rb +292 -0
  586. data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
  587. data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
  588. data/lib/phusion_passenger/standalone/main.rb +69 -71
  589. data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
  590. data/lib/phusion_passenger/standalone/start_command.rb +406 -467
  591. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
  592. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
  593. data/lib/phusion_passenger/standalone/status_command.rb +64 -23
  594. data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
  595. data/lib/phusion_passenger/standalone/version_command.rb +1 -5
  596. data/lib/phusion_passenger/utils.rb +0 -4
  597. data/lib/phusion_passenger/utils/json.rb +70 -4
  598. data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
  599. data/lib/phusion_passenger/utils/tee_input.rb +3 -3
  600. data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
  601. data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
  602. data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
  603. data/packaging/rpm/setup-system +2 -1
  604. data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
  605. data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
  606. data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
  607. data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
  608. data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
  609. data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
  610. data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
  611. data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
  612. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
  613. data/resources/templates/standalone/config.erb +14 -16
  614. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
  615. data/test/.rspec +1 -0
  616. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
  617. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
  618. data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
  619. data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
  620. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
  621. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
  622. data/test/cxx/BufferedIOTest.cpp +40 -40
  623. data/test/cxx/CxxTestMain.cpp +4 -22
  624. data/test/cxx/DataStructures/LStringTest.cpp +275 -0
  625. data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
  626. data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
  627. data/test/cxx/MessageServerTest.cpp +62 -55
  628. data/test/cxx/RequestHandlerTest.cpp +26 -27
  629. data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
  630. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
  631. data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
  632. data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
  633. data/test/cxx/ServerKit/ServerTest.cpp +408 -0
  634. data/test/cxx/TestSupport.cpp +51 -15
  635. data/test/cxx/TestSupport.h +31 -21
  636. data/test/cxx/UnionStationTest.cpp +121 -122
  637. data/test/cxx/UtilsTest.cpp +9 -33
  638. data/test/integration_tests/apache2_tests.rb +65 -27
  639. data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
  640. data/test/integration_tests/native_packaging_spec.rb +32 -17
  641. data/test/integration_tests/nginx_tests.rb +28 -10
  642. data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
  643. data/test/integration_tests/standalone_tests.rb +232 -169
  644. data/test/ruby/debug_logging_spec.rb +44 -40
  645. data/test/ruby/rails3.0/preloader_spec.rb +1 -1
  646. data/test/ruby/rails3.1/preloader_spec.rb +1 -1
  647. data/test/ruby/rails3.2/preloader_spec.rb +1 -1
  648. data/test/ruby/rails4.0/preloader_spec.rb +1 -1
  649. data/test/ruby/rails4.1/preloader_spec.rb +1 -1
  650. data/test/ruby/request_handler_spec.rb +62 -24
  651. data/test/ruby/shared/loader_sharedspec.rb +10 -9
  652. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
  653. data/test/ruby/spec_helper.rb +2 -11
  654. data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
  655. data/test/ruby/union_station_spec.rb +45 -40
  656. data/test/ruby/utils/tee_input_spec.rb +5 -5
  657. data/test/ruby/utils_spec.rb +3 -39
  658. data/test/stub/apache2/httpd.conf.erb +5 -2
  659. data/test/stub/nginx/nginx.conf.erb +3 -1
  660. data/test/support/apache2_controller.rb +25 -25
  661. data/test/support/nginx_controller.rb +14 -14
  662. data/test/support/test_helper.rb +74 -75
  663. metadata +439 -643
  664. metadata.gz.asc +7 -7
  665. data/ext/common/MultiLibeio.cpp +0 -204
  666. data/ext/common/MultiLibeio.h +0 -67
  667. data/ext/common/ServerInstanceDir.h +0 -402
  668. data/ext/common/Utils/Base64.cpp +0 -143
  669. data/ext/common/Utils/Base64.h +0 -83
  670. data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
  671. data/ext/common/Utils/PriorityQueue.h +0 -54
  672. data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
  673. data/ext/common/Utils/fib.c +0 -699
  674. data/ext/common/Utils/fib.h +0 -101
  675. data/ext/common/Utils/fibpriv.h +0 -67
  676. data/ext/common/agents/EnvPrinter.c +0 -16
  677. data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
  678. data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
  679. data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
  680. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
  681. data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
  682. data/ext/common/agents/SpawnPreparer.cpp +0 -206
  683. data/ext/common/agents/TempDirToucher.c +0 -383
  684. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
  685. data/helper-scripts/classic-rails-loader.rb +0 -166
  686. data/helper-scripts/classic-rails-preloader.rb +0 -193
  687. data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
  688. data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
  689. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
  690. data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
  691. data/lib/phusion_passenger/standalone/config_file.rb +0 -119
  692. data/lib/phusion_passenger/standalone/help_command.rb +0 -57
  693. data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
  694. data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
  695. data/lib/phusion_passenger/standalone/utils.rb +0 -58
  696. data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
  697. data/packaging/debian/LICENSE.md +0 -19
  698. data/packaging/debian/README.md +0 -320
  699. data/packaging/debian/Vagrantfile +0 -25
  700. data/packaging/debian/build +0 -210
  701. data/packaging/debian/debian_specs/nginx/changelog +0 -1989
  702. data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
  703. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
  704. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
  705. data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
  706. data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
  707. data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
  708. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
  709. data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
  710. data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
  711. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
  712. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
  713. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
  714. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
  715. data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
  716. data/packaging/debian/debian_specs/nginx/control.erb +0 -226
  717. data/packaging/debian/debian_specs/nginx/copyright +0 -196
  718. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
  719. data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
  720. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
  721. data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
  722. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
  723. data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
  724. data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
  725. data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
  726. data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
  727. data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
  728. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
  729. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
  730. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
  731. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
  732. data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
  733. data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
  734. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
  735. data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
  736. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
  737. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
  738. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
  739. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
  740. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
  741. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
  742. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
  743. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
  744. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
  745. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
  746. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
  747. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
  748. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
  749. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
  750. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
  751. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
  752. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
  753. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
  754. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
  755. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
  756. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
  757. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
  758. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
  759. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
  760. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
  761. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
  762. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
  763. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
  764. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
  765. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
  766. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
  767. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
  768. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
  769. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
  770. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
  771. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
  772. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
  773. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
  774. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
  775. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
  776. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
  777. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
  778. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
  779. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
  780. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
  781. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
  782. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
  783. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
  784. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
  785. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
  786. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
  787. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
  788. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
  789. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
  790. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
  791. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
  792. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
  793. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
  794. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
  795. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
  796. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
  797. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
  798. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
  799. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
  800. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
  801. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
  802. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
  803. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
  804. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
  805. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
  806. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
  807. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
  808. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
  809. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
  810. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
  811. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
  812. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
  813. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
  814. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
  815. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
  816. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
  817. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
  818. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
  819. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
  820. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
  821. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
  822. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
  823. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
  824. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
  825. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
  826. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
  827. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
  828. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
  829. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
  830. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
  831. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
  832. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
  833. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
  834. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
  835. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
  836. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
  837. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
  838. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
  839. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
  840. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
  841. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
  842. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
  843. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
  844. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
  845. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
  846. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
  847. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
  848. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
  849. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
  850. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
  851. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
  852. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
  853. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
  854. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
  855. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
  856. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
  857. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
  858. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
  859. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
  860. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
  861. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
  862. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
  863. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
  864. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
  865. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
  866. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
  867. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
  868. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
  869. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
  870. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
  871. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
  872. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
  873. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
  874. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
  875. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
  876. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
  877. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
  878. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
  879. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
  880. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
  881. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
  882. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
  883. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
  884. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
  885. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
  886. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
  887. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
  888. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
  889. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
  890. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
  891. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
  892. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
  893. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
  894. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
  895. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
  896. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
  897. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
  898. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
  899. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
  900. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
  901. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
  902. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
  903. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
  904. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
  905. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
  906. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
  907. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
  908. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
  909. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
  910. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
  911. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
  912. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
  913. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
  914. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
  915. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
  916. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
  917. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
  918. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
  919. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
  920. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
  921. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
  922. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
  923. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
  924. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
  925. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
  926. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
  927. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
  928. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
  929. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
  930. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
  931. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
  932. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
  933. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
  934. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
  935. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
  936. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
  937. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
  938. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
  939. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
  940. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
  941. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
  942. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
  943. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
  944. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
  945. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
  946. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
  947. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
  948. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
  949. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
  950. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
  951. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
  952. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
  953. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
  954. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
  955. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
  956. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
  957. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
  958. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
  959. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
  960. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
  961. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
  962. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
  963. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
  964. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
  965. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
  966. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
  967. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
  968. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
  969. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
  970. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
  971. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
  972. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
  973. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
  974. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
  975. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
  976. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
  977. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
  978. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
  979. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
  980. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
  981. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
  982. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
  983. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
  984. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
  985. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
  986. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
  987. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
  988. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
  989. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
  990. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
  991. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
  992. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
  993. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
  994. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
  995. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
  996. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
  997. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
  998. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
  999. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
  1000. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
  1001. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
  1002. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
  1003. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
  1004. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
  1005. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
  1006. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
  1007. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
  1008. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
  1009. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
  1010. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
  1011. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
  1012. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
  1013. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
  1014. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
  1015. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
  1016. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
  1017. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
  1018. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
  1019. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
  1020. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
  1021. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
  1022. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
  1023. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
  1024. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
  1025. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
  1026. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
  1027. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
  1028. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
  1029. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
  1030. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
  1031. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
  1032. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
  1033. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
  1034. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
  1035. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
  1036. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
  1037. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
  1038. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
  1039. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
  1040. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
  1041. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
  1042. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
  1043. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
  1044. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
  1045. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
  1046. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
  1047. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
  1048. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
  1049. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
  1050. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
  1051. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
  1052. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
  1053. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
  1054. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
  1055. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
  1056. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
  1057. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
  1058. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
  1059. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
  1060. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
  1061. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
  1062. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
  1063. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
  1064. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
  1065. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
  1066. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
  1067. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
  1068. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
  1069. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
  1070. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
  1071. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
  1072. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
  1073. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
  1074. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
  1075. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
  1076. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
  1077. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
  1078. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
  1079. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
  1080. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
  1081. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
  1082. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
  1083. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
  1084. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
  1085. data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
  1086. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
  1087. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
  1088. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
  1089. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
  1090. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
  1091. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
  1092. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
  1093. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
  1094. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
  1095. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
  1096. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
  1097. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
  1098. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
  1099. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
  1100. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
  1101. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
  1102. data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
  1103. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
  1104. data/packaging/debian/debian_specs/nginx/patches/series +0 -1
  1105. data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
  1106. data/packaging/debian/debian_specs/nginx/source/format +0 -1
  1107. data/packaging/debian/debian_specs/nginx/tests/control +0 -4
  1108. data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
  1109. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
  1110. data/packaging/debian/debian_specs/nginx/watch +0 -3
  1111. data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
  1112. data/packaging/debian/debian_specs/passenger/changelog +0 -316
  1113. data/packaging/debian/debian_specs/passenger/compat +0 -1
  1114. data/packaging/debian/debian_specs/passenger/control.erb +0 -123
  1115. data/packaging/debian/debian_specs/passenger/copyright +0 -385
  1116. data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
  1117. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
  1118. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
  1119. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
  1120. data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
  1121. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
  1122. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
  1123. data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
  1124. data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
  1125. data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
  1126. data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
  1127. data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
  1128. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
  1129. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
  1130. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
  1131. data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
  1132. data/packaging/debian/debian_specs/passenger/source/format +0 -1
  1133. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
  1134. data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
  1135. data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
  1136. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
  1137. data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
  1138. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
  1139. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
  1140. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
  1141. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
  1142. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
  1143. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
  1144. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
  1145. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
  1146. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
  1147. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
  1148. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
  1149. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
  1150. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
  1151. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
  1152. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
  1153. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  1154. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
  1155. data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
  1156. data/packaging/debian/docker_images/Makefile +0 -38
  1157. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  1158. data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
  1159. data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
  1160. data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
  1161. data/packaging/debian/docker_images/buildbox/install.sh +0 -85
  1162. data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
  1163. data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
  1164. data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
  1165. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
  1166. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
  1167. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
  1168. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
  1169. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
  1170. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
  1171. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
  1172. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
  1173. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
  1174. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
  1175. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
  1176. data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
  1177. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
  1178. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
  1179. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
  1180. data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
  1181. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
  1182. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
  1183. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
  1184. data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
  1185. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
  1186. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
  1187. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
  1188. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
  1189. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
  1190. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
  1191. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
  1192. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
  1193. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
  1194. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
  1195. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
  1196. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
  1197. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
  1198. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
  1199. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
  1200. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
  1201. data/packaging/debian/internal/build/Rakefile +0 -235
  1202. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
  1203. data/packaging/debian/internal/build/build-source-package.rb +0 -121
  1204. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
  1205. data/packaging/debian/internal/build/rakefile_support.rb +0 -96
  1206. data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
  1207. data/packaging/debian/internal/build/setup-environment.sh +0 -29
  1208. data/packaging/debian/internal/lib/distro_info.rb +0 -82
  1209. data/packaging/debian/internal/lib/distro_info.sh +0 -303
  1210. data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
  1211. data/packaging/debian/internal/lib/library.sh +0 -83
  1212. data/packaging/debian/internal/lib/preprocessor.rb +0 -173
  1213. data/packaging/debian/internal/lib/tracking.rb +0 -95
  1214. data/packaging/debian/internal/lib/tracking_category.rb +0 -45
  1215. data/packaging/debian/internal/lib/tracking_database.rb +0 -132
  1216. data/packaging/debian/internal/lib/tracking_task.rb +0 -148
  1217. data/packaging/debian/internal/lib/utils.rb +0 -78
  1218. data/packaging/debian/internal/publish/Rakefile +0 -97
  1219. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
  1220. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
  1221. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
  1222. data/packaging/debian/internal/publish/preinit.sh +0 -7
  1223. data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
  1224. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
  1225. data/packaging/debian/internal/scripts/initccache.sh +0 -35
  1226. data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
  1227. data/packaging/debian/internal/scripts/my_init +0 -340
  1228. data/packaging/debian/internal/scripts/pin_certificates +0 -34
  1229. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
  1230. data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
  1231. data/packaging/debian/internal/scripts/setuser +0 -31
  1232. data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
  1233. data/packaging/debian/internal/shell/preinit.sh +0 -28
  1234. data/packaging/debian/internal/shell/sudoers.conf +0 -1
  1235. data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
  1236. data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
  1237. data/packaging/debian/internal/test/apache/vhost.conf +0 -17
  1238. data/packaging/debian/internal/test/misc/config.json +0 -15
  1239. data/packaging/debian/internal/test/misc/hosts.conf +0 -4
  1240. data/packaging/debian/internal/test/misc/init.sh +0 -25
  1241. data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
  1242. data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
  1243. data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
  1244. data/packaging/debian/internal/test/misc/test_support.rb +0 -61
  1245. data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
  1246. data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
  1247. data/packaging/debian/internal/test/test.sh +0 -141
  1248. data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
  1249. data/packaging/debian/jenkins/publish/publish.sh +0 -69
  1250. data/packaging/debian/jenkins/test/test.sh +0 -63
  1251. data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
  1252. data/packaging/debian/publish +0 -172
  1253. data/packaging/debian/shell +0 -116
  1254. data/packaging/debian/test +0 -142
  1255. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
  1256. data/test/cxx/Base64Test.cpp +0 -50
  1257. data/test/cxx/FileBackedPipeTest.cpp +0 -626
  1258. data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
  1259. data/test/cxx/ScgiRequestParserTest.cpp +0 -423
  1260. data/test/cxx/ServerInstanceDirTest.cpp +0 -175
  1261. data/test/ruby/admin_tools_spec.rb +0 -360
  1262. data/test/ruby/classic_rails/loader_spec.rb +0 -46
  1263. data/test/ruby/classic_rails/preloader_spec.rb +0 -52
  1264. data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
  1265. data/test/stub/rails2.3/Rakefile +0 -10
  1266. data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
  1267. data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
  1268. data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
  1269. data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
  1270. data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
  1271. data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
  1272. data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
  1273. data/test/stub/rails2.3/config/boot.rb +0 -110
  1274. data/test/stub/rails2.3/config/database.yml +0 -19
  1275. data/test/stub/rails2.3/config/environment.rb +0 -62
  1276. data/test/stub/rails2.3/config/environments/development.rb +0 -17
  1277. data/test/stub/rails2.3/config/environments/production.rb +0 -18
  1278. data/test/stub/rails2.3/config/environments/staging.rb +0 -18
  1279. data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
  1280. data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
  1281. data/test/stub/rails2.3/config/routes.rb +0 -35
  1282. data/test/stub/rails2.3/log/.gitignore +0 -1
  1283. data/test/stub/rails2.3/public/.gitignore +0 -1
  1284. data/test/stub/rails2.3/script/about +0 -3
  1285. data/test/stub/rails2.3/script/console +0 -3
  1286. data/test/stub/rails2.3/script/dbconsole +0 -3
  1287. data/test/stub/rails2.3/script/destroy +0 -3
  1288. data/test/stub/rails2.3/script/generate +0 -3
  1289. data/test/stub/rails2.3/script/performance/benchmarker +0 -3
  1290. data/test/stub/rails2.3/script/performance/profiler +0 -3
  1291. data/test/stub/rails2.3/script/performance/request +0 -3
  1292. data/test/stub/rails2.3/script/plugin +0 -3
  1293. data/test/stub/rails2.3/script/process/inspector +0 -3
  1294. data/test/stub/rails2.3/script/process/reaper +0 -3
  1295. data/test/stub/rails2.3/script/process/spawner +0 -3
  1296. data/test/stub/rails2.3/script/runner +0 -3
  1297. data/test/stub/rails2.3/script/server +0 -3
  1298. data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
  1299. data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
  1300. data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
  1301. data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2014 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -68,20 +68,6 @@
68
68
  "The environment under which applications are run."),
69
69
 
70
70
 
71
- AP_INIT_TAKE1("RailsEnv",
72
- (Take1Func) cmd_passenger_app_env,
73
- NULL,
74
- OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
75
- "The environment under which applications are run."),
76
-
77
-
78
- AP_INIT_TAKE1("RackEnv",
79
- (Take1Func) cmd_passenger_app_env,
80
- NULL,
81
- OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
82
- "The environment under which applications are run."),
83
-
84
-
85
71
  AP_INIT_TAKE1("PassengerMinInstances",
86
72
  (Take1Func) cmd_passenger_min_instances,
87
73
  NULL,
@@ -152,6 +138,13 @@
152
138
  "The maximum number of queued requests."),
153
139
 
154
140
 
141
+ AP_INIT_TAKE1("PassengerMaxPreloaderIdleTime",
142
+ (Take1Func) cmd_passenger_max_preloader_idle_time,
143
+ NULL,
144
+ RSRC_CONF,
145
+ "The maximum number of seconds that a preloader process may be idle before it is shutdown."),
146
+
147
+
155
148
  AP_INIT_FLAG("PassengerLoadShellEnvvars",
156
149
  (FlagFunc) cmd_passenger_load_shell_envvars,
157
150
  NULL,
@@ -193,3 +186,59 @@
193
186
  OR_ALL,
194
187
  "The cookie name to use for sticky sessions."),
195
188
 
189
+
190
+ AP_INIT_TAKE1("PassengerSpawnMethod",
191
+ (Take1Func) cmd_passenger_spawn_method,
192
+ NULL,
193
+ RSRC_CONF,
194
+ "The spawn method to use."),
195
+
196
+
197
+ AP_INIT_FLAG("PassengerShowVersionInHeader",
198
+ (FlagFunc) cmd_passenger_show_version_in_header,
199
+ NULL,
200
+ OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
201
+ "Whether to show the Phusion Passenger version number in the X-Powered-By header."),
202
+
203
+
204
+ AP_INIT_FLAG("PassengerFriendlyErrorPages",
205
+ (FlagFunc) cmd_passenger_friendly_error_pages,
206
+ NULL,
207
+ OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
208
+ "Whether to display friendly error pages when something goes wrong."),
209
+
210
+
211
+ AP_INIT_TAKE1("PassengerRestartDir",
212
+ (Take1Func) cmd_passenger_restart_dir,
213
+ NULL,
214
+ OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
215
+ "The directory in which Passenger should look for restart.txt."),
216
+
217
+
218
+ AP_INIT_TAKE1("PassengerAppGroupName",
219
+ (Take1Func) cmd_passenger_app_group_name,
220
+ NULL,
221
+ OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
222
+ "Application process group name."),
223
+
224
+
225
+ AP_INIT_TAKE1("RailsEnv",
226
+ (Take1Func) cmd_passenger_app_env,
227
+ NULL,
228
+ OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
229
+ "The environment under which applications are run."),
230
+
231
+
232
+ AP_INIT_TAKE1("RackEnv",
233
+ (Take1Func) cmd_passenger_app_env,
234
+ NULL,
235
+ OR_OPTIONS | ACCESS_CONF | RSRC_CONF,
236
+ "The environment under which applications are run."),
237
+
238
+
239
+ AP_INIT_TAKE1("RailsSpawnMethod",
240
+ (Take1Func) cmd_passenger_spawn_method,
241
+ NULL,
242
+ RSRC_CONF,
243
+ "The spawn method to use."),
244
+
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2014 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -78,10 +78,14 @@ def function_type_for(option)
78
78
  end
79
79
 
80
80
  def function_for(option)
81
- function_name = option[:name].gsub(/[A-Z]/) do |letter|
82
- "_" + letter[0..0].downcase
81
+ if option[:function]
82
+ return option[:function]
83
+ else
84
+ function_name = option[:name].gsub(/[A-Z]/) do |letter|
85
+ "_" + letter[0..0].downcase
86
+ end
87
+ return "cmd#{function_name}"
83
88
  end
84
- return "cmd#{function_name}"
85
89
  end
86
90
 
87
91
  def context_for(option)
@@ -44,16 +44,22 @@
44
44
  Threeway enabled;
45
45
  /** Allow Apache to handle error response. */
46
46
  Threeway errorOverride;
47
+ /** Whether to display friendly error pages when something goes wrong. */
48
+ Threeway friendlyErrorPages;
47
49
  /** Enable or disable Passenger's high performance mode. */
48
50
  Threeway highPerformance;
49
51
  /** Whether to load environment variables from the shell before running the application. */
50
52
  Threeway loadShellEnvvars;
53
+ /** Whether to show the Phusion Passenger version number in the X-Powered-By header. */
54
+ Threeway showVersionInHeader;
51
55
  /** Whether to enable sticky sessions. */
52
56
  Threeway stickySessions;
53
57
  /** The cookie name to use for sticky sessions. */
54
58
  Threeway stickySessionsCookieName;
55
59
  /** The maximum number of simultaneously alive application instances a single application may occupy. */
56
60
  int maxInstancesPerApp;
61
+ /** The maximum number of seconds that a preloader process may be idle before it is shutdown. */
62
+ int maxPreloaderIdleTime;
57
63
  /** The maximum number of queued requests. */
58
64
  int maxRequestQueueSize;
59
65
  /** The maximum number of requests that an application instance may process. */
@@ -64,6 +70,8 @@
64
70
  int startTimeout;
65
71
  /** The environment under which applications are run. */
66
72
  const char *appEnv;
73
+ /** Application process group name. */
74
+ const char *appGroupName;
67
75
  /** Force specific application type. */
68
76
  const char *appType;
69
77
  /** The group that Ruby applications must run as. */
@@ -72,8 +80,12 @@
72
80
  const char *nodejs;
73
81
  /** The Python interpreter to use. */
74
82
  const char *python;
83
+ /** The directory in which Passenger should look for restart.txt. */
84
+ const char *restartDir;
75
85
  /** The Ruby interpreter to use. */
76
86
  const char *ruby;
87
+ /** The spawn method to use. */
88
+ const char *spawnMethod;
77
89
  /** Force specific startup file. */
78
90
  const char *startupFile;
79
91
  /** The user that Ruby applications must run as. */
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2014 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -280,6 +280,40 @@
280
280
  }
281
281
 
282
282
 
283
+ static const char *
284
+ cmd_passenger_max_preloader_idle_time(cmd_parms *cmd, void *pcfg, const char *arg) {
285
+ DirConfig *config = (DirConfig *) pcfg;
286
+ char *end;
287
+ long result;
288
+
289
+ result = strtol(arg, &end, 10);
290
+ if (*end != '\0') {
291
+ string message = "Invalid number specified for ";
292
+ message.append(cmd->directive->directive);
293
+ message.append(".");
294
+
295
+ char *messageStr = (char *) apr_palloc(cmd->temp_pool,
296
+ message.size() + 1);
297
+ memcpy(messageStr, message.c_str(), message.size() + 1);
298
+ return messageStr;
299
+
300
+ } else if (result < 0) {
301
+ string message = "Value for ";
302
+ message.append(cmd->directive->directive);
303
+ message.append(" must be greater than or equal to 0.");
304
+
305
+ char *messageStr = (char *) apr_palloc(cmd->temp_pool,
306
+ message.size() + 1);
307
+ memcpy(messageStr, message.c_str(), message.size() + 1);
308
+ return messageStr;
309
+
310
+ } else {
311
+ config->maxPreloaderIdleTime = (int) result;
312
+ return NULL;
313
+ }
314
+ }
315
+
316
+
283
317
  static const char *
284
318
  cmd_passenger_load_shell_envvars(cmd_parms *cmd, void *pcfg, const char *arg) {
285
319
  DirConfig *config = (DirConfig *) pcfg;
@@ -339,4 +373,42 @@
339
373
  return NULL;
340
374
  }
341
375
 
376
+
377
+ static const char *
378
+ cmd_passenger_show_version_in_header(cmd_parms *cmd, void *pcfg, const char *arg) {
379
+ DirConfig *config = (DirConfig *) pcfg;
380
+ config->showVersionInHeader =
381
+ arg ?
382
+ DirConfig::ENABLED :
383
+ DirConfig::DISABLED;
384
+ return NULL;
385
+ }
386
+
387
+
388
+ static const char *
389
+ cmd_passenger_friendly_error_pages(cmd_parms *cmd, void *pcfg, const char *arg) {
390
+ DirConfig *config = (DirConfig *) pcfg;
391
+ config->friendlyErrorPages =
392
+ arg ?
393
+ DirConfig::ENABLED :
394
+ DirConfig::DISABLED;
395
+ return NULL;
396
+ }
397
+
398
+
399
+ static const char *
400
+ cmd_passenger_restart_dir(cmd_parms *cmd, void *pcfg, const char *arg) {
401
+ DirConfig *config = (DirConfig *) pcfg;
402
+ config->restartDir = arg;
403
+ return NULL;
404
+ }
405
+
406
+
407
+ static const char *
408
+ cmd_passenger_app_group_name(cmd_parms *cmd, void *pcfg, const char *arg) {
409
+ DirConfig *config = (DirConfig *) pcfg;
410
+ config->appGroupName = arg;
411
+ return NULL;
412
+ }
413
+
342
414
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2014 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -43,7 +43,8 @@ def filter_eligible_options(options)
43
43
  return options.reject do |option|
44
44
  option[:alias_for] ||
45
45
  option.fetch(:field, true).nil? ||
46
- option[:field].to_s =~ /\./
46
+ option[:field].to_s =~ /\./ ||
47
+ option[:function]
47
48
  end
48
49
  end
49
50
 
@@ -52,10 +52,16 @@
52
52
  config->highPerformance = DirConfig::UNSET;
53
53
  config->enabled = DirConfig::UNSET;
54
54
  config->maxRequestQueueSize = UNSET_INT_VALUE;
55
+ config->maxPreloaderIdleTime = UNSET_INT_VALUE;
55
56
  config->loadShellEnvvars = DirConfig::UNSET;
56
57
  config->bufferUpload = DirConfig::UNSET;
57
58
  config->appType = NULL;
58
59
  config->startupFile = NULL;
59
60
  config->stickySessions = DirConfig::UNSET;
60
61
  config->stickySessionsCookieName = DirConfig::UNSET;
62
+ config->spawnMethod = NULL;
63
+ config->showVersionInHeader = DirConfig::UNSET;
64
+ config->friendlyErrorPages = DirConfig::UNSET;
65
+ config->restartDir = NULL;
66
+ config->appGroupName = NULL;
61
67
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2014 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -30,6 +30,7 @@
30
30
  #include <cstring>
31
31
 
32
32
  #include <oxt/backtrace.hpp>
33
+ #include <boost/thread.hpp>
33
34
 
34
35
  #include "Configuration.hpp"
35
36
  #include <ApplicationPool2/AppTypes.h>
@@ -72,6 +73,7 @@ private:
72
73
  DirConfig *config;
73
74
  request_rec *r;
74
75
  CachedFileStat *cstat;
76
+ boost::mutex *cstatMutex;
75
77
  const char *baseURI;
76
78
  string publicDir;
77
79
  string appRoot;
@@ -142,7 +144,7 @@ private:
142
144
  }
143
145
 
144
146
  UPDATE_TRACE_POINT();
145
- AppTypeDetector detector(cstat, throttleRate);
147
+ AppTypeDetector detector(cstat, cstatMutex, throttleRate);
146
148
  PassengerAppType appType;
147
149
  string appRoot;
148
150
  if (config->appType == NULL) {
@@ -174,15 +176,18 @@ public:
174
176
  * Create a new DirectoryMapper object.
175
177
  *
176
178
  * @param cstat A CachedFileStat object used for statting files.
179
+ * @param cstatMutex A mutex for locking CachedFileStat, making its
180
+ * usage thread-safe.
177
181
  * @param throttleRate A throttling rate for cstat.
178
182
  * @warning Do not use this object after the destruction of <tt>r</tt>,
179
183
  * <tt>config</tt> or <tt>cstat</tt>.
180
184
  */
181
- DirectoryMapper(request_rec *r, DirConfig *config,
182
- CachedFileStat *cstat, unsigned int throttleRate) {
185
+ DirectoryMapper(request_rec *r, DirConfig *config, CachedFileStat *cstat,
186
+ boost::mutex *cstatMutex, unsigned int throttleRate) {
183
187
  this->r = r;
184
188
  this->config = config;
185
189
  this->cstat = cstat;
190
+ this->cstatMutex = cstatMutex;
186
191
  this->throttleRate = throttleRate;
187
192
  appType = PAT_NONE;
188
193
  baseURI = NULL;
@@ -216,7 +221,7 @@ public:
216
221
  * @throws TimeRetrievalException
217
222
  * @throws boost::thread_interrupted
218
223
  */
219
- string getPublicDirectory() {
224
+ const string &getPublicDirectory() {
220
225
  autoDetect();
221
226
  return publicDir;
222
227
  }
@@ -230,7 +235,7 @@ public:
230
235
  * @throws TimeRetrievalException
231
236
  * @throws boost::thread_interrupted
232
237
  */
233
- string getAppRoot() {
238
+ const string &getAppRoot() {
234
239
  autoDetect();
235
240
  return appRoot;
236
241
  }
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2014 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -55,6 +55,8 @@
55
55
  #include "Utils.h"
56
56
  #include "Utils/IOUtils.h"
57
57
  #include "Utils/Timer.h"
58
+ #include "Utils/HttpConstants.h"
59
+ #include "Utils/modp_b64.h"
58
60
  #include "Logging.h"
59
61
  #include "AgentsStarter.h"
60
62
  #include "DirectoryMapper.h"
@@ -86,16 +88,6 @@ extern "C" module AP_MODULE_DECLARE_DATA passenger_module;
86
88
  APLOG_USE_MODULE(passenger);
87
89
  #endif
88
90
 
89
-
90
- /**
91
- * If the HTTP client sends POST data larger than this value (in bytes),
92
- * then the POST data will be fully buffered into a temporary file, before
93
- * allocating a Ruby web application session.
94
- * File uploads smaller than this are buffered into memory instead.
95
- */
96
- #define LARGE_UPLOAD_THRESHOLD 1024 * 8
97
-
98
-
99
91
  #if HTTP_VERSION(AP_SERVER_MAJORVERSION_NUMBER, AP_SERVER_MINORVERSION_NUMBER) > 2002
100
92
  // Apache > 2.2.x
101
93
  #define AP_GET_SERVER_VERSION_DEPRECATED
@@ -106,11 +98,6 @@ extern "C" module AP_MODULE_DECLARE_DATA passenger_module;
106
98
  #endif
107
99
  #endif
108
100
 
109
- #if HTTP_VERSION(AP_SERVER_MAJORVERSION_NUMBER, AP_SERVER_MINORVERSION_NUMBER) >= 2004
110
- // Apache >= 2.4
111
- #define unixd_config ap_unixd_config
112
- #endif
113
-
114
101
 
115
102
  /**
116
103
  * Apache hook functions, wrapped in a class.
@@ -209,6 +196,7 @@ private:
209
196
  Threeway m_hasModRewrite, m_hasModDir, m_hasModAutoIndex, m_hasModXsendfile;
210
197
  CachedFileStat cstat;
211
198
  AgentsStarter agentsStarter;
199
+ boost::mutex cstatMutex;
212
200
 
213
201
  inline DirConfig *getDirConfig(request_rec *r) {
214
202
  return (DirConfig *) ap_get_module_config(r->per_dir_config, &passenger_module);
@@ -239,12 +227,12 @@ private:
239
227
  }
240
228
  }
241
229
 
242
- StaticString getRequestSocketFilename() const {
243
- return agentsStarter.getRequestSocketFilename();
230
+ StaticString getServerAddress() const {
231
+ return agentsStarter.getServerAddress();
244
232
  }
245
233
 
246
- StaticString getRequestSocketPassword() const {
247
- return agentsStarter.getRequestSocketPassword();
234
+ StaticString getServerPassword() const {
235
+ return agentsStarter.getServerPassword();
248
236
  }
249
237
 
250
238
  /**
@@ -252,13 +240,12 @@ private:
252
240
  * wait and retry for a short period of time until the helper agent has been
253
241
  * restarted.
254
242
  */
255
- FileDescriptor connectToHelperAgent() {
243
+ FileDescriptor connectToInternalServer() {
256
244
  TRACE_POINT();
257
245
  FileDescriptor conn;
258
246
 
259
247
  try {
260
- conn = connectToUnixServer(getRequestSocketFilename());
261
- writeExact(conn, getRequestSocketPassword());
248
+ conn = connectToServer(getServerAddress());
262
249
  } catch (const SystemException &e) {
263
250
  if (e.code() == EPIPE || e.code() == ECONNREFUSED || e.code() == ENOENT) {
264
251
  UPDATE_TRACE_POINT();
@@ -272,8 +259,7 @@ private:
272
259
  time_t deadline = time(NULL) + 5;
273
260
  while (!connected && time(NULL) < deadline) {
274
261
  try {
275
- conn = connectToUnixServer(getRequestSocketFilename());
276
- writeExact(conn, getRequestSocketPassword());
262
+ conn = connectToServer(getServerAddress());
277
263
  connected = true;
278
264
  } catch (const SystemException &e) {
279
265
  if (e.code() == EPIPE || e.code() == ECONNREFUSED || e.code() == ENOENT) {
@@ -290,7 +276,7 @@ private:
290
276
  if (!connected) {
291
277
  UPDATE_TRACE_POINT();
292
278
  throw IOException("Cannot connect to the helper agent at " +
293
- getRequestSocketFilename());
279
+ getServerAddress());
294
280
  }
295
281
  } else {
296
282
  throw;
@@ -373,7 +359,7 @@ private:
373
359
  bool prepareRequest(request_rec *r, DirConfig *config, const char *filename, bool coreModuleWillBeRun = false) {
374
360
  TRACE_POINT();
375
361
 
376
- DirectoryMapper mapper(r, config, &cstat, config->getStatThrottleRate());
362
+ DirectoryMapper mapper(r, config, &cstat, &cstatMutex, serverConfig.statThrottleRate);
377
363
  try {
378
364
  if (mapper.getApplicationType() == PAT_NONE) {
379
365
  // (B) is not true.
@@ -554,97 +540,23 @@ private:
554
540
 
555
541
  this_thread::disable_interruption di;
556
542
  this_thread::disable_syscall_interruption dsi;
557
- bool expectingUploadData;
558
- bool shouldBufferUploads;
559
- string uploadDataMemory;
560
- boost::shared_ptr<BufferedUpload> uploadDataFile;
561
- const char *contentLength;
562
-
563
- expectingUploadData = ap_should_client_block(r);
564
- contentLength = lookupHeader(r, "Content-Length");
565
- shouldBufferUploads = config->bufferUpload != DirConfig::DISABLED;
566
-
567
- /* If the HTTP upload data is larger than a threshold, or if the HTTP
568
- * client sent HTTP upload data using the "chunked" transfer encoding
569
- * (which implies Content-Length == NULL), then buffer the upload
570
- * data into a tempfile. Otherwise, buffer it into memory.
571
- *
572
- * We never forward the data directly to the backend process because
573
- * the HTTP client might block indefinitely until it's done uploading.
574
- * This would quickly exhaust the application pool.
575
- */
576
- if (expectingUploadData && shouldBufferUploads) {
577
- if (contentLength == NULL || atol(contentLength) > LARGE_UPLOAD_THRESHOLD) {
578
- uploadDataFile = receiveRequestBody(r);
579
- } else {
580
- receiveRequestBody(r, contentLength, uploadDataMemory);
581
- }
543
+ bool expectingBody;
582
544
 
583
- /* We'll set the Content-Length header to the length of the
584
- * received upload data. Rails 2 requires this header for its
585
- * HTTP upload data multipart parsing process.
586
- * There are two reasons why we don't rely on the Content-Length
587
- * header as sent by the client:
588
- * - The client doesn't always send Content-Length, e.g. in case
589
- * of "chunked" transfer encoding.
590
- * - mod_deflate input compression can make it so that the
591
- * amount of upload we receive doesn't match Content-Length:
592
- * http://httpd.apache.org/docs/2.0/mod/mod_deflate.html#enable
593
- */
594
- if (uploadDataFile != NULL) {
595
- apr_table_set(r->headers_in, "Content-Length",
596
- toString(ftell(uploadDataFile->handle)).c_str());
597
- } else {
598
- apr_table_set(r->headers_in, "Content-Length",
599
- toString(uploadDataMemory.size()).c_str());
600
- }
601
- }
545
+ expectingBody = ap_should_client_block(r);
602
546
 
603
547
 
604
548
  /********** Step 3: forwarding the request and request body
605
549
  to the HelperAgent **********/
606
550
 
607
- vector<StaticString> requestData;
608
- string headerData;
609
- unsigned int size;
610
- char sizeString[16];
611
551
  int ret;
612
-
613
- requestData.reserve(3);
614
- headerData.reserve(1024 * 2);
615
- requestData.push_back(StaticString());
616
- size = constructHeaders(r, config, requestData, mapper, headerData);
617
- requestData.push_back(",");
618
-
619
- ret = snprintf(sizeString, sizeof(sizeString) - 1, "%u:", size);
620
- sizeString[ret] = '\0';
621
- requestData[0] = StaticString(sizeString, ret);
622
-
623
- if (expectingUploadData && shouldBufferUploads && uploadDataFile == NULL) {
624
- requestData.push_back(uploadDataMemory);
625
- }
626
-
627
- FileDescriptor conn = connectToHelperAgent();
628
- gatheredWrite(conn, &requestData[0], requestData.size());
629
-
630
- if (expectingUploadData) {
631
- if (shouldBufferUploads && uploadDataFile != NULL) {
632
- sendRequestBody(conn, uploadDataFile);
633
- uploadDataFile.reset();
634
- } else if (!shouldBufferUploads) {
635
- sendRequestBody(conn, r);
636
- }
637
- }
638
-
639
- do {
640
- ret = shutdown(conn, SHUT_WR);
641
- } while (ret == -1 && errno == EINTR);
642
- if (ret == -1 && errno != ENOTCONN) {
643
- // FreeBSD has a kernel bug which causes shutdown()
644
- // to harmlessly return ENOTCONN sometimes. See comment
645
- // in safelyClose().
646
- int e = errno;
647
- throw SystemException("Cannot shutdown(SHUT_WR) HelperAgent connection", e);
552
+ bool bodyIsChunked = false;
553
+
554
+ string headers = constructRequestHeaders(r, mapper, bodyIsChunked);
555
+ FileDescriptor conn = connectToInternalServer();
556
+ writeExact(conn, headers);
557
+ headers.clear();
558
+ if (expectingBody) {
559
+ sendRequestBody(conn, r, bodyIsChunked);
648
560
  }
649
561
 
650
562
 
@@ -660,14 +572,16 @@ private:
660
572
  bb = apr_brigade_create(r->connection->pool, r->connection->bucket_alloc);
661
573
 
662
574
  bucketState = boost::make_shared<PassengerBucketState>(conn);
663
- b = passenger_bucket_create(bucketState, r->connection->bucket_alloc, config->getBufferResponse());
575
+ b = passenger_bucket_create(bucketState, r->connection->bucket_alloc,
576
+ config->getBufferResponse());
664
577
  APR_BRIGADE_INSERT_TAIL(bb, b);
665
578
 
666
579
  b = apr_bucket_eos_create(r->connection->bucket_alloc);
667
580
  APR_BRIGADE_INSERT_TAIL(bb, b);
668
581
 
669
582
  /* Now read the HTTP response header, parse it and fill relevant
670
- * information in our request_rec structure.
583
+ * information in our request_rec structure. We skip the status line
584
+ * because ap_scan_script_header_err_brigade() can't handle it.
671
585
  */
672
586
 
673
587
  /* I know the required size for backendData because I read
@@ -675,9 +589,10 @@ private:
675
589
  */
676
590
  char backendData[MAX_STRING_LEN];
677
591
  Timer timer;
678
- int result = ap_scan_script_header_err_brigade(r, bb, backendData);
592
+ getsfunc_BRIGADE(backendData, MAX_STRING_LEN, bb);
593
+ ret = ap_scan_script_header_err_brigade(r, bb, backendData);
679
594
 
680
- if (result == OK) {
595
+ if (ret == OK) {
681
596
  // The API documentation for ap_scan_script_err_brigade() says it
682
597
  // returns HTTP_OK on success, but it actually returns OK.
683
598
 
@@ -692,9 +607,12 @@ private:
692
607
  * Status header for retrieving the HTTP status.
693
608
  */
694
609
  if (!r->status_line || *r->status_line == '\0') {
695
- r->status_line = apr_psprintf(r->pool,
696
- "%d Unknown Status",
697
- r->status);
610
+ r->status_line = getStatusCodeAndReasonPhrase(r->status);
611
+ if (r->status_line == NULL) {
612
+ r->status_line = apr_psprintf(r->pool,
613
+ "%d Unknown Status",
614
+ r->status);
615
+ }
698
616
  }
699
617
  apr_table_setn(r->headers_out, "Status", r->status_line);
700
618
 
@@ -798,16 +716,6 @@ private:
798
716
  apr_strnatcasecmp(headerName + 1, "ransfer-encoding") == 0;
799
717
  }
800
718
 
801
- bool contains_non_alphanumdash(const char *current) {
802
- while (*current != '\0') {
803
- if (!apr_isalnum(*current) && *current != '-') {
804
- return false;
805
- }
806
- current++;
807
- }
808
- return true;
809
- }
810
-
811
719
  /**
812
720
  * Convert an HTTP header name to a CGI environment name.
813
721
  */
@@ -816,12 +724,10 @@ private:
816
724
  char *current = result + sizeof("HTTP_") - 1;
817
725
 
818
726
  while (*current != '\0') {
819
- if (apr_isalnum(*current)) {
820
- *current = apr_toupper(*current);
821
- } else if (*current == '-') {
727
+ if (*current == '-') {
822
728
  *current = '_';
823
729
  } else {
824
- return NULL;
730
+ *current = apr_toupper(*current);
825
731
  }
826
732
  current++;
827
733
  }
@@ -841,94 +747,60 @@ private:
841
747
  return NULL;
842
748
  }
843
749
 
844
- const char *lookupHeader(request_rec *r, const char *name) {
845
- return lookupInTable(r->headers_in, name);
846
- }
847
-
848
750
  const char *lookupEnv(request_rec *r, const char *name) {
849
751
  return lookupInTable(r->subprocess_env, name);
850
752
  }
851
753
 
852
- void addHeader(string &headers, const char *name, const char *value) {
853
- if (name != NULL && value != NULL) {
854
- headers.append(name);
855
- headers.append(1, '\0');
754
+ void addHeader(string &headers, const StaticString &name, const char *value) {
755
+ if (value != NULL) {
756
+ headers.append(name.data(), name.size());
757
+ headers.append(": ", 2);
856
758
  headers.append(value);
857
- headers.append(1, '\0');
759
+ headers.append("\r\n", 2);
858
760
  }
859
761
  }
860
762
 
861
- void addHeader(string &headers, const char *name, const StaticString &value) {
862
- if (name != NULL) {
863
- headers.append(name);
864
- headers.append(1, '\0');
865
- headers.append(value.c_str(), value.size());
866
- headers.append(1, '\0');
867
- }
763
+ void addHeader(string &headers, const StaticString &name, const StaticString &value) {
764
+ headers.append(name.data(), name.size());
765
+ headers.append(": ", 2);
766
+ headers.append(value.data(), value.size());
767
+ headers.append("\r\n", 2);
868
768
  }
869
769
 
870
- void addHeader(request_rec *r, string &headers, const char *name, int value) {
770
+ void addHeader(request_rec *r, string &headers, const StaticString &name, int value) {
871
771
  if (value != UNSET_INT_VALUE) {
872
- headers.append(name);
873
- headers.append(1, '\0');
772
+ headers.append(name.data(), name.size());
773
+ headers.append(": ", 2);
874
774
  headers.append(apr_psprintf(r->pool, "%d", value));
875
- headers.append(1, '\0');
775
+ headers.append("\r\n", 2);
876
776
  }
877
777
  }
878
778
 
879
- void addHeader(request_rec *r, string &headers, const char *name, DirConfig::Threeway value) {
779
+ void addHeader(string &headers, const StaticString &name, DirConfig::Threeway value) {
880
780
  if (value != DirConfig::UNSET) {
881
- headers.append(name);
781
+ headers.append(name.data(), name.size());
782
+ headers.append(": ", 2);
882
783
  if (value == DirConfig::ENABLED) {
883
- headers.append("\0true\0", 6);
784
+ headers.append("t", 1);
884
785
  } else {
885
- headers.append("\0false\0", 7);
786
+ headers.append("f", 1);
886
787
  }
788
+ headers.append("\r\n", 2);
887
789
  }
888
790
  }
889
791
 
890
- unsigned int constructHeaders(request_rec *r, DirConfig *config,
891
- vector<StaticString> &requestData, DirectoryMapper &mapper,
892
- string &output)
792
+ string constructRequestHeaders(request_rec *r, DirectoryMapper &mapper,
793
+ bool &bodyIsChunked)
893
794
  {
894
795
  const char *baseURI = mapper.getBaseURI();
796
+ DirConfig *config = getDirConfig(r);
797
+ string result;
895
798
 
896
- /*
897
- * Apache unescapes URI's before passing them to Phusion Passenger,
898
- * but backend processes expect the escaped version.
899
- * http://code.google.com/p/phusion-passenger/issues/detail?id=404
900
- */
901
- size_t uriLen = strlen(r->uri);
902
- unsigned int escaped = escapeUri(NULL, (const unsigned char *) r->uri, uriLen);
903
- char *escapedUri = (char *) apr_palloc(r->pool, uriLen + 2 * escaped + 1);
904
- escapeUri((unsigned char *) escapedUri, (const unsigned char *) r->uri, uriLen);
905
- escapedUri[uriLen + 2 * escaped] = '\0';
906
-
799
+ // Construct HTTP status line.
907
800
 
908
- // Set standard CGI variables.
909
- #ifdef AP_GET_SERVER_VERSION_DEPRECATED
910
- addHeader(output, "SERVER_SOFTWARE", ap_get_server_banner());
911
- #else
912
- addHeader(output, "SERVER_SOFTWARE", ap_get_server_version());
913
- #endif
914
- addHeader(output, "SERVER_PROTOCOL", r->protocol);
915
- addHeader(output, "SERVER_NAME", ap_get_server_name(r));
916
- addHeader(output, "SERVER_ADMIN", r->server->server_admin);
917
- addHeader(output, "SERVER_ADDR", r->connection->local_ip);
918
- addHeader(output, "SERVER_PORT", apr_psprintf(r->pool, "%u", ap_get_server_port(r)));
919
- #if HTTP_VERSION(AP_SERVER_MAJORVERSION_NUMBER, AP_SERVER_MINORVERSION_NUMBER) >= 2004
920
- addHeader(output, "REMOTE_ADDR", r->connection->client_ip);
921
- addHeader(output, "REMOTE_PORT", apr_psprintf(r->pool, "%d", r->connection->client_addr->port));
922
- #else
923
- addHeader(output, "REMOTE_ADDR", r->connection->remote_ip);
924
- addHeader(output, "REMOTE_PORT", apr_psprintf(r->pool, "%d", r->connection->remote_addr->port));
925
- #endif
926
- addHeader(output, "REMOTE_USER", r->user);
927
- addHeader(output, "REQUEST_METHOD", r->method);
928
- addHeader(output, "QUERY_STRING", r->args ? r->args : "");
929
- addHeader(output, "HTTPS", lookupEnv(r, "HTTPS"));
930
- addHeader(output, "CONTENT_TYPE", lookupHeader(r, "Content-type"));
931
- addHeader(output, "DOCUMENT_ROOT", ap_document_root(r));
801
+ result.reserve(4096);
802
+ result.append(r->method);
803
+ result.append(" ", 1);
932
804
 
933
805
  if (config->allowsEncodedSlashes()) {
934
806
  /*
@@ -940,28 +812,30 @@ private:
940
812
  * http://code.google.com/p/phusion-passenger/issues/detail?id=113
941
813
  * http://code.google.com/p/phusion-passenger/issues/detail?id=230
942
814
  */
943
- addHeader(output, "REQUEST_URI", r->unparsed_uri);
815
+ result.append(r->unparsed_uri);
944
816
  } else {
945
- const char *request_uri;
817
+ size_t uriLen = strlen(r->uri);
818
+ unsigned int escaped = escapeUri(NULL, (const unsigned char *) r->uri, uriLen);
819
+ size_t escapedUriLen = uriLen + 2 * escaped;
820
+ char *escapedUri = (char *) apr_palloc(r->pool, escapedUriLen);
821
+ escapeUri((unsigned char *) escapedUri, (const unsigned char *) r->uri, uriLen);
822
+
823
+ result.append(escapedUri, escapedUriLen);
824
+
946
825
  if (r->args != NULL) {
947
- request_uri = apr_pstrcat(r->pool, escapedUri, "?", r->args, (char *) NULL);
948
- } else {
949
- request_uri = escapedUri;
826
+ result.append("?", 1);
827
+ result.append(r->args);
950
828
  }
951
- addHeader(output, "REQUEST_URI", request_uri);
952
829
  }
953
830
 
954
- if (baseURI == NULL) {
955
- addHeader(output, "SCRIPT_NAME", "");
956
- addHeader(output, "PATH_INFO", escapedUri);
957
- } else {
958
- addHeader(output, "SCRIPT_NAME", baseURI);
959
- addHeader(output, "PATH_INFO", escapedUri + strlen(baseURI));
960
- }
831
+ result.append(" HTTP/1.1\r\n", sizeof(" HTTP/1.1\r\n") - 1);
832
+
833
+ // Construct HTTP headers.
961
834
 
962
- // Set HTTP headers.
963
835
  const apr_array_header_t *hdrs_arr;
964
836
  apr_table_entry_t *hdrs;
837
+ apr_table_entry_t *connectionHeader = NULL;
838
+ apr_table_entry_t *transferEncodingHeader = NULL;
965
839
  int i;
966
840
 
967
841
  hdrs_arr = apr_table_elts(r->headers_in);
@@ -969,117 +843,202 @@ private:
969
843
  for (i = 0; i < hdrs_arr->nelts; ++i) {
970
844
  if (hdrs[i].key == NULL) {
971
845
  continue;
846
+ } else if (connectionHeader == NULL
847
+ && strcasecmp(hdrs[i].key, "Connection") == 0)
848
+ {
849
+ connectionHeader = &hdrs[i];
850
+ } else if (transferEncodingHeader == NULL
851
+ && strcasecmp(hdrs[i].key, "Transfer-Encoding") == 0)
852
+ {
853
+ transferEncodingHeader = &hdrs[i];
854
+ } else {
855
+ result.append(hdrs[i].key);
856
+ result.append(": ", 2);
857
+ if (hdrs[i].val != NULL) {
858
+ result.append(hdrs[i].val);
859
+ }
860
+ result.append("\r\n", 2);
972
861
  }
862
+ }
973
863
 
974
- if (!contains_non_alphanumdash(hdrs[i].key)) {
975
- continue;
976
- }
864
+ if (connectionHeader == NULL || strcasecmp(connectionHeader->val, "keep-alive") == 0) {
865
+ result.append("Connection: close\r\n", sizeof("Connection: close\r\n") - 1);
866
+ } else {
867
+ result.append("Connection: ", sizeof("Connection: ") - 1);
868
+ result.append(connectionHeader->val);
869
+ result.append("\r\n", 2);
870
+ }
977
871
 
978
- size_t keylen = strlen(hdrs[i].key);
979
- // We only pass the Transfer-Encoding header if PassengerBufferUpload is disabled,
980
- // so that the HelperAgent and the app knows that there is a request body despite
981
- // there not being a Content-Length header.
982
- if (!headerIsTransferEncoding(hdrs[i].key, keylen) || config->bufferUpload == DirConfig::DISABLED) {
983
- // httpToEnv can never return NULL here because of the
984
- // earlier contains_non_alphanumdash() check.
985
- addHeader(output, httpToEnv(r->pool, hdrs[i].key, keylen), hdrs[i].val);
986
- }
872
+ if (transferEncodingHeader != NULL) {
873
+ result.append("Transfer-Encoding: ", sizeof("Transfer-Encoding: ") - 1);
874
+ result.append(transferEncodingHeader->val);
875
+ result.append("\r\n", 2);
876
+ bodyIsChunked = strcasecmp(transferEncodingHeader->val, "chunked") == 0;
987
877
  }
988
878
 
989
- // Add other environment variables.
990
- const apr_array_header_t *env_arr;
991
- apr_table_entry_t *env;
879
+ // Add secure headers.
880
+
881
+ result.append("!~: ", sizeof("!~: ") - 1);
882
+ result.append(getServerPassword().data(), getServerPassword().size());
883
+ result.append("\r\n!~DOCUMENT_ROOT: ", sizeof("\r\n!~DOCUMENT_ROOT: ") - 1);
884
+ result.append(ap_document_root(r));
885
+ result.append("\r\n", 2);
886
+
887
+ if (baseURI != NULL) {
888
+ result.append("!~SCRIPT_NAME: ", sizeof("!~SCRIPT_NAME: ") - 1);
889
+ result.append(baseURI);
890
+ result.append("\r\n", 2);
891
+ }
992
892
 
993
- env_arr = apr_table_elts(r->subprocess_env);
994
- env = (apr_table_entry_t*) env_arr->elts;
995
- for (i = 0; i < env_arr->nelts; ++i) {
996
- addHeader(output, env[i].key, env[i].val);
893
+ #if HTTP_VERSION(AP_SERVER_MAJORVERSION_NUMBER, AP_SERVER_MINORVERSION_NUMBER) >= 2004
894
+ addHeader(result, P_STATIC_STRING("!~REMOTE_ADDR"),
895
+ r->connection->client_ip);
896
+ addHeader(r, result, P_STATIC_STRING("!~REMOTE_PORT"),
897
+ r->connection->client_addr->port);
898
+ #else
899
+ addHeader(result, P_STATIC_STRING("!~REMOTE_ADDR"),
900
+ r->connection->remote_ip);
901
+ addHeader(r, result, P_STATIC_STRING("!~REMOTE_PORT"),
902
+ r->connection->remote_addr->port);
903
+ #endif
904
+ addHeader(result, P_STATIC_STRING("!~REMOTE_USER"), r->user);
905
+
906
+ // App group name.
907
+ if (config->appGroupName == NULL) {
908
+ result.append("!~PASSENGER_APP_GROUP_NAME: ",
909
+ sizeof("!~PASSENGER_APP_GROUP_NAME: ") - 1);
910
+ result.append(mapper.getAppRoot());
911
+ if (config->appEnv != NULL) {
912
+ result.append(" (", 2);
913
+ result.append(config->appEnv);
914
+ result.append(")", 1);
915
+ }
916
+ result.append("\r\n", 2);
997
917
  }
998
918
 
999
919
  // Phusion Passenger options.
1000
- addHeader(output, "PASSENGER_STATUS_LINE", "false");
1001
- addHeader(output, "PASSENGER_APP_ROOT", mapper.getAppRoot());
1002
- addHeader(output, "PASSENGER_APP_GROUP_NAME", config->getAppGroupName(mapper.getAppRoot()));
1003
- #include "SetHeaders.cpp"
1004
- addHeader(output, "PASSENGER_SPAWN_METHOD", config->getSpawnMethodString());
1005
- addHeader(r, output, "PASSENGER_MAX_REQUEST_QUEUE_SIZE", config->maxRequestQueueSize);
1006
- addHeader(output, "PASSENGER_APP_TYPE", mapper.getApplicationTypeName());
1007
- addHeader(output, "PASSENGER_MAX_PRELOADER_IDLE_TIME",
1008
- apr_psprintf(r->pool, "%ld", config->maxPreloaderIdleTime));
1009
- addHeader(output, "PASSENGER_DEBUGGER", "false");
1010
- addHeader(output, "PASSENGER_SHOW_VERSION_IN_HEADER", "true");
1011
- addHeader(output, "PASSENGER_STAT_THROTTLE_RATE",
1012
- apr_psprintf(r->pool, "%ld", config->getStatThrottleRate()));
1013
- addHeader(output, "PASSENGER_RESTART_DIR", config->getRestartDir());
1014
- addHeader(output, "PASSENGER_FRIENDLY_ERROR_PAGES",
1015
- config->showFriendlyErrorPages() ? "true" : "false");
920
+ addHeader(result, P_STATIC_STRING("!~PASSENGER_APP_ROOT"), mapper.getAppRoot());
921
+ addHeader(result, P_STATIC_STRING("!~PASSENGER_APP_TYPE"), mapper.getApplicationTypeName());
1016
922
  if (config->useUnionStation() && !config->unionStationKey.empty()) {
1017
- addHeader(output, "UNION_STATION_SUPPORT", "true");
1018
- addHeader(output, "UNION_STATION_KEY", config->unionStationKey);
923
+ addHeader(result, P_STATIC_STRING("!~UNION_STATION_SUPPORT"), P_STATIC_STRING("t"));
924
+ addHeader(result, P_STATIC_STRING("!~UNION_STATION_KEY"), config->unionStationKey);
1019
925
  if (!config->unionStationFilters.empty()) {
1020
- addHeader(output, "UNION_STATION_FILTERS",
926
+ addHeader(result, P_STATIC_STRING("!~UNION_STATION_FILTERS"),
1021
927
  config->getUnionStationFilterString());
1022
928
  }
1023
929
  }
930
+ #include "SetHeaders.cpp"
1024
931
 
1025
932
  /*********************/
1026
933
  /*********************/
1027
934
 
1028
- requestData.push_back(output);
1029
- return output.size();
935
+ // Add environment variables.
936
+
937
+ if (config->envvarsCache == NULL) {
938
+ const apr_array_header_t *env_arr;
939
+ env_arr = apr_table_elts(r->subprocess_env);
940
+
941
+ if (env_arr->nelts > 0) {
942
+ apr_table_entry_t *env;
943
+ string envvarsData;
944
+ size_t len;
945
+
946
+ env = (apr_table_entry_t*) env_arr->elts;
947
+
948
+ for (i = 0; i < env_arr->nelts; ++i) {
949
+ envvarsData.append(env[i].key);
950
+ envvarsData.append("\0", 1);
951
+ if (env[i].val != NULL) {
952
+ envvarsData.append(env[i].val);
953
+ }
954
+ envvarsData.append("\0", 1);
955
+ }
956
+
957
+ config->envvarsCache = (char *) malloc(modp_b64_encode_len(
958
+ envvarsData.size()));
959
+ if (config->envvarsCache == NULL) {
960
+ throw RuntimeException("Unable to allocate memory for base64 "
961
+ "encoding of environment variables");
962
+ }
963
+ len = modp_b64_encode(config->envvarsCache,
964
+ envvarsData.data(), envvarsData.size());
965
+ if (len == (size_t) -1) {
966
+ free(config->envvarsCache);
967
+ config->envvarsCache = NULL;
968
+ throw RuntimeException("Unable to base64 encode environment variables");
969
+ }
970
+ config->envvarsCacheSize = len;
971
+ }
972
+ }
973
+
974
+ if (config->envvarsCache != NULL) {
975
+ result.append("!~PASSENGER_ENV_VARS: ", sizeof("!~PASSENGER_ENV_VARS: ") - 1);
976
+ result.append(config->envvarsCache, config->envvarsCacheSize);
977
+ result.append("\r\n", 2);
978
+ }
979
+
980
+ // Add flags.
981
+ // C = Strip 100 Continue header
982
+ // B = Buffer request body
983
+ // S = SSL
984
+
985
+ result.append("!~FLAGS: C", sizeof("!~FLAGS: C") - 1);
986
+ if (config->bufferUpload != DirConfig::DISABLED) {
987
+ result.append("B", 1);
988
+ }
989
+ if (lookupEnv(r, "HTTPS") != NULL) {
990
+ result.append("S", 1);
991
+ }
992
+ result.append("\r\n\r\n", 4);
993
+
994
+ return result;
1030
995
  }
1031
996
 
1032
- void throwUploadBufferingException(request_rec *r, int code) {
1033
- DirConfig *config = getDirConfig(r);
1034
- string message("An error occured while "
1035
- "buffering HTTP upload data to "
1036
- "a temporary file in ");
1037
- message.append(getUploadBufferDir(config));
1038
-
1039
- switch (code) {
1040
- case ENOSPC:
1041
- message.append(". Disk directory doesn't have enough disk space, "
1042
- "so please make sure that it has "
1043
- "enough disk space for buffering file uploads, "
1044
- "or set the 'PassengerUploadBufferDir' directive "
1045
- "to a directory that has enough disk space.");
1046
- throw RuntimeException(message);
1047
- break;
1048
- case EDQUOT:
1049
- message.append(". The current Apache worker process (which is "
1050
- "running as ");
1051
- message.append(getProcessUsername());
1052
- message.append(") cannot write to this directory because of "
1053
- "disk quota limits. Please make sure that the volume "
1054
- "that this directory resides on has enough disk space "
1055
- "quota for the Apache worker process, or set the "
1056
- "'PassengerUploadBufferDir' directive to a different "
1057
- "directory that has enough disk space quota.");
1058
- throw RuntimeException(message);
1059
- break;
1060
- case ENOENT:
1061
- message.append(". This directory doesn't exist, so please make "
1062
- "sure that this directory exists, or set the "
1063
- "'PassengerUploadBufferDir' directive to a "
1064
- "directory that exists and can be written to.");
1065
- throw RuntimeException(message);
1066
- break;
1067
- case EACCES:
1068
- message.append(". The current Apache worker process (which is "
1069
- "running as ");
1070
- message.append(getProcessUsername());
1071
- message.append(") doesn't have permissions to write to this "
1072
- "directory. Please change the permissions for this "
1073
- "directory (as well as all parent directories) so that "
1074
- "it is writable by the Apache worker process, or set "
1075
- "the 'PassengerUploadBufferDir' directive to a directory "
1076
- "that Apache can write to.");
1077
- throw RuntimeException(message);
1078
- break;
1079
- default:
1080
- throw SystemException(message, code);
1081
- break;
997
+ static int getsfunc_BRIGADE(char *buf, int len, void *arg) {
998
+ apr_bucket_brigade *bb = (apr_bucket_brigade *)arg;
999
+ const char *dst_end = buf + len - 1; /* leave room for terminating null */
1000
+ char *dst = buf;
1001
+ apr_bucket *e = APR_BRIGADE_FIRST(bb);
1002
+ apr_status_t rv;
1003
+ int done = 0;
1004
+
1005
+ while ((dst < dst_end) && !done && e != APR_BRIGADE_SENTINEL(bb)
1006
+ && !APR_BUCKET_IS_EOS(e))
1007
+ {
1008
+ const char *bucket_data;
1009
+ apr_size_t bucket_data_len;
1010
+ const char *src;
1011
+ const char *src_end;
1012
+ apr_bucket * next;
1013
+
1014
+ rv = apr_bucket_read(e, &bucket_data, &bucket_data_len,
1015
+ APR_BLOCK_READ);
1016
+ if (rv != APR_SUCCESS || (bucket_data_len == 0)) {
1017
+ *dst = '\0';
1018
+ return APR_STATUS_IS_TIMEUP(rv) ? -1 : 0;
1019
+ }
1020
+ src = bucket_data;
1021
+ src_end = bucket_data + bucket_data_len;
1022
+ while ((src < src_end) && (dst < dst_end) && !done) {
1023
+ if (*src == '\n') {
1024
+ done = 1;
1025
+ }
1026
+ else if (*src != '\r') {
1027
+ *dst++ = *src;
1028
+ }
1029
+ src++;
1030
+ }
1031
+
1032
+ if (src < src_end) {
1033
+ apr_bucket_split(e, src - bucket_data);
1034
+ }
1035
+ next = APR_BUCKET_NEXT(e);
1036
+ APR_BUCKET_REMOVE(e);
1037
+ apr_bucket_destroy(e);
1038
+ e = next;
1082
1039
  }
1040
+ *dst = 0;
1041
+ return done;
1083
1042
  }
1084
1043
 
1085
1044
  /**
@@ -1192,106 +1151,30 @@ private:
1192
1151
  return bufsiz;
1193
1152
  }
1194
1153
 
1195
- string getUploadBufferDir(DirConfig *config) {
1196
- ServerInstanceDir::GenerationPtr generation = agentsStarter.getGeneration();
1197
- return config->getUploadBufferDir(generation.get());
1198
- }
1199
-
1200
- /**
1201
- * Receive the HTTP upload data and buffer it into a BufferedUpload temp file.
1202
- *
1203
- * @param r The request.
1204
- * @throws RuntimeException
1205
- * @throws SystemException
1206
- * @throws IOException
1207
- */
1208
- boost::shared_ptr<BufferedUpload> receiveRequestBody(request_rec *r) {
1209
- TRACE_POINT();
1210
- DirConfig *config = getDirConfig(r);
1211
- boost::shared_ptr<BufferedUpload> tempFile;
1212
- try {
1213
- tempFile.reset(new BufferedUpload(getUploadBufferDir(config)));
1214
- } catch (const SystemException &e) {
1215
- throwUploadBufferingException(r, e.code());
1216
- }
1217
-
1218
- char buf[1024 * 32];
1219
- apr_off_t len;
1220
- size_t total_written = 0;
1221
-
1222
- while ((len = readRequestBodyFromApache(r, buf, sizeof(buf))) > 0) {
1223
- size_t written = 0;
1224
- do {
1225
- size_t ret = fwrite(buf, 1, len - written, tempFile->handle);
1226
- if (ret <= 0 || fflush(tempFile->handle) == EOF) {
1227
- throwUploadBufferingException(r, errno);
1228
- }
1229
- written += ret;
1230
- } while (written < (size_t) len);
1231
- total_written += written;
1232
- }
1233
- return tempFile;
1234
- }
1235
-
1236
- /**
1237
- * Receive the HTTP upload data and buffer it into a string.
1238
- *
1239
- * @param r The request.
1240
- * @param contentLength The value of the HTTP Content-Length header. This is used
1241
- * to check whether the HTTP client has sent complete upload
1242
- * data. NULL indicates that there is no Content-Length header,
1243
- * i.e. that the HTTP client used chunked transfer encoding.
1244
- * @param string The string to buffer into.
1245
- * @throws RuntimeException
1246
- * @throws IOException
1247
- */
1248
- void receiveRequestBody(request_rec *r, const char *contentLength, string &buffer) {
1249
- TRACE_POINT();
1250
- unsigned long l_contentLength = 0;
1251
- char buf[1024 * 32];
1252
- apr_off_t len;
1253
-
1254
- buffer.clear();
1255
- if (contentLength != NULL) {
1256
- l_contentLength = atol(contentLength);
1257
- buffer.reserve(l_contentLength);
1258
- }
1259
-
1260
- while ((len = readRequestBodyFromApache(r, buf, sizeof(buf))) > 0) {
1261
- buffer.append(buf, len);
1262
- }
1263
- }
1264
-
1265
- void sendRequestBody(const FileDescriptor &fd, boost::shared_ptr<BufferedUpload> &uploadData) {
1266
- TRACE_POINT();
1267
- rewind(uploadData->handle);
1268
- while (!feof(uploadData->handle)) {
1269
- char buf[1024 * 32];
1270
- size_t size;
1271
-
1272
- size = fread(buf, 1, sizeof(buf), uploadData->handle);
1273
- try {
1274
- writeExact(fd, buf, size);
1275
- } catch (const SystemException &e) {
1276
- if (e.code() == EPIPE || e.code() == ECONNRESET) {
1277
- // The HelperAgent stopped reading the body, probably
1278
- // because the application already sent EOF.
1279
- return;
1280
- } else {
1281
- throw e;
1282
- }
1283
- }
1284
- }
1285
- }
1286
-
1287
- void sendRequestBody(const FileDescriptor &fd, request_rec *r) {
1154
+ void sendRequestBody(const FileDescriptor &fd, request_rec *r, bool chunk) {
1288
1155
  TRACE_POINT();
1289
1156
  char buf[1024 * 32];
1290
1157
  apr_off_t len;
1291
1158
 
1292
1159
  try {
1293
1160
  while ((len = readRequestBodyFromApache(r, buf, sizeof(buf))) > 0) {
1161
+ if (chunk) {
1162
+ const apr_off_t BUFSIZE = 2 * sizeof(apr_off_t) + 3;
1163
+ char buf[BUFSIZE];
1164
+ char *pos;
1165
+ const char *end = buf + BUFSIZE;
1166
+
1167
+ pos = buf + integerToHex<apr_off_t>(len, buf);
1168
+ pos = appendData(pos, end, P_STATIC_STRING("\r\n"));
1169
+ writeExact(fd, buf, pos - buf);
1170
+ }
1294
1171
  writeExact(fd, buf, len);
1172
+ if (chunk) {
1173
+ writeExact(fd, "\r\n");
1174
+ }
1175
+ }
1176
+ if (chunk) {
1177
+ writeExact(fd, "0\r\n\r\n");
1295
1178
  }
1296
1179
  } catch (const SystemException &e) {
1297
1180
  if (e.code() == EPIPE || e.code() == ECONNRESET) {
@@ -1312,7 +1195,7 @@ public:
1312
1195
  serverConfig.finalize();
1313
1196
  Passenger::setLogLevel(serverConfig.logLevel);
1314
1197
  if (serverConfig.debugLogFile != NULL) {
1315
- Passenger::setDebugFile(serverConfig.debugLogFile);
1198
+ Passenger::setLogFile(serverConfig.debugLogFile);
1316
1199
  }
1317
1200
  m_hasModRewrite = UNKNOWN;
1318
1201
  m_hasModDir = UNKNOWN;
@@ -1320,7 +1203,7 @@ public:
1320
1203
  m_hasModXsendfile = UNKNOWN;
1321
1204
 
1322
1205
  P_DEBUG("Initializing Phusion Passenger...");
1323
- ap_add_version_component(pconf, "Phusion_Passenger/" PASSENGER_VERSION);
1206
+ ap_add_version_component(pconf, SERVER_TOKEN_NAME "/" PASSENGER_VERSION);
1324
1207
 
1325
1208
  if (serverConfig.root == NULL) {
1326
1209
  throw ConfigurationException("The 'PassengerRoot' configuration option "
@@ -1329,52 +1212,52 @@ public:
1329
1212
  "'passenger-install-apache2-module'.");
1330
1213
  }
1331
1214
 
1215
+ #ifdef AP_GET_SERVER_VERSION_DEPRECATED
1216
+ const char *webServerDesc = ap_get_server_description();
1217
+ #else
1218
+ const char *webServerDesc = ap_get_server_version();
1219
+ #endif
1220
+
1332
1221
  VariantMap params;
1333
1222
  params
1334
1223
  .setPid ("web_server_pid", getpid())
1335
- .setUid ("web_server_worker_uid", unixd_config.user_id)
1336
- .setGid ("web_server_worker_gid", unixd_config.group_id)
1337
- .setInt ("log_level", serverConfig.logLevel)
1224
+ .set ("server_software", webServerDesc)
1225
+ .setBool("multi_app", true)
1226
+ .setBool("load_shell_envvars", true)
1338
1227
  .set ("debug_log_file", (serverConfig.debugLogFile == NULL) ? "" : serverConfig.debugLogFile)
1339
- .set ("temp_dir", serverConfig.tempDir)
1228
+ .set ("data_buffer_dir", serverConfig.dataBufferDir)
1229
+ .set ("instance_registry_dir", serverConfig.instanceRegistryDir)
1340
1230
  .setBool("user_switching", serverConfig.userSwitching)
1341
1231
  .set ("default_user", serverConfig.defaultUser)
1342
1232
  .set ("default_group", serverConfig.defaultGroup)
1343
1233
  .set ("default_ruby", serverConfig.defaultRuby)
1344
1234
  .setInt ("max_pool_size", serverConfig.maxPoolSize)
1345
1235
  .setInt ("pool_idle_time", serverConfig.poolIdleTime)
1236
+ .setInt ("stat_throttle_rate", serverConfig.statThrottleRate)
1346
1237
  .set ("analytics_log_user", serverConfig.analyticsLogUser)
1347
1238
  .set ("analytics_log_group", serverConfig.analyticsLogGroup)
1348
1239
  .set ("union_station_gateway_address", serverConfig.unionStationGatewayAddress)
1349
1240
  .setInt ("union_station_gateway_port", serverConfig.unionStationGatewayPort)
1350
1241
  .set ("union_station_gateway_cert", serverConfig.unionStationGatewayCert)
1351
1242
  .set ("union_station_proxy_address", serverConfig.unionStationProxyAddress)
1243
+ .setBool("turbocaching", serverConfig.turbocaching)
1352
1244
  .setStrSet("prestart_urls", serverConfig.prestartURLs);
1353
-
1354
1245
  serverConfig.ctl.addTo(params);
1355
1246
 
1356
1247
  agentsStarter.start(serverConfig.root, params);
1357
1248
 
1358
1249
  // Store some relevant information in the generation directory.
1359
- string generationPath = agentsStarter.getGeneration()->getPath();
1250
+ string instanceDir = agentsStarter.getInstanceDir();
1360
1251
  server_rec *server;
1361
1252
  string configFiles;
1362
1253
 
1363
- #ifdef AP_GET_SERVER_VERSION_DEPRECATED
1364
- createFile(generationPath + "/web_server.txt",
1365
- ap_get_server_description());
1366
- #else
1367
- createFile(generationPath + "/web_server.txt",
1368
- ap_get_server_version());
1369
- #endif
1370
-
1371
1254
  for (server = s; server != NULL; server = server->next) {
1372
1255
  if (server->defn_name != NULL) {
1373
1256
  configFiles.append(server->defn_name);
1374
1257
  configFiles.append(1, '\n');
1375
1258
  }
1376
1259
  }
1377
- createFile(generationPath + "/config_files.txt", configFiles);
1260
+ createFile(instanceDir + "/config_files.txt", configFiles);
1378
1261
  }
1379
1262
 
1380
1263
  void childInit(apr_pool_t *pchild, server_rec *s) {