passenger 2.2.11 → 2.2.12

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 (287) hide show
  1. data/NEWS +29 -0
  2. data/bin/passenger-install-nginx-module +1 -1
  3. data/doc/Users guide Apache.html +38 -7
  4. data/doc/Users guide Nginx.html +36 -5
  5. data/doc/cxxapi/AbstractSpawnManager_8h-source.html +1 -1
  6. data/doc/cxxapi/Account_8h-source.html +1 -1
  7. data/doc/cxxapi/AccountsDatabase_8h-source.html +1 -1
  8. data/doc/cxxapi/AgentsStarter_8h-source.html +1 -1
  9. data/doc/cxxapi/BCrypt_8h-source.html +1 -1
  10. data/doc/cxxapi/Blowfish_8h-source.html +1 -1
  11. data/doc/cxxapi/Bucket_8h-source.html +5 -4
  12. data/doc/cxxapi/Constants_8h-source.html +2 -2
  13. data/doc/cxxapi/ContentHandler_8h-source.html +1 -1
  14. data/doc/cxxapi/DirectoryMapper_8h-source.html +10 -9
  15. data/doc/cxxapi/EventedServer_8h-source.html +415 -0
  16. data/doc/cxxapi/Exceptions_8h-source.html +1 -1
  17. data/doc/cxxapi/FileDescriptor_8h-source.html +1 -1
  18. data/doc/cxxapi/Hooks_8h-source.html +3 -2
  19. data/doc/cxxapi/HttpStatusExtractor_8h-source.html +324 -323
  20. data/doc/cxxapi/Logging_8h-source.html +643 -546
  21. data/doc/cxxapi/MessageChannel_8h-source.html +429 -404
  22. data/doc/cxxapi/MessageClient_8h-source.html +1 -1
  23. data/doc/cxxapi/MessageReadersWriters_8h-source.html +451 -0
  24. data/doc/cxxapi/MessageServer_8h-source.html +1 -1
  25. data/doc/cxxapi/PoolOptions_8h-source.html +287 -279
  26. data/doc/cxxapi/Process_8h-source.html +178 -167
  27. data/doc/cxxapi/RandomGenerator_8h-source.html +45 -18
  28. data/doc/cxxapi/ResourceLocator_8h-source.html +3 -3
  29. data/doc/cxxapi/ScgiRequestParser_8h-source.html +344 -343
  30. data/doc/cxxapi/ServerInstanceDir_8h-source.html +1 -1
  31. data/doc/cxxapi/Session_8h-source.html +387 -374
  32. data/doc/cxxapi/SpawnManager_8h-source.html +547 -538
  33. data/doc/cxxapi/StaticContentHandler_8h-source.html +1 -1
  34. data/doc/cxxapi/StaticString_8h-source.html +1 -1
  35. data/doc/cxxapi/StringListCreator_8h-source.html +1 -1
  36. data/doc/cxxapi/Utils_8h-source.html +545 -520
  37. data/doc/cxxapi/annotated.html +11 -8
  38. data/doc/cxxapi/apache2_2Configuration_8h-source.html +1 -1
  39. data/doc/cxxapi/classAgentWatcher-members.html +1 -1
  40. data/doc/cxxapi/classAgentWatcher.html +1 -1
  41. data/doc/cxxapi/classClient-members.html +1 -1
  42. data/doc/cxxapi/classClient.html +1 -1
  43. data/doc/cxxapi/classHooks-members.html +16 -13
  44. data/doc/cxxapi/classHooks.html +69 -73
  45. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +1 -1
  46. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +1 -1
  47. data/doc/cxxapi/classPassenger_1_1ArgumentException-members.html +1 -1
  48. data/doc/cxxapi/classPassenger_1_1ArgumentException.html +1 -1
  49. data/doc/cxxapi/classPassenger_1_1ArrayReader-members.html +33 -0
  50. data/doc/cxxapi/classPassenger_1_1ArrayReader.html +47 -0
  51. data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +1 -1
  52. data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +1 -1
  53. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +1 -1
  54. data/doc/cxxapi/classPassenger_1_1BusyException.html +1 -1
  55. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +1 -1
  56. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +1 -1
  57. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +18 -15
  58. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +89 -99
  59. data/doc/cxxapi/classPassenger_1_1EOFException-members.html +1 -1
  60. data/doc/cxxapi/classPassenger_1_1EOFException.html +1 -1
  61. data/doc/cxxapi/classPassenger_1_1EventFd-members.html +1 -1
  62. data/doc/cxxapi/classPassenger_1_1EventFd.html +1 -1
  63. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +1 -1
  64. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +1 -1
  65. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +1 -1
  66. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +1 -1
  67. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +1 -1
  68. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +1 -1
  69. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor-members.html +1 -1
  70. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +2 -2
  71. data/doc/cxxapi/classPassenger_1_1IOException-members.html +1 -1
  72. data/doc/cxxapi/classPassenger_1_1IOException.html +1 -1
  73. data/doc/cxxapi/classPassenger_1_1MemZeroGuard-members.html +1 -1
  74. data/doc/cxxapi/classPassenger_1_1MemZeroGuard.html +1 -1
  75. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +1 -1
  76. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +1 -1
  77. data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +1 -1
  78. data/doc/cxxapi/classPassenger_1_1MessageServer.html +1 -1
  79. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +1 -1
  80. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +1 -1
  81. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +1 -1
  82. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +1 -1
  83. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +1 -1
  84. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +1 -1
  85. data/doc/cxxapi/classPassenger_1_1Process-members.html +4 -3
  86. data/doc/cxxapi/classPassenger_1_1Process.html +40 -9
  87. data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +2 -1
  88. data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +29 -2
  89. data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +1 -1
  90. data/doc/cxxapi/classPassenger_1_1RuntimeException.html +1 -1
  91. data/doc/cxxapi/classPassenger_1_1ScalarReader-members.html +33 -0
  92. data/doc/cxxapi/classPassenger_1_1ScalarReader.html +47 -0
  93. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +1 -1
  94. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +1 -1
  95. data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +1 -1
  96. data/doc/cxxapi/classPassenger_1_1SecurityException.html +1 -1
  97. data/doc/cxxapi/classPassenger_1_1Session-members.html +1 -1
  98. data/doc/cxxapi/classPassenger_1_1Session.html +2 -2
  99. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -1
  100. data/doc/cxxapi/classPassenger_1_1SpawnException.html +1 -1
  101. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +2 -2
  102. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +6 -18
  103. data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +1 -1
  104. data/doc/cxxapi/classPassenger_1_1StandardSession.html +1 -1
  105. data/doc/cxxapi/classPassenger_1_1StaticString-members.html +1 -1
  106. data/doc/cxxapi/classPassenger_1_1StaticString.html +1 -1
  107. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +1 -1
  108. data/doc/cxxapi/classPassenger_1_1SystemException.html +1 -1
  109. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +1 -1
  110. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +1 -1
  111. data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +1 -1
  112. data/doc/cxxapi/classPassenger_1_1TimeoutException.html +1 -1
  113. data/doc/cxxapi/classPassenger_1_1Uint16Reader-members.html +33 -0
  114. data/doc/cxxapi/classPassenger_1_1Uint16Reader.html +47 -0
  115. data/doc/cxxapi/classPassenger_1_1Uint32Reader-members.html +33 -0
  116. data/doc/cxxapi/classPassenger_1_1Uint32Reader.html +47 -0
  117. data/doc/cxxapi/classServer-members.html +1 -1
  118. data/doc/cxxapi/classServer.html +1 -1
  119. data/doc/cxxapi/classServerInstanceDirToucher-members.html +1 -1
  120. data/doc/cxxapi/classServerInstanceDirToucher.html +1 -1
  121. data/doc/cxxapi/classes.html +13 -10
  122. data/doc/cxxapi/definitions_8h-source.html +2 -1
  123. data/doc/cxxapi/doxygen.css +91 -0
  124. data/doc/cxxapi/files.html +16 -13
  125. data/doc/cxxapi/functions.html +32 -21
  126. data/doc/cxxapi/functions_enum.html +1 -1
  127. data/doc/cxxapi/functions_eval.html +1 -1
  128. data/doc/cxxapi/functions_func.html +32 -21
  129. data/doc/cxxapi/functions_vars.html +3 -1
  130. data/doc/cxxapi/graph_legend.html +20 -15
  131. data/doc/cxxapi/graph_legend.png +0 -0
  132. data/doc/cxxapi/group__Configuration.html +51 -64
  133. data/doc/cxxapi/group__Configuration.png +0 -0
  134. data/doc/cxxapi/group__Core.html +24 -26
  135. data/doc/cxxapi/group__Core.png +0 -0
  136. data/doc/cxxapi/group__Exceptions.html +1 -1
  137. data/doc/cxxapi/group__Hooks.html +17 -15
  138. data/doc/cxxapi/group__Hooks.png +0 -0
  139. data/doc/cxxapi/group__Support.html +11 -9
  140. data/doc/cxxapi/hierarchy.html +6 -1
  141. data/doc/cxxapi/index.html +10 -5
  142. data/doc/cxxapi/inherit__graph__10.map +1 -1
  143. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  144. data/doc/cxxapi/inherit__graph__10.png +0 -0
  145. data/doc/cxxapi/inherit__graph__11.map +1 -1
  146. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  147. data/doc/cxxapi/inherit__graph__11.png +0 -0
  148. data/doc/cxxapi/inherit__graph__12.map +1 -1
  149. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  150. data/doc/cxxapi/inherit__graph__12.png +0 -0
  151. data/doc/cxxapi/inherit__graph__13.map +1 -1
  152. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  153. data/doc/cxxapi/inherit__graph__13.png +0 -0
  154. data/doc/cxxapi/inherit__graph__14.map +1 -3
  155. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  156. data/doc/cxxapi/inherit__graph__14.png +0 -0
  157. data/doc/cxxapi/inherit__graph__15.map +1 -1
  158. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  159. data/doc/cxxapi/inherit__graph__15.png +0 -0
  160. data/doc/cxxapi/inherit__graph__16.map +3 -1
  161. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  162. data/doc/cxxapi/inherit__graph__16.png +0 -0
  163. data/doc/cxxapi/inherit__graph__17.map +1 -1
  164. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  165. data/doc/cxxapi/inherit__graph__17.png +0 -0
  166. data/doc/cxxapi/inherit__graph__18.map +1 -2
  167. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  168. data/doc/cxxapi/inherit__graph__18.png +0 -0
  169. data/doc/cxxapi/inherit__graph__19.map +1 -1
  170. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  171. data/doc/cxxapi/inherit__graph__19.png +0 -0
  172. data/doc/cxxapi/inherit__graph__20.map +2 -1
  173. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  174. data/doc/cxxapi/inherit__graph__20.png +0 -0
  175. data/doc/cxxapi/inherit__graph__21.map +1 -1
  176. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  177. data/doc/cxxapi/inherit__graph__21.png +0 -0
  178. data/doc/cxxapi/inherit__graph__22.map +1 -1
  179. data/doc/cxxapi/inherit__graph__22.md5 +1 -1
  180. data/doc/cxxapi/inherit__graph__22.png +0 -0
  181. data/doc/cxxapi/inherit__graph__23.map +1 -1
  182. data/doc/cxxapi/inherit__graph__23.md5 +1 -1
  183. data/doc/cxxapi/inherit__graph__23.png +0 -0
  184. data/doc/cxxapi/inherit__graph__24.map +1 -1
  185. data/doc/cxxapi/inherit__graph__24.md5 +1 -1
  186. data/doc/cxxapi/inherit__graph__24.png +0 -0
  187. data/doc/cxxapi/inherit__graph__25.map +1 -1
  188. data/doc/cxxapi/inherit__graph__25.md5 +1 -1
  189. data/doc/cxxapi/inherit__graph__25.png +0 -0
  190. data/doc/cxxapi/inherit__graph__26.map +1 -1
  191. data/doc/cxxapi/inherit__graph__26.md5 +1 -1
  192. data/doc/cxxapi/inherit__graph__26.png +0 -0
  193. data/doc/cxxapi/inherit__graph__27.map +1 -2
  194. data/doc/cxxapi/inherit__graph__27.md5 +1 -1
  195. data/doc/cxxapi/inherit__graph__27.png +0 -0
  196. data/doc/cxxapi/inherit__graph__28.map +1 -1
  197. data/doc/cxxapi/inherit__graph__28.md5 +1 -1
  198. data/doc/cxxapi/inherit__graph__28.png +0 -0
  199. data/doc/cxxapi/inherit__graph__29.map +1 -1
  200. data/doc/cxxapi/inherit__graph__29.md5 +1 -1
  201. data/doc/cxxapi/inherit__graph__29.png +0 -0
  202. data/doc/cxxapi/inherit__graph__30.map +2 -1
  203. data/doc/cxxapi/inherit__graph__30.md5 +1 -1
  204. data/doc/cxxapi/inherit__graph__30.png +0 -0
  205. data/doc/cxxapi/inherit__graph__31.map +1 -3
  206. data/doc/cxxapi/inherit__graph__31.md5 +1 -1
  207. data/doc/cxxapi/inherit__graph__31.png +0 -0
  208. data/doc/cxxapi/inherit__graph__32.map +1 -1
  209. data/doc/cxxapi/inherit__graph__32.md5 +1 -1
  210. data/doc/cxxapi/inherit__graph__32.png +0 -0
  211. data/doc/cxxapi/inherit__graph__33.map +1 -1
  212. data/doc/cxxapi/inherit__graph__33.md5 +1 -1
  213. data/doc/cxxapi/inherit__graph__33.png +0 -0
  214. data/doc/cxxapi/inherit__graph__34.map +3 -1
  215. data/doc/cxxapi/inherit__graph__34.md5 +1 -1
  216. data/doc/cxxapi/inherit__graph__34.png +0 -0
  217. data/doc/cxxapi/inherit__graph__35.map +1 -1
  218. data/doc/cxxapi/inherit__graph__35.md5 +1 -1
  219. data/doc/cxxapi/inherit__graph__35.png +0 -0
  220. data/doc/cxxapi/inherit__graph__36.map +1 -1
  221. data/doc/cxxapi/inherit__graph__36.md5 +1 -1
  222. data/doc/cxxapi/inherit__graph__36.png +0 -0
  223. data/doc/cxxapi/inherit__graph__37.map +1 -0
  224. data/doc/cxxapi/inherit__graph__37.md5 +1 -0
  225. data/doc/cxxapi/inherit__graph__37.png +0 -0
  226. data/doc/cxxapi/inherit__graph__38.map +1 -0
  227. data/doc/cxxapi/inherit__graph__38.md5 +1 -0
  228. data/doc/cxxapi/inherit__graph__38.png +0 -0
  229. data/doc/cxxapi/inherit__graph__39.map +1 -0
  230. data/doc/cxxapi/inherit__graph__39.md5 +1 -0
  231. data/doc/cxxapi/inherit__graph__39.png +0 -0
  232. data/doc/cxxapi/inherit__graph__5.map +1 -1
  233. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  234. data/doc/cxxapi/inherit__graph__5.png +0 -0
  235. data/doc/cxxapi/inherit__graph__6.map +1 -1
  236. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  237. data/doc/cxxapi/inherit__graph__6.png +0 -0
  238. data/doc/cxxapi/inherit__graph__7.map +1 -1
  239. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  240. data/doc/cxxapi/inherit__graph__7.png +0 -0
  241. data/doc/cxxapi/inherit__graph__8.map +1 -1
  242. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  243. data/doc/cxxapi/inherit__graph__8.png +0 -0
  244. data/doc/cxxapi/inherit__graph__9.map +1 -1
  245. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  246. data/doc/cxxapi/inherit__graph__9.png +0 -0
  247. data/doc/cxxapi/inherits.html +46 -31
  248. data/doc/cxxapi/main.html +12 -11
  249. data/doc/cxxapi/modules.html +16 -13
  250. data/doc/cxxapi/namespacePassenger.html +82 -5
  251. data/doc/cxxapi/namespacemembers.html +5 -3
  252. data/doc/cxxapi/namespacemembers_enum.html +1 -1
  253. data/doc/cxxapi/namespacemembers_eval.html +1 -1
  254. data/doc/cxxapi/namespacemembers_func.html +5 -3
  255. data/doc/cxxapi/namespacemembers_type.html +1 -1
  256. data/doc/cxxapi/namespaces.html +2 -2
  257. data/doc/cxxapi/nginx_2Configuration_8h-source.html +43 -42
  258. data/doc/cxxapi/ngx__http__passenger__module_8h-source.html +1 -1
  259. data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +1 -1
  260. data/doc/cxxapi/structPassenger_1_1AnythingToString.html +1 -1
  261. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01StaticString_01_4_01_4-members.html +33 -0
  262. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01StaticString_01_4_01_4.html +52 -0
  263. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +1 -1
  264. data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +1 -1
  265. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +1 -1
  266. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +1 -1
  267. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +3 -2
  268. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +25 -5
  269. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +1 -1
  270. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +1 -1
  271. data/doc/cxxapi/tabs.css +1 -1
  272. data/doc/cxxapi/tree.html +20 -17
  273. data/doc/users_guide_snippets/tips.txt +28 -0
  274. data/ext/apache2/Hooks.cpp +19 -2
  275. data/ext/common/Utils.cpp +15 -4
  276. data/ext/common/Version.h +1 -1
  277. data/ext/nginx/StaticContentHandler.c +6 -3
  278. data/ext/phusion_passenger/native_support.c +25 -0
  279. data/lib/phusion_passenger/abstract_request_handler.rb +1 -0
  280. data/lib/phusion_passenger/constants.rb +1 -1
  281. data/lib/phusion_passenger/events.rb +3 -0
  282. data/lib/phusion_passenger/platform_info.rb +2 -1
  283. data/lib/phusion_passenger/rack/application_spawner.rb +2 -0
  284. data/lib/phusion_passenger/railz/application_spawner.rb +8 -0
  285. data/lib/phusion_passenger/utils.rb +69 -9
  286. data/lib/phusion_passenger/utils/rewindable_input.rb +10 -6
  287. metadata +55 -17
