passenger 4.0.60 → 5.0.0.beta1

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 (1301) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +5 -0
  5. data/.travis.yml +3 -2
  6. data/CHANGELOG +31 -53
  7. data/CONTRIBUTING.md +4 -4
  8. data/CONTRIBUTORS +0 -1
  9. data/Gemfile +18 -0
  10. data/Gemfile.lock +41 -0
  11. data/Rakefile +16 -0
  12. data/bin/passenger +2 -2
  13. data/bin/passenger-install-apache2-module +12 -12
  14. data/bin/passenger-install-nginx-module +9 -14
  15. data/bin/passenger-status +125 -87
  16. data/build/agents.rb +112 -140
  17. data/build/apache2.rb +4 -9
  18. data/build/basics.rb +5 -3
  19. data/build/common_library.rb +1 -0
  20. data/build/cxx_tests.rb +69 -47
  21. data/build/debian.rb +4 -2
  22. data/build/documentation.rb +1 -0
  23. data/build/integration_tests.rb +28 -43
  24. data/build/misc.rb +0 -18
  25. data/build/nginx.rb +2 -6
  26. data/build/packaging.rb +33 -22
  27. data/build/preprocessor.rb +2 -4
  28. data/build/ruby_tests.rb +7 -26
  29. data/build/test_basics.rb +24 -25
  30. data/debian.template/control.template +2 -2
  31. data/debian.template/locations.ini.template +2 -3
  32. data/debian.template/passenger.install.template +2 -2
  33. data/debian.template/rules.template +1 -1
  34. data/dev/ci/run_jenkins.sh +0 -1
  35. data/dev/ci/run_rpm_tests.sh +3 -0
  36. data/dev/ci/run_travis.sh +63 -17
  37. data/dev/copy_boost_headers +22 -6
  38. data/dev/ruby_server.rb +244 -0
  39. data/dev/vagrant/provision.sh +3 -1
  40. data/doc/DebuggingAndStressTesting.md +3 -3
  41. data/doc/Design and Architecture.txt +5 -6
  42. data/doc/Packaging.txt.md +35 -6
  43. data/doc/ServerOptimizationGuide.txt.md +339 -0
  44. data/doc/Users guide Apache.idmap.txt +177 -187
  45. data/doc/Users guide Apache.txt +143 -219
  46. data/doc/Users guide Nginx.idmap.txt +166 -166
  47. data/doc/Users guide Nginx.txt +265 -223
  48. data/doc/Users guide Standalone.txt +3 -3
  49. data/doc/templates/markdown.html.erb +37 -6
  50. data/doc/users_guide_snippets/environment_variables.txt +1 -1
  51. data/doc/users_guide_snippets/support_information.txt +1 -1
  52. data/doc/users_guide_snippets/tips.txt +2 -2
  53. data/ext/apache2/Configuration.cpp +23 -81
  54. data/ext/apache2/Configuration.hpp +18 -92
  55. data/ext/apache2/ConfigurationCommands.cpp +64 -15
  56. data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
  57. data/ext/apache2/ConfigurationFields.hpp +12 -0
  58. data/ext/apache2/ConfigurationSetters.cpp +73 -1
  59. data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
  60. data/ext/apache2/CreateDirConfig.cpp +6 -0
  61. data/ext/apache2/DirectoryMapper.h +11 -6
  62. data/ext/apache2/Hooks.cpp +291 -408
  63. data/ext/apache2/MergeDirConfig.cpp +42 -0
  64. data/ext/apache2/SetHeaders.cpp +61 -16
  65. data/ext/apache2/SetHeaders.cpp.erb +9 -7
  66. data/ext/boost/container/allocator_traits.hpp +400 -0
  67. data/ext/boost/container/deque.hpp +2012 -0
  68. data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
  69. data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
  70. data/ext/boost/container/detail/algorithms.hpp +84 -0
  71. data/ext/boost/container/detail/allocation_type.hpp +54 -0
  72. data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
  73. data/ext/boost/container/detail/config_begin.hpp +49 -0
  74. data/ext/boost/container/detail/config_end.hpp +17 -0
  75. data/ext/boost/container/detail/destroyers.hpp +365 -0
  76. data/ext/boost/container/detail/flat_tree.hpp +1055 -0
  77. data/ext/boost/container/detail/function_detector.hpp +88 -0
  78. data/ext/boost/container/detail/iterators.hpp +611 -0
  79. data/ext/boost/container/detail/math_functions.hpp +113 -0
  80. data/ext/boost/container/detail/memory_util.hpp +83 -0
  81. data/ext/boost/container/detail/mpl.hpp +160 -0
  82. data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
  83. data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
  84. data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
  85. data/ext/boost/container/detail/pair.hpp +354 -0
  86. data/ext/boost/container/detail/pool_common.hpp +52 -0
  87. data/ext/boost/container/detail/preprocessor.hpp +232 -0
  88. data/ext/boost/container/detail/transform_iterator.hpp +176 -0
  89. data/ext/boost/container/detail/tree.hpp +1134 -0
  90. data/ext/boost/container/detail/type_traits.hpp +210 -0
  91. data/ext/boost/container/detail/utilities.hpp +1141 -0
  92. data/ext/boost/container/detail/value_init.hpp +45 -0
  93. data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
  94. data/ext/boost/container/detail/version_type.hpp +92 -0
  95. data/ext/boost/container/detail/workaround.hpp +44 -0
  96. data/ext/boost/container/flat_map.hpp +1674 -0
  97. data/ext/boost/container/flat_set.hpp +1408 -0
  98. data/ext/boost/container/list.hpp +1475 -0
  99. data/ext/boost/container/map.hpp +1508 -0
  100. data/ext/boost/container/scoped_allocator.hpp +1503 -0
  101. data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
  102. data/ext/boost/container/set.hpp +1280 -0
  103. data/ext/boost/container/slist.hpp +1706 -0
  104. data/ext/boost/container/stable_vector.hpp +1869 -0
  105. data/ext/boost/container/static_vector.hpp +1053 -0
  106. data/ext/boost/container/string.hpp +2856 -0
  107. data/ext/boost/container/throw_exception.hpp +110 -0
  108. data/ext/boost/container/vector.hpp +2671 -0
  109. data/ext/boost/detail/is_xxx.hpp +61 -0
  110. data/ext/boost/intrusive/any_hook.hpp +344 -0
  111. data/ext/boost/intrusive/avl_set.hpp +2528 -0
  112. data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
  113. data/ext/boost/intrusive/avltree.hpp +1786 -0
  114. data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
  115. data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
  116. data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
  117. data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
  118. data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
  119. data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
  120. data/ext/boost/intrusive/detail/assert.hpp +41 -0
  121. data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
  122. data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
  123. data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
  124. data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
  125. data/ext/boost/intrusive/detail/config_end.hpp +15 -0
  126. data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
  127. data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
  128. data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
  129. data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
  130. data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
  131. data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
  132. data/ext/boost/intrusive/detail/list_node.hpp +196 -0
  133. data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
  134. data/ext/boost/intrusive/detail/mpl.hpp +383 -0
  135. data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
  136. data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
  137. data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
  138. data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
  139. data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
  140. data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
  141. data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
  142. data/ext/boost/intrusive/detail/utilities.hpp +858 -0
  143. data/ext/boost/intrusive/detail/workaround.hpp +22 -0
  144. data/ext/boost/intrusive/hashtable.hpp +3110 -0
  145. data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
  146. data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
  147. data/ext/boost/intrusive/link_mode.hpp +46 -0
  148. data/ext/boost/intrusive/list.hpp +1525 -0
  149. data/ext/boost/intrusive/list_hook.hpp +290 -0
  150. data/ext/boost/intrusive/member_value_traits.hpp +70 -0
  151. data/ext/boost/intrusive/options.hpp +810 -0
  152. data/ext/boost/intrusive/parent_from_member.hpp +42 -0
  153. data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
  154. data/ext/boost/intrusive/pointer_traits.hpp +265 -0
  155. data/ext/boost/intrusive/priority_compare.hpp +39 -0
  156. data/ext/boost/intrusive/rbtree.hpp +1785 -0
  157. data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
  158. data/ext/boost/intrusive/set.hpp +2554 -0
  159. data/ext/boost/intrusive/set_hook.hpp +300 -0
  160. data/ext/boost/intrusive/sg_set.hpp +2601 -0
  161. data/ext/boost/intrusive/sgtree.hpp +2009 -0
  162. data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
  163. data/ext/boost/intrusive/slist.hpp +2219 -0
  164. data/ext/boost/intrusive/slist_hook.hpp +294 -0
  165. data/ext/boost/intrusive/splay_set.hpp +2575 -0
  166. data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
  167. data/ext/boost/intrusive/splaytree.hpp +1784 -0
  168. data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
  169. data/ext/boost/intrusive/treap.hpp +1882 -0
  170. data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
  171. data/ext/boost/intrusive/treap_set.hpp +2751 -0
  172. data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
  173. data/ext/boost/intrusive/unordered_set.hpp +2115 -0
  174. data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
  175. data/ext/boost/intrusive_ptr.hpp +18 -0
  176. data/ext/boost/math/common_factor_ct.hpp +180 -0
  177. data/ext/boost/math_fwd.hpp +108 -0
  178. data/ext/boost/move/detail/move_helpers.hpp +175 -0
  179. data/ext/boost/parameter.hpp +21 -0
  180. data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
  181. data/ext/boost/parameter/aux_/cast.hpp +143 -0
  182. data/ext/boost/parameter/aux_/default.hpp +69 -0
  183. data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
  184. data/ext/boost/parameter/aux_/maybe.hpp +120 -0
  185. data/ext/boost/parameter/aux_/overloads.hpp +88 -0
  186. data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
  187. data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
  188. data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
  189. data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
  190. data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
  191. data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
  192. data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
  193. data/ext/boost/parameter/aux_/set.hpp +67 -0
  194. data/ext/boost/parameter/aux_/tag.hpp +38 -0
  195. data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
  196. data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
  197. data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
  198. data/ext/boost/parameter/aux_/void.hpp +29 -0
  199. data/ext/boost/parameter/aux_/yesno.hpp +26 -0
  200. data/ext/boost/parameter/binding.hpp +106 -0
  201. data/ext/boost/parameter/config.hpp +14 -0
  202. data/ext/boost/parameter/keyword.hpp +152 -0
  203. data/ext/boost/parameter/macros.hpp +99 -0
  204. data/ext/boost/parameter/match.hpp +55 -0
  205. data/ext/boost/parameter/name.hpp +156 -0
  206. data/ext/boost/parameter/parameters.hpp +931 -0
  207. data/ext/boost/parameter/preprocessor.hpp +1178 -0
  208. data/ext/boost/parameter/python.hpp +735 -0
  209. data/ext/boost/parameter/value_type.hpp +108 -0
  210. data/ext/boost/pool/detail/for.m4 +107 -0
  211. data/ext/boost/pool/detail/guard.hpp +69 -0
  212. data/ext/boost/pool/detail/mutex.hpp +42 -0
  213. data/ext/boost/pool/detail/pool_construct.bat +24 -0
  214. data/ext/boost/pool/detail/pool_construct.ipp +852 -0
  215. data/ext/boost/pool/detail/pool_construct.m4 +84 -0
  216. data/ext/boost/pool/detail/pool_construct.sh +12 -0
  217. data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
  218. data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
  219. data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
  220. data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
  221. data/ext/boost/pool/object_pool.hpp +287 -0
  222. data/ext/boost/pool/pool.hpp +1024 -0
  223. data/ext/boost/pool/pool_alloc.hpp +488 -0
  224. data/ext/boost/pool/poolfwd.hpp +82 -0
  225. data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
  226. data/ext/boost/pool/singleton_pool.hpp +251 -0
  227. data/ext/boost/preprocessor/arithmetic.hpp +25 -0
  228. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  229. data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
  230. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  231. data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
  232. data/ext/boost/preprocessor/array.hpp +32 -0
  233. data/ext/boost/preprocessor/array/enum.hpp +33 -0
  234. data/ext/boost/preprocessor/array/insert.hpp +55 -0
  235. data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
  236. data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
  237. data/ext/boost/preprocessor/array/push_back.hpp +33 -0
  238. data/ext/boost/preprocessor/array/push_front.hpp +33 -0
  239. data/ext/boost/preprocessor/array/remove.hpp +54 -0
  240. data/ext/boost/preprocessor/array/replace.hpp +49 -0
  241. data/ext/boost/preprocessor/array/reverse.hpp +29 -0
  242. data/ext/boost/preprocessor/array/to_list.hpp +33 -0
  243. data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
  244. data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
  245. data/ext/boost/preprocessor/assert_msg.hpp +17 -0
  246. data/ext/boost/preprocessor/comma.hpp +17 -0
  247. data/ext/boost/preprocessor/comparison.hpp +24 -0
  248. data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
  249. data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
  250. data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  251. data/ext/boost/preprocessor/comparison/less.hpp +46 -0
  252. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  253. data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
  254. data/ext/boost/preprocessor/config/limits.hpp +30 -0
  255. data/ext/boost/preprocessor/control.hpp +22 -0
  256. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  257. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  258. data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  259. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  260. data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
  261. data/ext/boost/preprocessor/debug.hpp +18 -0
  262. data/ext/boost/preprocessor/debug/assert.hpp +44 -0
  263. data/ext/boost/preprocessor/debug/line.hpp +35 -0
  264. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  265. data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
  266. data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
  267. data/ext/boost/preprocessor/detail/null.hpp +17 -0
  268. data/ext/boost/preprocessor/detail/split.hpp +35 -0
  269. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  270. data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
  271. data/ext/boost/preprocessor/expand.hpp +17 -0
  272. data/ext/boost/preprocessor/expr_if.hpp +17 -0
  273. data/ext/boost/preprocessor/facilities.hpp +23 -0
  274. data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
  275. data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
  276. data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
  277. data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
  278. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
  279. data/ext/boost/preprocessor/for.hpp +17 -0
  280. data/ext/boost/preprocessor/if.hpp +17 -0
  281. data/ext/boost/preprocessor/iteration.hpp +19 -0
  282. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  283. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  284. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  285. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  286. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  287. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  288. data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  289. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  290. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  291. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  292. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  293. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  294. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  295. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  296. data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
  297. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  298. data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
  299. data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
  300. data/ext/boost/preprocessor/iteration/local.hpp +26 -0
  301. data/ext/boost/preprocessor/iteration/self.hpp +19 -0
  302. data/ext/boost/preprocessor/library.hpp +36 -0
  303. data/ext/boost/preprocessor/limits.hpp +17 -0
  304. data/ext/boost/preprocessor/list.hpp +37 -0
  305. data/ext/boost/preprocessor/list/at.hpp +39 -0
  306. data/ext/boost/preprocessor/list/cat.hpp +42 -0
  307. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  308. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  309. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  310. data/ext/boost/preprocessor/list/enum.hpp +41 -0
  311. data/ext/boost/preprocessor/list/filter.hpp +54 -0
  312. data/ext/boost/preprocessor/list/first_n.hpp +58 -0
  313. data/ext/boost/preprocessor/list/for_each.hpp +49 -0
  314. data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
  315. data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
  316. data/ext/boost/preprocessor/list/size.hpp +58 -0
  317. data/ext/boost/preprocessor/list/to_array.hpp +123 -0
  318. data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
  319. data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
  320. data/ext/boost/preprocessor/logical.hpp +29 -0
  321. data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
  322. data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
  323. data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
  324. data/ext/boost/preprocessor/logical/nor.hpp +30 -0
  325. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  326. data/ext/boost/preprocessor/logical/or.hpp +30 -0
  327. data/ext/boost/preprocessor/logical/xor.hpp +30 -0
  328. data/ext/boost/preprocessor/max.hpp +17 -0
  329. data/ext/boost/preprocessor/min.hpp +17 -0
  330. data/ext/boost/preprocessor/punctuation.hpp +20 -0
  331. data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  332. data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
  333. data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
  334. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  335. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  336. data/ext/boost/preprocessor/repetition.hpp +32 -0
  337. data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  338. data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  339. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  340. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  341. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  342. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  343. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  344. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  345. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  346. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  347. data/ext/boost/preprocessor/selection.hpp +18 -0
  348. data/ext/boost/preprocessor/selection/max.hpp +39 -0
  349. data/ext/boost/preprocessor/selection/min.hpp +39 -0
  350. data/ext/boost/preprocessor/seq.hpp +43 -0
  351. data/ext/boost/preprocessor/seq/cat.hpp +49 -0
  352. data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
  353. data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
  354. data/ext/boost/preprocessor/seq/filter.hpp +54 -0
  355. data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
  356. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  357. data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
  358. data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
  359. data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
  360. data/ext/boost/preprocessor/seq/insert.hpp +28 -0
  361. data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
  362. data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
  363. data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
  364. data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
  365. data/ext/boost/preprocessor/seq/remove.hpp +29 -0
  366. data/ext/boost/preprocessor/seq/replace.hpp +29 -0
  367. data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
  368. data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
  369. data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
  370. data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
  371. data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
  372. data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
  373. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  374. data/ext/boost/preprocessor/slot.hpp +17 -0
  375. data/ext/boost/preprocessor/slot/counter.hpp +25 -0
  376. data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
  377. data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  378. data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  379. data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  380. data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  381. data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  382. data/ext/boost/preprocessor/tuple.hpp +28 -0
  383. data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
  384. data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
  385. data/ext/boost/preprocessor/tuple/size.hpp +28 -0
  386. data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
  387. data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
  388. data/ext/boost/preprocessor/variadic.hpp +23 -0
  389. data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
  390. data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
  391. data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
  392. data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
  393. data/ext/boost/preprocessor/while.hpp +17 -0
  394. data/ext/boost/preprocessor/wstringize.hpp +29 -0
  395. data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
  396. data/ext/common/AccountsDatabase.h +3 -4
  397. data/ext/common/AgentsStarter.cpp +12 -15
  398. data/ext/common/AgentsStarter.h +54 -120
  399. data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
  400. data/ext/common/ApplicationPool2/AppTypes.h +21 -14
  401. data/ext/common/ApplicationPool2/Common.h +36 -19
  402. data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
  403. data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
  404. data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
  405. data/ext/common/ApplicationPool2/Group.h +304 -171
  406. data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
  407. data/ext/common/ApplicationPool2/Options.h +50 -62
  408. data/ext/common/ApplicationPool2/Pool.h +285 -189
  409. data/ext/common/ApplicationPool2/Process.h +126 -115
  410. data/ext/common/ApplicationPool2/Session.h +70 -30
  411. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
  412. data/ext/common/ApplicationPool2/Socket.h +57 -43
  413. data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
  414. data/ext/common/ApplicationPool2/Spawner.h +59 -38
  415. data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
  416. data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
  417. data/ext/common/BackgroundEventLoop.cpp +48 -1
  418. data/ext/common/BackgroundEventLoop.h +3 -1
  419. data/ext/common/Constants.h +30 -8
  420. data/ext/common/DataStructures/HashedStaticString.h +103 -0
  421. data/ext/common/DataStructures/LString.h +396 -0
  422. data/ext/common/DataStructures/StringKeyTable.h +588 -0
  423. data/ext/common/EventedMessageServer.h +1 -0
  424. data/ext/common/FileDescriptor.h +5 -0
  425. data/ext/common/InstanceDirectory.h +240 -0
  426. data/ext/common/Logging.cpp +38 -13
  427. data/ext/common/Logging.h +53 -22
  428. data/ext/common/MemoryKit/mbuf.cpp +413 -0
  429. data/ext/common/MemoryKit/mbuf.h +266 -0
  430. data/ext/common/MemoryKit/palloc.cpp +337 -0
  431. data/ext/common/MemoryKit/palloc.h +121 -0
  432. data/ext/common/ResourceLocator.h +62 -6
  433. data/ext/common/SafeLibev.h +4 -4
  434. data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
  435. data/ext/common/ServerKit/Channel.h +747 -0
  436. data/ext/common/ServerKit/Client.h +166 -0
  437. data/ext/common/ServerKit/ClientRef.h +130 -0
  438. data/ext/common/ServerKit/Context.h +129 -0
  439. data/ext/common/ServerKit/Errors.h +103 -0
  440. data/ext/common/ServerKit/FdSinkChannel.h +206 -0
  441. data/ext/common/ServerKit/FdSourceChannel.h +230 -0
  442. data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
  443. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
  444. data/ext/common/ServerKit/HeaderTable.h +472 -0
  445. data/ext/common/ServerKit/Hooks.h +79 -0
  446. data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
  447. data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
  448. data/ext/common/ServerKit/HttpClient.h +94 -0
  449. data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
  450. data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
  451. data/ext/common/ServerKit/HttpRequest.h +276 -0
  452. data/ext/common/ServerKit/HttpRequestRef.h +130 -0
  453. data/ext/common/ServerKit/HttpServer.h +1152 -0
  454. data/ext/common/ServerKit/Implementation.cpp +47 -0
  455. data/ext/common/ServerKit/Server.h +1040 -0
  456. data/ext/common/ServerKit/http_parser.cpp +2259 -0
  457. data/ext/common/ServerKit/http_parser.h +330 -0
  458. data/ext/common/StaticString.h +8 -0
  459. data/ext/common/Utils.cpp +14 -12
  460. data/ext/common/Utils.h +9 -103
  461. data/ext/common/Utils/BufferedIO.h +1 -0
  462. data/ext/common/Utils/CachedFileStat.hpp +1 -7
  463. data/ext/common/Utils/DateParsing.h +379 -0
  464. data/ext/common/Utils/FileChangeChecker.h +3 -9
  465. data/ext/common/Utils/Hasher.cpp +52 -0
  466. data/ext/common/Utils/Hasher.h +58 -0
  467. data/ext/common/Utils/IOUtils.cpp +62 -62
  468. data/ext/common/Utils/JsonUtils.h +21 -0
  469. data/ext/common/Utils/OptionParsing.h +75 -0
  470. data/ext/common/Utils/StrIntUtils.cpp +112 -19
  471. data/ext/common/Utils/StrIntUtils.h +52 -12
  472. data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
  473. data/ext/common/Utils/VariantMap.h +18 -7
  474. data/ext/common/Utils/modp_b64.cpp +290 -0
  475. data/ext/common/Utils/modp_b64.h +241 -0
  476. data/ext/common/Utils/modp_b64_data.h +479 -0
  477. data/ext/common/Utils/sysqueue.h +811 -0
  478. data/ext/common/agents/Base.cpp +71 -98
  479. data/ext/common/agents/Base.h +11 -3
  480. data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
  481. data/ext/common/agents/HelperAgent/Main.cpp +899 -487
  482. data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
  484. data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
  485. data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
  486. data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
  487. data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
  488. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
  489. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
  490. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
  491. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
  492. data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
  493. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
  494. data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
  495. data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
  496. data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
  497. data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
  498. data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
  499. data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
  500. data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
  501. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  502. data/ext/common/agents/Main.cpp +107 -0
  503. data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
  504. data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
  505. data/ext/common/agents/Watchdog/AdminServer.h +390 -0
  506. data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
  507. data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
  508. data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
  509. data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
  510. data/ext/common/agents/Watchdog/Main.cpp +743 -202
  511. data/ext/libeio/eio.c +17 -0
  512. data/ext/libeio/eio.h +2 -0
  513. data/ext/nginx/CacheLocationConfig.c +177 -198
  514. data/ext/nginx/CacheLocationConfig.c.erb +35 -22
  515. data/ext/nginx/Configuration.c +402 -236
  516. data/ext/nginx/Configuration.h +12 -5
  517. data/ext/nginx/ConfigurationCommands.c +35 -15
  518. data/ext/nginx/ConfigurationCommands.c.erb +4 -4
  519. data/ext/nginx/ConfigurationFields.h +9 -5
  520. data/ext/nginx/ConfigurationFields.h.erb +3 -1
  521. data/ext/nginx/ContentHandler.c +393 -362
  522. data/ext/nginx/CreateLocationConfig.c +8 -4
  523. data/ext/nginx/CreateLocationConfig.c.erb +8 -3
  524. data/ext/nginx/MergeLocationConfig.c +36 -6
  525. data/ext/nginx/MergeLocationConfig.c.erb +42 -1
  526. data/ext/nginx/ngx_http_passenger_module.c +28 -15
  527. data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
  528. data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
  529. data/ext/oxt/implementation.cpp +92 -20
  530. data/ext/oxt/thread.hpp +5 -0
  531. data/ext/ruby/extconf.rb +3 -6
  532. data/ext/ruby/passenger_native_support.c +13 -40
  533. data/helper-scripts/download_binaries/extconf.rb +4 -4
  534. data/helper-scripts/meteor-loader.rb +12 -112
  535. data/helper-scripts/node-loader.js +3 -91
  536. data/helper-scripts/rack-loader.rb +13 -14
  537. data/helper-scripts/rack-preloader.rb +16 -17
  538. data/helper-scripts/wsgi-loader.py +11 -7
  539. data/lib/phusion_passenger.rb +100 -79
  540. data/lib/phusion_passenger/abstract_installer.rb +28 -3
  541. data/lib/phusion_passenger/admin_tools.rb +3 -3
  542. data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
  543. data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
  544. data/lib/phusion_passenger/apache2/config_options.rb +72 -22
  545. data/lib/phusion_passenger/common_library.rb +79 -14
  546. data/lib/phusion_passenger/config/about_command.rb +17 -23
  547. data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
  548. data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
  549. data/lib/phusion_passenger/config/command.rb +1 -4
  550. data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
  551. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
  552. data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
  553. data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
  554. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
  555. data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
  556. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
  557. data/lib/phusion_passenger/config/installation_utils.rb +241 -0
  558. data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
  559. data/lib/phusion_passenger/config/main.rb +43 -14
  560. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
  561. data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
  562. data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
  563. data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
  564. data/lib/phusion_passenger/config/utils.rb +64 -39
  565. data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
  566. data/lib/phusion_passenger/constants.rb +27 -6
  567. data/lib/phusion_passenger/debug_logging.rb +32 -15
  568. data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
  569. data/lib/phusion_passenger/message_client.rb +21 -22
  570. data/lib/phusion_passenger/native_support.rb +26 -31
  571. data/lib/phusion_passenger/nginx/config_options.rb +32 -19
  572. data/lib/phusion_passenger/packaging.rb +7 -3
  573. data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
  574. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
  575. data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
  576. data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
  577. data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  578. data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
  579. data/lib/phusion_passenger/request_handler.rb +47 -82
  580. data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
  581. data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
  582. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
  583. data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
  584. data/lib/phusion_passenger/standalone/command.rb +27 -275
  585. data/lib/phusion_passenger/standalone/command2.rb +292 -0
  586. data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
  587. data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
  588. data/lib/phusion_passenger/standalone/main.rb +69 -71
  589. data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
  590. data/lib/phusion_passenger/standalone/start_command.rb +406 -467
  591. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
  592. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
  593. data/lib/phusion_passenger/standalone/status_command.rb +64 -23
  594. data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
  595. data/lib/phusion_passenger/standalone/version_command.rb +1 -5
  596. data/lib/phusion_passenger/utils.rb +0 -4
  597. data/lib/phusion_passenger/utils/json.rb +70 -4
  598. data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
  599. data/lib/phusion_passenger/utils/tee_input.rb +3 -3
  600. data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
  601. data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
  602. data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
  603. data/packaging/rpm/setup-system +2 -1
  604. data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
  605. data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
  606. data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
  607. data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
  608. data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
  609. data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
  610. data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
  611. data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
  612. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
  613. data/resources/templates/standalone/config.erb +14 -16
  614. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
  615. data/test/.rspec +1 -0
  616. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
  617. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
  618. data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
  619. data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
  620. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
  621. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
  622. data/test/cxx/BufferedIOTest.cpp +40 -40
  623. data/test/cxx/CxxTestMain.cpp +4 -22
  624. data/test/cxx/DataStructures/LStringTest.cpp +275 -0
  625. data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
  626. data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
  627. data/test/cxx/MessageServerTest.cpp +62 -55
  628. data/test/cxx/RequestHandlerTest.cpp +26 -27
  629. data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
  630. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
  631. data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
  632. data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
  633. data/test/cxx/ServerKit/ServerTest.cpp +408 -0
  634. data/test/cxx/TestSupport.cpp +51 -15
  635. data/test/cxx/TestSupport.h +31 -21
  636. data/test/cxx/UnionStationTest.cpp +121 -122
  637. data/test/cxx/UtilsTest.cpp +9 -33
  638. data/test/integration_tests/apache2_tests.rb +65 -27
  639. data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
  640. data/test/integration_tests/native_packaging_spec.rb +32 -17
  641. data/test/integration_tests/nginx_tests.rb +28 -10
  642. data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
  643. data/test/integration_tests/standalone_tests.rb +232 -169
  644. data/test/ruby/debug_logging_spec.rb +44 -40
  645. data/test/ruby/rails3.0/preloader_spec.rb +1 -1
  646. data/test/ruby/rails3.1/preloader_spec.rb +1 -1
  647. data/test/ruby/rails3.2/preloader_spec.rb +1 -1
  648. data/test/ruby/rails4.0/preloader_spec.rb +1 -1
  649. data/test/ruby/rails4.1/preloader_spec.rb +1 -1
  650. data/test/ruby/request_handler_spec.rb +62 -24
  651. data/test/ruby/shared/loader_sharedspec.rb +10 -9
  652. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
  653. data/test/ruby/spec_helper.rb +2 -11
  654. data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
  655. data/test/ruby/union_station_spec.rb +45 -40
  656. data/test/ruby/utils/tee_input_spec.rb +5 -5
  657. data/test/ruby/utils_spec.rb +3 -39
  658. data/test/stub/apache2/httpd.conf.erb +5 -2
  659. data/test/stub/nginx/nginx.conf.erb +3 -1
  660. data/test/support/apache2_controller.rb +25 -25
  661. data/test/support/nginx_controller.rb +14 -14
  662. data/test/support/test_helper.rb +74 -75
  663. metadata +439 -643
  664. metadata.gz.asc +7 -7
  665. data/ext/common/MultiLibeio.cpp +0 -204
  666. data/ext/common/MultiLibeio.h +0 -67
  667. data/ext/common/ServerInstanceDir.h +0 -402
  668. data/ext/common/Utils/Base64.cpp +0 -143
  669. data/ext/common/Utils/Base64.h +0 -83
  670. data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
  671. data/ext/common/Utils/PriorityQueue.h +0 -54
  672. data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
  673. data/ext/common/Utils/fib.c +0 -699
  674. data/ext/common/Utils/fib.h +0 -101
  675. data/ext/common/Utils/fibpriv.h +0 -67
  676. data/ext/common/agents/EnvPrinter.c +0 -16
  677. data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
  678. data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
  679. data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
  680. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
  681. data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
  682. data/ext/common/agents/SpawnPreparer.cpp +0 -206
  683. data/ext/common/agents/TempDirToucher.c +0 -383
  684. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
  685. data/helper-scripts/classic-rails-loader.rb +0 -166
  686. data/helper-scripts/classic-rails-preloader.rb +0 -193
  687. data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
  688. data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
  689. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
  690. data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
  691. data/lib/phusion_passenger/standalone/config_file.rb +0 -119
  692. data/lib/phusion_passenger/standalone/help_command.rb +0 -57
  693. data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
  694. data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
  695. data/lib/phusion_passenger/standalone/utils.rb +0 -58
  696. data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
  697. data/packaging/debian/LICENSE.md +0 -19
  698. data/packaging/debian/README.md +0 -320
  699. data/packaging/debian/Vagrantfile +0 -25
  700. data/packaging/debian/build +0 -210
  701. data/packaging/debian/debian_specs/nginx/changelog +0 -1989
  702. data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
  703. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
  704. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
  705. data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
  706. data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
  707. data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
  708. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
  709. data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
  710. data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
  711. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
  712. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
  713. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
  714. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
  715. data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
  716. data/packaging/debian/debian_specs/nginx/control.erb +0 -226
  717. data/packaging/debian/debian_specs/nginx/copyright +0 -196
  718. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
  719. data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
  720. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
  721. data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
  722. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
  723. data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
  724. data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
  725. data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
  726. data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
  727. data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
  728. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
  729. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
  730. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
  731. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
  732. data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
  733. data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
  734. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
  735. data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
  736. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
  737. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
  738. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
  739. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
  740. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
  741. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
  742. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
  743. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
  744. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
  745. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
  746. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
  747. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
  748. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
  749. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
  750. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
  751. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
  752. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
  753. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
  754. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
  755. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
  756. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
  757. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
  758. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
  759. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
  760. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
  761. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
  762. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
  763. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
  764. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
  765. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
  766. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
  767. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
  768. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
  769. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
  770. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
  771. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
  772. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
  773. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
  774. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
  775. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
  776. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
  777. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
  778. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
  779. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
  780. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
  781. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
  782. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
  783. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
  784. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
  785. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
  786. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
  787. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
  788. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
  789. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
  790. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
  791. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
  792. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
  793. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
  794. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
  795. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
  796. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
  797. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
  798. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
  799. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
  800. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
  801. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
  802. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
  803. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
  804. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
  805. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
  806. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
  807. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
  808. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
  809. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
  810. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
  811. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
  812. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
  813. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
  814. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
  815. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
  816. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
  817. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
  818. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
  819. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
  820. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
  821. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
  822. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
  823. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
  824. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
  825. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
  826. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
  827. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
  828. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
  829. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
  830. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
  831. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
  832. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
  833. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
  834. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
  835. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
  836. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
  837. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
  838. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
  839. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
  840. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
  841. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
  842. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
  843. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
  844. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
  845. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
  846. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
  847. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
  848. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
  849. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
  850. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
  851. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
  852. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
  853. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
  854. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
  855. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
  856. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
  857. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
  858. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
  859. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
  860. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
  861. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
  862. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
  863. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
  864. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
  865. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
  866. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
  867. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
  868. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
  869. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
  870. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
  871. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
  872. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
  873. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
  874. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
  875. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
  876. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
  877. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
  878. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
  879. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
  880. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
  881. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
  882. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
  883. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
  884. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
  885. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
  886. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
  887. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
  888. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
  889. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
  890. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
  891. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
  892. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
  893. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
  894. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
  895. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
  896. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
  897. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
  898. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
  899. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
  900. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
  901. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
  902. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
  903. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
  904. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
  905. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
  906. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
  907. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
  908. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
  909. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
  910. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
  911. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
  912. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
  913. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
  914. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
  915. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
  916. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
  917. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
  918. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
  919. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
  920. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
  921. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
  922. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
  923. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
  924. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
  925. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
  926. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
  927. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
  928. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
  929. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
  930. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
  931. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
  932. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
  933. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
  934. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
  935. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
  936. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
  937. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
  938. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
  939. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
  940. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
  941. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
  942. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
  943. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
  944. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
  945. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
  946. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
  947. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
  948. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
  949. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
  950. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
  951. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
  952. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
  953. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
  954. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
  955. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
  956. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
  957. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
  958. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
  959. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
  960. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
  961. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
  962. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
  963. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
  964. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
  965. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
  966. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
  967. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
  968. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
  969. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
  970. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
  971. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
  972. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
  973. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
  974. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
  975. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
  976. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
  977. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
  978. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
  979. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
  980. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
  981. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
  982. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
  983. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
  984. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
  985. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
  986. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
  987. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
  988. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
  989. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
  990. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
  991. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
  992. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
  993. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
  994. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
  995. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
  996. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
  997. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
  998. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
  999. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
  1000. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
  1001. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
  1002. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
  1003. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
  1004. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
  1005. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
  1006. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
  1007. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
  1008. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
  1009. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
  1010. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
  1011. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
  1012. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
  1013. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
  1014. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
  1015. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
  1016. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
  1017. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
  1018. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
  1019. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
  1020. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
  1021. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
  1022. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
  1023. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
  1024. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
  1025. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
  1026. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
  1027. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
  1028. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
  1029. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
  1030. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
  1031. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
  1032. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
  1033. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
  1034. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
  1035. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
  1036. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
  1037. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
  1038. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
  1039. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
  1040. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
  1041. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
  1042. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
  1043. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
  1044. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
  1045. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
  1046. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
  1047. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
  1048. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
  1049. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
  1050. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
  1051. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
  1052. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
  1053. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
  1054. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
  1055. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
  1056. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
  1057. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
  1058. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
  1059. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
  1060. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
  1061. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
  1062. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
  1063. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
  1064. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
  1065. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
  1066. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
  1067. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
  1068. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
  1069. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
  1070. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
  1071. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
  1072. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
  1073. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
  1074. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
  1075. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
  1076. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
  1077. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
  1078. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
  1079. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
  1080. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
  1081. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
  1082. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
  1083. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
  1084. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
  1085. data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
  1086. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
  1087. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
  1088. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
  1089. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
  1090. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
  1091. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
  1092. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
  1093. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
  1094. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
  1095. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
  1096. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
  1097. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
  1098. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
  1099. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
  1100. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
  1101. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
  1102. data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
  1103. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
  1104. data/packaging/debian/debian_specs/nginx/patches/series +0 -1
  1105. data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
  1106. data/packaging/debian/debian_specs/nginx/source/format +0 -1
  1107. data/packaging/debian/debian_specs/nginx/tests/control +0 -4
  1108. data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
  1109. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
  1110. data/packaging/debian/debian_specs/nginx/watch +0 -3
  1111. data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
  1112. data/packaging/debian/debian_specs/passenger/changelog +0 -316
  1113. data/packaging/debian/debian_specs/passenger/compat +0 -1
  1114. data/packaging/debian/debian_specs/passenger/control.erb +0 -123
  1115. data/packaging/debian/debian_specs/passenger/copyright +0 -385
  1116. data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
  1117. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
  1118. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
  1119. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
  1120. data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
  1121. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
  1122. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
  1123. data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
  1124. data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
  1125. data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
  1126. data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
  1127. data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
  1128. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
  1129. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
  1130. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
  1131. data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
  1132. data/packaging/debian/debian_specs/passenger/source/format +0 -1
  1133. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
  1134. data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
  1135. data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
  1136. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
  1137. data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
  1138. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
  1139. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
  1140. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
  1141. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
  1142. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
  1143. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
  1144. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
  1145. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
  1146. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
  1147. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
  1148. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
  1149. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
  1150. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
  1151. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
  1152. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
  1153. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  1154. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
  1155. data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
  1156. data/packaging/debian/docker_images/Makefile +0 -38
  1157. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  1158. data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
  1159. data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
  1160. data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
  1161. data/packaging/debian/docker_images/buildbox/install.sh +0 -85
  1162. data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
  1163. data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
  1164. data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
  1165. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
  1166. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
  1167. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
  1168. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
  1169. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
  1170. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
  1171. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
  1172. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
  1173. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
  1174. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
  1175. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
  1176. data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
  1177. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
  1178. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
  1179. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
  1180. data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
  1181. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
  1182. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
  1183. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
  1184. data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
  1185. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
  1186. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
  1187. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
  1188. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
  1189. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
  1190. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
  1191. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
  1192. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
  1193. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
  1194. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
  1195. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
  1196. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
  1197. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
  1198. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
  1199. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
  1200. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
  1201. data/packaging/debian/internal/build/Rakefile +0 -235
  1202. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
  1203. data/packaging/debian/internal/build/build-source-package.rb +0 -121
  1204. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
  1205. data/packaging/debian/internal/build/rakefile_support.rb +0 -96
  1206. data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
  1207. data/packaging/debian/internal/build/setup-environment.sh +0 -29
  1208. data/packaging/debian/internal/lib/distro_info.rb +0 -82
  1209. data/packaging/debian/internal/lib/distro_info.sh +0 -303
  1210. data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
  1211. data/packaging/debian/internal/lib/library.sh +0 -83
  1212. data/packaging/debian/internal/lib/preprocessor.rb +0 -173
  1213. data/packaging/debian/internal/lib/tracking.rb +0 -95
  1214. data/packaging/debian/internal/lib/tracking_category.rb +0 -45
  1215. data/packaging/debian/internal/lib/tracking_database.rb +0 -132
  1216. data/packaging/debian/internal/lib/tracking_task.rb +0 -148
  1217. data/packaging/debian/internal/lib/utils.rb +0 -78
  1218. data/packaging/debian/internal/publish/Rakefile +0 -97
  1219. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
  1220. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
  1221. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
  1222. data/packaging/debian/internal/publish/preinit.sh +0 -7
  1223. data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
  1224. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
  1225. data/packaging/debian/internal/scripts/initccache.sh +0 -35
  1226. data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
  1227. data/packaging/debian/internal/scripts/my_init +0 -340
  1228. data/packaging/debian/internal/scripts/pin_certificates +0 -34
  1229. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
  1230. data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
  1231. data/packaging/debian/internal/scripts/setuser +0 -31
  1232. data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
  1233. data/packaging/debian/internal/shell/preinit.sh +0 -28
  1234. data/packaging/debian/internal/shell/sudoers.conf +0 -1
  1235. data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
  1236. data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
  1237. data/packaging/debian/internal/test/apache/vhost.conf +0 -17
  1238. data/packaging/debian/internal/test/misc/config.json +0 -15
  1239. data/packaging/debian/internal/test/misc/hosts.conf +0 -4
  1240. data/packaging/debian/internal/test/misc/init.sh +0 -25
  1241. data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
  1242. data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
  1243. data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
  1244. data/packaging/debian/internal/test/misc/test_support.rb +0 -61
  1245. data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
  1246. data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
  1247. data/packaging/debian/internal/test/test.sh +0 -141
  1248. data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
  1249. data/packaging/debian/jenkins/publish/publish.sh +0 -69
  1250. data/packaging/debian/jenkins/test/test.sh +0 -63
  1251. data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
  1252. data/packaging/debian/publish +0 -172
  1253. data/packaging/debian/shell +0 -116
  1254. data/packaging/debian/test +0 -142
  1255. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
  1256. data/test/cxx/Base64Test.cpp +0 -50
  1257. data/test/cxx/FileBackedPipeTest.cpp +0 -626
  1258. data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
  1259. data/test/cxx/ScgiRequestParserTest.cpp +0 -423
  1260. data/test/cxx/ServerInstanceDirTest.cpp +0 -175
  1261. data/test/ruby/admin_tools_spec.rb +0 -360
  1262. data/test/ruby/classic_rails/loader_spec.rb +0 -46
  1263. data/test/ruby/classic_rails/preloader_spec.rb +0 -52
  1264. data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
  1265. data/test/stub/rails2.3/Rakefile +0 -10
  1266. data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
  1267. data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
  1268. data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
  1269. data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
  1270. data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
  1271. data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
  1272. data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
  1273. data/test/stub/rails2.3/config/boot.rb +0 -110
  1274. data/test/stub/rails2.3/config/database.yml +0 -19
  1275. data/test/stub/rails2.3/config/environment.rb +0 -62
  1276. data/test/stub/rails2.3/config/environments/development.rb +0 -17
  1277. data/test/stub/rails2.3/config/environments/production.rb +0 -18
  1278. data/test/stub/rails2.3/config/environments/staging.rb +0 -18
  1279. data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
  1280. data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
  1281. data/test/stub/rails2.3/config/routes.rb +0 -35
  1282. data/test/stub/rails2.3/log/.gitignore +0 -1
  1283. data/test/stub/rails2.3/public/.gitignore +0 -1
  1284. data/test/stub/rails2.3/script/about +0 -3
  1285. data/test/stub/rails2.3/script/console +0 -3
  1286. data/test/stub/rails2.3/script/dbconsole +0 -3
  1287. data/test/stub/rails2.3/script/destroy +0 -3
  1288. data/test/stub/rails2.3/script/generate +0 -3
  1289. data/test/stub/rails2.3/script/performance/benchmarker +0 -3
  1290. data/test/stub/rails2.3/script/performance/profiler +0 -3
  1291. data/test/stub/rails2.3/script/performance/request +0 -3
  1292. data/test/stub/rails2.3/script/plugin +0 -3
  1293. data/test/stub/rails2.3/script/process/inspector +0 -3
  1294. data/test/stub/rails2.3/script/process/reaper +0 -3
  1295. data/test/stub/rails2.3/script/process/spawner +0 -3
  1296. data/test/stub/rails2.3/script/runner +0 -3
  1297. data/test/stub/rails2.3/script/server +0 -3
  1298. data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
  1299. data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
  1300. data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
  1301. data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -1,37 +0,0 @@
