passenger 5.2.1 → 5.2.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +8 -0
  3. data/CODE_OF_CONDUCT.md +52 -0
  4. data/README.md +17 -9
  5. data/build/agent.rb +3 -1
  6. data/build/cxx_tests.rb +1 -0
  7. data/build/schema_printer.rb +1 -0
  8. data/build/support/cxx_dependency_map.rb +338 -31
  9. data/dev/configkit-schemas/index.json +64 -15
  10. data/dev/copy_boost_headers +1 -0
  11. data/images/justin.png +0 -0
  12. data/images/passenger_logo.svg +45 -0
  13. data/images/spark.png +0 -0
  14. data/resources/templates/standalone/http.erb +4 -0
  15. data/src/agent/AgentMain.cpp +4 -0
  16. data/src/agent/Core/AdminPanelConnector.h +133 -5
  17. data/src/agent/Core/ApplicationPool/Implementation.cpp +1 -0
  18. data/src/agent/Core/ApplicationPool/Options.h +7 -1
  19. data/src/agent/Core/ApplicationPool/Pool.h +1 -0
  20. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +11 -0
  21. data/src/agent/Core/ApplicationPool/Process.cpp +52 -0
  22. data/src/agent/Core/ApplicationPool/Process.h +4 -8
  23. data/src/agent/Core/Config.h +6 -2
  24. data/src/agent/Core/ConfigChange.cpp +12 -1
  25. data/src/agent/Core/ConfigChange.h +3 -0
  26. data/src/agent/Core/Controller/Config.h +1 -1
  27. data/src/agent/Core/Controller/InitRequest.cpp +1 -1
  28. data/src/agent/Core/Controller/InternalUtils.cpp +2 -2
  29. data/src/agent/Core/CoreMain.cpp +18 -5
  30. data/src/agent/Core/SpawningKit/BackgroundIOCapturer.h +8 -4
  31. data/src/agent/Core/SpawningKit/DirectSpawner.h +3 -1
  32. data/src/agent/Core/SpawningKit/PipeWatcher.h +9 -4
  33. data/src/agent/Core/SpawningKit/SmartSpawner.h +5 -3
  34. data/src/agent/Core/SpawningKit/Spawner.h +1 -1
  35. data/src/agent/ExecHelper/ExecHelperMain.cpp +295 -0
  36. data/src/agent/Shared/Fundamentals/Initialization.cpp +11 -8
  37. data/src/agent/Shared/Fundamentals/Initialization.h +2 -2
  38. data/src/agent/Watchdog/Config.h +5 -2
  39. data/src/apache2_module/Config.cpp +13 -0
  40. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +30 -0
  41. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +90 -0
  42. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +18 -2
  43. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +5 -0
  44. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +12 -0
  45. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
  46. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +13 -0
  47. data/src/apache2_module/Hooks.cpp +4 -0
  48. data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +55 -0
  49. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +65 -0
  50. data/src/cxx_supportlib/BackgroundEventLoop.cpp +3 -3
  51. data/src/cxx_supportlib/ConfigKit/Schema.h +53 -31
  52. data/src/cxx_supportlib/ConfigKit/Store.h +12 -8
  53. data/src/cxx_supportlib/Constants.h +2 -1
  54. data/src/cxx_supportlib/DataStructures/StringKeyTable.h +4 -0
  55. data/src/cxx_supportlib/FileTools/PathManipCBindings.cpp +22 -1
  56. data/src/cxx_supportlib/FileTools/PathManipCBindings.h +3 -1
  57. data/src/cxx_supportlib/LoggingKit/Config.h +2 -0
  58. data/src/cxx_supportlib/LoggingKit/Context.h +28 -0
  59. data/src/cxx_supportlib/LoggingKit/Forward.h +0 -1
  60. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +112 -9
  61. data/src/cxx_supportlib/LoggingKit/Logging.h +4 -2
  62. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +34 -43
  63. data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +20 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +62 -0
  65. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +3123 -0
  66. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/debug.hpp +248 -0
  67. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +498 -0
  68. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +1719 -0
  69. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer_fwd.hpp +43 -0
  70. data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +172 -0
  71. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +48 -0
  72. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +72 -0
  73. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +32 -0
  74. data/src/nginx_module/ConfigGeneral/ManifestGeneration.h +3 -0
  75. data/src/nginx_module/Configuration.c +25 -0
  76. data/src/nginx_module/ContentHandler.c +42 -4
  77. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +5 -0
  78. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +13 -0
  79. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +5 -0
  80. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
  81. data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +30 -0
  82. data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +60 -0
  83. data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +20 -0
  84. data/src/nginx_module/ngx_http_passenger_module.c +4 -0
  85. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  86. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +37 -1
  87. data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -0
  88. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +42 -1
  89. data/src/ruby_supportlib/phusion_passenger/packaging.rb +2 -0
  90. data/src/ruby_supportlib/phusion_passenger/platform_info/crypto.rb +13 -3
  91. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +20 -0
  92. metadata +16 -2