@@ -0,0 +1,52 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3
+ <title>Passenger: Passenger::AnythingToString&lt; vector&lt; StaticString &gt; &gt; Struct Template Reference</title>
4
+ <link href="tabs.css" rel="stylesheet" type="text/css">
5
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
6
+ </head><body>
7
+ <!-- Generated by Doxygen 1.5.8 -->
8
+ <div class="navigation" id="top">
9
+ <div class="tabs">
10
+ <ul>
11
+ <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
12
+ <li><a href="modules.html"><span>Modules</span></a></li>
13
+ <li><a href="namespaces.html"><span>Namespaces</span></a></li>
14
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
15
+ <li><a href="files.html"><span>Files</span></a></li>
16
+ </ul>
17
+ </div>
18
+ <div class="tabs">
19
+ <ul>
20
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
21
+ <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
22
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
23
+ </ul>
24
+ </div>
25
+ <div class="navpath"><a class="el" href="namespacePassenger.html">Passenger</a>::<a class="el" href="structPassenger_1_1AnythingToString_3_01vector_3_01StaticString_01_4_01_4.html">AnythingToString&lt; vector&lt; StaticString &gt; &gt;</a>
26
+ </div>
27
+ </div>
28
+ <div class="contents">
29
+ <h1>Passenger::AnythingToString&lt; vector&lt; StaticString &gt; &gt; Struct Template Reference</h1><!-- doxytag: class="Passenger::AnythingToString&lt; vector&lt; StaticString &gt; &gt;" -->Used internally by <a class="el" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString()</a>.
30
+ <a href="#_details">More...</a>
31
+ <p>
32
+ <code>#include &lt;<a class="el" href="Utils_8h-source.html">Utils.h</a>&gt;</code>
33
+ <p>
34
+
35
+ <p>
36
+ <a href="structPassenger_1_1AnythingToString_3_01vector_3_01StaticString_01_4_01_4-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
37
+ <tr><td></td></tr>
38
+ </table>
39
+ <hr><a name="_details"></a><h2>Detailed Description</h2>
40
+ <h3>template&lt;&gt;<br>
41
+ struct Passenger::AnythingToString&lt; vector&lt; StaticString &gt; &gt;</h3>
42
+
43
+ Used internally by <a class="el" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString()</a>.
44
+ <p>
45
+ Do not use directly. <hr>The documentation for this struct was generated from the following file:<ul>
46
+ <li><a class="el" href="Utils_8h-source.html">Utils.h</a></ul>
47
+ </div>
48
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
49
+ <a href="http://www.doxygen.org/index.html">
50
+ <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
51
+ </body>
52
+ </html>
@@ -26,7 +26,7 @@
26
26
  <div class="contents">
