passenger 6.0.22 → 6.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +59 -1
- data/Rakefile +13 -2
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +18 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +24 -13
- data/package.json +1 -1
- data/passenger.gemspec +4 -2
- data/resources/templates/standalone/server.erb +1 -0
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +9 -1
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -4
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +8 -3
- data/src/agent/Core/Controller/CheckoutSession.cpp +24 -1
- data/src/agent/Core/Controller/Config.h +5 -1
- data/src/agent/Core/Controller.h +1 -0
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/OptionParser.h +3 -0
- data/src/agent/Core/SpawningKit/ErrorRenderer.h +5 -0
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +2 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +15 -0
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +5 -0
- data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +13 -0
- data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +16 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/LString.h +4 -0
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
- data/src/nginx_module/Configuration.c +7 -2
- data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +6 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +14 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
- data/src/ruby_native_extension/passenger_native_support.c +1 -0
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/rack/handler.rb +73 -0
- data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +30 -56
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +7 -198
- data/src/ruby_supportlib/phusion_passenger/utils/strscan.rb +67 -0
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +39 -10
@@ -28,7 +28,6 @@
|
|
28
28
|
|
29
29
|
#include <string>
|
30
30
|
#include <vector>
|
31
|
-
#include <algorithm>
|
32
31
|
#include <boost/intrusive_ptr.hpp>
|
33
32
|
#include <boost/move/core.hpp>
|
34
33
|
#include <boost/container/vector.hpp>
|
@@ -54,6 +53,10 @@
|
|
54
53
|
#include <Core/SpawningKit/Result.h>
|
55
54
|
#include <Shared/ApplicationPoolApiKey.h>
|
56
55
|
|
56
|
+
namespace tut {
|
57
|
+
template<class Data> class test_object;
|
58
|
+
}
|
59
|
+
|
57
60
|
namespace Passenger {
|
58
61
|
namespace ApplicationPool2 {
|
59
62
|
|
@@ -100,6 +103,9 @@ typedef boost::container::vector<ProcessPtr> ProcessList;
|
|
100
103
|
*/
|
101
104
|
class Process {
|
102
105
|
public:
|
106
|
+
friend class Group;
|
107
|
+
template<class Data> friend class tut::test_object;
|
108
|
+
|
103
109
|
static const unsigned int MAX_SOCKETS_ACCEPTING_HTTP_REQUESTS = 3;
|
104
110
|
|
105
111
|
private:
|
@@ -337,9 +343,14 @@ private:
|
|
337
343
|
}
|
338
344
|
|
339
345
|
void destroySelf() const {
|
346
|
+
Context *context = getContext();
|
347
|
+
Process *storagePointer = const_cast<Process *>(this);
|
340
348
|
this->~Process();
|
341
|
-
|
342
|
-
|
349
|
+
|
350
|
+
LockGuard l(context->memoryManagementSyncher);
|
351
|
+
// Use `storagePointer` because using `this` after calling the destructor
|
352
|
+
// is undefined behavior.
|
353
|
+
context->processObjectPool.free(storagePointer);
|
343
354
|
}
|
344
355
|
|
345
356
|
|
@@ -384,6 +395,10 @@ public:
|
|
384
395
|
|
385
396
|
/** Last time when a session was opened for this Process. */
|
386
397
|
unsigned long long lastUsed;
|
398
|
+
/** Which generation of app processes this one belongs to,
|
399
|
+
inherited from the app group, incremented when a restart
|
400
|
+
is initiated*/
|
401
|
+
const unsigned int generation;
|
387
402
|
/** Number of sessions currently open.
|
388
403
|
* @invariant session >= 0
|
389
404
|
*/
|
@@ -446,8 +461,7 @@ public:
|
|
446
461
|
/** Collected by Pool::collectAnalytics(). */
|
447
462
|
ProcessMetrics metrics;
|
448
463
|
|
449
|
-
|
450
|
-
Process(const BasicGroupInfo *groupInfo, const Json::Value &args)
|
464
|
+
Process(const BasicGroupInfo *groupInfo, const unsigned int gen, const Json::Value &args)
|
451
465
|
: info(this, groupInfo, args),
|
452
466
|
socketsAcceptingHttpRequestsCount(0),
|
453
467
|
spawnerCreationTime(getJsonUint64Field(args, "spawner_creation_time")),
|
@@ -458,6 +472,7 @@ public:
|
|
458
472
|
refcount(1),
|
459
473
|
index(-1),
|
460
474
|
lastUsed(spawnEndTime),
|
475
|
+
generation(gen),
|
461
476
|
sessions(0),
|
462
477
|
processed(0),
|
463
478
|
lifeStatus(ALIVE),
|
@@ -471,7 +486,7 @@ public:
|
|
471
486
|
indexSocketsAcceptingHttpRequests();
|
472
487
|
}
|
473
488
|
|
474
|
-
Process(const BasicGroupInfo *groupInfo, const SpawningKit::Result &skResult,
|
489
|
+
Process(const BasicGroupInfo *groupInfo, const unsigned int gen, const SpawningKit::Result &skResult,
|
475
490
|
const Json::Value &args)
|
476
491
|
: info(this, groupInfo, skResult),
|
477
492
|
socketsAcceptingHttpRequestsCount(0),
|
@@ -483,6 +498,7 @@ public:
|
|
483
498
|
refcount(1),
|
484
499
|
index(-1),
|
485
500
|
lastUsed(spawnEndTime),
|
501
|
+
generation(gen),
|
486
502
|
sessions(0),
|
487
503
|
processed(0),
|
488
504
|
lifeStatus(ALIVE),
|
@@ -109,9 +109,14 @@ private:
|
|
109
109
|
}
|
110
110
|
|
111
111
|
void destroySelf() const {
|
112
|
+
Context *context = this->context;
|
113
|
+
Session *storagePointer = const_cast<Session *>(this);
|
112
114
|
this->~Session();
|
115
|
+
|
113
116
|
LockGuard l(context->memoryManagementSyncher);
|
114
|
-
|
117
|
+
// Use `storagePointer` because using `this` after calling the destructor
|
118
|
+
// is undefined behavior.
|
119
|
+
context->sessionObjectPool.free(storagePointer);
|
115
120
|
}
|
116
121
|
|
117
122
|
public:
|
data/src/agent/Core/Config.h
CHANGED
@@ -118,6 +118,7 @@ using namespace std;
|
|
118
118
|
* default_abort_websockets_on_process_shutdown boolean - default(true)
|
119
119
|
* default_app_file_descriptor_ulimit unsigned integer - -
|
120
120
|
* default_bind_address string - default("127.0.0.1")
|
121
|
+
* default_custom_error_page string - default("")
|
121
122
|
* default_environment string - default("production")
|
122
123
|
* default_force_max_concurrent_requests_per_process integer - default(-1)
|
123
124
|
* default_friendly_error_pages string - default("auto")
|
@@ -166,13 +167,13 @@ using namespace std;
|
|
166
167
|
* security_update_checker_interval unsigned integer - default(86400)
|
167
168
|
* security_update_checker_proxy_url string - -
|
168
169
|
* security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
|
169
|
-
* server_software string - default("Phusion_Passenger/6.0.
|
170
|
+
* server_software string - default("Phusion_Passenger/6.0.24")
|
170
171
|
* show_version_in_header boolean - default(true)
|
171
172
|
* single_app_mode_app_root string - default,read_only
|
172
173
|
* single_app_mode_app_start_command string - read_only
|
173
174
|
* single_app_mode_app_type string - read_only
|
174
175
|
* single_app_mode_startup_file string - read_only
|
175
|
-
* spawn_dir string
|
176
|
+
* spawn_dir string - default,read_only
|
176
177
|
* standalone_engine string - default
|
177
178
|
* stat_throttle_rate unsigned integer - default(10)
|
178
179
|
* telemetry_collector_ca_certificate_path string - -
|
@@ -239,6 +240,10 @@ private:
|
|
239
240
|
return 80;
|
240
241
|
}
|
241
242
|
|
243
|
+
static Json::Value getDefaultSpawnDir(const ConfigKit::Store &store) {
|
244
|
+
return getSystemTempDir();
|
245
|
+
}
|
246
|
+
|
242
247
|
static Json::Value getDefaultThreads(const ConfigKit::Store &store) {
|
243
248
|
return Json::UInt(boost::thread::hardware_concurrency());
|
244
249
|
}
|
@@ -487,7 +492,7 @@ public:
|
|
487
492
|
overrideWithDynamicDefault("default_server_port", UINT_TYPE, OPTIONAL, getDefaultServerPort);
|
488
493
|
|
489
494
|
add("passenger_root", STRING_TYPE, REQUIRED | READ_ONLY);
|
490
|
-
|
495
|
+
addWithDynamicDefault("spawn_dir", STRING_TYPE, OPTIONAL | READ_ONLY | CACHE_DEFAULT_VALUE, getDefaultSpawnDir);
|
491
496
|
add("config_manifest", OBJECT_TYPE, OPTIONAL | READ_ONLY);
|
492
497
|
add("pid_file", STRING_TYPE, OPTIONAL | READ_ONLY);
|
493
498
|
add("web_server_version", STRING_TYPE, OPTIONAL | READ_ONLY);
|
@@ -23,6 +23,7 @@
|
|
23
23
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
24
24
|
* THE SOFTWARE.
|
25
25
|
*/
|
26
|
+
#include "DataStructures/LString.h"
|
26
27
|
#include <Core/Controller.h>
|
27
28
|
#include <Core/SpawningKit/ErrorRenderer.h>
|
28
29
|
|
@@ -351,8 +352,17 @@ Controller::endRequestWithErrorResponse(Client **c, Request **r,
|
|
351
352
|
Request *req = *r;
|
352
353
|
SpawningKit::ErrorRenderer renderer(*appPool->getSpawningKitContext());
|
353
354
|
string data;
|
355
|
+
const LString *path = customErrorPageEnabled(req);
|
354
356
|
|
355
|
-
if (
|
357
|
+
if (!psg_lstr_cmp(path, StaticString(""))) {
|
358
|
+
try {
|
359
|
+
data = renderer.renderCustom(StaticString(path->start->data, path->size));
|
360
|
+
} catch (const SystemException &e2) {
|
361
|
+
SKC_ERROR(client, "Cannot render an error page: " << e2.what() <<
|
362
|
+
"\n" << e2.backtrace());
|
363
|
+
data = "<h2>Internal server error</h2>";
|
364
|
+
}
|
365
|
+
} else if (friendlyErrorPagesEnabled(req)) {
|
356
366
|
try {
|
357
367
|
data = renderer.renderWithDetails(e);
|
358
368
|
} catch (const SystemException &e2) {
|
@@ -373,6 +383,19 @@ Controller::endRequestWithErrorResponse(Client **c, Request **r,
|
|
373
383
|
endRequestWithSimpleResponse(c, r, psg_pstrdup(req->pool, data), statusCode);
|
374
384
|
}
|
375
385
|
|
386
|
+
const LString*
|
387
|
+
Controller::customErrorPageEnabled(Request *req) {
|
388
|
+
const StaticString name = "!~PASSENGER_CUSTOM_ERROR_PAGE";
|
389
|
+
LString* customErrorPagePath = req->secureHeaders.lookup(name);
|
390
|
+
if (customErrorPagePath != NULL && customErrorPagePath->size > 0) {
|
391
|
+
return psg_lstr_make_contiguous(customErrorPagePath, req->pool);
|
392
|
+
} else {
|
393
|
+
customErrorPagePath = (LString *) psg_palloc(req->pool, sizeof(LString));
|
394
|
+
psg_lstr_init(customErrorPagePath);
|
395
|
+
return customErrorPagePath;
|
396
|
+
}
|
397
|
+
}
|
398
|
+
|
376
399
|
bool
|
377
400
|
Controller::friendlyErrorPagesEnabled(Request *req) {
|
378
401
|
bool defaultValue;
|
@@ -88,6 +88,7 @@ parseControllerBenchmarkMode(const StaticString &mode) {
|
|
88
88
|
* default_abort_websockets_on_process_shutdown boolean - default(true)
|
89
89
|
* default_app_file_descriptor_ulimit unsigned integer - -
|
90
90
|
* default_bind_address string - default("127.0.0.1")
|
91
|
+
* default_custom_error_page string - default("")
|
91
92
|
* default_environment string - default("production")
|
92
93
|
* default_force_max_concurrent_requests_per_process integer - default(-1)
|
93
94
|
* default_friendly_error_pages string - default("auto")
|
@@ -116,7 +117,7 @@ parseControllerBenchmarkMode(const StaticString &mode) {
|
|
116
117
|
* multi_app boolean - default(true),read_only
|
117
118
|
* request_freelist_limit unsigned integer - default(1024)
|
118
119
|
* response_buffer_high_watermark unsigned integer - default(134217728)
|
119
|
-
* server_software string - default("Phusion_Passenger/6.0.
|
120
|
+
* server_software string - default("Phusion_Passenger/6.0.24")
|
120
121
|
* show_version_in_header boolean - default(true)
|
121
122
|
* start_reading_after_accept boolean - default(true)
|
122
123
|
* stat_throttle_rate unsigned integer - default(10)
|
@@ -161,6 +162,7 @@ private:
|
|
161
162
|
add("server_software", STRING_TYPE, OPTIONAL, SERVER_TOKEN_NAME "/" PASSENGER_VERSION);
|
162
163
|
add("vary_turbocache_by_cookie", STRING_TYPE, OPTIONAL);
|
163
164
|
|
165
|
+
add("default_custom_error_page", STRING_TYPE, OPTIONAL, "");
|
164
166
|
add("default_friendly_error_pages", STRING_TYPE, OPTIONAL, "auto");
|
165
167
|
add("default_environment", STRING_TYPE, OPTIONAL, DEFAULT_APP_ENV);
|
166
168
|
add("default_spawn_method", STRING_TYPE, OPTIONAL, DEFAULT_SPAWN_METHOD);
|
@@ -428,6 +430,7 @@ public:
|
|
428
430
|
StaticString defaultStickySessionsCookieAttributes;
|
429
431
|
StaticString defaultVaryTurbocacheByCookie;
|
430
432
|
|
433
|
+
StaticString defaultCustomErrorPage;
|
431
434
|
StaticString defaultFriendlyErrorPages;
|
432
435
|
StaticString defaultEnvironment;
|
433
436
|
StaticString defaultSpawnMethod;
|
@@ -463,6 +466,7 @@ public:
|
|
463
466
|
defaultStickySessionsCookieAttributes(psg_pstrdup(pool, config["default_sticky_sessions_cookie_attributes"].asString())),
|
464
467
|
defaultVaryTurbocacheByCookie(psg_pstrdup(pool, config["vary_turbocache_by_cookie"].asString())),
|
465
468
|
|
469
|
+
defaultCustomErrorPage(psg_pstrdup(pool, config["default_custom_error_page"].asString())),
|
466
470
|
defaultFriendlyErrorPages(psg_pstrdup(pool, config["default_friendly_error_pages"].asString())),
|
467
471
|
defaultEnvironment(psg_pstrdup(pool, config["default_environment"].asString())),
|
468
472
|
defaultSpawnMethod(psg_pstrdup(pool, config["default_spawn_method"].asString())),
|
data/src/agent/Core/Controller.h
CHANGED
@@ -216,6 +216,7 @@ private:
|
|
216
216
|
const ExceptionPtr &e);
|
217
217
|
void endRequestWithErrorResponse(Client **c, Request **r,
|
218
218
|
const SpawningKit::SpawnException &e, int statusCode);
|
219
|
+
const LString* customErrorPageEnabled(Request *req);
|
219
220
|
bool friendlyErrorPagesEnabled(Request *req);
|
220
221
|
|
221
222
|
|
data/src/agent/Core/CoreMain.cpp
CHANGED
@@ -85,7 +85,6 @@
|
|
85
85
|
#include <AppTypeDetector/Detector.h>
|
86
86
|
#include <IOTools/MessageSerialization.h>
|
87
87
|
#include <FileDescriptor.h>
|
88
|
-
#include <ResourceLocator.h>
|
89
88
|
#include <BackgroundEventLoop.cpp>
|
90
89
|
#include <FileTools/FileManip.h>
|
91
90
|
#include <FileTools/PathSecurityCheck.h>
|
@@ -145,7 +144,6 @@ namespace Core {
|
|
145
144
|
|
146
145
|
boost::mutex configSyncher;
|
147
146
|
|
148
|
-
ResourceLocator resourceLocator;
|
149
147
|
RandomGeneratorPtr randomGenerator;
|
150
148
|
SpawningKit::Context::Schema spawningKitContextSchema;
|
151
149
|
SpawningKit::ContextPtr spawningKitContext;
|
@@ -697,8 +695,6 @@ initializeNonPrivilegedWorkingObjects() {
|
|
697
695
|
|
698
696
|
setenv("SERVER_SOFTWARE", coreConfig->get("server_software").asCString(), 1);
|
699
697
|
|
700
|
-
wo->resourceLocator = ResourceLocator(coreConfig->get("passenger_root").asString());
|
701
|
-
|
702
698
|
wo->randomGenerator = boost::make_shared<RandomGenerator>();
|
703
699
|
// Check whether /dev/urandom is actually random.
|
704
700
|
// https://code.google.com/p/phusion-passenger/issues/detail?id=516
|
@@ -710,7 +706,7 @@ initializeNonPrivilegedWorkingObjects() {
|
|
710
706
|
UPDATE_TRACE_POINT();
|
711
707
|
wo->spawningKitContext = boost::make_shared<SpawningKit::Context>(
|
712
708
|
wo->spawningKitContextSchema);
|
713
|
-
wo->spawningKitContext->resourceLocator =
|
709
|
+
wo->spawningKitContext->resourceLocator = Agent::Fundamentals::context->resourceLocator;
|
714
710
|
wo->spawningKitContext->wrapperRegistry = coreWrapperRegistry;
|
715
711
|
wo->spawningKitContext->randomGenerator = wo->randomGenerator;
|
716
712
|
wo->spawningKitContext->integrationMode = coreConfig->get("integration_mode").asString();
|
@@ -772,7 +768,7 @@ initializeNonPrivilegedWorkingObjects() {
|
|
772
768
|
&coreSchema->controllerSingleAppMode.schema,
|
773
769
|
&wo->singleAppModeConfig,
|
774
770
|
coreSchema->controllerSingleAppMode.translator);
|
775
|
-
two.controller->resourceLocator =
|
771
|
+
two.controller->resourceLocator = Agent::Fundamentals::context->resourceLocator;
|
776
772
|
two.controller->wrapperRegistry = coreWrapperRegistry;
|
777
773
|
two.controller->appPool = wo->appPool;
|
778
774
|
two.controller->shutdownFinishCallback = controllerShutdownFinished;
|
@@ -877,7 +873,7 @@ initializeSecurityUpdateChecker() {
|
|
877
873
|
config,
|
878
874
|
coreSchema->securityUpdateChecker.translator);
|
879
875
|
workingObjects->securityUpdateChecker = checker;
|
880
|
-
checker->resourceLocator =
|
876
|
+
checker->resourceLocator = Agent::Fundamentals::context->resourceLocator;
|
881
877
|
checker->initialize();
|
882
878
|
checker->start();
|
883
879
|
}
|
@@ -927,7 +923,7 @@ initializeAdminPanelConnector() {
|
|
927
923
|
AdminPanelConnector *connector = new Core::AdminPanelConnector(
|
928
924
|
coreSchema->adminPanelConnector.schema, config,
|
929
925
|
coreSchema->adminPanelConnector.translator);
|
930
|
-
connector->resourceLocator =
|
926
|
+
connector->resourceLocator = Agent::Fundamentals::context->resourceLocator;
|
931
927
|
connector->appPool = wo.appPool;
|
932
928
|
connector->configGetter = inspectConfig;
|
933
929
|
for (unsigned int i = 0; i < wo.threadWorkingObjects.size(); i++) {
|
@@ -956,7 +952,7 @@ prestartWebApps() {
|
|
956
952
|
}
|
957
953
|
|
958
954
|
boost::function<void ()> func = boost::bind(prestartWebApps,
|
959
|
-
|
955
|
+
*Agent::Fundamentals::context->resourceLocator,
|
960
956
|
coreConfig->get("default_ruby").asString(),
|
961
957
|
prestartURLs
|
962
958
|
);
|
@@ -983,7 +979,7 @@ warnIfPassengerRootVulnerable() {
|
|
983
979
|
return; // Passenger is not root, so no escalation.
|
984
980
|
}
|
985
981
|
|
986
|
-
string root =
|
982
|
+
string root = Agent::Fundamentals::context->resourceLocator->getInstallSpec();
|
987
983
|
vector<string> errors, checkErrors;
|
988
984
|
if (isPathProbablySecureForRootUse(root, errors, checkErrors)) {
|
989
985
|
if (!checkErrors.empty()) {
|
@@ -1400,13 +1396,10 @@ parseOptions(int argc, const char *argv[], ConfigKit::Store &config) {
|
|
1400
1396
|
}
|
1401
1397
|
}
|
1402
1398
|
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
ConfigKit::toString(errors) << "\n"
|
1408
|
-
"Raw initial configuration: " << updates.toStyledString());
|
1409
|
-
}
|
1399
|
+
vector<ConfigKit::Error> errors;
|
1400
|
+
if (!config.update(updates, errors)) {
|
1401
|
+
P_ERROR("*** Error in options: " << ConfigKit::toString(errors));
|
1402
|
+
std::exit(1);
|
1410
1403
|
}
|
1411
1404
|
}
|
1412
1405
|
|
@@ -339,6 +339,9 @@ parseCoreOption(int argc, const char *argv[], int &i, Json::Value &updates) {
|
|
339
339
|
} else if (p.isFlag(argv[i], '\0', "--multi-app")) {
|
340
340
|
updates["multi_app"] = true;
|
341
341
|
i++;
|
342
|
+
} else if (p.isFlag(argv[i], '\0', "--custom-error-page")) {
|
343
|
+
updates["custom_error_page"] = argv[i + 1];
|
344
|
+
i+=2;
|
342
345
|
} else if (p.isFlag(argv[i], '\0', "--force-friendly-error-pages")) {
|
343
346
|
updates["default_friendly_error_pages"] = true;
|
344
347
|
i++;
|
@@ -33,6 +33,7 @@
|
|
33
33
|
#include <jsoncpp/json.h>
|
34
34
|
|
35
35
|
#include <Constants.h>
|
36
|
+
#include <DataStructures/LString.h>
|
36
37
|
#include <StaticString.h>
|
37
38
|
#include <FileTools/FileManip.h>
|
38
39
|
#include <StrIntTools/Template.h>
|
@@ -108,6 +109,10 @@ public:
|
|
108
109
|
|
109
110
|
return Template::apply(unsafeReadFile(htmlFile), params);
|
110
111
|
}
|
112
|
+
|
113
|
+
string renderCustom(const StaticString &htmlFile) const {
|
114
|
+
return unsafeReadFile(htmlFile);
|
115
|
+
}
|
111
116
|
};
|
112
117
|
|
113
118
|
|
@@ -30,9 +30,7 @@
|
|
30
30
|
#include <boost/thread.hpp>
|
31
31
|
#include <boost/scoped_array.hpp>
|
32
32
|
#include <string>
|
33
|
-
#include <
|
34
|
-
#include <stdexcept>
|
35
|
-
#include <algorithm>
|
33
|
+
#include <exception>
|
36
34
|
#include <utility>
|
37
35
|
#include <cerrno>
|
38
36
|
#include <cstddef>
|
@@ -45,7 +43,6 @@
|
|
45
43
|
#include <pwd.h>
|
46
44
|
#include <grp.h>
|
47
45
|
#include <unistd.h>
|
48
|
-
#include <limits.h>
|
49
46
|
|
50
47
|
#include <jsoncpp/json.h>
|
51
48
|
|
@@ -350,55 +347,6 @@ private:
|
|
350
347
|
}
|
351
348
|
}
|
352
349
|
|
353
|
-
#if 0
|
354
|
-
void inferApplicationInfo() const {
|
355
|
-
TRACE_POINT();
|
356
|
-
session.result.codeRevision = readFromRevisionFile();
|
357
|
-
if (session.result.codeRevision.empty()) {
|
358
|
-
session.result.codeRevision = inferCodeRevisionFromCapistranoSymlink();
|
359
|
-
}
|
360
|
-
}
|
361
|
-
|
362
|
-
string readFromRevisionFile() const {
|
363
|
-
TRACE_POINT();
|
364
|
-
string filename = config->appRoot + "/REVISION";
|
365
|
-
try {
|
366
|
-
if (fileExists(filename)) {
|
367
|
-
return strip(readAll(filename));
|
368
|
-
}
|
369
|
-
} catch (const SystemException &e) {
|
370
|
-
P_WARN("Cannot access " << filename << ": " << e.what());
|
371
|
-
}
|
372
|
-
return string();
|
373
|
-
}
|
374
|
-
|
375
|
-
string inferCodeRevisionFromCapistranoSymlink() const {
|
376
|
-
TRACE_POINT();
|
377
|
-
if (extractBaseName(config->appRoot) == "current") {
|
378
|
-
string appRoot = config->appRoot.toString(); // null terminate string
|
379
|
-
char buf[PATH_MAX + 1];
|
380
|
-
ssize_t ret;
|
381
|
-
|
382
|
-
do {
|
383
|
-
ret = readlink(appRoot.c_str(), buf, PATH_MAX);
|
384
|
-
} while (ret == -1 && errno == EINTR);
|
385
|
-
if (ret == -1) {
|
386
|
-
if (errno == EINVAL) {
|
387
|
-
return string();
|
388
|
-
} else {
|
389
|
-
int e = errno;
|
390
|
-
P_WARN("Cannot read symlink " << appRoot << ": " << strerror(e));
|
391
|
-
}
|
392
|
-
}
|
393
|
-
|
394
|
-
buf[ret] = '\0';
|
395
|
-
return extractBaseName(buf);
|
396
|
-
} else {
|
397
|
-
return string();
|
398
|
-
}
|
399
|
-
}
|
400
|
-
#endif
|
401
|
-
|
402
350
|
void findFreePortOrSocketFile() {
|
403
351
|
TRACE_POINT();
|
404
352
|
session.expectedStartPort = findFreePort();
|
@@ -31,11 +31,12 @@
|
|
31
31
|
#include <cerrno>
|
32
32
|
|
33
33
|
#include <sys/types.h>
|
34
|
-
#include <limits.h>
|
34
|
+
#include <limits.h> // IWYU pragma: keep; for PATH_MAX
|
35
35
|
#include <unistd.h>
|
36
36
|
|
37
37
|
#include <Exceptions.h>
|
38
38
|
#include <Utils.h>
|
39
|
+
#include <FileTools/FileManip.h>
|
39
40
|
#include <StrIntTools/StrIntUtils.h>
|
40
41
|
|
41
42
|
namespace Passenger {
|
@@ -78,6 +79,8 @@ public:
|
|
78
79
|
|
79
80
|
~HandshakeWorkDir() {
|
80
81
|
if (!path.empty()) {
|
82
|
+
boost::this_thread::disable_interruption di;
|
83
|
+
boost::this_thread::disable_syscall_interruption dsi;
|
81
84
|
removeDirTree(path);
|
82
85
|
}
|
83
86
|
}
|
@@ -108,7 +111,7 @@ public:
|
|
108
111
|
// dropping root privileges).
|
109
112
|
boost::this_thread::disable_interruption di;
|
110
113
|
boost::this_thread::disable_syscall_interruption dsi;
|
111
|
-
syscalls::chown(path.c_str(), uid, gid);
|
114
|
+
oxt::syscalls::chown(path.c_str(), uid, gid);
|
112
115
|
}
|
113
116
|
};
|
114
117
|
|
@@ -33,12 +33,12 @@
|
|
33
33
|
#include <string>
|
34
34
|
#include <vector>
|
35
35
|
#include <map>
|
36
|
-
#include <
|
36
|
+
#include <exception>
|
37
37
|
#include <dirent.h>
|
38
38
|
#include <sys/types.h>
|
39
39
|
#include <sys/wait.h>
|
40
40
|
#include <sys/stat.h>
|
41
|
-
#include <signal.h>
|
41
|
+
#include <signal.h> // IWYU pragma: keep; for signal constants
|
42
42
|
#include <unistd.h>
|
43
43
|
#include <cstring>
|
44
44
|
#include <cassert>
|
@@ -66,6 +66,10 @@
|
|
66
66
|
#include <Core/SpawningKit/Handshake/Perform.h>
|
67
67
|
#include <Core/SpawningKit/Handshake/BackgroundIOCapturer.h>
|
68
68
|
|
69
|
+
#ifdef INTELLISENSE
|
70
|
+
#include <Core/ApplicationPool/Options.h>
|
71
|
+
#endif
|
72
|
+
|
69
73
|
namespace Passenger {
|
70
74
|
namespace SpawningKit {
|
71
75
|
|