passenger 5.0.4 → 5.0.5

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 (550) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +10 -0
  5. data/CHANGELOG +21 -0
  6. data/build/agents.rb +2 -2
  7. data/build/apache2.rb +6 -5
  8. data/build/common_library.rb +22 -7
  9. data/build/cxx_tests.rb +0 -3
  10. data/build/misc.rb +1 -1
  11. data/dev/parse_file_descriptor_log +119 -0
  12. data/doc/CloudLicensingConfiguration.html +387 -0
  13. data/doc/Design and Architecture.html +2430 -0
  14. data/doc/Packaging.html +488 -0
  15. data/doc/Security of user switching support.html +1833 -0
  16. data/doc/ServerOptimizationGuide.html +659 -0
  17. data/doc/ServerOptimizationGuide.txt.md +8 -0
  18. data/doc/Users guide Apache.html +9116 -0
  19. data/doc/Users guide Apache.idmap.txt +6 -2
  20. data/doc/Users guide Apache.txt +26 -7
  21. data/doc/Users guide Nginx.html +9025 -0
  22. data/doc/Users guide Nginx.idmap.txt +7 -3
  23. data/doc/Users guide Nginx.txt +29 -6
  24. data/doc/Users guide Standalone.html +3983 -0
  25. data/doc/Users guide.html +1748 -0
  26. data/doc/users_guide_snippets/installation.txt +4 -4
  27. data/ext/apache2/Configuration.cpp +16 -5
  28. data/ext/apache2/Configuration.hpp +4 -2
  29. data/ext/apache2/Hooks.cpp +44 -19
  30. data/ext/boost/libs/thread/src/pthread/once.cpp +2 -0
  31. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +6 -0
  32. data/ext/common/AgentsStarter.h +3 -2
  33. data/ext/common/ApplicationPool2/DirectSpawner.h +14 -4
  34. data/ext/common/ApplicationPool2/DummySpawner.h +12 -7
  35. data/ext/common/ApplicationPool2/Implementation.cpp +1 -1
  36. data/ext/common/ApplicationPool2/Process.h +2 -1
  37. data/ext/common/ApplicationPool2/Session.h +6 -6
  38. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -4
  39. data/ext/common/ApplicationPool2/Socket.h +59 -27
  40. data/ext/common/ApplicationPool2/Spawner.h +2 -2
  41. data/ext/common/BackgroundEventLoop.cpp +6 -1
  42. data/ext/common/Constants.h +1 -1
  43. data/ext/common/EventedClient.h +1 -1
  44. data/ext/common/EventedServer.h +2 -2
  45. data/ext/common/FileDescriptor.h +25 -6
  46. data/ext/common/Logging.cpp +107 -52
  47. data/ext/common/Logging.h +146 -19
  48. data/ext/common/MessageClient.h +2 -2
  49. data/ext/common/MessageServer.h +3 -2
  50. data/ext/common/RandomGenerator.h +8 -7
  51. data/ext/common/SafeLibev.h +5 -1
  52. data/ext/common/ServerKit/AcceptLoadBalancer.h +9 -4
  53. data/ext/common/ServerKit/FdSinkChannel.h +5 -2
  54. data/ext/common/ServerKit/FdSourceChannel.h +5 -2
  55. data/ext/common/ServerKit/FileBufferedChannel.h +2 -0
  56. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +7 -2
  57. data/ext/common/ServerKit/HttpServer.h +6 -0
  58. data/ext/common/ServerKit/Server.h +40 -3
  59. data/ext/common/StaticString.h +20 -0
  60. data/ext/common/UnionStation/Connection.h +3 -1
  61. data/ext/common/UnionStation/Core.h +6 -4
  62. data/ext/common/Utils.cpp +4 -3
  63. data/ext/common/Utils/DateParsing.h +19 -5
  64. data/ext/common/Utils/FastStringStream.h +183 -0
  65. data/ext/common/Utils/IOUtils.cpp +47 -28
  66. data/ext/common/Utils/IOUtils.h +56 -12
  67. data/ext/common/Utils/MessagePassing.h +3 -3
  68. data/ext/common/Utils/ProcessMetricsCollector.h +2 -2
  69. data/ext/common/Utils/ScopeGuard.h +16 -5
  70. data/ext/common/Utils/SpeedMeter.h +2 -2
  71. data/ext/common/Utils/StrIntUtils.cpp +6 -6
  72. data/ext/common/Utils/StrIntUtils.h +2 -1
  73. data/ext/common/agents/Base.cpp +56 -4
  74. data/ext/common/agents/Base.h +2 -1
  75. data/ext/common/agents/HelperAgent/AdminServer.h +122 -11
  76. data/ext/common/agents/HelperAgent/Main.cpp +16 -5
  77. data/ext/common/agents/HelperAgent/OptionParser.h +7 -1
  78. data/ext/common/agents/HelperAgent/RequestHandler.h +1 -1
  79. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +10 -1
  80. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +8 -0
  81. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +4 -3
  82. data/ext/common/agents/LoggingAgent/AdminServer.h +57 -11
  83. data/ext/common/agents/LoggingAgent/LoggingServer.h +3 -3
  84. data/ext/common/agents/LoggingAgent/Main.cpp +11 -3
  85. data/ext/common/agents/Watchdog/AdminServer.h +53 -11
  86. data/ext/common/agents/Watchdog/AgentWatcher.cpp +3 -3
  87. data/ext/common/agents/Watchdog/Main.cpp +13 -6
  88. data/ext/libeio/ecb.h +1 -1
  89. data/ext/libev/ev.c +13 -1
  90. data/ext/libev/ev.h +3 -0
  91. data/ext/nginx/Configuration.c +28 -6
  92. data/ext/nginx/Configuration.h +2 -1
  93. data/ext/nginx/ngx_http_passenger_module.c +5 -4
  94. data/ext/oxt/dynamic_thread_group.hpp +38 -5
  95. data/lib/phusion_passenger.rb +1 -1
  96. data/lib/phusion_passenger/common_library.rb +9 -5
  97. data/lib/phusion_passenger/config/reopen_logs_command.rb +2 -2
  98. data/lib/phusion_passenger/packaging.rb +23 -37
  99. data/passenger.gemspec +21 -21
  100. metadata +4 -453
  101. metadata.gz.asc +7 -7
  102. data/.gitignore +0 -68
  103. data/.travis.yml +0 -16
  104. data/Gemfile +0 -17
  105. data/Gemfile.lock +0 -39
  106. data/Vagrantfile +0 -54
  107. data/debian.template/README.Debian +0 -15
  108. data/debian.template/changelog +0 -316
  109. data/debian.template/compat +0 -1
  110. data/debian.template/control.erb +0 -91
  111. data/debian.template/copyright +0 -385
  112. data/debian.template/libapache2-mod-passenger.install +0 -3
  113. data/debian.template/libapache2-mod-passenger.postinst +0 -36
  114. data/debian.template/libapache2-mod-passenger.prerm +0 -15
  115. data/debian.template/locations.ini.erb +0 -14
  116. data/debian.template/passenger-dev.install.erb +0 -3
  117. data/debian.template/passenger-doc.install.erb +0 -2
  118. data/debian.template/passenger.conf +0 -6
  119. data/debian.template/passenger.docs +0 -4
  120. data/debian.template/passenger.install.erb +0 -14
  121. data/debian.template/passenger.load +0 -3
  122. data/debian.template/passenger.manpages +0 -3
  123. data/debian.template/patches/series +0 -0
  124. data/debian.template/rules.erb +0 -76
  125. data/debian.template/source/format +0 -1
  126. data/ext/common/EventedBufferedInput.h +0 -458
  127. data/packaging/rpm/LICENSE.txt +0 -19
  128. data/packaging/rpm/Makefile +0 -13
  129. data/packaging/rpm/README.md +0 -41
  130. data/packaging/rpm/Vagrantfile +0 -38
  131. data/packaging/rpm/Vagrantfile.centos +0 -30
  132. data/packaging/rpm/build +0 -170
  133. data/packaging/rpm/create_project +0 -41
  134. data/packaging/rpm/git_update +0 -88
  135. data/packaging/rpm/image/Dockerfile +0 -37
  136. data/packaging/rpm/image/Gemfile +0 -3
  137. data/packaging/rpm/image/Gemfile.lock +0 -12
  138. data/packaging/rpm/image/RPM-GPG-KEY-amazon-ga +0 -19
  139. data/packaging/rpm/image/amazon2014-i386.cfg +0 -96
  140. data/packaging/rpm/image/amazon2014-x86_64.cfg +0 -96
  141. data/packaging/rpm/image/site-defaults.cfg +0 -168
  142. data/packaging/rpm/internal/build_tasks.rb +0 -238
  143. data/packaging/rpm/internal/dummygpg +0 -11
  144. data/packaging/rpm/internal/exec_build +0 -42
  145. data/packaging/rpm/internal/get_distro_arch +0 -14
  146. data/packaging/rpm/internal/get_distro_id +0 -10
  147. data/packaging/rpm/internal/git_update +0 -27
  148. data/packaging/rpm/internal/inituidgid +0 -17
  149. data/packaging/rpm/internal/my_init +0 -344
  150. data/packaging/rpm/internal/python27 +0 -3
  151. data/packaging/rpm/internal/repo_update +0 -46
  152. data/packaging/rpm/internal/setuser +0 -26
  153. data/packaging/rpm/internal/tracking_helper +0 -40
  154. data/packaging/rpm/jenkins_release +0 -99
  155. data/packaging/rpm/lib/build_tasks_support.rb +0 -402
  156. data/packaging/rpm/lib/preprocessor.rb +0 -341
  157. data/packaging/rpm/nginx_spec/404.html +0 -119
  158. data/packaging/rpm/nginx_spec/50x.html +0 -119
  159. data/packaging/rpm/nginx_spec/index.html +0 -116
  160. data/packaging/rpm/nginx_spec/nginx-auto-cc-gcc.patch +0 -13
  161. data/packaging/rpm/nginx_spec/nginx-logo.png +0 -0
  162. data/packaging/rpm/nginx_spec/nginx-upgrade +0 -13
  163. data/packaging/rpm/nginx_spec/nginx-upgrade.8 +0 -151
  164. data/packaging/rpm/nginx_spec/nginx.conf +0 -131
  165. data/packaging/rpm/nginx_spec/nginx.init +0 -144
  166. data/packaging/rpm/nginx_spec/nginx.logrotate +0 -13
  167. data/packaging/rpm/nginx_spec/nginx.service +0 -15
  168. data/packaging/rpm/nginx_spec/nginx.spec.template +0 -560
  169. data/packaging/rpm/nginx_spec/nginx.sysconfig +0 -4
  170. data/packaging/rpm/nginx_spec/passenger.conf +0 -9
  171. data/packaging/rpm/nginx_spec/poweredby.png +0 -0
  172. data/packaging/rpm/passenger_spec/apache-passenger.conf.in +0 -26
  173. data/packaging/rpm/passenger_spec/config.json +0 -30
  174. data/packaging/rpm/passenger_spec/passenger.logrotate +0 -7
  175. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -478
  176. data/packaging/rpm/passenger_spec/passenger_dynamic_thread_group.patch +0 -16
  177. data/packaging/rpm/passenger_spec/passenger_tests_default_config_example.patch +0 -44
  178. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-GLIBC_HAVE_LONG_LONG.patch +0 -21
  179. data/packaging/rpm/repo_update +0 -114
  180. data/packaging/rpm/setup-system +0 -61
  181. data/packaging/rpm/shell +0 -10
  182. data/test/.rspec +0 -4
  183. data/test/config.json.example +0 -42
  184. data/test/config.json.rpm-automation +0 -15
  185. data/test/config.json.travis +0 -15
  186. data/test/config.json.vagrant +0 -30
  187. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +0 -124
  188. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -30
  189. data/test/cxx/ApplicationPool2/PoolTest.cpp +0 -2062
  190. data/test/cxx/ApplicationPool2/ProcessTest.cpp +0 -130
  191. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +0 -243
  192. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +0 -823
  193. data/test/cxx/BufferedIOTest.cpp +0 -364
  194. data/test/cxx/CachedFileStatTest.cpp +0 -402
  195. data/test/cxx/CxxTestMain.cpp +0 -181
  196. data/test/cxx/DataStructures/LStringTest.cpp +0 -275
  197. data/test/cxx/DataStructures/StringKeyTableTest.cpp +0 -199
  198. data/test/cxx/DateParsingTest.cpp +0 -75
  199. data/test/cxx/DechunkerTest.cpp +0 -250
  200. data/test/cxx/EventedBufferedInputTest.cpp +0 -758
  201. data/test/cxx/EventedClientTest.cpp +0 -523
  202. data/test/cxx/FileChangeCheckerTest.cpp +0 -331
  203. data/test/cxx/FileDescriptorTest.cpp +0 -69
  204. data/test/cxx/FilterSupportTest.cpp +0 -433
  205. data/test/cxx/IOUtilsTest.cpp +0 -861
  206. data/test/cxx/MemoryKit/MbufTest.cpp +0 -213
  207. data/test/cxx/MessageIOTest.cpp +0 -360
  208. data/test/cxx/MessagePassingTest.cpp +0 -81
  209. data/test/cxx/MessageReadersWritersTest.cpp +0 -576
  210. data/test/cxx/MessageServerTest.cpp +0 -393
  211. data/test/cxx/ProcessMetricsCollectorTest.cpp +0 -123
  212. data/test/cxx/RequestHandlerTest.cpp +0 -1463
  213. data/test/cxx/ResponseCacheTest.cpp +0 -322
  214. data/test/cxx/ServerKit/ChannelTest.cpp +0 -1467
  215. data/test/cxx/ServerKit/CookieUtilsTest.cpp +0 -274
  216. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +0 -992
  217. data/test/cxx/ServerKit/HeaderTableTest.cpp +0 -177
  218. data/test/cxx/ServerKit/HttpServerTest.cpp +0 -1580
  219. data/test/cxx/ServerKit/ServerTest.cpp +0 -408
  220. data/test/cxx/StaticStringTest.cpp +0 -220
  221. data/test/cxx/StringMapTest.cpp +0 -131
  222. data/test/cxx/SystemTimeTest.cpp +0 -37
  223. data/test/cxx/TemplateTest.cpp +0 -118
  224. data/test/cxx/TestSupport.cpp +0 -207
  225. data/test/cxx/TestSupport.h +0 -333
  226. data/test/cxx/UnionStationTest.cpp +0 -741
  227. data/test/cxx/Utils/StrIntUtilsTest.cpp +0 -39
  228. data/test/cxx/UtilsTest.cpp +0 -672
  229. data/test/cxx/VariantMapTest.cpp +0 -191
  230. data/test/gdbinit.example +0 -34
  231. data/test/integration_tests/apache2_tests.rb +0 -585
  232. data/test/integration_tests/downloaded_binaries_tests.rb +0 -185
  233. data/test/integration_tests/native_packaging_spec.rb +0 -368
  234. data/test/integration_tests/nginx_tests.rb +0 -402
  235. data/test/integration_tests/shared/example_webapp_tests.rb +0 -289
  236. data/test/integration_tests/source_packaging_test.rb +0 -201
  237. data/test/integration_tests/spec_helper.rb +0 -22
  238. data/test/integration_tests/standalone_tests.rb +0 -392
  239. data/test/node/line_reader_spec.js +0 -338
  240. data/test/node/spec_helper.js +0 -65
  241. data/test/oxt/backtrace_test.cpp +0 -88
  242. data/test/oxt/counter.hpp +0 -55
  243. data/test/oxt/dynamic_thread_group_test.cpp +0 -131
  244. data/test/oxt/oxt_test_main.cpp +0 -27
  245. data/test/oxt/spin_lock_test.cpp +0 -59
  246. data/test/oxt/syscall_interruption_test.cpp +0 -39
  247. data/test/ruby/debug_logging_spec.rb +0 -145
  248. data/test/ruby/message_channel_spec.rb +0 -196
  249. data/test/ruby/rack/loader_spec.rb +0 -42
  250. data/test/ruby/rack/preloader_spec.rb +0 -48
  251. data/test/ruby/rails3.0/loader_spec.rb +0 -26
  252. data/test/ruby/rails3.0/preloader_spec.rb +0 -32
  253. data/test/ruby/rails3.1/loader_spec.rb +0 -26
  254. data/test/ruby/rails3.1/preloader_spec.rb +0 -32
  255. data/test/ruby/rails3.2/loader_spec.rb +0 -26
  256. data/test/ruby/rails3.2/preloader_spec.rb +0 -32
  257. data/test/ruby/rails4.0/loader_spec.rb +0 -28
  258. data/test/ruby/rails4.0/preloader_spec.rb +0 -34
  259. data/test/ruby/rails4.1/loader_spec.rb +0 -28
  260. data/test/ruby/rails4.1/preloader_spec.rb +0 -34
  261. data/test/ruby/request_handler_spec.rb +0 -747
  262. data/test/ruby/shared/loader_sharedspec.rb +0 -247
  263. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +0 -357
  264. data/test/ruby/shared/ruby_loader_sharedspec.rb +0 -55
  265. data/test/ruby/spec_helper.rb +0 -114
  266. data/test/ruby/standalone/runtime_installer_spec.rb +0 -402
  267. data/test/ruby/union_station_spec.rb +0 -288
  268. data/test/ruby/utils/file_system_watcher_spec.rb +0 -229
  269. data/test/ruby/utils/hosts_file_parser.rb +0 -258
  270. data/test/ruby/utils/tee_input_spec.rb +0 -235
  271. data/test/ruby/utils/unseekable_socket_spec.rb +0 -66
  272. data/test/ruby/utils_spec.rb +0 -41
  273. data/test/stub/apache2/httpd.conf.erb +0 -122
  274. data/test/stub/apache2/mime.types +0 -748
  275. data/test/stub/garbage1.dat +0 -0
  276. data/test/stub/garbage2.dat +0 -0
  277. data/test/stub/garbage3.dat +0 -0
  278. data/test/stub/http_request.yml +0 -23
  279. data/test/stub/index.html +0 -1
  280. data/test/stub/nginx/koi-utf +0 -109
  281. data/test/stub/nginx/koi-win +0 -103
  282. data/test/stub/nginx/mime.types +0 -70
  283. data/test/stub/nginx/nginx.conf.erb +0 -70
  284. data/test/stub/nginx/win-utf +0 -126
  285. data/test/stub/node/app.js +0 -133
  286. data/test/stub/node/public/.gitignore +0 -0
  287. data/test/stub/node/tmp/.gitignore +0 -0
  288. data/test/stub/rack/config.ru +0 -95
  289. data/test/stub/rack/library.rb +0 -16
  290. data/test/stub/rack/public/.gitignore +0 -0
  291. data/test/stub/rack/start.rb +0 -52
  292. data/test/stub/rack/tmp/.gitignore +0 -0
  293. data/test/stub/rails3.0/.gitignore +0 -4
  294. data/test/stub/rails3.0/Gemfile +0 -22
  295. data/test/stub/rails3.0/Gemfile.lock +0 -80
  296. data/test/stub/rails3.0/Rakefile +0 -10
  297. data/test/stub/rails3.0/app/controllers/application_controller.rb +0 -4
  298. data/test/stub/rails3.0/app/helpers/application_helper.rb +0 -2
  299. data/test/stub/rails3.0/app/views/layouts/application.html.erb +0 -14
  300. data/test/stub/rails3.0/config.ru +0 -4
  301. data/test/stub/rails3.0/config/application.rb +0 -48
  302. data/test/stub/rails3.0/config/boot.rb +0 -13
  303. data/test/stub/rails3.0/config/database.yml +0 -22
  304. data/test/stub/rails3.0/config/environment.rb +0 -5
  305. data/test/stub/rails3.0/config/environments/development.rb +0 -19
  306. data/test/stub/rails3.0/config/environments/production.rb +0 -48
  307. data/test/stub/rails3.0/config/environments/test.rb +0 -32
  308. data/test/stub/rails3.0/config/initializers/backtrace_silencers.rb +0 -7
  309. data/test/stub/rails3.0/config/initializers/inflections.rb +0 -10
  310. data/test/stub/rails3.0/config/initializers/mime_types.rb +0 -5
  311. data/test/stub/rails3.0/config/initializers/passenger.rb +0 -2
  312. data/test/stub/rails3.0/config/initializers/secret_token.rb +0 -7
  313. data/test/stub/rails3.0/config/initializers/session_store.rb +0 -8
  314. data/test/stub/rails3.0/config/locales/en.yml +0 -5
  315. data/test/stub/rails3.0/config/routes.rb +0 -58
  316. data/test/stub/rails3.0/db/seeds.rb +0 -7
  317. data/test/stub/rails3.0/doc/README_FOR_APP +0 -2
  318. data/test/stub/rails3.0/lib/tasks/.gitkeep +0 -0
  319. data/test/stub/rails3.0/log/.gitignore +0 -0
  320. data/test/stub/rails3.0/public/404.html +0 -26
  321. data/test/stub/rails3.0/public/422.html +0 -26
  322. data/test/stub/rails3.0/public/500.html +0 -26
  323. data/test/stub/rails3.0/public/favicon.ico +0 -0
  324. data/test/stub/rails3.0/public/index.html +0 -279
  325. data/test/stub/rails3.0/public/robots.txt +0 -5
  326. data/test/stub/rails3.0/public/stylesheets/.gitkeep +0 -0
  327. data/test/stub/rails3.0/script/rails +0 -9
  328. data/test/stub/rails3.0/test/performance/browsing_test.rb +0 -9
  329. data/test/stub/rails3.0/test/test_helper.rb +0 -13
  330. data/test/stub/rails3.0/vendor/plugins/.gitkeep +0 -0
  331. data/test/stub/rails3.1/.gitignore +0 -15
  332. data/test/stub/rails3.1/Gemfile +0 -37
  333. data/test/stub/rails3.1/Gemfile.lock +0 -115
  334. data/test/stub/rails3.1/README +0 -261
  335. data/test/stub/rails3.1/Rakefile +0 -7
  336. data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
  337. data/test/stub/rails3.1/app/assets/stylesheets/application.css +0 -7
  338. data/test/stub/rails3.1/app/controllers/application_controller.rb +0 -3
  339. data/test/stub/rails3.1/app/helpers/application_helper.rb +0 -2
  340. data/test/stub/rails3.1/app/mailers/.gitkeep +0 -0
  341. data/test/stub/rails3.1/app/models/.gitkeep +0 -0
  342. data/test/stub/rails3.1/app/views/layouts/application.html.erb +0 -14
  343. data/test/stub/rails3.1/config.ru +0 -4
  344. data/test/stub/rails3.1/config/application.rb +0 -48
  345. data/test/stub/rails3.1/config/boot.rb +0 -6
  346. data/test/stub/rails3.1/config/database.yml +0 -25
  347. data/test/stub/rails3.1/config/environment.rb +0 -5
  348. data/test/stub/rails3.1/config/environments/development.rb +0 -30
  349. data/test/stub/rails3.1/config/environments/production.rb +0 -60
  350. data/test/stub/rails3.1/config/environments/test.rb +0 -39
  351. data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +0 -7
  352. data/test/stub/rails3.1/config/initializers/inflections.rb +0 -10
  353. data/test/stub/rails3.1/config/initializers/mime_types.rb +0 -5
  354. data/test/stub/rails3.1/config/initializers/passenger.rb +0 -2
  355. data/test/stub/rails3.1/config/initializers/secret_token.rb +0 -7
  356. data/test/stub/rails3.1/config/initializers/session_store.rb +0 -8
  357. data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +0 -14
  358. data/test/stub/rails3.1/config/locales/en.yml +0 -5
  359. data/test/stub/rails3.1/config/routes.rb +0 -58
  360. data/test/stub/rails3.1/db/seeds.rb +0 -7
  361. data/test/stub/rails3.1/doc/README_FOR_APP +0 -2
  362. data/test/stub/rails3.1/lib/assets/.gitkeep +0 -0
  363. data/test/stub/rails3.1/lib/tasks/.gitkeep +0 -0
  364. data/test/stub/rails3.1/log/.gitkeep +0 -0
  365. data/test/stub/rails3.1/public/404.html +0 -26
  366. data/test/stub/rails3.1/public/422.html +0 -26
  367. data/test/stub/rails3.1/public/500.html +0 -26
  368. data/test/stub/rails3.1/public/favicon.ico +0 -0
  369. data/test/stub/rails3.1/public/index.html +0 -241
  370. data/test/stub/rails3.1/public/robots.txt +0 -5
  371. data/test/stub/rails3.1/script/rails +0 -6
  372. data/test/stub/rails3.1/test/fixtures/.gitkeep +0 -0
  373. data/test/stub/rails3.1/test/functional/.gitkeep +0 -0
  374. data/test/stub/rails3.1/test/integration/.gitkeep +0 -0
  375. data/test/stub/rails3.1/test/performance/browsing_test.rb +0 -12
  376. data/test/stub/rails3.1/test/test_helper.rb +0 -13
  377. data/test/stub/rails3.1/test/unit/.gitkeep +0 -0
  378. data/test/stub/rails3.1/vendor/assets/stylesheets/.gitkeep +0 -0
  379. data/test/stub/rails3.1/vendor/plugins/.gitkeep +0 -0
  380. data/test/stub/rails3.2/.gitignore +0 -15
  381. data/test/stub/rails3.2/Gemfile +0 -39
  382. data/test/stub/rails3.2/Gemfile.lock +0 -113
  383. data/test/stub/rails3.2/Rakefile +0 -7
  384. data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
  385. data/test/stub/rails3.2/app/assets/stylesheets/application.css +0 -13
  386. data/test/stub/rails3.2/app/controllers/application_controller.rb +0 -3
  387. data/test/stub/rails3.2/app/helpers/application_helper.rb +0 -2
  388. data/test/stub/rails3.2/app/mailers/.gitkeep +0 -0
  389. data/test/stub/rails3.2/app/models/.gitkeep +0 -0
  390. data/test/stub/rails3.2/app/views/layouts/application.html.erb +0 -14
  391. data/test/stub/rails3.2/config.ru +0 -4
  392. data/test/stub/rails3.2/config/application.rb +0 -62
  393. data/test/stub/rails3.2/config/boot.rb +0 -6
  394. data/test/stub/rails3.2/config/database.yml +0 -25
  395. data/test/stub/rails3.2/config/environment.rb +0 -5
  396. data/test/stub/rails3.2/config/environments/development.rb +0 -37
  397. data/test/stub/rails3.2/config/environments/production.rb +0 -67
  398. data/test/stub/rails3.2/config/environments/test.rb +0 -37
  399. data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +0 -7
  400. data/test/stub/rails3.2/config/initializers/inflections.rb +0 -15
  401. data/test/stub/rails3.2/config/initializers/mime_types.rb +0 -5
  402. data/test/stub/rails3.2/config/initializers/passenger.rb +0 -2
  403. data/test/stub/rails3.2/config/initializers/secret_token.rb +0 -7
  404. data/test/stub/rails3.2/config/initializers/session_store.rb +0 -8
  405. data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +0 -14
  406. data/test/stub/rails3.2/config/locales/en.yml +0 -5
  407. data/test/stub/rails3.2/config/routes.rb +0 -58
  408. data/test/stub/rails3.2/db/seeds.rb +0 -7
  409. data/test/stub/rails3.2/doc/README_FOR_APP +0 -2
  410. data/test/stub/rails3.2/lib/assets/.gitkeep +0 -0
  411. data/test/stub/rails3.2/lib/tasks/.gitkeep +0 -0
  412. data/test/stub/rails3.2/log/.gitkeep +0 -0
  413. data/test/stub/rails3.2/public/404.html +0 -26
  414. data/test/stub/rails3.2/public/422.html +0 -26
  415. data/test/stub/rails3.2/public/500.html +0 -25
  416. data/test/stub/rails3.2/public/favicon.ico +0 -0
  417. data/test/stub/rails3.2/public/index.html +0 -241
  418. data/test/stub/rails3.2/public/robots.txt +0 -5
  419. data/test/stub/rails3.2/script/rails +0 -6
  420. data/test/stub/rails3.2/test/fixtures/.gitkeep +0 -0
  421. data/test/stub/rails3.2/test/functional/.gitkeep +0 -0
  422. data/test/stub/rails3.2/test/integration/.gitkeep +0 -0
  423. data/test/stub/rails3.2/test/performance/browsing_test.rb +0 -12
  424. data/test/stub/rails3.2/test/test_helper.rb +0 -13
  425. data/test/stub/rails3.2/test/unit/.gitkeep +0 -0
  426. data/test/stub/rails3.2/vendor/assets/stylesheets/.gitkeep +0 -0
  427. data/test/stub/rails3.2/vendor/plugins/.gitkeep +0 -0
  428. data/test/stub/rails4.0/.gitignore +0 -16
  429. data/test/stub/rails4.0/Gemfile +0 -45
  430. data/test/stub/rails4.0/Gemfile.lock +0 -126
  431. data/test/stub/rails4.0/README.rdoc +0 -28
  432. data/test/stub/rails4.0/Rakefile +0 -6
  433. data/test/stub/rails4.0/app/assets/images/.keep +0 -0
  434. data/test/stub/rails4.0/app/assets/javascripts/application.js +0 -16
  435. data/test/stub/rails4.0/app/assets/stylesheets/application.css +0 -13
  436. data/test/stub/rails4.0/app/controllers/application_controller.rb +0 -5
  437. data/test/stub/rails4.0/app/controllers/concerns/.keep +0 -0
  438. data/test/stub/rails4.0/app/helpers/application_helper.rb +0 -2
  439. data/test/stub/rails4.0/app/mailers/.keep +0 -0
  440. data/test/stub/rails4.0/app/models/.keep +0 -0
  441. data/test/stub/rails4.0/app/models/concerns/.keep +0 -0
  442. data/test/stub/rails4.0/app/views/layouts/application.html.erb +0 -14
  443. data/test/stub/rails4.0/bin/bundle +0 -3
  444. data/test/stub/rails4.0/bin/rails +0 -4
  445. data/test/stub/rails4.0/bin/rake +0 -4
  446. data/test/stub/rails4.0/config.ru +0 -4
  447. data/test/stub/rails4.0/config/application.rb +0 -23
  448. data/test/stub/rails4.0/config/boot.rb +0 -4
  449. data/test/stub/rails4.0/config/database.yml +0 -25
  450. data/test/stub/rails4.0/config/environment.rb +0 -5
  451. data/test/stub/rails4.0/config/environments/development.rb +0 -29
  452. data/test/stub/rails4.0/config/environments/production.rb +0 -80
  453. data/test/stub/rails4.0/config/environments/test.rb +0 -36
  454. data/test/stub/rails4.0/config/initializers/backtrace_silencers.rb +0 -7
  455. data/test/stub/rails4.0/config/initializers/filter_parameter_logging.rb +0 -4
  456. data/test/stub/rails4.0/config/initializers/inflections.rb +0 -16
  457. data/test/stub/rails4.0/config/initializers/mime_types.rb +0 -5
  458. data/test/stub/rails4.0/config/initializers/passenger.rb +0 -2
  459. data/test/stub/rails4.0/config/initializers/secret_token.rb +0 -12
  460. data/test/stub/rails4.0/config/initializers/session_store.rb +0 -3
  461. data/test/stub/rails4.0/config/initializers/wrap_parameters.rb +0 -14
  462. data/test/stub/rails4.0/config/locales/en.yml +0 -23
  463. data/test/stub/rails4.0/config/routes.rb +0 -57
  464. data/test/stub/rails4.0/db/seeds.rb +0 -7
  465. data/test/stub/rails4.0/lib/assets/.keep +0 -0
  466. data/test/stub/rails4.0/lib/tasks/.keep +0 -0
  467. data/test/stub/rails4.0/log/.keep +0 -0
  468. data/test/stub/rails4.0/public/404.html +0 -58
  469. data/test/stub/rails4.0/public/422.html +0 -58
  470. data/test/stub/rails4.0/public/500.html +0 -57
  471. data/test/stub/rails4.0/public/favicon.ico +0 -0
  472. data/test/stub/rails4.0/public/robots.txt +0 -5
  473. data/test/stub/rails4.0/test/controllers/.keep +0 -0
  474. data/test/stub/rails4.0/test/fixtures/.keep +0 -0
  475. data/test/stub/rails4.0/test/helpers/.keep +0 -0
  476. data/test/stub/rails4.0/test/integration/.keep +0 -0
  477. data/test/stub/rails4.0/test/mailers/.keep +0 -0
  478. data/test/stub/rails4.0/test/models/.keep +0 -0
  479. data/test/stub/rails4.0/test/test_helper.rb +0 -15
  480. data/test/stub/rails4.0/vendor/assets/javascripts/.keep +0 -0
  481. data/test/stub/rails4.0/vendor/assets/stylesheets/.keep +0 -0
  482. data/test/stub/rails4.1/.gitignore +0 -16
  483. data/test/stub/rails4.1/Gemfile +0 -45
  484. data/test/stub/rails4.1/Gemfile.lock +0 -129
  485. data/test/stub/rails4.1/README.rdoc +0 -28
  486. data/test/stub/rails4.1/Rakefile +0 -6
  487. data/test/stub/rails4.1/app/assets/images/.keep +0 -0
  488. data/test/stub/rails4.1/app/assets/javascripts/application.js +0 -16
  489. data/test/stub/rails4.1/app/assets/stylesheets/application.css +0 -13
  490. data/test/stub/rails4.1/app/controllers/application_controller.rb +0 -5
  491. data/test/stub/rails4.1/app/controllers/concerns/.keep +0 -0
  492. data/test/stub/rails4.1/app/helpers/application_helper.rb +0 -2
  493. data/test/stub/rails4.1/app/mailers/.keep +0 -0
  494. data/test/stub/rails4.1/app/models/.keep +0 -0
  495. data/test/stub/rails4.1/app/models/concerns/.keep +0 -0
  496. data/test/stub/rails4.1/app/views/layouts/application.html.erb +0 -14
  497. data/test/stub/rails4.1/bin/bundle +0 -3
  498. data/test/stub/rails4.1/bin/rails +0 -4
  499. data/test/stub/rails4.1/bin/rake +0 -4
  500. data/test/stub/rails4.1/config.ru +0 -4
  501. data/test/stub/rails4.1/config/application.rb +0 -23
  502. data/test/stub/rails4.1/config/boot.rb +0 -4
  503. data/test/stub/rails4.1/config/database.yml +0 -25
  504. data/test/stub/rails4.1/config/environment.rb +0 -5
  505. data/test/stub/rails4.1/config/environments/development.rb +0 -29
  506. data/test/stub/rails4.1/config/environments/production.rb +0 -80
  507. data/test/stub/rails4.1/config/environments/test.rb +0 -36
  508. data/test/stub/rails4.1/config/initializers/backtrace_silencers.rb +0 -7
  509. data/test/stub/rails4.1/config/initializers/filter_parameter_logging.rb +0 -4
  510. data/test/stub/rails4.1/config/initializers/inflections.rb +0 -16
  511. data/test/stub/rails4.1/config/initializers/mime_types.rb +0 -5
  512. data/test/stub/rails4.1/config/initializers/passenger.rb +0 -5
  513. data/test/stub/rails4.1/config/initializers/secret_token.rb +0 -12
  514. data/test/stub/rails4.1/config/initializers/session_store.rb +0 -3
  515. data/test/stub/rails4.1/config/initializers/wrap_parameters.rb +0 -14
  516. data/test/stub/rails4.1/config/locales/en.yml +0 -23
  517. data/test/stub/rails4.1/config/routes.rb +0 -57
  518. data/test/stub/rails4.1/db/seeds.rb +0 -7
  519. data/test/stub/rails4.1/lib/assets/.keep +0 -0
  520. data/test/stub/rails4.1/lib/tasks/.keep +0 -0
  521. data/test/stub/rails4.1/log/.keep +0 -0
  522. data/test/stub/rails4.1/public/404.html +0 -58
  523. data/test/stub/rails4.1/public/422.html +0 -58
  524. data/test/stub/rails4.1/public/500.html +0 -57
  525. data/test/stub/rails4.1/public/favicon.ico +0 -0
  526. data/test/stub/rails4.1/public/robots.txt +0 -5
  527. data/test/stub/rails4.1/test/controllers/.keep +0 -0
  528. data/test/stub/rails4.1/test/fixtures/.keep +0 -0
  529. data/test/stub/rails4.1/test/helpers/.keep +0 -0
  530. data/test/stub/rails4.1/test/integration/.keep +0 -0
  531. data/test/stub/rails4.1/test/mailers/.keep +0 -0
  532. data/test/stub/rails4.1/test/models/.keep +0 -0
  533. data/test/stub/rails4.1/test/test_helper.rb +0 -15
  534. data/test/stub/rails4.1/vendor/assets/javascripts/.keep +0 -0
  535. data/test/stub/rails4.1/vendor/assets/stylesheets/.keep +0 -0
  536. data/test/stub/start_error.pl +0 -24
  537. data/test/stub/upload_data.txt +0 -494
  538. data/test/stub/wsgi/passenger_wsgi.py +0 -212
  539. data/test/stub/wsgi/public/.gitignore +0 -0
  540. data/test/stub/wsgi/tmp/.gitignore +0 -0
  541. data/test/support/allocate_memory.c +0 -14
  542. data/test/support/apache2_controller.rb +0 -258
  543. data/test/support/multipart.rb +0 -62
  544. data/test/support/nginx_controller.rb +0 -97
  545. data/test/support/placebo-preloader.rb +0 -88
  546. data/test/support/test_helper.rb +0 -455
  547. data/test/support/valgrind.h +0 -2539
  548. data/test/tut/tut.h +0 -1310
  549. data/test/tut/tut_reporter.h +0 -256
  550. data/test/valgrind-osx.supp +0 -7
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2015 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -414,7 +414,7 @@ public:
414
414
  return;
