rack 1.5.5 → 1.6.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rack might be problematic. Click here for more details.

Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/COPYING +1 -1
  3. data/HISTORY.md +351 -0
  4. data/KNOWN-ISSUES +14 -0
  5. data/README.rdoc +44 -358
  6. data/Rakefile +3 -4
  7. data/SPEC +64 -37
  8. data/lib/rack.rb +13 -2
  9. data/lib/rack/auth/abstract/handler.rb +4 -4
  10. data/lib/rack/auth/abstract/request.rb +1 -1
  11. data/lib/rack/auth/basic.rb +1 -1
  12. data/lib/rack/auth/digest/md5.rb +1 -1
  13. data/lib/rack/auth/digest/request.rb +1 -1
  14. data/lib/rack/backports/uri/common_18.rb +1 -1
  15. data/lib/rack/builder.rb +19 -4
  16. data/lib/rack/cascade.rb +3 -3
  17. data/lib/rack/chunked.rb +14 -3
  18. data/lib/rack/commonlogger.rb +17 -9
  19. data/lib/rack/conditionalget.rb +17 -5
  20. data/lib/rack/content_length.rb +7 -3
  21. data/lib/rack/content_type.rb +1 -1
  22. data/lib/rack/deflater.rb +54 -16
  23. data/lib/rack/directory.rb +13 -7
  24. data/lib/rack/etag.rb +20 -11
  25. data/lib/rack/file.rb +41 -27
  26. data/lib/rack/handler.rb +4 -2
  27. data/lib/rack/handler/cgi.rb +1 -1
  28. data/lib/rack/handler/fastcgi.rb +5 -2
  29. data/lib/rack/handler/lsws.rb +1 -1
  30. data/lib/rack/handler/mongrel.rb +9 -3
  31. data/lib/rack/handler/scgi.rb +6 -3
  32. data/lib/rack/handler/thin.rb +8 -2
  33. data/lib/rack/handler/webrick.rb +51 -10
  34. data/lib/rack/head.rb +8 -3
  35. data/lib/rack/lint.rb +105 -44
  36. data/lib/rack/lobster.rb +10 -5
  37. data/lib/rack/methodoverride.rb +16 -5
  38. data/lib/rack/mime.rb +2 -15
  39. data/lib/rack/mock.rb +22 -14
  40. data/lib/rack/multipart.rb +2 -2
  41. data/lib/rack/multipart/parser.rb +122 -54
  42. data/lib/rack/multipart/uploaded_file.rb +2 -2
  43. data/lib/rack/nulllogger.rb +21 -2
  44. data/lib/rack/recursive.rb +6 -5
  45. data/lib/rack/request.rb +44 -30
  46. data/lib/rack/response.rb +13 -6
  47. data/lib/rack/runtime.rb +16 -3
  48. data/lib/rack/sendfile.rb +12 -7
  49. data/lib/rack/server.rb +41 -16
  50. data/lib/rack/session/abstract/id.rb +7 -6
  51. data/lib/rack/session/cookie.rb +17 -7
  52. data/lib/rack/session/memcache.rb +4 -4
  53. data/lib/rack/session/pool.rb +3 -6
  54. data/lib/rack/showexceptions.rb +20 -11
  55. data/lib/rack/showstatus.rb +4 -4
  56. data/lib/rack/static.rb +30 -33
  57. data/lib/rack/tempfile_reaper.rb +22 -0
  58. data/lib/rack/urlmap.rb +19 -5
  59. data/lib/rack/utils.rb +81 -38
  60. data/rack.gemspec +4 -4
  61. data/test/multipart/filename_and_no_name +6 -0
  62. data/test/multipart/invalid_character +6 -0
  63. data/test/spec_body_proxy.rb +16 -0
  64. data/test/spec_builder.rb +13 -4
  65. data/test/spec_cgi.rb +1 -1
  66. data/test/spec_chunked.rb +16 -0
  67. data/test/spec_commonlogger.rb +36 -0
  68. data/test/spec_content_length.rb +3 -1
  69. data/test/spec_deflater.rb +283 -148
  70. data/test/spec_etag.rb +11 -2
  71. data/test/spec_fastcgi.rb +1 -1
  72. data/test/spec_file.rb +11 -3
  73. data/test/spec_handler.rb +4 -0
  74. data/test/spec_head.rb +2 -0
  75. data/test/spec_lint.rb +48 -20
  76. data/test/spec_lobster.rb +1 -1
  77. data/test/spec_mock.rb +8 -0
  78. data/test/spec_mongrel.rb +1 -1
  79. data/test/spec_multipart.rb +111 -27
  80. data/test/spec_request.rb +111 -10
  81. data/test/spec_response.rb +30 -0
  82. data/test/spec_server.rb +31 -7
  83. data/test/spec_session_cookie.rb +45 -2
  84. data/test/spec_session_memcache.rb +1 -1
  85. data/test/spec_showexceptions.rb +29 -36
  86. data/test/spec_showstatus.rb +19 -0
  87. data/test/spec_tempfile_reaper.rb +63 -0
  88. data/test/spec_urlmap.rb +23 -0
  89. data/test/spec_utils.rb +65 -3
  90. data/test/spec_version.rb +17 -0
  91. data/test/spec_webrick.rb +42 -1
  92. metadata +13 -6
  93. data/test/cgi/lighttpd.errors +0 -1
  94. data/test/multipart/three_files_three_fields +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ddc7522db220a6e7fef72e5720df45c3e78a9b54
4
- data.tar.gz: c0b77fe5d69c8bcfbd315494f00541e4e72d4f35
3
+ metadata.gz: ab38bb5c60cd46486301f9260b5a573ee1f433f2
4
+ data.tar.gz: e17cf5cf671ebd4aa03826847d006be00c964c4a
5
5
  SHA512:
