passenger 2.2.15 → 3.0.0.pre1

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 (1338) hide show
  1. data/DEVELOPERS.TXT +21 -12
  2. data/LICENSE +1 -1
  3. data/NEWS +8 -1
  4. data/PACKAGING.TXT +25 -0
  5. data/Rakefile +28 -891
  6. data/bin/passenger +32 -0
  7. data/bin/passenger-config +5 -5
  8. data/bin/passenger-install-apache2-module +37 -24
  9. data/bin/passenger-install-nginx-module +48 -46
  10. data/bin/passenger-make-enterprisey +8 -9
  11. data/bin/passenger-memory-stats +20 -150
  12. data/bin/passenger-status +130 -44
  13. data/bin/passenger-stress-test +5 -4
  14. data/build/agents.rb +73 -0
  15. data/build/apache2.rb +165 -0
  16. data/build/basics.rb +81 -0
  17. data/build/common_library.rb +198 -0
  18. data/build/config.rb +35 -0
  19. data/{misc/rake/cplusplus.rb → build/cplusplus_support.rb} +1 -1
  20. data/build/cxx_tests.rb +205 -0
  21. data/build/documentation.rb +77 -0
  22. data/{misc/rake → build}/gempackagetask.rb +1 -1
  23. data/build/integration_tests.rb +57 -0
  24. data/build/misc.rb +146 -0
  25. data/build/nginx.rb +64 -0
  26. data/build/oxt_tests.rb +52 -0
  27. data/{misc/rake → build}/packagetask.rb +0 -0
  28. data/build/packaging.rb +189 -0
  29. data/{misc/rake/extensions.rb → build/rake_extensions.rb} +1 -1
  30. data/{misc/rake → build}/rdoctask.rb +0 -0
  31. data/build/ruby_extension.rb +46 -0
  32. data/build/ruby_tests.rb +42 -0
  33. data/build/test_basics.rb +31 -0
  34. data/doc/ApplicationPool algorithm.txt +447 -234
  35. data/doc/Architectural overview.html +47 -56
  36. data/doc/Doxyfile +1 -1
  37. data/doc/Security of user switching support.html +46 -57
  38. data/doc/Users guide Apache.html +1033 -306
  39. data/doc/Users guide Apache.txt +419 -99
  40. data/doc/Users guide Nginx.html +1252 -253
  41. data/doc/Users guide Nginx.txt +711 -87
  42. data/doc/Users guide Standalone.html +603 -0
  43. data/doc/Users guide Standalone.txt +40 -0
  44. data/doc/cxxapi/AbstractSpawnManager_8h_source.html +141 -0
  45. data/doc/cxxapi/Account_8h_source.html +206 -0
  46. data/doc/cxxapi/AccountsDatabase_8h_source.html +161 -0
  47. data/doc/cxxapi/AgentBase_8h_source.html +70 -0
  48. data/doc/cxxapi/AgentsStarter_8h_source.html +112 -0
  49. data/doc/cxxapi/BCrypt_8h_source.html +104 -0
  50. data/doc/cxxapi/Blowfish_8h_source.html +134 -0
  51. data/doc/cxxapi/Bucket_8h_source.html +4 -3
  52. data/doc/cxxapi/Constants_8h_source.html +79 -0
  53. data/doc/cxxapi/ContentHandler_8h_source.html +95 -0
  54. data/doc/cxxapi/DirectoryMapper_8h_source.html +9 -8
  55. data/doc/cxxapi/EventedClient_8h_source.html +629 -0
  56. data/doc/cxxapi/EventedMessageServer_8h_source.html +358 -0
  57. data/doc/cxxapi/EventedServer_8h_source.html +326 -0
  58. data/doc/cxxapi/Exceptions_8h_source.html +366 -0
  59. data/doc/cxxapi/FileDescriptor_8h_source.html +260 -0
  60. data/doc/cxxapi/Hooks_8h_source.html +2 -1
  61. data/doc/cxxapi/HttpStatusExtractor_8h_source.html +382 -0
  62. data/doc/cxxapi/Logging_8h_source.html +726 -0
  63. data/doc/cxxapi/MessageChannel_8h_source.html +852 -0
  64. data/doc/cxxapi/MessageClient_8h_source.html +328 -0
  65. data/doc/cxxapi/MessageReadersWriters_8h_source.html +539 -0
  66. data/doc/cxxapi/MessageServer_8h_source.html +606 -0
  67. data/doc/cxxapi/PoolOptions_8h_source.html +548 -0
  68. data/doc/cxxapi/Process_8h_source.html +286 -0
  69. data/doc/cxxapi/RandomGenerator_8h_source.html +191 -0
  70. data/doc/cxxapi/ResourceLocator_8h_source.html +115 -0
  71. data/doc/cxxapi/ScgiRequestParser_8h_source.html +406 -0
  72. data/doc/cxxapi/ServerInstanceDir_8h_source.html +374 -0
  73. data/doc/cxxapi/Session_8h_source.html +501 -0
  74. data/doc/cxxapi/SpawnManager_8h_source.html +647 -0
  75. data/doc/cxxapi/StaticContentHandler_8h_source.html +68 -0
  76. data/doc/cxxapi/StaticString_8h_source.html +254 -0
  77. data/doc/cxxapi/StringListCreator_8h_source.html +114 -0
  78. data/doc/cxxapi/Utils_8h_source.html +442 -0
  79. data/doc/cxxapi/annotated.html +46 -0
  80. data/doc/cxxapi/apache2_2Configuration_8h_source.html +82 -0
  81. data/doc/cxxapi/classAgentWatcher-members.html +30 -26
  82. data/doc/cxxapi/classAgentWatcher.html +168 -194
  83. data/doc/cxxapi/classClient-members.html +14 -11
  84. data/doc/cxxapi/classClient.html +35 -35
  85. data/doc/cxxapi/classHooks-members.html +2 -0
  86. data/doc/cxxapi/classHooks.html +2 -0
  87. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +16 -13
  88. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +78 -82
  89. data/doc/cxxapi/classPassenger_1_1ArgumentException-members.html +12 -9
  90. data/doc/cxxapi/classPassenger_1_1ArgumentException.html +26 -22
  91. data/doc/cxxapi/classPassenger_1_1ArrayMessage-members.html +37 -0
  92. data/doc/cxxapi/classPassenger_1_1ArrayMessage.html +113 -0
  93. data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +14 -11
  94. data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +41 -42
  95. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +12 -9
  96. data/doc/cxxapi/classPassenger_1_1BusyException.html +24 -20
  97. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +12 -9
  98. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +23 -19
  99. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +2 -0
  100. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +8 -6
  101. data/doc/cxxapi/classPassenger_1_1EOFException-members.html +12 -9
  102. data/doc/cxxapi/classPassenger_1_1EOFException.html +27 -23
  103. data/doc/cxxapi/classPassenger_1_1EventFd-members.html +12 -9
  104. data/doc/cxxapi/classPassenger_1_1EventFd.html +24 -21
  105. data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +54 -0
  106. data/doc/cxxapi/classPassenger_1_1EventedClient.html +436 -0
  107. data/doc/cxxapi/classPassenger_1_1EventedMessageServer-members.html +37 -0
  108. data/doc/cxxapi/classPassenger_1_1EventedMessageServer.html +59 -0
  109. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.map +3 -0
  110. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.md5 +1 -0
  111. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.png +0 -0
  112. data/doc/cxxapi/classPassenger_1_1EventedServer-members.html +37 -0
  113. data/doc/cxxapi/classPassenger_1_1EventedServer.html +93 -0
  114. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.map +3 -0
  115. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.md5 +1 -0
  116. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.png +0 -0
  117. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +16 -13
  118. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +63 -70
  119. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +12 -9
  120. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +26 -22
  121. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +17 -14
  122. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +32 -30
  123. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor-members.html +15 -12
  124. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +59 -59
  125. data/doc/cxxapi/classPassenger_1_1IOException-members.html +12 -9
  126. data/doc/cxxapi/classPassenger_1_1IOException.html +27 -23
  127. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +36 -33
  128. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +326 -344
  129. data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +25 -22
  130. data/doc/cxxapi/classPassenger_1_1MessageServer.html +160 -191
  131. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +12 -9
  132. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +29 -27
  133. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +3 -1
  134. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +1 -1
  135. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
  136. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +17 -14
  137. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +69 -79
  138. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +3 -1
  139. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +1 -1
  140. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
  141. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +15 -12
  142. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +60 -63
  143. data/doc/cxxapi/classPassenger_1_1Process-members.html +20 -17
  144. data/doc/cxxapi/classPassenger_1_1Process.html +88 -95
  145. data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +13 -10
  146. data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +36 -35
  147. data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +12 -9
  148. data/doc/cxxapi/classPassenger_1_1RuntimeException.html +24 -20
  149. data/doc/cxxapi/classPassenger_1_1ScalarMessage-members.html +37 -0
  150. data/doc/cxxapi/classPassenger_1_1ScalarMessage.html +76 -0
  151. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +26 -23
  152. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +121 -138
  153. data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +12 -9
  154. data/doc/cxxapi/classPassenger_1_1SecurityException.html +26 -22
  155. data/doc/cxxapi/classPassenger_1_1Session-members.html +29 -26
  156. data/doc/cxxapi/classPassenger_1_1Session.html +219 -240
  157. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +14 -11
  158. data/doc/cxxapi/classPassenger_1_1SpawnException.html +36 -37
  159. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +18 -15
  160. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +115 -110
  161. data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +30 -27
  162. data/doc/cxxapi/classPassenger_1_1StandardSession.html +163 -184
  163. data/doc/cxxapi/classPassenger_1_1StaticString-members.html +12 -9
  164. data/doc/cxxapi/classPassenger_1_1StaticString.html +27 -25
  165. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +16 -13
  166. data/doc/cxxapi/classPassenger_1_1SystemException.html +65 -67
  167. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +16 -13
  168. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +27 -23
  169. data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +12 -9
  170. data/doc/cxxapi/classPassenger_1_1TimeoutException.html +24 -20
  171. data/doc/cxxapi/classPassenger_1_1Uint16Message-members.html +36 -0
  172. data/doc/cxxapi/classPassenger_1_1Uint16Message.html +51 -0
  173. data/doc/cxxapi/classPassenger_1_1Uint32Message-members.html +36 -0
  174. data/doc/cxxapi/classPassenger_1_1Uint32Message.html +51 -0
  175. data/doc/cxxapi/classServer-members.html +12 -9
  176. data/doc/cxxapi/classServer.html +23 -20
  177. data/doc/cxxapi/classServerInstanceDirToucher-members.html +12 -9
  178. data/doc/cxxapi/classServerInstanceDirToucher.html +21 -17
  179. data/doc/cxxapi/classes.html +18 -4
  180. data/doc/cxxapi/definitions_8h_source.html +1 -0
  181. data/doc/cxxapi/files.html +36 -1
  182. data/doc/cxxapi/functions.html +53 -21
  183. data/doc/cxxapi/functions_0x62.html +82 -0
  184. data/doc/cxxapi/functions_0x63.html +99 -0
  185. data/doc/cxxapi/functions_0x64.html +95 -0
  186. data/doc/cxxapi/functions_0x65.html +88 -0
  187. data/doc/cxxapi/functions_0x66.html +100 -0
  188. data/doc/cxxapi/functions_0x67.html +170 -0
  189. data/doc/cxxapi/functions_0x68.html +88 -0
  190. data/doc/cxxapi/functions_0x69.html +93 -0
  191. data/doc/cxxapi/functions_0x6b.html +80 -0
  192. data/doc/cxxapi/functions_0x6c.html +88 -0
  193. data/doc/cxxapi/functions_0x6d.html +88 -0
  194. data/doc/cxxapi/functions_0x6e.html +86 -0
  195. data/doc/cxxapi/functions_0x6f.html +94 -0
  196. data/doc/cxxapi/functions_0x70.html +94 -0
  197. data/doc/cxxapi/functions_0x72.html +110 -0
  198. data/doc/cxxapi/functions_0x73.html +171 -0
  199. data/doc/cxxapi/functions_0x74.html +85 -0
  200. data/doc/cxxapi/functions_0x75.html +85 -0
  201. data/doc/cxxapi/functions_0x77.html +92 -0
  202. data/doc/cxxapi/functions_0x7e.html +79 -0
  203. data/doc/cxxapi/functions_enum.html +14 -12
  204. data/doc/cxxapi/functions_eval.html +22 -16
  205. data/doc/cxxapi/functions_func.html +460 -1
  206. data/doc/cxxapi/functions_vars.html +163 -63
  207. data/doc/cxxapi/graph_legend.html +1 -0
  208. data/doc/cxxapi/graph_legend.png +0 -0
  209. data/doc/cxxapi/group__Core.html +2 -2
  210. data/doc/cxxapi/group__Core.map +1 -2
  211. data/doc/cxxapi/group__Core.png +0 -0
  212. data/doc/cxxapi/group__Exceptions.html +32 -40
  213. data/doc/cxxapi/group__Hooks.html +2 -1
  214. data/doc/cxxapi/group__Hooks.map +1 -1
  215. data/doc/cxxapi/group__Hooks.png +0 -0
  216. data/doc/cxxapi/group__Support.html +509 -0
  217. data/doc/cxxapi/hierarchy.html +66 -62
  218. data/doc/cxxapi/inherit__graph__10.map +3 -1
  219. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  220. data/doc/cxxapi/inherit__graph__10.png +0 -0
  221. data/doc/cxxapi/inherit__graph__11.map +4 -1
  222. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  223. data/doc/cxxapi/inherit__graph__11.png +0 -0
  224. data/doc/cxxapi/inherit__graph__12.map +3 -1
  225. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  226. data/doc/cxxapi/inherit__graph__12.png +0 -0
  227. data/doc/cxxapi/inherit__graph__13.map +3 -1
  228. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  229. data/doc/cxxapi/inherit__graph__13.png +0 -0
  230. data/doc/cxxapi/inherit__graph__14.map +3 -1
  231. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  232. data/doc/cxxapi/inherit__graph__14.png +0 -0
  233. data/doc/cxxapi/inherit__graph__15.map +5 -1
  234. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  235. data/doc/cxxapi/inherit__graph__15.png +0 -0
  236. data/doc/cxxapi/inherit__graph__16.map +3 -3
  237. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  238. data/doc/cxxapi/inherit__graph__16.png +0 -0
  239. data/doc/cxxapi/inherit__graph__17.map +3 -1
  240. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  241. data/doc/cxxapi/inherit__graph__17.png +0 -0
  242. data/doc/cxxapi/inherit__graph__18.map +4 -1
  243. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  244. data/doc/cxxapi/inherit__graph__18.png +0 -0
  245. data/doc/cxxapi/inherit__graph__19.map +3 -1
  246. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  247. data/doc/cxxapi/inherit__graph__19.png +0 -0
  248. data/doc/cxxapi/inherit__graph__20.map +3 -2
  249. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  250. data/doc/cxxapi/inherit__graph__20.png +0 -0
  251. data/doc/cxxapi/inherit__graph__21.map +3 -1
  252. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  253. data/doc/cxxapi/inherit__graph__21.png +0 -0
  254. data/doc/cxxapi/inherit__graph__22.map +3 -1
  255. data/doc/cxxapi/inherit__graph__22.md5 +1 -1
  256. data/doc/cxxapi/inherit__graph__22.png +0 -0
  257. data/doc/cxxapi/inherit__graph__23.map +3 -1
  258. data/doc/cxxapi/inherit__graph__23.md5 +1 -1
  259. data/doc/cxxapi/inherit__graph__23.png +0 -0
  260. data/doc/cxxapi/inherit__graph__24.map +3 -1
  261. data/doc/cxxapi/inherit__graph__24.md5 +1 -1
  262. data/doc/cxxapi/inherit__graph__24.png +0 -0
  263. data/doc/cxxapi/inherit__graph__25.map +3 -1
  264. data/doc/cxxapi/inherit__graph__25.md5 +1 -1
  265. data/doc/cxxapi/inherit__graph__25.png +0 -0
  266. data/doc/cxxapi/inherit__graph__26.map +3 -1
  267. data/doc/cxxapi/inherit__graph__26.md5 +1 -1
  268. data/doc/cxxapi/inherit__graph__26.png +0 -0
  269. data/doc/cxxapi/inherit__graph__27.map +3 -1
  270. data/doc/cxxapi/inherit__graph__27.md5 +1 -1
  271. data/doc/cxxapi/inherit__graph__27.png +0 -0
  272. data/doc/cxxapi/inherit__graph__28.map +4 -1
  273. data/doc/cxxapi/inherit__graph__28.md5 +1 -1
  274. data/doc/cxxapi/inherit__graph__28.png +0 -0
  275. data/doc/cxxapi/inherit__graph__29.map +3 -1
  276. data/doc/cxxapi/inherit__graph__29.md5 +1 -1
  277. data/doc/cxxapi/inherit__graph__29.png +0 -0
  278. data/doc/cxxapi/inherit__graph__30.map +3 -2
  279. data/doc/cxxapi/inherit__graph__30.md5 +1 -1
  280. data/doc/cxxapi/inherit__graph__30.png +0 -0
  281. data/doc/cxxapi/inherit__graph__31.map +3 -1
  282. data/doc/cxxapi/inherit__graph__31.md5 +1 -1
  283. data/doc/cxxapi/inherit__graph__31.png +0 -0
  284. data/doc/cxxapi/inherit__graph__32.map +5 -1
  285. data/doc/cxxapi/inherit__graph__32.md5 +1 -1
  286. data/doc/cxxapi/inherit__graph__32.png +0 -0
  287. data/doc/cxxapi/inherit__graph__33.map +3 -1
  288. data/doc/cxxapi/inherit__graph__33.md5 +1 -1
  289. data/doc/cxxapi/inherit__graph__33.png +0 -0
  290. data/doc/cxxapi/inherit__graph__34.map +3 -3
  291. data/doc/cxxapi/inherit__graph__34.md5 +1 -1
  292. data/doc/cxxapi/inherit__graph__34.png +0 -0
  293. data/doc/cxxapi/inherit__graph__35.map +3 -1
  294. data/doc/cxxapi/inherit__graph__35.md5 +1 -1
  295. data/doc/cxxapi/inherit__graph__35.png +0 -0
  296. data/doc/cxxapi/inherit__graph__36.map +3 -1
  297. data/doc/cxxapi/inherit__graph__36.md5 +1 -1
  298. data/doc/cxxapi/inherit__graph__36.png +0 -0
  299. data/doc/cxxapi/inherit__graph__37.map +3 -1
  300. data/doc/cxxapi/inherit__graph__37.md5 +1 -1
  301. data/doc/cxxapi/inherit__graph__37.png +0 -0
  302. data/doc/cxxapi/inherit__graph__4.map +3 -1
  303. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  304. data/doc/cxxapi/inherit__graph__4.png +0 -0
  305. data/doc/cxxapi/inherit__graph__5.map +3 -1
  306. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  307. data/doc/cxxapi/inherit__graph__5.png +0 -0
  308. data/doc/cxxapi/inherit__graph__6.map +3 -1
  309. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  310. data/doc/cxxapi/inherit__graph__6.png +0 -0
  311. data/doc/cxxapi/inherit__graph__7.map +3 -1
  312. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  313. data/doc/cxxapi/inherit__graph__7.png +0 -0
  314. data/doc/cxxapi/inherit__graph__8.map +3 -1
  315. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  316. data/doc/cxxapi/inherit__graph__8.png +0 -0
  317. data/doc/cxxapi/inherit__graph__9.map +3 -1
  318. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  319. data/doc/cxxapi/inherit__graph__9.png +0 -0
  320. data/doc/cxxapi/inherits.html +123 -126
  321. data/doc/cxxapi/main.html +1 -0
  322. data/doc/cxxapi/modules.html +2 -1
  323. data/doc/cxxapi/namespacePassenger.html +263 -492
  324. data/doc/cxxapi/namespacemembers.html +68 -96
  325. data/doc/cxxapi/namespacemembers_enum.html +14 -12
  326. data/doc/cxxapi/namespacemembers_eval.html +20 -15
  327. data/doc/cxxapi/namespacemembers_func.html +52 -88
  328. data/doc/cxxapi/namespacemembers_type.html +18 -14
  329. data/doc/cxxapi/namespaces.html +12 -9
  330. data/doc/cxxapi/nginx_2Configuration_8h_source.html +125 -0
  331. data/doc/cxxapi/ngx__http__passenger__module_8h_source.html +94 -0
  332. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +12 -9
  333. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +24 -22
  334. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +43 -38
  335. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +275 -325
  336. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +12 -9
  337. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +24 -22
  338. data/doc/cxxapi/tree.html +152 -7
  339. data/doc/users_guide_snippets/{analysis_and_system_maintenance_tools.txt → analysis_and_system_maintenance.txt} +58 -1
  340. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +1 -2
  341. data/doc/users_guide_snippets/global_queueing_explained.txt +1 -5
  342. data/doc/users_guide_snippets/{rails_spawn_method.txt → passenger_spawn_method.txt} +9 -8
  343. data/doc/users_guide_snippets/tips.txt +12 -6
  344. data/doc/users_guide_snippets/under_the_hood/page_caching_support.txt +22 -0
  345. data/ext/apache2/Bucket.cpp +4 -4
  346. data/ext/apache2/Bucket.h +3 -3
  347. data/ext/apache2/Configuration.cpp +278 -381
  348. data/ext/apache2/Configuration.h +3 -357
  349. data/ext/apache2/Configuration.hpp +461 -0
  350. data/ext/apache2/DirectoryMapper.h +3 -3
  351. data/ext/apache2/HelperAgent.cpp +359 -0
  352. data/ext/apache2/Hooks.cpp +339 -226
  353. data/ext/apache2/Hooks.h +1 -1
  354. data/ext/apache2/mod_passenger.c +10 -4
  355. data/ext/boost/algorithm/string/case_conv.hpp +4 -4
  356. data/ext/boost/algorithm/string/concept.hpp +2 -2
  357. data/ext/boost/algorithm/string/detail/case_conv.hpp +18 -9
  358. data/ext/boost/algorithm/string/detail/find_format.hpp +44 -43
  359. data/ext/boost/algorithm/string/detail/find_format_all.hpp +56 -56
  360. data/ext/boost/algorithm/string/detail/find_format_store.hpp +7 -0
  361. data/ext/boost/algorithm/string/detail/finder.hpp +14 -14
  362. data/ext/boost/algorithm/string/detail/formatter.hpp +2 -2
  363. data/ext/boost/algorithm/string/detail/replace_storage.hpp +3 -3
  364. data/ext/boost/algorithm/string/detail/sequence.hpp +3 -3
  365. data/ext/boost/algorithm/string/erase.hpp +98 -98
  366. data/ext/boost/algorithm/string/find_format.hpp +56 -38
  367. data/ext/boost/algorithm/string/finder.hpp +6 -6
  368. data/ext/boost/algorithm/string/formatter.hpp +1 -1
  369. data/ext/boost/algorithm/string/replace.hpp +99 -99
  370. data/ext/boost/bind.hpp +5 -1670
  371. data/ext/boost/bind/bind.hpp +1751 -0
  372. data/ext/boost/bind/bind_mf2_cc.hpp +228 -0
  373. data/ext/boost/bind/mem_fn.hpp +389 -0
  374. data/ext/boost/bind/mem_fn_template.hpp +54 -27
  375. data/ext/boost/bind/placeholders.hpp +3 -2
  376. data/ext/boost/concept_check.hpp +10 -0
  377. data/ext/boost/config/abi/msvc_prefix.hpp +15 -1
  378. data/ext/boost/config/abi_prefix.hpp +1 -1
  379. data/ext/boost/config/abi_suffix.hpp +3 -2
  380. data/ext/boost/config/auto_link.hpp +6 -1
  381. data/ext/boost/config/compiler/borland.hpp +75 -17
  382. data/ext/boost/config/compiler/codegear.hpp +163 -0
  383. data/ext/boost/config/compiler/common_edg.hpp +35 -0
  384. data/ext/boost/config/compiler/digitalmars.hpp +26 -0
  385. data/ext/boost/config/compiler/gcc.hpp +69 -14
  386. data/ext/boost/config/compiler/hp_acc.hpp +32 -0
  387. data/ext/boost/config/compiler/intel.hpp +13 -2
  388. data/ext/boost/config/compiler/kai.hpp +0 -2
  389. data/ext/boost/config/compiler/metrowerks.hpp +29 -1
  390. data/ext/boost/config/compiler/mpw.hpp +30 -0
  391. data/ext/boost/config/compiler/pgi.hpp +37 -0
  392. data/ext/boost/config/compiler/sgi_mipspro.hpp +1 -0
  393. data/ext/boost/config/compiler/sunpro_cc.hpp +39 -7
  394. data/ext/boost/config/compiler/vacpp.hpp +31 -3
  395. data/ext/boost/config/compiler/visualc.hpp +72 -5
  396. data/ext/boost/config/no_tr1/cmath.hpp +28 -0
  397. data/ext/boost/config/platform/bsd.hpp +16 -3
  398. data/ext/boost/config/platform/hpux.hpp +3 -0
  399. data/ext/boost/config/platform/macos.hpp +8 -0
  400. data/ext/boost/config/platform/solaris.hpp +7 -0
  401. data/ext/boost/config/platform/vxworks.hpp +31 -0
  402. data/ext/boost/config/select_compiler_config.hpp +4 -0
  403. data/ext/boost/config/select_platform_config.hpp +6 -2
  404. data/ext/boost/config/select_stdlib_config.hpp +17 -8
  405. data/ext/boost/config/stdlib/dinkumware.hpp +34 -2
  406. data/ext/boost/config/stdlib/libcomo.hpp +25 -0
  407. data/ext/boost/config/stdlib/libstdcpp3.hpp +56 -2
  408. data/ext/boost/config/stdlib/modena.hpp +25 -0
  409. data/ext/boost/config/stdlib/msl.hpp +24 -0
  410. data/ext/boost/config/stdlib/roguewave.hpp +26 -0
  411. data/ext/boost/config/stdlib/sgi.hpp +25 -0
  412. data/ext/boost/config/stdlib/stlport.hpp +36 -1
  413. data/ext/boost/config/stdlib/vacpp.hpp +25 -0
  414. data/ext/boost/config/suffix.hpp +67 -32
  415. data/ext/boost/config/warning_disable.hpp +47 -0
  416. data/ext/boost/cstdint.hpp +62 -36
  417. data/ext/boost/date_time/c_time.hpp +28 -12
  418. data/ext/boost/date_time/compiler_config.hpp +27 -5
  419. data/ext/boost/date_time/constrained_value.hpp +36 -13
  420. data/ext/boost/date_time/date.hpp +44 -33
  421. data/ext/boost/date_time/date_duration.hpp +13 -14
  422. data/ext/boost/date_time/date_facet.hpp +215 -226
  423. data/ext/boost/date_time/date_generator_formatter.hpp +22 -20
  424. data/ext/boost/date_time/date_generator_parser.hpp +52 -51
  425. data/ext/boost/date_time/date_generators.hpp +16 -16
  426. data/ext/boost/date_time/date_parsing.hpp +115 -98
  427. data/ext/boost/date_time/filetime_functions.hpp +133 -41
  428. data/ext/boost/date_time/format_date_parser.hpp +22 -10
  429. data/ext/boost/date_time/gregorian/conversion.hpp +32 -39
  430. data/ext/boost/date_time/gregorian/greg_calendar.hpp +15 -14
  431. data/ext/boost/date_time/gregorian/greg_date.hpp +19 -18
  432. data/ext/boost/date_time/gregorian/greg_duration.hpp +106 -10
  433. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +16 -7
  434. data/ext/boost/date_time/gregorian/greg_weekday.hpp +2 -2
  435. data/ext/boost/date_time/gregorian/gregorian_io.hpp +11 -4
  436. data/ext/boost/date_time/gregorian_calendar.hpp +8 -8
  437. data/ext/boost/date_time/gregorian_calendar.ipp +30 -30
  438. data/ext/boost/date_time/int_adapter.hpp +4 -2
  439. data/ext/boost/date_time/microsec_time_clock.hpp +39 -117
  440. data/ext/boost/date_time/period_parser.hpp +17 -15
  441. data/ext/boost/date_time/posix_time/conversion.hpp +28 -29
  442. data/ext/boost/date_time/posix_time/posix_time_config.hpp +19 -19
  443. data/ext/boost/date_time/posix_time/posix_time_io.hpp +31 -38
  444. data/ext/boost/date_time/posix_time/time_formatters.hpp +32 -32
  445. data/ext/boost/date_time/string_parse_tree.hpp +46 -46
  446. data/ext/boost/date_time/strings_from_facet.hpp +7 -5
  447. data/ext/boost/date_time/time.hpp +7 -6
  448. data/ext/boost/date_time/time_defs.hpp +12 -2
  449. data/ext/boost/date_time/time_duration.hpp +27 -26
  450. data/ext/boost/date_time/time_facet.hpp +386 -321
  451. data/ext/boost/date_time/time_formatting_streams.hpp +8 -5
  452. data/ext/boost/date_time/time_resolution_traits.hpp +29 -25
  453. data/ext/boost/date_time/time_system_split.hpp +7 -13
  454. data/ext/boost/date_time/wrapping_int.hpp +21 -15
  455. data/ext/boost/detail/call_traits.hpp +1 -1
  456. data/ext/boost/detail/endian.hpp +4 -4
  457. data/ext/boost/detail/no_exceptions_support.hpp +87 -0
  458. data/ext/boost/detail/sp_typeinfo.hpp +50 -4
  459. data/ext/boost/detail/workaround.hpp +63 -3
  460. data/ext/boost/enable_shared_from_this.hpp +4 -59
  461. data/ext/boost/exception/current_exception_cast.hpp +43 -0
  462. data/ext/boost/exception/detail/attribute_noreturn.hpp +17 -0
  463. data/ext/boost/exception/detail/error_info_impl.hpp +75 -0
  464. data/ext/boost/exception/detail/exception_ptr.hpp +490 -0
  465. data/ext/boost/exception/detail/is_output_streamable.hpp +47 -0
  466. data/ext/boost/exception/detail/object_hex_dump.hpp +50 -0
  467. data/ext/boost/exception/detail/type_info.hpp +79 -0
  468. data/ext/boost/exception/diagnostic_information.hpp +182 -0
  469. data/ext/boost/exception/exception.hpp +422 -0
  470. data/ext/boost/exception/get_error_info.hpp +130 -0
  471. data/ext/boost/exception/info.hpp +167 -0
  472. data/ext/boost/exception/to_string.hpp +83 -0
  473. data/ext/boost/exception/to_string_stub.hpp +109 -0
  474. data/ext/boost/exception_ptr.hpp +11 -0
  475. data/ext/boost/function/detail/prologue.hpp +2 -1
  476. data/ext/boost/function/function_base.hpp +270 -128
  477. data/ext/boost/function/function_fwd.hpp +70 -0
  478. data/ext/boost/function/function_template.hpp +319 -130
  479. data/ext/boost/get_pointer.hpp +5 -1
  480. data/ext/boost/integer.hpp +253 -0
  481. data/ext/boost/integer_fwd.hpp +174 -0
  482. data/ext/boost/integer_traits.hpp +26 -1
  483. data/ext/boost/io/ios_state.hpp +8 -0
  484. data/ext/boost/iterator/detail/config_def.hpp +4 -2
  485. data/ext/boost/iterator/iterator_adaptor.hpp +7 -2
  486. data/ext/boost/iterator/iterator_facade.hpp +1 -2
  487. data/ext/boost/lexical_cast.hpp +113 -105
  488. data/ext/boost/limits.hpp +1 -1
  489. data/ext/boost/mem_fn.hpp +5 -370
  490. data/ext/boost/memory_order.hpp +53 -0
  491. data/ext/boost/mpl/always.hpp +3 -3
  492. data/ext/boost/mpl/and.hpp +3 -3
  493. data/ext/boost/mpl/apply.hpp +3 -3
  494. data/ext/boost/mpl/apply_fwd.hpp +3 -3
  495. data/ext/boost/mpl/apply_wrap.hpp +37 -6
  496. data/ext/boost/mpl/arg.hpp +3 -3
  497. data/ext/boost/mpl/arg_fwd.hpp +3 -3
  498. data/ext/boost/mpl/assert.hpp +6 -6
  499. data/ext/boost/mpl/aux_/adl_barrier.hpp +3 -3
  500. data/ext/boost/mpl/aux_/arg_typedef.hpp +3 -3
  501. data/ext/boost/mpl/aux_/arity.hpp +3 -3
  502. data/ext/boost/mpl/aux_/arity_spec.hpp +3 -3
  503. data/ext/boost/mpl/aux_/common_name_wknd.hpp +3 -3
  504. data/ext/boost/mpl/aux_/config/adl.hpp +4 -4
  505. data/ext/boost/mpl/aux_/config/arrays.hpp +4 -4
  506. data/ext/boost/mpl/aux_/config/bcc.hpp +28 -0
  507. data/ext/boost/mpl/aux_/config/bind.hpp +4 -4
  508. data/ext/boost/mpl/aux_/config/compiler.hpp +8 -6
  509. data/ext/boost/mpl/aux_/config/ctps.hpp +3 -3
  510. data/ext/boost/mpl/aux_/config/dtp.hpp +5 -5
  511. data/ext/boost/mpl/aux_/config/eti.hpp +3 -3
  512. data/ext/boost/mpl/aux_/config/gcc.hpp +3 -3
  513. data/ext/boost/mpl/aux_/config/has_apply.hpp +3 -3
  514. data/ext/boost/mpl/aux_/config/has_xxx.hpp +3 -3
  515. data/ext/boost/mpl/aux_/config/integral.hpp +4 -4
  516. data/ext/boost/mpl/aux_/config/intel.hpp +3 -3
  517. data/ext/boost/mpl/aux_/config/lambda.hpp +3 -3
  518. data/ext/boost/mpl/aux_/config/msvc.hpp +3 -3
  519. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +3 -3
  520. data/ext/boost/mpl/aux_/config/nttp.hpp +3 -3
  521. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +3 -3
  522. data/ext/boost/mpl/aux_/config/pp_counter.hpp +3 -3
  523. data/ext/boost/mpl/aux_/config/preprocessor.hpp +4 -4
  524. data/ext/boost/mpl/aux_/config/static_constant.hpp +3 -3
  525. data/ext/boost/mpl/aux_/config/ttp.hpp +4 -4
  526. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +3 -3
  527. data/ext/boost/mpl/aux_/config/workaround.hpp +3 -3
  528. data/ext/boost/mpl/aux_/full_lambda.hpp +3 -3
  529. data/ext/boost/mpl/aux_/has_apply.hpp +3 -3
  530. data/ext/boost/mpl/aux_/has_type.hpp +3 -3
  531. data/ext/boost/mpl/aux_/include_preprocessed.hpp +3 -3
  532. data/ext/boost/mpl/aux_/integral_wrapper.hpp +3 -3
  533. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +3 -3
  534. data/ext/boost/mpl/aux_/lambda_support.hpp +4 -4
  535. data/ext/boost/mpl/aux_/msvc_never_true.hpp +3 -3
  536. data/ext/boost/mpl/aux_/na.hpp +3 -3
  537. data/ext/boost/mpl/aux_/na_assert.hpp +3 -3
  538. data/ext/boost/mpl/aux_/na_fwd.hpp +3 -3
  539. data/ext/boost/mpl/aux_/na_spec.hpp +3 -3
  540. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +3 -3
  541. data/ext/boost/mpl/aux_/nttp_decl.hpp +3 -3
  542. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +3 -3
  543. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +3 -3
  544. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +3 -3
  545. data/ext/boost/mpl/aux_/preprocessor/params.hpp +3 -3
  546. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +3 -3
  547. data/ext/boost/mpl/aux_/static_cast.hpp +3 -3
  548. data/ext/boost/mpl/aux_/template_arity.hpp +3 -3
  549. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +3 -3
  550. data/ext/boost/mpl/aux_/type_wrapper.hpp +3 -3
  551. data/ext/boost/mpl/aux_/value_wknd.hpp +3 -3
  552. data/ext/boost/mpl/aux_/yes_no.hpp +3 -3
  553. data/ext/boost/mpl/bind.hpp +3 -3
  554. data/ext/boost/mpl/bind_fwd.hpp +3 -3
  555. data/ext/boost/mpl/bool.hpp +3 -3
  556. data/ext/boost/mpl/bool_fwd.hpp +3 -3
  557. data/ext/boost/mpl/eval_if.hpp +3 -3
  558. data/ext/boost/mpl/has_xxx.hpp +10 -8
  559. data/ext/boost/mpl/identity.hpp +3 -3
  560. data/ext/boost/mpl/if.hpp +3 -3
  561. data/ext/boost/mpl/int.hpp +3 -3
  562. data/ext/boost/mpl/int_fwd.hpp +3 -3
  563. data/ext/boost/mpl/integral_c.hpp +3 -3
  564. data/ext/boost/mpl/integral_c_fwd.hpp +3 -3
  565. data/ext/boost/mpl/integral_c_tag.hpp +3 -3
  566. data/ext/boost/mpl/lambda.hpp +3 -3
  567. data/ext/boost/mpl/lambda_fwd.hpp +3 -3
  568. data/ext/boost/mpl/limits/arity.hpp +3 -3
  569. data/ext/boost/mpl/logical.hpp +3 -3
  570. data/ext/boost/mpl/next.hpp +3 -3
  571. data/ext/boost/mpl/next_prior.hpp +3 -3
  572. data/ext/boost/mpl/not.hpp +3 -3
  573. data/ext/boost/mpl/or.hpp +3 -3
  574. data/ext/boost/mpl/placeholders.hpp +3 -3
  575. data/ext/boost/mpl/protect.hpp +3 -3
  576. data/ext/boost/mpl/quote.hpp +18 -7
  577. data/ext/boost/mpl/size_t.hpp +3 -3
  578. data/ext/boost/mpl/size_t_fwd.hpp +3 -3
  579. data/ext/boost/mpl/void.hpp +3 -3
  580. data/ext/boost/mpl/void_fwd.hpp +3 -3
  581. data/ext/boost/non_type.hpp +27 -27
  582. data/ext/boost/operators.hpp +51 -18
  583. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  584. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  585. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  586. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  587. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  588. data/ext/boost/preprocessor/seq/cat.hpp +48 -0
  589. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  590. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  591. data/ext/boost/range/as_literal.hpp +10 -14
  592. data/ext/boost/range/begin.hpp +4 -4
  593. data/ext/boost/range/detail/implementation_help.hpp +4 -0
  594. data/ext/boost/range/end.hpp +4 -4
  595. data/ext/boost/range/iterator_range.hpp +31 -15
  596. data/ext/boost/ref.hpp +12 -1
  597. data/ext/boost/scoped_array.hpp +16 -0
  598. data/ext/boost/scoped_ptr.hpp +16 -0
  599. data/ext/boost/shared_ptr.hpp +2 -602
  600. data/ext/boost/{detail → smart_ptr}/bad_weak_ptr.hpp +4 -4
  601. data/ext/boost/{detail → smart_ptr/detail}/atomic_count.hpp +14 -19
  602. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc.hpp +13 -9
  603. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc_x86.hpp +5 -12
  604. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_pthreads.hpp +5 -5
  605. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_solaris.hpp +3 -3
  606. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_sync.hpp +9 -5
  607. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_win32.hpp +3 -3
  608. data/ext/boost/smart_ptr/detail/operator_bool.hpp +56 -0
  609. data/ext/boost/{detail → smart_ptr/detail}/shared_count.hpp +86 -17
  610. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +76 -0
  611. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +70 -0
  612. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_acc_ia64.hpp +4 -4
  613. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_ppc.hpp +4 -4
  614. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_x86.hpp +4 -4
  615. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ia64.hpp +4 -4
  616. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +172 -0
  617. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ppc.hpp +4 -4
  618. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_sparc.hpp +7 -7
  619. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_x86.hpp +4 -4
  620. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_nt.hpp +4 -4
  621. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_pt.hpp +4 -4
  622. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_solaris.hpp +4 -4
  623. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +131 -0
  624. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_sync.hpp +8 -4
  625. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_w32.hpp +4 -4
  626. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_impl.hpp +5 -5
  627. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +49 -0
  628. data/ext/boost/smart_ptr/detail/spinlock.hpp +53 -0
  629. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +85 -0
  630. data/ext/boost/smart_ptr/detail/spinlock_nt.hpp +89 -0
  631. data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +87 -0
  632. data/ext/boost/smart_ptr/detail/spinlock_pt.hpp +79 -0
  633. data/ext/boost/smart_ptr/detail/spinlock_sync.hpp +87 -0
  634. data/ext/boost/smart_ptr/detail/yield_k.hpp +149 -0
  635. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +79 -0
  636. data/ext/boost/smart_ptr/scoped_array.hpp +107 -0
  637. data/ext/boost/smart_ptr/scoped_ptr.hpp +131 -0
  638. data/ext/boost/smart_ptr/shared_ptr.hpp +701 -0
  639. data/ext/boost/smart_ptr/weak_ptr.hpp +230 -0
  640. data/ext/boost/src/pthread/thread.cpp +115 -203
  641. data/ext/boost/src/tss_null.cpp +1 -1
  642. data/ext/boost/static_assert.hpp +14 -4
  643. data/ext/boost/thread.hpp +7 -2
  644. data/ext/boost/thread/barrier.hpp +63 -0
  645. data/ext/boost/thread/detail/force_cast.hpp +39 -0
  646. data/ext/boost/thread/detail/move.hpp +29 -2
  647. data/ext/boost/thread/detail/platform.hpp +3 -3
  648. data/ext/boost/thread/detail/singleton.hpp +59 -0
  649. data/ext/boost/thread/detail/thread.hpp +496 -0
  650. data/ext/boost/thread/detail/thread_group.hpp +105 -0
  651. data/ext/boost/thread/detail/thread_heap_alloc.hpp +23 -0
  652. data/ext/boost/thread/detail/thread_interruption.hpp +35 -0
  653. data/ext/boost/thread/detail/tss_hooks.hpp +82 -0
  654. data/ext/boost/thread/exceptions.hpp +174 -60
  655. data/ext/boost/thread/future.hpp +1364 -0
  656. data/ext/boost/thread/locks.hpp +899 -32
  657. data/ext/boost/thread/once.hpp +4 -0
  658. data/ext/boost/thread/pthread/condition_variable.hpp +16 -21
  659. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +37 -3
  660. data/ext/boost/thread/pthread/mutex.hpp +20 -7
  661. data/ext/boost/thread/pthread/once.hpp +7 -2
  662. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +5 -1
  663. data/ext/boost/thread/pthread/recursive_mutex.hpp +22 -5
  664. data/ext/boost/thread/pthread/shared_mutex.hpp +303 -0
  665. data/ext/boost/thread/pthread/thread_data.hpp +37 -10
  666. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +242 -0
  667. data/ext/boost/thread/pthread/timespec.hpp +11 -3
  668. data/ext/boost/thread/shared_mutex.hpp +21 -0
  669. data/ext/boost/thread/thread.hpp +8 -3
  670. data/ext/boost/thread/thread_time.hpp +4 -0
  671. data/ext/boost/thread/tss.hpp +106 -13
  672. data/ext/boost/thread/xtime.hpp +6 -2
  673. data/ext/boost/throw_exception.hpp +36 -7
  674. data/ext/boost/token_functions.hpp +1 -1
  675. data/ext/boost/tokenizer.hpp +1 -1
  676. data/ext/boost/type_traits/add_pointer.hpp +1 -1
  677. data/ext/boost/type_traits/add_volatile.hpp +47 -0
  678. data/ext/boost/type_traits/alignment_of.hpp +29 -1
  679. data/ext/boost/type_traits/config.hpp +1 -1
  680. data/ext/boost/type_traits/conversion_traits.hpp +1 -1
  681. data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
  682. data/ext/boost/type_traits/intrinsics.hpp +88 -1
  683. data/ext/boost/type_traits/is_abstract.hpp +14 -5
  684. data/ext/boost/type_traits/is_arithmetic.hpp +8 -0
  685. data/ext/boost/type_traits/is_array.hpp +3 -2
  686. data/ext/boost/type_traits/is_base_and_derived.hpp +254 -0
  687. data/ext/boost/type_traits/is_base_of.hpp +51 -0
  688. data/ext/boost/type_traits/is_class.hpp +12 -0
  689. data/ext/boost/type_traits/is_const.hpp +6 -2
  690. data/ext/boost/type_traits/is_convertible.hpp +14 -2
  691. data/ext/boost/type_traits/is_enum.hpp +10 -1
  692. data/ext/boost/type_traits/is_function.hpp +11 -3
  693. data/ext/boost/type_traits/is_fundamental.hpp +45 -0
  694. data/ext/boost/type_traits/is_integral.hpp +5 -0
  695. data/ext/boost/type_traits/is_member_function_pointer.hpp +5 -3
  696. data/ext/boost/type_traits/is_member_pointer.hpp +4 -2
  697. data/ext/boost/type_traits/is_pointer.hpp +3 -1
  698. data/ext/boost/type_traits/is_reference.hpp +4 -2
  699. data/ext/boost/type_traits/is_signed.hpp +135 -0
  700. data/ext/boost/type_traits/is_unsigned.hpp +130 -0
  701. data/ext/boost/type_traits/is_void.hpp +5 -0
  702. data/ext/boost/type_traits/is_volatile.hpp +4 -2
  703. data/ext/boost/type_traits/make_unsigned.hpp +137 -0
  704. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  705. data/ext/boost/type_traits/type_with_alignment.hpp +106 -1
  706. data/ext/boost/utility.hpp +2 -1
  707. data/ext/boost/utility/addressof.hpp +61 -17
  708. data/ext/boost/utility/binary.hpp +708 -0
  709. data/ext/boost/utility/enable_if.hpp +2 -2
  710. data/ext/boost/weak_ptr.hpp +4 -174
  711. data/ext/common/AbstractSpawnManager.h +110 -0
  712. data/ext/common/Account.h +175 -0
  713. data/ext/common/AccountsDatabase.cpp +81 -0
  714. data/ext/common/AccountsDatabase.h +130 -0
  715. data/ext/common/AgentBase.cpp +323 -0
  716. data/ext/common/{Version.h → AgentBase.h} +14 -6
  717. data/ext/common/AgentsStarter.cpp +154 -0
  718. data/ext/common/AgentsStarter.h +81 -0
  719. data/ext/common/AgentsStarter.hpp +619 -0
  720. data/ext/common/ApplicationPool/Client.h +796 -0
  721. data/ext/common/{ApplicationPool.h → ApplicationPool/Interface.h} +108 -18
  722. data/ext/common/ApplicationPool/Pool.h +1315 -0
  723. data/ext/common/ApplicationPool/Server.h +475 -0
  724. data/ext/common/BCrypt.cpp +343 -0
  725. data/ext/common/BCrypt.h +73 -0
  726. data/ext/common/Blowfish.c +685 -0
  727. data/ext/common/Blowfish.h +103 -0
  728. data/ext/common/Constants.h +48 -0
  729. data/ext/common/EventedClient.h +598 -0
  730. data/ext/common/EventedMessageServer.h +327 -0
  731. data/ext/common/EventedServer.h +295 -0
  732. data/ext/common/Exceptions.h +78 -1
  733. data/ext/common/FileDescriptor.h +229 -0
  734. data/ext/common/HelperAgent/BacktracesServer.h +59 -0
  735. data/ext/common/Logging.cpp +8 -9
  736. data/ext/common/Logging.h +593 -21
  737. data/ext/common/LoggingAgent/ChangeNotifier.h +63 -0
  738. data/ext/common/LoggingAgent/DataStoreId.h +177 -0
  739. data/ext/common/LoggingAgent/LoggingServer.h +1343 -0
  740. data/ext/common/LoggingAgent/Main.cpp +278 -0
  741. data/ext/common/LoggingAgent/RemoteSender.h +457 -0
  742. data/ext/common/MessageChannel.h +196 -34
  743. data/ext/common/MessageClient.h +297 -0
  744. data/ext/common/MessageReadersWriters.h +508 -0
  745. data/ext/common/MessageServer.h +575 -0
  746. data/ext/common/PoolOptions.h +279 -117
  747. data/ext/common/Process.h +255 -0
  748. data/ext/common/RandomGenerator.h +160 -0
  749. data/ext/common/ResourceLocator.h +84 -0
  750. data/ext/common/ServerInstanceDir.h +343 -0
  751. data/ext/common/Session.h +470 -0
  752. data/ext/common/SpawnManager.h +256 -201
  753. data/ext/common/StaticString.h +79 -4
  754. data/ext/common/StringListCreator.h +2 -2
  755. data/ext/common/Utils.cpp +385 -397
  756. data/ext/common/Utils.h +79 -165
  757. data/ext/common/{Base64.cpp → Utils/Base64.cpp} +0 -0
  758. data/ext/common/{Base64.h → Utils/Base64.h} +27 -1
  759. data/ext/common/Utils/BlockingQueue.h +136 -0
  760. data/ext/common/Utils/BlockingScalar.h +50 -0
  761. data/ext/common/{CachedFileStat.cpp → Utils/CachedFileStat.cpp} +1 -1
  762. data/ext/common/{CachedFileStat.h → Utils/CachedFileStat.h} +1 -1
  763. data/ext/common/{CachedFileStat.hpp → Utils/CachedFileStat.hpp} +1 -1
  764. data/ext/common/{FileChangeChecker.h → Utils/FileChangeChecker.h} +1 -1
  765. data/ext/common/Utils/FileHandleGuard.h +81 -0
  766. data/ext/common/Utils/IOUtils.cpp +754 -0
  767. data/ext/common/Utils/IOUtils.h +253 -0
  768. data/ext/common/Utils/MD5.cpp +406 -0
  769. data/ext/common/Utils/MD5.h +98 -0
  770. data/ext/common/Utils/MemZeroGuard.h +103 -0
  771. data/ext/common/Utils/ProcessMetricsCollector.h +462 -0
  772. data/ext/common/Utils/ScopeGuard.h +72 -0
  773. data/ext/common/Utils/StrIntUtils.cpp +329 -0
  774. data/ext/common/Utils/StrIntUtils.h +228 -0
  775. data/ext/common/{SystemTime.cpp → Utils/SystemTime.cpp} +5 -1
  776. data/ext/common/Utils/SystemTime.h +201 -0
  777. data/ext/common/{Timer.h → Utils/Timer.h} +58 -18
  778. data/ext/common/Utils/VariantMap.h +363 -0
  779. data/ext/common/Utils/foo.cpp +10 -0
  780. data/ext/common/Watchdog.cpp +1034 -0
  781. data/ext/google/COPYING +28 -0
  782. data/ext/google/ChangeLog +167 -0
  783. data/ext/google/dense_hash_map +310 -0
  784. data/ext/google/dense_hash_set +287 -0
  785. data/ext/google/sparse_hash_map +294 -0
  786. data/ext/google/sparse_hash_set +275 -0
  787. data/ext/google/sparsehash/densehashtable.h +1062 -0
  788. data/ext/google/sparsehash/sparseconfig.h +55 -0
  789. data/ext/google/sparsehash/sparsehashtable.h +1015 -0
  790. data/ext/google/sparsetable +1468 -0
  791. data/ext/google/type_traits.h +250 -0
  792. data/ext/libev/Changes +302 -0
  793. data/ext/libev/LICENSE +36 -0
  794. data/ext/libev/Makefile.am +18 -0
  795. data/ext/libev/Makefile.in +685 -0
  796. data/ext/libev/README +58 -0
  797. data/ext/libev/aclocal.m4 +7549 -0
  798. data/ext/libev/autogen.sh +6 -0
  799. data/ext/libev/config.guess +1526 -0
  800. data/ext/libev/config.h +122 -0
  801. data/ext/libev/config.h.in +121 -0
  802. data/ext/libev/config.sub +1658 -0
  803. data/ext/libev/configure +22156 -0
  804. data/ext/libev/configure.ac +18 -0
  805. data/ext/libev/ev++.h +800 -0
  806. data/ext/libev/ev.c +3694 -0
  807. data/ext/libev/ev.h +705 -0
  808. data/ext/libev/ev_epoll.c +228 -0
  809. data/ext/libev/ev_kqueue.c +196 -0
  810. data/ext/libev/ev_poll.c +144 -0
  811. data/ext/libev/ev_port.c +165 -0
  812. data/ext/libev/ev_select.c +308 -0
  813. data/ext/libev/ev_vars.h +187 -0
  814. data/ext/libev/ev_win32.c +153 -0
  815. data/ext/libev/ev_wrap.h +178 -0
  816. data/ext/libev/event.c +401 -0
  817. data/ext/libev/event.h +158 -0
  818. data/ext/libev/install-sh +294 -0
  819. data/ext/libev/libev.m4 +38 -0
  820. data/ext/libev/ltmain.sh +6871 -0
  821. data/ext/libev/missing +336 -0
  822. data/ext/libev/mkinstalldirs +111 -0
  823. data/ext/nginx/Configuration.c +532 -182
  824. data/ext/nginx/Configuration.h +33 -10
  825. data/ext/nginx/ContentHandler.c +188 -53
  826. data/ext/nginx/ContentHandler.h +1 -1
  827. data/ext/nginx/{HelperServer.cpp → HelperAgent.cpp} +433 -299
  828. data/ext/nginx/HttpStatusExtractor.h +1 -1
  829. data/ext/nginx/ScgiRequestParser.h +68 -11
  830. data/ext/nginx/StaticContentHandler.c +4 -1
  831. data/ext/nginx/StaticContentHandler.h +1 -1
  832. data/ext/nginx/config +5 -5
  833. data/ext/nginx/ngx_http_passenger_module.c +315 -469
  834. data/ext/nginx/ngx_http_passenger_module.h +8 -17
  835. data/ext/oxt/backtrace.cpp +49 -41
  836. data/ext/oxt/backtrace.hpp +1 -1
  837. data/ext/oxt/detail/backtrace_disabled.hpp +1 -1
  838. data/ext/oxt/detail/backtrace_enabled.hpp +16 -15
  839. data/ext/oxt/detail/spin_lock_darwin.hpp +69 -0
  840. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +3 -4
  841. data/ext/oxt/detail/spin_lock_portable.hpp +1 -1
  842. data/ext/oxt/detail/spin_lock_pthreads.hpp +1 -1
  843. data/ext/oxt/detail/tracable_exception_disabled.hpp +1 -1
  844. data/ext/oxt/detail/tracable_exception_enabled.hpp +1 -1
  845. data/ext/oxt/dynamic_thread_group.hpp +195 -0
  846. data/ext/oxt/macros.hpp +1 -1
  847. data/ext/oxt/spin_lock.hpp +4 -2
  848. data/ext/oxt/system_calls.cpp +129 -13
  849. data/ext/oxt/system_calls.hpp +16 -2
  850. data/ext/oxt/thread.cpp +1 -1
  851. data/ext/oxt/thread.hpp +49 -14
  852. data/ext/oxt/tracable_exception.cpp +5 -5
  853. data/ext/oxt/tracable_exception.hpp +1 -1
  854. data/ext/phusion_passenger/extconf.rb +7 -2
  855. data/ext/phusion_passenger/native_support.c +733 -33
  856. data/{bin → helper-scripts}/passenger-spawn-server +50 -12
  857. data/helper-scripts/prespawn +63 -0
  858. data/lib/phusion_passenger.rb +113 -0
  859. data/lib/phusion_passenger/abstract_installer.rb +50 -12
  860. data/lib/phusion_passenger/abstract_request_handler.rb +432 -171
  861. data/lib/phusion_passenger/abstract_server.rb +125 -122
  862. data/lib/phusion_passenger/abstract_server_collection.rb +51 -22
  863. data/lib/phusion_passenger/admin_tools.rb +1 -1
  864. data/lib/phusion_passenger/admin_tools/memory_stats.rb +299 -0
  865. data/lib/phusion_passenger/admin_tools/server_instance.rb +334 -0
  866. data/lib/phusion_passenger/analytics_logger.rb +342 -0
  867. data/lib/phusion_passenger/{application.rb → app_process.rb} +73 -24
  868. data/lib/phusion_passenger/classic_rails/application_spawner.rb +344 -0
  869. data/lib/phusion_passenger/{railz → classic_rails}/cgi_fixed.rb +2 -2
  870. data/lib/phusion_passenger/{railz → classic_rails}/framework_spawner.rb +75 -98
  871. data/lib/phusion_passenger/{railz → classic_rails}/request_handler.rb +8 -6
  872. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +65 -0
  873. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +48 -0
  874. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +59 -0
  875. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb +54 -0
  876. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +130 -0
  877. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +47 -0
  878. data/lib/phusion_passenger/classic_rails_extensions/init.rb +123 -0
  879. data/lib/phusion_passenger/console_text_template.rb +1 -1
  880. data/lib/phusion_passenger/constants.rb +9 -5
  881. data/lib/phusion_passenger/debug_logging.rb +104 -0
  882. data/lib/phusion_passenger/dependencies.rb +187 -4
  883. data/lib/phusion_passenger/exceptions.rb +4 -4
  884. data/lib/phusion_passenger/html_template.rb +6 -8
  885. data/lib/phusion_passenger/message_channel.rb +137 -21
  886. data/lib/phusion_passenger/message_client.rb +173 -0
  887. data/lib/phusion_passenger/native_support.rb +108 -0
  888. data/lib/phusion_passenger/packaging.rb +82 -13
  889. data/lib/phusion_passenger/platform_info.rb +84 -475
  890. data/lib/phusion_passenger/platform_info/apache.rb +329 -0
  891. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +187 -0
  892. data/lib/phusion_passenger/platform_info/compiler.rb +154 -0
  893. data/lib/phusion_passenger/{events.rb → platform_info/curl.rb} +26 -23
  894. data/lib/phusion_passenger/platform_info/documentation_tools.rb +35 -0
  895. data/lib/phusion_passenger/platform_info/linux.rb +77 -0
  896. data/lib/phusion_passenger/platform_info/operating_system.rb +51 -0
  897. data/lib/phusion_passenger/platform_info/ruby.rb +198 -0
  898. data/lib/phusion_passenger/platform_info/zlib.rb +38 -0
  899. data/lib/phusion_passenger/plugin.rb +96 -0
  900. data/lib/phusion_passenger/public_api.rb +112 -0
  901. data/lib/phusion_passenger/rack/application_spawner.rb +146 -71
  902. data/lib/phusion_passenger/rack/request_handler.rb +36 -13
  903. data/lib/phusion_passenger/rails3_extensions/init.rb +204 -0
  904. data/lib/phusion_passenger/simple_benchmarking.rb +1 -1
  905. data/lib/phusion_passenger/spawn_manager.rb +137 -141
  906. data/lib/phusion_passenger/standalone/app_finder.rb +153 -0
  907. data/lib/phusion_passenger/standalone/command.rb +237 -0
  908. data/lib/phusion_passenger/standalone/config_file.rb +119 -0
  909. data/lib/phusion_passenger/standalone/help_command.rb +57 -0
  910. data/lib/phusion_passenger/standalone/main.rb +101 -0
  911. data/lib/phusion_passenger/standalone/package_runtime_command.rb +92 -0
  912. data/lib/phusion_passenger/standalone/runtime_installer.rb +466 -0
  913. data/lib/phusion_passenger/standalone/start_command.rb +510 -0
  914. data/lib/phusion_passenger/standalone/status_command.rb +62 -0
  915. data/lib/phusion_passenger/standalone/stop_command.rb +74 -0
  916. data/lib/phusion_passenger/standalone/utils.rb +42 -0
  917. data/lib/phusion_passenger/standalone/version_command.rb +42 -0
  918. data/lib/phusion_passenger/templates/framework_init_error.html.erb +1 -1
  919. data/lib/phusion_passenger/templates/standalone/cannot_write_to_dir.txt.erb +11 -0
  920. data/lib/phusion_passenger/templates/standalone/config.erb +69 -0
  921. data/lib/phusion_passenger/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +17 -0
  922. data/lib/phusion_passenger/templates/standalone/run_installer_as_root.txt.erb +8 -0
  923. data/lib/phusion_passenger/templates/standalone/welcome.txt.erb +8 -0
  924. data/lib/phusion_passenger/templates/standalone_default_root/index.html +1 -0
  925. data/lib/phusion_passenger/templates/version_not_found.html.erb +2 -2
  926. data/lib/phusion_passenger/utils.rb +476 -125
  927. data/lib/phusion_passenger/utils/file_system_watcher.rb +186 -0
  928. data/lib/phusion_passenger/utils/hosts_file_parser.rb +130 -0
  929. data/lib/phusion_passenger/utils/tmpdir.rb +70 -0
  930. data/lib/phusion_passenger/utils/unseekable_socket.rb +196 -0
  931. data/lib/phusion_passenger/wsgi/application_spawner.rb +24 -20
  932. data/lib/phusion_passenger/wsgi/request_handler.py +1 -1
  933. data/misc/copy_boost_headers.rb +36 -9
  934. data/misc/find_owner_pipe_leaks.rb +1 -1
  935. data/misc/render_error_pages.rb +1 -1
  936. data/misc/union_station_gateway.crt +32 -0
  937. data/test/config.yml.example +24 -13
  938. data/test/cxx/ApplicationPool_PoolTest.cpp +33 -0
  939. data/test/cxx/ApplicationPool_PoolTestCases.cpp +1029 -0
  940. data/test/cxx/ApplicationPool_ServerTest.cpp +308 -0
  941. data/test/cxx/ApplicationPool_Server_PoolTest.cpp +80 -0
  942. data/test/{Base64Test.cpp → cxx/Base64Test.cpp} +4 -2
  943. data/test/{CachedFileStatTest.cpp → cxx/CachedFileStatTest.cpp} +3 -3
  944. data/test/{CxxTestMain.cpp → cxx/CxxTestMain.cpp} +6 -27
  945. data/test/cxx/EventedClientTest.cpp +386 -0
  946. data/test/{FileChangeCheckerTest.cpp → cxx/FileChangeCheckerTest.cpp} +3 -5
  947. data/test/cxx/FileDescriptorTest.cpp +69 -0
  948. data/test/{HttpStatusExtractorTest.cpp → cxx/HttpStatusExtractorTest.cpp} +1 -1
  949. data/test/cxx/IOUtilsTest.cpp +398 -0
  950. data/test/cxx/LoggingTest.cpp +914 -0
  951. data/test/cxx/MessageChannelTest.cpp +672 -0
  952. data/test/cxx/MessageReadersWritersTest.cpp +574 -0
  953. data/test/cxx/MessageServerTest.cpp +383 -0
  954. data/test/{PoolOptionsTest.cpp → cxx/PoolOptionsTest.cpp} +2 -3
  955. data/test/{ScgiRequestParserTest.cpp → cxx/ScgiRequestParserTest.cpp} +53 -1
  956. data/test/cxx/ServerInstanceDirTest.cpp +186 -0
  957. data/test/cxx/SpawnManagerTest.cpp +161 -0
  958. data/test/cxx/StaticStringTest.cpp +86 -0
  959. data/test/{SystemTimeTest.cpp → cxx/SystemTimeTest.cpp} +2 -2
  960. data/test/cxx/TestSupport.cpp +166 -0
  961. data/test/cxx/TestSupport.h +254 -0
  962. data/test/cxx/UtilsTest.cpp +521 -0
  963. data/test/cxx/VariantMapTest.cpp +179 -0
  964. data/test/integration_tests/apache2_tests.rb +198 -127
  965. data/test/integration_tests/cgi_environment_spec.rb +26 -0
  966. data/test/integration_tests/mycook_spec.rb +2 -28
  967. data/test/integration_tests/nginx_tests.rb +125 -16
  968. data/test/integration_tests/spec_helper.rb +19 -0
  969. data/test/oxt/backtrace_test.cpp +19 -59
  970. data/test/oxt/counter.hpp +55 -0
  971. data/test/oxt/dynamic_thread_group_test.cpp +131 -0
  972. data/test/oxt/oxt_test_main.cpp +2 -2
  973. data/test/oxt/spin_lock_test.cpp +59 -0
  974. data/test/oxt/syscall_interruption_test.cpp +1 -1
  975. data/test/ruby/abstract_request_handler_spec.rb +346 -25
  976. data/test/ruby/abstract_server_collection_spec.rb +4 -3
  977. data/test/ruby/abstract_server_spec.rb +37 -27
  978. data/test/ruby/admin_tools_spec.rb +362 -0
  979. data/test/ruby/analytics_logger_spec.rb +253 -0
  980. data/test/ruby/{application_spec.rb → app_process_spec.rb} +14 -14
  981. data/test/ruby/classic_rails/application_spawner_spec.rb +89 -0
  982. data/test/ruby/classic_rails/framework_spawner_spec.rb +92 -0
  983. data/test/ruby/debug_logging_spec.rb +141 -0
  984. data/test/ruby/message_channel_spec.rb +51 -25
  985. data/test/ruby/rack/application_spawner_spec.rb +99 -82
  986. data/test/ruby/shared/abstract_server_spec.rb +23 -0
  987. data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +375 -0
  988. data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +38 -0
  989. data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +19 -0
  990. data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +15 -0
  991. data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +27 -0
  992. data/test/ruby/shared/spawners/preloading_spawner_spec.rb +29 -0
  993. data/test/ruby/shared/spawners/reload_all_spec.rb +36 -0
  994. data/test/ruby/shared/spawners/reload_single_spec.rb +52 -0
  995. data/test/ruby/shared/spawners/spawn_server_spec.rb +28 -0
  996. data/test/ruby/shared/spawners/spawner_spec.rb +273 -0
  997. data/test/ruby/shared/utils/pseudo_io_spec.rb +60 -0
  998. data/test/ruby/spawn_manager_spec.rb +104 -175
  999. data/test/ruby/spec_helper.rb +104 -0
  1000. data/test/ruby/utils/file_system_watcher_spec.rb +221 -0
  1001. data/test/ruby/utils/hosts_file_parser.rb +258 -0
  1002. data/test/ruby/utils/unseekable_socket_spec.rb +66 -0
  1003. data/test/ruby/utils_spec.rb +410 -59
  1004. data/test/ruby/wsgi/application_spawner_spec.rb +16 -20
  1005. data/test/stub/apache2/httpd.conf.erb +11 -6
  1006. data/test/stub/message_channel.rb +3 -1
  1007. data/test/stub/message_channel_2.rb +3 -1
  1008. data/test/stub/message_channel_3.rb +5 -3
  1009. data/test/stub/nginx/nginx.conf.erb +3 -2
  1010. data/test/stub/rails_apps/1.2/empty/Rakefile +10 -0
  1011. data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +7 -0
  1012. data/test/stub/rails_apps/{foobar → 1.2/empty}/app/helpers/application_helper.rb +0 -0
  1013. data/test/stub/rails_apps/{mycook → 1.2/empty}/config/boot.rb +3 -3
  1014. data/test/stub/rails_apps/1.2/empty/config/database.yml +31 -0
  1015. data/test/stub/rails_apps/1.2/empty/config/environment.rb +66 -0
  1016. data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +21 -0
  1017. data/test/stub/rails_apps/{foobar → 1.2/empty}/config/environments/production.rb +0 -0
  1018. data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +18 -0
  1019. data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +19 -0
  1020. data/test/stub/rails_apps/1.2/empty/config/routes.rb +23 -0
  1021. data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +2 -0
  1022. data/test/stub/rails_apps/{mycook → 1.2/empty}/public/404.html +0 -0
  1023. data/test/stub/rails_apps/1.2/empty/public/500.html +30 -0
  1024. data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +10 -0
  1025. data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +24 -0
  1026. data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +10 -0
  1027. data/test/stub/rails_apps/{mycook → 1.2/empty}/public/favicon.ico +0 -0
  1028. data/test/stub/rails_apps/{mycook → 1.2/empty}/public/images/rails.png +0 -0
  1029. data/test/stub/rails_apps/1.2/empty/public/robots.txt +1 -0
  1030. data/test/stub/rails_apps/1.2/empty/script/about +3 -0
  1031. data/test/stub/rails_apps/1.2/empty/script/breakpointer +3 -0
  1032. data/test/stub/rails_apps/1.2/empty/script/console +3 -0
  1033. data/test/stub/rails_apps/1.2/empty/script/destroy +3 -0
  1034. data/test/stub/rails_apps/1.2/empty/script/generate +3 -0
  1035. data/test/stub/rails_apps/1.2/empty/script/performance/benchmarker +3 -0
  1036. data/test/stub/rails_apps/1.2/empty/script/performance/profiler +3 -0
  1037. data/test/stub/rails_apps/1.2/empty/script/plugin +3 -0
  1038. data/test/stub/rails_apps/1.2/empty/script/process/inspector +3 -0
  1039. data/test/stub/rails_apps/1.2/empty/script/process/reaper +3 -0
  1040. data/test/stub/rails_apps/1.2/empty/script/process/spawner +3 -0
  1041. data/test/stub/rails_apps/1.2/empty/script/runner +3 -0
  1042. data/test/stub/rails_apps/1.2/empty/script/server +3 -0
  1043. data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +28 -0
  1044. data/test/stub/rails_apps/2.0/empty/Rakefile +10 -0
  1045. data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +10 -0
  1046. data/test/stub/rails_apps/{mycook → 2.0/empty}/app/helpers/application_helper.rb +0 -0
  1047. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/boot.rb +3 -3
  1048. data/test/stub/rails_apps/2.0/empty/config/database.yml +31 -0
  1049. data/test/stub/rails_apps/2.0/empty/config/environment.rb +59 -0
  1050. data/test/stub/rails_apps/{mycook → 2.0/empty}/config/environments/development.rb +1 -1
  1051. data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +18 -0
  1052. data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +18 -0
  1053. data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +22 -0
  1054. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/inflections.rb +0 -0
  1055. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/mime_types.rb +0 -0
  1056. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/routes.rb +0 -0
  1057. data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +2 -0
  1058. data/test/stub/rails_apps/2.0/empty/public/404.html +30 -0
  1059. data/test/stub/rails_apps/{mycook → 2.0/empty}/public/422.html +0 -0
  1060. data/test/stub/rails_apps/{mycook → 2.0/empty}/public/500.html +0 -0
  1061. data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +10 -0
  1062. data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +24 -0
  1063. data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +10 -0
  1064. data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
  1065. data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
  1066. data/test/stub/rails_apps/{mycook → 2.0/empty}/public/robots.txt +0 -0
  1067. data/test/stub/rails_apps/2.0/empty/script/about +3 -0
  1068. data/test/stub/rails_apps/2.0/empty/script/console +3 -0
  1069. data/test/stub/rails_apps/2.0/empty/script/destroy +3 -0
  1070. data/test/stub/rails_apps/2.0/empty/script/generate +3 -0
  1071. data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +3 -0
  1072. data/test/stub/rails_apps/2.0/empty/script/performance/profiler +3 -0
  1073. data/test/stub/rails_apps/2.0/empty/script/performance/request +3 -0
  1074. data/test/stub/rails_apps/2.0/empty/script/plugin +3 -0
  1075. data/test/stub/rails_apps/2.0/empty/script/process/inspector +3 -0
  1076. data/test/stub/rails_apps/2.0/empty/script/process/reaper +3 -0
  1077. data/test/stub/rails_apps/2.0/empty/script/process/spawner +3 -0
  1078. data/test/stub/rails_apps/2.0/empty/script/runner +3 -0
  1079. data/test/stub/rails_apps/2.0/empty/script/server +3 -0
  1080. data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +38 -0
  1081. data/test/stub/rails_apps/2.2/empty/Rakefile +10 -0
  1082. data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +15 -0
  1083. data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +3 -0
  1084. data/test/stub/rails_apps/2.2/empty/config/boot.rb +109 -0
  1085. data/test/stub/rails_apps/2.2/empty/config/database.yml +31 -0
  1086. data/test/stub/rails_apps/2.2/empty/config/environment.rb +75 -0
  1087. data/test/stub/rails_apps/{foobar → 2.2/empty}/config/environments/development.rb +0 -0
  1088. data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +24 -0
  1089. data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +24 -0
  1090. data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +22 -0
  1091. data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +10 -0
  1092. data/test/stub/rails_apps/{mycook → 2.2/empty}/config/initializers/mime_types.rb +0 -0
  1093. data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +17 -0
  1094. data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +5 -0
  1095. data/test/stub/rails_apps/2.2/empty/config/routes.rb +43 -0
  1096. data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +5 -0
  1097. data/test/stub/rails_apps/2.2/empty/public/404.html +30 -0
  1098. data/test/stub/rails_apps/2.2/empty/public/422.html +30 -0
  1099. data/test/stub/rails_apps/2.2/empty/public/500.html +33 -0
  1100. data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +10 -0
  1101. data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +24 -0
  1102. data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +10 -0
  1103. data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
  1104. data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
  1105. data/test/stub/rails_apps/2.2/empty/public/robots.txt +5 -0
  1106. data/test/stub/rails_apps/2.2/empty/script/about +4 -0
  1107. data/test/stub/rails_apps/2.2/empty/script/console +3 -0
  1108. data/test/stub/rails_apps/2.2/empty/script/dbconsole +3 -0
  1109. data/test/stub/rails_apps/2.2/empty/script/destroy +3 -0
  1110. data/test/stub/rails_apps/2.2/empty/script/generate +3 -0
  1111. data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +3 -0
  1112. data/test/stub/rails_apps/2.2/empty/script/performance/profiler +3 -0
  1113. data/test/stub/rails_apps/2.2/empty/script/performance/request +3 -0
  1114. data/test/stub/rails_apps/2.2/empty/script/plugin +3 -0
  1115. data/test/stub/rails_apps/2.2/empty/script/process/inspector +3 -0
  1116. data/test/stub/rails_apps/2.2/empty/script/process/reaper +3 -0
  1117. data/test/stub/rails_apps/2.2/empty/script/process/spawner +3 -0
  1118. data/test/stub/rails_apps/2.2/empty/script/runner +3 -0
  1119. data/test/stub/rails_apps/2.2/empty/script/server +3 -0
  1120. data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +9 -0
  1121. data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +38 -0
  1122. data/test/stub/rails_apps/2.3/empty/Rakefile +10 -0
  1123. data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +10 -0
  1124. data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +3 -0
  1125. data/test/stub/rails_apps/2.3/empty/config/boot.rb +110 -0
  1126. data/test/stub/rails_apps/2.3/empty/config/database.yml +31 -0
  1127. data/test/stub/rails_apps/2.3/empty/config/environment.rb +41 -0
  1128. data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +17 -0
  1129. data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +28 -0
  1130. data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +28 -0
  1131. data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +28 -0
  1132. data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +7 -0
  1133. data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +10 -0
  1134. data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +5 -0
  1135. data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +21 -0
  1136. data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +15 -0
  1137. data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +5 -0
  1138. data/test/stub/rails_apps/2.3/empty/config/routes.rb +43 -0
  1139. data/test/stub/rails_apps/2.3/empty/db/seeds.rb +7 -0
  1140. data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +2 -0
  1141. data/test/stub/rails_apps/2.3/empty/public/404.html +30 -0
  1142. data/test/stub/rails_apps/2.3/empty/public/422.html +30 -0
  1143. data/test/stub/rails_apps/2.3/empty/public/500.html +30 -0
  1144. data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
  1145. data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
  1146. data/test/stub/rails_apps/2.3/empty/public/robots.txt +5 -0
  1147. data/test/stub/rails_apps/2.3/empty/script/about +4 -0
  1148. data/test/stub/rails_apps/2.3/empty/script/console +3 -0
  1149. data/test/stub/rails_apps/2.3/empty/script/dbconsole +3 -0
  1150. data/test/stub/rails_apps/2.3/empty/script/destroy +3 -0
  1151. data/test/stub/rails_apps/2.3/empty/script/generate +3 -0
  1152. data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +3 -0
  1153. data/test/stub/rails_apps/2.3/empty/script/performance/profiler +3 -0
  1154. data/test/stub/rails_apps/2.3/empty/script/plugin +3 -0
  1155. data/test/stub/rails_apps/2.3/empty/script/runner +3 -0
  1156. data/test/stub/rails_apps/2.3/empty/script/server +3 -0
  1157. data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +9 -0
  1158. data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +38 -0
  1159. data/test/stub/rails_apps/2.3/foobar/Rakefile +10 -0
  1160. data/test/stub/rails_apps/{foobar/app/controllers/application.rb → 2.3/foobar/app/controllers/application_controller.rb} +0 -0
  1161. data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_1.rb +0 -0
  1162. data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_2.rb +0 -0
  1163. data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/foo_controller.rb +0 -0
  1164. data/test/stub/rails_apps/2.3/foobar/app/helpers/application_helper.rb +3 -0
  1165. data/test/stub/rails_apps/2.3/foobar/config/boot.rb +110 -0
  1166. data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/database.yml +0 -0
  1167. data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/environment.rb +1 -1
  1168. data/test/stub/rails_apps/2.3/foobar/config/environments/development.rb +17 -0
  1169. data/test/stub/rails_apps/2.3/foobar/config/environments/production.rb +18 -0
  1170. data/test/stub/rails_apps/2.3/foobar/config/environments/staging.rb +18 -0
  1171. data/test/stub/rails_apps/{mycook → 2.3/foobar}/config/initializers/inflections.rb +0 -0
  1172. data/test/stub/rails_apps/2.3/foobar/config/initializers/mime_types.rb +5 -0
  1173. data/test/stub/rails_apps/2.3/foobar/config/routes.rb +35 -0
  1174. data/test/stub/rails_apps/2.3/foobar/script/about +3 -0
  1175. data/test/stub/rails_apps/2.3/foobar/script/console +3 -0
  1176. data/test/stub/rails_apps/2.3/foobar/script/dbconsole +3 -0
  1177. data/test/stub/rails_apps/2.3/foobar/script/destroy +3 -0
  1178. data/test/stub/rails_apps/2.3/foobar/script/generate +3 -0
  1179. data/test/stub/rails_apps/2.3/foobar/script/performance/benchmarker +3 -0
  1180. data/test/stub/rails_apps/2.3/foobar/script/performance/profiler +3 -0
  1181. data/test/stub/rails_apps/2.3/foobar/script/performance/request +3 -0
  1182. data/test/stub/rails_apps/2.3/foobar/script/plugin +3 -0
  1183. data/test/stub/rails_apps/2.3/foobar/script/process/inspector +3 -0
  1184. data/test/stub/rails_apps/2.3/foobar/script/process/reaper +3 -0
  1185. data/test/stub/rails_apps/2.3/foobar/script/process/spawner +3 -0
  1186. data/test/stub/rails_apps/2.3/foobar/script/runner +3 -0
  1187. data/test/stub/rails_apps/2.3/foobar/script/server +3 -0
  1188. data/test/stub/rails_apps/2.3/mycook/Rakefile +10 -0
  1189. data/test/stub/rails_apps/{mycook/app/controllers/application.rb → 2.3/mycook/app/controllers/application_controller.rb} +0 -0
  1190. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/recipes_controller.rb +0 -0
  1191. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/uploads_controller.rb +0 -0
  1192. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/welcome_controller.rb +0 -0
  1193. data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +3 -0
  1194. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/layouts/default.rhtml +0 -0
  1195. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/create.rhtml +0 -0
  1196. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/index.rhtml +0 -0
  1197. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/new.rhtml +0 -0
  1198. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/index.rhtml +0 -0
  1199. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/new.html.erb +0 -0
  1200. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/cached.rhtml +0 -0
  1201. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/index.rhtml +0 -0
  1202. data/test/stub/rails_apps/2.3/mycook/config/boot.rb +110 -0
  1203. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/database.yml +0 -0
  1204. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environment.rb +1 -1
  1205. data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +18 -0
  1206. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environments/production.rb +0 -0
  1207. data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +10 -0
  1208. data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +5 -0
  1209. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/routes.rb +0 -0
  1210. data/test/stub/rails_apps/{mycook → 2.3/mycook}/log/useless.txt +0 -0
  1211. data/test/stub/rails_apps/2.3/mycook/public/404.html +30 -0
  1212. data/test/stub/rails_apps/2.3/mycook/public/422.html +30 -0
  1213. data/test/stub/rails_apps/2.3/mycook/public/500.html +30 -0
  1214. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.cgi +0 -0
  1215. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.fcgi +0 -0
  1216. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.rb +1 -1
  1217. data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
  1218. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/angrywizard.gif +0 -0
  1219. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/cookbook.gif +0 -0
  1220. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/header.png +0 -0
  1221. data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
  1222. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/application.js +0 -0
  1223. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/controls.js +73 -73
  1224. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/dragdrop.js +166 -165
  1225. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/effects.js +174 -166
  1226. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/prototype.js +362 -267
  1227. data/test/stub/rails_apps/2.3/mycook/public/robots.txt +5 -0
  1228. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/uploads.html +0 -0
  1229. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/welcome/cached.html +0 -0
  1230. data/test/stub/rails_apps/2.3/mycook/script/about +3 -0
  1231. data/test/stub/rails_apps/2.3/mycook/script/console +3 -0
  1232. data/test/stub/rails_apps/2.3/mycook/script/dbconsole +3 -0
  1233. data/test/stub/rails_apps/2.3/mycook/script/destroy +3 -0
  1234. data/test/stub/rails_apps/2.3/mycook/script/generate +3 -0
  1235. data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +3 -0
  1236. data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +3 -0
  1237. data/test/stub/rails_apps/2.3/mycook/script/performance/request +3 -0
  1238. data/test/stub/rails_apps/2.3/mycook/script/plugin +3 -0
  1239. data/test/stub/rails_apps/2.3/mycook/script/process/inspector +3 -0
  1240. data/test/stub/rails_apps/2.3/mycook/script/process/reaper +3 -0
  1241. data/test/stub/rails_apps/2.3/mycook/script/process/spawner +3 -0
  1242. data/test/stub/rails_apps/2.3/mycook/script/runner +3 -0
  1243. data/test/stub/rails_apps/2.3/mycook/script/server +3 -0
  1244. data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/uploads.html +0 -0
  1245. data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/welcome/cached.html +0 -0
  1246. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/cache/useless.txt +0 -0
  1247. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/pids/useless.txt +0 -0
  1248. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sessions/useless.txt +0 -0
  1249. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sockets/useless.txt +0 -0
  1250. data/test/stub/rails_apps/3.0/empty/Gemfile +22 -0
  1251. data/test/stub/rails_apps/3.0/empty/Rakefile +10 -0
  1252. data/test/stub/rails_apps/3.0/empty/app/controllers/application_controller.rb +4 -0
  1253. data/test/stub/rails_apps/3.0/empty/app/helpers/application_helper.rb +2 -0
  1254. data/test/stub/rails_apps/3.0/empty/app/views/layouts/application.html.erb +14 -0
  1255. data/test/stub/rails_apps/3.0/empty/config.ru +4 -0
  1256. data/test/stub/rails_apps/3.0/empty/config/application.rb +48 -0
  1257. data/test/stub/rails_apps/3.0/empty/config/boot.rb +13 -0
  1258. data/test/stub/rails_apps/3.0/empty/config/database.yml +22 -0
  1259. data/test/stub/rails_apps/3.0/empty/config/environment.rb +5 -0
  1260. data/test/stub/rails_apps/3.0/empty/config/environments/development.rb +19 -0
  1261. data/test/stub/rails_apps/3.0/empty/config/environments/production.rb +48 -0
  1262. data/test/stub/rails_apps/3.0/empty/config/environments/test.rb +32 -0
  1263. data/test/stub/rails_apps/3.0/empty/config/initializers/backtrace_silencers.rb +7 -0
  1264. data/test/stub/rails_apps/3.0/empty/config/initializers/inflections.rb +10 -0
  1265. data/test/stub/rails_apps/3.0/empty/config/initializers/mime_types.rb +5 -0
  1266. data/test/stub/rails_apps/3.0/empty/config/initializers/passenger.rb +1 -0
  1267. data/test/stub/rails_apps/3.0/empty/config/initializers/secret_token.rb +7 -0
  1268. data/test/stub/rails_apps/3.0/empty/config/initializers/session_store.rb +8 -0
  1269. data/test/stub/rails_apps/3.0/empty/config/locales/en.yml +5 -0
  1270. data/test/stub/rails_apps/3.0/empty/config/routes.rb +58 -0
  1271. data/test/stub/rails_apps/3.0/empty/db/seeds.rb +7 -0
  1272. data/test/stub/rails_apps/3.0/empty/doc/README_FOR_APP +2 -0
  1273. data/test/stub/rails_apps/3.0/empty/log/development.log +3 -0
  1274. data/test/stub/rails_apps/3.0/empty/public/404.html +26 -0
  1275. data/test/stub/rails_apps/3.0/empty/public/422.html +26 -0
  1276. data/test/stub/rails_apps/3.0/empty/public/500.html +26 -0
  1277. data/test/stub/rails_apps/3.0/empty/public/favicon.ico +0 -0
  1278. data/test/stub/rails_apps/3.0/empty/public/index.html +279 -0
  1279. data/test/stub/rails_apps/3.0/empty/public/robots.txt +5 -0
  1280. data/test/stub/rails_apps/3.0/empty/script/rails +9 -0
  1281. data/test/stub/rails_apps/3.0/empty/test/performance/browsing_test.rb +9 -0
  1282. data/test/stub/rails_apps/3.0/empty/test/test_helper.rb +13 -0
  1283. data/test/stub/spawn_server.rb +4 -2
  1284. data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +3 -0
  1285. data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +7 -2
  1286. data/test/support/apache2_controller.rb +10 -2
  1287. data/test/support/nginx_controller.rb +3 -2
  1288. data/test/support/test_helper.rb +282 -46
  1289. data/test/{support → tut}/tut.h +6 -0
  1290. data/test/{support → tut}/tut_reporter.h +0 -0
  1291. metadata +824 -266
  1292. data/benchmark/ApplicationPool.cpp +0 -52
  1293. data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +0 -126
  1294. data/benchmark/dispatcher.rb +0 -42
  1295. data/benchmark/overhead_of_password_checking.rb +0 -81
  1296. data/benchmark/socket_connections_vs_persistent_pipe.rb +0 -99
  1297. data/benchmark/unix_sockets_vs_pipes.rb +0 -83
  1298. data/ext/boost/LICENSE.TXT +0 -23
  1299. data/ext/boost/VERSION.TXT +0 -1
  1300. data/ext/boost/detail/sp_counted_base.hpp +0 -81
  1301. data/ext/boost/src/pthread/exceptions.cpp +0 -146
  1302. data/ext/boost/src/win32/exceptions.cpp +0 -124
  1303. data/ext/boost/src/win32/thread.cpp +0 -629
  1304. data/ext/boost/src/win32/timeconv.inl +0 -130
  1305. data/ext/boost/src/win32/tss_dll.cpp +0 -72
  1306. data/ext/boost/src/win32/tss_pe.cpp +0 -269
  1307. data/ext/boost/thread/pthread/thread.hpp +0 -339
  1308. data/ext/boost/thread/pthread/tss.hpp +0 -103
  1309. data/ext/common/Application.h +0 -511
  1310. data/ext/common/ApplicationPoolServer.h +0 -794
  1311. data/ext/common/ApplicationPoolServerExecutable.cpp +0 -743
  1312. data/ext/common/ApplicationPoolStatusReporter.h +0 -336
  1313. data/ext/common/DummySpawnManager.h +0 -108
  1314. data/ext/common/StandardApplicationPool.h +0 -821
  1315. data/ext/common/SystemTime.h +0 -88
  1316. data/lib/phusion_passenger/admin_tools/control_process.rb +0 -150
  1317. data/lib/phusion_passenger/railz/application_spawner.rb +0 -463
  1318. data/lib/phusion_passenger/templates/invalid_app_root.html.erb +0 -9
  1319. data/test/ApplicationPoolServerTest.cpp +0 -114
  1320. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +0 -33
  1321. data/test/ApplicationPoolTest.cpp +0 -599
  1322. data/test/MessageChannelTest.cpp +0 -320
  1323. data/test/SpawnManagerTest.cpp +0 -64
  1324. data/test/StandardApplicationPoolTest.cpp +0 -27
  1325. data/test/StaticStringTest.cpp +0 -51
  1326. data/test/UtilsTest.cpp +0 -257
  1327. data/test/ruby/rails/application_spawner_spec.rb +0 -159
  1328. data/test/ruby/rails/framework_spawner_spec.rb +0 -133
  1329. data/test/ruby/rails/minimal_spawner_spec.rb +0 -93
  1330. data/test/ruby/rails/spawner_error_handling_spec.rb +0 -107
  1331. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +0 -97
  1332. data/test/ruby/spawn_server_spec.rb +0 -26
  1333. data/test/stub/MessageServer.dSYM/Contents/Info.plist +0 -25
  1334. data/test/stub/MessageServer.dSYM/Contents/Resources/DWARF/MessageServer +0 -0
  1335. data/test/support/Support.cpp +0 -84
  1336. data/test/support/Support.h +0 -118
  1337. data/test/support/config.rb +0 -38
  1338. data/test/support/run_rspec_tests.rb +0 -10