@@ -0,0 +1,295 @@
1
+ /*
2
+ * Phusion Passenger - https://www.phusionpassenger.com/
3
+ * Copyright (c) 2018 Phusion Holding B.V.
4
+ *
5
+ * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
+ * trademarks of Phusion Holding B.V.
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ * of this software and associated documentation files (the "Software"), to deal
10
+ * in the Software without restriction, including without limitation the rights
11
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ * copies of the Software, and to permit persons to whom the Software is
13
+ * furnished to do so, subject to the following conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be included in
16
+ * all copies or substantial portions of the Software.
17
+ *
18
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ * THE SOFTWARE.
25
+ */
26
+
27
+ #include <sys/types.h>
28
+ #include <sys/param.h>
29
+ #include <cstdio>
30
+ #include <cstdlib>
31
+ #include <cerrno>
32
+ #include <limits.h>
33
+ #include <unistd.h>
34
+ #include <pwd.h>
35
+ #include <grp.h>
36
+
37
+ #include <string>
38
+ #include <boost/scoped_array.hpp>
39
+
40
+ #include <Constants.h>
41
+ #include <ProcessManagement/Utils.h>
42
+ #include <Utils/OptionParsing.h>
43
+ #include <Utils/StrIntUtils.h>
44
+
45
+ namespace Passenger {
46
+ namespace ExecHelper {
47
+
48
+ using namespace std;
49
+
50
+
51
+ struct Options {
52
+ string user;
53
+ int programArgStart;
54
+
55
+ Options()
56
+ : programArgStart(2)
57
+ { }
58
+ };
59
+
60
+ static void
61
+ usage() {
62
+ // ....|---------------Keep output within standard terminal width (80 chars)------------|
63
+ printf("Usage: " AGENT_EXE " exec-helper [OPTIONS...] <PROGRAM> [ARGS...]\n");
64
+ printf("Executes the given program under a specific environment.\n");
65
+ printf("\n");
66
+ printf("Options:\n");
67
+ printf(" --user <USER> Execute as the given user. The GID will be set to the\n");
68
+ printf(" user's primary group. Supplementary groups will also\n");
69
+ printf(" be set.\n");
70
+ printf(" --help Show this help message.\n");
71
+ }
72
+
73
+ static bool
74
+ parseOption(int argc, const char *argv[], int &i, Options &options) {
75
+ OptionParser p(usage);
76
+
77
+ if (p.isValueFlag(argc, i, argv[i], '\0', "--user")) {
78
+ options.user = argv[i + 1];
79
+ i += 2;
80
+ } else {
81
+ return false;
82
+ }
83
+ return true;
84
+ }
85
+
86
+ static bool
87
+ parseOptions(int argc, const char *argv[], Options &options) {
88
+ OptionParser p(usage);
89
+ int i = 2;
90
+
91
+ while (i < argc) {
92
+ if (parseOption(argc, argv, i, options)) {
93
+ continue;
94
+ } else if (p.isFlag(argv[i], 'h', "--help")) {
95
+ usage();
96
+ exit(0);
97
+ } else if (*argv[i] == '-') {
98
+ fprintf(stderr, "ERROR: unrecognized argument %s. Please type "
99
+ "'%s exec-helper --help' for usage.\n", argv[i], argv[0]);
100
+ exit(1);
101
+ } else {
102
+ options.programArgStart = i;
103
+ return true;
104
+ }
105
+ }
106
+
107
+ return true;
108
+ }
109
+
110
+ static string
111
+ describeCommand(int argc, const char *argv[], const Options &options) {
112
+ string result = "'";
113
+ result.append(argv[options.programArgStart]);
114
+ result.append("'");
115
+
116
+ if (argc > options.programArgStart + 1) {
117
+ result.append(" (with params '");
118
+
119
+ int i = options.programArgStart + 1;
120
+ while (i < argc) {
121
+ if (i != options.programArgStart + 1) {
122
+ result.append(" ");
123
+ }
124
+ result.append(argv[i]);
125
+ i++;
126
+ }
127
+
128
+ result.append("')");
129
+ }
130
+
131
+ return result;
132
+ }
133
+
134
+ static void
135
+ reportGetpwuidError(const string &user, int e) {
136
+ if (e == 0) {
137
+ fprintf(stderr,
138
+ "ERROR: Cannot lookup up system user database entry for user '%s':"
139
+ " user does not exist\n", user.c_str());
140
+ } else {
141
+ fprintf(stderr,
142
+ "ERROR: Cannot lookup up system user database entry for user '%s':"
143
+ " %s (errno=%d)\n",
144
+ user.c_str(), strerror(e), e);
145
+ }
146
+ }
147
+
148
+ static void
149
+ lookupUserGroup(const string &user, uid_t *uid, struct passwd **userInfo, gid_t *gid) {
150
+ errno = 0;
151
+ *userInfo = getpwnam(user.c_str());
152
+ if (*userInfo == NULL) {
153
+ if (looksLikePositiveNumber(user)) {
154
+ int e = errno;
155
+ fprintf(stderr,
156
+ "Warning: error looking up system user database"
157
+ " entry for user '%s': %s (errno=%d)\n",
158
+ user.c_str(), strerror(e), e);
159
+ *uid = (uid_t) atoi(user.c_str());
160
+ *userInfo = getpwuid(*uid);
161
+ if (*userInfo == NULL) {
162
+ reportGetpwuidError(user, errno);
163
+ exit(1);
164
+ } else {
165
+ *gid = (*userInfo)->pw_gid;
166
+ }
167
+ } else {
168
+ reportGetpwuidError(user, errno);
169
+ exit(1);
170
+ }
171
+ } else {
172
+ *uid = (*userInfo)->pw_uid;
173
+ *gid = (*userInfo)->pw_gid;
174
+ }
175
+ }
176
+
177
+ static void
178
+ switchGroup(uid_t uid, const struct passwd *userInfo, gid_t gid) {
179
+ if (userInfo != NULL) {
180
+ bool setgroupsCalled = false;
181
+
182
+ #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__)
183
+ #ifdef __APPLE__
184
+ int groups[1024];
185
+ int ngroups = sizeof(groups) / sizeof(int);
186
+ #else
187
+ gid_t groups[1024];
188
+ int ngroups = sizeof(groups) / sizeof(gid_t);
189
+ #endif
190
+ boost::scoped_array<gid_t> gidset;
191
+
192
+ int ret = getgrouplist(userInfo->pw_name, gid,
193
+ groups, &ngroups);
194
+ if (ret == -1) {
195
+ int e = errno;
196
+ fprintf(stderr, "ERROR: getgrouplist(%s, %d) failed: %s (errno=%d)\n",
197
+ userInfo->pw_name, (int) gid, strerror(e), e);
198
+ exit(1);
199
+ }
200
+
201
+ if (ngroups <= NGROUPS_MAX) {
202
+ setgroupsCalled = true;
203
+ gidset.reset(new gid_t[ngroups]);
204
+ if (setgroups(ngroups, gidset.get()) == -1) {
205
+ int e = errno;
206
+ fprintf(stderr, "ERROR: setgroups(%d, ...) failed: %s (errno=%d)\n",
207
+ ngroups, strerror(e), e);
208
+ exit(1);
209
+ }
210
+ }
211
+ #endif
212
+
213
+ if (!setgroupsCalled && initgroups(userInfo->pw_name, gid) == -1) {
214
+ int e = errno;
215
+ fprintf(stderr, "ERROR: initgroups(%s, %d) failed: %s (errno=%d)\n",
216
+ userInfo->pw_name, (int) gid, strerror(e), e);
217
+ exit(1);
218
+ }
219
+ }
220
+
221
+ if (setgid(gid) == -1) {
222
+ int e = errno;
223
+ fprintf(stderr, "ERROR: setgid(%d) failed: %s (errno=%d)\n",
224
+ (int) gid, strerror(e), e);
225
+ exit(1);
226
+ }
227
+ }
228
+
229
+ static void
230
+ switchUser(uid_t uid, const struct passwd *userInfo) {
231
+ if (setuid(uid) == -1) {
232
+ int e = errno;
233
+ fprintf(stderr, "setuid(%d) failed: %s (errno=%d)\n",
234
+ (int) uid, strerror(e), e);
235
+ exit(1);
236
+ }
237
+ if (userInfo != NULL) {
238
+ setenv("USER", userInfo->pw_name, 1);
239
+ setenv("LOGNAME", userInfo->pw_name, 1);
240
+ setenv("SHELL", userInfo->pw_shell, 1);
241
+ setenv("HOME", userInfo->pw_dir, 1);
242
+ } else {
243
+ unsetenv("USER");
244
+ unsetenv("LOGNAME");
245
+ unsetenv("SHELL");
246
+ unsetenv("HOME");
247
+ }
248
+ }
249
+
250
+ int
251
+ execHelperMain(int argc, char *argv[]) {
252
+ if (argc < 3) {
253
+ usage();
254
+ exit(1);
255
+ }
256
+
257
+ Options options;
258
+ if (!parseOptions(argc, (const char **) argv, options)) {
259
+ fprintf(stderr, "Error parsing arguments.\n");
260
+ usage();
261
+ exit(1);
262
+ }
263
+
264
+ resetSignalHandlersAndMask();
265
+ disableMallocDebugging();
266
+
267
+ if (!options.user.empty()) {
268
+ struct passwd *userInfo;
269
+ uid_t uid;
270
+ gid_t gid;
271
+
272
+ lookupUserGroup(options.user, &uid, &userInfo, &gid);
273
+ switchGroup(uid, userInfo, gid);
274
+ switchUser(uid, userInfo);
275
+ }
276
+
277
+ execvp(argv[options.programArgStart],
278
+ (char * const *) &argv[options.programArgStart]);
279
+ int e = errno;
280
+ fprintf(stderr, "ERROR: unable to execute %s: %s (errno=%d)\n",
281
+ describeCommand(argc, (const char **) argv, options).c_str(),
282
+ strerror(e),
283
+ e);
284
+ return 1;
285
+ }
286
+
287
+
288
+ } // namespace ExecHelper
289
+ } // namespace Passenger
290
+
291
+
292
+ int
293
+ execHelperMain(int argc, char *argv[]) {
294
+ return Passenger::ExecHelper::execHelperMain(argc, argv);
295
+ }
@@ -481,9 +481,14 @@ maybeInitializeSyscallFailureSimulation(const char *processName) {
481
481
 
482
482
  static void
483
483
  initializeLoggingKit(const char *processName, ConfigKit::Store &config,
484
- const ConfigKit::Translator &loggingKitTranslator)
484
+ const ConfigKit::Translator &loggingKitTranslator,
485
+ const LoggingKitPreInitFunc &loggingKitPreInitFunc)
485
486
  {
486
- LoggingKit::initialize(config.inspectEffectiveValues(), loggingKitTranslator);
487
+ Json::Value initialConfig = config.inspectEffectiveValues();
488
+ if (loggingKitPreInitFunc != NULL) {
489
+ loggingKitPreInitFunc(initialConfig);
490
+ }
491
+ LoggingKit::initialize(initialConfig, loggingKitTranslator);
487
492
  Json::Value dump = LoggingKit::context->inspectConfig();
488
493
 
489
494
  if (!dump["file_descriptor_log_target"]["effective_value"].isNull()) {
@@ -548,7 +553,8 @@ void
548
553
  initializeAgent(int argc, char **argv[], const char *processName,
549
554
  ConfigKit::Store &config, const ConfigKit::Translator &loggingKitTranslator,
550
555
  OptionParserFunc optionParser,
551
- PreinitializationFunc preinit, int argStartIndex)
556
+ const LoggingKitPreInitFunc &loggingKitPreInitFunc,
557
+ int argStartIndex)
552
558
  {
553
559
  const char *seedStr;
554
560
 
@@ -601,11 +607,8 @@ initializeAgent(int argc, char **argv[], const char *processName,
601
607
  }
602
608
  }
603
609
 
604
- if (preinit != NULL) {
605
- preinit(config);
606
- }
607
-
608
- initializeLoggingKit(processName, config, loggingKitTranslator);
610
+ initializeLoggingKit(processName, config, loggingKitTranslator,
611
+ loggingKitPreInitFunc);
609
612
  } catch (const tracable_exception &e) {
610
613
  P_ERROR("*** ERROR: " << e.what() << "\n" << e.backtrace());
611
614
  exit(1);
@@ -50,7 +50,7 @@ struct Context {
50
50
  };
51
51
 
52
52
  typedef void (*OptionParserFunc)(int argc, const char **argv, ConfigKit::Store &config);
53
- typedef void (*PreinitializationFunc)(ConfigKit::Store &config);
53
+ typedef void (*LoggingKitPreInitFunc)(Json::Value &config);
54
54
 
55
55
  extern Context *context;
56
56
 
@@ -58,7 +58,7 @@ extern Context *context;
58
58
  void initializeAgent(int argc, char **argv[], const char *processName,
59
59
  ConfigKit::Store &config, const ConfigKit::Translator &loggingKitTranslator,
60
60
  OptionParserFunc optionParser = NULL,
61
- PreinitializationFunc preinit = NULL,
61
+ const LoggingKitPreInitFunc &loggingKitPreInitFunc = NULL,
62
62
  int argStartIndex = 1);
63
63
  void shutdownAgent(ConfigKit::Schema *schema, ConfigKit::Store *config);
64
64
 
@@ -46,10 +46,12 @@ using namespace std;
46
46
  * (do not edit: following text is automatically generated
47
47
  * by 'rake configkit_schemas_inline_comments')
48
48
  *
49
- * admin_panel_authentication object - secret
49
+ * admin_panel_auth_type string - default("basic")
50
50
  * admin_panel_close_timeout float - default(10.0)
51
51
  * admin_panel_connect_timeout float - default(30.0)
52
52
  * admin_panel_data_debug boolean - default(false)
53
+ * admin_panel_password string - secret
54
+ * admin_panel_password_file string - -
53
55
  * admin_panel_ping_interval float - default(30.0)
54
56
  * admin_panel_ping_timeout float - default(30.0)
55
57
  * admin_panel_proxy_password string - secret
@@ -58,6 +60,7 @@ using namespace std;
58
60
  * admin_panel_proxy_username string - -
59
61
  * admin_panel_reconnect_timeout float - default(5.0)
60
62
  * admin_panel_url string - read_only
63
+ * admin_panel_username string - -
61
64
  * admin_panel_websocketpp_debug_access boolean - default(false)
62
65
  * admin_panel_websocketpp_debug_error boolean - default(false)
63
66
  * app_output_log_level string - default("notice")
@@ -142,7 +145,7 @@ using namespace std;
142
145
  * security_update_checker_interval unsigned integer - default(86400)
143
146
  * security_update_checker_proxy_url string - -
144
147
  * security_update_checker_url string - default("https://securitycheck.phusionpassenger.com/v1/check.json")
145
- * server_software string - default("Phusion_Passenger/5.2.1")
148
+ * server_software string - default("Phusion_Passenger/5.2.2")
146
149
  * setsid boolean - default(false)
147
150
  * show_version_in_header boolean - default(true)
148
151
  * single_app_mode_app_root string - default,read_only
@@ -153,6 +153,19 @@ postprocessConfig(server_rec *s, apr_pool_t *pool, apr_pool_t *temp_pool) {
153
153
  }
154
154
 
155
155
  serverConfig.manifest = ConfigManifestGenerator(s, temp_pool).execute();
156
+
157
+ if (!serverConfig.dumpConfigManifest.empty()) {
158
+ FILE *f = fopen(serverConfig.dumpConfigManifest.c_str(), "w");
159
+ if (f == NULL) {
160
+ fprintf(stderr, "Error opening %s for writing\n",
161
+ serverConfig.dumpConfigManifest.c_str());
162
+ } else {
163
+ string dumpContent = serverConfig.manifest.toStyledString();
164
+ size_t ret = fwrite(dumpContent.data(), 1, dumpContent.size(), f);
165
+ (void) ret; // Ignore compilation warning.
166
+ fclose(f);
167
+ }
168
+ }
156
169
  }