6
- metadata.gz: 5c9e7ad0586b57f002aab11b31758620c0c314ff77998500d67a6bf1b7eb6c6edcd74630a0642ea71a78da8866a281c9f74a3f540fd6a9296e1bb4cf7ea3dcbe
7
- data.tar.gz: 51fb9d24391b01c03a9dcc0c1b7cf453d7d3320be8bc97ce9bf4a65656cbe820ae1edef3d587b3595ed64c6dabe3e31d86effb92b79a3461a78dbdeb874375d7
6
+ metadata.gz: 71969e78c1454c8dcf6bd20e0fcb59f367d0e1a1b6ad32a512c866cb88f18ca1d98cb2074e704596a84fb91b64760e730dc590c1caf4b480ab5dae50994d776d
7
+ data.tar.gz: 5748ff056a909a1d1ee5ef717ccca1b04a5c6a076397cdefc05b23235a1f4fb3e8d3b833a65e3dbaa57c29efe7184eba7a69b47c59d5ca7d5e004cff228538e2
data/COPYING CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012 Christian Neukirchen <purl.org/net/chneukirchen>
1
+ Copyright (c) 2007-2015 Christian Neukirchen <purl.org/net/chneukirchen>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to
data/HISTORY.md ADDED
@@ -0,0 +1,351 @@
1
+ Fri Jun 12 11:37:41 2015 Aaron Patterson <tenderlove@ruby-lang.org>
2
+
3
+ * Prevent extremely deep parameters from being parsed. CVE-2015-3225
4
+
5
+ ### December 18th, Thirty sixth public release 1.6.0
6
+
7
+ ### February 7th, Thirty fifth public release 1.5.2
8
+ - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
9
+ - Fix CVE-2013-0262, symlink path traversal in Rack::File
10
+ - Add various methods to Session for enhanced Rails compatibility
11
+ - Request#trusted_proxy? now only matches whole stirngs
12
+ - Add JSON cookie coder, to be default in Rack 1.6+ due to security concerns
13
+ - URLMap host matching in environments that don't set the Host header fixed
14
+ - Fix a race condition that could result in overwritten pidfiles
15
+ - Various documentation additions
16
+
17
+ ### February 7th, Thirty fifth public release 1.4.5
18
+ - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
19
+ - Fix CVE-2013-0262, symlink path traversal in Rack::File
20
+
21
+ ### February 7th, Thirty fifth public release 1.1.6, 1.2.8, 1.3.10
22
+ - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
23
+
24
+ ### January 28th, 2013: Thirty fourth public release 1.5.1
25
+ - Rack::Lint check_hijack now conforms to other parts of SPEC
26
+ - Added hash-like methods to Abstract::ID::SessionHash for compatibility
27
+ - Various documentation corrections
28
+
29
+ ### January 21st, 2013: Thirty third public release 1.5.0
30
+ - Introduced hijack SPEC, for before-response and after-response hijacking
31
+ - SessionHash is no longer a Hash subclass
32
+ - Rack::File cache_control parameter is removed, in place of headers options
33
+ - Rack::Auth::AbstractRequest#scheme now yields strings, not symbols
34
+ - Rack::Utils cookie functions now format expires in RFC 2822 format
35
+ - Rack::File now has a default mime type
36
+ - rackup -b 'run Rack::File.new(".")', option provides command line configs
37
+ - Rack::Deflater will no longer double encode bodies
38
+ - Rack::Mime#match? provides convenience for Accept header matching
39
+ - Rack::Utils#q_values provides splitting for Accept headers
40
+ - Rack::Utils#best_q_match provides a helper for Accept headers
41
+ - Rack::Handler.pick provides convenience for finding available servers
42
+ - Puma added to the list of default servers (preferred over Webrick)
43
+ - Various middleware now correctly close body when replacing it
44
+ - Rack::Request#params is no longer persistent with only GET params
45
+ - Rack::Request#update_param and #delete_param provide persistent operations
46
+ - Rack::Request#trusted_proxy? now returns true for local unix sockets
47
+ - Rack::Response no longer forces Content-Types
48
+ - Rack::Sendfile provides local mapping configuration options
49
+ - Rack::Utils#rfc2109 provides old netscape style time output
50
+ - Updated HTTP status codes
51
+ - Ruby 1.8.6 likely no longer passes tests, and is no longer fully supported
52
+
53
+ ### January 13th, 2013: Thirty second public release 1.4.4, 1.3.9, 1.2.7, 1.1.5
54
+ - [SEC] Rack::Auth::AbstractRequest no longer symbolizes arbitrary strings
55
+ - Fixed erroneous test case in the 1.3.x series
56
+
57
+ ### January 7th, 2013: Thirty first public release 1.4.3
58
+ - Security: Prevent unbounded reads in large multipart boundaries
59
+
60
+ ### January 7th, 2013: Thirtieth public release 1.3.8
61
+ - Security: Prevent unbounded reads in large multipart boundaries
62
+
63
+ ### January 6th, 2013: Twenty ninth public release 1.4.2
64
+ - Add warnings when users do not provide a session secret
65
+ - Fix parsing performance for unquoted filenames
66
+ - Updated URI backports
67
+ - Fix URI backport version matching, and silence constant warnings
68
+ - Correct parameter parsing with empty values
69
+ - Correct rackup '-I' flag, to allow multiple uses
70
+ - Correct rackup pidfile handling
71
+ - Report rackup line numbers correctly
72
+ - Fix request loops caused by non-stale nonces with time limits
73
+ - Fix reloader on Windows
74
+ - Prevent infinite recursions from Response#to_ary
75
+ - Various middleware better conforms to the body close specification
76
+ - Updated language for the body close specification
77
+ - Additional notes regarding ECMA escape compatibility issues
78
+ - Fix the parsing of multiple ranges in range headers
79
+ - Prevent errors from empty parameter keys
80
+ - Added PATCH verb to Rack::Request
81
+ - Various documentation updates
82
+ - Fix session merge semantics (fixes rack-test)
83
+ - Rack::Static :index can now handle multiple directories
84
+ - All tests now utilize Rack::Lint (special thanks to Lars Gierth)
85
+ - Rack::File cache_control parameter is now deprecated, and removed by 1.5
86
+ - Correct Rack::Directory script name escaping
87
+ - Rack::Static supports header rules for sophisticated configurations
88
+ - Multipart parsing now works without a Content-Length header
89
+ - New logos courtesy of Zachary Scott!
90
+ - Rack::BodyProxy now explicitly defines #each, useful for C extensions
91
+ - Cookies that are not URI escaped no longer cause exceptions
92
+
93
+ ### January 6th, 2013: Twenty eighth public release 1.3.7
94
+ - Add warnings when users do not provide a session secret
95
+ - Fix parsing performance for unquoted filenames
96
+ - Updated URI backports
97
+ - Fix URI backport version matching, and silence constant warnings
98
+ - Correct parameter parsing with empty values
99
+ - Correct rackup '-I' flag, to allow multiple uses
100
+ - Correct rackup pidfile handling
101
+ - Report rackup line numbers correctly
102
+ - Fix request loops caused by non-stale nonces with time limits
103
+ - Fix reloader on Windows
104
+ - Prevent infinite recursions from Response#to_ary
105
+ - Various middleware better conforms to the body close specification
106
+ - Updated language for the body close specification
107
+ - Additional notes regarding ECMA escape compatibility issues
108
+ - Fix the parsing of multiple ranges in range headers
109
+
110
+ ### January 6th, 2013: Twenty seventh public release 1.2.6
111
+ - Add warnings when users do not provide a session secret
112
+ - Fix parsing performance for unquoted filenames
113
+
114
+ ### January 6th, 2013: Twenty sixth public release 1.1.4
115
+ - Add warnings when users do not provide a session secret
116
+
117
+ ### January 22nd, 2012: Twenty fifth public release 1.4.1
118
+ - Alter the keyspace limit calculations to reduce issues with nested params
119
+ - Add a workaround for multipart parsing where files contain unescaped "%"
120
+ - Added Rack::Response::Helpers#method_not_allowed? (code 405)
121
+ - Rack::File now returns 404 for illegal directory traversals
122
+ - Rack::File now returns 405 for illegal methods (non HEAD/GET)
123
+ - Rack::Cascade now catches 405 by default, as well as 404
124
+ - Cookies missing '--' no longer cause an exception to be raised
125
+ - Various style changes and documentation spelling errors
126
+ - Rack::BodyProxy always ensures to execute its block
127
+ - Additional test coverage around cookies and secrets
128
+ - Rack::Session::Cookie can now be supplied either secret or old_secret
129
+ - Tests are no longer dependent on set order
130
+ - Rack::Static no longer defaults to serving index files
131
+ - Rack.release was fixed
132
+
133
+ ### December 28th, 2011: Twenty fourth public release 1.4.0
134
+ - Ruby 1.8.6 support has officially been dropped. Not all tests pass.
135
+ - Raise sane error messages for broken config.ru
136
+ - Allow combining run and map in a config.ru
137
+ - Rack::ContentType will not set Content-Type for responses without a body
138
+ - Status code 205 does not send a response body
139
+ - Rack::Response::Helpers will not rely on instance variables
140
+ - Rack::Utils.build_query no longer outputs '=' for nil query values
141
+ - Various mime types added
142
+ - Rack::MockRequest now supports HEAD
143
+ - Rack::Directory now supports files that contain RFC3986 reserved chars
144
+ - Rack::File now only supports GET and HEAD requests
145
+ - Rack::Server#start now passes the block to Rack::Handler::<h>#run
146
+ - Rack::Static now supports an index option
147
+ - Added the Teapot status code
148
+ - rackup now defaults to Thin instead of Mongrel (if installed)
149
+ - Support added for HTTP_X_FORWARDED_SCHEME
150
+ - Numerous bug fixes, including many fixes for new and alternate rubies
151
+
152
+ ### December 28th, 2011: Twenty first public release: 1.1.3.
153
+ - Security fix. http://www.ocert.org/advisories/ocert-2011-003.html
154
+ Further information here: http://jruby.org/2011/12/27/jruby-1-6-5-1
155
+
156
+ ### October 17, 2011: Twentieth public release 1.3.5
157
+ - Fix annoying warnings caused by the backport in 1.3.4
158
+
159
+ ### October 1, 2011: Nineteenth public release 1.3.4
160
+ - Backport security fix from 1.9.3, also fixes some roundtrip issues in URI
161
+ - Small documentation update
162
+ - Fix an issue where BodyProxy could cause an infinite recursion
163
+ - Add some supporting files for travis-ci
164
+
165
+ ### September 16, 2011: Eighteenth public release 1.2.4
166
+ - Fix a bug with MRI regex engine to prevent XSS by malformed unicode
167
+
168
+ ### September 16, 2011: Seventeenth public release 1.3.3
169
+ - Fix bug with broken query parameters in Rack::ShowExceptions
170
+ - Rack::Request#cookies no longer swallows exceptions on broken input
171
+ - Prevents XSS attacks enabled by bug in Ruby 1.8's regexp engine
172
+ - Rack::ConditionalGet handles broken If-Modified-Since helpers
173
+
174
+ ### July 16, 2011: Sixteenth public release 1.3.2
175
+ - Fix for Rails and rack-test, Rack::Utils#escape calls to_s
176
+
177
+ ### July 13, 2011: Fifteenth public release 1.3.1
178
+ - Fix 1.9.1 support
179
+ - Fix JRuby support
180
+ - Properly handle $KCODE in Rack::Utils.escape
181
+ - Make method_missing/respond_to behavior consistent for Rack::Lock,
182
+ Rack::Auth::Digest::Request and Rack::Multipart::UploadedFile
183
+ - Reenable passing rack.session to session middleware
184
+ - Rack::CommonLogger handles streaming responses correctly
185
+ - Rack::MockResponse calls close on the body object
186
+ - Fix a DOS vector from MRI stdlib backport
187
+
188
+ ### May 22nd, 2011: Fourteenth public release 1.2.3
189
+ - Pulled in relevant bug fixes from 1.3
190
+ - Fixed 1.8.6 support
191
+
192
+ ### May 22nd, 2011: Thirteenth public release 1.3.0
193
+ - Various performance optimizations
194
+ - Various multipart fixes
195
+ - Various multipart refactors
196
+ - Infinite loop fix for multipart
197
+ - Test coverage for Rack::Server returns
198
+ - Allow files with '..', but not path components that are '..'
199
+ - rackup accepts handler-specific options on the command line
200
+ - Request#params no longer merges POST into GET (but returns the same)
201
+ - Use URI.encode_www_form_component instead. Use core methods for escaping.
202
+ - Allow multi-line comments in the config file
203
+ - Bug L#94 reported by Nikolai Lugovoi, query parameter unescaping.
204
+ - Rack::Response now deletes Content-Length when appropriate
205
+ - Rack::Deflater now supports streaming
206
+ - Improved Rack::Handler loading and searching
207
+ - Support for the PATCH verb
208
+ - env['rack.session.options'] now contains session options
209
+ - Cookies respect renew
210
+ - Session middleware uses SecureRandom.hex
211
+
212
+ ### March 13th, 2011: Twelfth public release 1.2.2/1.1.2.
213
+ - Security fix in Rack::Auth::Digest::MD5: when authenticator
214
+ returned nil, permission was granted on empty password.
215
+
216
+ ### June 15th, 2010: Eleventh public release 1.2.1.
217
+ - Make CGI handler rewindable
218
+ - Rename spec/ to test/ to not conflict with SPEC on lesser
219
+ operating systems
220
+
221
+ ### June 13th, 2010: Tenth public release 1.2.0.
222
+ - Removed Camping adapter: Camping 2.0 supports Rack as-is
223
+ - Removed parsing of quoted values
224
+ - Add Request.trace? and Request.options?
225
+ - Add mime-type for .webm and .htc
226
+ - Fix HTTP_X_FORWARDED_FOR
227
+ - Various multipart fixes
228
+ - Switch test suite to bacon
229
+
230
+ ### January 3rd, 2010: Ninth public release 1.1.0.
231
+ - Moved Auth::OpenID to rack-contrib.
232
+ - SPEC change that relaxes Lint slightly to allow subclasses of the
233
+ required types
234
+ - SPEC change to document rack.input binary mode in greator detail
235
+ - SPEC define optional rack.logger specification
236
+ - File servers support X-Cascade header
237
+ - Imported Config middleware
238
+ - Imported ETag middleware
239
+ - Imported Runtime middleware
240
+ - Imported Sendfile middleware
241
+ - New Logger and NullLogger middlewares
242
+ - Added mime type for .ogv and .manifest.
243
+ - Don't squeeze PATH_INFO slashes
244
+ - Use Content-Type to determine POST params parsing
245
+ - Update Rack::Utils::HTTP_STATUS_CODES hash
246
+ - Add status code lookup utility
247
+ - Response should call #to_i on the status
248
+ - Add Request#user_agent
249
+ - Request#host knows about forwared host
250
+ - Return an empty string for Request#host if HTTP_HOST and
251
+ SERVER_NAME are both missing
252
+ - Allow MockRequest to accept hash params
253
+ - Optimizations to HeaderHash
254
+ - Refactored rackup into Rack::Server
255
+ - Added Utils.build_nested_query to complement Utils.parse_nested_query
256
+ - Added Utils::Multipart.build_multipart to complement
257
+ Utils::Multipart.parse_multipart
258
+ - Extracted set and delete cookie helpers into Utils so they can be
259
+ used outside Response
260
+ - Extract parse_query and parse_multipart in Request so subclasses
261
+ can change their behavior
262
+ - Enforce binary encoding in RewindableInput
263
+ - Set correct external_encoding for handlers that don't use RewindableInput
264
+
265
+ ### October 18th, 2009: Eighth public release 1.0.1.
266
+ - Bump remainder of rack.versions.
267
+ - Support the pure Ruby FCGI implementation.
268
+ - Fix for form names containing "=": split first then unescape components
269
+ - Fixes the handling of the filename parameter with semicolons in names.
270
+ - Add anchor to nested params parsing regexp to prevent stack overflows
271
+ - Use more compatible gzip write api instead of "<<".
272
+ - Make sure that Reloader doesn't break when executed via ruby -e
273
+ - Make sure WEBrick respects the :Host option
274
+ - Many Ruby 1.9 fixes.
275
+
276
+ ### April 25th, 2009: Seventh public release 1.0.0.
277
+ - SPEC change: Rack::VERSION has been pushed to [1,0].
278
+ - SPEC change: header values must be Strings now, split on "\n".
279
+ - SPEC change: Content-Length can be missing, in this case chunked transfer
280
+ encoding is used.
281
+ - SPEC change: rack.input must be rewindable and support reading into
282
+ a buffer, wrap with Rack::RewindableInput if it isn't.
283
+ - SPEC change: rack.session is now specified.
284
+ - SPEC change: Bodies can now additionally respond to #to_path with
285
+ a filename to be served.
286
+ - NOTE: String bodies break in 1.9, use an Array consisting of a
287
+ single String instead.
288
+ - New middleware Rack::Lock.
289
+ - New middleware Rack::ContentType.
290
+ - Rack::Reloader has been rewritten.
291
+ - Major update to Rack::Auth::OpenID.
292
+ - Support for nested parameter parsing in Rack::Response.
293
+ - Support for redirects in Rack::Response.
294
+ - HttpOnly cookie support in Rack::Response.
295
+ - The Rakefile has been rewritten.
296
+ - Many bugfixes and small improvements.
297
+
298
+ ### January 9th, 2009: Sixth public release 0.9.1.
299
+ - Fix directory traversal exploits in Rack::File and Rack::Directory.
300
+
301
+ ### January 6th, 2009: Fifth public release 0.9.
302
+ - Rack is now managed by the Rack Core Team.
303
+ - Rack::Lint is stricter and follows the HTTP RFCs more closely.
304
+ - Added ConditionalGet middleware.
305
+ - Added ContentLength middleware.
306
+ - Added Deflater middleware.
307
+ - Added Head middleware.
308
+ - Added MethodOverride middleware.
309
+ - Rack::Mime now provides popular MIME-types and their extension.
310
+ - Mongrel Header now streams.
311
+ - Added Thin handler.
312
+ - Official support for swiftiplied Mongrel.
313
+ - Secure cookies.
314
+ - Made HeaderHash case-preserving.
315
+ - Many bugfixes and small improvements.
316
+
317
+ ### August 21st, 2008: Fourth public release 0.4.
318
+ - New middleware, Rack::Deflater, by Christoffer Sawicki.
319
+ - OpenID authentication now needs ruby-openid 2.
320
+ - New Memcache sessions, by blink.
321
+ - Explicit EventedMongrel handler, by Joshua Peek <josh@joshpeek.com>
322
+ - Rack::Reloader is not loaded in rackup development mode.
323
+ - rackup can daemonize with -D.
324
+ - Many bugfixes, especially for pool sessions, URLMap, thread safety
325
+ and tempfile handling.
326
+ - Improved tests.
327
+ - Rack moved to Git.
328
+
329
+ ### February 26th, 2008: Third public release 0.3.
330
+ - LiteSpeed handler, by Adrian Madrid.
331
+ - SCGI handler, by Jeremy Evans.
332
+ - Pool sessions, by blink.
333
+ - OpenID authentication, by blink.
334
+ - :Port and :File options for opening FastCGI sockets, by blink.
335
+ - Last-Modified HTTP header for Rack::File, by blink.
336
+ - Rack::Builder#use now accepts blocks, by Corey Jewett.
337
+ (See example/protectedlobster.ru)
338
+ - HTTP status 201 can contain a Content-Type and a body now.
339
+ - Many bugfixes, especially related to Cookie handling.
340
+
341
+ ### May 16th, 2007: Second public release 0.2.
342
+ - HTTP Basic authentication.
343
+ - Cookie Sessions.
344
+ - Static file handler.
345
+ - Improved Rack::Request.
346
+ - Improved Rack::Response.
347
+ - Added Rack::ShowStatus, for better default error messages.
348
+ - Bug fixes in the Camping adapter.
349
+ - Removed Rails adapter, was too alpha.
350
+
351
+ ### March 3rd, 2007: First public release 0.1.
data/KNOWN-ISSUES CHANGED
@@ -28,3 +28,17 @@
28
28
 