@@ -0,0 +1,343 @@
1
+ /* $OpenBSD: bcrypt.c,v 1.22 2007/02/20 01:44:16 ray Exp $ */
2
+
3
+ /*
4
+ * Modified by <hongli@phusion.nl> on 2009-10-24:
5
+ *
6
+ * - Made some code compilable in C++.
7
+ *
8
+ * Modified by <hongli@phusion.nl> on 2009-08-05:
9
+ *
10
+ * - Got rid of the global variables; they're not thread-safe.
11
+ * Modified the functions to accept local buffers instead.
12
+ *
13
+ * Modified by <coda.hale@gmail.com> on 2007-02-27:
14
+ *
15
+ * - Changed bcrypt_gensalt to accept a random seed as a parameter,
16
+ * to remove the code's dependency on arc4random(), which isn't
17
+ * available on Linux.
18
+ */
19
+
20
+ /*
21
+ * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
22
+ * All rights reserved.
23
+ *
24
+ * Redistribution and use in source and binary forms, with or without
25
+ * modification, are permitted provided that the following conditions
26
+ * are met:
27
+ * 1. Redistributions of source code must retain the above copyright
28
+ * notice, this list of conditions and the following disclaimer.
29
+ * 2. Redistributions in binary form must reproduce the above copyright
30
+ * notice, this list of conditions and the following disclaimer in the
31
+ * documentation and/or other materials provided with the distribution.
32
+ * 3. All advertising materials mentioning features or use of this software
33
+ * must display the following acknowledgement:
34
+ * This product includes software developed by Niels Provos.
35
+ * 4. The name of the author may not be used to endorse or promote products
36
+ * derived from this software without specific prior written permission.
37
+ *
38
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
39
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
41
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
42
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
43
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
44
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
45
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
47
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48
+ */
49
+
50
+ /* This password hashing algorithm was designed by David Mazieres
51
+ * <dm@lcs.mit.edu> and works as follows:
52
+ *
53
+ * 1. state := InitState ()
54
+ * 2. state := ExpandKey (state, salt, password) 3.
55
+ * REPEAT rounds:
56
+ * state := ExpandKey (state, 0, salt)
57
+ * state := ExpandKey(state, 0, password)
58
+ * 4. ctext := "OrpheanBeholderScryDoubt"
59
+ * 5. REPEAT 64:
60
+ * ctext := Encrypt_ECB (state, ctext);
61
+ * 6. RETURN Concatenate (salt, ctext);
62
+ *
63
+ */
64
+
65
+ #if 0
66
+ #include <stdio.h>
67
+ #endif
68
+
69
+ #define IN_PASSENGER_BCRYPT_C
70
+
71
+ #include <stdio.h>
72
+ #include <stdlib.h>
73
+ #include <sys/types.h>
74
+ #include <string.h>
75
+ #include "BCrypt.h"
76
+ #include "Blowfish.h"
77
+ #include "Blowfish.c"
78
+
79
+ #define BCRYPT_VERSION '2'
80
+ #define BCRYPT_BLOCKS 6 /* Ciphertext blocks */
81
+ #define BCRYPT_MINROUNDS 16 /* we have log2(rounds) in salt */
82
+
83
+ /* This implementation is adaptable to current computing power.
84
+ * You can have up to 2^31 rounds which should be enough for some
85
+ * time to come.
86
+ */
87
+
88
+ static void encode_salt(char *, u_int8_t *, u_int16_t, unsigned int);
89
+ static void encode_base64(u_int8_t *, u_int8_t *, u_int16_t);
90
+ static void decode_base64(u_int8_t *, u_int16_t, u_int8_t *);
91
+
92
+ const static u_int8_t Base64Code[] =
93
+ "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
94
+
95
+ const static u_int8_t index_64[128] = {
96
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
97
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
98
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
99
+ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
100
+ 255, 255, 255, 255, 255, 255, 0, 1, 54, 55,
101
+ 56, 57, 58, 59, 60, 61, 62, 63, 255, 255,
102
+ 255, 255, 255, 255, 255, 2, 3, 4, 5, 6,
103
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
104
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
105
+ 255, 255, 255, 255, 255, 255, 28, 29, 30,
106
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
107
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
108
+ 51, 52, 53, 255, 255, 255, 255, 255
109
+ };
110
+ #define CHAR64(c) ( (c) > 127 ? 255 : index_64[(c)])
111
+
112
+ static void
113
+ decode_base64(u_int8_t *buffer, u_int16_t len, u_int8_t *data)
114
+ {
115
+ u_int8_t *bp = buffer;
116
+ u_int8_t *p = data;
117
+ u_int8_t c1, c2, c3, c4;
118
+ while (bp < buffer + len) {
119
+ c1 = CHAR64(*p);
120
+ c2 = CHAR64(*(p + 1));
121
+
122
+ /* Invalid data */
123
+ if (c1 == 255 || c2 == 255)
124
+ break;
125
+
126
+ *bp++ = (c1 << 2) | ((c2 & 0x30) >> 4);
127
+ if (bp >= buffer + len)
128
+ break;
129
+
130
+ c3 = CHAR64(*(p + 2));
131
+ if (c3 == 255)
132
+ break;
133
+
134
+ *bp++ = ((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2);
135
+ if (bp >= buffer + len)
136
+ break;
137
+
138
+ c4 = CHAR64(*(p + 3));
139
+ if (c4 == 255)
140
+ break;
141
+ *bp++ = ((c3 & 0x03) << 6) | c4;
142
+
143
+ p += 4;
144
+ }
145
+ }
146
+
147
+ static void
148
+ encode_salt(char *salt, u_int8_t *csalt, u_int16_t clen, unsigned int logr)
149
+ {
150
+ salt[0] = '$';
151
+ salt[1] = BCRYPT_VERSION;
152
+ salt[2] = 'a';
153
+ salt[3] = '$';
154
+
155
+ snprintf(salt + 4, 4, "%2.2u$", logr);
156
+
157
+ encode_base64((u_int8_t *) salt + 7, csalt, clen);
158
+ }
159
+ /* Generates a salt for this version of crypt.
160
+ Since versions may change. Keeping this here
161
+ seems sensible.
162
+ */
163
+
164
+ char *
165
+ bcrypt_gensalt(char *output, unsigned int log_rounds, uint8_t *rseed)
166
+ {
167
+ if (log_rounds < 4)
168
+ log_rounds = 4;
169
+ else if (log_rounds > 31)
170
+ log_rounds = 31;
171
+
172
+ encode_salt(output, rseed, BCRYPT_MAXSALT, log_rounds);
173
+ return output;
174
+ }
175
+ /* We handle $Vers$log2(NumRounds)$salt+passwd$
176
+ i.e. $2$04$iwouldntknowwhattosayetKdJ6iFtacBqJdKe6aW7ou */
177
+
178
+ char *
179
+ bcrypt(char *output, const char *key, const char *salt)
180
+ {
181
+ blf_ctx state;
182
+ u_int32_t rounds, i, k;
183
+ u_int16_t j;
184
+ u_int8_t key_len, salt_len, logr, minor;
185
+ u_int8_t ciphertext[4 * BCRYPT_BLOCKS] = {
186
+ // "OrpheanBeholderScryDoubt" without trailing null.
187
+ 'O', 'r', 'p', 'h', 'e', 'a', 'n', 'B', 'e', 'h', 'o', 'l',
188
+ 'd', 'e', 'r', 'S', 'c', 'r', 'y', 'D', 'o', 'u', 'b', 't'
189
+ };
190
+ u_int8_t csalt[BCRYPT_MAXSALT];
191
+ u_int32_t cdata[BCRYPT_BLOCKS];
192
+ int n;
193
+
194
+ /* Discard "$" identifier */
195
+ salt++;
196
+
197
+ if (*salt > BCRYPT_VERSION) {
198
+ return NULL;
199
+ }
200
+
201
+ /* Check for minor versions */
202
+ if (salt[1] != '$') {
203
+ switch (salt[1]) {
204
+ case 'a':
205
+ /* 'ab' should not yield the same as 'abab' */
206
+ minor = salt[1];
207
+ salt++;
208
+ break;
209
+ default:
210
+ return NULL;
211
+ }
212
+ } else
213
+ minor = 0;
214
+
215
+ /* Discard version + "$" identifier */
216
+ salt += 2;
217
+
218
+ if (salt[2] != '$')
219
+ /* Out of sync with passwd entry */
220
+ return NULL;
221
+
222
+ /* Computer power doesn't increase linear, 2^x should be fine */
223
+ n = atoi(salt);
224
+ if (n > 31 || n < 0)
225
+ return NULL;
226
+ logr = (u_int8_t)n;
227
+ if ((rounds = (u_int32_t) 1 << logr) < BCRYPT_MINROUNDS)
228
+ return NULL;
229
+
230
+ /* Discard num rounds + "$" identifier */
231
+ salt += 3;
232
+
233
+ if (strlen(salt) * 3 / 4 < BCRYPT_MAXSALT)
234
+ return NULL;
235
+
236
+ /* We dont want the base64 salt but the raw data */
237
+ decode_base64(csalt, BCRYPT_MAXSALT, (u_int8_t *) salt);
238
+ salt_len = BCRYPT_MAXSALT;
239
+ key_len = strlen(key) + (minor >= 'a' ? 1 : 0);
240
+
241
+ /* Setting up S-Boxes and Subkeys */
242
+ Blowfish_initstate(&state);
243
+ Blowfish_expandstate(&state, csalt, salt_len,
244
+ (u_int8_t *) key, key_len);
245
+ for (k = 0; k < rounds; k++) {
246
+ Blowfish_expand0state(&state, (u_int8_t *) key, key_len);
247
+ Blowfish_expand0state(&state, csalt, salt_len);
248
+ }
249
+
250
+ /* This can be precomputed later */
251
+ j = 0;
252
+ for (i = 0; i < BCRYPT_BLOCKS; i++)
253
+ cdata[i] = Blowfish_stream2word(ciphertext, 4 * BCRYPT_BLOCKS, &j);
254
+
255
+ /* Now do the encryption */
256
+ for (k = 0; k < 64; k++)
257
+ blf_enc(&state, cdata, BCRYPT_BLOCKS / 2);
258
+
259
+ for (i = 0; i < BCRYPT_BLOCKS; i++) {
260
+ ciphertext[4 * i + 3] = cdata[i] & 0xff;
261
+ cdata[i] = cdata[i] >> 8;
262
+ ciphertext[4 * i + 2] = cdata[i] & 0xff;
263
+ cdata[i] = cdata[i] >> 8;
264
+ ciphertext[4 * i + 1] = cdata[i] & 0xff;
265
+ cdata[i] = cdata[i] >> 8;
266
+ ciphertext[4 * i + 0] = cdata[i] & 0xff;
267
+ }
268
+
269
+
270
+ i = 0;
271
+ output[i++] = '$';
272
+ output[i++] = BCRYPT_VERSION;
273
+ if (minor)
274
+ output[i++] = minor;
275
+ output[i++] = '$';
276
+
277
+ snprintf(output + i, 4, "%2.2u$", logr);
278
+
279
+ encode_base64((u_int8_t *) output + i + 3, csalt, BCRYPT_MAXSALT);
280
+ encode_base64((u_int8_t *) output + strlen(output), ciphertext,
281
+ 4 * BCRYPT_BLOCKS - 1);
282
+ return output;
283
+ }
284
+
285
+ static void
286
+ encode_base64(u_int8_t *buffer, unsigned char *data, u_int16_t len)
287
+ {
288
+ u_int8_t *bp = buffer;
289
+ u_int8_t *p = data;
290
+ u_int8_t c1, c2;
291
+ while (p < data + len) {
292
+ c1 = *p++;
293
+ *bp++ = Base64Code[(c1 >> 2)];
294
+ c1 = (c1 & 0x03) << 4;
295
+ if (p >= data + len) {
296
+ *bp++ = Base64Code[c1];
297
+ break;
298
+ }
299
+ c2 = *p++;
300
+ c1 |= (c2 >> 4) & 0x0f;
301
+ *bp++ = Base64Code[c1];
302
+ c1 = (c2 & 0x0f) << 2;
303
+ if (p >= data + len) {
304
+ *bp++ = Base64Code[c1];
305
+ break;
306
+ }
307
+ c2 = *p++;
308
+ c1 |= (c2 >> 6) & 0x03;
309
+ *bp++ = Base64Code[c1];
310
+ *bp++ = Base64Code[c2 & 0x3f];
311
+ }
312
+ *bp = '\0';
313
+ }
314
+ #if 0
315
+ void
316
+ main()
317
+ {
318
+ char blubber[73];
319
+ char salt[100];
320
+ char *p;
321
+ salt[0] = '$';
322
+ salt[1] = BCRYPT_VERSION;
323
+ salt[2] = '$';
324
+
325
+ snprintf(salt + 3, 4, "%2.2u$", 5);
326
+
327
+ printf("24 bytes of salt: ");
328
+ fgets(salt + 6, sizeof(salt) - 6, stdin);
329
+ salt[99] = 0;
330
+ printf("72 bytes of password: ");
331
+ fpurge(stdin);
332
+ fgets(blubber, sizeof(blubber), stdin);
333
+ blubber[72] = 0;
334
+
335
+ p = crypt(blubber, salt);
336
+ printf("Passwd entry: %s\n\n", p);
337
+
338
+ p = bcrypt_gensalt(5);
339
+ printf("Generated salt: %s\n", p);
340
+ p = crypt(blubber, p);
341
+ printf("Passwd entry: %s\n", p);
342
+ }
343
+ #endif
@@ -0,0 +1,73 @@
1
+ /*
2
+ * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
3
+ * All rights reserved.
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions
7
+ * are met:
8
+ * 1. Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ * 2. Redistributions in binary form must reproduce the above copyright
11
+ * notice, this list of conditions and the following disclaimer in the
12
+ * documentation and/or other materials provided with the distribution.
13
+ * 3. All advertising materials mentioning features or use of this software
14
+ * must display the following acknowledgement:
15
+ * This product includes software developed by Niels Provos.
16
+ * 4. The name of the author may not be used to endorse or promote products
17
+ * derived from this software without specific prior written permission.
18
+ *
19
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+
31
+ /*
32
+ * Modified by <hongli@phusion.nl> on 2009-10-24:
33
+ *
34
+ * - Wrapped into C++ namespace.
35
+ * - Changed some types (e.g. u_int8_t to uint8_t as defined in stdint.h)
36
+ * for easier compilation.
37
+ * - Moved some macros to the .c file.
38
+ */
39
+
40
+ #ifndef _PASSENGER_BCRYPT_H_
41
+ #define _PASSENGER_BCRYPT_H_
42
+
43
+ #include <stdint.h>
44
+
45
+ #define BCRYPT_MAXSALT 16 /* Precomputation is just so nice */
46
+ #define BCRYPT_SALT_OUTPUT_SIZE (7 + (BCRYPT_MAXSALT * 4 + 2) / 3 + 1)
47
+ #define BCRYPT_OUTPUT_SIZE 128
48
+
49
+ /*
50
+ * Given a logarithmic cost parameter, generates a salt for use with bcrypt().
51
+ *
52
+ * output: the computed salt will be stored here. This buffer must be
53
+ * at least BCRYPT_SALT_OUTPUT_SIZE bytes. The result will be
54
+ * null-terminated.
55
+ * log_rounds: the logarithmic cost.
56
+ * rseed: a seed of BCRYPT_MAXSALT bytes. Should be obtained from a
57
+ * cryptographically secure random source.
58
+ * Returns: output
59
+ */
60
+ char *bcrypt_gensalt(char *output, unsigned int log_rounds, uint8_t *rseed);
61
+
62
+ /*
63
+ * Given a secret and a salt, generates a salted hash (which you can then store safely).
64
+ *
65
+ * output: the computed salted hash will be stored here. This buffer must
66
+ * be at least BCRYPT_OUTPUT_SIZE bytes, and will become null-terminated.
67
+ * key: A null-terminated secret.
68
+ * salt: The salt, as generated by bcrypt_gensalt().
69
+ * Returns: output on success, NULL on error.
70
+ */
71
+ char *bcrypt(char *output, const char *key, const char *salt);
72
+
73
+ #endif /* _PASSENGER_BCRYPT_H_ */
@@ -0,0 +1,685 @@
1
+ /* $OpenBSD: blowfish.c,v 1.18 2004/11/02 17:23:26 hshoexer Exp $ */
2
+ /*
3
+ * Blowfish block cipher for OpenBSD
4
+ * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
5
+ * All rights reserved.
6
+ *
7
+ * Implementation advice by David Mazieres <dm@lcs.mit.edu>.
8
+ *
9
+ * Redistribution and use in source and binary forms, with or without
10
+ * modification, are permitted provided that the following conditions
11
+ * are met:
12
+ * 1. Redistributions of source code must retain the above copyright
13
+ * notice, this list of conditions and the following disclaimer.
14
+ * 2. Redistributions in binary form must reproduce the above copyright
15
+ * notice, this list of conditions and the following disclaimer in the
16
+ * documentation and/or other materials provided with the distribution.
17
+ * 3. All advertising materials mentioning features or use of this software
18
+ * must display the following acknowledgement:
19
+ * This product includes software developed by Niels Provos.
20
+ * 4. The name of the author may not be used to endorse or promote products
21
+ * derived from this software without specific prior written permission.
22
+ *
23
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
24
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
25
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
28
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
32
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
+ */
34
+
35
+ /*
36
+ * This code is derived from section 14.3 and the given source
37
+ * in section V of Applied Cryptography, second edition.
38
+ * Blowfish is an unpatented fast block cipher designed by
39
+ * Bruce Schneier.
40
+ */
41
+
42
+ #if 0
43
+ #include <stdio.h> /* used for debugging */
44
+ #include <string.h>
45
+ #endif
46
+
47
+ #include <sys/types.h>
48
+ #include "Blowfish.h"
49
+
50
+ #undef inline
51
+ #ifdef __GNUC__
52
+ #define inline __inline
53
+ #else /* !__GNUC__ */
54
+ #define inline
55
+ #endif /* !__GNUC__ */
56
+
57
+ /* Function for Feistel Networks */
58
+
59
+ #define F(s, x) ((((s)[ (((x)>>24)&0xFF)] \
60
+ + (s)[0x100 + (((x)>>16)&0xFF)]) \
61
+ ^ (s)[0x200 + (((x)>> 8)&0xFF)]) \
62
+ + (s)[0x300 + ( (x) &0xFF)])
63
+
64
+ #define BLFRND(s,p,i,j,n) (i ^= F(s,j) ^ (p)[n])
65
+
66
+ void
67
+ Blowfish_encipher(blf_ctx *c, u_int32_t *xl, u_int32_t *xr)
68
+ {
69
+ u_int32_t Xl;
70
+ u_int32_t Xr;
71
+ u_int32_t *s = c->S[0];
72
+ u_int32_t *p = c->P;
73
+
74
+ Xl = *xl;
75
+ Xr = *xr;
76
+
77
+ Xl ^= p[0];
78
+ BLFRND(s, p, Xr, Xl, 1); BLFRND(s, p, Xl, Xr, 2);
79
+ BLFRND(s, p, Xr, Xl, 3); BLFRND(s, p, Xl, Xr, 4);
80
+ BLFRND(s, p, Xr, Xl, 5); BLFRND(s, p, Xl, Xr, 6);
81
+ BLFRND(s, p, Xr, Xl, 7); BLFRND(s, p, Xl, Xr, 8);
82
+ BLFRND(s, p, Xr, Xl, 9); BLFRND(s, p, Xl, Xr, 10);
83
+ BLFRND(s, p, Xr, Xl, 11); BLFRND(s, p, Xl, Xr, 12);
84
+ BLFRND(s, p, Xr, Xl, 13); BLFRND(s, p, Xl, Xr, 14);
85
+ BLFRND(s, p, Xr, Xl, 15); BLFRND(s, p, Xl, Xr, 16);
86
+
87
+ *xl = Xr ^ p[17];
88
+ *xr = Xl;
89
+ }
90
+
91
+ void
92
+ Blowfish_decipher(blf_ctx *c, u_int32_t *xl, u_int32_t *xr)
93
+ {
94
+ u_int32_t Xl;
95
+ u_int32_t Xr;
96
+ u_int32_t *s = c->S[0];
97
+ u_int32_t *p = c->P;
98
+
99
+ Xl = *xl;
100
+ Xr = *xr;
101
+
102
+ Xl ^= p[17];
103
+ BLFRND(s, p, Xr, Xl, 16); BLFRND(s, p, Xl, Xr, 15);
104
+ BLFRND(s, p, Xr, Xl, 14); BLFRND(s, p, Xl, Xr, 13);
105
+ BLFRND(s, p, Xr, Xl, 12); BLFRND(s, p, Xl, Xr, 11);
106
+ BLFRND(s, p, Xr, Xl, 10); BLFRND(s, p, Xl, Xr, 9);
107
+ BLFRND(s, p, Xr, Xl, 8); BLFRND(s, p, Xl, Xr, 7);
108
+ BLFRND(s, p, Xr, Xl, 6); BLFRND(s, p, Xl, Xr, 5);
109
+ BLFRND(s, p, Xr, Xl, 4); BLFRND(s, p, Xl, Xr, 3);
110
+ BLFRND(s, p, Xr, Xl, 2); BLFRND(s, p, Xl, Xr, 1);
111
+
112
+ *xl = Xr ^ p[0];
113
+ *xr = Xl;
114
+ }
115
+
116
+ void
117
+ Blowfish_initstate(blf_ctx *c)
118
+ {
119
+ /* P-box and S-box tables initialized with digits of Pi */
120
+
121
+ static const blf_ctx initstate =
122
+ { {
123
+ {
124
+ 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
125
+ 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
126
+ 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
127
+ 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
128
+ 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
129
+ 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
130
+ 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
131
+ 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
132
+ 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
133
+ 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
134
+ 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
135
+ 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
136
+ 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
137
+ 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
138
+ 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
139
+ 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
140
+ 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
141
+ 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
142
+ 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
143
+ 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
144
+ 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
145
+ 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
146
+ 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
147
+ 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
148
+ 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
149
+ 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
150
+ 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
151
+ 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
152
+ 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
153
+ 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
154
+ 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
155
+ 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
156
+ 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
157
+ 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
158
+ 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
159
+ 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
160
+ 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
161
+ 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
162
+ 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
163
+ 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
164
+ 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
165
+ 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
166
+ 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
167
+ 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
168
+ 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
169
+ 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
170
+ 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
171
+ 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
172
+ 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
173
+ 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
174
+ 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
175
+ 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
176
+ 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
177
+ 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
178
+ 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
179
+ 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
180
+ 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
181
+ 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
182
+ 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
183
+ 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
184
+ 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
185
+ 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
186
+ 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
187
+ 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a},
188
+ {
189
+ 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
190
+ 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
191
+ 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
192
+ 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
193
+ 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
194
+ 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
195
+ 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
196
+ 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
197
+ 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
198
+ 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
199
+ 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
200
+ 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
201
+ 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
202
+ 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
203
+ 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
204
+ 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
205
+ 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
206
+ 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
207
+ 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
208
+ 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
209
+ 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
210
+ 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
211
+ 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
212
+ 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
213
+ 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
214
+ 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
215
+ 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
216
+ 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
217
+ 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
218
+ 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
219
+ 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
220
+ 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
221
+ 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
222
+ 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
223
+ 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
224
+ 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
225
+ 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
226
+ 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
227
+ 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
228
+ 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
229
+ 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
230
+ 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
231
+ 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
232
+ 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
233
+ 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
234
+ 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
235
+ 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
236
+ 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
237
+ 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
238
+ 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
239
+ 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
240
+ 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
241
+ 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
242
+ 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
243
+ 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
244
+ 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
245
+ 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
246
+ 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
247
+ 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
248
+ 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
249
+ 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
250
+ 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
251
+ 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
252
+ 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7},
253
+ {
254
+ 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
255
+ 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
256
+ 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
257
+ 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
258
+ 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
259
+ 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
260
+ 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
261
+ 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
262
+ 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
263
+ 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
264
+ 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
265
+ 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
266
+ 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
267
+ 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
268
+ 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
269
+ 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
270
+ 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
271
+ 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
272
+ 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
273
+ 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
274
+ 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
275
+ 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
276
+ 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
277
+ 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
278
+ 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
279
+ 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
280
+ 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
281
+ 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
282
+ 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
283
+ 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
284
+ 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
285
+ 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
286
+ 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
287
+ 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
288
+ 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
289
+ 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
290
+ 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
291
+ 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
292
+ 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
293
+ 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
294
+ 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
295
+ 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
296
+ 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
297
+ 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
298
+ 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
299
+ 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
300
+ 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
301
+ 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
302
+ 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
303
+ 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
304
+ 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
305
+ 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
306
+ 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
307
+ 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
308
+ 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
309
+ 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
310
+ 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
311
+ 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
312
+ 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
313
+ 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
314
+ 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
315
+ 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
316
+ 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
317
+ 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0},
318
+ {
319
+ 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
320
+ 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
321
+ 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
322
+ 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
323
+ 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
324
+ 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
325
+ 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
326
+ 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
327
+ 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
328
+ 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
329
+ 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
330
+ 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
331
+ 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
332
+ 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
333
+ 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
334
+ 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
335
+ 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
336
+ 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
337
+ 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
338
+ 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
339
+ 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
340
+ 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
341
+ 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
342
+ 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
343
+ 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
344
+ 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
345
+ 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
346
+ 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
347
+ 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
348
+ 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
349
+ 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
350
+ 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
351
+ 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
352
+ 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
353
+ 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
354
+ 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
355
+ 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
356
+ 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
357
+ 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
358
+ 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
359
+ 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
360
+ 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
361
+ 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
362
+ 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
363
+ 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
364
+ 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
365
+ 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
366
+ 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
367
+ 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
368
+ 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
369
+ 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
370
+ 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
371
+ 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
372
+ 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
373
+ 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
374
+ 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
375
+ 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
376
+ 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
377
+ 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
378
+ 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
379
+ 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
380
+ 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
381
+ 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
382
+ 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6}
383
+ },
384
+ {
385
+ 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
386
+ 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
387
+ 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
388
+ 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
389
+ 0x9216d5d9, 0x8979fb1b
390
+ } };
391
+
392
+ *c = initstate;
393
+ }
394
+
395
+ u_int32_t
396
+ Blowfish_stream2word(const u_int8_t *data, u_int16_t databytes,
397
+ u_int16_t *current)
398
+ {
399
+ u_int8_t i;
400
+ u_int16_t j;
401
+ u_int32_t temp;
402
+
403
+ temp = 0x00000000;
404
+ j = *current;
405
+
406
+ for (i = 0; i < 4; i++, j++) {
407
+ if (j >= databytes)
408
+ j = 0;
409
+ temp = (temp << 8) | data[j];
410
+ }
411
+
412
+ *current = j;
413
+ return temp;
414
+ }
415
+
416
+ void
417
+ Blowfish_expand0state(blf_ctx *c, const u_int8_t *key, u_int16_t keybytes)
418
+ {
419
+ u_int16_t i;
420
+ u_int16_t j;
421
+ u_int16_t k;
422
+ u_int32_t temp;
423
+ u_int32_t datal;
424
+ u_int32_t datar;
425
+
426
+ j = 0;
427
+ for (i = 0; i < BLF_N + 2; i++) {
428
+ /* Extract 4 int8 to 1 int32 from keystream */
429
+ temp = Blowfish_stream2word(key, keybytes, &j);
430
+ c->P[i] = c->P[i] ^ temp;
431
+ }
432
+
433
+ j = 0;
434
+ datal = 0x00000000;
435
+ datar = 0x00000000;
436
+ for (i = 0; i < BLF_N + 2; i += 2) {
437
+ Blowfish_encipher(c, &datal, &datar);
438
+
439
+ c->P[i] = datal;
440
+ c->P[i + 1] = datar;
441
+ }
442
+
443
+ for (i = 0; i < 4; i++) {
444
+ for (k = 0; k < 256; k += 2) {
445
+ Blowfish_encipher(c, &datal, &datar);
446
+
447
+ c->S[i][k] = datal;
448
+ c->S[i][k + 1] = datar;
449
+ }
450
+ }
451
+ }
452
+
453
+
454
+ void
455
+ Blowfish_expandstate(blf_ctx *c, const u_int8_t *data, u_int16_t databytes,
456
+ const u_int8_t *key, u_int16_t keybytes)
457
+ {
458
+ u_int16_t i;
459
+ u_int16_t j;
460
+ u_int16_t k;
461
+ u_int32_t temp;
462
+ u_int32_t datal;
463
+ u_int32_t datar;
464
+
465
+ j = 0;
466
+ for (i = 0; i < BLF_N + 2; i++) {
467
+ /* Extract 4 int8 to 1 int32 from keystream */
468
+ temp = Blowfish_stream2word(key, keybytes, &j);
469
+ c->P[i] = c->P[i] ^ temp;
470
+ }
471
+
472
+ j = 0;
473
+ datal = 0x00000000;
474
+ datar = 0x00000000;
475
+ for (i = 0; i < BLF_N + 2; i += 2) {
476
+ datal ^= Blowfish_stream2word(data, databytes, &j);
477
+ datar ^= Blowfish_stream2word(data, databytes, &j);
478
+ Blowfish_encipher(c, &datal, &datar);
479
+
480
+ c->P[i] = datal;
481
+ c->P[i + 1] = datar;
482
+ }
483
+
484
+ for (i = 0; i < 4; i++) {
485
+ for (k = 0; k < 256; k += 2) {
486
+ datal ^= Blowfish_stream2word(data, databytes, &j);
487
+ datar ^= Blowfish_stream2word(data, databytes, &j);
488
+ Blowfish_encipher(c, &datal, &datar);
489
+
490
+ c->S[i][k] = datal;
491
+ c->S[i][k + 1] = datar;
492
+ }
493
+ }
494
+
495
+ }
496
+
497
+ void
498
+ blf_key(blf_ctx *c, const u_int8_t *k, u_int16_t len)
499
+ {
500
+ /* Initialize S-boxes and subkeys with Pi */
501
+ Blowfish_initstate(c);
502
+
503
+ /* Transform S-boxes and subkeys with key */
504
+ Blowfish_expand0state(c, k, len);
505
+ }
506
+
507
+ void
508
+ blf_enc(blf_ctx *c, u_int32_t *data, u_int16_t blocks)
509
+ {
510
+ u_int32_t *d;
511
+ u_int16_t i;
512
+
513
+ d = data;
514
+ for (i = 0; i < blocks; i++) {
515
+ Blowfish_encipher(c, d, d + 1);
516
+ d += 2;
517
+ }
518
+ }
519
+
520
+ void
521
+ blf_dec(blf_ctx *c, u_int32_t *data, u_int16_t blocks)
522
+ {
523
+ u_int32_t *d;
524
+ u_int16_t i;
525
+
526
+ d = data;
527
+ for (i = 0; i < blocks; i++) {
528
+ Blowfish_decipher(c, d, d + 1);
529
+ d += 2;
530
+ }
531
+ }
532
+
533
+ void
534
+ blf_ecb_encrypt(blf_ctx *c, u_int8_t *data, u_int32_t len)
535
+ {
536
+ u_int32_t l, r;
537
+ u_int32_t i;
538
+
539
+ for (i = 0; i < len; i += 8) {
540
+ l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
541
+ r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
542
+ Blowfish_encipher(c, &l, &r);
543
+ data[0] = l >> 24 & 0xff;
544
+ data[1] = l >> 16 & 0xff;
545
+ data[2] = l >> 8 & 0xff;
546
+ data[3] = l & 0xff;
547
+ data[4] = r >> 24 & 0xff;
548
+ data[5] = r >> 16 & 0xff;
549
+ data[6] = r >> 8 & 0xff;
550
+ data[7] = r & 0xff;
551
+ data += 8;
552
+ }
553
+ }
554
+
555
+ void
556
+ blf_ecb_decrypt(blf_ctx *c, u_int8_t *data, u_int32_t len)
557
+ {
558
+ u_int32_t l, r;
559
+ u_int32_t i;
560
+
561
+ for (i = 0; i < len; i += 8) {
562
+ l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
563
+ r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
564
+ Blowfish_decipher(c, &l, &r);
565
+ data[0] = l >> 24 & 0xff;
566
+ data[1] = l >> 16 & 0xff;
567
+ data[2] = l >> 8 & 0xff;
568
+ data[3] = l & 0xff;
569
+ data[4] = r >> 24 & 0xff;
570
+ data[5] = r >> 16 & 0xff;
571
+ data[6] = r >> 8 & 0xff;
572
+ data[7] = r & 0xff;
573
+ data += 8;
574
+ }
575
+ }
576
+
577
+ void
578
+ blf_cbc_encrypt(blf_ctx *c, u_int8_t *iv, u_int8_t *data, u_int32_t len)
579
+ {
580
+ u_int32_t l, r;
581
+ u_int32_t i, j;
582
+
583
+ for (i = 0; i < len; i += 8) {
584
+ for (j = 0; j < 8; j++)
585
+ data[j] ^= iv[j];
586
+ l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
587
+ r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
588
+ Blowfish_encipher(c, &l, &r);
589
+ data[0] = l >> 24 & 0xff;
590
+ data[1] = l >> 16 & 0xff;
591
+ data[2] = l >> 8 & 0xff;
592
+ data[3] = l & 0xff;
593
+ data[4] = r >> 24 & 0xff;
594
+ data[5] = r >> 16 & 0xff;
595
+ data[6] = r >> 8 & 0xff;
596
+ data[7] = r & 0xff;
597
+ iv = data;
598
+ data += 8;
599
+ }
600
+ }
601
+
602
+ void
603
+ blf_cbc_decrypt(blf_ctx *c, u_int8_t *iva, u_int8_t *data, u_int32_t len)
604
+ {
605
+ u_int32_t l, r;
606
+ u_int8_t *iv;
607
+ u_int32_t i, j;
608
+
609
+ iv = data + len - 16;
610
+ data = data + len - 8;
611
+ for (i = len - 8; i >= 8; i -= 8) {
612
+ l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
613
+ r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
614
+ Blowfish_decipher(c, &l, &r);
615
+ data[0] = l >> 24 & 0xff;
616
+ data[1] = l >> 16 & 0xff;
617
+ data[2] = l >> 8 & 0xff;
618
+ data[3] = l & 0xff;
619
+ data[4] = r >> 24 & 0xff;
620
+ data[5] = r >> 16 & 0xff;
621
+ data[6] = r >> 8 & 0xff;
622
+ data[7] = r & 0xff;
623
+ for (j = 0; j < 8; j++)
624
+ data[j] ^= iv[j];
625
+ iv -= 8;
626
+ data -= 8;
627
+ }
628
+ l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
629
+ r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
630
+ Blowfish_decipher(c, &l, &r);
631
+ data[0] = l >> 24 & 0xff;
632
+ data[1] = l >> 16 & 0xff;
633
+ data[2] = l >> 8 & 0xff;
634
+ data[3] = l & 0xff;
635
+ data[4] = r >> 24 & 0xff;
636
+ data[5] = r >> 16 & 0xff;
637
+ data[6] = r >> 8 & 0xff;
638
+ data[7] = r & 0xff;
639
+ for (j = 0; j < 8; j++)
640
+ data[j] ^= iva[j];
641
+ }
642
+
643
+ #if 0
644
+ void
645
+ report(u_int32_t data[], u_int16_t len)
646
+ {
647
+ u_int16_t i;
648
+ for (i = 0; i < len; i += 2)
649
+ printf("Block %0hd: %08lx %08lx.\n",
650
+ i / 2, data[i], data[i + 1]);
651
+ }
652
+ void
653
+ main(void)
654
+ {
655
+
656
+ blf_ctx c;
657
+ char key[] = "AAAAA";
658
+ char key2[] = "abcdefghijklmnopqrstuvwxyz";
659
+
660
+ u_int32_t data[10];
661
+ u_int32_t data2[] =
662
+ {0x424c4f57l, 0x46495348l};
663
+
664
+ u_int16_t i;
665
+
666
+ /* First test */
667
+ for (i = 0; i < 10; i++)
668
+ data[i] = i;
669
+
670
+ blf_key(&c, (u_int8_t *) key, 5);
671
+ blf_enc(&c, data, 5);
672
+ blf_dec(&c, data, 1);
673
+ blf_dec(&c, data + 2, 4);
674
+ printf("Should read as 0 - 9.\n");
675
+ report(data, 10);
676
+
677
+ /* Second test */
678
+ blf_key(&c, (u_int8_t *) key2, strlen(key2));
679
+ blf_enc(&c, data2, 1);
680
+ printf("\nShould read as: 0x324ed0fe 0xf413a203.\n");
681
+ report(data2, 2);
682
+ blf_dec(&c, data2, 1);
683
+ report(data2, 2);
684
+ }
685
+ #endif