passenger 6.0.1 → 6.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +145 -18
  3. data/CONTRIBUTORS +6 -0
  4. data/bin/passenger-install-nginx-module +1 -1
  5. data/bin/passenger-status +15 -0
  6. data/build/misc.rb +3 -1
  7. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +56 -3
  8. data/dev/copy_boost_headers +1 -0
  9. data/package.json +1 -1
  10. data/passenger.gemspec +9 -1
  11. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +0 -0
  12. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +0 -0
  13. data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +0 -0
  14. data/resources/templates/standalone/http.erb +2 -0
  15. data/resources/templates/standalone/server.erb +1 -0
  16. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
  17. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +1 -0
  18. data/src/agent/Core/ApplicationPool/Options.h +10 -0
  19. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +1 -1
  20. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
  21. data/src/agent/Core/Config.h +14 -1
  22. data/src/agent/Core/Controller.h +1 -0
  23. data/src/agent/Core/Controller/Config.h +5 -1
  24. data/src/agent/Core/Controller/ForwardResponse.cpp +13 -0
  25. data/src/agent/Core/Controller/InitRequest.cpp +3 -0
  26. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
  27. data/src/agent/Core/CoreMain.cpp +2 -1
  28. data/src/agent/Core/OptionParser.h +3 -0
  29. data/src/agent/Core/SpawningKit/Context.h +1 -0
  30. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -1
  31. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  32. data/src/agent/TempDirToucher/TempDirToucherMain.cpp +2 -0
  33. data/src/agent/Watchdog/Config.h +15 -1
  34. data/src/agent/Watchdog/WatchdogMain.cpp +7 -0
  35. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +10 -0
  36. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +10 -0
  37. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +30 -0
  38. data/src/apache2_module/Hooks.cpp +6 -0
  39. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +20 -0
  40. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +24 -0
  41. data/src/cxx_supportlib/Constants.h +2 -1
  42. data/src/cxx_supportlib/LoggingKit/Config.h +2 -0
  43. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +15 -9
  44. data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +1 -1
  45. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +20 -19
  46. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +11 -7
  47. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -10
  48. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +0 -4
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +46 -37
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +16 -15
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +45 -26
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +33 -0
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +1 -1
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +38 -14
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +2 -0
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +1 -1
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +3 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +0 -1
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +6 -1
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -4
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +4 -4
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +3 -3
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +4 -4
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +4 -4
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +8 -6
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +17 -0
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +50 -5
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +2 -1
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +1 -1
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +3 -2
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +4 -3
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +5 -3
  74. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +13 -12
  75. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +10 -10
  76. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +34 -34
  77. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +4 -4
  78. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +8 -8
  79. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +27 -27
  80. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +4 -4
  81. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +5 -4
  82. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1 -1
  83. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +3 -3
  84. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/allocators.hpp +89 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +83 -74
  86. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +21 -33
  87. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +5 -5
  88. data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +1 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +3 -3
  90. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/has_constraints.hpp +3 -3
  91. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +19 -19
  93. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +5 -2
  95. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +5 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +6 -2
  97. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
  98. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +368 -52
  100. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -1
  101. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +6 -3
  102. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +6 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
  107. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -1
  108. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -3
  110. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +3 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +3 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +9 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  115. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +1 -0
  116. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -2
  117. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +13 -0
  118. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +2 -2
  119. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +14 -4
  120. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +262 -2
  122. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +4 -3
  123. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +7 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +22 -19
  126. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +833 -459
  127. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +24 -6
  128. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +2 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +61 -5
  130. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +33 -8
  131. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +132 -41
  132. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +16 -0
  133. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +54 -0
  134. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +58 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +28 -23
  136. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +167 -115
  137. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +55 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +181 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +167 -29
  141. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -0
  142. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +1 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +18 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +389 -3
  145. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +262 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +52 -8
  147. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +364 -0
  148. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +4 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  150. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -2
  151. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +286 -6
  152. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +56 -8
  153. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +43 -6
  154. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +100 -31
  155. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +2 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +126 -69
  157. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +75 -51
  158. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +136 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/core/exchange.hpp +49 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +9 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +101 -130
  162. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +2 -2
  163. data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +16 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +59 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -1
  166. data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +9 -2
  167. data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +26 -10
  168. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +5 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +3 -3
  170. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +1 -1
  171. data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +1 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +38 -47
  173. data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +5 -5
  174. data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +7 -7
  175. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +62 -58
  176. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +1 -1
  177. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +29 -29
  178. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +38 -40
  179. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +4 -4
  180. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +44 -44
  181. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +39 -39
  182. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +15 -15
  183. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +7 -7
  184. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +14 -14
  186. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +9 -9
  187. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
  188. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +2 -2
  190. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +2 -2
  191. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +6 -6
  192. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +3 -3
  197. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +33 -14
  198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +12 -12
  199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +4 -4
  200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +3 -0
  201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +39 -39
  202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +61 -61
  203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +4 -4
  204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +66 -66
  205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +54 -54
  206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +6 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +3 -3
  208. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +65 -0
  210. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
  212. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +23 -23
  213. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +4 -4
  214. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +13 -13
  215. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
  216. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +5 -4
  217. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +5 -5
  219. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +5 -2
  220. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +18 -13
  221. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +4 -4
  222. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +16 -5
  223. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +14 -8
  225. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/tss_null.cpp +2 -2
  226. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +13 -13
  227. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +27 -0
  228. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +29 -6
  230. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +12 -3
  231. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +1 -1
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +1 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +8 -8
  235. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -0
  236. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +3 -3
  237. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +23 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +9 -3
  239. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -11
  240. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +20 -1
  241. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
  242. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +211 -101
  243. data/src/cxx_supportlib/vendor-modified/boost/parameter/python.hpp +5 -6
  244. data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +119 -25
  245. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +5 -0
  247. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +44 -0
  248. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +1 -0
  249. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +1 -1
  250. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +73 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +3 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +1 -0
  253. data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +52 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +6 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +17 -8
  259. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +4 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +4 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +166 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +513 -0
  263. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +291 -0
  264. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +4106 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/random/faure.hpp +367 -0
  266. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +360 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +237 -0
  268. data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +43 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +13 -5
  270. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +1 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +1 -3
  272. data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +2 -2
  273. data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +11 -5
  274. data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +14 -6
  275. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +3 -3
  276. data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +6 -2
  277. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +55 -37
  278. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +3 -2
  279. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +11 -1
  280. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +7 -1
  281. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +3 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +5 -2
  283. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -3
  284. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +15 -4
  285. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +1 -2
  286. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +12 -3
  287. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +7 -3
  289. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +6 -2
  290. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -5
  291. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -8
  292. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +3 -3
  293. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +3 -1
  294. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -8
  295. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +12 -11
  296. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -4
  297. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +1 -9
  298. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +2 -10
  299. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +60 -115
  301. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +3 -3
  302. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +2 -1
  303. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +2 -1
  304. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +2 -1
  305. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +2 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +2 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +2 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +2 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +2 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +2 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +2 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +2 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +2 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +2 -1
  315. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +2 -1
  316. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +2 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +2 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +2 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +2 -1
  320. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +3 -3
  321. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +14 -8
  322. data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +4 -24
  323. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +57 -0
  324. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +101 -0
  325. data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_interoperability.hpp +141 -0
  326. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_posix.hpp +132 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +775 -588
  328. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
  329. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +6 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +13 -6
  331. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +8 -3
  332. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +3 -1
  333. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_safety.hpp +160 -0
  334. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/tss_hooks.hpp +2 -2
  335. data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +3 -3
  336. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +24 -1
  337. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +10 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/thread/lock_guard.hpp +4 -4
  339. data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_traits.hpp +31 -0
  340. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +2 -2
  341. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +2 -2
  342. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +8 -53
  343. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +73 -4
  344. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +6 -6
  345. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +14 -9
  346. data/src/cxx_supportlib/vendor-modified/boost/thread/xtime.hpp +6 -6
  347. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +9 -8
  348. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +1 -0
  349. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +21 -19
  350. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +3 -1
  351. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +9 -0
  352. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +1 -1
  353. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +55 -0
  354. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +72 -0
  355. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +108 -0
  356. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +501 -0
  357. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_msvc10_fix.hpp +30 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +2 -2
  359. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +117 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +557 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_rvalue_reference_msvc10_fix.hpp +43 -0
  362. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +1 -1
  363. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +1 -1
  364. data/src/cxx_supportlib/vendor-modified/boost/type_traits/enable_if.hpp +37 -0
  365. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +344 -0
  366. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +5 -0
  367. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +5 -0
  368. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +5 -0
  369. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +21 -0
  370. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +21 -0
  371. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +21 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +22 -0
  373. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -1
  374. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +2 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +5 -15
  376. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +16 -6
  377. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +3 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +3 -4
  379. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +4 -6
  380. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +1 -1
  381. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +1 -1
  382. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +1 -1
  383. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +1 -1
  384. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +4 -79
  385. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +3 -97
  386. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_noncopyable.hpp +39 -0
  387. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +2 -2
  388. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -2
  389. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -0
  390. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +104 -63
  391. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +1 -1
  393. data/src/cxx_supportlib/vendor-modified/boost/typeof/constant.hpp +26 -0
  394. data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +4 -4
  395. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -3
  396. data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +1 -1
  397. data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +4 -5
  398. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +5 -5
  399. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +9 -9
  400. data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +3 -3
  401. data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +2 -2
  402. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +6 -6
  403. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +1 -1
  404. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +4 -4
  405. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +2 -2
  406. data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +2 -2
  407. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +16 -16
  408. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +5 -5
  409. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +201 -201
  410. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +301 -301
  411. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +401 -401
  412. data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +101 -101
  413. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +3 -0
  414. data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +2 -0
  415. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +26 -6
  416. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  417. data/src/helper-scripts/prespawn +1 -0
  418. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +40 -0
  419. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +26 -0
  420. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +48 -0
  421. data/src/nginx_module/Configuration.c +6 -2
  422. data/src/nginx_module/ContentHandler.c +5 -1
  423. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +15 -0
  424. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
  425. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +28 -0
  426. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +6 -0
  427. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +11 -0
  428. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +11 -0
  429. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +23 -0
  430. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +8 -0
  431. data/src/nginx_module/ngx_http_passenger_module.c +2 -0
  432. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +0 -0
  433. data/src/ruby_native_extension/extconf.rb +7 -0
  434. data/src/ruby_supportlib/phusion_passenger.rb +7 -7
  435. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +8 -0
  436. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +23 -0
  437. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -0
  438. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +1 -3
  439. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +37 -0
  440. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +1 -1
  441. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +10 -0
  442. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +2 -2
  443. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +5 -0
  444. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +11 -0
  445. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +3 -0
  446. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +1 -1
  447. data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +6 -0
  448. data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +15 -11
  449. metadata +42 -8
  450. data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +0 -20
  451. data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +0 -172
  452. data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +0 -17
  453. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +0 -496