27
27
  <h1>Passenger::AnythingToString&lt; vector&lt; string &gt; &gt; Member List</h1>This is the complete list of members for <a class="el" href="structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html">Passenger::AnythingToString&lt; vector&lt; string &gt; &gt;</a>, including all inherited members.<p><table>
28
28
  </table></div>
29
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
29
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
30
30
  <a href="http://www.doxygen.org/index.html">
31
31
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
32
32
  </body>
@@ -45,7 +45,7 @@ Used internally by <a class="el" href="group__Support.html#gf6fab368d70c18fdf16b
45
45
  Do not use directly. <hr>The documentation for this struct was generated from the following file:<ul>
46
46
  <li><a class="el" href="Utils_8h-source.html">Utils.h</a></ul>
47
47
  </div>
48
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
48
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
49
49
  <a href="http://www.doxygen.org/index.html">
50
50
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
51
51
  </body>
@@ -26,7 +26,7 @@
26
26
  <div class="contents">
27
27
  <h1>Passenger::MessageServer::MessageServer::DisconnectEventBroadcastGuard Member List</h1>This is the complete list of members for <a class="el" href="structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html">Passenger::MessageServer::MessageServer::DisconnectEventBroadcastGuard</a>, including all inherited members.<p><table>
28
28
  </table></div>