157
170
 
158
171
 
@@ -38,6 +38,26 @@
38
38
  * rake src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp
39
39
  */
40
40
 
41
+ AP_INIT_TAKE1("PassengerAdminPanelAuthType",
42
+ (Take1Func) cmd_passenger_admin_panel_auth_type,
43
+ NULL,
44
+ RSRC_CONF,
45
+ "The authentication type to use when connecting to the admin panel"),
46
+ AP_INIT_TAKE1("PassengerAdminPanelPassword",
47
+ (Take1Func) cmd_passenger_admin_panel_password,
48
+ NULL,
49
+ RSRC_CONF,
50
+ "The password to use when connecting to the admin panel using basic authentication"),
51
+ AP_INIT_TAKE1("PassengerAdminPanelUrl",
52
+ (Take1Func) cmd_passenger_admin_panel_url,
53
+ NULL,
54
+ RSRC_CONF,
55
+ "Connect to an admin panel at the given connector URL"),
56
+ AP_INIT_TAKE1("PassengerAdminPanelUsername",
57
+ (Take1Func) cmd_passenger_admin_panel_username,
58
+ NULL,
59
+ RSRC_CONF,
60
+ "The username to use when connecting to the admin panel using basic authentication"),
41
61
  AP_INIT_FLAG("PassengerAllowEncodedSlashes",
42
62
  (FlagFunc) cmd_passenger_allow_encoded_slashes,
43
63
  NULL,
@@ -133,6 +153,11 @@ AP_INIT_FLAG("PassengerDisableSecurityUpdateCheck",
133
153
  NULL,
134
154
  RSRC_CONF,
135
155
  "Whether to disable the Phusion Passenger security update check & notification."),
156
+ AP_INIT_TAKE1("PassengerDumpConfigManifest",
157
+ (Take1Func) cmd_passenger_dump_config_manifest,
158
+ NULL,
159
+ RSRC_CONF,
160
+ "Dump the Passenger config manifest to the given file, for debugging purposes."),
136
161
  AP_INIT_FLAG("PassengerEnabled",
137
162
  (FlagFunc) cmd_passenger_enabled,
138
163
  NULL,
@@ -253,6 +278,11 @@ AP_INIT_TAKE1("PassengerMinInstances",
253
278
  NULL,
254
279
  RSRC_CONF | ACCESS_CONF,
255
280
  "The minimum number of application instances to keep when cleaning idle instances."),
281
+ AP_INIT_TAKE1("PassengerMonitorLogFile",
282
+ (Take1Func) cmd_passenger_monitor_log_file,
283
+ NULL,
284
+ RSRC_CONF | ACCESS_CONF,
285
+ "Log file path to monitor."),
256
286
  AP_INIT_TAKE1("PassengerNodejs",
257
287
  (Take1Func) cmd_passenger_nodejs,
258
288
  NULL,