415
415
  }
416
416
 
417
- StdioGuard guard(f);
417
+ StdioGuard guard(f, NULL, 0);
418
418
  bool hasPss = false;
419
419
  bool hasPrivateDirty = false;
420
420
  bool hasSwap = false;
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010, 2011, 2012 Phusion
3
+ * Copyright (c) 2010-2015 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -30,6 +30,7 @@
30
30
  #include <boost/thread.hpp>
31
31
  #include <oxt/system_calls.hpp>
32
32
  #include <cstdio>
33
+ #include <Logging.h>
33
34
 
34
35
  namespace Passenger {
35
36
 
@@ -99,12 +100,17 @@ public:
99
100
  : f(0)
100
101
  { }
101
102
 
102
- StdioGuard(FILE *_f)
103
+ StdioGuard(FILE *_f, const char *file, unsigned int line)
103
104
  : f(_f)
104
- { }
105
+ {
106
+ if (_f != NULL && file != NULL) {
107
+ P_LOG_FILE_DESCRIPTOR_OPEN3(fileno(_f), file, line);
108
+ }
109
+ }
105
110
 
106
111
  ~StdioGuard() {
107
112
  if (f != NULL) {
113
+ P_LOG_FILE_DESCRIPTOR_CLOSE(fileno(f));
108
114
  fclose(f);
109
115
  }
110
116
  }
@@ -116,14 +122,19 @@ private:
116
122
  bool ignoreErrors;
117
123
 
118
124
  public:
119
- FdGuard(int _fd, bool _ignoreErrors = false)
125
+ FdGuard(int _fd, const char *file, unsigned int line, bool _ignoreErrors = false)
120
126
  : fd(_fd),
121
127
  ignoreErrors(_ignoreErrors)
122
- { }
128
+ {
129
+ if (_fd != -1 && file != NULL) {
130
+ P_LOG_FILE_DESCRIPTOR_OPEN3(_fd, file, line);
131
+ }
132
+ }
123
133
 
124
134
  ~FdGuard() {
125
135
  if (fd != -1) {
126
136
  safelyClose(fd, ignoreErrors);
137
+ P_LOG_FILE_DESCRIPTOR_CLOSE(fd);
127
138
  }
128
139
  }
129
140
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2014 Phusion
3
+ * Copyright (c) 2014-2015 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -59,7 +59,7 @@ namespace Passenger {
59
59
  * ### `maxSamples`
60
60
  *
61
61
  * `maxSamples` dictates the sample buffer size: the maximum number of samples
62
- * to hold in memory. Defaults to 6.
62
+ * to hold in memory. Defaults to 8.
63
63
  *
64
64
  * The more samples you have, the more historical data influences the results.
65
65
  * If you have few samples then recent data have the most impact on the results.
@@ -111,8 +111,8 @@ splitIncludeSep(const StaticString &str, char sep, vector<StaticString> &output)
111
111
  }
112
112
 
113
113
  void
114
- truncateBeforeTokens(const char* str, const char *tokens, int maxBetweenTokens, std::stringstream& sstream) {
115
- std::string source(str);
114
+ truncateBeforeTokens(const char *str, const StaticString &tokens, int maxBetweenTokens, ostream &sstream) {
115
+ StaticString source(str);
116
116
 
117
117
  if (source.empty()) {
118
118
  return;
@@ -233,10 +233,10 @@ stringToUnsignedNumeric(const StaticString &str) {
233
233
  string::size_type i = 0;
234
234
  const char *data = str.data();
235
235
 
236
- while (data[i] == ' ' && i < str.size()) {
236
+ while (i < str.size() && data[i] == ' ') {
237
237
  i++;
238
238
  }
239
- while (data[i] >= '0' && data[i] <= '9' && i < str.size()) {
239
+ while (i < str.size() && data[i] >= '0' && data[i] <= '9') {
240
240
  result *= 10;
241
241
  result += data[i] - '0';
242
242
  i++;
@@ -262,14 +262,14 @@ stringToSignedNumeric(const StaticString &str) {
262
262
  const char *data = str.data();
263
263
  bool minus = false;
264
264
 
265
- while (data[i] == ' ' && i < str.size()) {
265
+ while (i < str.size() && data[i] == ' ') {
266
266
  i++;
267
267
  }
268
268
  if (data[i] == '-') {
269
269
  minus = true;
270
270
  i++;
271
271
  }
272
- while (data[i] >= '0' && data[i] <= '9' && i < str.size()) {
272
+ while (i < str.size() && data[i] >= '0' && data[i] <= '9') {
273
273
  result *= 10;
274
274
  result += data[i] - '0';
275
275
  i++;
@@ -27,6 +27,7 @@
27
27
 
28
28
  #include <string>
29
29
  #include <vector>
30
+ #include <ostream>
30
31
  #include <sstream>
31
32
  #include <stdexcept>
32
33
  #include <new>
@@ -134,7 +135,7 @@ void splitIncludeSep(const StaticString & restrict_ref str,
134
135
  *
135
136
  * Example: ("hello/world\\path/Splitter.cpp", "\\/", 3, sstream) results in sstream << "hel/wor\\pat/Splitter.cpp"
136
137
  */
137
- void truncateBeforeTokens(const char* str, const char *tokens, int maxBetweenTokens, std::stringstream& sstream);
138
+ void truncateBeforeTokens(const char *str, const StaticString &tokens, int maxBetweenTokens, ostream &sstream);
138
139
 
139
140
  /**
140
141
  * Look for 'toFind' inside 'str', replace it with 'replaceWith' and return the result.
@@ -1518,7 +1518,7 @@ initializeAgent(int argc, char **argv[], const char *processName,
1518
1518
  argc - argStartIndex);
1519
1519
  }
1520
1520
 
1521
- initializeAgentOptions(options, preinit);
1521
+ initializeAgentOptions(processName, options, preinit);
1522
1522
  } catch (const tracable_exception &e) {
1523
1523
  P_ERROR("*** ERROR: " << e.what() << "\n" << e.backtrace());
1524
1524
  exit(1);
@@ -1546,7 +1546,9 @@ initializeAgent(int argc, char **argv[], const char *processName,
1546
1546
  }
1547
1547
 
1548
1548
  void
1549
- initializeAgentOptions(VariantMap &options, PreinitializationFunc preinit) {
1549
+ initializeAgentOptions(const char *processName, VariantMap &options,
1550
+ PreinitializationFunc preinit)
1551
+ {
1550
1552
  ResourceLocator locator;
1551
1553
  string ruby;
1552
1554
 
@@ -1579,10 +1581,60 @@ initializeAgentOptions(VariantMap &options, PreinitializationFunc preinit) {
1579
1581
  if (preinit != NULL) {
1580
1582
  preinit(options);
1581
1583
  }
1584
+
1582
1585
  options.setDefaultInt("log_level", DEFAULT_LOG_LEVEL);
1583
1586
  setLogLevel(options.getInt("log_level"));
1584
- if (options.has("debug_log_file")) {
1585
- setLogFile(options.get("debug_log_file").c_str());
1587
+ string logFile;
1588
+ if (options.has("log_file")) {
1589
+ logFile = options.get("log_file");
1590
+ } else if (options.has("debug_log_file")) {
1591
+ logFile = options.get("debug_log_file");
1592
+ }
1593
+ if (!logFile.empty()) {
1594
+ try {
1595
+ logFile = absolutizePath(logFile);
1596
+ } catch (const SystemException &e) {
1597
+ P_WARN("Cannot absolutize filename '" << logFile
1598
+ << "': " << e.what());
1599
+ }
1600
+ setLogFile(logFile);
1601
+ }
1602
+
1603
+ if (options.has("file_descriptor_log_file")) {
1604
+ logFile = options.get("file_descriptor_log_file");
1605
+ try {
1606
+ logFile = absolutizePath(logFile);
1607
+ } catch (const SystemException &e) {
1608
+ P_WARN("Cannot absolutize filename '" << logFile
1609
+ << "': " << e.what());
1610
+ }
1611
+ setFileDescriptorLogFile(logFile);
1612
+
1613
+ // This information helps dev/parse_file_descriptor_log.
1614
+ FastStringStream<> stream;
1615
+ _prepareLogEntry(stream, __FILE__, __LINE__);
1616
+ stream << "Starting agent: " << processName << "\n";
1617
+ _writeFileDescriptorLogEntry(stream.data(), stream.size());
1618
+
1619
+ P_LOG_FILE_DESCRIPTOR_OPEN4(getFileDescriptorLogFileFd(), __FILE__, __LINE__,
1620
+ "file descriptor log file " << options.get("file_descriptor_log_file"));
1621
+ } else {
1622
+ // This information helps dev/parse_file_descriptor_log.
1623
+ P_DEBUG("Starting agent: " << processName);
1624
+ }
1625
+
1626
+ if (hasEnvOption("PASSENGER_USE_FEEDBACK_FD")) {
1627
+ P_LOG_FILE_DESCRIPTOR_OPEN2(FEEDBACK_FD, "feedback FD");
1628
+ }
1629
+ if (emergencyPipe1[0] != -1) {
1630
+ P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe1[0], __FILE__, __LINE__,
1631
+ "Emergency pipe 1-0");
1632
+ P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe1[1], __FILE__, __LINE__,
1633
+ "Emergency pipe 1-1");
1634
+ P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe2[0], __FILE__, __LINE__,
1635
+ "Emergency pipe 2-0");
1636
+ P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe2[1], __FILE__, __LINE__,
1637
+ "Emergency pipe 2-1");
1586
1638
  }
1587
1639
  }
1588
1640
 
@@ -43,7 +43,8 @@ bool feedbackFdAvailable();
43
43
  VariantMap initializeAgent(int argc, char **argv[], const char *processName,
44
44
  OptionParserFunc optionParser = NULL, PreinitializationFunc preinit = NULL,
45
45
  int argStartIndex = 1);
46
- void initializeAgentOptions(VariantMap &options, PreinitializationFunc preinit = NULL);
46
+ void initializeAgentOptions(const char *processName, VariantMap &options,
47
+ PreinitializationFunc preinit = NULL);
47
48
  void installAgentAbortHandler();
48
49
  void installDiagnosticsDumper(DiagnosticsDumper func, void *userData);
49
50
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2013-2014 Phusion
3
+ * Copyright (c) 2013-2015 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -25,6 +25,7 @@
25
25
  #ifndef _PASSENGER_SERVER_AGENT_ADMIN_SERVER_H_
26
26
  #define _PASSENGER_SERVER_AGENT_ADMIN_SERVER_H_
27
27
 
28
+ #include <boost/regex.hpp>
28
29
  #include <oxt/thread.hpp>
29
30
  #include <sstream>
30
31
  #include <string>
@@ -75,6 +76,12 @@ private:
75
76
  typedef ServerKit::HttpClient<Request> Client;
76
77
  typedef ServerKit::HeaderTable HeaderTable;
77
78
 
79
+ boost::regex serverConnectionPath;
80
+
81
+ bool regex_match(const StaticString &str, const boost::regex &e) const {
82
+ return boost::regex_match(str.data(), str.data() + str.size(), e);
83
+ }
84
+
78
85
  bool parseAuthorizationHeader(Request *req, string &username,
79
86
  string &password) const
80
87
  {
@@ -126,6 +133,19 @@ private:
126
133
  && constantTimeCompare(password, auth->password);
127
134
  }
128
135
 
136
+ int extractThreadNumberFromClientName(const string &clientName) const {
137
+ boost::smatch results;
138
+ boost::regex re("^([0-9]+)-.*");
139
+
140
+ if (!boost::regex_match(clientName, results, re)) {
141
+ return -1;
142
+ }
143
+ if (results.size() != 2) {
144
+ return -1;
145
+ }
146
+ return stringToUint(results.str(1));
147
+ }
148
+
129
149
  static VariantMap parseQueryString(const StaticString &query) {
130
150
  VariantMap params;
131
151
  const char *pos = query.data();
@@ -155,6 +175,52 @@ private:
155
175
  return params;
156
176
  }
157
177
 
178
+ static void disconnectClient(RequestHandler *rh, string clientName) {
179
+ rh->disconnect(clientName);
180
+ }
181
+
182
+ void processServerConnectionOperation(Client *client, Request *req) {
183
+ if (!authorize(client, req, FULL)) {
184
+ respondWith401(client, req);
185
+ } else if (req->method == HTTP_DELETE) {
186
+ StaticString path = req->getPathWithoutQueryString();
187
+ boost::smatch results;
188
+
189
+ boost::regex_match(path.toString(), results, serverConnectionPath);
190
+ if (results.size() != 2) {
191
+ endAsBadRequest(&client, &req, "Invalid URI");
192
+ return;
193
+ }
194
+
195
+ int threadNumber = extractThreadNumberFromClientName(results.str(1));
196
+ P_WARN(results.str(1));
197
+ P_WARN(threadNumber);
198
+ if (threadNumber < 1 || (unsigned int) threadNumber > requestHandlers.size()) {
199
+ HeaderTable headers;
200
+ headers.insert(req->pool, "content-type", "application/json");
201
+ writeSimpleResponse(client, 400, &headers,
202
+ "{ \"status\": \"error\", \"reason\": \"Invalid thread number\" }");
203
+ if (!req->ended()) {
204
+ endRequest(&client, &req);
205
+ }
206
+ return;
207
+ }
208
+
209
+ requestHandlers[threadNumber - 1]->getContext()->libev->runLater(boost::bind(
210
+ disconnectClient, requestHandlers[threadNumber - 1], results.str(1)));
211
+
212
+ HeaderTable headers;
213
+ headers.insert(req->pool, "content-type", "application/json");
214
+ writeSimpleResponse(client, 200, &headers,
215
+ "{ \"status\": \"ok\" }");
216
+ if (!req->ended()) {
217
+ endRequest(&client, &req);
218
+ }
219
+ } else {
220
+ respondWith405(client, req);
221
+ }
222
+ }
223
+
158
224
  static void inspectRequestHandlerState(RequestHandler *rh, Json::Value *json) {
159
225
  *json = rh->inspectStateAsJson();
160
226
  }
@@ -396,6 +462,7 @@ private:
396
462
 
397
463
  HeaderTable headers;
398
464
  string logFile = getLogFile();
465
+ string fileDescriptorLogFile = getFileDescriptorLogFile();
399
466
 
400
467
  headers.insert(req->pool, "content-type", "application/json");
401
468
  Json::Value doc;
@@ -405,6 +472,9 @@ private:
405
472
  if (!logFile.empty()) {
406
473
  doc["log_file"] = logFile;
407
474
  }
475
+ if (!fileDescriptorLogFile.empty()) {
476
+ doc["file_descriptor_log_file"] = fileDescriptorLogFile;
477
+ }
408
478
 
409
479
  writeSimpleResponse(client, 200, &headers,
410
480
  psg_pstrdup(req->pool, doc.toStyledString()));
@@ -438,8 +508,24 @@ private:
438
508
  setLogLevel(json["log_level"].asInt());
439
509
  }
440
510
  if (json.isMember("log_file")) {
441
- if (!setLogFile(json["log_file"].asCString())) {
442
- int e = errno;
511
+ string logFile = json["log_file"].asString();
512
+ try {
513
+ logFile = absolutizePath(logFile);
514
+ } catch (const SystemException &e) {
515
+ unsigned int bufsize = 1024;
516
+ char *message = (char *) psg_pnalloc(req->pool, bufsize);
517
+ snprintf(message, bufsize, "{ \"status\": \"error\", "
518
+ "\"message\": \"Cannot absolutize log file filename: %s\" }",
519
+ e.what());
520
+ writeSimpleResponse(client, 500, &headers, message);
521
+ if (!req->ended()) {
522
+ endRequest(&client, &req);
523
+ }
524
+ return;
525
+ }
526
+
527
+ int e;
528
+ if (!setLogFile(logFile, &e)) {
443
529
  unsigned int bufsize = 1024;
444
530
  char *message = (char *) psg_pnalloc(req->pool, bufsize);
445
531
  snprintf(message, bufsize, "{ \"status\": \"error\", "
@@ -468,6 +554,7 @@ private:
468
554
  if (req->method != HTTP_POST) {
469
555
  respondWith405(client, req);
470
556
  } else if (authorize(client, req, FULL)) {
557
+ int e;
471
558
  HeaderTable headers;
472
559
  headers.insert(req->pool, "content-type", "application/json");
473
560
 
@@ -476,25 +563,46 @@ private:
476
563
  writeSimpleResponse(client, 500, &headers, "{ \"status\": \"error\", "
477
564
  "\"code\": \"NO_LOG_FILE\", "
478
565
  "\"message\": \"" PROGRAM_NAME " was not configured with a log file.\" }\n");
479
- } else {
480
- if (!setLogFile(logFile.c_str())) {
481
- int e = errno;
566
+ if (!req->ended()) {
567
+ endRequest(&client, &req);
568
+ }
569
+ return;
570
+ }
571
+
572
+ if (!setLogFile(logFile, &e)) {
573
+ unsigned int bufsize = 1024;
574
+ char *message = (char *) psg_pnalloc(req->pool, bufsize);
575
+ snprintf(message, bufsize, "{ \"status\": \"error\", "
576
+ "\"code\": \"LOG_FILE_OPEN_ERROR\", "
577
+ "\"message\": \"Cannot reopen log file %s: %s (errno=%d)\" }",
578
+ logFile.c_str(), strerror(e), e);
579
+ writeSimpleResponse(client, 500, &headers, message);
580
+ if (!req->ended()) {
581
+ endRequest(&client, &req);
582
+ }
583
+ return;
584
+ }
585
+ P_NOTICE("Log file reopened.");
586
+
587
+ if (hasFileDescriptorLogFile()) {
588
+ if (!setFileDescriptorLogFile(getFileDescriptorLogFile(), &e)) {
482
589
  unsigned int bufsize = 1024;
483
590
  char *message = (char *) psg_pnalloc(req->pool, bufsize);
484
591
  snprintf(message, bufsize, "{ \"status\": \"error\", "
485
- "\"code\": \"LOG_FILE_OPEN_ERROR\", "
486
- "\"message\": \"Cannot reopen log file: %s (errno=%d)\" }",
487
- strerror(e), e);
592
+ "\"code\": \"FD_LOG_FILE_OPEN_ERROR\", "
593
+ "\"message\": \"Cannot reopen file descriptor log file %s: %s (errno=%d)\" }",
594
+ getFileDescriptorLogFile().c_str(), strerror(e), e);
488
595
  writeSimpleResponse(client, 500, &headers, message);
489
596
  if (!req->ended()) {
490
597
  endRequest(&client, &req);
491
598
  }
492
599
  return;
493
600
  }
494
- P_NOTICE("Log file reopened.");
495
- writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
601
+ P_NOTICE("File descriptor log file reopened.");
496
602
  }
497
603
 
604
+ writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
605
+
498
606
  if (!req->ended()) {
499
607
  endRequest(&client, &req);
500
608
  }
@@ -568,6 +676,8 @@ protected:
568
676
  try {
569
677
  if (path == P_STATIC_STRING("/server.json")) {
570
678
  processServerStatus(client, req);
679
+ } else if (regex_match(path, serverConnectionPath)) {
680
+ processServerConnectionOperation(client, req);
571
681
  } else if (path == P_STATIC_STRING("/pool.xml")) {
572
682
  processPoolStatusXml(client, req);
573
683
  } else if (path == P_STATIC_STRING("/pool.txt")) {
@@ -665,6 +775,7 @@ public:
665
775
 
666
776
  AdminServer(ServerKit::Context *context)
667
777
  : ParentClass(context),
778
+ serverConnectionPath("^/server/(.+)\\.json$"),
668
779
  exitEvent(NULL)
669
780
  { }
670
781