29
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
29
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
30
30
  <a href="http://www.doxygen.org/index.html">
31
31
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
32
32
  </body>
@@ -42,7 +42,7 @@ Calls clientDisconnected() on all handlers when destroyed.
42
42
  <hr>The documentation for this struct was generated from the following file:<ul>
43
43
  <li><a class="el" href="MessageServer_8h-source.html">MessageServer.h</a></ul>
44
44
  </div>
45
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
45
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
46
46
  <a href="http://www.doxygen.org/index.html">
47
47
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
48
48
  </body>
@@ -30,6 +30,7 @@
30
30
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#5a2f27a853e33c22da71430216d798cf">appSpawnerTimeout</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
31
31
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#5e1c129ae0b8be350c7ed238eec8a8c9">appType</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
32
32
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#85c99df1b3d74b47c73049e20f0a7192">baseURI</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
33
+ <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#7ac23dee2503de627fe4a3ea346c3739">debugger</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
33
34
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#fdbe6d3418132ff3ca17427778e0948c">defaultGroup</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
34
35
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#f9e15d356066ebd5f1454dca7937374f">defaultUser</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
35
36
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#4324bb724859905f9991faa9b90aedbc">environment</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
@@ -42,7 +43,7 @@
42
43
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#70251ed3cb3713cb26a0b166c6b015c0">maxRequests</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
43
44
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#9d887031bbee2ad75ed88c8533ce41c1">minProcesses</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
44
45
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#b2b7c72144c108657e3ad4ac9f6e26f4">PoolOptions</a>()</td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td><code> [inline]</code></td></tr>
45
- <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#3e80ba601729a1a1eedc33cbc2217949">PoolOptions</a>(const string &amp;appRoot, string appGroupName=&quot;&quot;, const string &amp;appType=&quot;rails&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart-lv2&quot;, const string &amp;user=&quot;&quot;, const string &amp;group=&quot;&quot;, const string &amp;defaultUser=&quot;&quot;, const string &amp;defaultGroup=&quot;&quot;, long frameworkSpawnerTimeout=-1, long appSpawnerTimeout=-1, const string &amp;baseURI=&quot;/&quot;, unsigned long maxRequests=0, unsigned long minProcesses=0, bool useGlobalQueue=false, unsigned long statThrottleRate=0, const string &amp;restartDir=&quot;&quot;, Account::Rights rights=DEFAULT_BACKEND_ACCOUNT_RIGHTS, const AnalyticsLogPtr &amp;log=AnalyticsLogPtr())</td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td><code> [inline]</code></td></tr>
46
+ <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#435aca3700e957a4eb7afbe7dc50cd3d">PoolOptions</a>(const string &amp;appRoot, string appGroupName=&quot;&quot;, const string &amp;appType=&quot;rails&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart-lv2&quot;, const string &amp;user=&quot;&quot;, const string &amp;group=&quot;&quot;, const string &amp;defaultUser=&quot;&quot;, const string &amp;defaultGroup=&quot;&quot;, long frameworkSpawnerTimeout=-1, long appSpawnerTimeout=-1, const string &amp;baseURI=&quot;/&quot;, unsigned long maxRequests=0, unsigned long minProcesses=0, bool useGlobalQueue=false, unsigned long statThrottleRate=0, const string &amp;restartDir=&quot;&quot;, Account::Rights rights=DEFAULT_BACKEND_ACCOUNT_RIGHTS, bool debugger=false, const AnalyticsLogPtr &amp;log=AnalyticsLogPtr())</td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td><code> [inline]</code></td></tr>
46
47
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#0caa024c33da2f68b5c79b41122397b3">PoolOptions</a>(const vector&lt; string &gt; &amp;vec, unsigned int startIndex=0, AnalyticsLoggerPtr analyticsLogger=AnalyticsLoggerPtr())</td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td><code> [inline]</code></td></tr>
47
48
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#d3d545cee2806198797fc6b4197ff87b">printExceptions</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
48
49
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#b0f889f70a3ed22f2423d110ddaf26f5">restartDir</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
@@ -54,7 +55,7 @@
54
55
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#b610e568a7b5d3bb27460d6e35952b7e">useGlobalQueue</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
55
56
  <tr class="memlist"><td><a class="el" href="structPassenger_1_1PoolOptions.html#7bb617271b0a61645b17b9815ebf300c">user</a></td><td><a class="el" href="structPassenger_1_1PoolOptions.html">Passenger::PoolOptions</a></td><td></td></tr>
56
57
  </table></div>
57
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
58
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
58
59
  <a href="http://www.doxygen.org/index.html">
59
60
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
60
61
  </body>
@@ -39,8 +39,8 @@
39
39
  <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPassenger_1_1PoolOptions.html#b2b7c72144c108657e3ad4ac9f6e26f4">PoolOptions</a> ()</td></tr>
40
40
 