@@ -71,6 +71,7 @@ ESSENTIALS = [
71
71
  "boost/foreach.hpp",
72
72
  "boost/none*",
73
73
  "boost/system/detail/error_code.ipp",
74
+ "boost/system/config.hpp",
74
75
  "boost/detail/reference_content.hpp",
75
76
  "boost/algorithm/string"
76
77
  ]
@@ -13,7 +13,7 @@
13
13
  "express": "^4.16.3",
14
14
  "extract-text-webpack-plugin": "^2.1.2",
15
15
  "jquery": "^3.2.1",
16
- "mocha": "^1.15.1",
16
+ "mocha": "^6.0.2",
17
17
  "multer": "^1.3.0",
18
18
  "preact": "^8.1.0",
19
19
  "should": "^2.0.1",
@@ -10,10 +10,18 @@ Gem::Specification.new do |s|
10
10
  s.summary = "A fast and robust web server and application server for Ruby, Python and Node.js"
11
11
  s.name = PhusionPassenger::PACKAGE_NAME
12
12
  s.version = PhusionPassenger::VERSION_STRING
13
- s.rubyforge_project = "passenger"
14
13
  s.author = "Phusion - http://www.phusion.nl/"
15
14
  s.email = "software-signing@phusion.nl"
16
15
  s.require_paths = ["src/ruby_supportlib"]
