passenger 5.3.1 → 5.3.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG +19 -0
- data/build/cxx_tests.rb +3 -1
- data/build/support/cxx_dependency_map.rb +120 -27
- data/dev/configkit-schemas/index.json +15 -3
- data/src/agent/Core/AdminPanelConnector.h +5 -2
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +2 -0
- data/src/agent/Core/Config.h +2 -1
- data/src/agent/Core/Controller/Config.h +6 -1
- data/src/agent/Core/Controller/InitRequest.cpp +6 -1
- data/src/agent/Core/CoreMain.cpp +26 -60
- data/src/agent/Core/SpawningKit/DirectSpawner.h +18 -6
- data/src/agent/Core/SpawningKit/ErrorRenderer.h +8 -8
- data/src/agent/Core/SpawningKit/Handshake/Perform.h +217 -61
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +57 -8
- data/src/agent/Core/SpawningKit/Handshake/Session.h +34 -1
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +20 -4
- data/src/agent/Core/SpawningKit/SmartSpawner.h +90 -27
- data/src/agent/ExecHelper/ExecHelperMain.cpp +3 -0
- data/src/agent/Shared/ApiAccountUtils.h +2 -2
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +14 -4
- data/src/agent/Watchdog/Config.h +2 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +38 -0
- data/src/apache2_module/Hooks.cpp +1 -0
- data/src/cxx_supportlib/ConfigKit/IN_PRACTICE.md +1 -1
- data/src/cxx_supportlib/ConfigKit/README.md +1 -1
- data/src/cxx_supportlib/Constants.h +6 -1
- data/src/cxx_supportlib/FileTools/FileManip.cpp +34 -2
- data/src/cxx_supportlib/FileTools/FileManip.h +58 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +3 -2
- data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +99 -0
- data/src/cxx_supportlib/FileTools/PathSecurityCheck.h +69 -0
- data/src/cxx_supportlib/Utils.cpp +37 -6
- data/src/cxx_supportlib/Utils.h +6 -0
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +14 -0
- data/src/cxx_supportlib/Utils/IOUtils.cpp +10 -18
- data/src/cxx_supportlib/Utils/IOUtils.h +10 -9
- data/src/cxx_supportlib/Utils/JsonUtils.h +12 -8
- data/src/cxx_supportlib/Utils/SystemMetricsCollector.h +4 -4
- data/src/cxx_supportlib/Utils/SystemTime.h +1 -1
- data/src/cxx_supportlib/WebSocketCommandReverseServer.h +3 -3
- data/src/cxx_supportlib/oxt/system_calls.cpp +25 -1
- data/src/cxx_supportlib/oxt/system_calls.hpp +3 -1
- data/src/helper-scripts/meteor-loader.rb +115 -28
- data/src/helper-scripts/rack-preloader.rb +1 -1
- data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +4 -4
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +4 -4
- data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +0 -10
- data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +0 -42
- data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +0 -6
- data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +0 -8
- data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +10 -0
- data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +22 -0
- data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +8 -0
- data/src/nginx_module/ngx_http_passenger_module.c +6 -5
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +0 -1
- data/src/ruby_supportlib/phusion_passenger/common_library.rb +3 -0
- data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +3 -3
- data/src/ruby_supportlib/phusion_passenger/constants.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +4 -2
- data/src/ruby_supportlib/phusion_passenger/platform_info.rb +3 -3
- data/src/ruby_supportlib/phusion_passenger/request_handler.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +1 -1
- metadata +4 -2
@@ -40,10 +40,12 @@
|
|
40
40
|
|
41
41
|
typedef struct {
|
42
42
|
ngx_flag_t abort_on_startup_error;
|
43
|
+
ngx_uint_t app_file_descriptor_ulimit;
|
43
44
|
ngx_uint_t core_file_descriptor_ulimit;
|
44
45
|
ngx_array_t *ctl;
|
45
46
|
ngx_flag_t disable_security_update_check;
|
46
47
|
ngx_uint_t log_level;
|
48
|
+
ngx_uint_t max_instances_per_app;
|
47
49
|
ngx_uint_t max_pool_size;
|
48
50
|
ngx_uint_t pool_idle_time;
|
49
51
|
ngx_array_t *prestart_uris;
|
@@ -72,6 +74,7 @@ typedef struct {
|
|
72
74
|
ngx_str_t admin_panel_password_source_file;
|
73
75
|
ngx_str_t admin_panel_url_source_file;
|
74
76
|
ngx_str_t admin_panel_username_source_file;
|
77
|
+
ngx_str_t app_file_descriptor_ulimit_source_file;
|
75
78
|
ngx_str_t core_file_descriptor_ulimit_source_file;
|
76
79
|
ngx_str_t ctl_source_file;
|
77
80
|
ngx_str_t data_buffer_dir_source_file;
|
@@ -83,6 +86,7 @@ typedef struct {
|
|
83
86
|
ngx_str_t instance_registry_dir_source_file;
|
84
87
|
ngx_str_t log_file_source_file;
|
85
88
|
ngx_str_t log_level_source_file;
|
89
|
+
ngx_str_t max_instances_per_app_source_file;
|
86
90
|
ngx_str_t max_pool_size_source_file;
|
87
91
|
ngx_str_t pool_idle_time_source_file;
|
88
92
|
ngx_str_t prestart_uris_source_file;
|
@@ -100,6 +104,7 @@ typedef struct {
|
|
100
104
|
ngx_uint_t admin_panel_password_source_line;
|
101
105
|
ngx_uint_t admin_panel_url_source_line;
|
102
106
|
ngx_uint_t admin_panel_username_source_line;
|
107
|
+
ngx_uint_t app_file_descriptor_ulimit_source_line;
|
103
108
|
ngx_uint_t core_file_descriptor_ulimit_source_line;
|
104
109
|
ngx_uint_t ctl_source_line;
|
105
110
|
ngx_uint_t data_buffer_dir_source_line;
|
@@ -111,6 +116,7 @@ typedef struct {
|
|
111
116
|
ngx_uint_t instance_registry_dir_source_line;
|
112
117
|
ngx_uint_t log_file_source_line;
|
113
118
|
ngx_uint_t log_level_source_line;
|
119
|
+
ngx_uint_t max_instances_per_app_source_line;
|
114
120
|
ngx_uint_t max_pool_size_source_line;
|
115
121
|
ngx_uint_t pool_idle_time_source_line;
|
116
122
|
ngx_uint_t prestart_uris_source_line;
|
@@ -128,6 +134,7 @@ typedef struct {
|
|
128
134
|
ngx_int_t admin_panel_password_explicitly_set;
|
129
135
|
ngx_int_t admin_panel_url_explicitly_set;
|
130
136
|
ngx_int_t admin_panel_username_explicitly_set;
|
137
|
+
ngx_int_t app_file_descriptor_ulimit_explicitly_set;
|
131
138
|
ngx_int_t core_file_descriptor_ulimit_explicitly_set;
|
132
139
|
ngx_int_t ctl_explicitly_set;
|
133
140
|
ngx_int_t data_buffer_dir_explicitly_set;
|
@@ -139,6 +146,7 @@ typedef struct {
|
|
139
146
|
ngx_int_t instance_registry_dir_explicitly_set;
|
140
147
|
ngx_int_t log_file_explicitly_set;
|
141
148
|
ngx_int_t log_level_explicitly_set;
|
149
|
+
ngx_int_t max_instances_per_app_explicitly_set;
|
142
150
|
ngx_int_t max_pool_size_explicitly_set;
|
143
151
|
ngx_int_t pool_idle_time_explicitly_set;
|
144
152
|
ngx_int_t prestart_uris_explicitly_set;
|
@@ -283,7 +283,7 @@ open_log_file_for_after_forking(AfterForkData *data, PsgJsonValue *log_target) {
|
|
283
283
|
}
|
284
284
|
|
285
285
|
static ngx_int_t
|
286
|
-
create_file(ngx_cycle_t *cycle, const u_char *filename, const u_char *contents, size_t len) {
|
286
|
+
create_file(ngx_cycle_t *cycle, const u_char *filename, const u_char *contents, size_t len, uid_t uid, gid_t gid) {
|
287
287
|
FILE *f;
|
288
288
|
int ret;
|
289
289
|
size_t total_written = 0, written;
|
@@ -297,6 +297,9 @@ create_file(ngx_cycle_t *cycle, const u_char *filename, const u_char *contents,
|
|
297
297
|
do {
|
298
298
|
ret = fchmod(fileno(f), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
299
299
|
} while (ret == -1 && errno == EINTR);
|
300
|
+
do {
|
301
|
+
ret = fchown(fileno(f), uid, gid);
|
302
|
+
} while (ret == -1 && errno == EINTR);
|
300
303
|
do {
|
301
304
|
written = fwrite(contents + total_written, 1,
|
302
305
|
len - total_written, f);
|
@@ -372,6 +375,7 @@ start_watchdog(ngx_cycle_t *cycle) {
|
|
372
375
|
psg_json_value_set_ngx_str_ne(w_config, "default_ruby", &passenger_main_conf.default_ruby);
|
373
376
|
psg_json_value_set_ngx_uint (w_config, "max_pool_size", autogenerated_main_conf->max_pool_size);
|
374
377
|
psg_json_value_set_ngx_uint (w_config, "pool_idle_time", autogenerated_main_conf->pool_idle_time);
|
378
|
+
psg_json_value_set_ngx_uint (w_config, "max_instances_per_app", autogenerated_main_conf->max_instances_per_app);
|
375
379
|
psg_json_value_set_ngx_uint (w_config, "response_buffer_high_watermark", autogenerated_main_conf->response_buffer_high_watermark);
|
376
380
|
psg_json_value_set_ngx_uint (w_config, "stat_throttle_rate", autogenerated_main_conf->stat_throttle_rate);
|
377
381
|
psg_json_value_set_ngx_str_ne(w_config, "admin_panel_url", &autogenerated_main_conf->admin_panel_url);
|
@@ -446,13 +450,10 @@ start_watchdog(ngx_cycle_t *cycle) {
|
|
446
450
|
"%s/web_server_info/control_process.pid",
|
447
451
|
psg_watchdog_launcher_get_instance_dir(psg_watchdog_launcher, NULL));
|
448
452
|
*last = (u_char) '\0';
|
449
|
-
if (create_file(cycle, filename, (const u_char *) "", 0) != NGX_OK) {
|
453
|
+
if (create_file(cycle, filename, (const u_char *) "", 0, (uid_t) core_conf->user, (gid_t) -1) != NGX_OK) {
|
450
454
|
result = NGX_ERROR;
|
451
455
|
goto cleanup;
|
452
456
|
}
|
453
|
-
do {
|
454
|
-
ret = chown((const char *) filename, (uid_t) core_conf->user, (gid_t) -1);
|
455
|
-
} while (ret == -1 && errno == EINTR);
|
456
457
|
if (ret == -1) {
|
457
458
|
result = NGX_ERROR;
|
458
459
|
goto cleanup;
|
@@ -31,7 +31,7 @@ module PhusionPassenger
|
|
31
31
|
|
32
32
|
PACKAGE_NAME = 'passenger'
|
33
33
|
# Run 'rake src/cxx_supportlib/Constants.h configkit_schemas_inline_comments' after changing this number.
|
34
|
-
VERSION_STRING = '5.3.
|
34
|
+
VERSION_STRING = '5.3.2'
|
35
35
|
|
36
36
|
PREFERRED_NGINX_VERSION = '1.14.0'
|
37
37
|
NGINX_SHA256_CHECKSUM = '5d15becbf69aba1fe33f8d416d97edd95ea8919ea9ac519eff9bafebb6022cb5'
|
@@ -263,7 +263,6 @@ APACHE2_CONFIGURATION_OPTIONS = [
|
|
263
263
|
:context => :global,
|
264
264
|
:min_value => 0,
|
265
265
|
:default => 0,
|
266
|
-
:header => 'PASSENGER_MAX_PROCESSES',
|
267
266
|
:desc => 'The maximum number of simultaneously alive application instances a single application may occupy.'
|
268
267
|
},
|
269
268
|
{
|
@@ -280,6 +280,9 @@ COMMON_LIBRARY = CommonLibraryBuilder.new do
|
|
280
280
|
define_component 'FileTools/FileManip.o',
|
281
281
|
:source => 'FileTools/FileManip.cpp',
|
282
282
|
:category => :base
|
283
|
+
define_component 'FileTools/PathSecurityCheck.o',
|
284
|
+
:source => 'FileTools/PathSecurityCheck.cpp',
|
285
|
+
:category => :base
|
283
286
|
define_component 'ProcessManagement/Spawn.o',
|
284
287
|
:source => 'ProcessManagement/Spawn.cpp',
|
285
288
|
:category => :base
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
#
|
3
3
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
4
|
-
# Copyright (c) 2014-
|
4
|
+
# Copyright (c) 2014-2018 Phusion Holding B.V.
|
5
5
|
#
|
6
6
|
# "Passenger", "Phusion Passenger" and "Union Station" are registered
|
7
7
|
# trademarks of Phusion Holding B.V.
|
@@ -227,7 +227,7 @@ module PhusionPassenger
|
|
227
227
|
|
228
228
|
# When creating PhusionPassenger.support_binaries_dir, preserve the
|
229
229
|
# parent directory's UID and GID. This way, running `passenger-config compile-agent`
|
230
|
-
# with sudo
|
230
|
+
# with sudo privilege, even though Phusion Passenger isn't installed as root,
|
231
231
|
# won't mess up permissions.
|
232
232
|
def mkdir_p_preserve_parent_owner(path)
|
233
233
|
Pathname.new(path).descend do |subpath|
|
@@ -235,7 +235,7 @@ module PhusionPassenger
|
|
235
235
|
stat = subpath.parent.stat
|
236
236
|
Dir.mkdir(subpath.to_s)
|
237
237
|
if Process.euid == 0
|
238
|
-
File.
|
238
|
+
File.lchown(stat.uid, stat.gid, subpath.to_s)
|
239
239
|
end
|
240
240
|
end
|
241
241
|
end
|
@@ -76,6 +76,11 @@ module PhusionPassenger
|
|
76
76
|
MESSAGE_SERVER_MAX_USERNAME_SIZE = 100
|
77
77
|
MESSAGE_SERVER_MAX_PASSWORD_SIZE = 100
|
78
78
|
POOL_HELPER_THREAD_STACK_SIZE = 1024 * 256
|
79
|
+
SPAWNINGKIT_MAX_SUBPROCESS_ERROR_MESSAGE_SIZE = 1024 * 128
|
80
|
+
SPAWNINGKIT_MAX_SUBPROCESS_ENVDUMP_SIZE = 1024 * 128
|
81
|
+
SPAWNINGKIT_MAX_PROPERTIES_JSON_SIZE = 1024 * 32
|
82
|
+
SPAWNINGKIT_MAX_ERROR_CATEGORY_SIZE = 32
|
83
|
+
SPAWNINGKIT_MAX_JOURNEY_STEP_FILE_SIZE = 32
|
79
84
|
# Small mbuf sizes avoid memory overhead (up to 1 blocksize per request), but
|
80
85
|
# also introduce context switching and smaller transfer writes. The size is picked
|
81
86
|
# to balance this out.
|
@@ -292,15 +292,17 @@ NGINX_CONFIGURATION_OPTIONS = [
|
|
292
292
|
:name => 'passenger_app_file_descriptor_ulimit',
|
293
293
|
:scope => :global,
|
294
294
|
:type => :uinteger,
|
295
|
-
:dynamic_default => 'passenger_core_file_descriptor_ulimit'
|
295
|
+
:dynamic_default => 'passenger_core_file_descriptor_ulimit',
|
296
|
+
:struct => 'NGX_HTTP_MAIN_CONF_OFFSET'
|
296
297
|
},
|
297
298
|
{
|
298
299
|
:name => 'passenger_max_instances_per_app',
|
299
300
|
:scope => :global,
|
300
301
|
:context => [:main],
|
301
302
|
:type => :uinteger,
|
303
|
+
:header => nil,
|
302
304
|
:default => 0,
|
303
|
-
:
|
305
|
+
:struct => 'NGX_HTTP_MAIN_CONF_OFFSET'
|
304
306
|
},
|
305
307
|
{
|
306
308
|
:name => 'passenger_admin_panel_url',
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
# Copyright (c) 2010-
|
3
|
+
# Copyright (c) 2010-2018 Phusion Holding B.V.
|
4
4
|
#
|
5
5
|
# "Passenger", "Phusion Passenger" and "Union Station" are registered
|
6
6
|
# trademarks of Phusion Holding B.V.
|
@@ -260,9 +260,9 @@ module PhusionPassenger
|
|
260
260
|
filename = "#{dir}/#{basename}"
|
261
261
|
begin
|
262
262
|
File.open(filename, 'w') do |f|
|
263
|
+
f.chmod(0700)
|
263
264
|
f.puts("#!/bin/sh")
|
264
265
|
end
|
265
|
-
File.chmod(0700, filename)
|
266
266
|
if system(filename)
|
267
267
|
return dir
|
268
268
|
else
|
@@ -283,9 +283,9 @@ module PhusionPassenger
|
|
283
283
|
filename = "#{dir}/#{basename}"
|
284
284
|
begin
|
285
285
|
File.open(filename, 'w') do |f|
|
286
|
+
f.chmod(0700, filename)
|
286
287
|
f.puts("#!/bin/sh")
|
287
288
|
end
|
288
|
-
File.chmod(0700, filename)
|
289
289
|
if system(filename)
|
290
290
|
return dir
|
291
291
|
else
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: binary
|
2
2
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
# Copyright (c) 2010-
|
3
|
+
# Copyright (c) 2010-2018 Phusion Holding B.V.
|
4
4
|
#
|
5
5
|
# "Passenger", "Phusion Passenger" and "Union Station" are registered
|
6
6
|
# trademarks of Phusion Holding B.V.
|
@@ -648,8 +648,8 @@ private
|
|
648
648
|
def run_command_while_capturing_output(command)
|
649
649
|
# Create tempfile for storing the command's output.
|
650
650
|
tempfile = Tempfile.new('daemon-output')
|
651
|
+
tempfile.chmod(0666)
|
651
652
|
tempfile_path = tempfile.path
|
652
|
-
File.chmod(0666, tempfile_path)
|
653
653
|
tempfile.close
|
654
654
|
|
655
655
|
if self.class.fork_supported? || self.class.spawn_supported?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: passenger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.3.
|
4
|
+
version: 5.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Phusion - http://www.phusion.nl/
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -450,6 +450,8 @@ files:
|
|
450
450
|
- src/cxx_supportlib/FileTools/PathManip.h
|
451
451
|
- src/cxx_supportlib/FileTools/PathManipCBindings.cpp
|
452
452
|
- src/cxx_supportlib/FileTools/PathManipCBindings.h
|
453
|
+
- src/cxx_supportlib/FileTools/PathSecurityCheck.cpp
|
454
|
+
- src/cxx_supportlib/FileTools/PathSecurityCheck.h
|
453
455
|
- src/cxx_supportlib/Hooks.h
|
454
456
|
- src/cxx_supportlib/InstanceDirectory.h
|
455
457
|
- src/cxx_supportlib/Integrations/LibevJsonUtils.h
|