41
41
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new <a class="el" href="structPassenger_1_1PoolOptions.html" title="This struct encapsulates information for ApplicationPool::get() and for SpawnManager::spawn()...">PoolOptions</a> object with the default values filled in. <a href="#b2b7c72144c108657e3ad4ac9f6e26f4"></a><br></td></tr>
42
- <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3e80ba601729a1a1eedc33cbc2217949"></a><!-- doxytag: member="Passenger::PoolOptions::PoolOptions" ref="3e80ba601729a1a1eedc33cbc2217949" args="(const string &amp;appRoot, string appGroupName=&quot;&quot;, const string &amp;appType=&quot;rails&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&#45;lv2&quot;, const string &amp;user=&quot;&quot;, const string &amp;group=&quot;&quot;, const string &amp;defaultUser=&quot;&quot;, const string &amp;defaultGroup=&quot;&quot;, long frameworkSpawnerTimeout=&#45;1, long appSpawnerTimeout=&#45;1, const string &amp;baseURI=&quot;/&quot;, unsigned long maxRequests=0, unsigned long minProcesses=0, bool useGlobalQueue=false, unsigned long statThrottleRate=0, const string &amp;restartDir=&quot;&quot;, Account::Rights rights=DEFAULT_BACKEND_ACCOUNT_RIGHTS, const AnalyticsLogPtr &amp;log=AnalyticsLogPtr())" -->
43
- &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPassenger_1_1PoolOptions.html#3e80ba601729a1a1eedc33cbc2217949">PoolOptions</a> (const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#822039d204b48d9ed49184646734acf3">appRoot</a>, string <a class="el" href="structPassenger_1_1PoolOptions.html#dce57f30c4f33d8b55726d0eaa15addf">appGroupName</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#5e1c129ae0b8be350c7ed238eec8a8c9">appType</a>=&quot;rails&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#4324bb724859905f9991faa9b90aedbc">environment</a>=&quot;production&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#feb629e3ced79f5a2dbccc1beeeeab9e">spawnMethod</a>=&quot;smart-lv2&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#7bb617271b0a61645b17b9815ebf300c">user</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#6292899199727c513fd641d313c42372">group</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#f9e15d356066ebd5f1454dca7937374f">defaultUser</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#fdbe6d3418132ff3ca17427778e0948c">defaultGroup</a>=&quot;&quot;, long <a class="el" href="structPassenger_1_1PoolOptions.html#cbbea86958b42ffa7989680ed1587c70">frameworkSpawnerTimeout</a>=-1, long <a class="el" href="structPassenger_1_1PoolOptions.html#5a2f27a853e33c22da71430216d798cf">appSpawnerTimeout</a>=-1, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#85c99df1b3d74b47c73049e20f0a7192">baseURI</a>=&quot;/&quot;, unsigned long <a class="el" href="structPassenger_1_1PoolOptions.html#70251ed3cb3713cb26a0b166c6b015c0">maxRequests</a>=0, unsigned long <a class="el" href="structPassenger_1_1PoolOptions.html#9d887031bbee2ad75ed88c8533ce41c1">minProcesses</a>=0, bool <a class="el" href="structPassenger_1_1PoolOptions.html#b610e568a7b5d3bb27460d6e35952b7e">useGlobalQueue</a>=false, unsigned long <a class="el" href="structPassenger_1_1PoolOptions.html#eaf5a998b4a5da2246685c2dfb8a8c6d">statThrottleRate</a>=0, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#b0f889f70a3ed22f2423d110ddaf26f5">restartDir</a>=&quot;&quot;, Account::Rights <a class="el" href="structPassenger_1_1PoolOptions.html#45665fffc8a20ea60a3fcafaff8627ab">rights</a>=DEFAULT_BACKEND_ACCOUNT_RIGHTS, const AnalyticsLogPtr &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#ce54185a9981f103a036a7ac3e768612">log</a>=AnalyticsLogPtr())</td></tr>
42
+ <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="435aca3700e957a4eb7afbe7dc50cd3d"></a><!-- doxytag: member="Passenger::PoolOptions::PoolOptions" ref="435aca3700e957a4eb7afbe7dc50cd3d" args="(const string &amp;appRoot, string appGroupName=&quot;&quot;, const string &amp;appType=&quot;rails&quot;, const string &amp;environment=&quot;production&quot;, const string &amp;spawnMethod=&quot;smart&#45;lv2&quot;, const string &amp;user=&quot;&quot;, const string &amp;group=&quot;&quot;, const string &amp;defaultUser=&quot;&quot;, const string &amp;defaultGroup=&quot;&quot;, long frameworkSpawnerTimeout=&#45;1, long appSpawnerTimeout=&#45;1, const string &amp;baseURI=&quot;/&quot;, unsigned long maxRequests=0, unsigned long minProcesses=0, bool useGlobalQueue=false, unsigned long statThrottleRate=0, const string &amp;restartDir=&quot;&quot;, Account::Rights rights=DEFAULT_BACKEND_ACCOUNT_RIGHTS, bool debugger=false, const AnalyticsLogPtr &amp;log=AnalyticsLogPtr())" -->
43
+ &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPassenger_1_1PoolOptions.html#435aca3700e957a4eb7afbe7dc50cd3d">PoolOptions</a> (const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#822039d204b48d9ed49184646734acf3">appRoot</a>, string <a class="el" href="structPassenger_1_1PoolOptions.html#dce57f30c4f33d8b55726d0eaa15addf">appGroupName</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#5e1c129ae0b8be350c7ed238eec8a8c9">appType</a>=&quot;rails&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#4324bb724859905f9991faa9b90aedbc">environment</a>=&quot;production&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#feb629e3ced79f5a2dbccc1beeeeab9e">spawnMethod</a>=&quot;smart-lv2&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#7bb617271b0a61645b17b9815ebf300c">user</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#6292899199727c513fd641d313c42372">group</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#f9e15d356066ebd5f1454dca7937374f">defaultUser</a>=&quot;&quot;, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#fdbe6d3418132ff3ca17427778e0948c">defaultGroup</a>=&quot;&quot;, long <a class="el" href="structPassenger_1_1PoolOptions.html#cbbea86958b42ffa7989680ed1587c70">frameworkSpawnerTimeout</a>=-1, long <a class="el" href="structPassenger_1_1PoolOptions.html#5a2f27a853e33c22da71430216d798cf">appSpawnerTimeout</a>=-1, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#85c99df1b3d74b47c73049e20f0a7192">baseURI</a>=&quot;/&quot;, unsigned long <a class="el" href="structPassenger_1_1PoolOptions.html#70251ed3cb3713cb26a0b166c6b015c0">maxRequests</a>=0, unsigned long <a class="el" href="structPassenger_1_1PoolOptions.html#9d887031bbee2ad75ed88c8533ce41c1">minProcesses</a>=0, bool <a class="el" href="structPassenger_1_1PoolOptions.html#b610e568a7b5d3bb27460d6e35952b7e">useGlobalQueue</a>=false, unsigned long <a class="el" href="structPassenger_1_1PoolOptions.html#eaf5a998b4a5da2246685c2dfb8a8c6d">statThrottleRate</a>=0, const string &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#b0f889f70a3ed22f2423d110ddaf26f5">restartDir</a>=&quot;&quot;, Account::Rights <a class="el" href="structPassenger_1_1PoolOptions.html#45665fffc8a20ea60a3fcafaff8627ab">rights</a>=DEFAULT_BACKEND_ACCOUNT_RIGHTS, bool <a class="el" href="structPassenger_1_1PoolOptions.html#7ac23dee2503de627fe4a3ea346c3739">debugger</a>=false, const AnalyticsLogPtr &amp;<a class="el" href="structPassenger_1_1PoolOptions.html#ce54185a9981f103a036a7ac3e768612">log</a>=AnalyticsLogPtr())</td></tr>
44
44
 
45
45
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new <a class="el" href="structPassenger_1_1PoolOptions.html" title="This struct encapsulates information for ApplicationPool::get() and for SpawnManager::spawn()...">PoolOptions</a> object with the given values. <br></td></tr>
46
46
  <tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPassenger_1_1PoolOptions.html#0caa024c33da2f68b5c79b41122397b3">PoolOptions</a> (const vector&lt; string &gt; &amp;vec, unsigned int startIndex=0, AnalyticsLoggerPtr analyticsLogger=AnalyticsLoggerPtr())</td></tr>
@@ -114,6 +114,9 @@ unsigned long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" h
114
114
  <tr><td class="memItemLeft" nowrap align="right" valign="top">Account::Rights&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPassenger_1_1PoolOptions.html#45665fffc8a20ea60a3fcafaff8627ab">rights</a></td></tr>
115
115
 
116
116
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Any rights that the spawned application process may have. <a href="#45665fffc8a20ea60a3fcafaff8627ab"></a><br></td></tr>
117
+ <tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPassenger_1_1PoolOptions.html#7ac23dee2503de627fe4a3ea346c3739">debugger</a></td></tr>
118
+
119
+ <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Whether debugger support should be enabled. <a href="#7ac23dee2503de627fe4a3ea346c3739"></a><br></td></tr>
117
120
  <tr><td class="memItemLeft" nowrap align="right" valign="top">AnalyticsLogPtr&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPassenger_1_1PoolOptions.html#ce54185a9981f103a036a7ac3e768612">log</a></td></tr>
118
121
 
119
122
  <tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An analytics log object to log things to. <a href="#ce54185a9981f103a036a7ac3e768612"></a><br></td></tr>
@@ -132,8 +135,8 @@ This struct encapsulates information for ApplicationPool::get() and for <a class
132
135
  If <em>user</em> is given and isn't the empty string, then the application process will run as the given username. Otherwise, the owner of the application's startup file (e.g. config/environment.rb or config.ru) will be used.<p>
133
136
  If <em>group</em> is given and isn't the empty string, then the application process will run as the given group name. If it's set to the special value "!STARTUP_FILE!", then the startup file's group will be used. Otherwise, the primary group of the user that the application process will run as, will be used as group.<p>
134
137
  If the user or group that the application process attempts to switch to doesn't exist, then <em>default_user</em> and <em>default_group</em>, respectively, will be used.<p>
135
- Phusion <a class="el" href="namespacePassenger.html" title="A random.">Passenger</a> will attempt to avoid running the application process as root: if <em>user</em> or <em>group</em> is set to the root user or the root group, or if the startup file is owned by root, then <em>default_user</em> and <em>default_group</em> will be used instead.<p>
136
- All this only happen if Phusion <a class="el" href="namespacePassenger.html" title="A random.">Passenger</a> has root privileges. If not, then these options have no effect. <hr><h2>Constructor &amp; Destructor Documentation</h2>
138
+ Phusion <a class="el" href="namespacePassenger.html" title="This file provides a bunch of classes for reading and writing messages in the MessageChannel...">Passenger</a> will attempt to avoid running the application process as root: if <em>user</em> or <em>group</em> is set to the root user or the root group, or if the startup file is owned by root, then <em>default_user</em> and <em>default_group</em> will be used instead.<p>
139
+ All this only happen if Phusion <a class="el" href="namespacePassenger.html" title="This file provides a bunch of classes for reading and writing messages in the MessageChannel...">Passenger</a> has root privileges. If not, then these options have no effect. <hr><h2>Constructor &amp; Destructor Documentation</h2>
137
140
  <a class="anchor" name="b2b7c72144c108657e3ad4ac9f6e26f4"></a><!-- doxytag: member="Passenger::PoolOptions::PoolOptions" ref="b2b7c72144c108657e3ad4ac9f6e26f4" args="()" -->
138
141
  <div class="memitem">
139
142
  <div class="memproto">
@@ -388,6 +391,23 @@ The base URI on which the application runs.
388
391
  If the application is running on the root URI, then this value must be "/".<p>
389
392
  <dl class="invariant" compact><dt><b>Invariant:</b></dt><dd>baseURI != "" </dd></dl>
390
393
 
394
+ </div>
395
+ </div><p>
396
+ <a class="anchor" name="7ac23dee2503de627fe4a3ea346c3739"></a><!-- doxytag: member="Passenger::PoolOptions::debugger" ref="7ac23dee2503de627fe4a3ea346c3739" args="" -->
397
+ <div class="memitem">
398
+ <div class="memproto">
399
+ <table class="memname">
400
+ <tr>
401
+ <td class="memname">bool <a class="el" href="structPassenger_1_1PoolOptions.html#7ac23dee2503de627fe4a3ea346c3739">Passenger::PoolOptions::debugger</a> </td>
402
+ </tr>
403
+ </table>
404
+ </div>
405
+ <div class="memdoc">
406
+
407
+ <p>
408
+ Whether debugger support should be enabled.
409
+ <p>
410
+
391
411
  </div>
392
412
  </div><p>
393
413
  <a class="anchor" name="fdbe6d3418132ff3ca17427778e0948c"></a><!-- doxytag: member="Passenger::PoolOptions::defaultGroup" ref="fdbe6d3418132ff3ca17427778e0948c" args="" -->
@@ -670,7 +690,7 @@ See overview.
670
690
  <hr>The documentation for this struct was generated from the following file:<ul>
671
691
  <li><a class="el" href="PoolOptions_8h-source.html">PoolOptions.h</a></ul>
672
692
  </div>
673
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
693
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
674
694
  <a href="http://www.doxygen.org/index.html">
675
695
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
676
696
  </body>
@@ -26,7 +26,7 @@
26
26
  <div class="contents">
27
27
  <h1>Passenger::StaticString::StaticString::Hash Member List</h1>This is the complete list of members for <a class="el" href="structPassenger_1_1StaticString_1_1Hash.html">Passenger::StaticString::StaticString::Hash</a>, including all inherited members.<p><table>
28
28
  </table></div>
29
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
29
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
30
30
  <a href="http://www.doxygen.org/index.html">
31
31
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
32
32
  </body>
@@ -42,7 +42,7 @@ A hash function object for <a class="el" href="classPassenger_1_1StaticString.ht
42
42
  <hr>The documentation for this struct was generated from the following file:<ul>
43
43
  <li><a class="el" href="StaticString_8h-source.html">StaticString.h</a></ul>
44
44
  </div>
45
- <hr size="1"><address style="text-align: right;"><small>Generated on Sun Feb 21 12:22:48 2010 for Passenger by&nbsp;
45
+ <hr size="1"><address style="text-align: right;"><small>Generated on Sun Mar 28 14:11:59 2010 for Passenger by&nbsp;
46
46
  <a href="http://www.doxygen.org/index.html">
47
47
  <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
48
48
  </body>
@@ -57,7 +57,7 @@ DIV.tabs SPAN
57
57
  white-space : nowrap;
58
58
  }