16
+ s.metadata = {
17
+ "bug_tracker_uri" => "https://github.com/phusion/passenger/issues",
18
+ "changelog_uri" => "https://github.com/phusion/passenger/blob/stable-#{PhusionPassenger::VERSION_STRING}/CHANGELOG",
19
+ "documentation_uri" => "https://www.phusionpassenger.com/docs/",
20
+ "homepage_uri" => "https://www.phusionpassenger.com/",
21
+ "source_code_uri" => "https://github.com/phusion/passenger",
22
+ "mailing_list_uri" => "https://www.phusionpassenger.com/contact",
23
+ "wiki_uri" => "https://github.com/phusion/passenger/wiki"
24
+ }
17
25
  s.add_dependency 'rake', '>= 0.8.1'
18
26
  s.add_dependency 'rack'
19
27
  s.files = Dir[*PhusionPassenger::Packaging::GLOB] -
@@ -27,11 +27,13 @@ passenger_user_switching off;
27
27
  <%= nginx_http_option(:python) %>
28
28
  <%= nginx_http_option(:nodejs) %>
29
29
  <%= nginx_http_option(:log_level) %>
30
+ <%= nginx_http_option(:disable_log_prefix) %>
30
31
  <%= nginx_http_option(:max_pool_size) %>
31
32
  <%= nginx_http_option(:pool_idle_time) %>
32
33
  <%= nginx_http_option(:max_preloader_idle_time) %>
33
34
  <%= nginx_http_option(:turbocaching) %>
34
35
  <%= nginx_http_option(:instance_registry_dir) %>
36
+ <%= nginx_http_option(:spawn_dir) %>
35
37
  <%= nginx_http_option(:disable_security_update_check) %>
36
38
  <%= nginx_http_option(:security_update_check_proxy) %>
37
39
  <%= nginx_http_option(:disable_anonymous_telemetry) %>
@@ -48,6 +48,7 @@ passenger_enabled on;
48
48
  <%= nginx_option(app, :restart_dir) %>
49
49
  <%= nginx_option(app, :sticky_sessions) %>
50
50
  <%= nginx_option(app, :sticky_sessions_cookie_name) %>
51
+ <%= nginx_option(app, :sticky_sessions_cookie_attributes) %>
51
52
  <%= nginx_option(app, :vary_turbocache_by_cookie) %>
52
53
  <%= nginx_option(app, :meteor_app_settings) %>
53
54
  <%= nginx_option(app, :load_shell_envvars) %>