29
29
  Since lighttpd 1.4.23, you also can use the "fix-root-scriptname" flag
30
30
  in fastcgi.server.
31
+
32
+ = Known conflicts regarding parameter parsing
33
+
34
+ * Many users have differing opinions about parameter parsing. The current
35
+ parameter parsers in Rack are based on a combination of the HTTP and CGI
36
+ specs, and are intended to round-trip encoding and decoding. There are some
37
+ choices that may be viewed as deficiencies, specifically:
38
+ - Rack does not create implicit arrays for multiple instances of a parameter
39
+ - Rack returns nil when a value is not given
40
+ - Rack does not support multi-type keys in parameters
41
+ These issues or choices, will not be fixed before 2.0, if at all. They are
42
+ very major breaking changes. Users are free to write alternative parameter
43
+ parsers, and their own Request and Response wrappers. Moreover, users are
44
+ encouraged to do so.
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = Rack, a modular Ruby webserver interface {<img src="https://secure.travis-ci.org/rack/rack.png" alt="Build Status" />}[http://travis-ci.org/rack/rack] {<img src="https://gemnasium.com/rack/rack.png" alt="Dependency Status" />}[https://gemnasium.com/rack/rack]
1
+ = Rack, a modular Ruby webserver interface {<img src="https://secure.travis-ci.org/rack/rack.svg" alt="Build Status" />}[http://travis-ci.org/rack/rack] {<img src="https://gemnasium.com/rack/rack.svg" alt="Dependency Status" />}[https://gemnasium.com/rack/rack]
2
2
 
3
3
  Rack provides a minimal, modular and adaptable interface for developing
4
4
  web applications in Ruby. By wrapping HTTP requests and responses in
@@ -33,6 +33,7 @@ These web servers include Rack handlers in their distributions:
33
33
  * Unicorn
34
34
  * unixrack
35
35
  * uWSGI
36
+ * yahns
36
37
  * Zbatery
37
38
 
38
39
  Any valid Rack app will run the same on all these handlers, without
@@ -93,7 +94,7 @@ The plethora of useful middleware created the need for a project that
93
94
  collects fresh Rack middleware. rack-contrib includes a variety of
94
95
  add-on components for Rack and it is easy to contribute new modules.
95
96
 
96
- * http://github.com/rack/rack-contrib
97
+ * https://github.com/rack/rack-contrib
97
98
 
98
99
  == rackup
99
100
 
@@ -180,360 +181,40 @@ Installing the Ruby fcgi gem:
180
181
  Furthermore, to test Memcache sessions, you need memcached (will be
181
182
  run on port 11211) and memcache-client installed.
182
183
 
184
+ == Configuration
185
+
186
+ Several parameters can be modified on Rack::Utils to configure Rack behaviour.
187
+
188
+ e.g:
189
+
190
+ Rack::Utils.key_space_limit = 128
191
+
192
+ === key_space_limit
193
+
194
+ The default number of bytes to allow a single parameter key to take up.
195
+ This helps prevent a rogue client from flooding a Request.
196
+
197
+ Default to 65536 characters (4 kiB in worst case).
198
+
199
+ === multipart_part_limit
200
+
201
+ The maximum number of parts a request can contain.
202
+ Accepting too many part can lead to the server running out of file handles.
203
+
204
+ The default is 128, which means that a single request can't upload more than 128 files at once.
205
+
206
+ Set to 0 for no limit.
207
+
208
+ Can also be set via the RACK_MULTIPART_PART_LIMIT environment variable.
209
+
183
210
  == History
184
211
 
185
- * March 3rd, 2007: First public release 0.1.
186
-
187
- * May 16th, 2007: Second public release 0.2.
188
- * HTTP Basic authentication.
189
- * Cookie Sessions.
190
- * Static file handler.
191
- * Improved Rack::Request.
192
- * Improved Rack::Response.
193
- * Added Rack::ShowStatus, for better default error messages.
194
- * Bug fixes in the Camping adapter.
195
- * Removed Rails adapter, was too alpha.
196
-
197
- * February 26th, 2008: Third public release 0.3.
198
- * LiteSpeed handler, by Adrian Madrid.
199
- * SCGI handler, by Jeremy Evans.
200
- * Pool sessions, by blink.
201
- * OpenID authentication, by blink.
202
- * :Port and :File options for opening FastCGI sockets, by blink.
203
- * Last-Modified HTTP header for Rack::File, by blink.
204
- * Rack::Builder#use now accepts blocks, by Corey Jewett.
205
- (See example/protectedlobster.ru)
206
- * HTTP status 201 can contain a Content-Type and a body now.
207
- * Many bugfixes, especially related to Cookie handling.
208
-
209
- * August 21st, 2008: Fourth public release 0.4.
210
- * New middleware, Rack::Deflater, by Christoffer Sawicki.
211
- * OpenID authentication now needs ruby-openid 2.
212
- * New Memcache sessions, by blink.
213
- * Explicit EventedMongrel handler, by Joshua Peek <josh@joshpeek.com>
214
- * Rack::Reloader is not loaded in rackup development mode.
215
- * rackup can daemonize with -D.
216
- * Many bugfixes, especially for pool sessions, URLMap, thread safety
217
- and tempfile handling.
218
- * Improved tests.
219
- * Rack moved to Git.
220
-
221
- * January 6th, 2009: Fifth public release 0.9.
222
- * Rack is now managed by the Rack Core Team.
223
- * Rack::Lint is stricter and follows the HTTP RFCs more closely.
224
- * Added ConditionalGet middleware.
225
- * Added ContentLength middleware.
226
- * Added Deflater middleware.
227
- * Added Head middleware.
228
- * Added MethodOverride middleware.
229
- * Rack::Mime now provides popular MIME-types and their extension.
230
- * Mongrel Header now streams.
231
- * Added Thin handler.
232
- * Official support for swiftiplied Mongrel.
233
- * Secure cookies.
234
- * Made HeaderHash case-preserving.
235
- * Many bugfixes and small improvements.
236
-
237
- * January 9th, 2009: Sixth public release 0.9.1.
238
- * Fix directory traversal exploits in Rack::File and Rack::Directory.
239
-
240
- * April 25th, 2009: Seventh public release 1.0.0.
241
- * SPEC change: Rack::VERSION has been pushed to [1,0].
242
- * SPEC change: header values must be Strings now, split on "\n".
243
- * SPEC change: Content-Length can be missing, in this case chunked transfer
244
- encoding is used.
245
- * SPEC change: rack.input must be rewindable and support reading into
246
- a buffer, wrap with Rack::RewindableInput if it isn't.
247
- * SPEC change: rack.session is now specified.
248
- * SPEC change: Bodies can now additionally respond to #to_path with
249
- a filename to be served.
250
- * NOTE: String bodies break in 1.9, use an Array consisting of a
251
- single String instead.
252
- * New middleware Rack::Lock.
253
- * New middleware Rack::ContentType.
254
- * Rack::Reloader has been rewritten.
255
- * Major update to Rack::Auth::OpenID.
256
- * Support for nested parameter parsing in Rack::Response.
257
- * Support for redirects in Rack::Response.
258
- * HttpOnly cookie support in Rack::Response.
259
- * The Rakefile has been rewritten.
260
- * Many bugfixes and small improvements.
261
-
262
- * October 18th, 2009: Eighth public release 1.0.1.
263
- * Bump remainder of rack.versions.
264
- * Support the pure Ruby FCGI implementation.
265
- * Fix for form names containing "=": split first then unescape components
266
- * Fixes the handling of the filename parameter with semicolons in names.
267
- * Add anchor to nested params parsing regexp to prevent stack overflows
268
- * Use more compatible gzip write api instead of "<<".
269
- * Make sure that Reloader doesn't break when executed via ruby -e
270
- * Make sure WEBrick respects the :Host option
271
- * Many Ruby 1.9 fixes.
272
-
273
- * January 3rd, 2010: Ninth public release 1.1.0.
274
- * Moved Auth::OpenID to rack-contrib.
275
- * SPEC change that relaxes Lint slightly to allow subclasses of the
276
- required types
277
- * SPEC change to document rack.input binary mode in greator detail
278
- * SPEC define optional rack.logger specification
279
- * File servers support X-Cascade header
280
- * Imported Config middleware
281
- * Imported ETag middleware
282
- * Imported Runtime middleware
283
- * Imported Sendfile middleware
284
- * New Logger and NullLogger middlewares
285
- * Added mime type for .ogv and .manifest.
286
- * Don't squeeze PATH_INFO slashes
287
- * Use Content-Type to determine POST params parsing
288
- * Update Rack::Utils::HTTP_STATUS_CODES hash
289
- * Add status code lookup utility
290
- * Response should call #to_i on the status
291
- * Add Request#user_agent
292
- * Request#host knows about forwared host
293
- * Return an empty string for Request#host if HTTP_HOST and
294
- SERVER_NAME are both missing
295
- * Allow MockRequest to accept hash params
296
- * Optimizations to HeaderHash
297
- * Refactored rackup into Rack::Server
298
- * Added Utils.build_nested_query to complement Utils.parse_nested_query
299
- * Added Utils::Multipart.build_multipart to complement
300
- Utils::Multipart.parse_multipart
301
- * Extracted set and delete cookie helpers into Utils so they can be
302
- used outside Response
303
- * Extract parse_query and parse_multipart in Request so subclasses
304
- can change their behavior
305
- * Enforce binary encoding in RewindableInput
306
- * Set correct external_encoding for handlers that don't use RewindableInput
307
-
308
- * June 13th, 2010: Tenth public release 1.2.0.
309
- * Removed Camping adapter: Camping 2.0 supports Rack as-is
310
- * Removed parsing of quoted values
311
- * Add Request.trace? and Request.options?
312
- * Add mime-type for .webm and .htc
313
- * Fix HTTP_X_FORWARDED_FOR
314
- * Various multipart fixes
315
- * Switch test suite to bacon
316
-
317
- * June 15th, 2010: Eleventh public release 1.2.1.
318
- * Make CGI handler rewindable
319
- * Rename spec/ to test/ to not conflict with SPEC on lesser
320
- operating systems
321
-
322
- * March 13th, 2011: Twelfth public release 1.2.2/1.1.2.
323
- * Security fix in Rack::Auth::Digest::MD5: when authenticator
324
- returned nil, permission was granted on empty password.
325
-
326
- * May 22nd, 2011: Thirteenth public release 1.3.0
327
- * Various performance optimizations
328
- * Various multipart fixes
329
- * Various multipart refactors
330
- * Infinite loop fix for multipart
331
- * Test coverage for Rack::Server returns
332
- * Allow files with '..', but not path components that are '..'
333
- * rackup accepts handler-specific options on the command line
334
- * Request#params no longer merges POST into GET (but returns the same)
335
- * Use URI.encode_www_form_component instead. Use core methods for escaping.
336
- * Allow multi-line comments in the config file
337
- * Bug L#94 reported by Nikolai Lugovoi, query parameter unescaping.
338
- * Rack::Response now deletes Content-Length when appropriate
339
- * Rack::Deflater now supports streaming
340
- * Improved Rack::Handler loading and searching
341
- * Support for the PATCH verb
342
- * env['rack.session.options'] now contains session options
343
- * Cookies respect renew
344
- * Session middleware uses SecureRandom.hex
345
-
346
- * May 22nd, 2011: Fourteenth public release 1.2.3
347
- * Pulled in relevant bug fixes from 1.3
348
- * Fixed 1.8.6 support
349
-
350
- * July 13, 2011: Fifteenth public release 1.3.1
351
- * Fix 1.9.1 support
352
- * Fix JRuby support
353
- * Properly handle $KCODE in Rack::Utils.escape
354
- * Make method_missing/respond_to behavior consistent for Rack::Lock,
355
- Rack::Auth::Digest::Request and Rack::Multipart::UploadedFile
356
- * Reenable passing rack.session to session middleware
357
- * Rack::CommonLogger handles streaming responses correctly
358
- * Rack::MockResponse calls close on the body object
359
- * Fix a DOS vector from MRI stdlib backport
360
-
361
- * July 16, 2011: Sixteenth public release 1.3.2
362
- * Fix for Rails and rack-test, Rack::Utils#escape calls to_s
363
-
364
- * September 16, 2011: Seventeenth public release 1.3.3
365
- * Fix bug with broken query parameters in Rack::ShowExceptions
366
- * Rack::Request#cookies no longer swallows exceptions on broken input
367
- * Prevents XSS attacks enabled by bug in Ruby 1.8's regexp engine
368
- * Rack::ConditionalGet handles broken If-Modified-Since helpers
369
-
370
- * September 16, 2011: Eighteenth public release 1.2.4
371
- * Fix a bug with MRI regex engine to prevent XSS by malformed unicode
372
-
373
- * October 1, 2011: Nineteenth public release 1.3.4
374
- * Backport security fix from 1.9.3, also fixes some roundtrip issues in URI
375
- * Small documentation update
376
- * Fix an issue where BodyProxy could cause an infinite recursion
377
- * Add some supporting files for travis-ci
378
-
379
- * October 17, 2011: Twentieth public release 1.3.5
380
- * Fix annoying warnings caused by the backport in 1.3.4
381
-
382
- * December 28th, 2011: Twenty first public release: 1.1.3.
383
- * Security fix. http://www.ocert.org/advisories/ocert-2011-003.html
384
- Further information here: http://jruby.org/2011/12/27/jruby-1-6-5-1
385
-
386
- * December 28th, 2011: Twenty fourth public release 1.4.0
387
- * Ruby 1.8.6 support has officially been dropped. Not all tests pass.
388
- * Raise sane error messages for broken config.ru
389
- * Allow combining run and map in a config.ru
390
- * Rack::ContentType will not set Content-Type for responses without a body
391
- * Status code 205 does not send a response body
392
- * Rack::Response::Helpers will not rely on instance variables
393
- * Rack::Utils.build_query no longer outputs '=' for nil query values
394
- * Various mime types added
395
- * Rack::MockRequest now supports HEAD
396
- * Rack::Directory now supports files that contain RFC3986 reserved chars
397
- * Rack::File now only supports GET and HEAD requests
398
- * Rack::Server#start now passes the block to Rack::Handler::<h>#run
399
- * Rack::Static now supports an index option
400
- * Added the Teapot status code
401
- * rackup now defaults to Thin instead of Mongrel (if installed)
402
- * Support added for HTTP_X_FORWARDED_SCHEME
403
- * Numerous bug fixes, including many fixes for new and alternate rubies
404
-
405
- * January 22nd, 2012: Twenty fifth public release 1.4.1
406
- * Alter the keyspace limit calculations to reduce issues with nested params
407
- * Add a workaround for multipart parsing where files contain unescaped "%"
408
- * Added Rack::Response::Helpers#method_not_allowed? (code 405)
409
- * Rack::File now returns 404 for illegal directory traversals
410
- * Rack::File now returns 405 for illegal methods (non HEAD/GET)
411
- * Rack::Cascade now catches 405 by default, as well as 404
412
- * Cookies missing '--' no longer cause an exception to be raised
413
- * Various style changes and documentation spelling errors
414
- * Rack::BodyProxy always ensures to execute its block
415
- * Additional test coverage around cookies and secrets
416
- * Rack::Session::Cookie can now be supplied either secret or old_secret
417
- * Tests are no longer dependent on set order
418
- * Rack::Static no longer defaults to serving index files
419
- * Rack.release was fixed
420
-
421
- * January 6th, 2013: Twenty sixth public release 1.1.4
422
- * Add warnings when users do not provide a session secret
423
-
424
- * January 6th, 2013: Twenty seventh public release 1.2.6
425
- * Add warnings when users do not provide a session secret
426
- * Fix parsing performance for unquoted filenames
427
-
428
- * January 6th, 2013: Twenty eighth public release 1.3.7
429
- * Add warnings when users do not provide a session secret
430
- * Fix parsing performance for unquoted filenames
431
- * Updated URI backports
432
- * Fix URI backport version matching, and silence constant warnings
433
- * Correct parameter parsing with empty values
434
- * Correct rackup '-I' flag, to allow multiple uses
435
- * Correct rackup pidfile handling
436
- * Report rackup line numbers correctly
437
- * Fix request loops caused by non-stale nonces with time limits
438
- * Fix reloader on Windows
439
- * Prevent infinite recursions from Response#to_ary
440
- * Various middleware better conforms to the body close specification
441
- * Updated language for the body close specification
442
- * Additional notes regarding ECMA escape compatibility issues
443
- * Fix the parsing of multiple ranges in range headers
444
-
445
- * January 6th, 2013: Twenty ninth public release 1.4.2
446
- * Add warnings when users do not provide a session secret
447
- * Fix parsing performance for unquoted filenames
448
- * Updated URI backports
449
- * Fix URI backport version matching, and silence constant warnings
450
- * Correct parameter parsing with empty values
451
- * Correct rackup '-I' flag, to allow multiple uses
452
- * Correct rackup pidfile handling
453
- * Report rackup line numbers correctly
454
- * Fix request loops caused by non-stale nonces with time limits
455
- * Fix reloader on Windows
456
- * Prevent infinite recursions from Response#to_ary
457
- * Various middleware better conforms to the body close specification
458
- * Updated language for the body close specification
459
- * Additional notes regarding ECMA escape compatibility issues
460
- * Fix the parsing of multiple ranges in range headers
461
- * Prevent errors from empty parameter keys
462
- * Added PATCH verb to Rack::Request
463
- * Various documentation updates
464
- * Fix session merge semantics (fixes rack-test)
465
- * Rack::Static :index can now handle multiple directories
466
- * All tests now utilize Rack::Lint (special thanks to Lars Gierth)
467
- * Rack::File cache_control parameter is now deprecated, and removed by 1.5
468
- * Correct Rack::Directory script name escaping
469
- * Rack::Static supports header rules for sophisticated configurations
470
- * Multipart parsing now works without a Content-Length header
471
- * New logos courtesy of Zachary Scott!
472
- * Rack::BodyProxy now explicitly defines #each, useful for C extensions
473
- * Cookies that are not URI escaped no longer cause exceptions
474
-
475
- * January 7th, 2013: Thirtieth public release 1.3.8
476
- * Security: Prevent unbounded reads in large multipart boundaries
477
-
478
- * January 7th, 2013: Thirty first public release 1.4.3
479
- * Security: Prevent unbounded reads in large multipart boundaries
480
-
481
- * January 13th, 2013: Thirty second public release 1.4.4, 1.3.9, 1.2.7, 1.1.5
482
- * [SEC] Rack::Auth::AbstractRequest no longer symbolizes arbitrary strings
483
- * Fixed erroneous test case in the 1.3.x series
484
-
485
- * January 21st, 2013: Thirty third public release 1.5.0
486
- * Introduced hijack SPEC, for before-response and after-response hijacking
487
- * SessionHash is no longer a Hash subclass
488
- * Rack::File cache_control parameter is removed, in place of headers options
489
- * Rack::Auth::AbstractRequest#scheme now yields strings, not symbols
490
- * Rack::Utils cookie functions now format expires in RFC 2822 format
491
- * Rack::File now has a default mime type
492
- * rackup -b 'run Rack::File.new(".")', option provides command line configs
493
- * Rack::Deflater will no longer double encode bodies
494
- * Rack::Mime#match? provides convenience for Accept header matching
495
- * Rack::Utils#q_values provides splitting for Accept headers
496
- * Rack::Utils#best_q_match provides a helper for Accept headers
497
- * Rack::Handler.pick provides convenience for finding available servers
498
- * Puma added to the list of default servers (preferred over Webrick)
499
- * Various middleware now correctly close body when replacing it
500
- * Rack::Request#params is no longer persistent with only GET params
501
- * Rack::Request#update_param and #delete_param provide persistent operations
502
- * Rack::Request#trusted_proxy? now returns true for local unix sockets
503
- * Rack::Response no longer forces Content-Types
504
- * Rack::Sendfile provides local mapping configuration options
505
- * Rack::Utils#rfc2109 provides old netscape style time output
506
- * Updated HTTP status codes
507
- * Ruby 1.8.6 likely no longer passes tests, and is no longer fully supported
508
-
509
- * January 28th, 2013: Thirty fourth public release 1.5.1
510
- * Rack::Lint check_hijack now conforms to other parts of SPEC
511
- * Added hash-like methods to Abstract::ID::SessionHash for compatibility
512
- * Various documentation corrections
513
-
514
- * February 7th, Thirty fifth public release 1.1.6, 1.2.8, 1.3.10
515
- * Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
516
-
517
- * February 7th, Thirty fifth public release 1.4.5
518
- * Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
519
- * Fix CVE-2013-0262, symlink path traversal in Rack::File
520
-
521
- * February 7th, Thirty fifth public release 1.5.2
522
- * Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
523
- * Fix CVE-2013-0262, symlink path traversal in Rack::File
524
- * Add various methods to Session for enhanced Rails compatibility
525
- * Request#trusted_proxy? now only matches whole stirngs
526
- * Add JSON cookie coder, to be default in Rack 1.6+ due to security concerns
527
- * URLMap host matching in environments that don't set the Host header fixed
528
- * Fix a race condition that could result in overwritten pidfiles
529
- * Various documentation additions
530
-
531
- * Prevent extremely deep parameters from being parsed. CVE-2015-3225
212
+ See <https://github.com/rack/HISTORY.md>.
532
213
 
533
214
  == Contact
534
215
 
535
216
  Please post bugs, suggestions and patches to
536
- the bug tracker at <http://github.com/rack/rack/issues>.
217
+ the bug tracker at <https://github.com/rack/rack/issues>.
537
218
 
538
219
  Please post security related bugs and suggestions to the core team at
539
220
  <https://groups.google.com/group/rack-core> or rack-core@googlegroups.com. This
@@ -542,10 +223,10 @@ that we manage timing in order to provide viable patches at the time of
542
223
  disclosure. Your assistance in this matter is greatly appreciated.
543
224
 
544
225
  Mailing list archives are available at
545
- <http://groups.google.com/group/rack-devel>.
226
+ <https://groups.google.com/group/rack-devel>.
546
227
 
547
228
  Git repository (send Git patches to the mailing list):
548
- * http://github.com/rack/rack
229
+ * https://github.com/rack/rack
549
230
  * http://git.vuxu.org/cgi-bin/gitweb.cgi?p=rack-github.git
550
231
 
551
232
  You are also welcome to join the #rack channel on irc.freenode.net.
@@ -557,12 +238,17 @@ The Rack Core Team, consisting of
557
238
  * Christian Neukirchen (chneukirchen)
558
239
  * James Tucker (raggi)
559
240
  * Josh Peek (josh)
241
+ * José Valim (josevalim)
560
242
  * Michael Fellinger (manveru)
561
- * Ryan Tomayko (rtomayko)
562
- * Scytrin dai Kinthra (scytrin)
563
243
  * Aaron Patterson (tenderlove)
244
+ * Santiago Pastorino (spastorino)
564
245
  * Konstantin Haase (rkh)
565
246
 
247
+ and the Rack Alumnis
248
+
249
+ * Ryan Tomayko (rtomayko)
250
+ * Scytrin dai Kinthra (scytrin)
251
+
566
252
  would like to thank:
567
253
 
568
254
  * Adrian Madrid, for the LiteSpeed handler.
@@ -616,10 +302,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
616
302
 
617
303
  == Links
618
304
 
619
- Rack:: <http://rack.github.com/>
620
- Official Rack repositories:: <http://github.com/rack>
621
- Rack Bug Tracking:: <http://github.com/rack/rack/issues>
622
- rack-devel mailing list:: <http://groups.google.com/group/rack-devel>
305
+ Rack:: <http://rack.github.io/>
306
+ Official Rack repositories:: <https://github.com/rack>
307
+ Rack Bug Tracking:: <https://github.com/rack/rack/issues>
308
+ rack-devel mailing list:: <https://groups.google.com/group/rack-devel>
623
309
  Rack's Rubyforge project:: <http://rubyforge.org/projects/rack>
624
310
 
625
311
  Christian Neukirchen:: <http://chneukirchen.org/>