colouringcode-passenger 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1064) hide show
  1. data/DEVELOPERS.TXT +101 -0
  2. data/INSTALL +6 -0
  3. data/LICENSE +19 -0
  4. data/NEWS +174 -0
  5. data/README +59 -0
  6. data/Rakefile +921 -0
  7. data/benchmark/ApplicationPool.cpp +52 -0
  8. data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +126 -0
  9. data/benchmark/dispatcher.rb +42 -0
  10. data/benchmark/overhead_of_password_checking.rb +81 -0
  11. data/benchmark/socket_connections_vs_persistent_pipe.rb +99 -0
  12. data/benchmark/unix_sockets_vs_pipes.rb +83 -0
  13. data/bin/passenger-config +46 -0
  14. data/bin/passenger-install-apache2-module +223 -0
  15. data/bin/passenger-install-nginx-module +472 -0
  16. data/bin/passenger-make-enterprisey +83 -0
  17. data/bin/passenger-memory-stats +301 -0
  18. data/bin/passenger-spawn-server +68 -0
  19. data/bin/passenger-status +125 -0
  20. data/bin/passenger-stress-test +344 -0
  21. data/debian/compat +1 -0
  22. data/debian/control +21 -0
  23. data/debian/postinst +24 -0
  24. data/debian/prerm +2 -0
  25. data/doc/ApplicationPool algorithm.txt +402 -0
  26. data/doc/Architectural overview.html +1 -0
  27. data/doc/Architectural overview.txt +334 -0
  28. data/doc/Doxyfile +241 -0
  29. data/doc/Security of user switching support.html +1 -0
  30. data/doc/Security of user switching support.txt +197 -0
  31. data/doc/Users guide Apache.html +1 -0
  32. data/doc/Users guide Apache.txt +1848 -0
  33. data/doc/Users guide Nginx.html +1 -0
  34. data/doc/Users guide Nginx.txt +769 -0
  35. data/doc/definitions.h +5 -0
  36. data/doc/images/by_sa.png +0 -0
  37. data/doc/images/conservative_spawning.png +0 -0
  38. data/doc/images/conservative_spawning.svg +248 -0
  39. data/doc/images/icons/README +5 -0
  40. data/doc/images/icons/callouts/1.png +0 -0
  41. data/doc/images/icons/callouts/10.png +0 -0
  42. data/doc/images/icons/callouts/11.png +0 -0
  43. data/doc/images/icons/callouts/12.png +0 -0
  44. data/doc/images/icons/callouts/13.png +0 -0
  45. data/doc/images/icons/callouts/14.png +0 -0
  46. data/doc/images/icons/callouts/15.png +0 -0
  47. data/doc/images/icons/callouts/2.png +0 -0
  48. data/doc/images/icons/callouts/3.png +0 -0
  49. data/doc/images/icons/callouts/4.png +0 -0
  50. data/doc/images/icons/callouts/5.png +0 -0
  51. data/doc/images/icons/callouts/6.png +0 -0
  52. data/doc/images/icons/callouts/7.png +0 -0
  53. data/doc/images/icons/callouts/8.png +0 -0
  54. data/doc/images/icons/callouts/9.png +0 -0
  55. data/doc/images/icons/caution.png +0 -0
  56. data/doc/images/icons/example.png +0 -0
  57. data/doc/images/icons/home.png +0 -0
  58. data/doc/images/icons/important.png +0 -0
  59. data/doc/images/icons/next.png +0 -0
  60. data/doc/images/icons/note.png +0 -0
  61. data/doc/images/icons/prev.png +0 -0
  62. data/doc/images/icons/tip.png +0 -0
  63. data/doc/images/icons/up.png +0 -0
  64. data/doc/images/icons/warning.png +0 -0
  65. data/doc/images/passenger_architecture.png +0 -0
  66. data/doc/images/passenger_architecture.svg +401 -0
  67. data/doc/images/phusion_banner.png +0 -0
  68. data/doc/images/smart-lv2.png +0 -0
  69. data/doc/images/smart-lv2.svg +320 -0
  70. data/doc/images/spawn_server_architecture.png +0 -0
  71. data/doc/images/spawn_server_architecture.svg +655 -0
  72. data/doc/images/typical_isolated_web_application.png +0 -0
  73. data/doc/images/typical_isolated_web_application.svg +213 -0
  74. data/doc/rdoc/classes/ConditionVariable.html +194 -0
  75. data/doc/rdoc/classes/Exception.html +120 -0
  76. data/doc/rdoc/classes/GC.html +113 -0
  77. data/doc/rdoc/classes/IO.html +169 -0
  78. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +153 -0
  79. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +517 -0
  80. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
  81. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
  82. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
  83. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
  84. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +719 -0
  85. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +598 -0
  86. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +138 -0
  87. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +317 -0
  88. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +140 -0
  89. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +154 -0
  90. data/doc/rdoc/classes/PhusionPassenger/Application.html +283 -0
  91. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
  92. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
  93. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +181 -0
  94. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
  95. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
  96. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +489 -0
  97. data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +350 -0
  98. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +188 -0
  99. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +199 -0
  100. data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
  101. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +98 -0
  102. data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +438 -0
  103. data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +200 -0
  104. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +98 -0
  105. data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +436 -0
  106. data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +155 -0
  107. data/doc/rdoc/classes/PhusionPassenger/Railz.html +95 -0
  108. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +402 -0
  109. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
  110. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +169 -0
  111. data/doc/rdoc/classes/PhusionPassenger/Utils.html +803 -0
  112. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
  113. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +188 -0
  114. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
  115. data/doc/rdoc/classes/PhusionPassenger.html +238 -0
  116. data/doc/rdoc/classes/PlatformInfo.html +866 -0
  117. data/doc/rdoc/classes/RakeExtensions.html +197 -0
  118. data/doc/rdoc/classes/Signal.html +131 -0
  119. data/doc/rdoc/created.rid +1 -0
  120. data/doc/rdoc/files/DEVELOPERS_TXT.html +255 -0
  121. data/doc/rdoc/files/README.html +175 -0
  122. data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +92 -0
  123. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +129 -0
  124. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +129 -0
  125. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
  126. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +128 -0
  127. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +130 -0
  128. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
  129. data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +127 -0
  130. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
  131. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
  132. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +134 -0
  133. data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +122 -0
  134. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
  135. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +126 -0
  136. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +120 -0
  137. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
  138. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +127 -0
  139. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +133 -0
  140. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +125 -0
  141. data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +140 -0
  142. data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +126 -0
  143. data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +145 -0
  144. data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +125 -0
  145. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
  146. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +159 -0
  147. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +174 -0
  148. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +129 -0
  149. data/doc/rdoc/files/misc/rake/extensions_rb.html +130 -0
  150. data/doc/rdoc/fr_class_index.html +91 -0
  151. data/doc/rdoc/fr_file_index.html +76 -0
  152. data/doc/rdoc/fr_method_index.html +205 -0
  153. data/doc/rdoc/index.html +26 -0
  154. data/doc/rdoc/rdoc-style.css +187 -0
  155. data/doc/template/horo.rb +613 -0
  156. data/doc/users_guide_snippets/analysis_and_system_maintenance_tools.txt +144 -0
  157. data/doc/users_guide_snippets/appendix_a_about.txt +13 -0
  158. data/doc/users_guide_snippets/appendix_b_terminology.txt +63 -0
  159. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +304 -0
  160. data/doc/users_guide_snippets/global_queueing_explained.txt +78 -0
  161. data/doc/users_guide_snippets/rackup_specifications.txt +71 -0
  162. data/doc/users_guide_snippets/rails_spawn_method.txt +48 -0
  163. data/doc/users_guide_snippets/tips.txt +173 -0
  164. data/ext/apache2/Bucket.cpp +190 -0
  165. data/ext/apache2/Bucket.h +87 -0
  166. data/ext/apache2/Configuration.cpp +798 -0
  167. data/ext/apache2/Configuration.h +405 -0
  168. data/ext/apache2/DirectoryMapper.h +296 -0
  169. data/ext/apache2/Hooks.cpp +1615 -0
  170. data/ext/apache2/Hooks.h +45 -0
  171. data/ext/apache2/LICENSE-CNRI.TXT +79 -0
  172. data/ext/apache2/mod_passenger.c +38 -0
  173. data/ext/boost/LICENSE.TXT +23 -0
  174. data/ext/boost/VERSION.TXT +1 -0
  175. data/ext/boost/algorithm/string/case_conv.hpp +176 -0
  176. data/ext/boost/algorithm/string/compare.hpp +199 -0
  177. data/ext/boost/algorithm/string/concept.hpp +83 -0
  178. data/ext/boost/algorithm/string/config.hpp +28 -0
  179. data/ext/boost/algorithm/string/constants.hpp +36 -0
  180. data/ext/boost/algorithm/string/detail/case_conv.hpp +112 -0
  181. data/ext/boost/algorithm/string/detail/find_format.hpp +193 -0
  182. data/ext/boost/algorithm/string/detail/find_format_all.hpp +263 -0
  183. data/ext/boost/algorithm/string/detail/find_format_store.hpp +71 -0
  184. data/ext/boost/algorithm/string/detail/finder.hpp +646 -0
  185. data/ext/boost/algorithm/string/detail/formatter.hpp +94 -0
  186. data/ext/boost/algorithm/string/detail/replace_storage.hpp +159 -0
  187. data/ext/boost/algorithm/string/detail/sequence.hpp +200 -0
  188. data/ext/boost/algorithm/string/detail/util.hpp +106 -0
  189. data/ext/boost/algorithm/string/erase.hpp +844 -0
  190. data/ext/boost/algorithm/string/find_format.hpp +269 -0
  191. data/ext/boost/algorithm/string/finder.hpp +270 -0
  192. data/ext/boost/algorithm/string/formatter.hpp +103 -0
  193. data/ext/boost/algorithm/string/replace.hpp +928 -0
  194. data/ext/boost/algorithm/string/sequence_traits.hpp +193 -0
  195. data/ext/boost/algorithm/string/yes_no_type.hpp +33 -0
  196. data/ext/boost/assert.hpp +50 -0
  197. data/ext/boost/bind/arg.hpp +62 -0
  198. data/ext/boost/bind/bind_cc.hpp +117 -0
  199. data/ext/boost/bind/bind_mf_cc.hpp +227 -0
  200. data/ext/boost/bind/bind_template.hpp +345 -0
  201. data/ext/boost/bind/mem_fn_cc.hpp +103 -0
  202. data/ext/boost/bind/mem_fn_template.hpp +1020 -0
  203. data/ext/boost/bind/placeholders.hpp +68 -0
  204. data/ext/boost/bind/storage.hpp +475 -0
  205. data/ext/boost/bind.hpp +1689 -0
  206. data/ext/boost/call_traits.hpp +24 -0
  207. data/ext/boost/checked_delete.hpp +69 -0
  208. data/ext/boost/concept/assert.hpp +46 -0
  209. data/ext/boost/concept/detail/concept_def.hpp +51 -0
  210. data/ext/boost/concept/detail/concept_undef.hpp +5 -0
  211. data/ext/boost/concept/detail/general.hpp +66 -0
  212. data/ext/boost/concept/detail/has_constraints.hpp +48 -0
  213. data/ext/boost/concept/usage.hpp +43 -0
  214. data/ext/boost/concept_check.hpp +988 -0
  215. data/ext/boost/config/abi/borland_prefix.hpp +27 -0
  216. data/ext/boost/config/abi/borland_suffix.hpp +12 -0
  217. data/ext/boost/config/abi/msvc_prefix.hpp +8 -0
  218. data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
  219. data/ext/boost/config/abi_prefix.hpp +25 -0
  220. data/ext/boost/config/abi_suffix.hpp +26 -0
  221. data/ext/boost/config/auto_link.hpp +368 -0
  222. data/ext/boost/config/compiler/borland.hpp +209 -0
  223. data/ext/boost/config/compiler/comeau.hpp +59 -0
  224. data/ext/boost/config/compiler/common_edg.hpp +62 -0
  225. data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
  226. data/ext/boost/config/compiler/digitalmars.hpp +67 -0
  227. data/ext/boost/config/compiler/gcc.hpp +149 -0
  228. data/ext/boost/config/compiler/gcc_xml.hpp +30 -0
  229. data/ext/boost/config/compiler/greenhills.hpp +28 -0
  230. data/ext/boost/config/compiler/hp_acc.hpp +95 -0
  231. data/ext/boost/config/compiler/intel.hpp +162 -0
  232. data/ext/boost/config/compiler/kai.hpp +35 -0
  233. data/ext/boost/config/compiler/metrowerks.hpp +111 -0
  234. data/ext/boost/config/compiler/mpw.hpp +51 -0
  235. data/ext/boost/config/compiler/pgi.hpp +25 -0
  236. data/ext/boost/config/compiler/sgi_mipspro.hpp +28 -0
  237. data/ext/boost/config/compiler/sunpro_cc.hpp +98 -0
  238. data/ext/boost/config/compiler/vacpp.hpp +60 -0
  239. data/ext/boost/config/compiler/visualc.hpp +191 -0
  240. data/ext/boost/config/no_tr1/complex.hpp +28 -0
  241. data/ext/boost/config/no_tr1/functional.hpp +28 -0
  242. data/ext/boost/config/no_tr1/memory.hpp +28 -0
  243. data/ext/boost/config/no_tr1/utility.hpp +28 -0
  244. data/ext/boost/config/platform/aix.hpp +33 -0
  245. data/ext/boost/config/platform/amigaos.hpp +15 -0
  246. data/ext/boost/config/platform/beos.hpp +26 -0
  247. data/ext/boost/config/platform/bsd.hpp +73 -0
  248. data/ext/boost/config/platform/cygwin.hpp +51 -0
  249. data/ext/boost/config/platform/hpux.hpp +84 -0
  250. data/ext/boost/config/platform/irix.hpp +31 -0
  251. data/ext/boost/config/platform/linux.hpp +98 -0
  252. data/ext/boost/config/platform/macos.hpp +78 -0
  253. data/ext/boost/config/platform/qnxnto.hpp +31 -0
  254. data/ext/boost/config/platform/solaris.hpp +21 -0
  255. data/ext/boost/config/platform/win32.hpp +58 -0
  256. data/ext/boost/config/posix_features.hpp +95 -0
  257. data/ext/boost/config/requires_threads.hpp +92 -0
  258. data/ext/boost/config/select_compiler_config.hpp +115 -0
  259. data/ext/boost/config/select_platform_config.hpp +90 -0
  260. data/ext/boost/config/select_stdlib_config.hpp +68 -0
  261. data/ext/boost/config/stdlib/dinkumware.hpp +106 -0
  262. data/ext/boost/config/stdlib/libcomo.hpp +46 -0
  263. data/ext/boost/config/stdlib/libstdcpp3.hpp +73 -0
  264. data/ext/boost/config/stdlib/modena.hpp +30 -0
  265. data/ext/boost/config/stdlib/msl.hpp +59 -0
  266. data/ext/boost/config/stdlib/roguewave.hpp +153 -0
  267. data/ext/boost/config/stdlib/sgi.hpp +111 -0
  268. data/ext/boost/config/stdlib/stlport.hpp +201 -0
  269. data/ext/boost/config/stdlib/vacpp.hpp +18 -0
  270. data/ext/boost/config/suffix.hpp +566 -0
  271. data/ext/boost/config/user.hpp +124 -0
  272. data/ext/boost/config.hpp +70 -0
  273. data/ext/boost/cstdint.hpp +449 -0
  274. data/ext/boost/current_function.hpp +67 -0
  275. data/ext/boost/date_time/adjust_functors.hpp +178 -0
  276. data/ext/boost/date_time/c_time.hpp +91 -0
  277. data/ext/boost/date_time/compiler_config.hpp +149 -0
  278. data/ext/boost/date_time/constrained_value.hpp +98 -0
  279. data/ext/boost/date_time/date.hpp +197 -0
  280. data/ext/boost/date_time/date_clock_device.hpp +77 -0
  281. data/ext/boost/date_time/date_defs.hpp +26 -0
  282. data/ext/boost/date_time/date_duration.hpp +147 -0
  283. data/ext/boost/date_time/date_duration_types.hpp +269 -0
  284. data/ext/boost/date_time/date_facet.hpp +775 -0
  285. data/ext/boost/date_time/date_format_simple.hpp +159 -0
  286. data/ext/boost/date_time/date_formatting.hpp +127 -0
  287. data/ext/boost/date_time/date_formatting_limited.hpp +121 -0
  288. data/ext/boost/date_time/date_formatting_locales.hpp +233 -0
  289. data/ext/boost/date_time/date_generator_formatter.hpp +263 -0
  290. data/ext/boost/date_time/date_generator_parser.hpp +329 -0
  291. data/ext/boost/date_time/date_generators.hpp +509 -0
  292. data/ext/boost/date_time/date_iterator.hpp +101 -0
  293. data/ext/boost/date_time/date_names_put.hpp +320 -0
  294. data/ext/boost/date_time/date_parsing.hpp +299 -0
  295. data/ext/boost/date_time/dst_rules.hpp +391 -0
  296. data/ext/boost/date_time/filetime_functions.hpp +78 -0
  297. data/ext/boost/date_time/format_date_parser.hpp +731 -0
  298. data/ext/boost/date_time/gregorian/conversion.hpp +73 -0
  299. data/ext/boost/date_time/gregorian/formatters.hpp +162 -0
  300. data/ext/boost/date_time/gregorian/formatters_limited.hpp +81 -0
  301. data/ext/boost/date_time/gregorian/greg_calendar.hpp +47 -0
  302. data/ext/boost/date_time/gregorian/greg_date.hpp +135 -0
  303. data/ext/boost/date_time/gregorian/greg_day.hpp +57 -0
  304. data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +38 -0
  305. data/ext/boost/date_time/gregorian/greg_duration.hpp +38 -0
  306. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +34 -0
  307. data/ext/boost/date_time/gregorian/greg_month.hpp +105 -0
  308. data/ext/boost/date_time/gregorian/greg_weekday.hpp +66 -0
  309. data/ext/boost/date_time/gregorian/greg_year.hpp +53 -0
  310. data/ext/boost/date_time/gregorian/greg_ymd.hpp +33 -0
  311. data/ext/boost/date_time/gregorian/gregorian.hpp +38 -0
  312. data/ext/boost/date_time/gregorian/gregorian_io.hpp +777 -0
  313. data/ext/boost/date_time/gregorian/gregorian_types.hpp +109 -0
  314. data/ext/boost/date_time/gregorian/parsers.hpp +91 -0
  315. data/ext/boost/date_time/gregorian_calendar.hpp +70 -0
  316. data/ext/boost/date_time/gregorian_calendar.ipp +219 -0
  317. data/ext/boost/date_time/int_adapter.hpp +507 -0
  318. data/ext/boost/date_time/iso_format.hpp +303 -0
  319. data/ext/boost/date_time/locale_config.hpp +31 -0
  320. data/ext/boost/date_time/microsec_time_clock.hpp +205 -0
  321. data/ext/boost/date_time/parse_format_base.hpp +29 -0
  322. data/ext/boost/date_time/period.hpp +377 -0
  323. data/ext/boost/date_time/period_formatter.hpp +196 -0
  324. data/ext/boost/date_time/period_parser.hpp +196 -0
  325. data/ext/boost/date_time/posix_time/conversion.hpp +93 -0
  326. data/ext/boost/date_time/posix_time/date_duration_operators.hpp +114 -0
  327. data/ext/boost/date_time/posix_time/posix_time.hpp +39 -0
  328. data/ext/boost/date_time/posix_time/posix_time_config.hpp +178 -0
  329. data/ext/boost/date_time/posix_time/posix_time_duration.hpp +82 -0
  330. data/ext/boost/date_time/posix_time/posix_time_io.hpp +246 -0
  331. data/ext/boost/date_time/posix_time/posix_time_system.hpp +68 -0
  332. data/ext/boost/date_time/posix_time/posix_time_types.hpp +55 -0
  333. data/ext/boost/date_time/posix_time/ptime.hpp +65 -0
  334. data/ext/boost/date_time/posix_time/time_formatters.hpp +289 -0
  335. data/ext/boost/date_time/posix_time/time_parsers.hpp +44 -0
  336. data/ext/boost/date_time/posix_time/time_period.hpp +29 -0
  337. data/ext/boost/date_time/special_defs.hpp +25 -0
  338. data/ext/boost/date_time/special_values_formatter.hpp +96 -0
  339. data/ext/boost/date_time/special_values_parser.hpp +159 -0
  340. data/ext/boost/date_time/string_convert.hpp +33 -0
  341. data/ext/boost/date_time/string_parse_tree.hpp +278 -0
  342. data/ext/boost/date_time/strings_from_facet.hpp +123 -0
  343. data/ext/boost/date_time/time.hpp +190 -0
  344. data/ext/boost/date_time/time_clock.hpp +83 -0
  345. data/ext/boost/date_time/time_defs.hpp +33 -0
  346. data/ext/boost/date_time/time_duration.hpp +281 -0
  347. data/ext/boost/date_time/time_facet.hpp +1263 -0
  348. data/ext/boost/date_time/time_formatting_streams.hpp +119 -0
  349. data/ext/boost/date_time/time_iterator.hpp +52 -0
  350. data/ext/boost/date_time/time_parsing.hpp +321 -0
  351. data/ext/boost/date_time/time_resolution_traits.hpp +140 -0
  352. data/ext/boost/date_time/time_system_counted.hpp +254 -0
  353. data/ext/boost/date_time/time_system_split.hpp +213 -0
  354. data/ext/boost/date_time/wrapping_int.hpp +163 -0
  355. data/ext/boost/date_time/year_month_day.hpp +45 -0
  356. data/ext/boost/detail/atomic_count.hpp +124 -0
  357. data/ext/boost/detail/atomic_count_gcc.hpp +68 -0
  358. data/ext/boost/detail/atomic_count_gcc_x86.hpp +84 -0
  359. data/ext/boost/detail/atomic_count_pthreads.hpp +96 -0
  360. data/ext/boost/detail/atomic_count_solaris.hpp +59 -0
  361. data/ext/boost/detail/atomic_count_sync.hpp +57 -0
  362. data/ext/boost/detail/atomic_count_win32.hpp +63 -0
  363. data/ext/boost/detail/bad_weak_ptr.hpp +59 -0
  364. data/ext/boost/detail/call_traits.hpp +164 -0
  365. data/ext/boost/detail/endian.hpp +73 -0
  366. data/ext/boost/detail/indirect_traits.hpp +487 -0
  367. data/ext/boost/detail/iterator.hpp +494 -0
  368. data/ext/boost/detail/lcast_precision.hpp +184 -0
  369. data/ext/boost/detail/limits.hpp +449 -0
  370. data/ext/boost/detail/reference_content.hpp +141 -0
  371. data/ext/boost/detail/shared_count.hpp +375 -0
  372. data/ext/boost/detail/sp_counted_base.hpp +81 -0
  373. data/ext/boost/detail/sp_counted_base_acc_ia64.hpp +150 -0
  374. data/ext/boost/detail/sp_counted_base_cw_ppc.hpp +170 -0
  375. data/ext/boost/detail/sp_counted_base_cw_x86.hpp +158 -0
  376. data/ext/boost/detail/sp_counted_base_gcc_ia64.hpp +157 -0
  377. data/ext/boost/detail/sp_counted_base_gcc_ppc.hpp +181 -0
  378. data/ext/boost/detail/sp_counted_base_gcc_sparc.hpp +166 -0
  379. data/ext/boost/detail/sp_counted_base_gcc_x86.hpp +173 -0
  380. data/ext/boost/detail/sp_counted_base_nt.hpp +107 -0
  381. data/ext/boost/detail/sp_counted_base_pt.hpp +135 -0
  382. data/ext/boost/detail/sp_counted_base_solaris.hpp +113 -0
  383. data/ext/boost/detail/sp_counted_base_sync.hpp +151 -0
  384. data/ext/boost/detail/sp_counted_base_w32.hpp +130 -0
  385. data/ext/boost/detail/sp_counted_impl.hpp +231 -0
  386. data/ext/boost/detail/sp_typeinfo.hpp +83 -0
  387. data/ext/boost/detail/workaround.hpp +202 -0
  388. data/ext/boost/enable_shared_from_this.hpp +73 -0
  389. data/ext/boost/function/detail/function_iterate.hpp +16 -0
  390. data/ext/boost/function/detail/maybe_include.hpp +267 -0
  391. data/ext/boost/function/detail/prologue.hpp +25 -0
  392. data/ext/boost/function/function_base.hpp +762 -0
  393. data/ext/boost/function/function_template.hpp +969 -0
  394. data/ext/boost/function.hpp +66 -0
  395. data/ext/boost/function_equal.hpp +28 -0
  396. data/ext/boost/get_pointer.hpp +29 -0
  397. data/ext/boost/implicit_cast.hpp +29 -0
  398. data/ext/boost/integer_traits.hpp +236 -0
  399. data/ext/boost/io/ios_state.hpp +431 -0
  400. data/ext/boost/io_fwd.hpp +67 -0
  401. data/ext/boost/is_placeholder.hpp +31 -0
  402. data/ext/boost/iterator/detail/config_def.hpp +135 -0
  403. data/ext/boost/iterator/detail/config_undef.hpp +25 -0
  404. data/ext/boost/iterator/detail/enable_if.hpp +86 -0
  405. data/ext/boost/iterator/detail/facade_iterator_category.hpp +200 -0
  406. data/ext/boost/iterator/detail/minimum_category.hpp +116 -0
  407. data/ext/boost/iterator/interoperable.hpp +50 -0
  408. data/ext/boost/iterator/iterator_adaptor.hpp +366 -0
  409. data/ext/boost/iterator/iterator_categories.hpp +188 -0
  410. data/ext/boost/iterator/iterator_facade.hpp +879 -0
  411. data/ext/boost/iterator/iterator_traits.hpp +92 -0
  412. data/ext/boost/iterator/reverse_iterator.hpp +69 -0
  413. data/ext/boost/iterator/transform_iterator.hpp +188 -0
  414. data/ext/boost/iterator.hpp +59 -0
  415. data/ext/boost/lexical_cast.hpp +1205 -0
  416. data/ext/boost/limits.hpp +146 -0
  417. data/ext/boost/mem_fn.hpp +389 -0
  418. data/ext/boost/mpl/always.hpp +39 -0
  419. data/ext/boost/mpl/and.hpp +60 -0
  420. data/ext/boost/mpl/apply.hpp +229 -0
  421. data/ext/boost/mpl/apply_fwd.hpp +107 -0
  422. data/ext/boost/mpl/apply_wrap.hpp +203 -0
  423. data/ext/boost/mpl/arg.hpp +131 -0
  424. data/ext/boost/mpl/arg_fwd.hpp +28 -0
  425. data/ext/boost/mpl/assert.hpp +370 -0
  426. data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
  427. data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
  428. data/ext/boost/mpl/aux_/arity.hpp +39 -0
  429. data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
  430. data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
  431. data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
  432. data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
  433. data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
  434. data/ext/boost/mpl/aux_/config/compiler.hpp +64 -0
  435. data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
  436. data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
  437. data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
  438. data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
  439. data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
  440. data/ext/boost/mpl/aux_/config/has_xxx.hpp +33 -0
  441. data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
  442. data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
  443. data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
  444. data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
  445. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
  446. data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
  447. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
  448. data/ext/boost/mpl/aux_/config/pp_counter.hpp +26 -0
  449. data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
  450. data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
  451. data/ext/boost/mpl/aux_/config/ttp.hpp +41 -0
  452. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
  453. data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
  454. data/ext/boost/mpl/aux_/full_lambda.hpp +354 -0
  455. data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
  456. data/ext/boost/mpl/aux_/has_type.hpp +23 -0
  457. data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
  458. data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
  459. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
  460. data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
  461. data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
  462. data/ext/boost/mpl/aux_/na.hpp +95 -0
  463. data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
  464. data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
  465. data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
  466. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
  467. data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
  468. data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
  469. data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
  470. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
  471. data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
  472. data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
  473. data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
  474. data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
  475. data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
  476. data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
  477. data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
  478. data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
  479. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +101 -0
  480. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
  481. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
  482. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
  483. data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
  484. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
  485. data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
  486. data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
  487. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
  488. data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
  489. data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
  490. data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
  491. data/ext/boost/mpl/bind.hpp +551 -0
  492. data/ext/boost/mpl/bind_fwd.hpp +99 -0
  493. data/ext/boost/mpl/bool.hpp +39 -0
  494. data/ext/boost/mpl/bool_fwd.hpp +33 -0
  495. data/ext/boost/mpl/eval_if.hpp +71 -0
  496. data/ext/boost/mpl/has_xxx.hpp +272 -0
  497. data/ext/boost/mpl/identity.hpp +45 -0
  498. data/ext/boost/mpl/if.hpp +135 -0
  499. data/ext/boost/mpl/int.hpp +22 -0
  500. data/ext/boost/mpl/int_fwd.hpp +27 -0
  501. data/ext/boost/mpl/integral_c.hpp +51 -0
  502. data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
  503. data/ext/boost/mpl/integral_c_tag.hpp +26 -0
  504. data/ext/boost/mpl/lambda.hpp +29 -0
  505. data/ext/boost/mpl/lambda_fwd.hpp +57 -0
  506. data/ext/boost/mpl/limits/arity.hpp +21 -0
  507. data/ext/boost/mpl/logical.hpp +21 -0
  508. data/ext/boost/mpl/next.hpp +19 -0
  509. data/ext/boost/mpl/next_prior.hpp +49 -0
  510. data/ext/boost/mpl/not.hpp +51 -0
  511. data/ext/boost/mpl/or.hpp +61 -0
  512. data/ext/boost/mpl/placeholders.hpp +100 -0
  513. data/ext/boost/mpl/protect.hpp +55 -0
  514. data/ext/boost/mpl/quote.hpp +140 -0
  515. data/ext/boost/mpl/size_t.hpp +25 -0
  516. data/ext/boost/mpl/size_t_fwd.hpp +28 -0
  517. data/ext/boost/mpl/void.hpp +76 -0
  518. data/ext/boost/mpl/void_fwd.hpp +26 -0
  519. data/ext/boost/next_prior.hpp +51 -0
  520. data/ext/boost/non_type.hpp +27 -0
  521. data/ext/boost/noncopyable.hpp +36 -0
  522. data/ext/boost/none.hpp +28 -0
  523. data/ext/boost/none_t.hpp +24 -0
  524. data/ext/boost/operators.hpp +943 -0
  525. data/ext/boost/optional/optional.hpp +922 -0
  526. data/ext/boost/optional/optional_fwd.hpp +22 -0
  527. data/ext/boost/optional.hpp +18 -0
  528. data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
  529. data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
  530. data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
  531. data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
  532. data/ext/boost/preprocessor/array/data.hpp +28 -0
  533. data/ext/boost/preprocessor/array/elem.hpp +29 -0
  534. data/ext/boost/preprocessor/array/size.hpp +28 -0
  535. data/ext/boost/preprocessor/cat.hpp +35 -0
  536. data/ext/boost/preprocessor/comma_if.hpp +17 -0
  537. data/ext/boost/preprocessor/config/config.hpp +70 -0
  538. data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
  539. data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
  540. data/ext/boost/preprocessor/control/if.hpp +30 -0
  541. data/ext/boost/preprocessor/control/iif.hpp +34 -0
  542. data/ext/boost/preprocessor/control/while.hpp +312 -0
  543. data/ext/boost/preprocessor/debug/error.hpp +33 -0
  544. data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
  545. data/ext/boost/preprocessor/detail/check.hpp +48 -0
  546. data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
  547. data/ext/boost/preprocessor/empty.hpp +17 -0
  548. data/ext/boost/preprocessor/enum.hpp +17 -0
  549. data/ext/boost/preprocessor/enum_params.hpp +17 -0
  550. data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
  551. data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
  552. data/ext/boost/preprocessor/identity.hpp +17 -0
  553. data/ext/boost/preprocessor/inc.hpp +17 -0
  554. data/ext/boost/preprocessor/iterate.hpp +17 -0
  555. data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
  556. data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
  557. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
  558. data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
  559. data/ext/boost/preprocessor/list/adt.hpp +73 -0
  560. data/ext/boost/preprocessor/list/append.hpp +40 -0
  561. data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
  562. data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
  563. data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
  564. data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
  565. data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
  566. data/ext/boost/preprocessor/list/reverse.hpp +40 -0
  567. data/ext/boost/preprocessor/list/transform.hpp +49 -0
  568. data/ext/boost/preprocessor/logical/and.hpp +30 -0
  569. data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
  570. data/ext/boost/preprocessor/logical/bool.hpp +288 -0
  571. data/ext/boost/preprocessor/logical/compl.hpp +36 -0
  572. data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
  573. data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
  574. data/ext/boost/preprocessor/repeat.hpp +17 -0
  575. data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
  576. data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
  577. data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
  578. data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
  579. data/ext/boost/preprocessor/repetition/for.hpp +306 -0
  580. data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
  581. data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
  582. data/ext/boost/preprocessor/seq/elem.hpp +304 -0
  583. data/ext/boost/preprocessor/seq/enum.hpp +288 -0
  584. data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
  585. data/ext/boost/preprocessor/seq/seq.hpp +44 -0
  586. data/ext/boost/preprocessor/seq/size.hpp +548 -0
  587. data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
  588. data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
  589. data/ext/boost/preprocessor/slot/slot.hpp +32 -0
  590. data/ext/boost/preprocessor/stringize.hpp +33 -0
  591. data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
  592. data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
  593. data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
  594. data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
  595. data/ext/boost/range/as_literal.hpp +131 -0
  596. data/ext/boost/range/begin.hpp +132 -0
  597. data/ext/boost/range/config.hpp +54 -0
  598. data/ext/boost/range/const_iterator.hpp +64 -0
  599. data/ext/boost/range/detail/common.hpp +117 -0
  600. data/ext/boost/range/detail/implementation_help.hpp +99 -0
  601. data/ext/boost/range/detail/sfinae.hpp +77 -0
  602. data/ext/boost/range/detail/str_types.hpp +38 -0
  603. data/ext/boost/range/difference_type.hpp +29 -0
  604. data/ext/boost/range/distance.hpp +34 -0
  605. data/ext/boost/range/empty.hpp +34 -0
  606. data/ext/boost/range/end.hpp +131 -0
  607. data/ext/boost/range/functions.hpp +27 -0
  608. data/ext/boost/range/iterator.hpp +72 -0
  609. data/ext/boost/range/iterator_range.hpp +643 -0
  610. data/ext/boost/range/mutable_iterator.hpp +64 -0
  611. data/ext/boost/range/rbegin.hpp +65 -0
  612. data/ext/boost/range/rend.hpp +65 -0
  613. data/ext/boost/range/reverse_iterator.hpp +40 -0
  614. data/ext/boost/range/size.hpp +36 -0
  615. data/ext/boost/range/size_type.hpp +78 -0
  616. data/ext/boost/range/value_type.hpp +34 -0
  617. data/ext/boost/ref.hpp +178 -0
  618. data/ext/boost/shared_ptr.hpp +619 -0
  619. data/ext/boost/src/pthread/exceptions.cpp +146 -0
  620. data/ext/boost/src/pthread/once.cpp +51 -0
  621. data/ext/boost/src/pthread/thread.cpp +709 -0
  622. data/ext/boost/src/pthread/timeconv.inl +130 -0
  623. data/ext/boost/src/tss_null.cpp +34 -0
  624. data/ext/boost/src/win32/exceptions.cpp +124 -0
  625. data/ext/boost/src/win32/thread.cpp +629 -0
  626. data/ext/boost/src/win32/timeconv.inl +130 -0
  627. data/ext/boost/src/win32/tss_dll.cpp +72 -0
  628. data/ext/boost/src/win32/tss_pe.cpp +269 -0
  629. data/ext/boost/static_assert.hpp +122 -0
  630. data/ext/boost/thread/condition.hpp +16 -0
  631. data/ext/boost/thread/condition_variable.hpp +21 -0
  632. data/ext/boost/thread/detail/config.hpp +94 -0
  633. data/ext/boost/thread/detail/move.hpp +33 -0
  634. data/ext/boost/thread/detail/platform.hpp +71 -0
  635. data/ext/boost/thread/exceptions.hpp +109 -0
  636. data/ext/boost/thread/locks.hpp +589 -0
  637. data/ext/boost/thread/mutex.hpp +21 -0
  638. data/ext/boost/thread/once.hpp +29 -0
  639. data/ext/boost/thread/pthread/condition_variable.hpp +184 -0
  640. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +66 -0
  641. data/ext/boost/thread/pthread/mutex.hpp +211 -0
  642. data/ext/boost/thread/pthread/once.hpp +85 -0
  643. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +50 -0
  644. data/ext/boost/thread/pthread/recursive_mutex.hpp +249 -0
  645. data/ext/boost/thread/pthread/thread.hpp +339 -0
  646. data/ext/boost/thread/pthread/thread_data.hpp +102 -0
  647. data/ext/boost/thread/pthread/timespec.hpp +28 -0
  648. data/ext/boost/thread/pthread/tss.hpp +103 -0
  649. data/ext/boost/thread/recursive_mutex.hpp +21 -0
  650. data/ext/boost/thread/thread.hpp +22 -0
  651. data/ext/boost/thread/thread_time.hpp +46 -0
  652. data/ext/boost/thread/tss.hpp +18 -0
  653. data/ext/boost/thread/xtime.hpp +88 -0
  654. data/ext/boost/thread.hpp +21 -0
  655. data/ext/boost/throw_exception.hpp +46 -0
  656. data/ext/boost/token_functions.hpp +621 -0
  657. data/ext/boost/token_iterator.hpp +128 -0
  658. data/ext/boost/tokenizer.hpp +98 -0
  659. data/ext/boost/type.hpp +18 -0
  660. data/ext/boost/type_traits/add_const.hpp +47 -0
  661. data/ext/boost/type_traits/add_pointer.hpp +72 -0
  662. data/ext/boost/type_traits/add_reference.hpp +89 -0
  663. data/ext/boost/type_traits/alignment_of.hpp +100 -0
  664. data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
  665. data/ext/boost/type_traits/composite_traits.hpp +29 -0
  666. data/ext/boost/type_traits/config.hpp +76 -0
  667. data/ext/boost/type_traits/conversion_traits.hpp +17 -0
  668. data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
  669. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
  670. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
  671. data/ext/boost/type_traits/detail/false_result.hpp +28 -0
  672. data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
  673. data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
  674. data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
  675. data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
  676. data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
  677. data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
  678. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
  679. data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
  680. data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
  681. data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
  682. data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
  683. data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
  684. data/ext/boost/type_traits/function_traits.hpp +236 -0
  685. data/ext/boost/type_traits/has_nothrow_copy.hpp +39 -0
  686. data/ext/boost/type_traits/has_trivial_copy.hpp +49 -0
  687. data/ext/boost/type_traits/ice.hpp +20 -0
  688. data/ext/boost/type_traits/integral_constant.hpp +53 -0
  689. data/ext/boost/type_traits/intrinsics.hpp +153 -0
  690. data/ext/boost/type_traits/is_abstract.hpp +144 -0
  691. data/ext/boost/type_traits/is_arithmetic.hpp +43 -0
  692. data/ext/boost/type_traits/is_array.hpp +90 -0
  693. data/ext/boost/type_traits/is_class.hpp +128 -0
  694. data/ext/boost/type_traits/is_const.hpp +142 -0
  695. data/ext/boost/type_traits/is_convertible.hpp +418 -0
  696. data/ext/boost/type_traits/is_enum.hpp +180 -0
  697. data/ext/boost/type_traits/is_float.hpp +27 -0
  698. data/ext/boost/type_traits/is_function.hpp +95 -0
  699. data/ext/boost/type_traits/is_integral.hpp +73 -0
  700. data/ext/boost/type_traits/is_member_function_pointer.hpp +134 -0
  701. data/ext/boost/type_traits/is_member_pointer.hpp +114 -0
  702. data/ext/boost/type_traits/is_pod.hpp +135 -0
  703. data/ext/boost/type_traits/is_pointer.hpp +160 -0
  704. data/ext/boost/type_traits/is_reference.hpp +116 -0
  705. data/ext/boost/type_traits/is_same.hpp +103 -0
  706. data/ext/boost/type_traits/is_scalar.hpp +55 -0
  707. data/ext/boost/type_traits/is_union.hpp +49 -0
  708. data/ext/boost/type_traits/is_void.hpp +33 -0
  709. data/ext/boost/type_traits/is_volatile.hpp +131 -0
  710. data/ext/boost/type_traits/remove_const.hpp +78 -0
  711. data/ext/boost/type_traits/remove_cv.hpp +61 -0
  712. data/ext/boost/type_traits/remove_pointer.hpp +43 -0
  713. data/ext/boost/type_traits/remove_reference.hpp +50 -0
  714. data/ext/boost/type_traits/type_with_alignment.hpp +288 -0
  715. data/ext/boost/utility/addressof.hpp +58 -0
  716. data/ext/boost/utility/base_from_member.hpp +87 -0
  717. data/ext/boost/utility/compare_pointees.hpp +68 -0
  718. data/ext/boost/utility/enable_if.hpp +119 -0
  719. data/ext/boost/utility.hpp +19 -0
  720. data/ext/boost/visit_each.hpp +29 -0
  721. data/ext/boost/weak_ptr.hpp +188 -0
  722. data/ext/common/Application.h +511 -0
  723. data/ext/common/ApplicationPool.h +205 -0
  724. data/ext/common/ApplicationPoolServer.h +794 -0
  725. data/ext/common/ApplicationPoolServerExecutable.cpp +743 -0
  726. data/ext/common/ApplicationPoolStatusReporter.h +336 -0
  727. data/ext/common/Base64.cpp +143 -0
  728. data/ext/common/Base64.h +57 -0
  729. data/ext/common/CachedFileStat.cpp +62 -0
  730. data/ext/common/CachedFileStat.h +51 -0
  731. data/ext/common/CachedFileStat.hpp +243 -0
  732. data/ext/common/DummySpawnManager.h +108 -0
  733. data/ext/common/Exceptions.h +258 -0
  734. data/ext/common/FileChangeChecker.h +209 -0
  735. data/ext/common/Logging.cpp +65 -0
  736. data/ext/common/Logging.h +123 -0
  737. data/ext/common/MessageChannel.h +615 -0
  738. data/ext/common/PoolOptions.h +355 -0
  739. data/ext/common/SpawnManager.h +561 -0
  740. data/ext/common/StandardApplicationPool.h +819 -0
  741. data/ext/common/StaticString.h +148 -0
  742. data/ext/common/StringListCreator.h +83 -0
  743. data/ext/common/SystemTime.cpp +33 -0
  744. data/ext/common/SystemTime.h +88 -0
  745. data/ext/common/Timer.h +90 -0
  746. data/ext/common/Utils.cpp +681 -0
  747. data/ext/common/Utils.h +497 -0
  748. data/ext/common/Version.h +31 -0
  749. data/ext/nginx/Configuration.c +1098 -0
  750. data/ext/nginx/Configuration.h +71 -0
  751. data/ext/nginx/ContentHandler.c +1225 -0
  752. data/ext/nginx/ContentHandler.h +64 -0
  753. data/ext/nginx/HelperServer.cpp +850 -0
  754. data/ext/nginx/HttpStatusExtractor.h +350 -0
  755. data/ext/nginx/ScgiRequestParser.h +317 -0
  756. data/ext/nginx/StaticContentHandler.c +257 -0
  757. data/ext/nginx/StaticContentHandler.h +37 -0
  758. data/ext/nginx/config +45 -0
  759. data/ext/nginx/ngx_http_passenger_module.c +653 -0
  760. data/ext/nginx/ngx_http_passenger_module.h +72 -0
  761. data/ext/oxt/backtrace.cpp +177 -0
  762. data/ext/oxt/backtrace.hpp +135 -0
  763. data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
  764. data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
  765. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
  766. data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
  767. data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
  768. data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
  769. data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
  770. data/ext/oxt/macros.hpp +58 -0
  771. data/ext/oxt/spin_lock.hpp +55 -0
  772. data/ext/oxt/system_calls.cpp +340 -0
  773. data/ext/oxt/system_calls.hpp +243 -0
  774. data/ext/oxt/thread.cpp +32 -0
  775. data/ext/oxt/thread.hpp +239 -0
  776. data/ext/oxt/tracable_exception.cpp +87 -0
  777. data/ext/oxt/tracable_exception.hpp +35 -0
  778. data/ext/phusion_passenger/extconf.rb +36 -0
  779. data/ext/phusion_passenger/native_support.c +308 -0
  780. data/generators/colouringcode-passenger/USAGE +1 -0
  781. data/generators/colouringcode-passenger/passenger_template_generator.rb +16 -0
  782. data/generators/colouringcode-passenger/templates/app_exited_during_initialization.html.erb +0 -0
  783. data/generators/colouringcode-passenger/templates/app_init_error.html.erb +0 -0
  784. data/generators/colouringcode-passenger/templates/database_error.html.erb +0 -0
  785. data/generators/colouringcode-passenger/templates/error_layout.html.erb +0 -0
  786. data/generators/colouringcode-passenger/templates/framework_init_error.html.erb +0 -0
  787. data/generators/colouringcode-passenger/templates/general_error.html.erb +0 -0
  788. data/generators/colouringcode-passenger/templates/invalid_app_root.html.erb +0 -0
  789. data/generators/colouringcode-passenger/templates/load_error.html.erb +0 -0
  790. data/generators/colouringcode-passenger/templates/version_not_found.html.erb +0 -0
  791. data/lib/phusion_passenger/abstract_installer.rb +196 -0
  792. data/lib/phusion_passenger/abstract_request_handler.rb +475 -0
  793. data/lib/phusion_passenger/abstract_server.rb +369 -0
  794. data/lib/phusion_passenger/abstract_server_collection.rb +306 -0
  795. data/lib/phusion_passenger/admin_tools/control_process.rb +150 -0
  796. data/lib/phusion_passenger/admin_tools.rb +48 -0
  797. data/lib/phusion_passenger/application.rb +113 -0
  798. data/lib/phusion_passenger/console_text_template.rb +66 -0
  799. data/lib/phusion_passenger/constants.rb +31 -0
  800. data/lib/phusion_passenger/dependencies.rb +393 -0
  801. data/lib/phusion_passenger/events.rb +50 -0
  802. data/lib/phusion_passenger/exceptions.rb +103 -0
  803. data/lib/phusion_passenger/html_template.rb +119 -0
  804. data/lib/phusion_passenger/message_channel.rb +229 -0
  805. data/lib/phusion_passenger/packaging.rb +39 -0
  806. data/lib/phusion_passenger/platform_info.rb +550 -0
  807. data/lib/phusion_passenger/rack/application_spawner.rb +146 -0
  808. data/lib/phusion_passenger/rack/request_handler.rb +125 -0
  809. data/lib/phusion_passenger/railz/application_spawner.rb +386 -0
  810. data/lib/phusion_passenger/railz/cgi_fixed.rb +68 -0
  811. data/lib/phusion_passenger/railz/framework_spawner.rb +334 -0
  812. data/lib/phusion_passenger/railz/request_handler.rb +73 -0
  813. data/lib/phusion_passenger/simple_benchmarking.rb +52 -0
  814. data/lib/phusion_passenger/spawn_manager.rb +372 -0
  815. data/lib/phusion_passenger/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +9 -0
  816. data/lib/phusion_passenger/templates/apache2/config_snippets.txt.erb +13 -0
  817. data/lib/phusion_passenger/templates/apache2/deployment_example.txt.erb +23 -0
  818. data/lib/phusion_passenger/templates/apache2/no_write_permission_to_passenger_root.txt.erb +9 -0
  819. data/lib/phusion_passenger/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  820. data/lib/phusion_passenger/templates/apache2/run_installer_as_root.txt.erb +8 -0
  821. data/lib/phusion_passenger/templates/apache2/welcome.txt.erb +15 -0
  822. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
  823. data/lib/phusion_passenger/templates/app_init_error.html.erb +64 -0
  824. data/lib/phusion_passenger/templates/database_error.html.erb +66 -0
  825. data/lib/phusion_passenger/templates/error_layout.css +97 -0
  826. data/lib/phusion_passenger/templates/error_layout.html.erb +39 -0
  827. data/lib/phusion_passenger/templates/framework_init_error.html.erb +39 -0
  828. data/lib/phusion_passenger/templates/general_error.html.erb +22 -0
  829. data/lib/phusion_passenger/templates/invalid_app_root.html.erb +9 -0
  830. data/lib/phusion_passenger/templates/load_error.html.erb +46 -0
  831. data/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb +8 -0
  832. data/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb +11 -0
  833. data/lib/phusion_passenger/templates/nginx/config_snippets.txt.erb +17 -0
  834. data/lib/phusion_passenger/templates/nginx/config_snippets_inserted.txt.erb +20 -0
  835. data/lib/phusion_passenger/templates/nginx/confirm_extra_configure_flags.txt.erb +5 -0
  836. data/lib/phusion_passenger/templates/nginx/deployment_example.txt.erb +22 -0
  837. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_downloaded.txt.erb +11 -0
  838. data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_extracted.txt.erb +11 -0
  839. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
  840. data/lib/phusion_passenger/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +20 -0
  841. data/lib/phusion_passenger/templates/nginx/query_download_and_install.txt.erb +21 -0
  842. data/lib/phusion_passenger/templates/nginx/run_installer_as_root.txt.erb +8 -0
  843. data/lib/phusion_passenger/templates/nginx/welcome.txt.erb +15 -0
  844. data/lib/phusion_passenger/templates/version_not_found.html.erb +34 -0
  845. data/lib/phusion_passenger/utils.rb +603 -0
  846. data/lib/phusion_passenger/wsgi/application_spawner.rb +104 -0
  847. data/lib/phusion_passenger/wsgi/request_handler.py +199 -0
  848. data/man/passenger-config.1 +29 -0
  849. data/man/passenger-make-enterprisey.8 +23 -0
  850. data/man/passenger-memory-stats.8 +33 -0
  851. data/man/passenger-status.8 +43 -0
  852. data/man/passenger-stress-test.1 +43 -0
  853. data/misc/copy_boost_headers.rb +125 -0
  854. data/misc/find_owner_pipe_leaks.rb +128 -0
  855. data/misc/rake/cplusplus.rb +57 -0
  856. data/misc/rake/extensions.rb +182 -0
  857. data/misc/rake/gempackagetask.rb +99 -0
  858. data/misc/rake/packagetask.rb +186 -0
  859. data/misc/rake/rdoctask.rb +209 -0
  860. data/misc/render_error_pages.rb +116 -0
  861. data/test/ApplicationPoolServerTest.cpp +114 -0
  862. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +33 -0
  863. data/test/ApplicationPoolTest.cpp +599 -0
  864. data/test/Base64Test.cpp +48 -0
  865. data/test/CachedFileStatTest.cpp +402 -0
  866. data/test/CxxTestMain.cpp +143 -0
  867. data/test/FileChangeCheckerTest.cpp +331 -0
  868. data/test/HttpStatusExtractorTest.cpp +198 -0
  869. data/test/MessageChannelTest.cpp +312 -0
  870. data/test/PoolOptionsTest.cpp +117 -0
  871. data/test/ScgiRequestParserTest.cpp +337 -0
  872. data/test/SpawnManagerTest.cpp +64 -0
  873. data/test/StandardApplicationPoolTest.cpp +27 -0
  874. data/test/StaticStringTest.cpp +51 -0
  875. data/test/SystemTimeTest.cpp +37 -0
  876. data/test/UtilsTest.cpp +257 -0
  877. data/test/config.yml.example +30 -0
  878. data/test/integration_tests/apache2_tests.rb +595 -0
  879. data/test/integration_tests/hello_world_rack_spec.rb +36 -0
  880. data/test/integration_tests/hello_world_wsgi_spec.rb +41 -0
  881. data/test/integration_tests/mycook_spec.rb +192 -0
  882. data/test/integration_tests/nginx_tests.rb +151 -0
  883. data/test/oxt/backtrace_test.cpp +128 -0
  884. data/test/oxt/oxt_test_main.cpp +25 -0
  885. data/test/oxt/syscall_interruption_test.cpp +38 -0
  886. data/test/ruby/abstract_request_handler_spec.rb +85 -0
  887. data/test/ruby/abstract_server_collection_spec.rb +246 -0
  888. data/test/ruby/abstract_server_spec.rb +51 -0
  889. data/test/ruby/application_spec.rb +43 -0
  890. data/test/ruby/message_channel_spec.rb +170 -0
  891. data/test/ruby/rack/application_spawner_spec.rb +99 -0
  892. data/test/ruby/rails/application_spawner_spec.rb +159 -0
  893. data/test/ruby/rails/framework_spawner_spec.rb +133 -0
  894. data/test/ruby/rails/minimal_spawner_spec.rb +93 -0
  895. data/test/ruby/rails/spawner_error_handling_spec.rb +107 -0
  896. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +97 -0
  897. data/test/ruby/spawn_manager_spec.rb +205 -0
  898. data/test/ruby/spawn_server_spec.rb +26 -0
  899. data/test/ruby/utils_spec.rb +335 -0
  900. data/test/ruby/wsgi/application_spawner_spec.rb +54 -0
  901. data/test/stub/apache2/httpd.conf.erb +81 -0
  902. data/test/stub/apache2/mime.types +748 -0
  903. data/test/stub/garbage1.dat +0 -0
  904. data/test/stub/garbage2.dat +0 -0
  905. data/test/stub/garbage3.dat +0 -0
  906. data/test/stub/http_request.yml +23 -0
  907. data/test/stub/message_channel.rb +9 -0
  908. data/test/stub/message_channel_2.rb +10 -0
  909. data/test/stub/message_channel_3.rb +17 -0
  910. data/test/stub/nginx/koi-utf +109 -0
  911. data/test/stub/nginx/koi-win +103 -0
  912. data/test/stub/nginx/mime.types +70 -0
  913. data/test/stub/nginx/nginx.conf.erb +57 -0
  914. data/test/stub/nginx/win-utf +126 -0
  915. data/test/stub/rack/config.ru +4 -0
  916. data/test/stub/rack/public/rack.jpg +0 -0
  917. data/test/stub/rails_apps/foobar/app/controllers/application.rb +12 -0
  918. data/test/stub/rails_apps/foobar/app/controllers/bar_controller_1.rb +5 -0
  919. data/test/stub/rails_apps/foobar/app/controllers/bar_controller_2.rb +5 -0
  920. data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +21 -0
  921. data/test/stub/rails_apps/foobar/app/helpers/application_helper.rb +3 -0
  922. data/test/stub/rails_apps/foobar/config/boot.rb +108 -0
  923. data/test/stub/rails_apps/foobar/config/database.yml +19 -0
  924. data/test/stub/rails_apps/foobar/config/environment.rb +59 -0
  925. data/test/stub/rails_apps/foobar/config/environments/development.rb +17 -0
  926. data/test/stub/rails_apps/foobar/config/environments/production.rb +18 -0
  927. data/test/stub/rails_apps/foobar/config/initializers/inflections.rb +10 -0
  928. data/test/stub/rails_apps/foobar/config/initializers/mime_types.rb +5 -0
  929. data/test/stub/rails_apps/foobar/config/routes.rb +35 -0
  930. data/test/stub/rails_apps/mycook/app/controllers/application.rb +12 -0
  931. data/test/stub/rails_apps/mycook/app/controllers/recipes_controller.rb +5 -0
  932. data/test/stub/rails_apps/mycook/app/controllers/uploads_controller.rb +15 -0
  933. data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +71 -0
  934. data/test/stub/rails_apps/mycook/app/helpers/application_helper.rb +3 -0
  935. data/test/stub/rails_apps/mycook/app/views/layouts/default.rhtml +26 -0
  936. data/test/stub/rails_apps/mycook/app/views/recipes/create.rhtml +13 -0
  937. data/test/stub/rails_apps/mycook/app/views/recipes/index.rhtml +3 -0
  938. data/test/stub/rails_apps/mycook/app/views/recipes/new.rhtml +8 -0
  939. data/test/stub/rails_apps/mycook/app/views/uploads/index.rhtml +1 -0
  940. data/test/stub/rails_apps/mycook/app/views/uploads/new.html.erb +8 -0
  941. data/test/stub/rails_apps/mycook/app/views/welcome/cached.rhtml +1 -0
  942. data/test/stub/rails_apps/mycook/app/views/welcome/index.rhtml +20 -0
  943. data/test/stub/rails_apps/mycook/config/boot.rb +108 -0
  944. data/test/stub/rails_apps/mycook/config/database.yml +19 -0
  945. data/test/stub/rails_apps/mycook/config/environment.rb +61 -0
  946. data/test/stub/rails_apps/mycook/config/environments/development.rb +18 -0
  947. data/test/stub/rails_apps/mycook/config/environments/production.rb +19 -0
  948. data/test/stub/rails_apps/mycook/config/initializers/inflections.rb +10 -0
  949. data/test/stub/rails_apps/mycook/config/initializers/mime_types.rb +5 -0
  950. data/test/stub/rails_apps/mycook/config/routes.rb +38 -0
  951. data/test/stub/rails_apps/mycook/log/useless.txt +1 -0
  952. data/test/stub/rails_apps/mycook/public/404.html +30 -0
  953. data/test/stub/rails_apps/mycook/public/422.html +30 -0
  954. data/test/stub/rails_apps/mycook/public/500.html +30 -0
  955. data/test/stub/rails_apps/mycook/public/dispatch.cgi +10 -0
  956. data/test/stub/rails_apps/mycook/public/dispatch.fcgi +24 -0
  957. data/test/stub/rails_apps/mycook/public/dispatch.rb +10 -0
  958. data/test/stub/rails_apps/mycook/public/favicon.ico +0 -0
  959. data/test/stub/rails_apps/mycook/public/images/angrywizard.gif +0 -0
  960. data/test/stub/rails_apps/mycook/public/images/cookbook.gif +0 -0
  961. data/test/stub/rails_apps/mycook/public/images/header.png +0 -0
  962. data/test/stub/rails_apps/mycook/public/images/rails.png +0 -0
  963. data/test/stub/rails_apps/mycook/public/javascripts/application.js +2 -0
  964. data/test/stub/rails_apps/mycook/public/javascripts/controls.js +963 -0
  965. data/test/stub/rails_apps/mycook/public/javascripts/dragdrop.js +972 -0
  966. data/test/stub/rails_apps/mycook/public/javascripts/effects.js +1120 -0
  967. data/test/stub/rails_apps/mycook/public/javascripts/prototype.js +4225 -0
  968. data/test/stub/rails_apps/mycook/public/robots.txt +5 -0
  969. data/test/stub/rails_apps/mycook/public/uploads.html +26 -0
  970. data/test/stub/rails_apps/mycook/public/welcome/cached.html +26 -0
  971. data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
  972. data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
  973. data/test/stub/rails_apps/mycook/tmp/cache/useless.txt +1 -0
  974. data/test/stub/rails_apps/mycook/tmp/pids/useless.txt +1 -0
  975. data/test/stub/rails_apps/mycook/tmp/sessions/useless.txt +1 -0
  976. data/test/stub/rails_apps/mycook/tmp/sockets/useless.txt +1 -0
  977. data/test/stub/spawn_server.rb +20 -0
  978. data/test/stub/upload_data.txt +494 -0
  979. data/test/stub/vendor_rails/minimal/README +1 -0
  980. data/test/stub/vendor_rails/minimal/actionmailer/lib/action_mailer.rb +0 -0
  981. data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +19 -0
  982. data/test/stub/vendor_rails/minimal/actionpack/lib/action_pack.rb +0 -0
  983. data/test/stub/vendor_rails/minimal/actionpack/lib/action_view.rb +0 -0
  984. data/test/stub/vendor_rails/minimal/activerecord/lib/active_record.rb +7 -0
  985. data/test/stub/vendor_rails/minimal/activeresource/lib/active_resource.rb +0 -0
  986. data/test/stub/vendor_rails/minimal/activesupport/lib/active_support/whiny_nil.rb +0 -0
  987. data/test/stub/vendor_rails/minimal/activesupport/lib/active_support.rb +17 -0
  988. data/test/stub/vendor_rails/minimal/railties/lib/dispatcher.rb +0 -0
  989. data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +52 -0
  990. data/test/stub/vendor_rails/minimal/railties/lib/ruby_version_check.rb +1 -0
  991. data/test/stub/wsgi/passenger_wsgi.py +3 -0
  992. data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
  993. data/test/stub/zsfa/header.png +0 -0
  994. data/test/stub/zsfa/index.html +14 -0
  995. data/test/stub/zsfa/zsfa.png +0 -0
  996. data/test/support/Support.cpp +84 -0
  997. data/test/support/Support.h +118 -0
  998. data/test/support/apache2_controller.rb +250 -0
  999. data/test/support/config.rb +38 -0
  1000. data/test/support/multipart.rb +62 -0
  1001. data/test/support/nginx_controller.rb +98 -0
  1002. data/test/support/run_rspec_tests.rb +10 -0
  1003. data/test/support/test_helper.rb +207 -0
  1004. data/test/support/tut.h +1234 -0
  1005. data/test/support/tut_reporter.h +256 -0
  1006. data/test/support/valgrind.h +2539 -0
  1007. data/vendor/README +13 -0
  1008. data/vendor/README_FOR_PACKAGERS +1 -0
  1009. data/vendor/rack-1.0.0-git/COPYING +18 -0
  1010. data/vendor/rack-1.0.0-git/KNOWN-ISSUES +18 -0
  1011. data/vendor/rack-1.0.0-git/README +353 -0
  1012. data/vendor/rack-1.0.0-git/Rakefile +164 -0
  1013. data/vendor/rack-1.0.0-git/lib/rack/adapter/camping.rb +22 -0
  1014. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/handler.rb +37 -0
  1015. data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/request.rb +37 -0
  1016. data/vendor/rack-1.0.0-git/lib/rack/auth/basic.rb +58 -0
  1017. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/md5.rb +124 -0
  1018. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/nonce.rb +51 -0
  1019. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/params.rb +55 -0
  1020. data/vendor/rack-1.0.0-git/lib/rack/auth/digest/request.rb +40 -0
  1021. data/vendor/rack-1.0.0-git/lib/rack/auth/openid.rb +487 -0
  1022. data/vendor/rack-1.0.0-git/lib/rack/builder.rb +63 -0
  1023. data/vendor/rack-1.0.0-git/lib/rack/cascade.rb +41 -0
  1024. data/vendor/rack-1.0.0-git/lib/rack/chunked.rb +49 -0
  1025. data/vendor/rack-1.0.0-git/lib/rack/commonlogger.rb +52 -0
  1026. data/vendor/rack-1.0.0-git/lib/rack/conditionalget.rb +47 -0
  1027. data/vendor/rack-1.0.0-git/lib/rack/content_length.rb +29 -0
  1028. data/vendor/rack-1.0.0-git/lib/rack/content_type.rb +23 -0
  1029. data/vendor/rack-1.0.0-git/lib/rack/deflater.rb +96 -0
  1030. data/vendor/rack-1.0.0-git/lib/rack/directory.rb +153 -0
  1031. data/vendor/rack-1.0.0-git/lib/rack/file.rb +88 -0
  1032. data/vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb +61 -0
  1033. data/vendor/rack-1.0.0-git/lib/rack/handler/evented_mongrel.rb +8 -0
  1034. data/vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb +88 -0
  1035. data/vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb +55 -0
  1036. data/vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb +84 -0
  1037. data/vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb +59 -0
  1038. data/vendor/rack-1.0.0-git/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  1039. data/vendor/rack-1.0.0-git/lib/rack/handler/thin.rb +18 -0
  1040. data/vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb +67 -0
  1041. data/vendor/rack-1.0.0-git/lib/rack/handler.rb +69 -0
  1042. data/vendor/rack-1.0.0-git/lib/rack/head.rb +19 -0
  1043. data/vendor/rack-1.0.0-git/lib/rack/lint.rb +537 -0
  1044. data/vendor/rack-1.0.0-git/lib/rack/lobster.rb +65 -0
  1045. data/vendor/rack-1.0.0-git/lib/rack/lock.rb +16 -0
  1046. data/vendor/rack-1.0.0-git/lib/rack/methodoverride.rb +27 -0
  1047. data/vendor/rack-1.0.0-git/lib/rack/mime.rb +204 -0
  1048. data/vendor/rack-1.0.0-git/lib/rack/mock.rb +184 -0
  1049. data/vendor/rack-1.0.0-git/lib/rack/recursive.rb +57 -0
  1050. data/vendor/rack-1.0.0-git/lib/rack/reloader.rb +106 -0
  1051. data/vendor/rack-1.0.0-git/lib/rack/request.rb +248 -0
  1052. data/vendor/rack-1.0.0-git/lib/rack/response.rb +183 -0
  1053. data/vendor/rack-1.0.0-git/lib/rack/rewindable_input.rb +100 -0
  1054. data/vendor/rack-1.0.0-git/lib/rack/session/abstract/id.rb +142 -0
  1055. data/vendor/rack-1.0.0-git/lib/rack/session/cookie.rb +91 -0
  1056. data/vendor/rack-1.0.0-git/lib/rack/session/memcache.rb +109 -0
  1057. data/vendor/rack-1.0.0-git/lib/rack/session/pool.rb +100 -0
  1058. data/vendor/rack-1.0.0-git/lib/rack/showexceptions.rb +349 -0
  1059. data/vendor/rack-1.0.0-git/lib/rack/showstatus.rb +106 -0
  1060. data/vendor/rack-1.0.0-git/lib/rack/static.rb +38 -0
  1061. data/vendor/rack-1.0.0-git/lib/rack/urlmap.rb +55 -0
  1062. data/vendor/rack-1.0.0-git/lib/rack/utils.rb +522 -0
  1063. data/vendor/rack-1.0.0-git/lib/rack.rb +90 -0
  1064. metadata +1152 -0