@@ -305,7 +305,7 @@ Group::detachedProcessesCheckerMain(GroupPtr self) {
305
305
  while (true) {
306
306
  assert(detachedProcessesCheckerActive);
307
307
 
308
- if (getLifeStatus() == SHUT_DOWN || this_thread::interruption_requested()) {
308
+ if (getLifeStatus() == SHUT_DOWN || boost::this_thread::interruption_requested()) {
309
309
  UPDATE_TRACE_POINT();
310
310
  P_DEBUG("Stopping detached processes checker");
311
311
  detachedProcessesCheckerActive = false;
@@ -260,6 +260,7 @@ Group::inspectConfigInAdminPanelFormat(Json::Value &result) const {
260
260
  result["abort_websockets_on_process_shutdown"] = VAL(options.abortWebsocketsOnProcessShutdown);
261
261
  result["force_max_concurrent_requests_per_process"] = VAL(options.forceMaxConcurrentRequestsPerProcess, -1);
262
262
  result["restart_dir"] = NON_EMPTY_SVAL(options.restartDir);
263
+ result["sticky_sessions_cookie_attributes"] = SVAL(options.stickySessionsCookieAttributes, DEFAULT_STICKY_SESSIONS_COOKIE_ATTRIBUTES);
263
264
 
264
265
  if (!options.environmentVariables.empty()) {
265
266
  DynamicBuffer envvarsData(options.environmentVariables.size() * 3 / 4);
@@ -115,6 +115,8 @@ private:
115
115
  result.push_back(&options.hostName);
116
116
  result.push_back(&options.uri);
117
117
 
118
+ result.push_back(&options.stickySessionsCookieAttributes);
119
+
118
120
  return result;
119
121
  }
120
122
 
@@ -353,6 +355,12 @@ public:
353
355
  */
354
356
  bool abortWebsocketsOnProcessShutdown;
355
357
 
358
+ /**
359
+ * The attributes to use for the sticky session cookie.
360
+ * Values should validate against the regex: ([\w]+(=[\w]+)?; )*
361
+ */
362
+ StaticString stickySessionsCookieAttributes;
363
+
356
364
  /*-----------------*/
357
365
 
358
366
 
@@ -453,6 +461,7 @@ public:
453
461
  maxOutOfBandWorkInstances(1),
454
462
  maxRequestQueueSize(DEFAULT_MAX_REQUEST_QUEUE_SIZE),
455
463
  abortWebsocketsOnProcessShutdown(true),
464
+ stickySessionsCookieAttributes(DEFAULT_STICKY_SESSIONS_COOKIE_ATTRIBUTES, sizeof(DEFAULT_STICKY_SESSIONS_COOKIE_ATTRIBUTES) - 1),
456
465
 
457
466
  stickySessionId(0),
458
467
  statThrottleRate(DEFAULT_STAT_THROTTLE_RATE),
@@ -582,6 +591,7 @@ public:
582
591
  appendKeyValue3(vec, "max_processes", maxProcesses);
583
592
  appendKeyValue2(vec, "max_preloader_idle_time", maxPreloaderIdleTime);
584
593
  appendKeyValue3(vec, "max_out_of_band_work_instances", maxOutOfBandWorkInstances);
594
+ appendKeyValue (vec, "sticky_sessions_cookie_attributes", stickySessionsCookieAttributes);
585
595
  }
586
596
 
587
597
  /*********************************/
@@ -55,7 +55,7 @@ Pool::garbageCollect(PoolPtr self) {
55
55
  self->garbageCollectionCond.timed_wait(lock,
56
56
  posix_time::seconds(5));
57
57
  }
58
- while (!this_thread::interruption_requested()) {
58
+ while (!boost::this_thread::interruption_requested()) {
59
59
  try {
60
60
  UPDATE_TRACE_POINT();
61
61
  unsigned long long sleepTime = self->realGarbageCollect();
@@ -202,7 +202,7 @@ Pool::toXml(const ToXmlOptions &options, bool lock) const {
202
202
  throw SecurityException("Operation unauthorized");
203
203
  }
204
204
 
205
- result << "<?xml version=\"1.0\" encoding=\"iso8859-1\" ?>\n";
205
+ result << "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
206
206
  result << "<info version=\"3\">";
207
207
 
208
208
  result << "<passenger_version>" << PASSENGER_VERSION << "</passenger_version>";
@@ -133,11 +133,17 @@ using namespace std;
133
133
  * default_server_port unsigned integer - default
134
134
  * default_spawn_method string - default("smart")
135
135
  * default_sticky_sessions boolean - default(false)
136
+ * default_sticky_sessions_cookie_attributes string - default("SameSite=Lax; Secure;")
136
137
  * default_sticky_sessions_cookie_name string - default("_passenger_route")
137
138
  * default_user string - default("nobody")
139
+ * disable_log_prefix boolean - default(false)
138
140
  * file_descriptor_log_target any - -
139
141
  * file_descriptor_ulimit unsigned integer - default(0),read_only
140
142
  * graceful_exit boolean - default(true)
143
+ * hook_attached_process string - read_only
144
+ * hook_detached_process string - read_only
145
+ * hook_queue_full_error string - read_only
146
+ * hook_spawn_failed string - read_only
141
147
  * instance_dir string - read_only
142
148
  * integration_mode string - default("standalone")
143
149
  * log_level string - default("notice")
@@ -157,12 +163,13 @@ using namespace std;
157
163
  * security_update_checker_interval unsigned integer - default(86400)
158
164
  * security_update_checker_proxy_url string - -
159
165
  * security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
160
- * server_software string - default("Phusion_Passenger/6.0.1")
166
+ * server_software string - default("Phusion_Passenger/6.0.6")
161
167
  * show_version_in_header boolean - default(true)
162
168
  * single_app_mode_app_root string - default,read_only
163
169
  * single_app_mode_app_start_command string - read_only
164
170
  * single_app_mode_app_type string - read_only
165
171
  * single_app_mode_startup_file string - read_only
172
+ * spawn_dir string required read_only
166
173
  * standalone_engine string - default
167
174
  * stat_throttle_rate unsigned integer - default(10)
168
175
  * telemetry_collector_ca_certificate_path string - -
@@ -475,6 +482,7 @@ public:
475
482
  overrideWithDynamicDefault("default_server_port", UINT_TYPE, OPTIONAL, getDefaultServerPort);
476
483
 
477
484
  add("passenger_root", STRING_TYPE, REQUIRED | READ_ONLY);
485
+ add("spawn_dir", STRING_TYPE, REQUIRED | READ_ONLY);
478
486
  add("config_manifest", OBJECT_TYPE, OPTIONAL | READ_ONLY);
479
487
  add("pid_file", STRING_TYPE, OPTIONAL | READ_ONLY);
480
488
  add("web_server_version", STRING_TYPE, OPTIONAL | READ_ONLY);
@@ -491,6 +499,11 @@ public:
491
499
  add("controller_cpu_affine", BOOL_TYPE, OPTIONAL | READ_ONLY, false);
492
500
  add("file_descriptor_ulimit", UINT_TYPE, OPTIONAL | READ_ONLY, 0);
493
501
 
502
+ add("hook_attached_process", STRING_TYPE, OPTIONAL | READ_ONLY);
503
+ add("hook_detached_process", STRING_TYPE, OPTIONAL | READ_ONLY);
504
+ add("hook_spawn_failed", STRING_TYPE, OPTIONAL | READ_ONLY);
505
+ add("hook_queue_full_error", STRING_TYPE, OPTIONAL | READ_ONLY);
506
+
494
507
  addValidator(validateMultiAppMode);
495
508
  addValidator(boost::bind(validateSingleAppMode, boost::placeholders::_1,
496
509
  wrapperRegistry, boost::placeholders::_2));
@@ -123,6 +123,7 @@ private:
123
123
  HashedStaticString PASSENGER_SHOW_VERSION_IN_HEADER;
124
124
  HashedStaticString PASSENGER_STICKY_SESSIONS;
125
125
  HashedStaticString PASSENGER_STICKY_SESSIONS_COOKIE_NAME;
126
+ HashedStaticString PASSENGER_STICKY_SESSIONS_COOKIE_ATTRIBUTES;
126
127
  HashedStaticString PASSENGER_REQUEST_OOB_WORK;
127
128
  HashedStaticString REMOTE_ADDR;
128
129
  HashedStaticString REMOTE_PORT;
@@ -104,6 +104,7 @@ parseControllerBenchmarkMode(const StaticString &mode) {
104
104
  * default_server_port unsigned integer required -
105
105
  * default_spawn_method string - default("smart")
106
106
  * default_sticky_sessions boolean - default(false)
107
+ * default_sticky_sessions_cookie_attributes string - default("SameSite=Lax; Secure;")
107
108
  * default_sticky_sessions_cookie_name string - default("_passenger_route")
108
109
  * default_user string - default("nobody")
109
110
  * graceful_exit boolean - default(true)
@@ -113,7 +114,7 @@ parseControllerBenchmarkMode(const StaticString &mode) {
113
114
  * multi_app boolean - default(true),read_only
114
115
  * request_freelist_limit unsigned integer - default(1024)
115
116
  * response_buffer_high_watermark unsigned integer - default(134217728)
116
- * server_software string - default("Phusion_Passenger/6.0.1")
117
+ * server_software string - default("Phusion_Passenger/6.0.6")
117
118
  * show_version_in_header boolean - default(true)
118
119
  * start_reading_after_accept boolean - default(true)
119
120
  * stat_throttle_rate unsigned integer - default(10)
@@ -154,6 +155,7 @@ private:
154
155
  add("default_server_port", UINT_TYPE, REQUIRED);
155
156
  add("default_sticky_sessions", BOOL_TYPE, OPTIONAL, false);
156
157
  add("default_sticky_sessions_cookie_name", STRING_TYPE, OPTIONAL, DEFAULT_STICKY_SESSIONS_COOKIE_NAME);
158
+ add("default_sticky_sessions_cookie_attributes", STRING_TYPE, OPTIONAL, DEFAULT_STICKY_SESSIONS_COOKIE_ATTRIBUTES);
157
159
  add("server_software", STRING_TYPE, OPTIONAL, SERVER_TOKEN_NAME "/" PASSENGER_VERSION);
158
160
  add("vary_turbocache_by_cookie", STRING_TYPE, OPTIONAL);
159
161
 
@@ -419,6 +421,7 @@ public:
419
421
  StaticString defaultServerPort;
420
422
  StaticString serverSoftware;
421
423
  StaticString defaultStickySessionsCookieName;
424
+ StaticString defaultStickySessionsCookieAttributes;
422
425
  StaticString defaultVaryTurbocacheByCookie;
423
426
 
424
427
  StaticString defaultFriendlyErrorPages;
@@ -451,6 +454,7 @@ public:
451
454
  defaultServerPort(psg_pstrdup(pool, config["default_server_port"].asString())),
452
455
  serverSoftware(psg_pstrdup(pool, config["server_software"].asString())),
453
456
  defaultStickySessionsCookieName(psg_pstrdup(pool, config["default_sticky_sessions_cookie_name"].asString())),
457
+ defaultStickySessionsCookieAttributes(psg_pstrdup(pool, config["default_sticky_sessions_cookie_attributes"].asString())),
454
458
  defaultVaryTurbocacheByCookie(psg_pstrdup(pool, config["vary_turbocache_by_cookie"].asString())),
455
459
 
456
460
  defaultFriendlyErrorPages(psg_pstrdup(pool, config["default_friendly_error_pages"].asString())),
@@ -768,6 +768,19 @@ Controller::constructHeaderBuffersForResponse(Request *req, struct iovec *buffer
768
768
  dataSize += baseURI.size();
769
769
  INC_BUFFER_ITER(i);
770
770
 
771
+
772
+ StaticString stickyAttributes = req->options.stickySessionsCookieAttributes;
773
+ if (stickyAttributes.size() > 0) {
774
+ PUSH_STATIC_BUFFER("; ");
775
+ if (buffers != NULL) {
776
+ BEGIN_PUSH_NEXT_BUFFER();
777
+ buffers[i].iov_base = (void *) stickyAttributes.data();
778
+ buffers[i].iov_len = stickyAttributes.size();
779
+ }
780
+ dataSize += stickyAttributes.size();
781
+ INC_BUFFER_ITER(i);
782
+ }
783
+
771
784
  PUSH_STATIC_BUFFER("\r\n");
772
785
  }
773
786
 
@@ -153,6 +153,7 @@ Controller::initializePoolOptions(Client *client, Request *req, RequestAnalysis
153
153
 
154
154
  if (options != NULL) {
155
155
  req->options = **options;
156
+ fillPoolOption(req, req->options.baseURI, "!~SCRIPT_NAME");
156
157
  } else {
157
158
  createNewPoolOptions(client, req, hAppGroupName);
158
159
  }
@@ -202,6 +203,7 @@ Controller::fillPoolOptionsFromConfigCaches(Options &options,
202
203
  options.loadShellEnvvars = requestConfig->defaultLoadShellEnvvars;
203
204
  options.statThrottleRate = mainConfig.statThrottleRate;
204
205
  options.maxRequests = requestConfig->defaultMaxRequests;
206
+ options.stickySessionsCookieAttributes = requestConfig->defaultStickySessionsCookieAttributes;
205
207
 
206
208
  /******************************/
207
209
  }
@@ -377,6 +379,7 @@ Controller::createNewPoolOptions(Client *client, Request *req,
377
379
  fillPoolOption(req, options.fileDescriptorUlimit, "!~PASSENGER_APP_FILE_DESCRIPTOR_ULIMIT");
378
380
  fillPoolOption(req, options.raiseInternalError, "!~PASSENGER_RAISE_INTERNAL_ERROR");
379
381
  fillPoolOption(req, options.lveMinUid, "!~PASSENGER_LVE_MIN_UID");
382
+ fillPoolOption(req, options.stickySessionsCookieAttributes, "!~PASSENGER_STICKY_SESSIONS_COOKIE_ATTRIBUTES");
380
383
 
381
384
  // maxProcesses is configured per-application by the (Enterprise) maxInstances option (and thus passed
382
385
  // via request headers). In OSS the max processes can also be configured, but on a global level
@@ -70,6 +70,7 @@ Controller::preinitialize() {
70
70
  PASSENGER_SHOW_VERSION_IN_HEADER = "!~PASSENGER_SHOW_VERSION_IN_HEADER";
71
71
  PASSENGER_STICKY_SESSIONS = "!~PASSENGER_STICKY_SESSIONS";
72
72
  PASSENGER_STICKY_SESSIONS_COOKIE_NAME = "!~PASSENGER_STICKY_SESSIONS_COOKIE_NAME";
73
+ PASSENGER_STICKY_SESSIONS_COOKIE_ATTRIBUTES = "!~PASSENGER_STICKY_SESSIONS_COOKIE_ATTRIBUTES";
73
74
  PASSENGER_REQUEST_OOB_WORK = "!~Request-OOB-Work";
74
75
  REMOTE_ADDR = "!~REMOTE_ADDR";
75
76
  REMOTE_PORT = "!~REMOTE_PORT";
@@ -714,6 +714,7 @@ initializeNonPrivilegedWorkingObjects() {
714
714
  wo->spawningKitContext->randomGenerator = wo->randomGenerator;
715
715
  wo->spawningKitContext->integrationMode = coreConfig->get("integration_mode").asString();
716
716
  wo->spawningKitContext->instanceDir = coreConfig->get("instance_dir").asString();
717
+ wo->spawningKitContext->spawnDir = coreConfig->get("spawn_dir").asString();
717
718
  if (!wo->spawningKitContext->instanceDir.empty()) {
718
719
  wo->spawningKitContext->instanceDir = absolutizePath(
719
720
  wo->spawningKitContext->instanceDir);
@@ -912,7 +913,7 @@ initializeAdminPanelConnector() {
912
913
  TRACE_POINT();
913
914
  WorkingObjects &wo = *workingObjects;
914
915
 
915
- if (coreConfig->get("admin_panel_url").isNull()) {
916
+ if (coreConfig->get("admin_panel_url").empty()) {
916
917
  return;
917
918
  }
918
919
 
@@ -173,6 +173,9 @@ coreUsage() {
173
173
  printf(" --sticky-sessions-cookie-name NAME\n");
174
174
  printf(" Cookie name to use for sticky sessions.\n");
175
175
  printf(" Default: " DEFAULT_STICKY_SESSIONS_COOKIE_NAME "\n");
176
+ printf(" --sticky-sessions-cookie-attributes 'NAME1=VALUE1; NAME2'\n");
177
+ printf(" The attributes to use for the sticky session cookie.\n");
178
+ printf(" Default: " DEFAULT_STICKY_SESSIONS_COOKIE_ATTRIBUTES "\n");
176
179
  printf(" --vary-turbocache-by-cookie NAME\n");
177
180
  printf(" Vary the turbocache by the cookie of the given name\n");
178
181
  printf(" --disable-turbocaching\n");
@@ -138,6 +138,7 @@ public:
138
138
  RandomGeneratorPtr randomGenerator;
139
139
  string integrationMode;
140
140
  string instanceDir;
141
+ string spawnDir;
141
142
  DebugSupport *debugSupport;
142
143
  //UnionStation::ContextPtr unionStationContext;
143
144
 
@@ -123,7 +123,7 @@ private:
123
123
 
124
124
  void createWorkDir() {
125
125
  TRACE_POINT();
126
- session.workDir.reset(new HandshakeWorkDir());
126
+ session.workDir.reset(new HandshakeWorkDir(context->spawnDir));
127
127
 
128
128
  session.envDumpDir = session.workDir->getPath() + "/envdump";
129
129
  makeDirTree(session.envDumpDir,
@@ -54,12 +54,15 @@ private:
54
54
  string path;
55
55
 
56
56
  public:
57
- HandshakeWorkDir() {
57
+ HandshakeWorkDir(const std::string& spawn_dir) {
58
58
  char buf[PATH_MAX + 1];
59
59
  char *pos = buf;
60
60
  const char *end = buf + PATH_MAX;
61
61
 
62
- pos = appendData(pos, end, getSystemTempDir());
62
+ if (spawn_dir.empty())
63
+ throw RuntimeException("spawn_dir is not set");
64
+ pos = appendData(pos, end, spawn_dir.c_str());
65
+
63
66
  pos = appendData(pos, end, "/passenger.spawn.XXXXXXXXXX");
64
67
  *pos = '\0';
65
68
 
@@ -415,9 +415,11 @@ doSleep(int sec) {
415
415
 
416
416
  static void
417
417
  maybeDeletePidFile() {
418
+ up_privilege();
418
419
  if (pidFile != NULL) {
419
420
  unlink(pidFile);
420
421
  }
422
+ down_privilege();
421
423
  }
422
424
 
423
425
  static void
@@ -120,14 +120,20 @@ using namespace std;
120
120
  * default_server_port unsigned integer - default
121
121
  * default_spawn_method string - default("smart")
122
122
  * default_sticky_sessions boolean - default(false)
123
+ * default_sticky_sessions_cookie_attributes string - default("SameSite=Lax; Secure;")
123
124
  * default_sticky_sessions_cookie_name string - default("_passenger_route")
124
125
  * default_user string - default("nobody")
126
+ * disable_log_prefix boolean - default(false)
125
127
  * file_descriptor_log_target any - -
126
128
  * graceful_exit boolean - default(true)
127
129
  * hook_after_watchdog_initialization string - -
128
130
  * hook_after_watchdog_shutdown string - -
131
+ * hook_attached_process string - read_only
129
132
  * hook_before_watchdog_initialization string - -
130
133
  * hook_before_watchdog_shutdown string - -
134
+ * hook_detached_process string - read_only
135
+ * hook_queue_full_error string - read_only
136
+ * hook_spawn_failed string - read_only
131
137
  * instance_registry_dir string - default,read_only
132
138
  * integration_mode string - default("standalone")
133
139
  * log_level string - default("notice")
@@ -146,13 +152,14 @@ using namespace std;
146
152
  * security_update_checker_interval unsigned integer - default(86400)
147
153
  * security_update_checker_proxy_url string - -
148
154
  * security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
149
- * server_software string - default("Phusion_Passenger/6.0.1")
155
+ * server_software string - default("Phusion_Passenger/6.0.6")
150
156
  * setsid boolean - default(false)
151
157
  * show_version_in_header boolean - default(true)
152
158
  * single_app_mode_app_root string - default,read_only
153
159
  * single_app_mode_app_start_command string - read_only
154
160
  * single_app_mode_app_type string - read_only
155
161
  * single_app_mode_startup_file string - read_only
162
+ * spawn_dir string - default,read_only
156
163
  * standalone_engine string - default
157
164
  * startup_report_file string - -
158
165
  * stat_throttle_rate unsigned integer - default(10)
@@ -246,6 +253,10 @@ private:
246
253
  return getSystemTempDir();
247
254
  }
248
255
 
256
+ static Json::Value getDefaultSpawnDir(const ConfigKit::Store &store) {
257
+ return getSystemTempDir();
258
+ }
259
+
249
260
  static void validateAddresses(const ConfigKit::Store &config, vector<ConfigKit::Error> &errors) {
250
261
  typedef ConfigKit::Error Error;
251
262
 
@@ -258,6 +269,7 @@ private:
258
269
  static Json::Value normalizePaths(const Json::Value &effectiveValues) {
259
270
  Json::Value updates;
260
271
  updates["instance_registry_dir"] = absolutizePath(effectiveValues["instance_registry_dir"].asString());
272
+ updates["spawn_dir"] = absolutizePath(effectiveValues["spawn_dir"].asString());
261
273
  if (!effectiveValues["watchdog_pid_file"].isNull()) {
262
274
  updates["watchdog_pid_file"] = absolutizePath(effectiveValues["watchdog_pid_file"].asString());
263
275
  }
@@ -334,6 +346,8 @@ public:
334
346
  OPTIONAL | READ_ONLY | CACHE_DEFAULT_VALUE, getDefaultUser);
335
347
  addWithDynamicDefault("instance_registry_dir", STRING_TYPE,
336
348
  OPTIONAL | READ_ONLY | CACHE_DEFAULT_VALUE, getDefaultInstanceRegistryDir);
349
+ addWithDynamicDefault("spawn_dir", STRING_TYPE,
350
+ OPTIONAL | READ_ONLY | CACHE_DEFAULT_VALUE, getDefaultSpawnDir);
337
351
 
338
352
  add("hook_before_watchdog_initialization", STRING_TYPE, OPTIONAL);
339
353
  add("hook_after_watchdog_initialization", STRING_TYPE, OPTIONAL);
@@ -654,6 +654,9 @@ usage() {
654
654
  printf(" --instance-registry-dir Directory to register instance into.\n");
655
655
  printf(" Default: %s\n", getSystemTempDir());
656
656
  printf("\n");
657
+ printf(" --spawn-dir Directory for spawn handshakes.\n");
658
+ printf(" Default: %s\n", getSystemTempDir());
659
+ printf("\n");
657
660
  printf(" --no-user-switching Disables user switching support [A]\n");
658
661
  printf(" --default-user NAME Default user to start apps as, when user\n");
659
662
  printf(" switching is enabled. Default: " DEFAULT_WEB_APP_USER "\n");
@@ -774,6 +777,9 @@ parseOptions(int argc, const char *argv[], ConfigKit::Store &config) {
774
777
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--instance-registry-dir")) {
775
778
  updates["instance_registry_dir"] = argv[i + 1];
776
779
  i += 2;
780
+ } else if (p.isValueFlag(argc, i, argv[i], '\0', "--spawn-dir")) {
781
+ updates["spawn_dir"] = argv[i + 1];
782
+ i += 2;
777
783
  } else if (p.isFlag(argv[i], '\0', "--no-user-switching")) {
778
784
  updates["user_switching"] = false;
779
785
  i++;
@@ -1111,6 +1117,7 @@ initializeWorkingObjects(const WorkingObjectsPtr &wo, InstanceDirToucherPtr &ins
1111
1117
 
1112
1118
  // check if path is safe
1113
1119
  warnIfInstanceDirVulnerable(watchdogConfig->get("instance_registry_dir").asString());
1120
+ warnIfInstanceDirVulnerable(watchdogConfig->get("spawn_dir").asString());
1114
1121
 
1115
1122
  wo->instanceDir = boost::make_shared<InstanceDirectory>(instanceOptions,
1116
1123
  watchdogConfig->get("instance_registry_dir").asString());