59
59
 
60
- DIV.tabs INPUT
60
+ DIV.tabs #MSearchBox
61
61
  {
62
62
  float : right;
63
63
  display : inline;
@@ -1,9 +1,10 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1
2
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
2
3
  <head>
3
- <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8" />
4
+ <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4
5
  <meta http-equiv="Content-Style-Type" content="text/css" />
5
6
  <meta http-equiv="Content-Language" content="en" />
6
- <link rel="stylesheet" href="doxygen.css">
7
+ <link rel="stylesheet" href="doxygen.css"/>
7
8
  <title>TreeView</title>
8
9
  <script type="text/javascript">
9
10
  <!-- // Hide script from old browsers
@@ -63,29 +64,31 @@
63
64
  <div class="directory">
64
65
  <h3 class="swap"><span>Passenger</span></h3>
65
66
  <div style="display: block;">
66
- <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder1', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder1', this)"/><a class="el" href="modules.html" target="basefrm">Modules</a></p>
67
+ <p><img src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('folder1', this)"/><img src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('folder1', this)"/><a class="el" href="modules.html" target="basefrm">Modules</a></p>
67
68
  <div id="folder1">
68
- <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder2', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder2', this)"/><a class="el" href="group__Core.html" target="basefrm">Core Apache-related classes and functions</a></p>
69
+ <p><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('folder2', this)"/><img src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('folder2', this)"/><a class="el" href="group__Core.html" target="basefrm">Core Apache-related classes and functions</a></p>
69
70
  <div id="folder2">
