CHANGES revision 1392b9997000dceb6aca39da0a1e6405ccb6f0a6
48c0c81cd6fabac9d3386406d97633780365b839coar******************************************
0ce5cd827d85b442378a52be223aa38bb47ece3fbnicholes* PLEASE NOTE: Now that development for *
2a6c49cfaef5979a5a06098f3ce987cd76769409manoj* mod_proxy has been folded back into *
2a6c49cfaef5979a5a06098f3ce987cd76769409manoj* the httpd-2.1 tree, this file has *
2a6c49cfaef5979a5a06098f3ce987cd76769409manoj* been depreciated. Proxy changes should *
8ab933f1df663f95c27e2ce5772127d4f3a10e0bstriker* be noted in httpd-2.1's CHANGES file. *
dba571e5c5a2586c7e2b382789f3250136ff7577jwoolley* This file exists for historical *
dba571e5c5a2586c7e2b382789f3250136ff7577jwoolley* purposes. *
bf3d1782a29630335a1df535eb395355ab1cd154jwoolley******************************************
07847078a10fe4e9229cc08adda5f421cafc0665jwoolley
0bd0176ce9f4321eeb506aa372d0bcc84befbf4cstrikermod_proxy changes for httpd 2.0.29-dev
d8028365066fca602bf35d014530a1802114378crbb *) don't do keepalives for sub-requests. [Ian Holsman]
c25203fdca093d4504c51b4cd974ff60d5aa4fb1wrowe
c25203fdca093d4504c51b4cd974ff60d5aa4fb1wrowe *) fix up proxypass handling [Ian Holsman]
c25203fdca093d4504c51b4cd974ff60d5aa4fb1wrowe
d89c116f82699294ca744125723651c554bc5925wrowe *) don't send If-Modified-Since, Cache-Control, or If-None-Match on
4214e98fc9045e5010e66f9a967bd6d68f40d342aaron a subrequest [Ian Holsman]
8721697e2aece27b0e738519329f7976c72b27bfjerenkrantz
c25203fdca093d4504c51b4cd974ff60d5aa4fb1wrowemod_proxy changes for httpd 2.0.26-dev
91cacb801f6c0215b38322f6d2fc58cbfedfecfbjerenkrantz *) Add New option 'HTTPProxyOverrideReturnedErrors'. By Turning the
91cacb801f6c0215b38322f6d2fc58cbfedfecfbjerenkrantz Flag on, you will mask the error pages returned by the proxied
df14f0d3a5191cdd7c4bb5b03acd135d43a6f51brbb server, and will it will be handled as if your server generated
df14f0d3a5191cdd7c4bb5b03acd135d43a6f51brbb the error. This change was put in so that a 404 on a included
ab71b233b3a36489e44a7b061c48293be0b17788jwoolley r-proxied component will act in the same manner as a 404 on a
571760de5e60c0b459cb11be45507b923cd023eejwoolley included file. [Ian Holsman <ianh@cnet.com>]
571760de5e60c0b459cb11be45507b923cd023eejwoolley
9180a5933673ffb1af633c255ceee029340f3b1erbbmod_proxy changes for httpd 2.0.25-dev
bcb6e1be6041dfeb549c8ea8d37f97ad4e90a0c3rbb
9bd71e35f5d26d26d23fe3a677401828e842ed72wrowe *) Split proxy: space using <Proxy[Match] > directive blocks from
2900ab946a2d76b73a14cebfe2985d253f01c967stoddard the <Directory[Match] > and <Files[Match] > blocks. Mod_proxy
a548c09e6a8ca1b059d0e93b5256c6ccb2b3c3cdrbb now bypasses the directory and files testing phase (and skips
a548c09e6a8ca1b059d0e93b5256c6ccb2b3c3cdrbb the http TRACE default handler on it's own, as well). Note that
a548c09e6a8ca1b059d0e93b5256c6ccb2b3c3cdrbb <Location > blocks continue to be processed for proxy: requests.
b876b7bcf0ce3d232da723246d709e8dbbfe8762rbb [William Rowe <wrowe@covalent.net>]
cf6bf6c34c936e6a6fe731dbce4a5c3c8bf8e9a3gstein
35330e0d79ceb8027223bbb8330a381b1f989d6etrawick *) apr_uri type/function namespace changes in apr_uri functions
6f6f4a4bca281779d196acbdd5c017bb90858305trawick [Doug MacEachern <dougm@covalent.net>]
8dd4618c4709236b4ea297d7250d282e463ce2d8rbb
09bd86d0db1114ee23eda0a6eb76ca055877a1cftrawickmod_proxy changes for httpd 2.0.23-dev
2deb319e6b3de239f45c16a3e9e836d44f1f7108rbb
bd929c73ef04789b7183b840d8db6e01d03a4d86rbb *) break the proxy_http_handler into multiple smaller functions.
70f6f32765cfaadd6da8de6f0fea97ddd72d8fadmanoj [John Barbee <barbee@veribox.net>]
2a6c49cfaef5979a5a06098f3ce987cd76769409manoj
af4c982a7cf4515f124935f99a329744035fc699slive *) Fix the proxy when the origin server sends back a 100
af4c982a7cf4515f124935f99a329744035fc699slive Continue response. [John Barbee <barbee@veribox.net>]
af4c982a7cf4515f124935f99a329744035fc699slive
af4c982a7cf4515f124935f99a329744035fc699slive *) Change 'readbytes' from apr_size_t to apr_off_t due to change
af4c982a7cf4515f124935f99a329744035fc699slive in ap_get_brigade's parameters [John Barbee <barbee@veribox.net>]
af4c982a7cf4515f124935f99a329744035fc699slive
af4c982a7cf4515f124935f99a329744035fc699slivemod_proxy changes for httpd 2.0.20-dev
10270f6f94b2069d0d357805c140a9897449b9ccianh *) Timeout added for backend connections.
4b62424416882687387923b3130b96241503cbe0jerenkrantz [Victor Orlikowski <v.j.orlikowski@gte.net>]
5ca8e11fadb6f7a8d9d0367c1800205c99d4bcd6jerenkrantz
5ca8e11fadb6f7a8d9d0367c1800205c99d4bcd6jerenkrantz *) Fix abort code path in proxy_http.c, similar to FTP fix.
45b0e1c775c1cfed6473c9e5304179ccb9609f53stoddard [Chuck Murcko <chuck@topsail.org>]
dbec4658981e4f9127e8676457c28d42932be7cdtrawick
1b7e9aeb9867a1c94e24e8ae491d2dfcd0d225e3jerenkrantz *) Fix FTP ABOR command execution path.
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz [Victor Orlikowski <v.j.orlikowski@gte.net>]
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz
f95a0b59eb24c631f15bd83e20c6cf823c432d83trawick *) FTP return code variable cleanup; fixed problem in login
f95a0b59eb24c631f15bd83e20c6cf823c432d83trawick [Chuck Murcko <chuck@topsail.org>]
f95a0b59eb24c631f15bd83e20c6cf823c432d83trawick
f95a0b59eb24c631f15bd83e20c6cf823c432d83trawick *) Get PORT working again in the ftp proxy.
ae72c92fd41562d7c0e8627c093fcbbae4ac9ef2coar [Victor Orlikowski <v.j.orlikowski@gte.net>]
f95a0b59eb24c631f15bd83e20c6cf823c432d83trawick
f95a0b59eb24c631f15bd83e20c6cf823c432d83trawick *) Return result code check for FTP QUIT, after fixing
418f39e60a288f855ec033b566744489c3bbbf39trawick problems with passive connection handling.
cc22a72861c58dda7f3768613aec864e4c4e0353striker [Victor Orlikowski <v.j.orlikowski@gte.net>]
f95a0b59eb24c631f15bd83e20c6cf823c432d83trawick
ddafc111b94558ef4e2d7357ceda623315566ce3slive *) Reorganize ap_proxy_string_read() internally to not process eos
ddafc111b94558ef4e2d7357ceda623315566ce3slive buckets.
ae72c92fd41562d7c0e8627c093fcbbae4ac9ef2coar [Chuck Murcko <chuck@topsail.org>]
ddafc111b94558ef4e2d7357ceda623315566ce3slive [Victor Orlikowski <v.j.orlikowski@gte.net>]
93f189f1198f539d3cfa75a15b23dcde60ee35ffrbb
93f189f1198f539d3cfa75a15b23dcde60ee35ffrbb *) Remove result code check for FTP QUIT command. Some servers send
cc22a72861c58dda7f3768613aec864e4c4e0353striker nothing at all back in response to QUIT.
a4d9e6fdcd5d2ddd93a896b42a1d607ed258c316ianh [Chuck Murcko <chuck@topsail.org>]
a4d9e6fdcd5d2ddd93a896b42a1d607ed258c316ianh [Victor Orlikowski <v.j.orlikowski@gte.net>]
ae72c92fd41562d7c0e8627c093fcbbae4ac9ef2coar
93f189f1198f539d3cfa75a15b23dcde60ee35ffrbbmod_proxy changes for httpd 2.0.19
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz *) Reverse previous patch since the core reverted.
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz [Chuck Murcko <chuck@topsail.org>]
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe *) Remove indirection on number of bytes to read for input filters.
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz [Chuck Murcko <chuck@topsail.org>]
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz *) Fixed a problem with directory listing corruption in the
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz PROXY_DIR filter.
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz [Graham Leggett <minfrin@sharp.fm>]
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz *) mod_proxy and the proxy submodules now build properly as DSOs.
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz [Graham Leggett <minfrin@sharp.fm>]
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz *) Stopped the HTTP proxy from trying to read entity bodies when there
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz wasn't one (response was 1xx, 204, 205 or 304).
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz [Graham Leggett <minfrin@sharp.fm>]
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz *) Made sure dates were canonicalised correctly when passed to the client
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz browser through the HTTP proxy.
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz [Graham Leggett <minfrin@sharp.fm>]
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz
cc22a72861c58dda7f3768613aec864e4c4e0353striker *) Split each individual proxy protocol into separate modules.
1af5c0e25a649bb298e25ddfa5418fa18bdcb107aaron [Graham Leggett <minfrin@sharp.fm>]
82455c2e3b6991846fbcbf0c9e41f57dbc681217brianp
82455c2e3b6991846fbcbf0c9e41f57dbc681217brianp *) Added Max-Forwards support for all request types so as to prevent
f4cb04eb78da02a38fcdd87489dc7b660107d55fjerenkrantz loops.
1b3f48fd6b1ccb8745f908e40156c5a85ca3c347jerenkrantz [Graham Leggett <minfrin@sharp.fm>]
b05930e6008f69bd323abe0c10f81f40ffd27983brianp
21835736ce4fe343c541a91853604484fc4f6d9dbrianp *) Fix warnings about byte count type on Darwin (connect handler).
21835736ce4fe343c541a91853604484fc4f6d9dbrianp [Chuck Murcko <chuck@topsail.org>]
21835736ce4fe343c541a91853604484fc4f6d9dbrianp
21835736ce4fe343c541a91853604484fc4f6d9dbrianpmod_proxy changes for httpd 2.0.18
21835736ce4fe343c541a91853604484fc4f6d9dbrianp
21835736ce4fe343c541a91853604484fc4f6d9dbrianp *) IPV6 EPSV support for IPV6 in FTP proxy.
21835736ce4fe343c541a91853604484fc4f6d9dbrianp [Graham Leggett <minfrin@sharp.fm>]
6362fd5c48f6b2193f5d356a9747172101b24e91jerenkrantz
6362fd5c48f6b2193f5d356a9747172101b24e91jerenkrantz *) FTP directory filter works now.
6362fd5c48f6b2193f5d356a9747172101b24e91jerenkrantz [Graham Leggett <minfrin@sharp.fm>]
6362fd5c48f6b2193f5d356a9747172101b24e91jerenkrantz
ae72c92fd41562d7c0e8627c093fcbbae4ac9ef2coar *) Fixed some thread-safety issues with the HTTP proxy in mod_proxy.
b6bff62e5e6ae86726ec0b6445227f4852da8728aaron [Graham Leggett <minfrin@sharp.fm>]
6362fd5c48f6b2193f5d356a9747172101b24e91jerenkrantz
630f5fc1277582643fe0f831a4830e15127bd047jwoolley *) PASV FTP works now.
630f5fc1277582643fe0f831a4830e15127bd047jwoolley [Graham Leggett <minfrin@sharp.fm>]
630f5fc1277582643fe0f831a4830e15127bd047jwoolley
630f5fc1277582643fe0f831a4830e15127bd047jwoolley *) Reworked the line-at-a-time read from the control connection to
56b2562cb4041a21bc313fde3204beabdb758800jwoolley workaround a stray empty bucket returned by the HTTP_IN filter.
56b2562cb4041a21bc313fde3204beabdb758800jwoolley [Graham Leggett <minfrin@sharp.fm>]
56b2562cb4041a21bc313fde3204beabdb758800jwoolley
56b2562cb4041a21bc313fde3204beabdb758800jwoolley *) Stopped the CORE filter from sending off an HTTP response when a
56b2562cb4041a21bc313fde3204beabdb758800jwoolley CONNECT tunnel was closed.
56b2562cb4041a21bc313fde3204beabdb758800jwoolley [Graham Leggett <minfrin@sharp.fm>]
56b2562cb4041a21bc313fde3204beabdb758800jwoolley
f881b8be216de36c6b964324c772450bca38a4e6trawick *) Fixed the poll() loop in proxy_connect.c -> it works now!!!
f881b8be216de36c6b964324c772450bca38a4e6trawick [Graham Leggett <minfrin@sharp.fm>]
f881b8be216de36c6b964324c772450bca38a4e6trawick
f881b8be216de36c6b964324c772450bca38a4e6trawick *) Converted send_dir() to ap_proxy_send_dir_filter() in proxy_ftp.c.
f881b8be216de36c6b964324c772450bca38a4e6trawick [Graham Leggett <minfrin@sharp.fm>]
f881b8be216de36c6b964324c772450bca38a4e6trawick
56b2562cb4041a21bc313fde3204beabdb758800jwoolleymod_proxy changes for httpd 2.0.17
b05930e6008f69bd323abe0c10f81f40ffd27983brianp
b05930e6008f69bd323abe0c10f81f40ffd27983brianp *) Major rework of ap_proxy_ftp_handler() to use filters (begone foul
b05930e6008f69bd323abe0c10f81f40ffd27983brianp BUFF!!!). It compiles, but is untested, and the build environment needs
b05930e6008f69bd323abe0c10f81f40ffd27983brianp to be fixed to include proxy_ftp.c.
b05930e6008f69bd323abe0c10f81f40ffd27983brianp [Graham Leggett <minfrin@sharp.fm>]
15304e476fb32988bf988864ddacc5375b9a6080stoddard
15304e476fb32988bf988864ddacc5375b9a6080stoddard *) Cleanup of dead functions within proxy_util.c.
8c8fbb8546af54582539898be704411a60058d85trawick [Graham Leggett <minfrin@sharp.fm>]
4c7dab038d90d7feb67ef8ddbfacc77be8c9dbf0jwoolley
4c7dab038d90d7feb67ef8ddbfacc77be8c9dbf0jwoolley *) Reworked the storage of the client socket between keepalive connections
4c7dab038d90d7feb67ef8ddbfacc77be8c9dbf0jwoolley to fix some nasty problems with the socket lasting longer than the
4c7dab038d90d7feb67ef8ddbfacc77be8c9dbf0jwoolley memory pool it was allocated from.
bb2a72a6e2327ae4f177c9d26e9d433033cfc27eaaron [Graham Leggett <minfrin@sharp.fm>]
8c8fbb8546af54582539898be704411a60058d85trawick
8c8fbb8546af54582539898be704411a60058d85trawick *) Fixed bug where a hostname without a "." in it (such as "localhost")
8c8fbb8546af54582539898be704411a60058d85trawick would not trigger an IP address check with ProxyBlock.
f9b8e29cfca92cf0a996e8ab17fa1a1f447cecc7stoddard [Graham Leggett <minfrin@sharp.fm>]
f9b8e29cfca92cf0a996e8ab17fa1a1f447cecc7stoddard
f9b8e29cfca92cf0a996e8ab17fa1a1f447cecc7stoddardmod_proxy changes for httpd 2.0.16
a23b1c5a74208b03884c09a6f9dd5d6c97fa6415trawick
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe *) Fixed ProxyBlock bugs with ap_proxy_http_handler() and
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe ap_proxy_connect_handler().
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe [Graham Leggett <minfrin@sharp.fm>]
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe *) Updated ap_proxy_connect_handler() to support APR, while
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe moving some common code between http_handler and connect_handler
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe to proxy_util.c.
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe [Graham Leggett <minfrin@sharp.fm>]
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe *) Updated mod_proxy.html docs to include v2.0 configuration.
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe [Graham Leggett <minfrin@sharp.fm>]
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe *) Fixed problem where responses without entity bodies would cause
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe the directly following proxy keepalive request to fail.
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe [Graham Leggett <minfrin@sharp.fm>]
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowemod_proxy changes for httpd 2.0.15
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe *) Added support for downstream keepalives in mod_proxy.
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe [Graham Leggett <minfrin@sharp.fm>]
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe *) Changed mod_proxy ap_proxy_http_handler() to support APR properly.
2fb49a1d25f38421a68d31b4cbb5d9293fdeafbewrowe [Graham Leggett <minfrin@sharp.fm>]
638a9edaf48cf003cd40ac25ee8c25f572107414stoddard
638a9edaf48cf003cd40ac25ee8c25f572107414stoddard *) Fix problem where incoming response headers were not being returned
638a9edaf48cf003cd40ac25ee8c25f572107414stoddard to the client in mod_proxy.
db2d668e6233d8949b35ee7f9f42f444758f9ce9rbb [Graham Leggett <minfrin@sharp.fm>]
db2d668e6233d8949b35ee7f9f42f444758f9ce9rbb
db2d668e6233d8949b35ee7f9f42f444758f9ce9rbb *) Added X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server to
db2d668e6233d8949b35ee7f9f42f444758f9ce9rbb reverse proxied request headers in mod_proxy.
db2d668e6233d8949b35ee7f9f42f444758f9ce9rbb [Graham Leggett <minfrin@sharp.fm>]
db2d668e6233d8949b35ee7f9f42f444758f9ce9rbb
db2d668e6233d8949b35ee7f9f42f444758f9ce9rbb *) replace INADDR_NONE with APR_INADDR_NONE [Ian Holsman <IanH@cnet.com>]
1ea5221b240a8b41a07c6fb04aab5a73adcddabfaaron
1ea5221b240a8b41a07c6fb04aab5a73adcddabfaaron *) Fix problem with proxy configuration where globally set
1ea5221b240a8b41a07c6fb04aab5a73adcddabfaaron configuration options were overridden inside virtual hosts.
1ea5221b240a8b41a07c6fb04aab5a73adcddabfaaron [Graham Leggett <minfrin@sharp.fm>]
a12f07383f9c286519fe88f559187148d5bd1c16aaron
1ea5221b240a8b41a07c6fb04aab5a73adcddabfaaron *) Fix ProxyReceiveBufferSize where default value was left
1ea5221b240a8b41a07c6fb04aab5a73adcddabfaaron uninitialised.
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz [Graham Leggett <minfrin@sharp.fm>]
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz *) Some small changes:
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz - Ensured hop-by-hop headers were stripped as per
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz RFC2616 13.5.1.
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz - Upgraded version code to HTTP/1.1.
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz - Added Connection: close until Keepalives come.
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz - Some cosmetic fixes and commenting.
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz [Graham Leggett <minfrin@sharp.fm>]
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz
5d12baef135b5d3cb94745e007a1575398469724jerenkrantzmod_proxy changes for httpd 2.0.14
5d12baef135b5d3cb94745e007a1575398469724jerenkrantz
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz *) removed ProxyNoCache and ProxyCacheForceCompletion config directives,
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz since we no longer directly cache from this module
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz [Chuck Murcko <chuck@topsail.org>]
f881b8be216de36c6b964324c772450bca38a4e6trawick
f881b8be216de36c6b964324c772450bca38a4e6trawick *) removed cache
f881b8be216de36c6b964324c772450bca38a4e6trawick [Chuck Murcko <chuck@topsail.org>]
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz *) initial rerebuild for 2.0
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz [Chuck Murcko <chuck@topsail.org>]
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz
b865daaa4ef731a7066ee6d97e2aae36c7743939jerenkrantz