passenger 5.3.4 → 5.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +13 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/build/cxx_tests.rb +12 -1
- data/build/misc.rb +2 -1
- data/build/packaging.rb +2 -0
- data/build/support/cplusplus.rb +2 -2
- data/build/support/cxx_dependency_map.rb +653 -383
- data/dev/configkit-schemas/index.json +105 -3
- data/dev/show-latest-crashlog-dir +27 -0
- data/resources/templates/standalone/http.erb +2 -0
- data/src/agent/Core/AdminPanelConnector.h +2 -2
- data/src/agent/Core/ApplicationPool/Context.h +5 -1
- data/src/agent/Core/ApplicationPool/Group.h +2 -0
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +2 -1
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +12 -19
- data/src/agent/Core/ApplicationPool/Options.h +35 -31
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +2 -1
- data/src/agent/Core/ApplicationPool/Socket.h +1 -1
- data/src/agent/Core/Config.h +38 -7
- data/src/agent/Core/ConfigChange.cpp +13 -1
- data/src/agent/Core/Controller.h +3 -1
- data/src/agent/Core/Controller/Config.h +14 -11
- data/src/agent/Core/Controller/InitRequest.cpp +6 -5
- data/src/agent/Core/Controller/InitializationAndShutdown.cpp +3 -0
- data/src/agent/Core/CoreMain.cpp +149 -34
- data/src/agent/Core/OptionParser.h +12 -1
- data/src/agent/Core/SpawningKit/Config.h +1 -1
- data/src/agent/Core/SpawningKit/Context.h +7 -1
- data/src/agent/Core/SpawningKit/Exceptions.h +15 -12
- data/src/agent/Core/SpawningKit/README.md +34 -17
- data/src/agent/Core/SpawningKit/Spawner.h +5 -3
- data/src/agent/Core/SpawningKit/UserSwitchingRules.h +5 -2
- data/src/agent/Core/TelemetryCollector.h +674 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +309 -83
- data/src/agent/Shared/Fundamentals/AbortHandler.h +18 -3
- data/src/agent/Watchdog/Config.h +21 -4
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -1
- data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +10 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +5 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +30 -0
- data/src/apache2_module/DirectoryMapper.h +24 -36
- data/src/apache2_module/Hooks.cpp +13 -5
- data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +20 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +24 -0
- data/src/cxx_supportlib/AppTypeDetector/CBindings.cpp +136 -0
- data/src/cxx_supportlib/AppTypeDetector/CBindings.h +73 -0
- data/src/cxx_supportlib/{AppTypes.h → AppTypeDetector/Detector.h} +59 -132
- data/src/cxx_supportlib/ConfigKit/README.md +90 -2
- data/src/cxx_supportlib/ConfigKit/Schema.h +58 -13
- data/src/cxx_supportlib/ConfigKit/Store.h +128 -4
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/ProcessManagement/Ruby.cpp +3 -3
- data/src/cxx_supportlib/ProcessManagement/Ruby.h +7 -2
- data/src/cxx_supportlib/ProcessManagement/Spawn.cpp +14 -7
- data/src/cxx_supportlib/ProcessManagement/Spawn.h +21 -2
- data/src/cxx_supportlib/ResourceLocator.h +1 -1
- data/src/cxx_supportlib/ServerKit/ClientRef.h +17 -7
- data/src/cxx_supportlib/ServerKit/HttpRequestRef.h +17 -7
- data/src/cxx_supportlib/Utils/IOUtils.cpp +2 -1
- data/src/cxx_supportlib/Utils/ProcessMetricsCollector.h +9 -6
- data/src/cxx_supportlib/WrapperRegistry/CBindings.cpp +85 -0
- data/src/cxx_supportlib/WrapperRegistry/CBindings.h +56 -0
- data/src/cxx_supportlib/WrapperRegistry/Entry.h +112 -0
- data/src/cxx_supportlib/WrapperRegistry/README.md +37 -0
- data/src/cxx_supportlib/WrapperRegistry/Registry.h +309 -0
- data/src/helper-scripts/download_binaries/extconf.rb +6 -2
- data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +16 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +6 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +24 -0
- data/src/nginx_module/ContentHandler.c +34 -13
- data/src/nginx_module/ContentHandler.h +3 -3
- data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +11 -0
- data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +23 -0
- data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +8 -0
- data/src/nginx_module/config +2 -1
- data/src/nginx_module/ngx_http_passenger_module.c +9 -3
- data/src/nginx_module/ngx_http_passenger_module.h +4 -2
- data/src/ruby_supportlib/phusion_passenger.rb +2 -1
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +13 -0
- data/src/ruby_supportlib/phusion_passenger/common_library.rb +8 -5
- data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/native_support.rb +7 -3
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +15 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +11 -1
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +3 -1
- metadata +12 -4
- data/src/cxx_supportlib/AppTypes.cpp +0 -109
@@ -36,7 +36,23 @@ namespace Fundamentals {
|
|
36
36
|
|
37
37
|
|
38
38
|
struct AbortHandlerConfig {
|
39
|
-
|
39
|
+
static const unsigned int MAX_DIAGNOSTICS_DUMPERS = 5;
|
40
|
+
typedef void (*DiagnosticsDumperFunc)(void *userData);
|
41
|
+
|
42
|
+
struct DiagnosticsDumper {
|
43
|
+
const char *name;
|
44
|
+
const char *logFileName;
|
45
|
+
DiagnosticsDumperFunc func;
|
46
|
+
void *userData;
|
47
|
+
|
48
|
+
DiagnosticsDumper()
|
49
|
+
: name(0),
|
50
|
+
logFileName(0),
|
51
|
+
func(0),
|
52
|
+
userData(0)
|
53
|
+
{ }
|
54
|
+
};
|
55
|
+
|
40
56
|
|
41
57
|
char *ruby;
|
42
58
|
char **origArgv;
|
@@ -45,8 +61,7 @@ struct AbortHandlerConfig {
|
|
45
61
|
bool beep;
|
46
62
|
bool stopProcess;
|
47
63
|
ResourceLocator *resourceLocator;
|
48
|
-
DiagnosticsDumper
|
49
|
-
void *diagnosticsDumperUserData;
|
64
|
+
DiagnosticsDumper diagnosticsDumpers[MAX_DIAGNOSTICS_DUMPERS];
|
50
65
|
};
|
51
66
|
|
52
67
|
void installAbortHandler(const AbortHandlerConfig *config);
|
data/src/agent/Watchdog/Config.h
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2011-
|
3
|
+
* Copyright (c) 2011-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.
|
@@ -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/5.3.
|
149
|
+
* server_software string - default("Phusion_Passenger/5.3.5")
|
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
|
@@ -155,6 +155,17 @@ using namespace std;
|
|
155
155
|
* standalone_engine string - default
|
156
156
|
* startup_report_file string - -
|
157
157
|
* stat_throttle_rate unsigned integer - default(10)
|
158
|
+
* telemetry_collector_ca_certificate_path string - -
|
159
|
+
* telemetry_collector_debug_curl boolean - default(false)
|
160
|
+
* telemetry_collector_disabled boolean - default(false)
|
161
|
+
* telemetry_collector_final_run_timeout unsigned integer - default(5)
|
162
|
+
* telemetry_collector_first_interval unsigned integer - default(7200)
|
163
|
+
* telemetry_collector_interval unsigned integer - default(21600)
|
164
|
+
* telemetry_collector_interval_jitter unsigned integer - default(7200)
|
165
|
+
* telemetry_collector_proxy_url string - -
|
166
|
+
* telemetry_collector_timeout unsigned integer - default(180)
|
167
|
+
* telemetry_collector_url string - default("https://anontelemetry.phusionpassenger.com/v1/collect.json")
|
168
|
+
* telemetry_collector_verify_server boolean - default(true)
|
158
169
|
* turbocaching boolean - default(true),read_only
|
159
170
|
* user string - default,read_only
|
160
171
|
* user_switching boolean - default(true)
|
@@ -253,9 +264,13 @@ private:
|
|
253
264
|
}
|
254
265
|
|
255
266
|
public:
|
256
|
-
struct {
|
267
|
+
struct CoreSubschemaContainer {
|
257
268
|
Core::Schema schema;
|
258
269
|
ConfigKit::TableTranslator translator;
|
270
|
+
|
271
|
+
CoreSubschemaContainer(const WrapperRegistry::Registry *wrapperRegistry)
|
272
|
+
: schema(wrapperRegistry)
|
273
|
+
{ }
|
259
274
|
} core;
|
260
275
|
struct {
|
261
276
|
ApiServer::Schema schema;
|
@@ -266,7 +281,9 @@ public:
|
|
266
281
|
ConfigKit::PrefixTranslator translator;
|
267
282
|
} apiServerKit;
|
268
283
|
|
269
|
-
Schema()
|
284
|
+
Schema(const WrapperRegistry::Registry *wrapperRegistry = NULL)
|
285
|
+
: core(wrapperRegistry)
|
286
|
+
{
|
270
287
|
using namespace ConfigKit;
|
271
288
|
|
272
289
|
// Add subschema: core
|
@@ -165,6 +165,7 @@ namespace Watchdog {
|
|
165
165
|
|
166
166
|
using namespace Passenger::Watchdog;
|
167
167
|
|
168
|
+
static WrapperRegistry::Registry *watchdogWrapperRegistry;
|
168
169
|
static Schema *watchdogSchema;
|
169
170
|
static ConfigKit::Store *watchdogConfig;
|
170
171
|
static WorkingObjects *workingObjects;
|
@@ -800,7 +801,9 @@ initializeBareEssentials(int argc, char *argv[], WorkingObjectsPtr &wo) {
|
|
800
801
|
string oldOomScore = setOomScoreNeverKill();
|
801
802
|
#endif
|
802
803
|
|
803
|
-
|
804
|
+
watchdogWrapperRegistry = new WrapperRegistry::Registry();
|
805
|
+
watchdogWrapperRegistry->finalize();
|
806
|
+
watchdogSchema = new Schema(watchdogWrapperRegistry);
|
804
807
|
watchdogConfig = new ConfigKit::Store(*watchdogSchema);
|
805
808
|
initializeAgent(argc, &argv, SHORT_PROGRAM_NAME " watchdog",
|
806
809
|
*watchdogConfig, watchdogSchema->core.schema.loggingKit.translator,
|
@@ -73,6 +73,11 @@ AP_INIT_TAKE1("PassengerAnalyticsLogUser",
|
|
73
73
|
NULL,
|
74
74
|
RSRC_CONF,
|
75
75
|
"Obsolete option."),
|
76
|
+
AP_INIT_TAKE1("PassengerAnonymousTelemetryProxy",
|
77
|
+
(Take1Func) cmd_passenger_anonymous_telemetry_proxy,
|
78
|
+
NULL,
|
79
|
+
RSRC_CONF,
|
80
|
+
"Use specified HTTP/SOCKS proxy for Phusion Passenger anonymous telemetry collection."),
|
76
81
|
AP_INIT_TAKE1("PassengerAppEnv",
|
77
82
|
(Take1Func) cmd_passenger_app_env,
|
78
83
|
NULL,
|
@@ -153,6 +158,11 @@ AP_INIT_TAKE1("PassengerDefaultUser",
|
|
153
158
|
NULL,
|
154
159
|
RSRC_CONF,
|
155
160
|
"The user that Phusion Passenger applications must run as when user switching fails or is disabled."),
|
161
|
+
AP_INIT_FLAG("PassengerDisableAnonymousTelemetry",
|
162
|
+
(FlagFunc) cmd_passenger_disable_anonymous_telemetry,
|
163
|
+
NULL,
|
164
|
+
RSRC_CONF,
|
165
|
+
"Whether to disable Phusion Passenger anonymous telemetry."),
|
156
166
|
AP_INIT_FLAG("PassengerDisableSecurityUpdateCheck",
|
157
167
|
(FlagFunc) cmd_passenger_disable_security_update_check,
|
158
168
|
NULL,
|
@@ -68,6 +68,11 @@ ConfigManifestGenerator::autoGenerated_setGlobalConfigDefaults() {
|
|
68
68
|
"PassengerDefaultUser",
|
69
69
|
PASSENGER_DEFAULT_USER);
|
70
70
|
|
71
|
+
addOptionsContainerStaticDefaultBool(
|
72
|
+
globalConfigContainer,
|
73
|
+
"PassengerDisableAnonymousTelemetry",
|
74
|
+
false);
|
75
|
+
|
71
76
|
addOptionsContainerStaticDefaultBool(
|
72
77
|
globalConfigContainer,
|
73
78
|
"PassengerDisableSecurityUpdateCheck",
|
@@ -125,6 +125,21 @@ cmd_passenger_analytics_log_user(cmd_parms *cmd, void *pcfg, const char *arg) {
|
|
125
125
|
return NULL;
|
126
126
|
}
|
127
127
|
|
128
|
+
static const char *
|
129
|
+
cmd_passenger_anonymous_telemetry_proxy(cmd_parms *cmd, void *pcfg, const char *arg) {
|
130
|
+
const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
|
131
|
+
if (err != NULL) {
|
132
|
+
ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0, cmd->temp_pool,
|
133
|
+
"WARNING: %s", err);
|
134
|
+
}
|
135
|
+
|
136
|
+
serverConfig.anonymousTelemetryProxySourceFile = cmd->directive->filename;
|
137
|
+
serverConfig.anonymousTelemetryProxySourceLine = cmd->directive->line_num;
|
138
|
+
serverConfig.anonymousTelemetryProxyExplicitlySet = true;
|
139
|
+
serverConfig.anonymousTelemetryProxy = arg;
|
140
|
+
return NULL;
|
141
|
+
}
|
142
|
+
|
128
143
|
static const char *
|
129
144
|
cmd_passenger_app_env(cmd_parms *cmd, void *pcfg, const char *arg) {
|
130
145
|
const char *err = ap_check_cmd_context(cmd, NOT_IN_FILES);
|
@@ -271,6 +286,21 @@ cmd_passenger_default_user(cmd_parms *cmd, void *pcfg, const char *arg) {
|
|
271
286
|
return NULL;
|
272
287
|
}
|
273
288
|
|
289
|
+
static const char *
|
290
|
+
cmd_passenger_disable_anonymous_telemetry(cmd_parms *cmd, void *pcfg, const char *arg) {
|
291
|
+
const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
|
292
|
+
if (err != NULL) {
|
293
|
+
ap_log_perror(APLOG_MARK, APLOG_STARTUP, 0, cmd->temp_pool,
|
294
|
+
"WARNING: %s", err);
|
295
|
+
}
|
296
|
+
|
297
|
+
serverConfig.disableAnonymousTelemetrySourceFile = cmd->directive->filename;
|
298
|
+
serverConfig.disableAnonymousTelemetrySourceLine = cmd->directive->line_num;
|
299
|
+
serverConfig.disableAnonymousTelemetryExplicitlySet = true;
|
300
|
+
serverConfig.disableAnonymousTelemetry = arg != NULL;
|
301
|
+
return NULL;
|
302
|
+
}
|
303
|
+
|
274
304
|
static const char *
|
275
305
|
cmd_passenger_disable_security_update_check(cmd_parms *cmd, void *pcfg, const char *arg) {
|
276
306
|
const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
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.
|
@@ -33,7 +33,7 @@
|
|
33
33
|
#include <oxt/backtrace.hpp>
|
34
34
|
#include <boost/thread.hpp>
|
35
35
|
|
36
|
-
#include <
|
36
|
+
#include <AppTypeDetector/Detector.h>
|
37
37
|
#include <Utils.h>
|
38
38
|
#include <Utils/CachedFileStat.hpp>
|
39
39
|
|
@@ -72,6 +72,7 @@ public:
|
|
72
72
|
*/
|
73
73
|
class DirectoryMapper {
|
74
74
|
private:
|
75
|
+
const WrapperRegistry::Registry ®istry;
|
75
76
|
DirConfig *config;
|
76
77
|
request_rec *r;
|
77
78
|
CachedFileStat *cstat;
|
@@ -80,8 +81,8 @@ private:
|
|
80
81
|
string publicDir;
|
81
82
|
string appRoot;
|
82
83
|
unsigned int throttleRate;
|
83
|
-
|
84
|
-
bool autoDetectionDone
|
84
|
+
AppTypeDetector::Detector::Result detectorResult;
|
85
|
+
bool autoDetectionDone;
|
85
86
|
|
86
87
|
const char *findBaseURI() const {
|
87
88
|
set<string>::const_iterator it, end = config->getBaseURIs().end();
|
@@ -146,30 +147,28 @@ private:
|
|
146
147
|
}
|
147
148
|
|
148
149
|
UPDATE_TRACE_POINT();
|
149
|
-
AppTypeDetector detector(
|
150
|
-
|
150
|
+
AppTypeDetector::Detector detector(registry, cstat,
|
151
|
+
cstatMutex, throttleRate);
|
152
|
+
AppTypeDetector::Detector::Result detectorResult;
|
151
153
|
string appRoot;
|
152
154
|
if (config->getAppType().empty()) {
|
153
155
|
if (config->getAppRoot().empty()) {
|
154
|
-
|
156
|
+
detectorResult = detector.checkDocumentRoot(publicDir,
|
155
157
|
baseURI != NULL,
|
156
158
|
&appRoot);
|
157
159
|
} else {
|
158
160
|
appRoot = config->getAppRoot();
|
159
|
-
|
160
|
-
}
|
161
|
-
} else {
|
162
|
-
if (config->getAppRoot().empty()) {
|
163
|
-
appType = PAT_NONE;
|
164
|
-
} else {
|
165
|
-
appRoot = config->getAppRoot().toString();
|
166
|
-
appType = getAppType(config->getAppType());
|
161
|
+
detectorResult = detector.checkAppRoot(appRoot);
|
167
162
|
}
|
163
|
+
} else if (!config->getAppRoot().empty()) {
|
164
|
+
appRoot = config->getAppRoot().toString();
|
165
|
+
detectorResult.wrapperRegistryEntry = ®istry.lookup(
|
166
|
+
config->getAppType());
|
168
167
|
}
|
169
168
|
|
170
169
|
this->appRoot = appRoot;
|
171
170
|
this->baseURI = baseURI;
|
172
|
-
this->
|
171
|
+
this->detectorResult = detectorResult;
|
173
172
|
autoDetectionDone = true;
|
174
173
|
}
|
175
174
|
|
@@ -184,14 +183,17 @@ public:
|
|
184
183
|
* @warning Do not use this object after the destruction of <tt>r</tt>,
|
185
184
|
* <tt>config</tt> or <tt>cstat</tt>.
|
186
185
|
*/
|
187
|
-
DirectoryMapper(request_rec *r, DirConfig *config,
|
188
|
-
|
186
|
+
DirectoryMapper(request_rec *r, DirConfig *config,
|
187
|
+
const WrapperRegistry::Registry &_registry,
|
188
|
+
CachedFileStat *cstat, boost::mutex *cstatMutex,
|
189
|
+
unsigned int throttleRate)
|
190
|
+
: registry(_registry)
|
191
|
+
{
|
189
192
|
this->r = r;
|
190
193
|
this->config = config;
|
191
194
|
this->cstat = cstat;
|
192
195
|
this->cstatMutex = cstatMutex;
|
193
196
|
this->throttleRate = throttleRate;
|
194
|
-
appType = PAT_NONE;
|
195
197
|
baseURI = NULL;
|
196
198
|
autoDetectionDone = false;
|
197
199
|
}
|
@@ -243,30 +245,16 @@ public:
|
|
243
245
|
}
|
244
246
|
|
245
247
|
/**
|
246
|
-
* Returns the application
|
247
|
-
*
|
248
|
-
* @throws FileSystemException An error occured while examening the filesystem.
|
249
|
-
* @throws DocumentRootDeterminationError Unable to query the location of the document root.
|
250
|
-
* @throws TimeRetrievalException
|
251
|
-
* @throws boost::thread_interrupted
|
252
|
-
*/
|
253
|
-
PassengerAppType getApplicationType() {
|
254
|
-
autoDetect();
|
255
|
-
return appType;
|
256
|
-
}
|
257
|
-
|
258
|
-
/**
|
259
|
-
* Returns the application type (as a string) that's associated
|
260
|
-
* with the HTTP request.
|
248
|
+
* Returns the application detector result associated with the HTTP request.
|
261
249
|
*
|
262
250
|
* @throws FileSystemException An error occured while examening the filesystem.
|
263
251
|
* @throws DocumentRootDeterminationError Unable to query the location of the document root.
|
264
252
|
* @throws TimeRetrievalException
|
265
253
|
* @throws boost::thread_interrupted
|
266
254
|
*/
|
267
|
-
|
255
|
+
AppTypeDetector::Detector::Result getDetectorResult() {
|
268
256
|
autoDetect();
|
269
|
-
return
|
257
|
+
return detectorResult;
|
270
258
|
}
|
271
259
|
};
|
272
260
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
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.
|
@@ -60,6 +60,7 @@
|
|
60
60
|
#include "DirectoryMapper.h"
|
61
61
|
#include "Utils.h"
|
62
62
|
#include <modp_b64.h>
|
63
|
+
#include <WrapperRegistry/Registry.h>
|
63
64
|
#include <FileTools/FileManip.h>
|
64
65
|
#include <FileTools/FileManip.h>
|
65
66
|
#include <Utils.h>
|
@@ -232,6 +233,7 @@ private:
|
|
232
233
|
enum Threeway { YES, NO, UNKNOWN };
|
233
234
|
|
234
235
|
Threeway m_hasModRewrite, m_hasModDir, m_hasModAutoIndex, m_hasModXsendfile;
|
236
|
+
WrapperRegistry::Registry wrapperRegistry;
|
235
237
|
CachedFileStat cstat;
|
236
238
|
WatchdogLauncher watchdogLauncher;
|
237
239
|
boost::mutex cstatMutex;
|
@@ -443,9 +445,10 @@ private:
|
|
443
445
|
bool prepareRequest(request_rec *r, DirConfig *config, const char *filename, bool coreModuleWillBeRun = false) {
|
444
446
|
TRACE_POINT();
|
445
447
|
|
446
|
-
DirectoryMapper mapper(r, config,
|
448
|
+
DirectoryMapper mapper(r, config, wrapperRegistry, &cstat,
|
449
|
+
&cstatMutex, serverConfig.statThrottleRate);
|
447
450
|
try {
|
448
|
-
if (mapper.
|
451
|
+
if (mapper.getDetectorResult().isNull()) {
|
449
452
|
// (B) is not true.
|
450
453
|
disableRequestNote(r);
|
451
454
|
return false;
|
@@ -983,8 +986,10 @@ private:
|
|
983
986
|
}
|
984
987
|
|
985
988
|
// Phusion Passenger options.
|
986
|
-
addHeader(result, P_STATIC_STRING("!~PASSENGER_APP_ROOT"),
|
987
|
-
|
989
|
+
addHeader(result, P_STATIC_STRING("!~PASSENGER_APP_ROOT"),
|
990
|
+
mapper.getAppRoot());
|
991
|
+
addHeader(result, P_STATIC_STRING("!~PASSENGER_APP_TYPE"),
|
992
|
+
mapper.getDetectorResult().wrapperRegistryEntry->language);
|
988
993
|
constructRequestHeaders_autoGenerated(r, config, result);
|
989
994
|
|
990
995
|
/*********************/
|
@@ -1247,6 +1252,7 @@ public:
|
|
1247
1252
|
: cstat(1024),
|
1248
1253
|
watchdogLauncher(IM_APACHE)
|
1249
1254
|
{
|
1255
|
+
wrapperRegistry.finalize();
|
1250
1256
|
postprocessConfig(s, pconf, ptemp);
|
1251
1257
|
|
1252
1258
|
Json::Value loggingConfig;
|
@@ -1319,6 +1325,8 @@ public:
|
|
1319
1325
|
config["instance_registry_dir"] = nonEmptyString(serverConfig.instanceRegistryDir);
|
1320
1326
|
config["security_update_checker_disabled"] = serverConfig.disableSecurityUpdateCheck;
|
1321
1327
|
config["security_update_checker_proxy_url"] = nonEmptyString(serverConfig.securityUpdateCheckProxy);
|
1328
|
+
config["telemetry_collector_disabled"] = serverConfig.disableAnonymousTelemetry;
|
1329
|
+
config["telemetry_collector_proxy_url"] = nonEmptyString(serverConfig.anonymousTelemetryProxy);
|
1322
1330
|
config["user_switching"] = serverConfig.userSwitching;
|
1323
1331
|
config["default_user"] = serverConfig.defaultUser.toString();
|
1324
1332
|
config["default_group"] = serverConfig.defaultGroup.toString();
|
@@ -91,6 +91,17 @@ ConfigManifestGenerator::autoGenerated_generateConfigManifestForServerConfig() {
|
|
91
91
|
serverConfig.adminPanelUsername.data(),
|
92
92
|
serverConfig.adminPanelUsername.data() + serverConfig.adminPanelUsername.size());
|
93
93
|
}
|
94
|
+
if (serverConfig.anonymousTelemetryProxyExplicitlySet) {
|
95
|
+
Json::Value &optionContainer = findOrCreateOptionContainer(globalOptionsContainer,
|
96
|
+
"PassengerAnonymousTelemetryProxy",
|
97
|
+
sizeof("PassengerAnonymousTelemetryProxy") - 1);
|
98
|
+
Json::Value &hierarchyMember = addOptionContainerHierarchyMember(optionContainer,
|
99
|
+
serverConfig.anonymousTelemetryProxySourceFile,
|
100
|
+
serverConfig.anonymousTelemetryProxySourceLine);
|
101
|
+
hierarchyMember["value"] = Json::Value(
|
102
|
+
serverConfig.anonymousTelemetryProxy.data(),
|
103
|
+
serverConfig.anonymousTelemetryProxy.data() + serverConfig.anonymousTelemetryProxy.size());
|
104
|
+
}
|
94
105
|
if (serverConfig.dataBufferDirExplicitlySet) {
|
95
106
|
Json::Value &optionContainer = findOrCreateOptionContainer(globalOptionsContainer,
|
96
107
|
"PassengerDataBufferDir",
|
@@ -135,6 +146,15 @@ ConfigManifestGenerator::autoGenerated_generateConfigManifestForServerConfig() {
|
|
135
146
|
serverConfig.defaultUser.data(),
|
136
147
|
serverConfig.defaultUser.data() + serverConfig.defaultUser.size());
|
137
148
|
}
|
149
|
+
if (serverConfig.disableAnonymousTelemetryExplicitlySet) {
|
150
|
+
Json::Value &optionContainer = findOrCreateOptionContainer(globalOptionsContainer,
|
151
|
+
"PassengerDisableAnonymousTelemetry",
|
152
|
+
sizeof("PassengerDisableAnonymousTelemetry") - 1);
|
153
|
+
Json::Value &hierarchyMember = addOptionContainerHierarchyMember(optionContainer,
|
154
|
+
serverConfig.disableAnonymousTelemetrySourceFile,
|
155
|
+
serverConfig.disableAnonymousTelemetrySourceLine);
|
156
|
+
hierarchyMember["value"] = serverConfig.disableAnonymousTelemetry == Apache2Module::ENABLED;
|
157
|
+
}
|
138
158
|
if (serverConfig.disableSecurityUpdateCheckExplicitlySet) {
|
139
159
|
Json::Value &optionContainer = findOrCreateOptionContainer(globalOptionsContainer,
|
140
160
|
"PassengerDisableSecurityUpdateCheck",
|
@@ -39,6 +39,11 @@
|
|
39
39
|
|
40
40
|
struct AutoGeneratedServerConfig {
|
41
41
|
|
42
|
+
/*
|
43
|
+
* Whether to disable Phusion Passenger anonymous telemetry.
|
44
|
+
*/
|
45
|
+
bool disableAnonymousTelemetry;
|
46
|
+
|
42
47
|
/*
|
43
48
|
* Whether to disable the Phusion Passenger security update check & notification.
|
44
49
|
*/
|
@@ -114,6 +119,11 @@ struct AutoGeneratedServerConfig {
|
|
114
119
|
*/
|
115
120
|
StaticString adminPanelUsername;
|
116
121
|
|
122
|
+
/*
|
123
|
+
* Use specified HTTP/SOCKS proxy for Phusion Passenger anonymous telemetry collection.
|
124
|
+
*/
|
125
|
+
StaticString anonymousTelemetryProxy;
|
126
|
+
|
117
127
|
/*
|
118
128
|
* The directory that Phusion Passenger data buffers should be stored into.
|
119
129
|
*/
|
@@ -170,6 +180,7 @@ struct AutoGeneratedServerConfig {
|
|
170
180
|
std::set<std::string> prestartURLs;
|
171
181
|
|
172
182
|
|
183
|
+
StaticString disableAnonymousTelemetrySourceFile;
|
173
184
|
StaticString disableSecurityUpdateCheckSourceFile;
|
174
185
|
StaticString showVersionInHeaderSourceFile;
|
175
186
|
StaticString turbocachingSourceFile;
|
@@ -185,6 +196,7 @@ struct AutoGeneratedServerConfig {
|
|
185
196
|
StaticString adminPanelPasswordSourceFile;
|
186
197
|
StaticString adminPanelUrlSourceFile;
|
187
198
|
StaticString adminPanelUsernameSourceFile;
|
199
|
+
StaticString anonymousTelemetryProxySourceFile;
|
188
200
|
StaticString dataBufferDirSourceFile;
|
189
201
|
StaticString defaultGroupSourceFile;
|
190
202
|
StaticString defaultRubySourceFile;
|
@@ -197,6 +209,7 @@ struct AutoGeneratedServerConfig {
|
|
197
209
|
StaticString securityUpdateCheckProxySourceFile;
|
198
210
|
StaticString prestartURLsSourceFile;
|
199
211
|
|
212
|
+
unsigned int disableAnonymousTelemetrySourceLine;
|
200
213
|
unsigned int disableSecurityUpdateCheckSourceLine;
|
201
214
|
unsigned int showVersionInHeaderSourceLine;
|
202
215
|
unsigned int turbocachingSourceLine;
|
@@ -212,6 +225,7 @@ struct AutoGeneratedServerConfig {
|
|
212
225
|
unsigned int adminPanelPasswordSourceLine;
|
213
226
|
unsigned int adminPanelUrlSourceLine;
|
214
227
|
unsigned int adminPanelUsernameSourceLine;
|
228
|
+
unsigned int anonymousTelemetryProxySourceLine;
|
215
229
|
unsigned int dataBufferDirSourceLine;
|
216
230
|
unsigned int defaultGroupSourceLine;
|
217
231
|
unsigned int defaultRubySourceLine;
|
@@ -224,6 +238,7 @@ struct AutoGeneratedServerConfig {
|
|
224
238
|
unsigned int securityUpdateCheckProxySourceLine;
|
225
239
|
unsigned int prestartURLsSourceLine;
|
226
240
|
|
241
|
+
bool disableAnonymousTelemetryExplicitlySet: 1;
|
227
242
|
bool disableSecurityUpdateCheckExplicitlySet: 1;
|
228
243
|
bool showVersionInHeaderExplicitlySet: 1;
|
229
244
|
bool turbocachingExplicitlySet: 1;
|
@@ -239,6 +254,7 @@ struct AutoGeneratedServerConfig {
|
|
239
254
|
bool adminPanelPasswordExplicitlySet: 1;
|
240
255
|
bool adminPanelUrlExplicitlySet: 1;
|
241
256
|
bool adminPanelUsernameExplicitlySet: 1;
|
257
|
+
bool anonymousTelemetryProxyExplicitlySet: 1;
|
242
258
|
bool dataBufferDirExplicitlySet: 1;
|
243
259
|
bool defaultGroupExplicitlySet: 1;
|
244
260
|
bool defaultRubyExplicitlySet: 1;
|
@@ -253,6 +269,7 @@ struct AutoGeneratedServerConfig {
|
|
253
269
|
|
254
270
|
|
255
271
|
AutoGeneratedServerConfig() {
|
272
|
+
disableAnonymousTelemetry = false;
|
256
273
|
disableSecurityUpdateCheck = false;
|
257
274
|
showVersionInHeader = true;
|
258
275
|
turbocaching = true;
|
@@ -276,6 +293,9 @@ struct AutoGeneratedServerConfig {
|
|
276
293
|
/*
|
277
294
|
* adminPanelUsername: default initialized
|
278
295
|
*/
|
296
|
+
/*
|
297
|
+
* anonymousTelemetryProxy: default initialized
|
298
|
+
*/
|
279
299
|
/*
|
280
300
|
* dataBufferDir: default initialized
|
281
301
|
*/
|
@@ -306,6 +326,7 @@ struct AutoGeneratedServerConfig {
|
|
306
326
|
* prestartURLs: default initialized
|
307
327
|
*/
|
308
328
|
|
329
|
+
disableAnonymousTelemetrySourceLine = 0;
|
309
330
|
disableSecurityUpdateCheckSourceLine = 0;
|
310
331
|
showVersionInHeaderSourceLine = 0;
|
311
332
|
turbocachingSourceLine = 0;
|
@@ -321,6 +342,7 @@ struct AutoGeneratedServerConfig {
|
|
321
342
|
adminPanelPasswordSourceLine = 0;
|
322
343
|
adminPanelUrlSourceLine = 0;
|
323
344
|
adminPanelUsernameSourceLine = 0;
|
345
|
+
anonymousTelemetryProxySourceLine = 0;
|
324
346
|
dataBufferDirSourceLine = 0;
|
325
347
|
defaultGroupSourceLine = 0;
|
326
348
|
defaultRubySourceLine = 0;
|
@@ -333,6 +355,7 @@ struct AutoGeneratedServerConfig {
|
|
333
355
|
securityUpdateCheckProxySourceLine = 0;
|
334
356
|
prestartURLsSourceLine = 0;
|
335
357
|
|
358
|
+
disableAnonymousTelemetryExplicitlySet = false;
|
336
359
|
disableSecurityUpdateCheckExplicitlySet = false;
|
337
360
|
showVersionInHeaderExplicitlySet = false;
|
338
361
|
turbocachingExplicitlySet = false;
|
@@ -348,6 +371,7 @@ struct AutoGeneratedServerConfig {
|
|
348
371
|
adminPanelPasswordExplicitlySet = false;
|
349
372
|
adminPanelUrlExplicitlySet = false;
|
350
373
|
adminPanelUsernameExplicitlySet = false;
|
374
|
+
anonymousTelemetryProxyExplicitlySet = false;
|
351
375
|
dataBufferDirExplicitlySet = false;
|
352
376
|
defaultGroupExplicitlySet = false;
|
353
377
|
defaultRubyExplicitlySet = false;
|