70
- <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="group__Configuration.html" target="basefrm">Apache module configuration</a></p>
71
- <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="group__Hooks.html" target="basefrm">Apache hooks</a></p>
71
+ <p><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="group__Configuration.html" target="basefrm">Apache module configuration</a></p>
72
+ <p><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="group__Hooks.html" target="basefrm">Apache hooks</a></p>
72
73
  </div>
73
- <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="group__Support.html" target="basefrm">Apache-independent support classes and function</a></p>
74
+ <p><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="group__Support.html" target="basefrm">Apache-independent support classes and function</a></p>
74
75
  </div>
75
- <p><img src="ftv2pnode.png" alt="o" width=16 height=22 onclick="toggleFolder('folder3', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder3', this)"/><a class="el" href="annotated.html" target="basefrm">Class List</a></p>
76
+ <p><img src="ftv2pnode.png" alt="o" width="16" height="22" onclick="toggleFolder('folder3', this)"/><img src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('folder3', this)"/><a class="el" href="annotated.html" target="basefrm">Class List</a></p>
76
77
  <div id="folder3">
77
- <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="classPassenger_1_1DirectoryMapper.html" target="basefrm">Passenger::DirectoryMapper</a></p>
78
- <p><img src="ftv2vertline.png" alt="|" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="classHooks.html" target="basefrm">Hooks</a></p>
78
+ <p><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="classPassenger_1_1DirectoryMapper.html" target="basefrm">Passenger::DirectoryMapper</a></p>
79
+ <p><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="classHooks.html" target="basefrm">Hooks</a></p>
79
80
  </div>
80
- <p><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><a class="el" href="functions.html" target="basefrm">Class Members</a></p>
81
- <p><img src="ftv2plastnode.png" alt="\" width=16 height=22 onclick="toggleFolder('folder4', this)"/><img src="ftv2folderclosed.png" alt="+" width=24 height=22 onclick="toggleFolder('folder4', this)"/><a class="el" href="files.html" target="basefrm">File List</a></p>
81
+ <p><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><a class="el" href="functions.html" target="basefrm">Class Members</a></p>
82
+ <p><img src="ftv2plastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('folder4', this)"/><img src="ftv2folderclosed.png" alt="+" width="24" height="22" onclick="toggleFolder('folder4', this)"/><a class="el" href="files.html" target="basefrm">File List</a></p>
82
83
  <div id="folder4">
83
- <p><img src="ftv2blank.png" alt="&nbsp;" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>Bucket.h</b></p>
84
- <p><img src="ftv2blank.png" alt="&nbsp;" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>Configuration.h</b></p>
85
- <p><img src="ftv2blank.png" alt="&nbsp;" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>definitions.h</b></p>
86
- <p><img src="ftv2blank.png" alt="&nbsp;" width=16 height=22 /><img src="ftv2node.png" alt="o" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>DirectoryMapper.h</b></p>
87
- <p><img src="ftv2blank.png" alt="&nbsp;" width=16 height=22 /><img src="ftv2lastnode.png" alt="\" width=16 height=22 /><img src="ftv2doc.png" alt="*" width=24 height=22 /><b>Hooks.h</b></p>
84
+ <p><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><b>Bucket.h</b></p>
85
+ <p><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><b>Configuration.h</b></p>
86
+ <p><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><b>definitions.h</b></p>
87
+ <p><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><b>DirectoryMapper.h</b></p>
88
+ <p><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2doc.png" alt="*" width="24" height="22" /><b>Hooks.h</b></p>
88
89
  </div>
89
90
  </div>
90
91
  </div>
92
+ </body>
93
+ </html>
91
94
 
@@ -76,6 +76,34 @@ end
76
76
  --------------------------------------------------
77
77
 
78
78
 
79
+ [[bundler_support]]
80
+ === Bundler support ===
81
+
82
+ Phusion Passenger has automatic support for link:http://gembundler.com/git.html[Bundler].
83
+ It works as follows:
84
+
85
+ - If you have a '.bundle/environment.rb' in your application root, then Phusion
86
+ Passenger will require that file before loading your application.
87
+ - Otherwise, if you have a 'Gemfile', then Phusion Passenger will automatically call
88
+ `Bundler.setup()` before loading your application.
89
+
90
+ It's possible that your application also calls `Bundler.setup` during loading, e.g. in
91
+ 'config.ru' or in 'config/boot.rb'. This is the case with Rails 3, and is also the case if you
92
+ modified your 'config/boot.rb' according to the
93
+ link:http://gembundler.com/rails23.html[Bundler Rails 2.3 instructions].
94
+ This leads to `Bundler.setup` being called twice, once before the application startup file
95
+ is required and once during application startup. However this is harmless and doesn't
96
+ have any negative effects.
97
+
98
+ Phusion Passenger assumes that you're using Bundler >= 0.9.5. If you don't want Phusion
99
+ Passenger to run its Bundler support code, e.g. because you need to use an older version
100
+ of Bundler with an incompatible API or because you use a system other than Bundler, then
101
+ you can override Phusion Passenger's Bundler support code by creating a file
102
+ 'config/setup_load_paths.rb'. If this file exists then it will be required before loading
103
+ the application startup file. In this file you can do whatever you need to setup Bundler
104
+ or a similar system.
105
+
106
+
79
107
  [[moving_phusion_passenger]]
80
108
  === Moving Phusion Passenger to a different directory ===
81
109
 
@@ -188,7 +188,7 @@ private:
188
188
 
189
189
  ApplicationPoolServerPtr applicationPoolServer;
190
190
  thread_specific_ptr<ApplicationPoolPtr> threadSpecificApplicationPool;
191
- Threeway m_hasModRewrite, m_hasModDir, m_hasModAutoIndex;
191
+ Threeway m_hasModRewrite, m_hasModDir, m_hasModAutoIndex, m_hasModXsendfile;
192
192
  CachedFileStat cstat;
193
193
 
194
194
  inline DirConfig *getDirConfig(request_rec *r) {
@@ -268,6 +268,17 @@ private:
268
268
  return m_hasModAutoIndex == YES;
269
269
  }
270
270
 