@@ -0,0 +1,603 @@
1
+ # encoding: binary
2
+ # Phusion Passenger - http://www.modrails.com/
3
+ # Copyright (c) 2008, 2009 Phusion
4
+ #
5
+ # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in
15
+ # all copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ # THE SOFTWARE.
24
+
25
+ require 'rubygems'
26
+ require 'thread'
27
+ if (!defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby") && RUBY_VERSION < "1.8.7"
28
+ require 'fastthread'
29
+ end
30
+ require 'pathname'
31
+ require 'etc'
32
+ require 'fcntl'
33
+ require 'tempfile'
34
+ require 'stringio'
35
+ require 'phusion_passenger/exceptions'
36
+ if !defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby"
37
+ require 'phusion_passenger/native_support'
38
+ end
39
+
40
+ module PhusionPassenger
41
+
42
+ # Utility functions.
43
+ module Utils
44
+ protected
45
+ # Return the canonicalized version of +path+. This path is guaranteed to
46
+ # to be "normal", i.e. it doesn't contain stuff like ".." or "/",
47
+ # and it fully resolves symbolic links.
48
+ #
49
+ # Raises SystemCallError if something went wrong. Raises ArgumentError
50
+ # if +path+ is nil. Raises InvalidPath if +path+ does not appear
51
+ # to be a valid path.
52
+ def canonicalize_path(path)
53
+ raise ArgumentError, "The 'path' argument may not be nil" if path.nil?
54
+ return Pathname.new(path).realpath.to_s
55
+ rescue Errno::ENOENT => e
56
+ raise InvalidAPath, e.message
57
+ end
58
+
59
+ # Assert that +app_root+ is a valid Ruby on Rails application root.
60
+ # Raises InvalidPath if that is not the case.
61
+ def assert_valid_app_root(app_root)
62
+ assert_valid_directory(app_root)
63
+ assert_valid_file("#{app_root}/config/environment.rb")
64
+ end
65
+
66
+ # Assert that +path+ is a directory. Raises +InvalidPath+ if it isn't.
67
+ def assert_valid_directory(path)
68
+ if !File.directory?(path)
69
+ raise InvalidPath, "'#{path}' is not a valid directory."
70
+ end
71
+ end
72
+
73
+ # Assert that +path+ is a file. Raises +InvalidPath+ if it isn't.
74
+ def assert_valid_file(path)
75
+ if !File.file?(path)
76
+ raise InvalidPath, "'#{path}' is not a valid file."
77
+ end
78
+ end
79
+
80
+ # Assert that +username+ is a valid username. Raises
81
+ # ArgumentError if that is not the case.
82
+ def assert_valid_username(username)
83
+ # If username does not exist then getpwnam() will raise an ArgumentError.
84
+ username && Etc.getpwnam(username)
85
+ end
86
+
87
+ # Assert that +groupname+ is a valid group name. Raises
88
+ # ArgumentError if that is not the case.
89
+ def assert_valid_groupname(groupname)
90
+ # If groupname does not exist then getgrnam() will raise an ArgumentError.
91
+ groupname && Etc.getgrnam(groupname)
92
+ end
93
+
94
+ def close_all_io_objects_for_fds(file_descriptors_to_leave_open)
95
+ ObjectSpace.each_object(IO) do |io|
96
+ begin
97
+ if !file_descriptors_to_leave_open.include?(io.fileno) && !io.closed?
98
+ io.close
99
+ end
100
+ rescue
101
+ end
102
+ end
103
+ end
104
+
105
+ def marshal_exception(exception)
106
+ data = {
107
+ :message => exception.message,
108
+ :class => exception.class.to_s,
109
+ :backtrace => exception.backtrace
110
+ }
111
+ if exception.is_a?(InitializationError)
112
+ data[:is_initialization_error] = true
113
+ if exception.child_exception
114
+ data[:child_exception] = marshal_exception(exception.child_exception)
115
+ end
116
+ else
117
+ begin
118
+ data[:exception] = Marshal.dump(exception)
119
+ rescue ArgumentError, TypeError
120
+ e = UnknownError.new(exception.message, exception.class.to_s,
121
+ exception.backtrace)
122
+ data[:exception] = Marshal.dump(e)
123
+ end
124
+ end
125
+ return Marshal.dump(data)
126
+ end
127
+
128
+ def unmarshal_exception(data)
129
+ hash = Marshal.load(data)
130
+ if hash[:is_initialization_error]
131
+ if hash[:child_exception]
132
+ child_exception = unmarshal_exception(hash[:child_exception])
133
+ else
134
+ child_exception = nil
135
+ end
136
+
137
+ case hash[:class]
138
+ when AppInitError.to_s
139
+ exception_class = AppInitError
140
+ when FrameworkInitError.to_s
141
+ exception_class = FrameworkInitError
142
+ else
143
+ exception_class = InitializationError
144
+ end
145
+ return exception_class.new(hash[:message], child_exception)
146
+ else
147
+ begin
148
+ return Marshal.load(hash[:exception])
149
+ rescue ArgumentError, TypeError
150
+ return UnknownError.new(hash[:message], hash[:class], hash[:backtrace])
151
+ end
152
+ end
153
+ end
154
+
155
+ # Print the given exception, including the stack trace, to STDERR.
156
+ #
157
+ # +current_location+ is a string which describes where the code is
158
+ # currently at. Usually the current class name will be enough.
159
+ def print_exception(current_location, exception, destination = STDERR)
160
+ if !exception.is_a?(SystemExit)
161
+ destination.puts(exception.backtrace_string(current_location))
162
+ destination.flush if destination.respond_to?(:flush)
163
+ end
164
+ end
165
+
166
+ # Fork a new process and run the given block inside the child process, just like
167
+ # fork(). Unlike fork(), this method is safe, i.e. there's no way for the child
168
+ # process to escape the block. Any uncaught exceptions in the child process will
169
+ # be printed to standard output, citing +current_location+ as the source.
170
+ # Futhermore, the child process will exit by calling Kernel#exit!, thereby
171
+ # bypassing any at_exit or ensure blocks.
172
+ #
173
+ # If +double_fork+ is true, then the child process will fork and immediately exit.
174
+ # This technique can be used to avoid zombie processes, at the expense of not
175
+ # being able to waitpid() the second child.
176
+ def safe_fork(current_location = self.class, double_fork = false)
177
+ pid = fork
178
+ if pid.nil?
179
+ begin
180
+ if double_fork
181
+ pid2 = fork
182
+ if pid2.nil?
183
+ srand
184
+ yield
185
+ end
186
+ else
187
+ srand
188
+ yield
189
+ end
190
+ rescue Exception => e
191
+ print_exception(current_location.to_s, e)
192
+ ensure
193
+ exit!
194
+ end
195
+ else
196
+ if double_fork
197
+ Process.waitpid(pid) rescue nil
198
+ return pid
199
+ else
200
+ return pid
201
+ end
202
+ end
203
+ end
204
+
205
+ class PseudoIO
206
+ def initialize(sink)
207
+ @sink = sink || File.open("/dev/null", "w")
208
+ @buffer = StringIO.new
209
+ end
210
+
211
+ def done!
212
+ result = @buffer.string
213
+ @buffer = nil
214
+ return result
215
+ end
216
+
217
+ def method_missing(*args, &block)
218
+ @buffer.send(*args, &block) if @buffer && args.first != :reopen
219
+ return @sink.send(*args, &block)
220
+ end
221
+
222
+ def respond_to?(symbol, include_private = false)
223
+ return @sink.respond_to?(symbol, include_private)
224
+ end
225
+ end
226
+
227
+ # Run the given block. A message will be sent through +channel+ (a
228
+ # MessageChannel object), telling the remote side whether the block
229
+ # raised an exception, called exit(), or succeeded.
230
+ #
231
+ # If _sink_ is non-nil, then every operation on $stderr/STDERR inside
232
+ # the block will be performed on _sink_ as well. If _sink_ is nil
233
+ # then all operations on $stderr/STDERR inside the block will be
234
+ # silently discarded, i.e. if one writes to $stderr/STDERR then nothing
235
+ # will be actually written to the console.
236
+ #
237
+ # Returns whether the block succeeded, i.e. whether it didn't raise an
238
+ # exception.
239
+ #
240
+ # Exceptions are not propagated, except SystemExit and a few
241
+ # non-StandardExeption classes such as SignalException. Of the
242
+ # exceptions that are propagated, only SystemExit will be reported.
243
+ def report_app_init_status(channel, sink = STDERR)
244
+ begin
245
+ old_global_stderr = $stderr
246
+ old_stderr = STDERR
247
+ stderr_output = ""
248
+
249
+ pseudo_stderr = PseudoIO.new(sink)
250
+ Object.send(:remove_const, 'STDERR') rescue nil
251
+ Object.const_set('STDERR', pseudo_stderr)
252
+ $stderr = pseudo_stderr
253
+
254
+ begin
255
+ yield
256
+ ensure
257
+ Object.send(:remove_const, 'STDERR') rescue nil
258
+ Object.const_set('STDERR', old_stderr)
259
+ $stderr = old_global_stderr
260
+ stderr_output = pseudo_stderr.done!
261
+ end
262
+
263
+ channel.write('success')
264
+ return true
265
+ rescue StandardError, ScriptError, NoMemoryError => e
266
+ if ENV['TESTING_PASSENGER'] == '1'
267
+ print_exception(self.class.to_s, e)
268
+ end
269
+ channel.write('exception')
270
+ channel.write_scalar(marshal_exception(e))
271
+ channel.write_scalar(stderr_output)
272
+ return false
273
+ rescue SystemExit => e
274
+ channel.write('exit')
275
+ channel.write_scalar(marshal_exception(e))
276
+ channel.write_scalar(stderr_output)
277
+ raise
278
+ end
279
+ end
280
+
281
+ # Receive status information that was sent to +channel+ by
282
+ # report_app_init_status. If an error occured according to the
283
+ # received information, then an appropriate exception will be
284
+ # raised.
285
+ #
286
+ # If <tt>print_exception</tt> evaluates to true, then the
287
+ # exception message and the backtrace will also be printed.
288
+ # Where it is printed to depends on the type of
289
+ # <tt>print_exception</tt>:
290
+ # - If it responds to #puts, then the exception information will
291
+ # be printed using this method.
292
+ # - If it responds to #to_str, then the exception information
293
+ # will be appended to the file whose filename equals the return
294
+ # value of the #to_str call.
295
+ # - Otherwise, it will be printed to STDERR.
296
+ #
297
+ # Raises:
298
+ # - AppInitError: this class wraps the exception information
299
+ # received through the channel.
300
+ # - IOError, SystemCallError, SocketError: these errors are
301
+ # raised if an error occurred while receiving the information
302
+ # through the channel.
303
+ def unmarshal_and_raise_errors(channel, print_exception = nil, app_type = "rails")
304
+ args = channel.read
305
+ if args.nil?
306
+ raise EOFError, "Unexpected end-of-file detected."
307
+ end
308
+ status = args[0]
309
+ if status == 'exception'
310
+ child_exception = unmarshal_exception(channel.read_scalar)
311
+ stderr = channel.read_scalar
312
+ exception = AppInitError.new(
313
+ "Application '#{@app_root}' raised an exception: " <<
314
+ "#{child_exception.class} (#{child_exception.message})",
315
+ child_exception,
316
+ app_type,
317
+ stderr.empty? ? nil : stderr)
318
+ elsif status == 'exit'
319
+ child_exception = unmarshal_exception(channel.read_scalar)
320
+ stderr = channel.read_scalar
321
+ exception = AppInitError.new("Application '#{@app_root}' exited during startup",
322
+ child_exception, app_type, stderr.empty? ? nil : stderr)
323
+ else
324
+ exception = nil
325
+ end
326
+
327
+ if print_exception && exception
328
+ if print_exception.respond_to?(:puts)
329
+ print_exception(self.class.to_s, child_exception, print_exception)
330
+ elsif print_exception.respond_to?(:to_str)
331
+ filename = print_exception.to_str
332
+ File.open(filename, 'a') do |f|
333
+ print_exception(self.class.to_s, child_exception, f)
334
+ end
335
+ else
336
+ print_exception(self.class.to_s, child_exception)
337
+ end
338
+ end
339
+ raise exception if exception
340
+ end
341
+
342
+ # Lower the current process's privilege to the owner of the given file.
343
+ # No exceptions will be raised in the event that privilege lowering fails.
344
+ def lower_privilege(filename, lowest_user = "nobody")
345
+ stat = File.lstat(filename)
346
+ begin
347
+ if !switch_to_user(stat.uid)
348
+ switch_to_user(lowest_user)
349
+ end
350
+ rescue Errno::EPERM
351
+ # No problem if we were unable to switch user.
352
+ end
353
+ end
354
+
355
+ def switch_to_user(user)
356
+ begin
357
+ if user.is_a?(String)
358
+ pw = Etc.getpwnam(user)
359
+ username = user
360
+ uid = pw.uid
361
+ gid = pw.gid
362
+ else
363
+ pw = Etc.getpwuid(user)
364
+ username = pw.name
365
+ uid = user
366
+ gid = pw.gid
367
+ end
368
+ rescue
369
+ return false
370
+ end
371
+ if uid == 0
372
+ return false
373
+ else
374
+ # Some systems are broken. initgroups can fail because of
375
+ # all kinds of stupid reasons. So we ignore any errors
376
+ # raised by initgroups.
377
+ begin
378
+ Process.groups = Process.initgroups(username, gid)
379
+ rescue
380
+ end
381
+ Process::Sys.setgid(gid)
382
+ Process::Sys.setuid(uid)
383
+ ENV['HOME'] = pw.dir
384
+ return true
385
+ end
386
+ end
387
+
388
+ def to_boolean(value)
389
+ return !(value.nil? || value == false || value == "false")
390
+ end
391
+
392
+ def sanitize_spawn_options(options)
393
+ defaults = {
394
+ "lower_privilege" => true,
395
+ "lowest_user" => "nobody",
396
+ "environment" => "production",
397
+ "app_type" => "rails",
398
+ "spawn_method" => "smart-lv2",
399
+ "framework_spawner_timeout" => -1,
400
+ "app_spawner_timeout" => -1,
401
+ "print_exceptions" => true
402
+ }
403
+ options = defaults.merge(options)
404
+ options["lower_privilege"] = to_boolean(options["lower_privilege"])
405
+ options["framework_spawner_timeout"] = options["framework_spawner_timeout"].to_i
406
+ options["app_spawner_timeout"] = options["app_spawner_timeout"].to_i
407
+ # Force this to be a boolean for easy use with Utils#unmarshal_and_raise_errors.
408
+ options["print_exceptions"] = to_boolean(options["print_exceptions"])
409
+ return options
410
+ end
411
+
412
+ @@passenger_tmpdir = nil
413
+
414
+ def passenger_tmpdir(create = true)
415
+ PhusionPassenger::Utils.passenger_tmpdir(create)
416
+ end
417
+
418
+ # Returns the directory in which to store Phusion Passenger-specific
419
+ # temporary files. If +create+ is true, then this method creates the
420
+ # directory if it doesn't exist.
421
+ def self.passenger_tmpdir(create = true)
422
+ dir = @@passenger_tmpdir
423
+ if dir.nil? || dir.empty?
424
+ dir = "#{Dir.tmpdir}/passenger.#{Process.pid}"
425
+ @@passenger_tmpdir = dir
426
+ end
427
+ if create && !File.exist?(dir)
428
+ # This is a very minimal implementation of the function
429
+ # passengerCreateTempDir() in Utils.cpp. This implementation
430
+ # is only meant to make the unit tests pass. For production
431
+ # systems one should pre-create the temp directory with
432
+ # passengerCreateTempDir().
433
+ system("mkdir", "-p", "-m", "u=wxs,g=wx,o=wx", dir)
434
+ system("mkdir", "-p", "-m", "u=wxs,g=wx,o=wx", "#{dir}/backends")
435
+ end
436
+ return dir
437
+ end
438
+
439
+ def self.passenger_tmpdir=(dir)
440
+ @@passenger_tmpdir = dir
441
+ end
442
+
443
+ ####################################
444
+ end
445
+
446
+ end # module PhusionPassenger
447
+
448
+ class Exception
449
+ def backtrace_string(current_location = nil)
450
+ if current_location.nil?
451
+ location = nil
452
+ else
453
+ location = "in #{current_location} "
454
+ end
455
+ return "*** Exception #{self.class} #{location}" <<
456
+ "(#{self}) (process #{$$}):\n" <<
457
+ "\tfrom " << backtrace.join("\n\tfrom ")
458
+ end
459
+ end
460
+
461
+ class ConditionVariable
462
+ # This is like ConditionVariable.wait(), but allows one to wait a maximum
463
+ # amount of time. Returns true if this condition was signaled, false if a
464
+ # timeout occurred.
465
+ def timed_wait(mutex, secs)
466
+ if secs > 100000000
467
+ # NOTE: If one calls timeout() on FreeBSD 5 with an
468
+ # argument of more than 100000000, then MRI will become
469
+ # stuck in an infite loop, blocking all threads. It seems
470
+ # that MRI uses select() to implement sleeping.
471
+ # I think that a value of more than 100000000 overflows
472
+ # select()'s data structures, causing it to behave incorrectly.
473
+ # So we just make sure we can't sleep more than 100000000
474
+ # seconds.
475
+ secs = 100000000
476
+ end
477
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
478
+ if secs > 0
479
+ return wait(mutex, secs)
480
+ else
481
+ return wait(mutex)
482
+ end
483
+ else
484
+ require 'timeout' unless defined?(Timeout)
485
+ if secs > 0
486
+ Timeout.timeout(secs) do
487
+ wait(mutex)
488
+ end
489
+ else
490
+ wait(mutex)
491
+ end
492
+ return true
493
+ end
494
+ rescue Timeout::Error
495
+ return false
496
+ end
497
+
498
+ # This is like ConditionVariable.wait(), but allows one to wait a maximum
499
+ # amount of time. Raises Timeout::Error if the timeout has elapsed.
500
+ def timed_wait!(mutex, secs)
501
+ require 'timeout' unless defined?(Timeout)
502
+ if secs > 100000000
503
+ # See the corresponding note for timed_wait().
504
+ secs = 100000000
505
+ end
506
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
507
+ if secs > 0
508
+ if !wait(mutex, secs)
509
+ raise Timeout::Error, "Timeout"
510
+ end
511
+ else
512
+ wait(mutex)
513
+ end
514
+ else
515
+ if secs > 0
516
+ Timeout.timeout(secs) do
517
+ wait(mutex)
518
+ end
519
+ else
520
+ wait(mutex)
521
+ end
522
+ end
523
+ return nil
524
+ end
525
+ end
526
+
527
+ class IO
528
+ if defined?(PhusionPassenger::NativeSupport)
529
+ # Send an IO object (i.e. a file descriptor) over this IO channel.
530
+ # This only works if this IO channel is a Unix socket.
531
+ #
532
+ # Raises SystemCallError if something went wrong.
533
+ def send_io(io)
534
+ PhusionPassenger::NativeSupport.send_fd(self.fileno, io.fileno)
535
+ end
536
+
537
+ # Receive an IO object (i.e. a file descriptor) from this IO channel.
538
+ # This only works if this IO channel is a Unix socket.
539
+ #
540
+ # Raises SystemCallError if something went wrong.
541
+ def recv_io
542
+ return IO.new(PhusionPassenger::NativeSupport.recv_fd(self.fileno))
543
+ end
544
+ end
545
+
546
+ def close_on_exec!
547
+ if defined?(Fcntl::F_SETFD)
548
+ fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
549
+ end
550
+ end
551
+ end
552
+
553
+ module Signal
554
+ # Like Signal.list, but only returns signals that we can actually trap.
555
+ def self.list_trappable
556
+ ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
557
+ case ruby_engine
558
+ when "ruby"
559
+ result = Signal.list
560
+ result.delete("ALRM")
561
+ result.delete("VTALRM")
562
+ return result
563
+ when "jruby"
564
+ result = Signal.list
565
+ result.delete("QUIT")
566
+ result.delete("ILL")
567
+ result.delete("FPE")
568
+ result.delete("KILL")
569
+ result.delete("SEGV")
570
+ result.delete("STOP")
571
+ result.delete("USR1")
572
+ return result
573
+ else
574
+ return Signal.list
575
+ end
576
+ end
577
+ end
578
+
579
+ # Ruby's implementation of UNIXSocket#recv_io and UNIXSocket#send_io
580
+ # are broken on 64-bit FreeBSD 7, OpenBSD and x86_64/ppc64 OS X. So we override them
581
+ # with our own implementation.
582
+ if RUBY_PLATFORM =~ /freebsd/ || RUBY_PLATFORM =~ /openbsd/ || (RUBY_PLATFORM =~ /darwin/ && RUBY_PLATFORM !~ /universal/)
583
+ require 'socket'
584
+ UNIXSocket.class_eval do
585
+ def recv_io
586
+ super
587
+ end
588
+
589
+ def send_io(io)
590
+ super
591
+ end
592
+ end
593
+ end
594
+
595
+ module GC
596
+ if !respond_to?(:copy_on_write_friendly?)
597
+ # Checks whether the current Ruby interpreter's garbage
598
+ # collector is copy-on-write friendly.
599
+ def self.copy_on_write_friendly?
600
+ return false
601
+ end
602
+ end
603
+ end
@@ -0,0 +1,104 @@
1
+ # Phusion Passenger - http://www.modrails.com/
2
+ # Copyright (c) 2008, 2009 Phusion
3
+ #
4
+ # "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ # THE SOFTWARE.
23
+
24
+ require 'socket'
25
+ require 'phusion_passenger/application'
26
+ require 'phusion_passenger/message_channel'
27
+ require 'phusion_passenger/utils'
28
+ module PhusionPassenger
29
+ module WSGI
30
+
31
+ # Class for spawning WSGI applications.
32
+ class ApplicationSpawner
33
+ include Utils
34
+ REQUEST_HANDLER = File.expand_path(File.dirname(__FILE__) + "/request_handler.py")
35
+
36
+ def self.spawn_application(*args)
37
+ @@instance ||= ApplicationSpawner.new
38
+ @@instance.spawn_application(*args)
39
+ end
40
+
41
+ # Spawn an instance of the given WSGI application. When successful, an
42
+ # Application object will be returned, which represents the spawned
43
+ # application.
44
+ #
45
+ # Raises:
46
+ # - AppInitError: The WSGI application raised an exception or called
47
+ # exit() during startup.
48
+ # - SystemCallError, IOError, SocketError: Something went wrong.
49
+ def spawn_application(app_root, lower_privilege = true, lowest_user = "nobody", environment = "production")
50
+ a, b = UNIXSocket.pair
51
+ pid = safe_fork(self.class.to_s, true) do
52
+ a.close
53
+
54
+ file_descriptors_to_leave_open = [0, 1, 2, b.fileno]
55
+ NativeSupport.close_all_file_descriptors(file_descriptors_to_leave_open)
56
+ close_all_io_objects_for_fds(file_descriptors_to_leave_open)
57
+
58
+ run(MessageChannel.new(b), app_root, lower_privilege, lowest_user, environment)
59
+ end
60
+ b.close
61
+ Process.waitpid(pid) rescue nil
62
+
63
+ channel = MessageChannel.new(a)
64
+ pid, socket_name, socket_type = channel.read
65
+ if pid.nil?
66
+ raise IOError, "Connection closed"
67
+ end
68
+ owner_pipe = channel.recv_io
69
+ return Application.new(@app_root, pid, socket_name,
70
+ socket_type, owner_pipe)
71
+ end
72
+
73
+ private
74
+ def run(channel, app_root, lower_privilege, lowest_user, environment)
75
+ $0 = "WSGI: #{app_root}"
76
+ ENV['WSGI_ENV'] = environment
77
+ Dir.chdir(app_root)
78
+ if lower_privilege
79
+ lower_privilege('passenger_wsgi.py', lowest_user)
80
+ end
81
+
82
+ socket_file = "#{passenger_tmpdir}/backends/wsgi_backend.#{Process.pid}.#{rand 10000000}"
83
+ server = UNIXServer.new(socket_file)
84
+ begin
85
+ reader, writer = IO.pipe
86
+ channel.write(Process.pid, socket_file, "unix")
87
+ channel.send_io(writer)
88
+ writer.close
89
+ channel.close
90
+
91
+ NativeSupport.close_all_file_descriptors([0, 1, 2, server.fileno,
92
+ reader.fileno])
93
+ exec(REQUEST_HANDLER, socket_file, server.fileno.to_s,
94
+ reader.fileno.to_s)
95
+ rescue
96
+ server.close
97
+ File.unlink(socket_file)
98
+ raise
99
+ end
100
+ end
101
+ end
102
+
103
+ end # module WSGI
104
+ end # module PhusionPassenger