passenger 6.0.1 → 6.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +21 -0
- data/CONTRIBUTORS +3 -0
- data/bin/passenger-status +15 -0
- data/build/misc.rb +3 -1
- data/resources/templates/standalone/http.erb +1 -0
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/CoreMain.cpp +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +5 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +15 -0
- data/src/apache2_module/Hooks.cpp +1 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +9 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +11 -0
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/LoggingKit/Config.h +1 -0
- data/src/cxx_supportlib/LoggingKit/Implementation.cpp +15 -9
- data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +20 -19
- data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +6 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
- data/src/nginx_module/Configuration.c +0 -9
- data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +5 -0
- data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +11 -0
- data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +4 -0
- data/src/nginx_module/ngx_http_passenger_module.c +1 -0
- data/src/ruby_native_extension/extconf.rb +7 -0
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +8 -0
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +7 -0
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +8 -0
- 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/utils/tee_input.rb +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0619ca90cabc94ee6b8801d143b14877ab15500d'
|
4
|
+
data.tar.gz: f65f9070719053192fcc50206cb146cd18dbba2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e844139554498a4662950e649dcf56b768bc74f9a306ef070d13fa504e2f18869e701fd8ceb064aaba5bb4987277ee9910f8aaf2ec8135f60823645895a1965
|
7
|
+
data.tar.gz: 8b0bc8083d5a620506813ae1946fc900e3ae65016fcd552a5c8ea6273d0cf247482d676146eb889fa776b1059e91d4dc51249c9aa7a2c070120f2d9458e32992
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
Release 6.0.2
|
2
|
+
-------------
|
3
|
+
|
4
|
+
* Allow compilation to work when Apple messed up their system ruby headers.
|
5
|
+
* Only try to read pid 1's /proc files as root, in container detection. Closes GH-2168.
|
6
|
+
* Add an option to disable prefixing application logs with "App PID stdout": `PassengerDisableLogPrefix` (Apache) / `passenger_disable_log_prefix` (Nginx). Closes GH-1915.
|
7
|
+
* Add support for identifying the Passenger instance by PID. Closes GH-2146. Contributed by Saverio Miroddi (@saveriomiroddi).
|
8
|
+
* [Ruby] Made Passenger more resiliant to Rack bugs. Closes GH-2150.
|
9
|
+
* [Nginx] Do not touch Nginx's proxy_temp_path var in Passenger's nginx modules. Closes GH-2075. Contributed by Roman Berestnikov-Sivolov (@ROMB).
|
10
|
+
* Updated Ruby versions used in precompiled binaries (used for e.g. gem installs) to include 2.6.1.
|
11
|
+
* Updated various library versions used in precompiled binaries (used for e.g. gem installs):
|
12
|
+
|
13
|
+
- Curl: 7.64.0 (was: 7.63.0)
|
14
|
+
- Ruby: 2.6.1 (was: 2.6.0)
|
15
|
+
- RubyGems 3.0.2 (was: 3.0.1)
|
16
|
+
- ccache 3.6 (was: 3.5)
|
17
|
+
- GnuPG 2.2.13 (was: 2.2.12)
|
18
|
+
- libassuan 2.5.3 (was: 2.5.2)
|
19
|
+
- libgpg_error 1.35 (was: 1.33)
|
20
|
+
|
21
|
+
|
1
22
|
Release 6.0.1
|
2
23
|
-------------
|
3
24
|
|
data/CONTRIBUTORS
CHANGED
@@ -40,6 +40,7 @@ Gokulnath Manakkattil
|
|
40
40
|
Gregory Potamianos
|
41
41
|
Hongli Lai (Phusion)
|
42
42
|
Ian Ehlert
|
43
|
+
Ian Kottman
|
43
44
|
Igor Vuk
|
44
45
|
isaac
|
45
46
|
Isaac Reuben
|
@@ -87,11 +88,13 @@ Richard Michael
|
|
87
88
|
Rob Paisley
|
88
89
|
Robin Bowes
|
89
90
|
Romain Tartière
|
91
|
+
ROMB
|
90
92
|
Ruslan Ermilov (NGINX Inc)
|
91
93
|
Ryan Schwartz
|
92
94
|
Ryo Onodera
|
93
95
|
Saimon Moore
|
94
96
|
Sam Pohlenz
|
97
|
+
Saverio Miroddi
|
95
98
|
Sean Wilkinson
|
96
99
|
Sebastian Delmont
|
97
100
|
Sebastian Welther
|
data/bin/passenger-status
CHANGED
@@ -55,6 +55,8 @@ DEFAULT_OPTIONS = { :show => 'pool', :color => STDOUT.tty? }.freeze
|
|
55
55
|
def command_show_status(argv, options)
|
56
56
|
if argv.empty?
|
57
57
|
instance = find_sole_instance
|
58
|
+
elsif options[:pid_identifier]
|
59
|
+
instance = find_instance_by_watchdog_pid(argv[0].to_i)
|
58
60
|
else
|
59
61
|
instance = find_instance_by_name_prefix(argv[0])
|
60
62
|
end
|
@@ -100,6 +102,16 @@ def find_instance_by_name_prefix(name)
|
|
100
102
|
end
|
101
103
|
end
|
102
104
|
|
105
|
+
def find_instance_by_watchdog_pid(pid)
|
106
|
+
instance = InstanceRegistry.new.find_by_watchdog_pid(pid)
|
107
|
+
|
108
|
+
if instance
|
109
|
+
return instance
|
110
|
+
else
|
111
|
+
abort "ERROR: there doesn't seem to be a #{PROGRAM_NAME} instance running with the pid #{pid}."
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
103
115
|
def show_status(instance, options)
|
104
116
|
# if the noshow override is not specified, the default is to show the header, unless show=xml
|
105
117
|
if options[:noheader] != true && options[:show] != 'xml'
|
@@ -292,6 +304,9 @@ def create_option_parser(options)
|
|
292
304
|
opts.on("--force-colors", "Display colors even if stdout is not a TTY") do
|
293
305
|
options[:color] = true
|
294
306
|
end
|
307
|
+
opts.on("--pid-identifier", "Identify instance by [Watchdog] PID, rather than name.") do
|
308
|
+
options[:pid_identifier] = true
|
309
|
+
end
|
295
310
|
opts.on("--verbose", "-v", "Show verbose information.") do
|
296
311
|
options[:verbose] = true
|
297
312
|
end
|
data/build/misc.rb
CHANGED
@@ -143,6 +143,8 @@ task :contributors do
|
|
143
143
|
entries.push "Floor Drees (Phusion)"
|
144
144
|
entries.delete "Luuk Hafkamp"
|
145
145
|
entries.push "Luuk Hafkamp (Phusion)"
|
146
|
+
entries.delete "Luuk Hendriks"
|
147
|
+
entries.push "Luuk Hendriks (Phusion)"
|
146
148
|
|
147
149
|
# Non-employee contributors
|
148
150
|
entries.push "Ruslan Ermilov (NGINX Inc)"
|
@@ -152,7 +154,7 @@ task :contributors do
|
|
152
154
|
entries.push "Yichun Zhang"
|
153
155
|
|
154
156
|
File.open("CONTRIBUTORS", "w") do |f|
|
155
|
-
f.puts(entries.sort{ |a, b| a.downcase <=> b.downcase }.join("\n"))
|
157
|
+
f.puts(entries.sort{ |a, b| a.downcase <=> b.downcase }.uniq.join("\n"))
|
156
158
|
end
|
157
159
|
puts "Updated CONTRIBUTORS"
|
158
160
|
end
|
@@ -27,6 +27,7 @@ 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) %>
|
data/src/agent/Core/Config.h
CHANGED
@@ -157,7 +157,7 @@ using namespace std;
|
|
157
157
|
* security_update_checker_interval unsigned integer - default(86400)
|
158
158
|
* security_update_checker_proxy_url string - -
|
159
159
|
* security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
|
160
|
-
* server_software string - default("Phusion_Passenger/6.0.
|
160
|
+
* server_software string - default("Phusion_Passenger/6.0.2")
|
161
161
|
* show_version_in_header boolean - default(true)
|
162
162
|
* single_app_mode_app_root string - default,read_only
|
163
163
|
* single_app_mode_app_start_command string - read_only
|
@@ -113,7 +113,7 @@ parseControllerBenchmarkMode(const StaticString &mode) {
|
|
113
113
|
* multi_app boolean - default(true),read_only
|
114
114
|
* request_freelist_limit unsigned integer - default(1024)
|
115
115
|
* response_buffer_high_watermark unsigned integer - default(134217728)
|
116
|
-
* server_software string - default("Phusion_Passenger/6.0.
|
116
|
+
* server_software string - default("Phusion_Passenger/6.0.2")
|
117
117
|
* show_version_in_header boolean - default(true)
|
118
118
|
* start_reading_after_accept boolean - default(true)
|
119
119
|
* stat_throttle_rate unsigned integer - default(10)
|
data/src/agent/Core/CoreMain.cpp
CHANGED
data/src/agent/Watchdog/Config.h
CHANGED
@@ -146,7 +146,7 @@ using namespace std;
|
|
146
146
|
* security_update_checker_interval unsigned integer - default(86400)
|
147
147
|
* security_update_checker_proxy_url string - -
|
148
148
|
* security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
|
149
|
-
* server_software string - default("Phusion_Passenger/6.0.
|
149
|
+
* server_software string - default("Phusion_Passenger/6.0.2")
|
150
150
|
* setsid boolean - default(false)
|
151
151
|
* show_version_in_header boolean - default(true)
|
152
152
|
* single_app_mode_app_root string - default,read_only
|
@@ -177,6 +177,11 @@ extern "C" const command_rec passenger_commands[] = {
|
|
177
177
|
NULL,
|
178
178
|
RSRC_CONF,
|
179
179
|
"Whether to disable Phusion Passenger anonymous telemetry."),
|
180
|
+
AP_INIT_FLAG("PassengerDisableLogPrefix",
|
181
|
+
(FlagFunc) cmd_passenger_disable_log_prefix,
|
182
|
+
NULL,
|
183
|
+
RSRC_CONF,
|
184
|
+
"Disable prefixing log statements with PID and channel."),
|
180
185
|
AP_INIT_FLAG("PassengerDisableSecurityUpdateCheck",
|
181
186
|
(FlagFunc) cmd_passenger_disable_security_update_check,
|
182
187
|
NULL,
|
@@ -73,6 +73,11 @@ ConfigManifestGenerator::autoGenerated_setGlobalConfigDefaults() {
|
|
73
73
|
"PassengerDisableAnonymousTelemetry",
|
74
74
|
false);
|
75
75
|
|
76
|
+
addOptionsContainerStaticDefaultBool(
|
77
|
+
globalConfigContainer,
|
78
|
+
"PassengerDisableLogPrefix",
|
79
|
+
false);
|
80
|
+
|
76
81
|
addOptionsContainerStaticDefaultBool(
|
77
82
|
globalConfigContainer,
|
78
83
|
"PassengerDisableSecurityUpdateCheck",
|
@@ -334,6 +334,21 @@ cmd_passenger_disable_anonymous_telemetry(cmd_parms *cmd, void *pcfg, const char
|
|
334
334
|
return NULL;
|
335
335
|
}
|
336
336
|
|
337
|
+
static const char *
|
338
|
+
cmd_passenger_disable_log_prefix(cmd_parms *cmd, void *pcfg, const char *arg) {
|
339
|
+
const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
|
340
|
+
if (err != NULL) {
|
341
|
+
ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0, cmd->temp_pool,
|
342
|
+
"WARNING: %s", err);
|
343
|
+
}
|
344
|
+
|
345
|
+
serverConfig.disableLogPrefixSourceFile = cmd->directive->filename;
|
346
|
+
serverConfig.disableLogPrefixSourceLine = cmd->directive->line_num;
|
347
|
+
serverConfig.disableLogPrefixExplicitlySet = true;
|
348
|
+
serverConfig.disableLogPrefix = arg != NULL;
|
349
|
+
return NULL;
|
350
|
+
}
|
351
|
+
|
337
352
|
static const char *
|
338
353
|
cmd_passenger_disable_security_update_check(cmd_parms *cmd, void *pcfg, const char *arg) {
|
339
354
|
const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
|
@@ -1354,6 +1354,7 @@ public:
|
|
1354
1354
|
config["admin_panel_auth_type"] = nonEmptyString(serverConfig.adminPanelAuthType);
|
1355
1355
|
config["admin_panel_username"] = nonEmptyString(serverConfig.adminPanelUsername);
|
1356
1356
|
config["admin_panel_password"] = nonEmptyString(serverConfig.adminPanelPassword);
|
1357
|
+
config["disable_log_prefix"] = serverConfig.disableLogPrefix;
|
1357
1358
|
|
1358
1359
|
if (!serverConfig.logFile.empty()) {
|
1359
1360
|
config["log_target"] = serverConfig.logFile.toString();
|
@@ -155,6 +155,15 @@ ConfigManifestGenerator::autoGenerated_generateConfigManifestForServerConfig() {
|
|
155
155
|
serverConfig.disableAnonymousTelemetrySourceLine);
|
156
156
|
hierarchyMember["value"] = serverConfig.disableAnonymousTelemetry == Apache2Module::ENABLED;
|
157
157
|
}
|
158
|
+
if (serverConfig.disableLogPrefixExplicitlySet) {
|
159
|
+
Json::Value &optionContainer = findOrCreateOptionContainer(globalOptionsContainer,
|
160
|
+
"PassengerDisableLogPrefix",
|
161
|
+
sizeof("PassengerDisableLogPrefix") - 1);
|
162
|
+
Json::Value &hierarchyMember = addOptionContainerHierarchyMember(optionContainer,
|
163
|
+
serverConfig.disableLogPrefixSourceFile,
|
164
|
+
serverConfig.disableLogPrefixSourceLine);
|
165
|
+
hierarchyMember["value"] = serverConfig.disableLogPrefix == Apache2Module::ENABLED;
|
166
|
+
}
|
158
167
|
if (serverConfig.disableSecurityUpdateCheckExplicitlySet) {
|
159
168
|
Json::Value &optionContainer = findOrCreateOptionContainer(globalOptionsContainer,
|
160
169
|
"PassengerDisableSecurityUpdateCheck",
|
@@ -62,6 +62,11 @@ struct AutoGeneratedServerConfig {
|
|
62
62
|
*/
|
63
63
|
bool disableAnonymousTelemetry;
|
64
64
|
|
65
|
+
/*
|
66
|
+
* Disable prefixing log statements with PID and channel.
|
67
|
+
*/
|
68
|
+
bool disableLogPrefix;
|
69
|
+
|
65
70
|
/*
|
66
71
|
* Whether to disable the Phusion Passenger security update check & notification.
|
67
72
|
*/
|
@@ -199,6 +204,7 @@ struct AutoGeneratedServerConfig {
|
|
199
204
|
|
200
205
|
|
201
206
|
StaticString disableAnonymousTelemetrySourceFile;
|
207
|
+
StaticString disableLogPrefixSourceFile;
|
202
208
|
StaticString disableSecurityUpdateCheckSourceFile;
|
203
209
|
StaticString showVersionInHeaderSourceFile;
|
204
210
|
StaticString turbocachingSourceFile;
|
@@ -228,6 +234,7 @@ struct AutoGeneratedServerConfig {
|
|
228
234
|
StaticString prestartURLsSourceFile;
|
229
235
|
|
230
236
|
unsigned int disableAnonymousTelemetrySourceLine;
|
237
|
+
unsigned int disableLogPrefixSourceLine;
|
231
238
|
unsigned int disableSecurityUpdateCheckSourceLine;
|
232
239
|
unsigned int showVersionInHeaderSourceLine;
|
233
240
|
unsigned int turbocachingSourceLine;
|
@@ -257,6 +264,7 @@ struct AutoGeneratedServerConfig {
|
|
257
264
|
unsigned int prestartURLsSourceLine;
|
258
265
|
|
259
266
|
bool disableAnonymousTelemetryExplicitlySet: 1;
|
267
|
+
bool disableLogPrefixExplicitlySet: 1;
|
260
268
|
bool disableSecurityUpdateCheckExplicitlySet: 1;
|
261
269
|
bool showVersionInHeaderExplicitlySet: 1;
|
262
270
|
bool turbocachingExplicitlySet: 1;
|
@@ -288,6 +296,7 @@ struct AutoGeneratedServerConfig {
|
|
288
296
|
|
289
297
|
AutoGeneratedServerConfig() {
|
290
298
|
disableAnonymousTelemetry = false;
|
299
|
+
disableLogPrefix = false;
|
291
300
|
disableSecurityUpdateCheck = false;
|
292
301
|
showVersionInHeader = true;
|
293
302
|
turbocaching = true;
|
@@ -345,6 +354,7 @@ struct AutoGeneratedServerConfig {
|
|
345
354
|
*/
|
346
355
|
|
347
356
|
disableAnonymousTelemetrySourceLine = 0;
|
357
|
+
disableLogPrefixSourceLine = 0;
|
348
358
|
disableSecurityUpdateCheckSourceLine = 0;
|
349
359
|
showVersionInHeaderSourceLine = 0;
|
350
360
|
turbocachingSourceLine = 0;
|
@@ -374,6 +384,7 @@ struct AutoGeneratedServerConfig {
|
|
374
384
|
prestartURLsSourceLine = 0;
|
375
385
|
|
376
386
|
disableAnonymousTelemetryExplicitlySet = false;
|
387
|
+
disableLogPrefixExplicitlySet = false;
|
377
388
|
disableSecurityUpdateCheckExplicitlySet = false;
|
378
389
|
showVersionInHeaderExplicitlySet = false;
|
379
390
|
turbocachingExplicitlySet = false;
|
@@ -81,7 +81,7 @@
|
|
81
81
|
#define PASSENGER_API_VERSION_MAJOR 0
|
82
82
|
#define PASSENGER_API_VERSION_MINOR 3
|
83
83
|
#define PASSENGER_DEFAULT_USER "nobody"
|
84
|
-
#define PASSENGER_VERSION "6.0.
|
84
|
+
#define PASSENGER_VERSION "6.0.2"
|
85
85
|
#define POOL_HELPER_THREAD_STACK_SIZE 262144
|
86
86
|
#define PROCESS_SHUTDOWN_TIMEOUT 60
|
87
87
|
#define PROCESS_SHUTDOWN_TIMEOUT_DISPLAY "1 minute"
|
@@ -409,16 +409,18 @@ realLogAppOutput(const HashedStaticString &groupName, int targetFd,
|
|
409
409
|
const char *pidStr, unsigned int pidStrLen,
|
410
410
|
const char *channelName, unsigned int channelNameLen,
|
411
411
|
const char *message, unsigned int messageLen, int appLogFile,
|
412
|
-
bool saveLog)
|
412
|
+
bool saveLog, bool prefixLogs)
|
413
413
|
{
|
414
414
|
char *pos = buf;
|
415
415
|
char *end = buf + bufSize;
|
416
416
|
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
417
|
+
if (prefixLogs) {
|
418
|
+
pos = appendData(pos, end, "App ");
|
419
|
+
pos = appendData(pos, end, pidStr, pidStrLen);
|
420
|
+
pos = appendData(pos, end, " ");
|
421
|
+
pos = appendData(pos, end, channelName, channelNameLen);
|
422
|
+
pos = appendData(pos, end, ": ");
|
423
|
+
}
|
422
424
|
pos = appendData(pos, end, message, messageLen);
|
423
425
|
pos = appendData(pos, end, "\n");
|
424
426
|
|
@@ -437,6 +439,7 @@ logAppOutput(const HashedStaticString &groupName, pid_t pid, const StaticString
|
|
437
439
|
{
|
438
440
|
int targetFd;
|
439
441
|
bool saveLog = false;
|
442
|
+
bool prefixLogs = true;
|
440
443
|
|
441
444
|
if (OXT_LIKELY(context != NULL)) {
|
442
445
|
const ConfigRealization *configRealization = context->getConfigRealization();
|
@@ -446,6 +449,7 @@ logAppOutput(const HashedStaticString &groupName, pid_t pid, const StaticString
|
|
446
449
|
|
447
450
|
targetFd = configRealization->targetFd;
|
448
451
|
saveLog = configRealization->saveLog;
|
452
|
+
prefixLogs = !configRealization->disableLogPrefix;
|
449
453
|
} else {
|
450
454
|
targetFd = STDERR_FILENO;
|
451
455
|
}
|
@@ -476,14 +480,14 @@ logAppOutput(const HashedStaticString &groupName, pid_t pid, const StaticString
|
|
476
480
|
buf, sizeof(buf),
|
477
481
|
pidStr, pidStrLen,
|
478
482
|
channelName.data(), channelName.size(),
|
479
|
-
message, size, fd, saveLog);
|
483
|
+
message, size, fd, saveLog, prefixLogs);
|
480
484
|
} else {
|
481
485
|
DynamicBuffer buf(totalLen);
|
482
486
|
realLogAppOutput(groupName, targetFd,
|
483
487
|
buf.data, totalLen,
|
484
488
|
pidStr, pidStrLen,
|
485
489
|
channelName.data(), channelName.size(),
|
486
|
-
message, size, fd, saveLog);
|
490
|
+
message, size, fd, saveLog, prefixLogs);
|
487
491
|
}
|
488
492
|
if(fd > -1){close(fd);}
|
489
493
|
}
|
@@ -778,6 +782,7 @@ Schema::Schema() {
|
|
778
782
|
add("redirect_stderr", BOOL_TYPE, OPTIONAL, true);
|
779
783
|
add("app_output_log_level", STRING_TYPE, OPTIONAL, DEFAULT_APP_OUTPUT_LOG_LEVEL_NAME);
|
780
784
|
add("buffer_logs", BOOL_TYPE, OPTIONAL, false);
|
785
|
+
add("disable_log_prefix", BOOL_TYPE, OPTIONAL, false);
|
781
786
|
|
782
787
|
addValidator(boost::bind(validateLogLevel, "level",
|
783
788
|
boost::placeholders::_1, boost::placeholders::_2));
|
@@ -798,7 +803,8 @@ ConfigRealization::ConfigRealization(const ConfigKit::Store &store)
|
|
798
803
|
: level(parseLevel(store["level"].asString())),
|
799
804
|
appOutputLogLevel(parseLevel(store["app_output_log_level"].asString())),
|
800
805
|
saveLog(store["buffer_logs"].asBool()),
|
801
|
-
finalized(false)
|
806
|
+
finalized(false),
|
807
|
+
disableLogPrefix(store["disable_log_prefix"].asBool())
|
802
808
|
{
|
803
809
|
if (store["target"].isMember("stderr")) {
|
804
810
|
targetType = STDERR_TARGET;
|
@@ -43,33 +43,34 @@ _linuxAutoDetectInContainer() {
|
|
43
43
|
return (file.length() > 0);
|
44
44
|
}
|
45
45
|
|
46
|
-
if (
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
46
|
+
if (getuid() == 0) {
|
47
|
+
if (fileExists("/proc/1/environ")) {
|
48
|
+
string file = unsafeReadFile("/proc/1/environ");
|
49
|
+
if (file.size() > 0) {
|
50
|
+
vector<string> v;
|
51
|
+
split(file,'\0', v);
|
52
|
+
for(vector<string>::iterator it = v.begin(); it != v.end(); ++it) {
|
53
|
+
if (startsWith(*it, "container=")) {
|
54
|
+
return true;
|
55
|
+
}
|
54
56
|
}
|
55
57
|
}
|
56
58
|
}
|
57
|
-
}
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
if (fileExists("/proc/1/sched")) {
|
61
|
+
string file = unsafeReadFile("/proc/1/sched");
|
62
|
+
if (file.length() >= 0) {
|
63
|
+
const char t = file[0];
|
64
|
+
if (t == '\0') {
|
65
|
+
return false;
|
66
|
+
}
|
66
67
|
|
67
|
-
|
68
|
-
|
68
|
+
if (!startsWith(file, "(1,")) {
|
69
|
+
return true;
|
70
|
+
}
|
69
71
|
}
|
70
72
|
}
|
71
73
|
}
|
72
|
-
|
73
74
|
return false;
|
74
75
|
}
|
75
76
|
|
@@ -86,6 +86,14 @@
|
|
86
86
|
offsetof(passenger_main_conf_t, autogenerated.log_file),
|
87
87
|
NULL
|
88
88
|
},
|
89
|
+
{
|
90
|
+
ngx_string("passenger_disable_log_prefix"),
|
91
|
+
NGX_HTTP_MAIN_CONF | NGX_CONF_FLAG,
|
92
|
+
passenger_conf_set_disable_log_prefix,
|
93
|
+
NGX_HTTP_MAIN_CONF_OFFSET,
|
94
|
+
offsetof(passenger_main_conf_t, autogenerated.disable_log_prefix),
|
95
|
+
NULL
|
96
|
+
},
|
89
97
|
{
|
90
98
|
ngx_string("passenger_file_descriptor_log_file"),
|
91
99
|
NGX_HTTP_MAIN_CONF | NGX_CONF_TAKE1,
|
@@ -61,6 +61,12 @@ set_manifest_autogenerated_global_conf_defaults(manifest_gen_ctx_t *ctx) {
|
|
61
61
|
"Nginx's global error log",
|
62
62
|
sizeof("Nginx's global error log") - 1);
|
63
63
|
|
64
|
+
add_manifest_options_container_static_default_bool(ctx,
|
65
|
+
ctx->global_config_container,
|
66
|
+
"passenger_disable_log_prefix",
|
67
|
+
sizeof("passenger_disable_log_prefix") - 1,
|
68
|
+
0);
|
69
|
+
|
64
70
|
add_manifest_options_container_dynamic_default(ctx,
|
65
71
|
ctx->global_config_container,
|
66
72
|
"passenger_data_buffer_dir",
|
@@ -145,6 +145,18 @@ passenger_conf_set_log_file(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {
|
|
145
145
|
return ngx_conf_set_str_slot(cf, cmd, conf);
|
146
146
|
}
|
147
147
|
|
148
|
+
static char *
|
149
|
+
passenger_conf_set_disable_log_prefix(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {
|
150
|
+
passenger_main_conf_t *passenger_conf = conf;
|
151
|
+
|
152
|
+
passenger_conf->autogenerated.disable_log_prefix_explicitly_set = 1;
|
153
|
+
record_main_conf_source_location(cf,
|
154
|
+
&passenger_conf->autogenerated.disable_log_prefix_source_file,
|
155
|
+
&passenger_conf->autogenerated.disable_log_prefix_source_line);
|
156
|
+
|
157
|
+
return ngx_conf_set_flag_slot(cf, cmd, conf);
|
158
|
+
}
|
159
|
+
|
148
160
|
static char *
|
149
161
|
passenger_conf_set_file_descriptor_log_file(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {
|
150
162
|
passenger_main_conf_t *passenger_conf = conf;
|
@@ -61,10 +61,6 @@ static ngx_str_t headers_to_hide[] = {
|
|
61
61
|
|
62
62
|
passenger_main_conf_t passenger_main_conf;
|
63
63
|
|
64
|
-
static ngx_path_init_t ngx_http_proxy_temp_path = {
|
65
|
-
ngx_string(NGX_HTTP_PROXY_TEMP_PATH), { 1, 2, 0 }
|
66
|
-
};
|
67
|
-
|
68
64
|
|
69
65
|
static ngx_int_t merge_headers(ngx_conf_t *cf, passenger_loc_conf_t *conf,
|
70
66
|
passenger_loc_conf_t *prev);
|
@@ -577,11 +573,6 @@ passenger_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
|
577
573
|
|NGX_HTTP_UPSTREAM_FT_OFF;
|
578
574
|
}
|
579
575
|
|
580
|
-
ngx_conf_merge_path_value(cf,
|
581
|
-
&conf->upstream_config.temp_path,
|
582
|
-
prev->upstream_config.temp_path,
|
583
|
-
&ngx_http_proxy_temp_path);
|
584
|
-
|
585
576
|
#if (NGX_HTTP_CACHE)
|
586
577
|
|
587
578
|
#if NGINX_VERSION_NUM >= 1007009
|
@@ -49,6 +49,7 @@ passenger_create_autogenerated_main_conf(passenger_autogenerated_main_conf_t *co
|
|
49
49
|
conf->log_level = NGX_CONF_UNSET_UINT;
|
50
50
|
conf->log_file.data = NULL;
|
51
51
|
conf->log_file.len = 0;
|
52
|
+
conf->disable_log_prefix = NGX_CONF_UNSET;
|
52
53
|
conf->file_descriptor_log_file.data = NULL;
|
53
54
|
conf->file_descriptor_log_file.len = 0;
|
54
55
|
conf->data_buffer_dir.data = NULL;
|
@@ -110,6 +111,10 @@ passenger_create_autogenerated_main_conf(passenger_autogenerated_main_conf_t *co
|
|
110
111
|
conf->log_file_source_file.len = 0;
|
111
112
|
conf->log_file_source_line = 0;
|
112
113
|
conf->log_file_explicitly_set = 0;
|
114
|
+
conf->disable_log_prefix_source_file.data = NULL;
|
115
|
+
conf->disable_log_prefix_source_file.len = 0;
|
116
|
+
conf->disable_log_prefix_source_line = 0;
|
117
|
+
conf->disable_log_prefix_explicitly_set = 0;
|
113
118
|
conf->file_descriptor_log_file_source_file.data = NULL;
|
114
119
|
conf->file_descriptor_log_file_source_file.len = 0;
|
115
120
|
conf->file_descriptor_log_file_source_line = 0;
|
@@ -113,6 +113,17 @@ generate_config_manifest_for_autogenerated_main_conf(manifest_gen_ctx_t *ctx, pa
|
|
113
113
|
(const char *) conf->autogenerated.log_file.data,
|
114
114
|
conf->autogenerated.log_file.len);
|
115
115
|
}
|
116
|
+
if (conf->autogenerated.disable_log_prefix_explicitly_set) {
|
117
|
+
option_container = find_or_create_manifest_option_container(ctx,
|
118
|
+
ctx->global_config_container,
|
119
|
+
"passenger_disable_log_prefix",
|
120
|
+
sizeof("passenger_disable_log_prefix") - 1);
|
121
|
+
hierarchy_member = add_manifest_option_container_hierarchy_member(option_container,
|
122
|
+
&conf->autogenerated.disable_log_prefix_source_file,
|
123
|
+
conf->autogenerated.disable_log_prefix_source_line);
|
124
|
+
psg_json_value_set_bool(hierarchy_member, "value",
|
125
|
+
conf->autogenerated.disable_log_prefix);
|
126
|
+
}
|
116
127
|
if (conf->autogenerated.file_descriptor_log_file_explicitly_set) {
|
117
128
|
option_container = find_or_create_manifest_option_container(ctx,
|
118
129
|
ctx->global_config_container,
|
@@ -44,6 +44,7 @@ typedef struct {
|
|
44
44
|
ngx_uint_t core_file_descriptor_ulimit;
|
45
45
|
ngx_array_t *ctl;
|
46
46
|
ngx_flag_t disable_anonymous_telemetry;
|
47
|
+
ngx_flag_t disable_log_prefix;
|
47
48
|
ngx_flag_t disable_security_update_check;
|
48
49
|
ngx_uint_t log_level;
|
49
50
|
ngx_uint_t max_instances_per_app;
|
@@ -84,6 +85,7 @@ typedef struct {
|
|
84
85
|
ngx_str_t default_group_source_file;
|
85
86
|
ngx_str_t default_user_source_file;
|
86
87
|
ngx_str_t disable_anonymous_telemetry_source_file;
|
88
|
+
ngx_str_t disable_log_prefix_source_file;
|
87
89
|
ngx_str_t disable_security_update_check_source_file;
|
88
90
|
ngx_str_t dump_config_manifest_source_file;
|
89
91
|
ngx_str_t file_descriptor_log_file_source_file;
|
@@ -116,6 +118,7 @@ typedef struct {
|
|
116
118
|
ngx_uint_t default_group_source_line;
|
117
119
|
ngx_uint_t default_user_source_line;
|
118
120
|
ngx_uint_t disable_anonymous_telemetry_source_line;
|
121
|
+
ngx_uint_t disable_log_prefix_source_line;
|
119
122
|
ngx_uint_t disable_security_update_check_source_line;
|
120
123
|
ngx_uint_t dump_config_manifest_source_line;
|
121
124
|
ngx_uint_t file_descriptor_log_file_source_line;
|
@@ -148,6 +151,7 @@ typedef struct {
|
|
148
151
|
ngx_int_t default_group_explicitly_set;
|
149
152
|
ngx_int_t default_user_explicitly_set;
|
150
153
|
ngx_int_t disable_anonymous_telemetry_explicitly_set;
|
154
|
+
ngx_int_t disable_log_prefix_explicitly_set;
|
151
155
|
ngx_int_t disable_security_update_check_explicitly_set;
|
152
156
|
ngx_int_t dump_config_manifest_explicitly_set;
|
153
157
|
ngx_int_t file_descriptor_log_file_explicitly_set;
|
@@ -362,6 +362,7 @@ start_watchdog(ngx_cycle_t *cycle) {
|
|
362
362
|
psg_json_value_set_value (w_config, "config_manifest", -1, passenger_main_conf.manifest);
|
363
363
|
psg_json_value_set_ngx_uint (w_config, "log_level", autogenerated_main_conf->log_level);
|
364
364
|
psg_json_value_set_ngx_str_ne(w_config, "file_descriptor_log_target", &autogenerated_main_conf->file_descriptor_log_file);
|
365
|
+
psg_json_value_set_ngx_flag (w_config, "disable_log_prefix", autogenerated_main_conf->disable_log_prefix);
|
365
366
|
psg_json_value_set_ngx_uint (w_config, "core_file_descriptor_ulimit", autogenerated_main_conf->core_file_descriptor_ulimit);
|
366
367
|
psg_json_value_set_ngx_uint (w_config, "controller_socket_backlog", autogenerated_main_conf->socket_backlog);
|
367
368
|
psg_json_value_set_ngx_str_ne(w_config, "controller_file_buffered_channel_buffer_dir", &autogenerated_main_conf->data_buffer_dir);
|
@@ -21,6 +21,13 @@
|
|
21
21
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
22
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
23
|
# THE SOFTWARE.
|
24
|
+
|
25
|
+
# Apple has a habit of getting their Ruby headers wrong, so if we are building using system ruby we need to patch things up, sierra & mojave both did this.
|
26
|
+
# eg https://openradar.appspot.com/46465917
|
27
|
+
if RUBY_PLATFORM =~ /darwin/ && !File.exists?(RbConfig::CONFIG["rubyarchhdrdir"])
|
28
|
+
RbConfig::CONFIG["rubyarchhdrdir"].sub!(RUBY_PLATFORM.split('-').last, Dir.entries(File.dirname(RbConfig::CONFIG["rubyarchhdrdir"])).reject{|d|d.start_with?(".","ruby")}.first.split('-').last)
|
29
|
+
end
|
30
|
+
|
24
31
|
require 'mkmf'
|
25
32
|
|
26
33
|
$LIBS << " -lpthread" if $LIBS !~ /-lpthread/
|
@@ -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 = '6.0.
|
34
|
+
VERSION_STRING = '6.0.2'
|
35
35
|
|
36
36
|
# Tip: find the SHA-256 with ./dev/nginx_version_sha2 <VERSION>
|
37
37
|
PREFERRED_NGINX_VERSION = '1.15.8'
|
@@ -82,6 +82,14 @@ module PhusionPassenger
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
# :watchdog_pid: expected Integer.
|
86
|
+
#
|
87
|
+
# return: the matching instance, if found; nil otherwise.
|
88
|
+
#
|
89
|
+
def find_by_watchdog_pid(pid, options = {})
|
90
|
+
return list(options).detect { |instance| instance.watchdog_pid == pid }
|
91
|
+
end
|
92
|
+
|
85
93
|
private
|
86
94
|
def default_paths
|
87
95
|
if result = string_env("PASSENGER_INSTANCE_REGISTRY_DIR")
|
@@ -137,6 +137,13 @@ APACHE2_CONFIGURATION_OPTIONS = [
|
|
137
137
|
:dynamic_default => "Apache's global error log",
|
138
138
|
:desc => "The #{PROGRAM_NAME} log file."
|
139
139
|
},
|
140
|
+
{
|
141
|
+
:name => 'PassengerDisableLogPrefix',
|
142
|
+
:type => :flag,
|
143
|
+
:context => :global,
|
144
|
+
:default => false,
|
145
|
+
:desc => "Disable prefixing log statements with PID and channel."
|
146
|
+
},
|
140
147
|
{
|
141
148
|
:name => 'PassengerSocketBacklog',
|
142
149
|
:type => :integer,
|
@@ -154,6 +154,14 @@ NGINX_CONFIGURATION_OPTIONS = [
|
|
154
154
|
:context => [:main],
|
155
155
|
:struct => 'NGX_HTTP_MAIN_CONF_OFFSET'
|
156
156
|
},
|
157
|
+
{
|
158
|
+
:name => 'passenger_disable_log_prefix',
|
159
|
+
:scope => :global,
|
160
|
+
:type => :flag,
|
161
|
+
:default => false,
|
162
|
+
:context => [:main],
|
163
|
+
:struct => 'NGX_HTTP_MAIN_CONF_OFFSET'
|
164
|
+
},
|
157
165
|
{
|
158
166
|
:name => 'passenger_file_descriptor_log_file',
|
159
167
|
:scope => :global,
|
@@ -557,6 +557,11 @@ module PhusionPassenger
|
|
557
557
|
:default => DEFAULT_LOG_LEVEL,
|
558
558
|
:desc => "Log level to use. Default: #{DEFAULT_LOG_LEVEL}"
|
559
559
|
},
|
560
|
+
{
|
561
|
+
:name => :disable_log_prefix,
|
562
|
+
:type => :boolean,
|
563
|
+
:desc => "Disable prefixing log statements with PID and channel."
|
564
|
+
},
|
560
565
|
{
|
561
566
|
:name => :admin_panel_url,
|
562
567
|
:type => :string,
|
@@ -111,6 +111,7 @@ module PhusionPassenger
|
|
111
111
|
add_param(command, :instance_registry_dir, "--instance-registry-dir")
|
112
112
|
add_param(command, :data_buffer_dir, "--data-buffer-dir")
|
113
113
|
add_param(command, :log_level, "--log-level")
|
114
|
+
add_flag_param(command, :disable_log_prefix, "--disable-log-prefix")
|
114
115
|
@options[:ctls].each do |ctl|
|
115
116
|
command << " --ctl #{Shellwords.escape ctl}"
|
116
117
|
end
|
@@ -191,6 +191,12 @@ class TeeInput
|
|
191
191
|
self # Rack does not specify what the return value is here
|
192
192
|
end
|
193
193
|
|
194
|
+
# Rack repeatedly introduces bugs that rely on this method existing
|
195
|
+
# https://github.com/rack/rack/pull/1201
|
196
|
+
def eof?
|
197
|
+
socket_drained?
|
198
|
+
end
|
199
|
+
|
194
200
|
private
|
195
201
|
|
196
202
|
def socket_drained?
|
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: 6.0.
|
4
|
+
version: 6.0.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: 2019-
|
11
|
+
date: 2019-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|