271
+ bool hasModXsendfile() {
272
+ if (m_hasModXsendfile == UNKNOWN) {
273
+ if (ap_find_linked_module("mod_xsendfile.c")) {
274
+ m_hasModXsendfile = YES;
275
+ } else {
276
+ m_hasModXsendfile = NO;
277
+ }
278
+ }
279
+ return m_hasModXsendfile == YES;
280
+ }
281
+
271
282
  int reportDocumentRootDeterminationError(request_rec *r) {
272
283
  ap_set_content_type(r, "text/html; charset=UTF-8");
273
284
  ap_rputs("<h1>Passenger error #1</h1>\n", r);
@@ -642,6 +653,9 @@ private:
642
653
  }
643
654
  apr_table_setn(r->headers_out, "Status", r->status_line);
644
655
 
656
+ bool xsendfile = hasModXsendfile() &&
657
+ apr_table_get(r->err_headers_out, "X-Sendfile");
658
+
645
659
  UPDATE_TRACE_POINT();
646
660
  ap_pass_brigade(r->output_filters, bb);
647
661
 
@@ -654,7 +668,9 @@ private:
654
668
  "this is normal. You might also want to increase Apache's "
655
669
  "TimeOut configuration option if you experience this "
656
670
  "problem often.");
657
- } else if (!bucketState->completed) {
671
+ } else if (!bucketState->completed && !xsendfile) {
672
+ // mod_xsendfile drops the entire output bucket so
673
+ // suppress this message when mod_xsendfile is active.
658
674
  P_WARN("Apache stopped forwarding the backend's response, "
659
675
  "even though the HTTP client did not close the "
660
676
  "connection. Is this an Apache bug?");
@@ -1185,6 +1201,7 @@ public:
1185
1201
  m_hasModRewrite = UNKNOWN;
1186
1202
  m_hasModDir = UNKNOWN;
1187
1203
  m_hasModAutoIndex = UNKNOWN;
1204
+ m_hasModXsendfile = UNKNOWN;
1188
1205
 
1189
1206
  P_DEBUG("Initializing Phusion Passenger...");
1190
1207
  ap_add_version_component(pconf, "Phusion_Passenger/" PASSENGER_VERSION);
@@ -355,19 +355,30 @@ setPassengerTempDir(const string &dir) {
355
355
  static void
356
356
  createNonWritableFifo(const string &filename) {
357
357
  int ret, e;
358
+ bool ignoreChmodErrors = false;
358
359
 
359
360
  do {
360
361
  ret = mkfifo(filename.c_str(), 0);
361
362
  } while (ret == -1 && errno == EINTR);
362
- if (ret == -1 && errno != EEXIST) {
363
- e = errno;
364
- throw FileSystemException("Cannot create FIFO file " + filename, e, filename);
363
+ if (ret == -1) {
364
+ if (errno == EEXIST) {
365
+ /* The FIFO file was likely created by root, but after lowering
366
+ * privilege createPassengerTempDir() is called again, and this
367
+ * time we won't be able to set permissions. So in this case
368
+ * we'll want to ignore any chmod errors.
369
+ */
370
+ ignoreChmodErrors = geteuid() != 0;
371
+ } else {
372
+ e = errno;
373
+ throw FileSystemException("Cannot create FIFO file " + filename,
374
+ e, filename);
375
+ }
365
376
  }
366
377
 
367
378
  do {
368
379
  ret = chmod(filename.c_str(), 0);
369
380
  } while (ret == -1 && errno == EINTR);
370
- if (ret == -1) {
381
+ if (ret == -1 && !ignoreChmodErrors) {
371
382
  e = errno;
372
383
  throw FileSystemException("Cannot set permissions on file " + filename, e, filename);
373
384
  }
@@ -26,6 +26,6 @@
26
26
  #define _PASSENGER_VERSION_H_
27
27
 
28
28
  /* Don't forget to update lib/phusion_passenger/constants.rb too. */
29
- #define PASSENGER_VERSION "2.2.11"
29
+ #define PASSENGER_VERSION "2.2.12"
30
30
 
31
31
  #endif /* _PASSENGER_VERSION_H */
@@ -25,6 +25,7 @@
25
25
  */
26
26
 
27
27
  #include "StaticContentHandler.h"
28
+ #include "ngx_http_passenger_module.h"
28
29
 
29
30
  static void
30
31
  set_request_extension(ngx_http_request_t *r, ngx_str_t *filename) {
@@ -66,9 +67,11 @@ passenger_static_content_handler(ngx_http_request_t *r, ngx_str_t *filename)
66
67
  return NGX_DECLINED;
67
68
  }
68
69
 
69
- if (r->zero_in_uri) {
70
- return NGX_DECLINED;
71
- }
70
+ #if NGINX_VERSION_NUM < 8038
71
+ if (r->zero_in_uri) {
72
+ return NGX_DECLINED;
73
+ }
74
+ #endif
72
75
 
73
76
  log = r->connection->log;
74
77
 
@@ -30,6 +30,7 @@
30
30
  #include <string.h>
31
31
  #include <unistd.h>
32
32
  #include <errno.h>
33
+ #include <grp.h>
33
34
  #ifdef __OpenBSD__
34
35
  // OpenBSD needs this for 'struct iovec'. Apparently it isn't
35
36
  // always included by unistd.h and sys/types.h.
@@ -286,6 +287,29 @@ disable_stdio_buffering() {
286
287
  return Qnil;
287
288
  }
288
289
 
290
+ /**
291
+ * Ruby's implementations of initgroups, setgid and setuid are broken various ways,
292
+ * sigh...
293
+ * Ruby's setgid and setuid can't handle negative UIDs and initgroups is just broken.
294
+ * Work around it by using our own implementation.
295
+ */
296
+ static VALUE
297
+ switch_user(VALUE self, VALUE username, VALUE uid, VALUE gid) {
298
+ uid_t the_uid = NUM2LL(uid);
299
+ gid_t the_gid = NUM2LL(gid);
300
+
301
+ if (initgroups(RSTRING_PTR(username), the_gid) == -1) {
302
+ rb_sys_fail("initgroups");
303
+ }
304
+ if (setgid(the_gid) == -1) {
305
+ rb_sys_fail("setgid");
306
+ }
307
+ if (setuid(the_uid) == -1) {
308
+ rb_sys_fail("setuid");
309
+ }
310
+ return Qnil;
311
+ }
312
+
289
313
  /***************************/
290
314
 
291
315
  void
@@ -306,6 +330,7 @@ Init_native_support() {
306
330
  rb_define_singleton_method(mNativeSupport, "accept", f_accept, 1);
307
331
  rb_define_singleton_method(mNativeSupport, "close_all_file_descriptors", close_all_file_descriptors, 1);
308
332
  rb_define_singleton_method(mNativeSupport, "disable_stdio_buffering", disable_stdio_buffering, 0);
333
+ rb_define_singleton_method(mNativeSupport, "switch_user", switch_user, 3);
309
334
 
310
335
  /* The maximum length of a Unix socket path, including terminating null. */
311
336
  rb_define_const(mNativeSupport, "UNIX_PATH_MAX", INT2NUM(sizeof(addr.sun_path)));