1
- # Change Log
2
- All notable changes to this project will be documented in this file.
3
-
4
- ## Unreleased
5
- ### Added
6
- - New feature: Allow setting the default sort criterion using the
7
- `fancyindex_default_sort` configuration directive. (Patch by
8
- Алексей Урбанский).
9
- - New feature: Allos changing the maximum length of file names, using
10
- the `fancyindex_name_length` configuration directive. (Patch by
11
- Martin Herkt).
12
- ### Changed
13
- - Renames `NEWS.rst` to `CHANGELOG.md`, which follows the recommendations
14
- from [Keep a Change Log](http://keepachangelog.com/).
15
-
16
- ## 0.3.4 - 2014-09-03
17
- ### Added
18
- - Viewport is now defined in the generated HTML, which works better
19
- for mobile devices.
20
- ### Changed
21
- - Even-odd row styling moved to the CSS using :nth-child(). This
22
- makes the HTML served to clients smaller.
23
-
24
- ## 0.3.3 - 2013-10-25
25
- ### Added
26
- - New feature: table headers in the default template are now clickable
27
- to set the sorting criteria and direction of the index entries.
28
- (https://github.com/aperezdc/ngx-fancyindex/issues/7)
29
-
30
- ## 0.3.2 - 2013-06-05
31
- ### Fixed
32
- - Solved a bug that would leave certain clients stalled forever.
33
- - Improved handling of subrequests for non-builtin headers/footers.
34
-
35
- ## 0.3.1 - 2011-04-04
36
- ### Added
37
- - `NEWS.rst` file, to act as change log.
@@ -1,24 +0,0 @@
1
- # Fancy Index module Hacking HOW-TO
2
-
3
- ## How to modify the template
4
-
5
- The template is in the `template.html` file. Note that comment markers are
6
- used to control how the `template.awk` Awk script generates the C header
7
- which gets ultimately included in the compiled object code. Comment markers
8
- have the `<!-- var identifier -->` format. Here `identifier` must be
9
- a valid C identifier. All the text following the marker until the next
10
- marker will be flattened into a C string.
11
-
12
- If the identifier is `NONE` (capitalized) the text from that marker up to
13
- the next marker will be discarded.
14
-
15
-
16
- ## Regenerating the C header
17
-
18
- You will need Awk. I hope any decent implementation will do, but the GNU one
19
- is known to work flawlessly. Just do:
20
-
21
- $ awk -f template.awk template.html > template.h
22
-
23
- If your copy of `awk` is not the GNU implementation, you will need to
24
- install it and use `gawk` instead in the command line above.
@@ -1,20 +0,0 @@
1
- Redistribution and use in source and binary forms, with or without
2
- modification, are permitted provided that the following conditions
3
- are met:
4
- 1. Redistributions of source code must retain the above copyright
5
- notice, this list of conditions and the following disclaimer.
6
- 2. Redistributions in binary form must reproduce the above copyright
7
- notice, this list of conditions and the following disclaimer in the
8
- documentation and/or other materials provided with the distribution.
9
-
10
- THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
11
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
12
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
13
- ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
14
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
15
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
16
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
19
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
20
- SUCH DAMAGE.
@@ -1,182 +0,0 @@
1
- ========================
2
- Nginx Fancy Index module
3
- ========================
4
-
5
- .. image:: https://drone.io/github.com/aperezdc/ngx-fancyindex/status.png
6
- :target: https://drone.io/github.com/aperezdc/ngx-fancyindex/latest
7
- :alt: Build Status
8
-
9
- .. contents::
10
-
11
- The Fancy Index module makes possible the generation of file listings, like
12
- the built-in `autoindex <http://wiki.nginx.org/NginxHttpAutoindexModule>`__
13
- module does, but adding a touch of style. This is possible because the module
14
- module allows a certain degree of customization of the generated content:
15
-
16
- * Custom headers. Either local or stored remotely.
17
- * Custom footers. Either local or stored remotely.
18
- * Add you own CSS style rules.
19
- * Allow choosing to sort elements by name (default), modification time, or
20
- size; both ascending (default), or descending.
21
-
22
- This module is designed to work with Nginx_, a high performance open source web
23
- server written by `Igor Sysoev <http://sysoev.ru>`__.
24
-
25
-
26
- Requirements
27
- ============
28
-
29
- You will need the sources for Nginx_. Any version starting from the 0.7
30
- series onwards will work. Note that the modules *might* compile with
31
- versions in the 0.6 series by applying ``nginx-0.6-support.patch``, but this
32
- is unsupported (YMMV).
33
-
34
-
35
- Building
36
- ========
37
-
38
- 1. Unpack the Nginx_ sources::
39
-
40
- $ gunzip -c nginx-?.?.?.tar.gz | tar -xvf -
41
-
42
- 2. Unpack the sources for the fancy indexing module::
43
-
44
- $ gunzip -c nginx-fancyindex-?.?.?.tar.gz | tar -xvf -
45
-
46
- 3. Change to the directory which contains the Nginx_ sources, run the
47
- configuration script with the desired options and be sure to put an
48
- ``--add-module`` flag pointing to the directory which contains the source
49
- of the fancy indexing module::
50
-
51
- $ cd nginx-?.?.?
52
- $ ./configure --add-module=../nginx-fancyindex-?.?.? [extra desired options]
53
-
54
- 4. Build and install the software::
55
-
56
- $ make
57
-
58
- And then, as ``root``::
59
-
60
- # make install
61
-
62
- 5. Configure Nginx_ by using the modules' configuration directives_.
63
-
64
-
65
- Example
66
- =======
67
-
68
- You can test the default built-in style by adding the following lines into
69
- a ``server`` section in your Nginx_ configuration file::
70
-
71
- location / {
72
- fancyindex on; # Enable fancy indexes.
73
- fancyindex_exact_size off; # Output human-readable file sizes.
74
- }
75
-
76
-
77
- Advanced Theming
78
- ~~~~~~~~~~~~~~~~
79
-
80
- For a more elaborate example using `fancyindex_header`_ and
81
- `fancyindex_footer`_ you can check `nice theme
82
- <https://github.com/TheInsomniac/Nginx-Fancyindex-Theme>`__
83
- designed by `@TheInsomniac <https://github.com/TheInsomniac>`__.
84
-
85
-
86
- Directives
87
- ==========
88
-
89
- fancyindex
90
- ~~~~~~~~~~
91
- :Syntax: *fancyindex* [*on* | *off*]
92
- :Default: fancyindex off
93
- :Context: http, server, location
94
- :Description:
95
- Enables or disables fancy directory indexes.
96
-
97
- fancyindex_default_sort
98
- ~~~~~~~~~~~~~~~~~~~~~~~
99
- :Syntax: *fancyindex_default_sort* [*name* | *size* | *date* | *name_desc* | *size_desc* | *date_desc*]
100
- :Default: fancyindex_default_sort name
101
- :Context: http, server, location
102
- :Description:
103
- Defines sorting criterion by default.
104
-
105
- fancyindex_css_href
106
- ~~~~~~~~~~~~~~~~~~~
107
- :Syntax: *fancyindex_css_href uri*
108
- :Default: fancyindex_css_href ""
109
- :Context: http, server, location
110
- :Description:
111
- Allows inserting a link to a CSS style sheet in generated listings. The
112
- provided *uri* parameter will be inserted as-is in a ``<link>`` HTML tag.
113
- The link is inserted after the built-in CSS rules, so you can override the
114
- default styles.
115
-
116
- fancyindex_exact_size
117
- ~~~~~~~~~~~~~~~~~~~~~
118
- :Syntax: *fancyindex_exact_size* [*on* | *off*]
119
- :Default: fancyindex_exact_size on
120
- :Context: http, server, location
121
- :Description:
122
- Defines how to represent file sizes in the directory listing; either
123
- accurately, or rounding off to the kilobyte, the megabyte and the
124
- gigabyte.
125
-
126
- fancyindex_name_length
127
- ~~~~~~~~~~~~~~~~~~~~~~
128
- :Syntax: *fancyindex_name_length length*
129
- :Default: fancyindex_name_length 50
130
- :Context: http, server, location
131
- :Description:
132
- Defines the maximum file name length limit in bytes.
133
-
134
- fancyindex_footer
135
- ~~~~~~~~~~~~~~~~~
136
- :Syntax: *fancyindex_footer path*
137
- :Default: fancyindex_footer ""
138
- :Context: http, server, location
139
- :Description:
140
- Specifies which file should be inserted at the foot of directory listings.
141
- If set to an empty string, the default footer supplied by the module will
142
- be sent.
143
-
144
- .. warning:: When inserting custom header/footer a subrequest will be
145
- issued so potentially any URL can be used as source for them. Although it
146
- will work with external URLs, only using internal ones is supported.
147
- External URLs are totally untested and using them will make Nginx_ block
148
- while waiting for the subrequest to complete. If you feel like external
149
- header/footer is a must-have for you, please
150
- `let me know <mailto:aperez@igalia.com>`__.
151
-
152
- fancyindex_header
153
- ~~~~~~~~~~~~~~~~~
154
- :Syntax: *fancyindex_header path*
155
- :Default: fancyindex_header ""
156
- :Context: http, server, location
157
- :Description:
158
- Specifies which file should be inserted at the head of directory listings.
159
- If set to an empty string, the default header supplied by the module will
160
- be sent.
161
-
162
- fancyindex_ignore
163
- ~~~~~~~~~~~~~~~~~
164
- :Syntax: *fancyindex_ignore string1 [string2 [... stringN]]*
165
- :Default: No default.
166
- :Context: http, server, location
167
- :Description:
168
- Specifies a list of file names which will be not be shown in generated
169
- listings. If Nginx was built with PCRE support strings are interpreted as
170
- regular expressions.
171
-
172
- fancyindex_localtime
173
- ~~~~~~~~~~~~~~~~~~~~
174
- :Syntax: *fancyindex_localtime* [*on* | *off*]
175
- :Default: fancyindex_localtime off
176
- :Context: http, server, location
177
- :Description:
178
- Enables showing file times as local time. Default is “off” (GMT time).
179
-
180
- .. _nginx: http://nginx.net
181
-
182
- .. vim:ft=rst:spell:spelllang=en:
@@ -1,8 +0,0 @@
1
- # vim:ft=sh:
2
- ngx_addon_name=ngx_http_fancyindex_module
3
-
4
- # XXX: Insert fancyindex module *after* index module!
5
- #
6
- HTTP_MODULES=`echo "${HTTP_MODULES}" | sed -e \
7
- 's/ngx_http_index_module/ngx_http_fancyindex_module ngx_http_index_module/'`
8
- NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fancyindex_module.c"
@@ -1,23 +0,0 @@
1
- === modified file 'ngx_http_fancyindex_module.c'
2
- --- ngx_http_fancyindex_module.c 2008-09-11 17:55:52 +0000
3
- +++ ngx_http_fancyindex_module.c 2008-12-10 01:33:43 +0000
4
- @@ -383,7 +383,7 @@
5
- entry->mtime = ngx_de_mtime(&dir);
6
- entry->size = ngx_de_size(&dir);
7
- entry->utf_len = (r->utf8)
8
- - ? ngx_utf8_length(entry->name.data, entry->name.len)
9
- + ? ngx_utf_length(entry->name.data, entry->name.len)
10
- : len;
11
- }
12
-
13
- @@ -478,8 +478,7 @@
14
- copy = NGX_HTTP_FANCYINDEX_NAME_LEN + 1;
15
- }
16
-
17
- - b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data,
18
- - copy, entry[i].name.len);
19
- + b->last = ngx_utf_cpystrn(b->last, entry[i].name.data, copy);
20
- last = b->last;
21
-
22
- } else {
23
-
@@ -1,1305 +0,0 @@
1
- /*
2
- * ngx_http_fancyindex_module.c
3
- * Copyright © 2007-2013 Adrian Perez <aperez@igalia.com>
4
- *
5
- * Module used for fancy indexing of directories. Features and differences
6
- * with the stock nginx autoindex module:
7
- *
8
- * - Output is a table instead of a <pre> element with embedded <a> links.
9
- * - Header and footer may be added to every generated directory listing.
10
- * - Default header and/or footer are generated if custom ones are not
11
- * configured. Files used for header and footer can only be local path
12
- * names (i.e. you cannot insert the result of a subrequest.)
13
- * - Proper HTML is generated: it should validate both as XHTML 1.0 Strict
14
- * and HTML 4.01.
15
- *
16
- * Base functionality heavy based upon the stock nginx autoindex module,
17
- * which in turn was made by Igor Sysoev, like the majority of nginx.
18
- *
19
- * Distributed under terms of the BSD license.
20
- */
21
-
22
- #include <ngx_config.h>
23
- #include <ngx_core.h>
24
- #include <ngx_http.h>
25
- #include <ngx_log.h>
26
-
27
- #include "template.h"
28
-
29
- #if defined(__GNUC__) && (__GNUC__ >= 3)
30
- # define ngx_force_inline __attribute__((__always_inline__))
31
- #else /* !__GNUC__ */
32
- # define ngx_force_inline
33
- #endif /* __GNUC__ */
34
-
35
-
36
-
37
- /**
38
- * Configuration structure for the fancyindex module. The configuration
39
- * commands defined in the module do fill in the members of this structure.
40
- */
41
- typedef struct {
42
- ngx_flag_t enable; /**< Module is enabled. */
43
- ngx_uint_t default_sort; /**< Default sort criterion. */
44
- ngx_flag_t localtime; /**< File mtime dates are sent in local time. */
45
- ngx_flag_t exact_size; /**< Sizes are sent always in bytes. */
46
- ngx_uint_t name_length; /**< Maximum length of file names in bytes. */
47
-
48
- ngx_str_t header; /**< File name for header, or empty if none. */
49
- ngx_str_t footer; /**< File name for footer, or empty if none. */
50
- ngx_str_t css_href; /**< Link to a CSS stylesheet, or empty if none. */
51
-
52
- ngx_array_t *ignore; /**< List of files to ignore in listings. */
53
- } ngx_http_fancyindex_loc_conf_t;
54
-
55
- #define NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME 0
56
- #define NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE 1
57
- #define NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE 2
58
- #define NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC 3
59
- #define NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC 4
60
- #define NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC 5
61
-
62
- static ngx_conf_enum_t ngx_http_fancyindex_sort_criteria[] = {
63
- { ngx_string("name"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME },
64
- { ngx_string("size"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE },
65
- { ngx_string("date"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE },
66
- { ngx_string("name_desc"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC },
67
- { ngx_string("size_desc"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC },
68
- { ngx_string("date_desc"), NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC },
69
- { ngx_null_string, 0 }
70
- };
71
-
72
-
73
- #define NGX_HTTP_FANCYINDEX_PREALLOCATE 50
74
-
75
-
76
- /**
77
- * Calculates the length of a NULL-terminated string. It is ugly having to
78
- * remember to substract 1 from the sizeof result.
79
- */
80
- #define ngx_sizeof_ssz(_s) (sizeof(_s) - 1)
81
-
82
-
83
- /**
84
- * Copy a static zero-terminated string. Useful to output template
85
- * string pieces into a temporary buffer.
86
- */
87
- #define ngx_cpymem_ssz(_p, _t) \
88
- (ngx_cpymem((_p), (_t), sizeof(_t) - 1))
89
-
90
- /**
91
- * Copy a ngx_str_t.
92
- */
93
- #define ngx_cpymem_str(_p, _s) \
94
- (ngx_cpymem((_p), (_s).data, (_s).len))
95
-
96
- /**
97
- * Check whether a particular bit is set in a particular value.
98
- */
99
- #define ngx_has_flag(_where, _what) \
100
- (((_where) & (_what)) == (_what))
101
-
102
-
103
-
104
-
105
- typedef struct {
106
- ngx_str_t name;
107
- size_t utf_len;
108
- ngx_uint_t escape;
109
- ngx_uint_t dir;
110
- time_t mtime;
111
- off_t size;
112
- } ngx_http_fancyindex_entry_t;
113
-
114
-
115
-
116
- static int ngx_libc_cdecl
117
- ngx_http_fancyindex_cmp_entries_name_desc(const void *one, const void *two);
118
- static int ngx_libc_cdecl
119
- ngx_http_fancyindex_cmp_entries_size_desc(const void *one, const void *two);
120
- static int ngx_libc_cdecl
121
- ngx_http_fancyindex_cmp_entries_mtime_desc(const void *one, const void *two);
122
- static int ngx_libc_cdecl
123
- ngx_http_fancyindex_cmp_entries_name_asc(const void *one, const void *two);
124
- static int ngx_libc_cdecl
125
- ngx_http_fancyindex_cmp_entries_size_asc(const void *one, const void *two);
126
- static int ngx_libc_cdecl
127
- ngx_http_fancyindex_cmp_entries_mtime_asc(const void *one, const void *two);
128
-
129
- static ngx_int_t ngx_http_fancyindex_error(ngx_http_request_t *r,
130
- ngx_dir_t *dir, ngx_str_t *name);
131
-
132
- static ngx_int_t ngx_http_fancyindex_init(ngx_conf_t *cf);
133
-
134
- static void *ngx_http_fancyindex_create_loc_conf(ngx_conf_t *cf);
135
-
136
- static char *ngx_http_fancyindex_merge_loc_conf(ngx_conf_t *cf,
137
- void *parent, void *child);
138
-
139
- static char *ngx_http_fancyindex_ignore(ngx_conf_t *cf,
140
- ngx_command_t *cmd,
141
- void *conf);
142
-
143
- static uintptr_t
144
- ngx_fancyindex_escape_uri(u_char *dst, u_char*src, size_t size);
145
-
146
- /*
147
- * These are used only once per handler invocation. We can tell GCC to
148
- * inline them always, if possible (see how ngx_force_inline is defined
149
- * above).
150
- */
151
- static ngx_inline ngx_buf_t*
152
- make_header_buf(ngx_http_request_t *r, const ngx_str_t css_href)
153
- ngx_force_inline;
154
-
155
- static ngx_inline ngx_buf_t*
156
- make_footer_buf(ngx_http_request_t *r)
157
- ngx_force_inline;
158
-
159
-
160
-
161
- static ngx_command_t ngx_http_fancyindex_commands[] = {
162
-
163
- { ngx_string("fancyindex"),
164
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
165
- ngx_conf_set_flag_slot,
166
- NGX_HTTP_LOC_CONF_OFFSET,
167
- offsetof(ngx_http_fancyindex_loc_conf_t, enable),
168
- NULL },
169
-
170
- { ngx_string("fancyindex_default_sort"),
171
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
172
- ngx_conf_set_enum_slot,
173
- NGX_HTTP_LOC_CONF_OFFSET,
174
- offsetof(ngx_http_fancyindex_loc_conf_t, default_sort),
175
- &ngx_http_fancyindex_sort_criteria },
176
-
177
- { ngx_string("fancyindex_localtime"),
178
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
179
- ngx_conf_set_flag_slot,
180
- NGX_HTTP_LOC_CONF_OFFSET,
181
- offsetof(ngx_http_fancyindex_loc_conf_t, localtime),
182
- NULL },
183
-
184
- { ngx_string("fancyindex_exact_size"),
185
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
186
- ngx_conf_set_flag_slot,
187
- NGX_HTTP_LOC_CONF_OFFSET,
188
- offsetof(ngx_http_fancyindex_loc_conf_t, exact_size),
189
- NULL },
190
-
191
- { ngx_string("fancyindex_name_length"),
192
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
193
- ngx_conf_set_num_slot,
194
- NGX_HTTP_LOC_CONF_OFFSET,
195
- offsetof(ngx_http_fancyindex_loc_conf_t, name_length),
196
- NULL },
197
-
198
- { ngx_string("fancyindex_header"),
199
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
200
- ngx_conf_set_str_slot,
201
- NGX_HTTP_LOC_CONF_OFFSET,
202
- offsetof(ngx_http_fancyindex_loc_conf_t, header),
203
- NULL },
204
-
205
- { ngx_string("fancyindex_footer"),
206
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
207
- ngx_conf_set_str_slot,
208
- NGX_HTTP_LOC_CONF_OFFSET,
209
- offsetof(ngx_http_fancyindex_loc_conf_t, footer),
210
- NULL },
211
-
212
- { ngx_string("fancyindex_css_href"),
213
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
214
- ngx_conf_set_str_slot,
215
- NGX_HTTP_LOC_CONF_OFFSET,
216
- offsetof(ngx_http_fancyindex_loc_conf_t, css_href),
217
- NULL },
218
-
219
- { ngx_string("fancyindex_ignore"),
220
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
221
- ngx_http_fancyindex_ignore,
222
- NGX_HTTP_LOC_CONF_OFFSET,
223
- 0,
224
- NULL },
225
-
226
- ngx_null_command
227
- };
228
-
229
-
230
- static ngx_http_module_t ngx_http_fancyindex_module_ctx = {
231
- NULL, /* preconfiguration */
232
- ngx_http_fancyindex_init, /* postconfiguration */
233
-
234
- NULL, /* create main configuration */
235
- NULL, /* init main configuration */
236
-
237
- NULL, /* create server configuration */
238
- NULL, /* merge server configuration */
239
-
240
- ngx_http_fancyindex_create_loc_conf, /* create location configration */
241
- ngx_http_fancyindex_merge_loc_conf /* merge location configration */
242
- };
243
-
244
-
245
- ngx_module_t ngx_http_fancyindex_module = {
246
- NGX_MODULE_V1,
247
- &ngx_http_fancyindex_module_ctx, /* module context */
248
- ngx_http_fancyindex_commands, /* module directives */
249
- NGX_HTTP_MODULE, /* module type */
250
- NULL, /* init master */
251
- NULL, /* init module */
252
- NULL, /* init process */
253
- NULL, /* init thread */
254
- NULL, /* exit thread */
255
- NULL, /* exit process */
256
- NULL, /* exit master */
257
- NGX_MODULE_V1_PADDING
258
- };
259
-
260
-
261
-
262
- static const ngx_str_t css_href_pre =
263
- ngx_string("<link rel=\"stylesheet\" href=\"");
264
- static const ngx_str_t css_href_post =
265
- ngx_string("\" type=\"text/css\"/>\n");
266
-
267
-
268
- static uintptr_t
269
- ngx_fancyindex_escape_uri(u_char *dst, u_char *src, size_t size)
270
- {
271
- /*
272
- * The ngx_escape_uri() function will not escape colons or the
273
- * ? character, which signals the beginning of the query string.
274
- * So we handle those characters ourselves.
275
- *
276
- * TODO: Get rid of this once ngx_escape_uri() works as expected!
277
- */
278
-
279
- u_int escapes = 0;
280
- u_char *psrc = src;
281
- size_t psize = size;
282
-
283
- while (psize--) {
284
- switch (*psrc++) {
285
- case ':':
286
- case '?':
287
- escapes++;
288
- break;
289
- }
290
- }
291
-
292
- if (dst == NULL) {
293
- return escapes + ngx_escape_uri(NULL, src, size, NGX_ESCAPE_HTML);
294
- }
295
- else if (escapes == 0) {
296
- /* No need to do extra escaping, avoid the temporary buffer */
297
- return ngx_escape_uri(dst, src, size, NGX_ESCAPE_HTML);
298
- }
299
- else {
300
- uintptr_t uescapes = ngx_escape_uri(NULL, src, size, NGX_ESCAPE_HTML);
301
- size_t bufsz = size + 2 * uescapes;
302
-
303
- /*
304
- * GCC and CLANG both support stack-allocated variable length
305
- * arrays. Take advantage of that to avoid a malloc-free cycle.
306
- */
307
- #if defined(__GNUC__) || defined(__clang__)
308
- u_char cbuf[bufsz];
309
- u_char *buf = cbuf;
310
- #else /* __GNUC__ || __clang__ */
311
- u_char *buf = (u_char*) malloc(sizeof(u_char) * bufsz);
312
- #endif /* __GNUC__ || __clang__ */
313
-
314
- ngx_escape_uri(buf, src, size, NGX_ESCAPE_HTML);
315
-
316
- while (bufsz--) {
317
- switch (*buf) {
318
- case ':':
319
- *dst++ = '%';
320
- *dst++ = '3';
321
- *dst++ = 'A';
322
- break;
323
- case '?':
324
- *dst++ = '%';
325
- *dst++ = '3';
326
- *dst++ = 'F';
327
- break;
328
- default:
329
- *dst++ = *buf;
330
- }
331
- buf++;
332
- }
333
-
334
- #if !defined(__GNUC__) && !defined(__clang__)
335
- free(buf);
336
- #endif /* !__GNUC__ && !__clang__ */
337
-
338
- return escapes + uescapes;
339
- }
340
- }
341
-
342
-
343
- static ngx_inline ngx_buf_t*
344
- make_header_buf(ngx_http_request_t *r, const ngx_str_t css_href)
345
- {
346
- size_t blen = r->uri.len
347
- + ngx_sizeof_ssz(t01_head1)
348
- + ngx_sizeof_ssz(t02_head2)
349
- + ngx_sizeof_ssz(t03_head3)
350
- + ngx_sizeof_ssz(t04_body1)
351
- ;
352
-
353
- if (css_href.len) {
354
- blen += css_href_pre.len \
355
- + css_href.len \
356
- + css_href_post.len
357
- ;
358
- }
359
-
360
- ngx_buf_t *b = ngx_create_temp_buf(r->pool, blen);
361
-
362
- if (b == NULL) goto bailout;
363
-
364
- b->last = ngx_cpymem_ssz(b->last, t01_head1);
365
-
366
- if (css_href.len) {
367
- b->last = ngx_cpymem_str(b->last, css_href_pre);
368
- b->last = ngx_cpymem_str(b->last, css_href);
369
- b->last = ngx_cpymem_str(b->last, css_href_post);
370
- }
371
-
372
- b->last = ngx_cpymem_ssz(b->last, t02_head2);
373
- b->last = ngx_cpymem_str(b->last, r->uri);
374
- b->last = ngx_cpymem_ssz(b->last, t03_head3);
375
- b->last = ngx_cpymem_ssz(b->last, t04_body1);
376
-
377
- bailout:
378
- return b;
379
- }
380
-
381
-
382
-
383
- static ngx_inline ngx_buf_t*
384
- make_footer_buf(ngx_http_request_t *r)
385
- {
386
- /*
387
- * TODO: Make this buffer static (i.e. readonly and reusable from
388
- * one request to another.
389
- */
390
- ngx_buf_t *b = ngx_create_temp_buf(r->pool, ngx_sizeof_ssz(t08_foot1));
391
-
392
- if (b == NULL) goto bailout;
393
-
394
- b->last = ngx_cpymem_ssz(b->last, t08_foot1);
395
-
396
- bailout:
397
- return b;
398
- }
399
-
400
-
401
-
402
- static ngx_inline ngx_int_t
403
- make_content_buf(
404
- ngx_http_request_t *r, ngx_buf_t **pb,
405
- ngx_http_fancyindex_loc_conf_t *alcf)
406
- {
407
- ngx_http_fancyindex_entry_t *entry;
408
-
409
- int (*sort_cmp_func) (const void*, const void*);
410
- const char *sort_url_args = "";
411
-
412
- off_t length;
413
- size_t len, root, copy, allocated;
414
- u_char *filename, *last, scale;
415
- ngx_tm_t tm;
416
- ngx_array_t entries;
417
- ngx_time_t *tp;
418
- ngx_uint_t i;
419
- ngx_int_t size;
420
- ngx_str_t path;
421
- ngx_dir_t dir;
422
- ngx_buf_t *b;
423
-
424
- static char *months[] = {
425
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
426
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
427
- };
428
-
429
- /*
430
- * NGX_DIR_MASK_LEN is lesser than NGX_HTTP_FANCYINDEX_PREALLOCATE
431
- */
432
- if ((last = ngx_http_map_uri_to_path(r, &path, &root,
433
- NGX_HTTP_FANCYINDEX_PREALLOCATE)) == NULL)
434
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
435
-
436
- allocated = path.len;
437
- path.len = last - path.data - 1;
438
- path.data[path.len] = '\0';
439
-
440
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
441
- "http fancyindex: \"%s\"", path.data);
442
-
443
- if (ngx_open_dir(&path, &dir) == NGX_ERROR) {
444
- ngx_int_t rc, err = ngx_errno;
445
- ngx_uint_t level;
446
-
447
- if (err == NGX_ENOENT || err == NGX_ENOTDIR || err == NGX_ENAMETOOLONG) {
448
- level = NGX_LOG_ERR;
449
- rc = NGX_HTTP_NOT_FOUND;
450
- } else if (err == NGX_EACCES) {
451
- level = NGX_LOG_ERR;
452
- rc = NGX_HTTP_FORBIDDEN;
453
- } else {
454
- level = NGX_LOG_CRIT;
455
- rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
456
- }
457
-
458
- ngx_log_error(level, r->connection->log, err,
459
- ngx_open_dir_n " \"%s\" failed", path.data);
460
-
461
- return rc;
462
- }
463
-
464
- #if (NGX_SUPPRESS_WARN)
465
- /* MSVC thinks 'entries' may be used without having been initialized */
466
- ngx_memzero(&entries, sizeof(ngx_array_t));
467
- #endif /* NGX_SUPPRESS_WARN */
468
-
469
-
470
- if (ngx_array_init(&entries, r->pool, 40,
471
- sizeof(ngx_http_fancyindex_entry_t)) != NGX_OK)
472
- return ngx_http_fancyindex_error(r, &dir, &path);
473
-
474
- filename = path.data;
475
- filename[path.len] = '/';
476
-
477
- /* Read directory entries and their associated information. */
478
- for (;;) {
479
- ngx_set_errno(0);
480
-
481
- if (ngx_read_dir(&dir) == NGX_ERROR) {
482
- ngx_int_t err = ngx_errno;
483
-
484
- if (err != NGX_ENOMOREFILES) {
485
- ngx_log_error(NGX_LOG_CRIT, r->connection->log, err,
486
- ngx_read_dir_n " \"%V\" failed", &path);
487
- return ngx_http_fancyindex_error(r, &dir, &path);
488
- }
489
- break;
490
- }
491
-
492
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
493
- "http fancyindex file: \"%s\"", ngx_de_name(&dir));
494
-
495
- len = ngx_de_namelen(&dir);
496
-
497
- if (ngx_de_name(&dir)[0] == '.')
498
- continue;
499
-
500
- #if NGX_PCRE
501
- {
502
- ngx_str_t str = { len, ngx_de_name(&dir) };
503
-
504
- if (alcf->ignore && ngx_regex_exec_array(alcf->ignore, &str,
505
- r->connection->log)
506
- != NGX_DECLINED)
507
- {
508
- continue;
509
- }
510
- }
511
- #else /* !NGX_PCRE */
512
- if (alcf->ignore) {
513
- u_int match_found = 0;
514
- ngx_str_t *s = alcf->ignore->elts;
515
-
516
- for (i = 0; i < alcf->ignore->nelts; i++, s++) {
517
- if (ngx_strcmp(ngx_de_name(&dir), s->data) == 0) {
518
- match_found = 1;
519
- break;
520
- }
521
- }
522
-
523
- if (match_found) {
524
- continue;
525
- }
526
- }
527
- #endif /* NGX_PCRE */
528
-
529
- if (!dir.valid_info) {
530
- /* 1 byte for '/' and 1 byte for terminating '\0' */
531
- if (path.len + 1 + len + 1 > allocated) {
532
- allocated = path.len + 1 + len + 1
533
- + NGX_HTTP_FANCYINDEX_PREALLOCATE;
534
-
535
- if ((filename = ngx_palloc(r->pool, allocated)) == NULL)
536
- return ngx_http_fancyindex_error(r, &dir, &path);
537
-
538
- last = ngx_cpystrn(filename, path.data, path.len + 1);
539
- *last++ = '/';
540
- }
541
-
542
- ngx_cpystrn(last, ngx_de_name(&dir), len + 1);
543
-
544
- if (ngx_de_info(filename, &dir) == NGX_FILE_ERROR) {
545
- ngx_int_t err = ngx_errno;
546
-
547
- if (err != NGX_ENOENT) {
548
- ngx_log_error(NGX_LOG_ERR, r->connection->log, err,
549
- ngx_de_info_n " \"%s\" failed", filename);
550
- continue;
551
- }
552
-
553
- if (ngx_de_link_info(filename, &dir) == NGX_FILE_ERROR) {
554
- ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
555
- ngx_de_link_info_n " \"%s\" failed", filename);
556
- return ngx_http_fancyindex_error(r, &dir, &path);
557
- }
558
- }
559
- }
560
-
561
- if ((entry = ngx_array_push(&entries)) == NULL)
562
- return ngx_http_fancyindex_error(r, &dir, &path);
563
-
564
- entry->name.len = len;
565
- entry->name.data = ngx_palloc(r->pool, len + 1);
566
- if (entry->name.data == NULL)
567
- return ngx_http_fancyindex_error(r, &dir, &path);
568
-
569
- ngx_cpystrn(entry->name.data, ngx_de_name(&dir), len + 1);
570
- entry->escape = 2 * ngx_fancyindex_escape_uri(NULL,
571
- ngx_de_name(&dir),
572
- len);
573
-
574
- entry->dir = ngx_de_is_dir(&dir);
575
- entry->mtime = ngx_de_mtime(&dir);
576
- entry->size = ngx_de_size(&dir);
577
- entry->utf_len = (r->headers_out.charset.len == 5 &&
578
- ngx_strncasecmp(r->headers_out.charset.data, (u_char*) "utf-8", 5) == 0)
579
- ? ngx_utf8_length(entry->name.data, entry->name.len)
580
- : len;
581
- }
582
-
583
- if (ngx_close_dir(&dir) == NGX_ERROR) {
584
- ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
585
- ngx_close_dir_n " \"%s\" failed", &path);
586
- }
587
-
588
- /*
589
- * Calculate needed buffer length.
590
- */
591
- len = r->uri.len
592
- + ngx_sizeof_ssz(t05_body2)
593
- + ngx_sizeof_ssz(t06_list1)
594
- + ngx_sizeof_ssz(t_parentdir_entry)
595
- + ngx_sizeof_ssz(t07_list2)
596
- ;
597
-
598
- entry = entries.elts;
599
- for (i = 0; i < entries.nelts; i++) {
600
- /*
601
- * Genearated table rows are as follows, unneeded whitespace
602
- * is stripped out:
603
- *
604
- * <tr>
605
- * <td><a href="U[?sort]">fname</a></td>
606
- * <td>size</td><td>date</td>
607
- * </tr>
608
- */
609
- len += ngx_sizeof_ssz("<tr><td><a href=\"")
610
- + entry[i].name.len + entry[i].escape /* Escaped URL */
611
- + ngx_sizeof_ssz("?C=x&amp;O=y") /* URL sorting arguments */
612
- + ngx_sizeof_ssz("\">")
613
- + entry[i].name.len + entry[i].utf_len
614
- + alcf->name_length + ngx_sizeof_ssz("&gt;")
615
- + ngx_sizeof_ssz("</a></td><td>")
616
- + 20 /* File size */
617
- + ngx_sizeof_ssz("</td><td>")
618
- + ngx_sizeof_ssz(" 28-Sep-1970 12:00 ")
619
- + ngx_sizeof_ssz("</td></tr>\n")
620
- + 2 /* CR LF */
621
- ;
622
- }
623
-
624
- if ((b = ngx_create_temp_buf(r->pool, len)) == NULL)
625
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
626
-
627
- /*
628
- * Determine the sorting criteria. URL arguments look like:
629
- *
630
- * C=x[&O=y]
631
- *
632
- * Where x={M,S,N} and y={A,D}
633
- */
634
- if ((r->args.len == 3 || (r->args.len == 7 && r->args.data[3] == '&')) &&
635
- r->args.data[0] == 'C' && r->args.data[1] == '=')
636
- {
637
- /* Determine whether the direction of the sorting */
638
- ngx_int_t sort_descending = r->args.len == 7
639
- && r->args.data[4] == 'O'
640
- && r->args.data[5] == '='
641
- && r->args.data[6] == 'D';
642
-
643
- /* Pick the sorting criteria */
644
- switch (r->args.data[2]) {
645
- case 'M': /* Sort by mtime */
646
- if (sort_descending) {
647
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_desc;
648
- if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC)
649
- sort_url_args = "?C=M&amp;O=D";
650
- }
651
- else {
652
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_asc;
653
- if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE)
654
- sort_url_args = "?C=M&amp;O=A";
655
- }
656
- break;
657
- case 'S': /* Sort by size */
658
- if (sort_descending) {
659
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_desc;
660
- if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC)
661
- sort_url_args = "?C=S&amp;O=D";
662
- }
663
- else {
664
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_asc;
665
- if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE)
666
- sort_url_args = "?C=S&amp;O=A";
667
- }
668
- break;
669
- case 'N': /* Sort by name */
670
- default:
671
- if (sort_descending) {
672
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_desc;
673
- if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC)
674
- sort_url_args = "?C=N&amp;O=D";
675
- }
676
- else {
677
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_asc;
678
- if (alcf->default_sort != NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME)
679
- sort_url_args = "?C=N&amp;O=A";
680
- }
681
- break;
682
- }
683
- }
684
- else {
685
- switch (alcf->default_sort) {
686
- case NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE_DESC:
687
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_desc;
688
- break;
689
- case NGX_HTTP_FANCYINDEX_SORT_CRITERION_DATE:
690
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_mtime_asc;
691
- break;
692
- case NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE_DESC:
693
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_desc;
694
- break;
695
- case NGX_HTTP_FANCYINDEX_SORT_CRITERION_SIZE:
696
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_size_asc;
697
- break;
698
- case NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME_DESC:
699
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_desc;
700
- break;
701
- case NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME:
702
- default:
703
- sort_cmp_func = ngx_http_fancyindex_cmp_entries_name_asc;
704
- break;
705
- }
706
- }
707
-
708
- /* Sort entries, if needed */
709
- if (entries.nelts > 1) {
710
- ngx_qsort(entry, (size_t) entries.nelts,
711
- sizeof(ngx_http_fancyindex_entry_t),
712
- sort_cmp_func);
713
- }
714
-
715
- b->last = ngx_cpymem_str(b->last, r->uri);
716
- b->last = ngx_cpymem_ssz(b->last, t05_body2);
717
- b->last = ngx_cpymem_ssz(b->last, t06_list1);
718
-
719
- tp = ngx_timeofday();
720
-
721
- /* "Parent dir" entry, always first */
722
- b->last = ngx_cpymem_ssz(b->last,
723
- "<tr>"
724
- "<td><a href=\"../");
725
- if (*sort_url_args) {
726
- b->last = ngx_cpymem(b->last,
727
- sort_url_args,
728
- ngx_sizeof_ssz("?C=N&amp;O=A"));
729
- }
730
- b->last = ngx_cpymem_ssz(b->last,
731
- "\">Parent directory/</a></td>"
732
- "<td>-</td>"
733
- "<td>-</td>"
734
- "</tr>");
735
-
736
- /* Entries for directories and files */
737
- for (i = 0; i < entries.nelts; i++) {
738
- b->last = ngx_cpymem_ssz(b->last, "<tr><td><a href=\"");
739
-
740
- if (entry[i].escape) {
741
- ngx_fancyindex_escape_uri(b->last,
742
- entry[i].name.data,
743
- entry[i].name.len);
744
-
745
- b->last += entry[i].name.len + entry[i].escape;
746
-
747
- } else {
748
- b->last = ngx_cpymem_str(b->last, entry[i].name);
749
- }
750
-
751
- if (entry[i].dir) {
752
- *b->last++ = '/';
753
- if (*sort_url_args) {
754
- b->last = ngx_cpymem(b->last,
755
- sort_url_args,
756
- ngx_sizeof_ssz("?C=x&amp;O=y"));
757
- }
758
- }
759
-
760
- *b->last++ = '"';
761
- *b->last++ = '>';
762
-
763
- len = entry[i].utf_len;
764
-
765
- if (entry[i].name.len - len) {
766
- if (len > alcf->name_length) {
767
- copy = alcf->name_length - 3 + 1;
768
- } else {
769
- copy = alcf->name_length + 1;
770
- }
771
-
772
- b->last = ngx_utf8_cpystrn(b->last, entry[i].name.data,
773
- copy, entry[i].name.len);
774
- last = b->last;
775
-
776
- } else {
777
- b->last = ngx_cpystrn(b->last, entry[i].name.data,
778
- alcf->name_length + 1);
779
- last = b->last - 3;
780
- }
781
-
782
- if (len > alcf->name_length) {
783
- b->last = ngx_cpymem_ssz(last, "..&gt;</a></td><td>");
784
-
785
- } else {
786
- if (entry[i].dir && alcf->name_length - len > 0) {
787
- *b->last++ = '/';
788
- len++;
789
- }
790
-
791
- b->last = ngx_cpymem_ssz(b->last, "</a></td><td>");
792
- }
793
-
794
- if (alcf->exact_size) {
795
- if (entry[i].dir) {
796
- *b->last++ = '-';
797
- } else {
798
- b->last = ngx_sprintf(b->last, "%19O", entry[i].size);
799
- }
800
-
801
- } else {
802
- if (entry[i].dir) {
803
- *b->last++ = '-';
804
- } else {
805
- length = entry[i].size;
806
-
807
- if (length > 1024 * 1024 * 1024 - 1) {
808
- size = (ngx_int_t) (length / (1024 * 1024 * 1024));
809
- if ((length % (1024 * 1024 * 1024))
810
- > (1024 * 1024 * 1024 / 2 - 1))
811
- {
812
- size++;
813
- }
814
- scale = 'G';
815
-
816
- } else if (length > 1024 * 1024 - 1) {
817
- size = (ngx_int_t) (length / (1024 * 1024));
818
- if ((length % (1024 * 1024)) > (1024 * 1024 / 2 - 1)) {
819
- size++;
820
- }
821
- scale = 'M';
822
-
823
- } else if (length > 9999) {
824
- size = (ngx_int_t) (length / 1024);
825
- if (length % 1024 > 511) {
826
- size++;
827
- }
828
- scale = 'K';
829
-
830
- } else {
831
- size = (ngx_int_t) length;
832
- scale = '\0';
833
- }
834
-
835
- if (scale) {
836
- b->last = ngx_sprintf(b->last, "%6i%c", size, scale);
837
-
838
- } else {
839
- b->last = ngx_sprintf(b->last, " %6i", size);
840
- }
841
- }
842
- }
843
-
844
- ngx_gmtime(entry[i].mtime + tp->gmtoff * 60 * alcf->localtime, &tm);
845
-
846
- b->last = ngx_sprintf(b->last, "</td><td>%02d-%s-%d %02d:%02d</td></tr>",
847
- tm.ngx_tm_mday,
848
- months[tm.ngx_tm_mon - 1],
849
- tm.ngx_tm_year,
850
- tm.ngx_tm_hour,
851
- tm.ngx_tm_min);
852
-
853
-
854
- *b->last++ = CR;
855
- *b->last++ = LF;
856
- }
857
-
858
- /* Output table bottom */
859
- b->last = ngx_cpymem_ssz(b->last, t07_list2);
860
-
861
- *pb = b;
862
- return NGX_OK;
863
- }
864
-
865
-
866
-
867
- static ngx_int_t
868
- ngx_http_fancyindex_handler(ngx_http_request_t *r)
869
- {
870
- ngx_http_request_t *sr;
871
- ngx_str_t *sr_uri;
872
- ngx_str_t rel_uri;
873
- ngx_int_t rc;
874
- ngx_http_fancyindex_loc_conf_t *alcf;
875
- ngx_chain_t out[3] = {
876
- { NULL, NULL }, { NULL, NULL}, { NULL, NULL }};
877
-
878
-
879
- if (r->uri.data[r->uri.len - 1] != '/') {
880
- return NGX_DECLINED;
881
- }
882
-
883
- /* TODO: Win32 */
884
- #if defined(nginx_version) \
885
- && ((nginx_version < 7066) \
886
- || ((nginx_version > 8000) && (nginx_version < 8038)))
887
- if (r->zero_in_uri) {
888
- return NGX_DECLINED;
889
- }
890
- #endif
891
-
892
- if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) {
893
- return NGX_DECLINED;
894
- }
895
-
896
- alcf = ngx_http_get_module_loc_conf(r, ngx_http_fancyindex_module);
897
-
898
- if (!alcf->enable) {
899
- return NGX_DECLINED;
900
- }
901
-
902
- if ((rc = make_content_buf(r, &out[0].buf, alcf) != NGX_OK))
903
- return rc;
904
-
905
- out[0].buf->last_in_chain = 1;
906
-
907
- r->headers_out.status = NGX_HTTP_OK;
908
- r->headers_out.content_type_len = ngx_sizeof_ssz("text/html");
909
- r->headers_out.content_type.len = ngx_sizeof_ssz("text/html");
910
- r->headers_out.content_type.data = (u_char *) "text/html";
911
-
912
- rc = ngx_http_send_header(r);
913
-
914
- if (rc != NGX_OK || r->header_only)
915
- return rc;
916
-
917
- if (alcf->header.len > 0) {
918
- /* URI is configured, make Nginx take care of with a subrequest. */
919
- sr_uri = &alcf->header;
920
-
921
- if (*sr_uri->data != '/') {
922
- /* Relative path */
923
- rel_uri.len = r->uri.len + alcf->header.len;
924
- rel_uri.data = ngx_palloc(r->pool, rel_uri.len);
925
- if (rel_uri.data == NULL) {
926
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
927
- }
928
- ngx_memcpy(ngx_cpymem(rel_uri.data, r->uri.data, r->uri.len),
929
- alcf->header.data, alcf->header.len);
930
- sr_uri = &rel_uri;
931
- }
932
-
933
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
934
- "http fancyindex: header subrequest \"%V\"", sr_uri);
935
-
936
- rc = ngx_http_subrequest(r, sr_uri, NULL, &sr, NULL, 0);
937
- if (rc == NGX_ERROR || rc == NGX_DONE) {
938
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
939
- "http fancyindex: header subrequest for \"%V\" failed", sr_uri);
940
- return rc;
941
- }
942
-
943
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
944
- "http fancyindex: header subrequest status = %i",
945
- sr->headers_out.status);
946
- /* ngx_http_subrequest returns NGX_OK(0), not NGX_HTTP_OK(200) */
947
- if (sr->headers_out.status != NGX_OK) {
948
- /*
949
- * XXX: Should we write a message to the error log just in case
950
- * we get something different from a 404?
951
- */
952
- goto add_builtin_header;
953
- }
954
- }
955
- else {
956
- add_builtin_header:
957
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
958
- "http fancyindex: adding built-in header");
959
- /* Make space before */
960
- out[1].next = out[0].next;
961
- out[1].buf = out[0].buf;
962
- /* Chain header buffer */
963
- out[0].next = &out[1];
964
- out[0].buf = make_header_buf(r, alcf->css_href);
965
- }
966
-
967
- /* If footer is disabled, chain up footer buffer. */
968
- if (alcf->footer.len == 0) {
969
- ngx_uint_t last = (alcf->header.len == 0) ? 2 : 1;
970
-
971
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
972
- "http fancyindex: adding built-in footer at %i", last);
973
-
974
- out[last-1].next = &out[last];
975
- out[last].buf = make_footer_buf(r);
976
-
977
- out[last-1].buf->last_in_chain = 0;
978
- out[last].buf->last_in_chain = 1;
979
- out[last].buf->last_buf = 1;
980
- /* Send everything with a single call :D */
981
- return ngx_http_output_filter(r, &out[0]);
982
- }
983
-
984
- /*
985
- * If we reach here, we were asked to send a custom footer. We need to:
986
- * partially send whatever is referenced from out[0] and then send the
987
- * footer as a subrequest. If the subrequest fails, we should send the
988
- * standard footer as well.
989
- */
990
- rc = ngx_http_output_filter(r, &out[0]);
991
-
992
- if (rc != NGX_OK && rc != NGX_AGAIN)
993
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
994
-
995
- /* URI is configured, make Nginx take care of with a subrequest. */
996
- sr_uri = &alcf->footer;
997
-
998
- if (*sr_uri->data != '/') {
999
- /* Relative path */
1000
- rel_uri.len = r->uri.len + alcf->footer.len;
1001
- rel_uri.data = ngx_palloc(r->pool, rel_uri.len);
1002
- if (rel_uri.data == NULL) {
1003
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
1004
- }
1005
- ngx_memcpy(ngx_cpymem(rel_uri.data, r->uri.data, r->uri.len),
1006
- alcf->footer.data, alcf->footer.len);
1007
- sr_uri = &rel_uri;
1008
- }
1009
-
1010
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1011
- "http fancyindex: footer subrequest \"%V\"", sr_uri);
1012
-
1013
- rc = ngx_http_subrequest(r, sr_uri, NULL, &sr, NULL, 0);
1014
- if (rc == NGX_ERROR || rc == NGX_DONE) {
1015
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1016
- "http fancyindex: footer subrequest for \"%V\" failed", sr_uri);
1017
- return rc;
1018
- }
1019
-
1020
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1021
- "http fancyindex: header subrequest status = %i",
1022
- sr->headers_out.status);
1023
-
1024
- /* see above: ngx_http_subrequest resturns NGX_OK (0) not NGX_HTTP_OK (200) */
1025
- if (sr->headers_out.status != NGX_OK) {
1026
- /*
1027
- * XXX: Should we write a message to the error log just in case
1028
- * we get something different from a 404?
1029
- */
1030
- out[0].next = NULL;
1031
- out[0].buf = make_footer_buf(r);
1032
- out[0].buf->last_in_chain = 1;
1033
- out[0].buf->last_buf = 1;
1034
- /* Directly send out the builtin footer */
1035
- return ngx_http_output_filter(r, &out[0]);
1036
- }
1037
-
1038
- return (r != r->main) ? rc : ngx_http_send_special(r, NGX_HTTP_LAST);
1039
- }
1040
-
1041
-
1042
- static int ngx_libc_cdecl
1043
- ngx_http_fancyindex_cmp_entries_name_desc(const void *one, const void *two)
1044
- {
1045
- ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
1046
- ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
1047
-
1048
- /* move the directories to the start */
1049
- if (first->dir && !second->dir) {
1050
- return -1;
1051
- }
1052
- if (!first->dir && second->dir) {
1053
- return 1;
1054
- }
1055
-
1056
- return (int) ngx_strcmp(second->name.data, first->name.data);
1057
- }
1058
-
1059
-
1060
- static int ngx_libc_cdecl
1061
- ngx_http_fancyindex_cmp_entries_size_desc(const void *one, const void *two)
1062
- {
1063
- ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
1064
- ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
1065
-
1066
- /* move the directories to the start */
1067
- if (first->dir && !second->dir) {
1068
- return -1;
1069
- }
1070
- if (!first->dir && second->dir) {
1071
- return 1;
1072
- }
1073
-
1074
- return second->size - first->size;
1075
- }
1076
-
1077
-
1078
- static int ngx_libc_cdecl
1079
- ngx_http_fancyindex_cmp_entries_mtime_desc(const void *one, const void *two)
1080
- {
1081
- ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
1082
- ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
1083
-
1084
- /* move the directories to the start */
1085
- if (first->dir && !second->dir) {
1086
- return -1;
1087
- }
1088
- if (!first->dir && second->dir) {
1089
- return 1;
1090
- }
1091
-
1092
- return second->mtime - first->mtime;
1093
- }
1094
-
1095
-
1096
- static int ngx_libc_cdecl
1097
- ngx_http_fancyindex_cmp_entries_name_asc(const void *one, const void *two)
1098
- {
1099
- ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
1100
- ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
1101
-
1102
- /* move the directories to the start */
1103
- if (first->dir && !second->dir) {
1104
- return -1;
1105
- }
1106
- if (!first->dir && second->dir) {
1107
- return 1;
1108
- }
1109
-
1110
- return (int) ngx_strcmp(first->name.data, second->name.data);
1111
- }
1112
-
1113
-
1114
- static int ngx_libc_cdecl
1115
- ngx_http_fancyindex_cmp_entries_size_asc(const void *one, const void *two)
1116
- {
1117
- ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
1118
- ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
1119
-
1120
- /* move the directories to the start */
1121
- if (first->dir && !second->dir) {
1122
- return -1;
1123
- }
1124
- if (!first->dir && second->dir) {
1125
- return 1;
1126
- }
1127
-
1128
- return first->size - second->size;
1129
- }
1130
-
1131
-
1132
- static int ngx_libc_cdecl
1133
- ngx_http_fancyindex_cmp_entries_mtime_asc(const void *one, const void *two)
1134
- {
1135
- ngx_http_fancyindex_entry_t *first = (ngx_http_fancyindex_entry_t *) one;
1136
- ngx_http_fancyindex_entry_t *second = (ngx_http_fancyindex_entry_t *) two;
1137
-
1138
- /* move the directories to the start */
1139
- if (first->dir && !second->dir) {
1140
- return -1;
1141
- }
1142
- if (!first->dir && second->dir) {
1143
- return 1;
1144
- }
1145
-
1146
- return first->mtime - second->mtime;
1147
- }
1148
-
1149
-
1150
- static ngx_int_t
1151
- ngx_http_fancyindex_error(ngx_http_request_t *r, ngx_dir_t *dir, ngx_str_t *name)
1152
- {
1153
- if (ngx_close_dir(dir) == NGX_ERROR) {
1154
- ngx_log_error(NGX_LOG_ALERT, r->connection->log, ngx_errno,
1155
- ngx_close_dir_n " \"%V\" failed", name);
1156
- }
1157
-
1158
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
1159
- }
1160
-
1161
-
1162
- static void *
1163
- ngx_http_fancyindex_create_loc_conf(ngx_conf_t *cf)
1164
- {
1165
- ngx_http_fancyindex_loc_conf_t *conf;
1166
-
1167
- conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_fancyindex_loc_conf_t));
1168
- if (conf == NULL) {
1169
- return NGX_CONF_ERROR;
1170
- }
1171
-
1172
- /*
1173
- * Set by ngx_pcalloc:
1174
- * conf->header.len = 0
1175
- * conf->header.data = NULL
1176
- * conf->footer.len = 0
1177
- * conf->footer.data = NULL
1178
- */
1179
- conf->enable = NGX_CONF_UNSET;
1180
- conf->default_sort = NGX_CONF_UNSET_UINT;
1181
- conf->localtime = NGX_CONF_UNSET;
1182
- conf->name_length = NGX_CONF_UNSET_UINT;
1183
- conf->exact_size = NGX_CONF_UNSET;
1184
- conf->ignore = NGX_CONF_UNSET_PTR;
1185
-
1186
- return conf;
1187
- }
1188
-
1189
-
1190
- static char *
1191
- ngx_http_fancyindex_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
1192
- {
1193
- ngx_http_fancyindex_loc_conf_t *prev = parent;
1194
- ngx_http_fancyindex_loc_conf_t *conf = child;
1195
-
1196
- ngx_conf_merge_value(conf->enable, prev->enable, 0);
1197
- ngx_conf_merge_uint_value(conf->default_sort, prev->default_sort, NGX_HTTP_FANCYINDEX_SORT_CRITERION_NAME);
1198
- ngx_conf_merge_value(conf->localtime, prev->localtime, 0);
1199
- ngx_conf_merge_value(conf->exact_size, prev->exact_size, 1);
1200
- ngx_conf_merge_uint_value(conf->name_length, prev->name_length, 50);
1201
-
1202
- ngx_conf_merge_str_value(conf->header, prev->header, "");
1203
- ngx_conf_merge_str_value(conf->footer, prev->footer, "");
1204
-
1205
- ngx_conf_merge_ptr_value(conf->ignore, prev->ignore, NULL);
1206
-
1207
- return NGX_CONF_OK;
1208
- }
1209
-
1210
-
1211
- static char*
1212
- ngx_http_fancyindex_ignore(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
1213
- {
1214
- ngx_http_fancyindex_loc_conf_t *alcf = conf;
1215
- ngx_str_t *value;
1216
-
1217
- #if (NGX_PCRE)
1218
- ngx_uint_t i;
1219
- ngx_regex_elt_t *re;
1220
- ngx_regex_compile_t rc;
1221
- u_char errstr[NGX_MAX_CONF_ERRSTR];
1222
-
1223
- if (alcf->ignore == NGX_CONF_UNSET_PTR) {
1224
- alcf->ignore = ngx_array_create(cf->pool, 2, sizeof(ngx_regex_elt_t));
1225
- if (alcf->ignore == NULL) {
1226
- return NGX_CONF_ERROR;
1227
- }
1228
- }
1229
-
1230
- value = cf->args->elts;
1231
-
1232
- ngx_memzero(&rc, sizeof(ngx_regex_compile_t));
1233
-
1234
- rc.err.data = errstr;
1235
- rc.err.len = NGX_MAX_CONF_ERRSTR;
1236
- rc.pool = cf->pool;
1237
-
1238
- for (i = 1; i < cf->args->nelts; i++) {
1239
- re = ngx_array_push(alcf->ignore);
1240
- if (re == NULL) {
1241
- return NGX_CONF_ERROR;
1242
- }
1243
-
1244
- rc.pattern = value[i];
1245
- rc.options = NGX_REGEX_CASELESS;
1246
-
1247
- if (ngx_regex_compile(&rc) != NGX_OK) {
1248
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V", &rc.err);
1249
- return NGX_CONF_ERROR;
1250
- }
1251
-
1252
- re->name = value[i].data;
1253
- re->regex = rc.regex;
1254
- }
1255
-
1256
- return NGX_CONF_OK;
1257
- #else /* !NGX_PCRE */
1258
- ngx_uint_t i;
1259
- ngx_str_t *str;
1260
-
1261
- if (alcf->ignore == NGX_CONF_UNSET_PTR) {
1262
- alcf->ignore = ngx_array_create(cf->pool, 2, sizeof(ngx_str_t));
1263
- if (alcf->ignore == NULL) {
1264
- return NGX_CONF_ERROR;
1265
- }
1266
- }
1267
-
1268
- value = cf->args->elts;
1269
-
1270
- for (i = 1; i < cf->args->nelts; i++) {
1271
- str = ngx_array_push(alcf->ignore);
1272
- if (str == NULL) {
1273
- return NGX_CONF_ERROR;
1274
- }
1275
-
1276
- str->data = value[i].data;
1277
- str->len = value[i].len;
1278
- }
1279
-
1280
- return NGX_CONF_OK;
1281
- #endif /* NGX_PCRE */
1282
-
1283
- }
1284
-
1285
-
1286
- static ngx_int_t
1287
- ngx_http_fancyindex_init(ngx_conf_t *cf)
1288
- {
1289
- ngx_http_handler_pt *h;
1290
- ngx_http_core_main_conf_t *cmcf;
1291
-
1292
- cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
1293
-
1294
- h = ngx_array_push(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers);
1295
- if (h == NULL) {
1296
- return NGX_ERROR;
1297
- }
1298
-
1299
- *h = ngx_http_fancyindex_handler;
1300
-
1301
- return NGX_OK;
1302
- }
1303
-
1304
- /* vim:et:sw=4:ts=4:
1305
- */