From f14d04d3aca93ac4e992bd0ba6af220e11976af0 Mon Sep 17 00:00:00 2001
From: serassio <>
Date: Sat, 1 Mar 2008 01:29:51 +0000
Subject: [PATCH] Merged changes from SQUID_3_0
---
ChangeLog | 15 +
configure | 6 +-
configure.in | 6 +-
doc/release-notes/release-3.0.html | 317 ++++++++++++------
doc/release-notes/release-3.0.sgml | 36 +-
errors/Makefile.am | 7 +-
errors/Makefile.in | 7 +-
errors/Swedish/ERR_ESI | 30 +-
errors/Ukrainian-1251/ERR_ACCESS_DENIED | 25 ++
errors/Ukrainian-1251/ERR_CACHE_ACCESS_DENIED | 34 ++
.../ERR_CACHE_MGR_ACCESS_DENIED | 33 ++
errors/Ukrainian-1251/ERR_CANNOT_FORWARD | 30 ++
errors/Ukrainian-1251/ERR_CONNECT_FAIL | 27 ++
errors/Ukrainian-1251/ERR_DNS_FAIL | 32 ++
errors/Ukrainian-1251/ERR_ESI | 28 ++
errors/Ukrainian-1251/ERR_FORWARDING_DENIED | 24 ++
errors/Ukrainian-1251/ERR_FTP_DISABLED | 23 ++
errors/Ukrainian-1251/ERR_FTP_FAILURE | 19 ++
errors/Ukrainian-1251/ERR_FTP_FORBIDDEN | 19 ++
errors/Ukrainian-1251/ERR_FTP_NOT_FOUND | 22 ++
errors/Ukrainian-1251/ERR_FTP_PUT_CREATED | 9 +
errors/Ukrainian-1251/ERR_FTP_PUT_ERROR | 26 ++
errors/Ukrainian-1251/ERR_FTP_PUT_MODIFIED | 11 +
errors/Ukrainian-1251/ERR_FTP_UNAVAILABLE | 20 ++
errors/Ukrainian-1251/ERR_ICAP_FAILURE | 33 ++
errors/Ukrainian-1251/ERR_INVALID_REQ | 31 ++
errors/Ukrainian-1251/ERR_INVALID_RESP | 28 ++
errors/Ukrainian-1251/ERR_INVALID_URL | 30 ++
errors/Ukrainian-1251/ERR_LIFETIME_EXP | 24 ++
errors/Ukrainian-1251/ERR_NO_RELAY | 23 ++
errors/Ukrainian-1251/ERR_ONLY_IF_CACHED_MISS | 26 ++
errors/Ukrainian-1251/ERR_READ_ERROR | 28 ++
errors/Ukrainian-1251/ERR_READ_TIMEOUT | 28 ++
errors/Ukrainian-1251/ERR_SECURE_CONNECT_FAIL | 31 ++
errors/Ukrainian-1251/ERR_SHUTTING_DOWN | 17 +
errors/Ukrainian-1251/ERR_SOCKET_FAILURE | 28 ++
errors/Ukrainian-1251/ERR_TOO_BIG | 28 ++
errors/Ukrainian-1251/ERR_UNSUP_REQ | 24 ++
errors/Ukrainian-1251/ERR_URN_RESOLVE | 24 ++
errors/Ukrainian-1251/ERR_WRITE_ERROR | 32 ++
errors/Ukrainian-1251/ERR_ZERO_SIZE_OBJECT | 23 ++
errors/Ukrainian-1251/README | 4 +
errors/Ukrainian-koi8-u/ERR_ACCESS_DENIED | 25 ++
.../Ukrainian-koi8-u/ERR_CACHE_ACCESS_DENIED | 34 ++
.../ERR_CACHE_MGR_ACCESS_DENIED | 33 ++
errors/Ukrainian-koi8-u/ERR_CANNOT_FORWARD | 30 ++
errors/Ukrainian-koi8-u/ERR_CONNECT_FAIL | 27 ++
errors/Ukrainian-koi8-u/ERR_DNS_FAIL | 32 ++
errors/Ukrainian-koi8-u/ERR_ESI | 28 ++
errors/Ukrainian-koi8-u/ERR_FORWARDING_DENIED | 24 ++
errors/Ukrainian-koi8-u/ERR_FTP_DISABLED | 23 ++
errors/Ukrainian-koi8-u/ERR_FTP_FAILURE | 19 ++
errors/Ukrainian-koi8-u/ERR_FTP_FORBIDDEN | 19 ++
errors/Ukrainian-koi8-u/ERR_FTP_NOT_FOUND | 22 ++
errors/Ukrainian-koi8-u/ERR_FTP_PUT_CREATED | 9 +
errors/Ukrainian-koi8-u/ERR_FTP_PUT_ERROR | 26 ++
errors/Ukrainian-koi8-u/ERR_FTP_PUT_MODIFIED | 11 +
errors/Ukrainian-koi8-u/ERR_FTP_UNAVAILABLE | 20 ++
errors/Ukrainian-koi8-u/ERR_ICAP_FAILURE | 33 ++
errors/Ukrainian-koi8-u/ERR_INVALID_REQ | 31 ++
errors/Ukrainian-koi8-u/ERR_INVALID_RESP | 28 ++
errors/Ukrainian-koi8-u/ERR_INVALID_URL | 30 ++
errors/Ukrainian-koi8-u/ERR_LIFETIME_EXP | 24 ++
errors/Ukrainian-koi8-u/ERR_NO_RELAY | 23 ++
.../Ukrainian-koi8-u/ERR_ONLY_IF_CACHED_MISS | 26 ++
errors/Ukrainian-koi8-u/ERR_READ_ERROR | 28 ++
errors/Ukrainian-koi8-u/ERR_READ_TIMEOUT | 28 ++
.../Ukrainian-koi8-u/ERR_SECURE_CONNECT_FAIL | 31 ++
errors/Ukrainian-koi8-u/ERR_SHUTTING_DOWN | 17 +
errors/Ukrainian-koi8-u/ERR_SOCKET_FAILURE | 28 ++
errors/Ukrainian-koi8-u/ERR_TOO_BIG | 28 ++
errors/Ukrainian-koi8-u/ERR_UNSUP_REQ | 24 ++
errors/Ukrainian-koi8-u/ERR_URN_RESOLVE | 24 ++
errors/Ukrainian-koi8-u/ERR_WRITE_ERROR | 32 ++
errors/Ukrainian-koi8-u/ERR_ZERO_SIZE_OBJECT | 23 ++
errors/Ukrainian-koi8-u/README | 4 +
errors/Ukrainian-utf8/ERR_ACCESS_DENIED | 25 ++
errors/Ukrainian-utf8/ERR_CACHE_ACCESS_DENIED | 34 ++
.../ERR_CACHE_MGR_ACCESS_DENIED | 33 ++
errors/Ukrainian-utf8/ERR_CANNOT_FORWARD | 30 ++
errors/Ukrainian-utf8/ERR_CONNECT_FAIL | 27 ++
errors/Ukrainian-utf8/ERR_DNS_FAIL | 32 ++
errors/Ukrainian-utf8/ERR_ESI | 28 ++
errors/Ukrainian-utf8/ERR_FORWARDING_DENIED | 24 ++
errors/Ukrainian-utf8/ERR_FTP_DISABLED | 23 ++
errors/Ukrainian-utf8/ERR_FTP_FAILURE | 19 ++
errors/Ukrainian-utf8/ERR_FTP_FORBIDDEN | 19 ++
errors/Ukrainian-utf8/ERR_FTP_NOT_FOUND | 22 ++
errors/Ukrainian-utf8/ERR_FTP_PUT_CREATED | 9 +
errors/Ukrainian-utf8/ERR_FTP_PUT_ERROR | 26 ++
errors/Ukrainian-utf8/ERR_FTP_PUT_MODIFIED | 11 +
errors/Ukrainian-utf8/ERR_FTP_UNAVAILABLE | 20 ++
errors/Ukrainian-utf8/ERR_ICAP_FAILURE | 33 ++
errors/Ukrainian-utf8/ERR_INVALID_REQ | 31 ++
errors/Ukrainian-utf8/ERR_INVALID_RESP | 28 ++
errors/Ukrainian-utf8/ERR_INVALID_URL | 30 ++
errors/Ukrainian-utf8/ERR_LIFETIME_EXP | 24 ++
errors/Ukrainian-utf8/ERR_NO_RELAY | 23 ++
errors/Ukrainian-utf8/ERR_ONLY_IF_CACHED_MISS | 26 ++
errors/Ukrainian-utf8/ERR_READ_ERROR | 28 ++
errors/Ukrainian-utf8/ERR_READ_TIMEOUT | 28 ++
errors/Ukrainian-utf8/ERR_SECURE_CONNECT_FAIL | 31 ++
errors/Ukrainian-utf8/ERR_SHUTTING_DOWN | 17 +
errors/Ukrainian-utf8/ERR_SOCKET_FAILURE | 28 ++
errors/Ukrainian-utf8/ERR_TOO_BIG | 28 ++
errors/Ukrainian-utf8/ERR_UNSUP_REQ | 24 ++
errors/Ukrainian-utf8/ERR_URN_RESOLVE | 24 ++
errors/Ukrainian-utf8/ERR_WRITE_ERROR | 32 ++
errors/Ukrainian-utf8/ERR_ZERO_SIZE_OBJECT | 23 ++
errors/Ukrainian-utf8/README | 4 +
errors/list | 9 +-
.../squid_kerb_auth/squid_kerb_auth.c | 3 +
include/autoconf.h.in | 6 +
include/config.h | 22 +-
lib/MemPool.cc | 16 +-
lib/rfc2617.c | 4 +-
src/ACLChecklist.cc | 11 +-
src/ACLDestinationDomain.cc | 4 +-
src/ACLMyPortName.cc | 63 ++++
src/ACLMyPortName.h | 67 ++++
src/ESI.cc | 4 +-
src/ESIContext.h | 6 +-
src/ESIInclude.cc | 4 +-
src/HttpHeader.cc | 22 +-
src/HttpHeader.h | 7 +-
src/ICAP/ICAPModXact.cc | 44 ++-
src/Makefile.am | 4 +-
src/Makefile.in | 33 +-
src/Mem.h | 3 +-
src/Server.h | 4 +-
src/SquidString.h | 4 +-
src/Store.h | 5 +-
src/StoreMetaUnpacker.cc | 4 +-
src/StoreMetaUnpacker.h | 6 +-
src/String.cci | 6 +-
src/asn.cc | 6 +-
src/auth/digest/auth_digest.cc | 38 +--
src/auth/digest/auth_digest.h | 3 +-
src/cache_cf.cc | 104 ++++--
src/carp.cc | 10 +-
src/cf.data.pre | 26 +-
src/client_side.h | 4 +-
src/client_side_reply.cc | 15 +-
src/client_side_reply.h | 4 +-
src/client_side_request.h | 4 +-
src/comm.cc | 12 +-
src/comm.h | 1 +
src/comm_epoll.cc | 10 +-
src/comm_kqueue.cc | 14 +-
src/comm_poll.cc | 7 +-
src/comm_select.cc | 6 +-
src/comm_select_win32.cc | 7 +-
src/debug.cc | 4 +-
src/forward.cc | 11 +-
src/helper.h | 6 +-
src/main.cc | 11 +-
src/mem.cc | 13 +-
src/mem_node.cc | 13 +-
src/mem_node.h | 4 +-
src/neighbors.cc | 7 +-
src/net_db.cc | 6 +-
src/peer_digest.cc | 6 +-
src/snmp_agent.cc | 4 +-
src/snmp_core.cc | 4 +-
src/stat.cc | 10 +-
src/stmem.cc | 4 +-
src/store_client.cc | 10 +-
src/store_digest.cc | 6 +-
src/store_swapmeta.cc | 4 +-
src/structs.h | 24 +-
src/tests/testUfs.cc | 5 +
src/typedefs.h | 4 +-
src/wccp2.cc | 40 ++-
173 files changed, 3426 insertions(+), 358 deletions(-)
create mode 100644 errors/Ukrainian-1251/ERR_ACCESS_DENIED
create mode 100644 errors/Ukrainian-1251/ERR_CACHE_ACCESS_DENIED
create mode 100644 errors/Ukrainian-1251/ERR_CACHE_MGR_ACCESS_DENIED
create mode 100644 errors/Ukrainian-1251/ERR_CANNOT_FORWARD
create mode 100644 errors/Ukrainian-1251/ERR_CONNECT_FAIL
create mode 100644 errors/Ukrainian-1251/ERR_DNS_FAIL
create mode 100644 errors/Ukrainian-1251/ERR_ESI
create mode 100644 errors/Ukrainian-1251/ERR_FORWARDING_DENIED
create mode 100644 errors/Ukrainian-1251/ERR_FTP_DISABLED
create mode 100644 errors/Ukrainian-1251/ERR_FTP_FAILURE
create mode 100644 errors/Ukrainian-1251/ERR_FTP_FORBIDDEN
create mode 100644 errors/Ukrainian-1251/ERR_FTP_NOT_FOUND
create mode 100644 errors/Ukrainian-1251/ERR_FTP_PUT_CREATED
create mode 100644 errors/Ukrainian-1251/ERR_FTP_PUT_ERROR
create mode 100644 errors/Ukrainian-1251/ERR_FTP_PUT_MODIFIED
create mode 100644 errors/Ukrainian-1251/ERR_FTP_UNAVAILABLE
create mode 100644 errors/Ukrainian-1251/ERR_ICAP_FAILURE
create mode 100644 errors/Ukrainian-1251/ERR_INVALID_REQ
create mode 100644 errors/Ukrainian-1251/ERR_INVALID_RESP
create mode 100644 errors/Ukrainian-1251/ERR_INVALID_URL
create mode 100644 errors/Ukrainian-1251/ERR_LIFETIME_EXP
create mode 100644 errors/Ukrainian-1251/ERR_NO_RELAY
create mode 100644 errors/Ukrainian-1251/ERR_ONLY_IF_CACHED_MISS
create mode 100644 errors/Ukrainian-1251/ERR_READ_ERROR
create mode 100644 errors/Ukrainian-1251/ERR_READ_TIMEOUT
create mode 100644 errors/Ukrainian-1251/ERR_SECURE_CONNECT_FAIL
create mode 100644 errors/Ukrainian-1251/ERR_SHUTTING_DOWN
create mode 100644 errors/Ukrainian-1251/ERR_SOCKET_FAILURE
create mode 100644 errors/Ukrainian-1251/ERR_TOO_BIG
create mode 100644 errors/Ukrainian-1251/ERR_UNSUP_REQ
create mode 100644 errors/Ukrainian-1251/ERR_URN_RESOLVE
create mode 100644 errors/Ukrainian-1251/ERR_WRITE_ERROR
create mode 100644 errors/Ukrainian-1251/ERR_ZERO_SIZE_OBJECT
create mode 100644 errors/Ukrainian-1251/README
create mode 100644 errors/Ukrainian-koi8-u/ERR_ACCESS_DENIED
create mode 100644 errors/Ukrainian-koi8-u/ERR_CACHE_ACCESS_DENIED
create mode 100644 errors/Ukrainian-koi8-u/ERR_CACHE_MGR_ACCESS_DENIED
create mode 100644 errors/Ukrainian-koi8-u/ERR_CANNOT_FORWARD
create mode 100644 errors/Ukrainian-koi8-u/ERR_CONNECT_FAIL
create mode 100644 errors/Ukrainian-koi8-u/ERR_DNS_FAIL
create mode 100644 errors/Ukrainian-koi8-u/ERR_ESI
create mode 100644 errors/Ukrainian-koi8-u/ERR_FORWARDING_DENIED
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_DISABLED
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_FAILURE
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_FORBIDDEN
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_NOT_FOUND
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_PUT_CREATED
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_PUT_ERROR
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_PUT_MODIFIED
create mode 100644 errors/Ukrainian-koi8-u/ERR_FTP_UNAVAILABLE
create mode 100644 errors/Ukrainian-koi8-u/ERR_ICAP_FAILURE
create mode 100644 errors/Ukrainian-koi8-u/ERR_INVALID_REQ
create mode 100644 errors/Ukrainian-koi8-u/ERR_INVALID_RESP
create mode 100644 errors/Ukrainian-koi8-u/ERR_INVALID_URL
create mode 100644 errors/Ukrainian-koi8-u/ERR_LIFETIME_EXP
create mode 100644 errors/Ukrainian-koi8-u/ERR_NO_RELAY
create mode 100644 errors/Ukrainian-koi8-u/ERR_ONLY_IF_CACHED_MISS
create mode 100644 errors/Ukrainian-koi8-u/ERR_READ_ERROR
create mode 100644 errors/Ukrainian-koi8-u/ERR_READ_TIMEOUT
create mode 100644 errors/Ukrainian-koi8-u/ERR_SECURE_CONNECT_FAIL
create mode 100644 errors/Ukrainian-koi8-u/ERR_SHUTTING_DOWN
create mode 100644 errors/Ukrainian-koi8-u/ERR_SOCKET_FAILURE
create mode 100644 errors/Ukrainian-koi8-u/ERR_TOO_BIG
create mode 100644 errors/Ukrainian-koi8-u/ERR_UNSUP_REQ
create mode 100644 errors/Ukrainian-koi8-u/ERR_URN_RESOLVE
create mode 100644 errors/Ukrainian-koi8-u/ERR_WRITE_ERROR
create mode 100644 errors/Ukrainian-koi8-u/ERR_ZERO_SIZE_OBJECT
create mode 100644 errors/Ukrainian-koi8-u/README
create mode 100644 errors/Ukrainian-utf8/ERR_ACCESS_DENIED
create mode 100644 errors/Ukrainian-utf8/ERR_CACHE_ACCESS_DENIED
create mode 100644 errors/Ukrainian-utf8/ERR_CACHE_MGR_ACCESS_DENIED
create mode 100644 errors/Ukrainian-utf8/ERR_CANNOT_FORWARD
create mode 100644 errors/Ukrainian-utf8/ERR_CONNECT_FAIL
create mode 100644 errors/Ukrainian-utf8/ERR_DNS_FAIL
create mode 100644 errors/Ukrainian-utf8/ERR_ESI
create mode 100644 errors/Ukrainian-utf8/ERR_FORWARDING_DENIED
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_DISABLED
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_FAILURE
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_FORBIDDEN
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_NOT_FOUND
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_PUT_CREATED
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_PUT_ERROR
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_PUT_MODIFIED
create mode 100644 errors/Ukrainian-utf8/ERR_FTP_UNAVAILABLE
create mode 100644 errors/Ukrainian-utf8/ERR_ICAP_FAILURE
create mode 100644 errors/Ukrainian-utf8/ERR_INVALID_REQ
create mode 100644 errors/Ukrainian-utf8/ERR_INVALID_RESP
create mode 100644 errors/Ukrainian-utf8/ERR_INVALID_URL
create mode 100644 errors/Ukrainian-utf8/ERR_LIFETIME_EXP
create mode 100644 errors/Ukrainian-utf8/ERR_NO_RELAY
create mode 100644 errors/Ukrainian-utf8/ERR_ONLY_IF_CACHED_MISS
create mode 100644 errors/Ukrainian-utf8/ERR_READ_ERROR
create mode 100644 errors/Ukrainian-utf8/ERR_READ_TIMEOUT
create mode 100644 errors/Ukrainian-utf8/ERR_SECURE_CONNECT_FAIL
create mode 100644 errors/Ukrainian-utf8/ERR_SHUTTING_DOWN
create mode 100644 errors/Ukrainian-utf8/ERR_SOCKET_FAILURE
create mode 100644 errors/Ukrainian-utf8/ERR_TOO_BIG
create mode 100644 errors/Ukrainian-utf8/ERR_UNSUP_REQ
create mode 100644 errors/Ukrainian-utf8/ERR_URN_RESOLVE
create mode 100644 errors/Ukrainian-utf8/ERR_WRITE_ERROR
create mode 100644 errors/Ukrainian-utf8/ERR_ZERO_SIZE_OBJECT
create mode 100644 errors/Ukrainian-utf8/README
create mode 100644 src/ACLMyPortName.cc
create mode 100644 src/ACLMyPortName.h
diff --git a/ChangeLog b/ChangeLog
index 2bc9bac69e..d8375a0712 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+Changes to squid-3.0.STABLE1 (1 Mar 2008):
+
+ - Add myportname ACL for matching the accepting port name (see release notes)
+ - Add include directive for squid.conf (see release notes)
+ - Add ability to strip kerberos realm from usernames during Auth
+ - License cleanup to comply with GPLv2 or later
+ - Updated Error Pages and Translations
+ - Updated configuration examples
+ - Updated valgrind support for valgrind-3.3.0
+ - Improved support for Windows and MacOS X Leopard
+ - Improved support for files larger than 2GB
+ - Improved support for CARP arrays and WCCPv2
+ - Improved cachmgr, SNMP, and log reporting
+ - ... and as usual Many bug fixes since STABLE 1
+
Changes to squid-3.0.STABLE1 (13 Dec 2007):
- Major rewrite translating the code to C++, originally based on
diff --git a/configure b/configure
index 100e3edbb3..71cfcfedb5 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Revision.
+# From configure.in Revision: 1.488.2.2 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for Squid Web Proxy 3.0.STABLE1-CVS.
#
@@ -24235,6 +24235,7 @@ fi
+
for ac_header in \
@@ -24249,6 +24250,7 @@ for ac_header in \
fcntl.h \
fnmatch.h \
getopt.h \
+ glob.h \
gnumalloc.h \
grp.h \
ip_compat.h \
@@ -42504,6 +42506,7 @@ esac
+
for ac_func in \
@@ -42521,6 +42524,7 @@ for ac_func in \
getrusage \
getspnam \
gettimeofday \
+ glob \
htobe16 \
htole16 \
kqueue\
diff --git a/configure.in b/configure.in
index 5754c93295..7a6ca2b736 100644
--- a/configure.in
+++ b/configure.in
@@ -1,7 +1,7 @@
dnl Configuration input file for Squid
dnl
-dnl $Id: configure.in,v 1.488.2.1.2.1 2007/12/27 20:34:51 serassio Exp $
+dnl $Id: configure.in,v 1.488.2.1.2.2 2008/02/29 18:29:52 serassio Exp $
dnl
dnl
dnl
@@ -11,7 +11,7 @@ AM_CONFIG_HEADER(include/autoconf.h)
AC_CONFIG_AUX_DIR(cfgaux)
AC_CONFIG_SRCDIR([src/main.cc])
AM_INIT_AUTOMAKE([tar-ustar])
-AC_REVISION($Revision: 1.488.2.1.2.1 $)dnl
+AC_REVISION($Revision: 1.488.2.1.2.2 $)dnl
AC_PREFIX_DEFAULT(/usr/local/squid)
AM_MAINTAINER_MODE
@@ -1848,6 +1848,7 @@ AC_CHECK_HEADERS( \
fcntl.h \
fnmatch.h \
getopt.h \
+ glob.h \
gnumalloc.h \
grp.h \
ip_compat.h \
@@ -2493,6 +2494,7 @@ AC_CHECK_FUNCS(\
getrusage \
getspnam \
gettimeofday \
+ glob \
htobe16 \
htole16 \
kqueue\
diff --git a/doc/release-notes/release-3.0.html b/doc/release-notes/release-3.0.html
index 74aea85bfe..3b8f55f3c7 100644
--- a/doc/release-notes/release-3.0.html
+++ b/doc/release-notes/release-3.0.html
@@ -2,12 +2,12 @@
- Squid 3.0.RC1 release notes
+ Squid 3.0.STABLE2 release notes
-Squid 3.0.RC1 release notes
+Squid 3.0.STABLE2 release notes
-Squid Developers
$Id: release-3.0.html,v 1.12 2007/11/18 17:23:01 serassio Exp $
+Squid Developers
$Id: release-3.0.html,v 1.12.4.1 2008/02/29 18:29:52 serassio Exp $
This document contains the release notes for version 3.0 of Squid.
Squid is a WWW Cache application developed by the National Laboratory
@@ -15,21 +15,20 @@ for Applied Network Research and members of the Web Caching community.
-The Squid Team are pleased to announce the release of Squid-3.0.RC1 for pre-release testing.
+The Squid Team are pleased to announce the release of Squid-3.0.STABLE2.
This new release is available for download from
http://www.squid-cache.org/Versions/v3/3.0/ or the
mirrors.
-A large number of the show-stopper bugs have been fixed along with general improvements to the ICAP support.
-While this release is not deemed ready for production use, we believe it is ready for wider testing by the community.
+A large number of the show-stopper bugs have been fixed along with general improvements to the ICAP support and additional Languages.
We welcome feedback and bug reports. If you find a bug, please see
http://wiki.squid-cache.org/SquidFaq/TroubleShooting#head-7067fc0034ce967e67911becaabb8c95a34d576d for how to submit a report with a stack trace.
-Although this release is deemed good enough for testing in many setups, please note the existence of
+
Although this release is deemed good enough for use in many setups, please note the existence of
open bugs against Squid-3.0.
-
+
The 3.0 change history can be
viewed here.
@@ -92,7 +91,7 @@ to perform some simple XML based processing, offloading the final page assembly
Some of the features found in Squid-2.6 is not available in Squid-3.
-Some has been dropped as they are not needed. Some has not yet been forward-ported to Squid-3 and may appear in a later release.
+Some have been dropped as they are not needed. Some have not yet been forward-ported to Squid-3 and may appear in a later release.
- refresh_stale_hit option. Not yet ported.
@@ -117,8 +116,10 @@ Some has been dropped as they are not needed. Some has not yet been forward-port
The TCP_REFRESH_HIT and TCP_REFRESH_MISS log types have been replaced because they were misleading (all refreshes need to query the origin server, so they could never be hits). The following log types have been introduced to replace them:
-- TCP_REFRESH_UNMODIFIED
The requested object was cached but STALE. The IMS query for the object resulted in "304 not modified".
-- TCP_REFRESH_MODIFIED
The requested object was cached but STALE. The IMS query returned the new content.
+- TCP_REFRESH_UNMODIFIED
-
+
The requested object was cached but STALE. The IMS query for the object resulted in "304 not modified".
+ - TCP_REFRESH_MODIFIED
-
+
The requested object was cached but STALE. The IMS query returned the new content.
See
@@ -151,7 +152,8 @@ Some has been dropped as they are not needed. Some has not yet been forward-port
-- minimum_icp_query_timeout (msec)
+
- minimum_icp_query_timeout (msec)
-
+
Default: 5
@@ -165,7 +167,8 @@ of a dynamic) timeout value. To set a fixed timeout see the
- - background_ping_rate
+
- background_ping_rate
-
+
Default: 10 seconds
@@ -175,7 +178,8 @@ have background-ping set.
- - httpd_accel_surrogate_id
+
- httpd_accel_surrogate_id
-
+
Default: unset
@@ -187,7 +191,8 @@ an identification token.
- - http_accel_surrogate_remote on|off
+
- http_accel_surrogate_remote on|off
-
+
Default: off
@@ -197,7 +202,8 @@ Set this to on to have squid behave as a remote surrogate.
- - esi_parser libxml2|expat|custom
+
- esi_parser libxml2|expat|custom
-
+
Default: custom
@@ -208,7 +214,8 @@ encodings.
- - email_err_data on|off
+
- email_err_data on|off
-
+
Default: on
@@ -220,7 +227,8 @@ Syntax is <A HREF="mailto:%w%W">%w</A>
- - refresh_all_ims on|off
+
- refresh_all_ims on|off
-
+
Default: off
@@ -235,10 +243,13 @@ based on the age of the cached version.
- - request_header_access
Replaces the header_access directive of Squid-2.6 and earlier, but applies to requests only.
-- reply_header_access
Replaces the header_access directive of Squid-2.6 and earlier, but applies to replies only.
+- request_header_access
-
+
Replaces the header_access directive of Squid-2.6 and earlier, but applies to requests only.
+ - reply_header_access
-
+
Replaces the header_access directive of Squid-2.6 and earlier, but applies to replies only.
- - icap_enable on|off
+
- icap_enable on|off
-
+
Default: off
@@ -246,7 +257,8 @@ If you want to enable the ICAP module support, set this to on.
- - icap_preview_enable on|off
+
- icap_preview_enable on|off
-
+
Default: off
@@ -255,7 +267,8 @@ feature in Squid.
- - icap_preview_size
+
- icap_preview_size
-
+
Default: -1
@@ -265,7 +278,8 @@ basis by OPTIONS requests.
- - icap_default_options_ttl (seconds)
+
- icap_default_options_ttl (seconds)
-
+
Default: 60
@@ -274,7 +288,8 @@ an Options-TTL header.
- - icap_persistent_connections on|off
+
- icap_persistent_connections on|off
-
+
Default: on
@@ -283,7 +298,8 @@ an ICAP server.
- - icap_send_client_ip on|off
+
- icap_send_client_ip on|off
-
+
Default: off
@@ -291,7 +307,8 @@ This adds the header "X-Client-IP" to ICAP requests.
- - icap_send_client_username on|off
+
- icap_send_client_username on|off
-
+
Default: off
@@ -300,7 +317,8 @@ if proxy access is authentified.
- - icap_service
+
- icap_service
-
+
Default: none
@@ -324,7 +342,8 @@ icap_service service_2 respmod_precache 0 icap://icap2.mydomain.net:1344/respmod
- - icap_class
+
- icap_class
-
+
Default: none
@@ -339,7 +358,8 @@ icap class class_2 service_1 service_3
- - icap_access
+
- icap_access
-
+
Default: none
@@ -363,7 +383,8 @@ icap_access class_1 allow all
- - accept_filter
+
- accept_filter
-
+
The name of an accept(2) filter to install on Squid's
listen socket(s). This feature is perhaps specific to
@@ -375,6 +396,31 @@ See the accf_http(9) man page.
+
+ - include
-
+
New option to import entire secondary configuration files into squid.conf.
+
+ Squid will follow the files immediately and insert all their content
+ as if it was at that position in squid.conf. As per squid.conf some
+ options are order-specific within the config as a whole.
+
+ A few layers of include are allowed, but too many are confusing and
+ squid will enforce an include depth of 16 files.
+
+ Syntax:
+ include /path/to/file1 /path/to/file2
+
+
+
+
+ - acl myportname
-
+
New acl type myportname, matching the name of the http(s)_port where the request was accepted
+
+ acl aclname myportname 3128 ... # http(s)_port name
+
+
+
+
@@ -383,7 +429,8 @@ See the accf_http(9) man page.
-- http_port
New options:
+
- http_port
-
+
New options:
disable-pmtu-discovery=
Control Path-MTU discovery usage:
@@ -409,13 +456,15 @@ See the accf_http(9) man page.
- - https_port
Removed options:
+
- https_port
-
+
Removed options:
urlgroup=, not yet ported to Squid-3.
- - cache_peer
New options:
+
- cache_peer
-
+
New options:
basetime=n
@@ -455,7 +504,8 @@ See the accf_http(9) man page.
- - cache_dir
Common options
+
- cache_dir
-
+
Common options
no-store, replaces the older read-only option
@@ -478,7 +528,8 @@ See the accf_http(9) man page.
- - auth_param
Removed Basic auth option
+
- auth_param
-
+
Removed Basic auth option
blankpasswor, not yet ported to squid-3.
auth_param basic concurrency 0
@@ -492,7 +543,8 @@ See the accf_http(9) man page.
- - external_acl_type
New format specifications:
+
- external_acl_type
-
+
New format specifications:
%URI Requested URI
@@ -516,7 +568,8 @@ See the accf_http(9) man page.
- - refresh_pattern
New options:
+
- refresh_pattern
-
+
New options:
ignore-no-store
refresh-ims
@@ -533,7 +586,8 @@ See the accf_http(9) man page.
- - acl
New types:
+
- acl
-
+
New types:
acl aclname http_status 200 301 500- 400-403 ... # status code in reply
@@ -550,14 +604,16 @@ See the accf_http(9) man page.
- - short_icon_urls
New default:
+
- short_icon_urls
-
+
New default:
Default: on
(Old default: off)
- - delay_class
New delay classes:
+
- delay_class
-
+
New delay classes:
class 4 Everything in a class 3 delay pool, with an
additional limit on a per user basis. This
@@ -571,7 +627,8 @@ See the accf_http(9) man page.
- - htcp_port
New default to require the feature to be enabled in squid.conf:
+
- htcp_port
-
+
New default to require the feature to be enabled in squid.conf:
Default: 0 (disabled)
(Old default: 4827)
@@ -579,7 +636,8 @@ See the accf_http(9) man page.
- - icp_port
New default to require the feature to be enabled in squid.conf:
+
- icp_port
-
+
New default to require the feature to be enabled in squid.conf:
Default: 0 (disabled)
(Old default: 3130)
@@ -587,7 +645,8 @@ See the accf_http(9) man page.
- - snmp_port
New default to require the feature to be enabled in squid.conf:
+
- snmp_port
-
+
New default to require the feature to be enabled in squid.conf:
Default: 0 (disabled)
(Old default: 3401)
@@ -595,7 +654,8 @@ See the accf_http(9) man page.
- - logformat
New format tags:
+
- logformat
-
+
New format tags:
rp Request URL-Path excluding hostname
@@ -617,7 +677,8 @@ See the accf_http(9) man page.
- - reply_body_max_size
Syntax changed:
+
- reply_body_max_size
-
+
Syntax changed:
reply_body_max_size size [acl acl...]
@@ -625,7 +686,8 @@ See the accf_http(9) man page.
allow/deny no longer used.
-
- url_rewrite_program
No urlgroup support in either requests or responese
+- url_rewrite_program
-
+
No urlgroup support in either requests or responese
@@ -636,19 +698,32 @@ See the accf_http(9) man page.
-- broken_vary_encoding
Not yet ported to Squid-3.
-- cache_vary
Not yet ported to Squid-3.
-- collapsed_forwarding
Not yet ported to Squid-3.
-- follow_x_forwarded_for
Not yet ported to Squid-3.
-- *_uses_indirect_client
Not yet ported to Squid-3.
-- error_map
Not yet ported to Squid-3.
-- header_access
This has been replaced by request_header_access and reply_header_access
-- http_access2
Not yet ported to Squid-3.
-- httpd_accel_no_pmtu_disc
Replaced by disable-pmtu-discovery http_port option
-- location_rewrite_*
Not yet ported to Squid-3.
-- refresh_stale_hit
Not yet ported to Squid-3.
-- umask
Not yet ported to Squid-3.
-- wais_relay_*
equivalent to cache_peer + cache_peer_access.
+- broken_vary_encoding
-
+
Not yet ported to Squid-3.
+ - cache_vary
-
+
Not yet ported to Squid-3.
+ - collapsed_forwarding
-
+
Not yet ported to Squid-3.
+ - follow_x_forwarded_for
-
+
Not yet ported to Squid-3.
+ - *_uses_indirect_client
-
+
Not yet ported to Squid-3.
+ - error_map
-
+
Not yet ported to Squid-3.
+ - header_access
-
+
This has been replaced by request_header_access and reply_header_access
+ - http_access2
-
+
Not yet ported to Squid-3.
+ - httpd_accel_no_pmtu_disc
-
+
Replaced by disable-pmtu-discovery http_port option
+ - location_rewrite_*
-
+
Not yet ported to Squid-3.
+ - refresh_stale_hit
-
+
Not yet ported to Squid-3.
+ - umask
-
+
Not yet ported to Squid-3.
+ - wais_relay_*
-
+
equivalent to cache_peer + cache_peer_access.
@@ -677,27 +752,33 @@ See the accf_http(9) man page.
-- --enable-shared[=PKGS]
Build shared libraries. The default is to build without.
+- --enable-shared[=PKGS]
-
+
Build shared libraries. The default is to build without.
- - --enable-static[=PKGS]
Build static libraries. The default is on.
+- --enable-static[=PKGS]
-
+
Build static libraries. The default is on.
- - --enable-fast-install[=PKGS]
+
- --enable-fast-install[=PKGS]
-
+
Optimize for fast installation
default: yes
- - --disable-libtool-lock
Avoid locking (might break parallel builds)
+- --disable-libtool-lock
-
+
Avoid locking (might break parallel builds)
- - --disable-optimizations
Don't compile Squid with compiler optimizations enabled.
+
- --disable-optimizations
-
+
Don't compile Squid with compiler optimizations enabled.
Optimization is good for production builds, but not
good for debugging. During development, use
--disable-optimizations to reduce compilation times
and allow easier debugging. This option implicitly
also enables --disable-inline
- - --disable-inline
Don't compile trivial methods as inline. Squid
+
- --disable-inline
-
+
Don't compile trivial methods as inline. Squid
is coded with much of the code able to be inlined.
Inlining is good for production builds, but not
good for development. During development, use
@@ -707,15 +788,18 @@ production builds, or load tests, use
--enable-inline to have squid make all trivial
methods inlinable by the compiler.
- - --enable-debug-cbdata
Provide some debug information in cbdata
+- --enable-debug-cbdata
-
+
Provide some debug information in cbdata
- - --enable-disk-io=\"list of modules\"
Build support for the list of disk I/O modules.
+
- --enable-disk-io=\"list of modules\"
-
+
Build support for the list of disk I/O modules.
The default is only to build the "Blocking" module.
See src/DiskIO for a list of available modules, or
Programmers Guide for details on how to build your
custom disk module.
- - --enable-esi
Enable ESI for accelerators. Requires libexpat.
+
- --enable-esi
-
+
Enable ESI for accelerators. Requires libexpat.
Enabling ESI will cause squid to follow the Edge
Acceleration Specification (www.esi.org). This
causes squid to IGNORE client Cache-Control headers.
@@ -723,23 +807,30 @@ causes squid to IGNORE client Cache-Control headers.
proxy, ONLY use it in a squid configured for
webserver acceleration.
- - --enable-icap-client
Enable the ICAP client.
+- --enable-icap-client
-
+
Enable the ICAP client.
- - --disable-snmp
Disable SNMP monitoring support which is now built by default.
+- --disable-snmp
-
+
Disable SNMP monitoring support which is now built by default.
- - --disable-htcp
Disable HTCP protocol support which is now built by default.
+- --disable-htcp
-
+
Disable HTCP protocol support which is now built by default.
- - --enable-kqueue
Enable kqueue() support. Marked as experimental in 3.0.
+- --enable-kqueue
-
+
Enable kqueue() support. Marked as experimental in 3.0.
- - --enable-ipfw-transparent
Enable Transparent Proxy support for systems
+
- --enable-ipfw-transparent
-
+
Enable Transparent Proxy support for systems
using FreeBSD IPFW style redirection.
- - --disable-mempools
Disable memPools. Note that this option now simply sets the
+
- --disable-mempools
-
+
Disable memPools. Note that this option now simply sets the
default behaviour. Specific classes can override this at runtime, and
only lib/MemPool.c needs to be altered to change the squid-wide
default for all classes.
- - --enable-cpu-profiling
This option allows you to see which internal functions
+
- --enable-cpu-profiling
-
+
This option allows you to see which internal functions
in Squid are consuming how much CPU. Compiles in probes
that measure time spent in probed functions. Needs
source modifications to add new probes. This is meant
@@ -749,16 +840,21 @@ of Squid internal functions.
you shouldn't enable this, as overhead added, although
small, is still overhead. See lib/Profiler.c for more.
- - --with-gnu-ld
Assume the C compiler uses GNU ld. The default is to auto-detect.
+- --with-gnu-ld
-
+
Assume the C compiler uses GNU ld. The default is to auto-detect.
- - --with-pic
Try to use only PIC/non-PIC objects. The default is to use both.
+- --with-pic
-
+
Try to use only PIC/non-PIC objects. The default is to use both.
- - --with-tags[=TAGS]
Include additional configurations. The default is automatic.
+- --with-tags[=TAGS]
-
+
Include additional configurations. The default is automatic.
- - --with-default-user=USER
Sets the default System User account for squid permissions.
+
- --with-default-user=USER
-
+
Sets the default System User account for squid permissions.
The default is 'nobody' as in other releases of squid.
- - --with-cppunit-basedir=[PATH]
Path where the cppunit headers and libraries are found
+
- --with-cppunit-basedir=[PATH]
-
+
Path where the cppunit headers and libraries are found
for unit testing. The default is automatic detection.
NOTE: Since 3.0-PRE6 and 2.6STABLE14 squid no longer comes
bundled with CPPUnit. Compile-time validation will be disabled
@@ -770,33 +866,42 @@ if it is not installed on your system.
-- --enable-carp
CARP support is now built by default.
---disable-carp can be used to buidl without it.
+- --enable-carp
-
+
CARP support is now built by default.
+--disable-carp can be used to build without it.
- - --enable-htcp
HTCP protocol support is now built by default.
+
- --enable-htcp
-
+
HTCP protocol support is now built by default.
Use --disable-htcp to build without it.
- - --enable-snmp
SNMP monitoring is now build by default.
+
- --enable-snmp
-
+
SNMP monitoring is now build by default.
Use --disable-snmp to build without it.
- - --enable-heap-replacement
Please use --enable-removal-policies directive instead.
+- --enable-heap-replacement
-
+
Please use --enable-removal-policies directive instead.
- - --with-maxfd=N
Replaced by --with-filedescriptors=N
+- --with-maxfd=N
-
+
Replaced by --with-filedescriptors=N
Override maximum number of filedescriptors. Useful
if you build as another user who is not privileged
to use the number of filedescriptors you want the
resulting binary to support
- - --enable-select
Deprecated.
+
- --enable-select
-
+
Deprecated.
Automatic checks will enable best I/O loop method available.
- - --enable-epoll
Deprecated.
+
- --enable-epoll
-
+
Deprecated.
Automatic checks will enable best I/O loop method available.
- - --enable-poll
Deprecated.
+
- --enable-poll
-
+
Deprecated.
Automatic checks will enable best I/O loop method available.
- - --enable-kqueue
kqueue support is marked Experimental in Squid 3.0. Known to have some issues under load.
+- --enable-kqueue
-
+
kqueue support is marked Experimental in Squid 3.0. Known to have some issues under load.
@@ -806,11 +911,14 @@ Automatic checks will enable best I/O loop method available.
porting one of these from Squid-2 to Squid-3 is most welcome.
-- --enable-devpoll
Support for Solaris /dev/poll
+- --enable-devpoll
-
+
Support for Solaris /dev/poll
- - --enable-select-simple
Basic POSIX select() loop without any binary fd_set optimizations.
+- --enable-select-simple
-
+
Basic POSIX select() loop without any binary fd_set optimizations.
- - --enable-follow-x-forwarded-for
Support following the X-Forwarded-For HTTP header for determining the
+
- --enable-follow-x-forwarded-for
-
+
Support following the X-Forwarded-For HTTP header for determining the
client IP address
@@ -820,13 +928,20 @@ client IP address
The following configure options have been removed.
-- --enable-dlmalloc
Most OS:es have good malloc implementations these days, and the version we used to ship with Squid was very very old..
-- --enable-mempool-debug
Debug option, not needed and therefore removed.
-- --enable-forward-log
Rarely used extra log file. Removed.
-- --enable-multicast-miss
Rarely used feature, and multicast ICP acheives almost the same result. Removed.
-- --enable-coss-aio-ops
Specific to the COSS implementation in Squid-2
-- --enable-large-cache-files
Now enabled by default. Configure option was redundant and therefore removed.
-- --enable-truncate
Known to cause race conditions where cache objects may get corrupted, and this for at most a marginal performance improvement. Removed.
+- --enable-dlmalloc
-
+
Most OS:es have good malloc implementations these days, and the version we used to ship with Squid was very very old..
+ - --enable-mempool-debug
-
+
Debug option, not needed and therefore removed.
+ - --enable-forward-log
-
+
Rarely used extra log file. Removed.
+ - --enable-multicast-miss
-
+
Rarely used feature, and multicast ICP acheives almost the same result. Removed.
+ - --enable-coss-aio-ops
-
+
Specific to the COSS implementation in Squid-2
+ - --enable-large-cache-files
-
+
Now enabled by default. Configure option was redundant and therefore removed.
+ - --enable-truncate
-
+
Known to cause race conditions where cache objects may get corrupted, and this for at most a marginal performance improvement. Removed.
diff --git a/doc/release-notes/release-3.0.sgml b/doc/release-notes/release-3.0.sgml
index 623ff63c6d..b7d6faad1d 100644
--- a/doc/release-notes/release-3.0.sgml
+++ b/doc/release-notes/release-3.0.sgml
@@ -1,8 +1,8 @@
-Squid 3.0.RC1 release notes
+Squid 3.0.STABLE2 release notes
Squid Developers
-$Id: release-3.0.sgml,v 1.30.4.1 2008/02/24 12:41:27 serassio Exp $
+$Id: release-3.0.sgml,v 1.30.4.2 2008/02/29 18:29:52 serassio Exp $
This document contains the release notes for version 3.0 of Squid.
@@ -14,20 +14,19 @@ for Applied Network Research and members of the Web Caching community.
Notice
-The Squid Team are pleased to announce the release of Squid-3.0.RC1 for pre-release testing.
+The Squid Team are pleased to announce the release of Squid-3.0.STABLE2.
This new release is available for download from or the .
-A large number of the show-stopper bugs have been fixed along with general improvements to the ICAP support.
-While this release is not deemed ready for production use, we believe it is ready for wider testing by the community.
+A large number of the show-stopper bugs have been fixed along with general improvements to the ICAP support and additional Languages.
We welcome feedback and bug reports. If you find a bug, please see for how to submit a report with a stack trace.
Known issues
-Although this release is deemed good enough for testing in many setups, please note the existence of .
+Although this release is deemed good enough for use in many setups, please note the existence of .
-Changes since earlier PRE releases of Squid-3.0
+Changes since earlier STABLE releases of Squid-3.0
The 3.0 change history can be .
@@ -85,7 +84,7 @@ to perform some simple XML based processing, offloading the final page assembly
2.6 features not found in Squid-3.0
Some of the features found in Squid-2.6 is not available in Squid-3.
-Some has been dropped as they are not needed. Some has not yet been forward-ported to Squid-3 and may appear in a later release.
+Some have been dropped as they are not needed. Some have not yet been forward-ported to Squid-3 and may appear in a later release.
- refresh_stale_hit option. Not yet ported.
@@ -326,6 +325,27 @@ The 'httpready' filter delays delivering new connections
to Squid until a full HTTP request has been received.
See the accf_http(9) man page.
+
+ include
+
New option to import entire secondary configuration files into squid.conf.
+
+ Squid will follow the files immediately and insert all their content
+ as if it was at that position in squid.conf. As per squid.conf some
+ options are order-specific within the config as a whole.
+
+ A few layers of include are allowed, but too many are confusing and
+ squid will enforce an include depth of 16 files.
+
+ Syntax:
+ include /path/to/file1 /path/to/file2
+
+
+ acl myportname
+
New acl type myportname, matching the name of the http(s)_port where the request was accepted
+
+ acl aclname myportname 3128 ... # http(s)_port name
+
+
diff --git a/errors/Makefile.am b/errors/Makefile.am
index cf027ee1b5..116d26d530 100644
--- a/errors/Makefile.am
+++ b/errors/Makefile.am
@@ -1,6 +1,6 @@
## Process this file with automake to produce Makefile.in
#
-# $Id: Makefile.am,v 1.14 2007/08/22 00:20:10 hno Exp $
+# $Id: Makefile.am,v 1.14.4.1 2008/02/29 18:29:54 serassio Exp $
#
errordir = $(datadir)/errors
@@ -42,7 +42,10 @@ LANGUAGES = \
Spanish \
Swedish \
Traditional_Chinese \
- Turkish
+ Turkish \
+ Ukrainian-1251 \
+ Ukrainian-koi8-u \
+ Ukrainian-utf8
install-data-local:
@for l in $(INSTALL_LANGUAGES); do \
diff --git a/errors/Makefile.in b/errors/Makefile.in
index 3afa91f6b4..851c0a6283 100644
--- a/errors/Makefile.in
+++ b/errors/Makefile.in
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $Id: Makefile.in,v 1.105.4.2 2007/12/27 20:37:22 serassio Exp $
+# $Id: Makefile.in,v 1.105.4.3 2008/02/29 18:29:54 serassio Exp $
#
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -303,7 +303,10 @@ LANGUAGES = \
Spanish \
Swedish \
Traditional_Chinese \
- Turkish
+ Turkish \
+ Ukrainian-1251 \
+ Ukrainian-koi8-u \
+ Ukrainian-utf8
all: all-am
diff --git a/errors/Swedish/ERR_ESI b/errors/Swedish/ERR_ESI
index b78db43c91..cae2060cda 100644
--- a/errors/Swedish/ERR_ESI
+++ b/errors/Swedish/ERR_ESI
@@ -1,29 +1,33 @@
-
-ERROR: The requested URL could not be retrieved
-
+
+FEL: Begärd URL kunde inte hämtas
+
-The requested URL could not be retrieved
+Begärd URL kunde inte hämtas
-While trying to retrieve the URL:
+Vid försöket att hämta URL:
%U
-The following error was encountered:
+Mottogs följande fel:
-ESI Processing failed.
+ESI bearbetning misslyckades.
+%H
+
-The ESI processor returned:
+ESI motorn returnerade:
-%Z
+%z
-This means that:
+Detta betyder att:
- The surrogate was not able to process the ESI template. Please report this error to the webmaster.
+ Surrogat servern kunde inte bearbeta ESI mallen.
+ Vänligen kontakta den ansvariga för webbservern ifråga.
-Your webmaster is %w.
-This page is in english because a translation has not been made. If you are able to, please create a translation and contact the squid project to get it included.
+
+Addressen till ansvarig administratör är %w.
+
diff --git a/errors/Ukrainian-1251/ERR_ACCESS_DENIED b/errors/Ukrainian-1251/ERR_ACCESS_DENIED
new file mode 100644
index 0000000000..2bdbc7f7b9
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_ACCESS_DENIED
@@ -0,0 +1,25 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Äîñòóï çàáîðîíåíèé.
+
+
+Íàñòðîéêà êîíòðîëþ äîñòóïó íå äîçâîëÿº âèêîíàòè Âàø
+çàïèò â äàíèé ÷àñ. ßêùî Âè ââàæàºòå öå íåïðàâèëüíèì, òî,
+áóäü-ëàñêà, êîíòàêòóéòå ç Âàøèì ²íòåðíåò ïðîâàéäåðîì.
+
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
+
diff --git a/errors/Ukrainian-1251/ERR_CACHE_ACCESS_DENIED b/errors/Ukrainian-1251/ERR_CACHE_ACCESS_DENIED
new file mode 100644
index 0000000000..e9cff832aa
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_CACHE_ACCESS_DENIED
@@ -0,0 +1,34 @@
+
+
+ÏÎÌÈËÊÀ: Äîñòóï äî êåøó çàáîðîíåíèé
+
+
+
+ÏÎÌÈËÊÀ
+Äîñòóï äî êåøó çàáîðîíåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Äîñòóï äî êåøó çàáîðîíåíèé
+
+
+
+
+Âèáà÷òå, àëå Âè íå ìîæåòå çàïðîñèòè:
+
%U
+ç öüîãî êåøó äî òèõ ï³ð, ïîêè íå ïðîéäåòå àóòåíòèô³êàö³þ.
+
+
+
+Âàì ïîòð³áíî âèêîðèñòîâóâàòè Netscape âåðñ³¿ 2.0 ÷è âèùå, àáî Microsoft Internet
+Explorer 3.0, àáî HTTP/1.1 ñóì³ñíèé áðîóçåð. Áóäü-ëàñêà, çâ'ÿæ³òüñÿ
+ç àäì³í³ñòðàòîðîì êåøó, ÿêùî ó Âàñ âèíèêëè òðóäíîù³
+ç àóòåíòèô³êàö³ºþ, àáî çì³í³òü
+Âàø ïàðîëü ïî çàìîâ÷óâàííþ.
+
diff --git a/errors/Ukrainian-1251/ERR_CACHE_MGR_ACCESS_DENIED b/errors/Ukrainian-1251/ERR_CACHE_MGR_ACCESS_DENIED
new file mode 100644
index 0000000000..cf35aaba67
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_CACHE_MGR_ACCESS_DENIED
@@ -0,0 +1,33 @@
+
+
+ÏÎÌÈËÊÀ: Äîñòóï äî êåðóâàííÿ êåøîì çàáîðîíåíèé
+
+
+
+ÏÎÌÈËÊÀ
+Äîñòóï äî êåðóâàííÿ êåøîì çàáîðîíåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Äîñòóï äî êåðóâàííÿ êåøîì çàáîðîíåíèé
+
+
+
+
+Âèáà÷òå, Âè íå ìîæåòå çàïðîñèòè:
+
%U
+ç öüîãî êåø ìåíåäæåðà äî òèõ ï³ð, ïîêè íå ïðîéäåòå àóòåíòèô³êàö³þ.
+
+
+Âàì ïîòð³áíî âèêîðèñòîâóâàòè Netscape âåðñ³¿ 2.0 ÷è âèùå, àáî Microsoft Internet
+Explorer 3.0, àáî HTTP/1.1 ñóì³ñíèé áðîóçåð. Áóäü-ëàñêà, çâ'ÿæ³òüñÿ
+ç àäì³í³ñòðàòîðîì êåøó, ÿêùî ó Âàñ âèíèêëè òðóäíîù³
+ç àóòåíòèô³êàö³ºþ, à ÿêùî Âè º àäì³í³ñòðàòîðîì,
+ïðî÷èòàéòå äîêóìåíòàö³þ Squid ïî ³íòåðôåéñó êåðóâàííÿ êåøîì ³ ïåðåâ³ðòå
+æóðíàë êåøó (cache log) íà ïðåäìåò á³ëüø äåòàëüíèõ ïîâ³äîìëåíü ïðî ïîìèëêè.
diff --git a/errors/Ukrainian-1251/ERR_CANNOT_FORWARD b/errors/Ukrainian-1251/ERR_CANNOT_FORWARD
new file mode 100644
index 0000000000..b497ed5786
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_CANNOT_FORWARD
@@ -0,0 +1,30 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Â äàíèé ìîìåíò íåìîæëèâî ïåðåñëàòè öåé çàïèò
+
+
+
+
+Äàíèé çàïèò íå ìîæå áóòè ïåðåñëàíèé äî ñåðâåðà-äæåðåëà, ÷è äî áóäü-ÿêîãî
+ç âèùåñòîÿ÷èõ êåø³â. Íàéá³ëüø â³ðîã³äíà ïðè÷èíà ïîìèëêè:
+
+- Àäì³í³ñòðàòîð êåøó çàáîðîíèâ âèêîíóâàòè ïðÿì³ ç'ºäíàííÿ
+ç ñåðâåðàìè-äæåðåëàìè (origin servers) ³
+
- óñ³ âèùåñòîÿ÷³ êåø-ñåðâåðà (parent caches) â äàíèé ìîìåíò íåäîñòóïí³.
+
+Âàøèì êåø àäì³í³ñòðàòîðîì º %w.
+
diff --git a/errors/Ukrainian-1251/ERR_CONNECT_FAIL b/errors/Ukrainian-1251/ERR_CONNECT_FAIL
new file mode 100644
index 0000000000..43d9013235
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_CONNECT_FAIL
@@ -0,0 +1,27 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Íå âäàëîñü âñòàíîâèòè ç'ºäíàííÿ
+
+
+
+
+Ñèñòåìà ïîâ³äîìëÿº:
+
%E
+
+
+³ääàëåí³ õîñò ÷è ìåðåæà íå â³äïîâ³äàþòü. Áóäü-ëàñêà, ïîâòîð³òü ñâ³é çàïèò ùå ðàç.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_DNS_FAIL b/errors/Ukrainian-1251/ERR_DNS_FAIL
new file mode 100644
index 0000000000..e094d08b14
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_DNS_FAIL
@@ -0,0 +1,32 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+Íåìîæëèâî âèçíà÷èòè IP àäðåñó âóçëà
+%H
+
+
+
+DNS ñåðâåð ïîâ³äîìëÿº:
+
+%z
+
+
+
+Öå îçíà÷àº:
+
+ Êåøó íå âäàëîñÿ âèçíà÷èòè ³ì'ÿ ñåðâåðà, âêàçàíå â URL.
+ Ïåðåâ³ðòå ïðàâèëüí³ñòü íàïèñàííÿ àäðåñó.
+
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
+
diff --git a/errors/Ukrainian-1251/ERR_ESI b/errors/Ukrainian-1251/ERR_ESI
new file mode 100644
index 0000000000..7ad18056f9
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_ESI
@@ -0,0 +1,28 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+Îáðîáêà ESI çàâåðøèëàñü íåâäàëî.
+
+
+
+ESI ïðîöåñîð ïîâ³äîìèâ:
+
+%Z
+
+
+
+Öå îçíà÷ຠùî:
+
+ Çàì³ííèê íå çì³ã îáðîáèòè ESI òåìïëåéò. Áóäü-ëàñêà ïîâ³äîìòå ïðî öþ ïîìèëêó âåáìàéñòðà.
+
+Âàøèì âåáìàéñòðîì º %w.
diff --git a/errors/Ukrainian-1251/ERR_FORWARDING_DENIED b/errors/Ukrainian-1251/ERR_FORWARDING_DENIED
new file mode 100644
index 0000000000..3606528d55
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FORWARDING_DENIED
@@ -0,0 +1,24 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Ïåðåñèëêà çàáîðîíåíà
+
+
+
+
+Öåé êåø íå ïåðåñèëàòèìå Âàø çàïèò, òîìó ùî â³í íàìàãàºòüñÿ âñòàíîâèòè áðàòí³ â³äíîñèíè (sibling relationship).
+Ìîæëèâî, ê볺íò %i - íåâ³ðíî ñêîíô³ãóðîâàíèé êåø.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_FTP_DISABLED b/errors/Ukrainian-1251/ERR_FTP_DISABLED
new file mode 100644
index 0000000000..afd07ee5ff
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_DISABLED
@@ -0,0 +1,23 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+FTP äîñòóï çàáîðîíåíèé.
+
+
+
+
+Öåé êåø íå ï³äòðèìóº ïðîòîêîë FTP.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_FTP_FAILURE b/errors/Ukrainian-1251/ERR_FTP_FAILURE
new file mode 100644
index 0000000000..6a5e576c9a
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_FAILURE
@@ -0,0 +1,19 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL
+âèíèêëà ïîìèëêà ïðîòîêîëó FTP:
+%U
+
+Squid ïîñëàâ íàñòóïíó êîìàíäó FTP:
+
%f
+³ ïîò³ì îòðèìàâ òàêó â³äïîâ³äü
+%F
+%g
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_FTP_FORBIDDEN b/errors/Ukrainian-1251/ERR_FTP_FORBIDDEN
new file mode 100644
index 0000000000..01f4435635
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_FORBIDDEN
@@ -0,0 +1,19 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+Ñòàëàñü íåâäàëà FTP àóòåíòèô³êàö³ÿ
+
+Squid ïîñëàâ íàñòóïíó FTP êîìàíäó:
+
%f
+³ ïîò³ì îòðèìàâ òàêó â³äïîâ³äü
+%F
+%g
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_FTP_NOT_FOUND b/errors/Ukrainian-1251/ERR_FTP_NOT_FOUND
new file mode 100644
index 0000000000..e288d454fc
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_NOT_FOUND
@@ -0,0 +1,22 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+Äàíèé URL íå ìîæå áóòè äîñòàâëåíèé:
+%U
+
+Squid ïîñëàâ íàñòóïíó FTP êîìàíäó:
+
%f
+³ ïîò³ì îòðèìàâ òàêó â³äïîâ³äü
+%F
+%g
+
+Öå ìîæå áóòè âèêëèêàíî FTP àäðåñîþ ç àáñîëþòíèì øëÿõîì (ÿêèé íå
+â³äïîâ³äຠñòàíäàðòó RFC 1738).  òàêîìó âèïàäêó, ôàéë ìîæå áóòè
+çíàéäåíèé çà àäðåñîþ %B.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_FTP_PUT_CREATED b/errors/Ukrainian-1251/ERR_FTP_PUT_CREATED
new file mode 100644
index 0000000000..7e180cddd5
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_PUT_CREATED
@@ -0,0 +1,9 @@
+
+
+Êîìàíäà FTP PUT çàâåðøèëàñü óñï³øíî: Ôàéë ñòâîðåíèé
+
+
+Îïåðàö³ÿ çàâåðøèëàñü óñï³øíî
+Ôàéë ñòâîðåíèé
+
+
diff --git a/errors/Ukrainian-1251/ERR_FTP_PUT_ERROR b/errors/Ukrainian-1251/ERR_FTP_PUT_ERROR
new file mode 100644
index 0000000000..97e461044c
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_PUT_ERROR
@@ -0,0 +1,26 @@
+
+
+ÏÎÌÈËÊÀ: Êîìàíäà FTP PUT/upload çàâåðøèëàñü íåâäàëî
+
+
+ÏÎÌÈËÊÀ
+FTP PUT/upload çàâåðøèëàñü íåâäàëî
+
+
+ϳä ÷àñ äîñòàâêè ôàéëà çà àäðåñîþ:
+%U
+
+Squid ïîñëàâ íàñòóïíó FTP êîìàíäó:
+
+ %f
+
+³ ïîò³ì îòðèìàâ òàêó â³äïîâ³äü
+
+ %F
+
+
+Öå îçíà÷ຠùî:
+
+Âàì ñë³ä ïåðåâ³ðèòè øëÿõ, ïðàâà äîñòóïó, â³ëüíå ì³ñöå ³ ï³ñëÿ öüîãî ñïðîáóâàòè çíîâó.
+
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_FTP_PUT_MODIFIED b/errors/Ukrainian-1251/ERR_FTP_PUT_MODIFIED
new file mode 100644
index 0000000000..ef8286dc36
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_PUT_MODIFIED
@@ -0,0 +1,11 @@
+
+
+Êîìàíäà FTP PUT çàâåðøèëàñü óñï³øíî: Ôàéë îíîâëåíèé
+
+
+Îïåðàö³ÿ çàâåðøèëàñü óñï³øíî.
+Ôàéë îíîâëåíèé
+
+
+
+
diff --git a/errors/Ukrainian-1251/ERR_FTP_UNAVAILABLE b/errors/Ukrainian-1251/ERR_FTP_UNAVAILABLE
new file mode 100644
index 0000000000..b602401ea2
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_FTP_UNAVAILABLE
@@ -0,0 +1,20 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+FTP ñåðâåð áóâ ïåðåãðóæåíèé
+
+Squid ïîñëàâ íàñòóïíó FTP êîìàíäó:
+
%f
+³ ïîò³ì îòðèìàâ òàêó â³äïîâ³äü
+%F
+%g
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
+
diff --git a/errors/Ukrainian-1251/ERR_ICAP_FAILURE b/errors/Ukrainian-1251/ERR_ICAP_FAILURE
new file mode 100644
index 0000000000..82b8b63d60
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_ICAP_FAILURE
@@ -0,0 +1,33 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Ïîìèëêà ïðîòîêîëó ICAP.
+
+
+
+
+Ñèñòåìà ïîâ³äîìèëà:
+
%E
+
+
+Öå ìîæå îçíà÷àòè:
+Äåÿê³ àñïåêòè ICAP ç'ºäíàííÿ íåñïðàâí³. Ìîæëèâ³ ïðîáëåìè:
+
+- Äîñòóï äî ICAP ñåðâåðó íåìîæëèâèé.
+
- Íåâ³ðíà â³äïîâ³äü â³ä ICAP ñåðâåðó.
+
+
+
diff --git a/errors/Ukrainian-1251/ERR_INVALID_REQ b/errors/Ukrainian-1251/ERR_INVALID_REQ
new file mode 100644
index 0000000000..028da1d7d7
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_INVALID_REQ
@@ -0,0 +1,31 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+
+
+Äåÿê³ àñïåêòè HTTP çàïèòó íåâ³ðí³. Ìîæëèâ³ ïðîáëåìè:
+
+- ³äñóòí³é àáî íåâ³äîìèé ìåòîä çàïèòó (GET, POST)
+
- ³äñóòí³é URL
+
- ³äñóòí³é HTTP ³äåíòèô³êàòîð (HTTP/1.0)
+
- Çàïèò íàäòî âåëèêèé
+
- Íå âêàçàíèé Content-Length äëÿ çàïèò³â POST ÷è PUT
+
- Íåäîïóñòèìèé ñèìâîë â ³ìåí³ ñåðâåðà; ï³ä÷åðêóâàííÿ íåäîïóñòèì³
+
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_INVALID_RESP b/errors/Ukrainian-1251/ERR_INVALID_RESP
new file mode 100644
index 0000000000..0d3b17fc2f
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_INVALID_RESP
@@ -0,0 +1,28 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+
+
+The HTTP â³äïîâ³äíå ïîâ³äîìëåííÿ, îòðèìàíå â³ä ñåðâåðà
+íå ìîæå áóòè âèçíà÷åíå àáî º íåïðàâèëüíî çôîðìîâàíèì.
+Áóäü-ëàñêà, êîíòàêòóéòå ç àäì³í³ñòðàòîðîì ñàéòó. Âàø àäì³í³ñòðàòîð
+êåøó ìîæå íàäàòè Âàì á³ëüø äåòàëüíó ³íôîðìàö³þ ïðî
+äàíó ïîìèëêó, ÿêùî öå íåîáõ³äíî.
+
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_INVALID_URL b/errors/Ukrainian-1251/ERR_INVALID_URL
new file mode 100644
index 0000000000..dcb19b4303
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_INVALID_URL
@@ -0,0 +1,30 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Íåïðàâèëüíèé URL
+
+
+
+
+Äåÿê³ àñïåêòè çàïðîøåíîãî URL º íåïðàâèëüíèìè. Ìîæëèâ³ ïðîáëåìè:
+
+- ³äñóòí³é ÷è íåâ³ðíèé ïðîòîêîë äîñòóïó (ïîâèíåí áóòè `http://'' àáî
+ñõîæèé)
+
- ³äñóòíº ³ì'ÿ ñåðâåðà
+
- Íåäîïóñòèìèé ïîäâ³éíèé êåðóþ÷èé ñèìâîë â URL-øëÿõó
+
- Íåäîïóñòèìèé ñèìâîë â ³ìåí³ ñåðâåðà; ï³ä÷åðêóâàííÿ íåäîïóñòèì³
+
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_LIFETIME_EXP b/errors/Ukrainian-1251/ERR_LIFETIME_EXP
new file mode 100644
index 0000000000..87e8cfe95d
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_LIFETIME_EXP
@@ -0,0 +1,24 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+×àñ ç'ºäíàííÿ çàê³í÷èâñÿ
+
+
+
+
+Squid çàâåðøèâ Âàø çàïèò ó çâ'ÿçêó ç ïåðåâèùåííÿì
+ìàêñèìàëüíîãî ÷àñó ç'ºäíàííÿ.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_NO_RELAY b/errors/Ukrainian-1251/ERR_NO_RELAY
new file mode 100644
index 0000000000..cac818cb97
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_NO_RELAY
@@ -0,0 +1,23 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Wais Relay íå âèçíà÷åíèé
+
+
+
+
+Äëÿ öüîãî êåøó íå âèçíà÷åíèé WAIS Relay host! Çâåðí³òüñÿ äî àäì³í³ñòðàòîðà.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_ONLY_IF_CACHED_MISS b/errors/Ukrainian-1251/ERR_ONLY_IF_CACHED_MISS
new file mode 100644
index 0000000000..4bf4cb0497
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_ONLY_IF_CACHED_MISS
@@ -0,0 +1,26 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+³äïîâ³äíèé îá'ºêò íå áóâ çíàéäåíèé â êåø³, â ðåçóëüòàò³ ÷îãî áóëà
+âèçíà÷åíà äèðåêòèâà
only-if-cached
.
+
+
+
+
+Âû ïîñëàëè çàïèò ç äèðåêòèâîþ êåø-êîíòðîëþ only-if-cached
.
+Îá'ºêò íå áóâ çíàéäåíèé â êåø³, àáî â³í âèìàãຠîíîâëåííÿ,
+ÿêå çàáîðîíåíî only-if-cached
äèðåêòèâîþ.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_READ_ERROR b/errors/Ukrainian-1251/ERR_READ_ERROR
new file mode 100644
index 0000000000..6fea0d5051
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_READ_ERROR
@@ -0,0 +1,28 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+
+
+Ñèñòåìà ïîâ³äîìèëà:
+
%E
+
+
+ϳä ÷àñ ÷èòàííÿ äàíèõ ç ìåðåæ³ âèíèêëà ïîìèëêà. Áóäü-ëàñêà, ïîâòîð³òü
+Âàø çàïèò.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_READ_TIMEOUT b/errors/Ukrainian-1251/ERR_READ_TIMEOUT
new file mode 100644
index 0000000000..3348572c46
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_READ_TIMEOUT
@@ -0,0 +1,28 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Ïåðåâèùåíèé ÷àñ î÷³êóâàííÿ â³äïîâ³ä³.
+
+
+
+
+Ñèñòåìà ïîâ³äîìèëà:
+
%E
+
+
+Ïåðåâèùåíèé ÷àñ î÷³êóâàííÿ â³äïîâ³ä³ ï³ä ÷àñ ÷èòàííÿ äàíèõ ç ìåðåæ³. Ìåðåæà
+÷è ñåðâåð ìîæóòü íå ïðàöþâàòè ÷è áóòè ïåðåãðóæåíèìè. Áóäü-ëàñêà, ïîâòîð³òü Âàø çàïèò.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_SECURE_CONNECT_FAIL b/errors/Ukrainian-1251/ERR_SECURE_CONNECT_FAIL
new file mode 100644
index 0000000000..0cbbe670e9
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_SECURE_CONNECT_FAIL
@@ -0,0 +1,31 @@
+
+
+ERROR: The requested URL could not be retrieved
+
+
+ERROR
+The requested URL could not be retrieved
+
+
+While trying to retrieve the URL:
+%U
+
+The following error was encountered:
+
+-
+
+Failed to establish a secure connection to %I
+
+
+
+
+The system returned:
+
%E
+
+
+This proxy and the remote host failed to negotiate a mutually acceptable
+security settings for handling your request. It is possible that the remote
+host does not support secure connections, or the proxy is not satisfied with
+the host security credentials.
+
+
Your cache administrator is %w.
diff --git a/errors/Ukrainian-1251/ERR_SHUTTING_DOWN b/errors/Ukrainian-1251/ERR_SHUTTING_DOWN
new file mode 100644
index 0000000000..35ea961c1d
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_SHUTTING_DOWN
@@ -0,0 +1,17 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+Öåé êåø â äàíèé ìîìåíò ÷àñó çíàõîäèòüñÿ â ïðîöåñ³ çóïèíêè ³ íå ìîæå îáñëóæèòè
+âàø çàïèò. Áóäü-ëàñêà, ïîâòîð³òü Âàø çàïèò ÷åðåç äåÿêèé ÷àñ çíîâó.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_SOCKET_FAILURE b/errors/Ukrainian-1251/ERR_SOCKET_FAILURE
new file mode 100644
index 0000000000..11b1bfc36c
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_SOCKET_FAILURE
@@ -0,0 +1,28 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Ïîìèëêà TCP socket.
+
+
+
+
+Ñèñòåìà ïîâ³äîìèëà:
+
%E
+
+
+Squid íå ìîæå ñòâîðèòè TCP socket, ñêîð³ø çà âñå ÷åðåç äóæå âèñîêó çàãðóçêó ñåðâåðà.
+Áóäü-ëàñêà, ïîâòîð³òü Âàø çàïèò.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_TOO_BIG b/errors/Ukrainian-1251/ERR_TOO_BIG
new file mode 100644
index 0000000000..72de80b074
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_TOO_BIG
@@ -0,0 +1,28 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Çàïèò ÷è â³äïîâ³äü íàäòî âåëèêà.
+
+
+
+Ó âèïàäêó, ÿêùî Âè çä³éñíþâàëè POST ÷è PUT çàïèò, òîä³ Âàø çàïèò
+(òå, ùî Âè íàìàãàëèñü çàêà÷àòè) º íàäòî âåëèêèì. ßêùî Âè
+çä³éñíþâàëè GET çàïèò, òîä³ â³äêëèê (òå, ùî Âè íàìàãàëèñü âèêà÷àòè
+) º íàäòî âåëèêèì. Ö³ îáìåæåííÿ áóëè âñòàíîâëåí³
+Âàøèì ²íòåðíåò Ïðîâàéäåðîì, ÿêèé êåðóº êåøîì. Áóäü-ëàñêà,
+ïîâ³äîìòå éîãî, ÿêùî Âè ââàæàºòå äàíå ïîâ³äîìëåííÿ ïîìèëêîþ.
+
+Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_UNSUP_REQ b/errors/Ukrainian-1251/ERR_UNSUP_REQ
new file mode 100644
index 0000000000..dfb8800b0a
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_UNSUP_REQ
@@ -0,0 +1,24 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Ìåòîä ÷è ïðîòîêîë çàïèòó íå ï³äòðèìóþòüñÿ
+
+
+
+
+Squid íå ï³äòðèìóº âñ³ ìåòîäè çàïèò³â äëÿ óñ³õ ïðîòîêîë³â.
+Íàïðèêëàä, äëÿ ïðîòîêîëó Gopher Âè íå ìîæåòå âèêîíàòè çàïèò POST.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_URN_RESOLVE b/errors/Ukrainian-1251/ERR_URN_RESOLVE
new file mode 100644
index 0000000000..8e0ec33959
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_URN_RESOLVE
@@ -0,0 +1,24 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URN íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+URL äëÿ çàïðîøåíîãî URN íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URN:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+Íåìîæëèâî âèçíà÷èòè URN
+(Cannot Resolve URN)
+
+
+
+
+Íå âàðòî áàãàòî ÷îãî î÷³êóâàòè â³ä ö³º¿ òåõíîëî㳿 URNs íà %T :)
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/ERR_WRITE_ERROR b/errors/Ukrainian-1251/ERR_WRITE_ERROR
new file mode 100644
index 0000000000..1ad3f4bd78
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_WRITE_ERROR
@@ -0,0 +1,32 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+
+
+Ñèñòåìà ïîâ³äîìèëà:
+
%E
+
+
+ϳä ÷àñ â³äïðàâëåííÿ ³íôîðìàö³¿ â ìåðåæó âèíèêëà ïîìèëêà. Áóäü-ëàñêà, ïîâòîð³òü
+Âàø çàïèò
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
+
+
+
+
diff --git a/errors/Ukrainian-1251/ERR_ZERO_SIZE_OBJECT b/errors/Ukrainian-1251/ERR_ZERO_SIZE_OBJECT
new file mode 100644
index 0000000000..73ef10bfc1
--- /dev/null
+++ b/errors/Ukrainian-1251/ERR_ZERO_SIZE_OBJECT
@@ -0,0 +1,23 @@
+
+
+ÏÎÌÈËÊÀ: Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ÏÎÌÈËÊÀ
+Çàïðîøåíèé URL íå ìîæå áóòè äîñòàâëåíèé
+
+
+ϳä ÷àñ äîñòàâêè URL:
+%U
+
+Âèíèêëà íàñòóïíà ïîìèëêà:
+
+-
+
+³äïîâ³äü íóëüîâî¿ äîâæèíè
+
+
+
+
+Squid íå îòðèìàâ áóäü-ÿêèõ äàíèõ äëÿ öüîãî çàïèòó.
+
Âàøèì àäì³í³ñòðàòîðîì êåøó º %w.
diff --git a/errors/Ukrainian-1251/README b/errors/Ukrainian-1251/README
new file mode 100644
index 0000000000..8dafd52f15
--- /dev/null
+++ b/errors/Ukrainian-1251/README
@@ -0,0 +1,4 @@
+Thank you to
+ Ïåòðî Íåê
+ Vitaliy Matytsyn (main)
+for creating these error pages in Ukrainian!
diff --git a/errors/Ukrainian-koi8-u/ERR_ACCESS_DENIED b/errors/Ukrainian-koi8-u/ERR_ACCESS_DENIED
new file mode 100644
index 0000000000..49f382af17
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_ACCESS_DENIED
@@ -0,0 +1,25 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+äÏÓÔÕÐ ÚÁÂÏÒÏÎÅÎÉÊ.
+
+
+îÁÓÔÒÏÊËÁ ËÏÎÔÒÏÌÀ ÄÏÓÔÕÐÕ ÎÅ ÄÏÚ×ÏÌѤ ×ÉËÏÎÁÔÉ ÷ÁÛ
+ÚÁÐÉÔ × ÄÁÎÉÊ ÞÁÓ. ñËÝÏ ÷É ××ÁÖÁ¤ÔÅ ÃÅ ÎÅÐÒÁ×ÉÌØÎÉÍ, ÔÏ,
+ÂÕÄØ-ÌÁÓËÁ, ËÏÎÔÁËÔÕÊÔÅ Ú ÷ÁÛÉÍ ¶ÎÔÅÒÎÅÔ ÐÒÏ×ÁÊÄÅÒÏÍ.
+
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
+
diff --git a/errors/Ukrainian-koi8-u/ERR_CACHE_ACCESS_DENIED b/errors/Ukrainian-koi8-u/ERR_CACHE_ACCESS_DENIED
new file mode 100644
index 0000000000..88b76c650e
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_CACHE_ACCESS_DENIED
@@ -0,0 +1,34 @@
+
+
+ðïíéìëá: äÏÓÔÕÐ ÄÏ ËÅÛÕ ÚÁÂÏÒÏÎÅÎÉÊ
+
+
+
+ðïíéìëá
+äÏÓÔÕÐ ÄÏ ËÅÛÕ ÚÁÂÏÒÏÎÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+äÏÓÔÕÐ ÄÏ ËÅÛÕ ÚÁÂÏÒÏÎÅÎÉÊ
+
+
+
+
+÷ÉÂÁÞÔÅ, ÁÌÅ ÷É ÎÅ ÍÏÖÅÔÅ ÚÁÐÒÏÓÉÔÉ:
+
%U
+Ú ÃØÏÇÏ ËÅÛÕ ÄÏ ÔÉÈ Ð¦Ò, ÐÏËÉ ÎÅ ÐÒÏÊÄÅÔÅ ÁÕÔÅÎÔÉÆ¦ËÁæÀ.
+
+
+
+÷ÁÍ ÐÏÔÒ¦ÂÎÏ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ Netscape ×ÅÒÓ¦§ 2.0 ÞÉ ×ÉÝÅ, ÁÂÏ Microsoft Internet
+Explorer 3.0, ÁÂÏ HTTP/1.1 ÓÕͦÓÎÉÊ ÂÒÏÕÚÅÒ. âÕÄØ-ÌÁÓËÁ, Ú×'ÑÖ¦ÔØÓÑ
+Ú ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ, ÑËÝÏ Õ ÷ÁÓ ×ÉÎÉËÌÉ ÔÒÕÄÎÏݦ
+Ú ÁÕÔÅÎÔÉÆ¦ËÁæ¤À, ÁÂÏ ÚÍ¦Î¦ÔØ
+÷ÁÛ ÐÁÒÏÌØ ÐÏ ÚÁÍÏ×ÞÕ×ÁÎÎÀ.
+
diff --git a/errors/Ukrainian-koi8-u/ERR_CACHE_MGR_ACCESS_DENIED b/errors/Ukrainian-koi8-u/ERR_CACHE_MGR_ACCESS_DENIED
new file mode 100644
index 0000000000..eac1a26cf5
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_CACHE_MGR_ACCESS_DENIED
@@ -0,0 +1,33 @@
+
+
+ðïíéìëá: äÏÓÔÕÐ ÄÏ ËÅÒÕ×ÁÎÎÑ ËÅÛÏÍ ÚÁÂÏÒÏÎÅÎÉÊ
+
+
+
+ðïíéìëá
+äÏÓÔÕÐ ÄÏ ËÅÒÕ×ÁÎÎÑ ËÅÛÏÍ ÚÁÂÏÒÏÎÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+äÏÓÔÕÐ ÄÏ ËÅÒÕ×ÁÎÎÑ ËÅÛÏÍ ÚÁÂÏÒÏÎÅÎÉÊ
+
+
+
+
+÷ÉÂÁÞÔÅ, ÷É ÎÅ ÍÏÖÅÔÅ ÚÁÐÒÏÓÉÔÉ:
+
%U
+Ú ÃØÏÇÏ ËÅÛ ÍÅÎÅÄÖÅÒÁ ÄÏ ÔÉÈ Ð¦Ò, ÐÏËÉ ÎÅ ÐÒÏÊÄÅÔÅ ÁÕÔÅÎÔÉÆ¦ËÁæÀ.
+
+
+÷ÁÍ ÐÏÔÒ¦ÂÎÏ ×ÉËÏÒÉÓÔÏ×Õ×ÁÔÉ Netscape ×ÅÒÓ¦§ 2.0 ÞÉ ×ÉÝÅ, ÁÂÏ Microsoft Internet
+Explorer 3.0, ÁÂÏ HTTP/1.1 ÓÕͦÓÎÉÊ ÂÒÏÕÚÅÒ. âÕÄØ-ÌÁÓËÁ, Ú×'ÑÖ¦ÔØÓÑ
+Ú ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ, ÑËÝÏ Õ ÷ÁÓ ×ÉÎÉËÌÉ ÔÒÕÄÎÏݦ
+Ú ÁÕÔÅÎÔÉÆ¦ËÁæ¤À, Á ÑËÝÏ ÷É ¤ ÁÄͦΦÓÔÒÁÔÏÒÏÍ,
+ÐÒÏÞÉÔÁÊÔÅ ÄÏËÕÍÅÎÔÁæÀ Squid ÐÏ ¦ÎÔÅÒÆÅÊÓÕ ËÅÒÕ×ÁÎÎÑ ËÅÛÏÍ ¦ ÐÅÒÅצÒÔÅ
+ÖÕÒÎÁÌ ËÅÛÕ (cache log) ÎÁ ÐÒÅÄÍÅÔ Â¦ÌØÛ ÄÅÔÁÌØÎÉÈ ÐÏצÄÏÍÌÅÎØ ÐÒÏ ÐÏÍÉÌËÉ.
diff --git a/errors/Ukrainian-koi8-u/ERR_CANNOT_FORWARD b/errors/Ukrainian-koi8-u/ERR_CANNOT_FORWARD
new file mode 100644
index 0000000000..710f4925b8
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_CANNOT_FORWARD
@@ -0,0 +1,30 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+÷ ÄÁÎÉÊ ÍÏÍÅÎÔ ÎÅÍÏÖÌÉ×Ï ÐÅÒÅÓÌÁÔÉ ÃÅÊ ÚÁÐÉÔ
+
+
+
+
+äÁÎÉÊ ÚÁÐÉÔ ÎÅ ÍÏÖÅ ÂÕÔÉ ÐÅÒÅÓÌÁÎÉÊ ÄÏ ÓÅÒ×ÅÒÁ-ÄÖÅÒÅÌÁ, ÞÉ ÄÏ ÂÕÄØ-ÑËÏÇÏ
+Ú ×ÉÝÅÓÔÏÑÞÉÈ ËÅÛ¦×. îÁÊÂ¦ÌØÛ ×¦ÒÏǦÄÎÁ ÐÒÉÞÉÎÁ ÐÏÍÉÌËÉ:
+
+- áÄͦΦÓÔÒÁÔÏÒ ËÅÛÕ ÚÁÂÏÒÏÎÉ× ×ÉËÏÎÕ×ÁÔÉ ÐÒÑͦ Ú'¤ÄÎÁÎÎÑ
+Ú ÓÅÒ×ÅÒÁÍÉ-ÄÖÅÒÅÌÁÍÉ (origin servers) ¦
+
- ÕÓ¦ ×ÉÝÅÓÔÏÑÞ¦ ËÅÛ-ÓÅÒ×ÅÒÁ (parent caches) × ÄÁÎÉÊ ÍÏÍÅÎÔ ÎÅÄÏÓÔÕÐΦ.
+
+÷ÁÛÉÍ ËÅÛ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ¤ %w.
+
diff --git a/errors/Ukrainian-koi8-u/ERR_CONNECT_FAIL b/errors/Ukrainian-koi8-u/ERR_CONNECT_FAIL
new file mode 100644
index 0000000000..a79d25439b
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_CONNECT_FAIL
@@ -0,0 +1,27 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+îÅ ×ÄÁÌÏÓØ ×ÓÔÁÎÏ×ÉÔÉ Ú'¤ÄÎÁÎÎÑ
+
+
+
+
+óÉÓÔÅÍÁ ÐÏצÄÏÍÌѤ:
+
%E
+
+
+÷¦ÄÄÁÌÅΦ ÈÏÓÔ ÞÉ ÍÅÒÅÖÁ ΊצÄÐÏצÄÁÀÔØ. âÕÄØ-ÌÁÓËÁ, ÐÏ×ÔÏÒ¦ÔØ Ó×¦Ê ÚÁÐÉÔ ÝÅ ÒÁÚ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_DNS_FAIL b/errors/Ukrainian-koi8-u/ERR_DNS_FAIL
new file mode 100644
index 0000000000..9946e273e7
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_DNS_FAIL
@@ -0,0 +1,32 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+îÅÍÏÖÌÉ×Ï ×ÉÚÎÁÞÉÔÉ IP ÁÄÒÅÓÕ ×ÕÚÌÁ
+%H
+
+
+
+DNS ÓÅÒ×ÅÒ ÐÏצÄÏÍÌѤ:
+
+%z
+
+
+
+ãÅ ÏÚÎÁÞÁ¤:
+
+ ëÅÛÕ ÎÅ ×ÄÁÌÏÓÑ ×ÉÚÎÁÞÉÔÉ ¦Í'Ñ ÓÅÒ×ÅÒÁ, ×ËÁÚÁÎÅ × URL.
+ ðÅÒÅצÒÔÅ ÐÒÁ×ÉÌØÎ¦ÓÔØ ÎÁÐÉÓÁÎÎÑ ÁÄÒÅÓÕ.
+
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
+
diff --git a/errors/Ukrainian-koi8-u/ERR_ESI b/errors/Ukrainian-koi8-u/ERR_ESI
new file mode 100644
index 0000000000..9f0e64bc98
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_ESI
@@ -0,0 +1,28 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+ïÂÒÏÂËÁ ESI ÚÁ×ÅÒÛÉÌÁÓØ ÎÅ×ÄÁÌÏ.
+
+
+
+ESI ÐÒÏÃÅÓÏÒ ÐÏצÄÏÍÉ×:
+
+%Z
+
+
+
+ãÅ ÏÚÎÁÞÁ¤ ÝÏ:
+
+ úÁͦÎÎÉË ÎÅ ÚÍ¦Ç ÏÂÒÏÂÉÔÉ ESI ÔÅÍÐÌÅÊÔ. âÕÄØ-ÌÁÓËÁ ÐÏצÄÏÍÔÅ ÐÒÏ ÃÀ ÐÏÍÉÌËÕ ×ÅÂÍÁÊÓÔÒÁ.
+
+÷ÁÛÉÍ ×ÅÂÍÁÊÓÔÒÏÍ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_FORWARDING_DENIED b/errors/Ukrainian-koi8-u/ERR_FORWARDING_DENIED
new file mode 100644
index 0000000000..16c27ee370
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FORWARDING_DENIED
@@ -0,0 +1,24 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+ðÅÒÅÓÉÌËÁ ÚÁÂÏÒÏÎÅÎÁ
+
+
+
+
+ãÅÊ ËÅÛ ÎÅ ÐÅÒÅÓÉÌÁÔÉÍÅ ÷ÁÛ ÚÁÐÉÔ, ÔÏÍÕ ÝÏ ×¦Î ÎÁÍÁÇÁ¤ÔØÓÑ ×ÓÔÁÎÏ×ÉÔÉ ÂÒÁÔΦ צÄÎÏÓÉÎÉ (sibling relationship).
+íÏÖÌÉ×Ï, Ë̦¤ÎÔ %i - ÎÅצÒÎÏ ÓËÏÎÆ¦ÇÕÒÏ×ÁÎÉÊ ËÅÛ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_DISABLED b/errors/Ukrainian-koi8-u/ERR_FTP_DISABLED
new file mode 100644
index 0000000000..79d79d5d67
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_DISABLED
@@ -0,0 +1,23 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+FTP ÄÏÓÔÕÐ ÚÁÂÏÒÏÎÅÎÉÊ.
+
+
+
+
+ãÅÊ ËÅÛ ÎŠЦÄÔÒÉÍÕ¤ ÐÒÏÔÏËÏÌ FTP.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_FAILURE b/errors/Ukrainian-koi8-u/ERR_FTP_FAILURE
new file mode 100644
index 0000000000..39d6e98544
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_FAILURE
@@ -0,0 +1,19 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL
+×ÉÎÉËÌÁ ÐÏÍÉÌËÁ ÐÒÏÔÏËÏÌÕ FTP:
+%U
+
+Squid ÐÏÓÌÁ× ÎÁÓÔÕÐÎÕ ËÏÍÁÎÄÕ FTP:
+
%f
+¦ ÐÏÔ¦Í ÏÔÒÉÍÁ× ÔÁËÕ ×¦ÄÐÏצĨ
+%F
+%g
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_FORBIDDEN b/errors/Ukrainian-koi8-u/ERR_FTP_FORBIDDEN
new file mode 100644
index 0000000000..404ebcba18
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_FORBIDDEN
@@ -0,0 +1,19 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+óÔÁÌÁÓØ ÎÅ×ÄÁÌÁ FTP ÁÕÔÅÎÔÉÆ¦ËÁæÑ
+
+Squid ÐÏÓÌÁ× ÎÁÓÔÕÐÎÕ FTP ËÏÍÁÎÄÕ:
+
%f
+¦ ÐÏÔ¦Í ÏÔÒÉÍÁ× ÔÁËÕ ×¦ÄÐÏצĨ
+%F
+%g
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_NOT_FOUND b/errors/Ukrainian-koi8-u/ERR_FTP_NOT_FOUND
new file mode 100644
index 0000000000..c4d1b0949b
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_NOT_FOUND
@@ -0,0 +1,22 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+äÁÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ:
+%U
+
+Squid ÐÏÓÌÁ× ÎÁÓÔÕÐÎÕ FTP ËÏÍÁÎÄÕ:
+
%f
+¦ ÐÏÔ¦Í ÏÔÒÉÍÁ× ÔÁËÕ ×¦ÄÐÏצĨ
+%F
+%g
+
+ãÅ ÍÏÖÅ ÂÕÔÉ ×ÉËÌÉËÁÎÏ FTP ÁÄÒÅÓÏÀ Ú ÁÂÓÏÌÀÔÎÉÍ ÛÌÑÈÏÍ (ÑËÉÊ ÎÅ
+צÄÐÏצÄÁ¤ ÓÔÁÎÄÁÒÔÕ RFC 1738). ÷ ÔÁËÏÍÕ ×ÉÐÁÄËÕ, ÆÁÊÌ ÍÏÖÅ ÂÕÔÉ
+ÚÎÁÊÄÅÎÉÊ ÚÁ ÁÄÒÅÓÏÀ %B.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_PUT_CREATED b/errors/Ukrainian-koi8-u/ERR_FTP_PUT_CREATED
new file mode 100644
index 0000000000..9ff1f04a03
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_PUT_CREATED
@@ -0,0 +1,9 @@
+
+
+ëÏÍÁÎÄÁ FTP PUT ÚÁ×ÅÒÛÉÌÁÓØ ÕÓЦÛÎÏ: æÁÊÌ ÓÔ×ÏÒÅÎÉÊ
+
+
+ïÐÅÒÁÃ¦Ñ ÚÁ×ÅÒÛÉÌÁÓØ ÕÓЦÛÎÏ
+æÁÊÌ ÓÔ×ÏÒÅÎÉÊ
+
+
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_PUT_ERROR b/errors/Ukrainian-koi8-u/ERR_FTP_PUT_ERROR
new file mode 100644
index 0000000000..4cf9a7762a
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_PUT_ERROR
@@ -0,0 +1,26 @@
+
+
+ðïíéìëá: ëÏÍÁÎÄÁ FTP PUT/upload ÚÁ×ÅÒÛÉÌÁÓØ ÎÅ×ÄÁÌÏ
+
+
+ðïíéìëá
+FTP PUT/upload ÚÁ×ÅÒÛÉÌÁÓØ ÎÅ×ÄÁÌÏ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ ÆÁÊÌÁ ÚÁ ÁÄÒÅÓÏÀ:
+%U
+
+Squid ÐÏÓÌÁ× ÎÁÓÔÕÐÎÕ FTP ËÏÍÁÎÄÕ:
+
+ %f
+
+¦ ÐÏÔ¦Í ÏÔÒÉÍÁ× ÔÁËÕ ×¦ÄÐÏצĨ
+
+ %F
+
+
+ãÅ ÏÚÎÁÞÁ¤ ÝÏ:
+
+÷ÁÍ ÓÌ¦Ä ÐÅÒÅצÒÉÔÉ ÛÌÑÈ, ÐÒÁ×Á ÄÏÓÔÕÐÕ, ×¦ÌØÎŠͦÓÃÅ ¦ ЦÓÌÑ ÃØÏÇÏ ÓÐÒÏÂÕ×ÁÔÉ ÚÎÏ×Õ.
+
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_PUT_MODIFIED b/errors/Ukrainian-koi8-u/ERR_FTP_PUT_MODIFIED
new file mode 100644
index 0000000000..e0d35b74b0
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_PUT_MODIFIED
@@ -0,0 +1,11 @@
+
+
+ëÏÍÁÎÄÁ FTP PUT ÚÁ×ÅÒÛÉÌÁÓØ ÕÓЦÛÎÏ: æÁÊÌ ÏÎÏ×ÌÅÎÉÊ
+
+
+ïÐÅÒÁÃ¦Ñ ÚÁ×ÅÒÛÉÌÁÓØ ÕÓЦÛÎÏ.
+æÁÊÌ ÏÎÏ×ÌÅÎÉÊ
+
+
+
+
diff --git a/errors/Ukrainian-koi8-u/ERR_FTP_UNAVAILABLE b/errors/Ukrainian-koi8-u/ERR_FTP_UNAVAILABLE
new file mode 100644
index 0000000000..60d6eb0d13
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_FTP_UNAVAILABLE
@@ -0,0 +1,20 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+FTP ÓÅÒ×ÅÒ ÂÕ× ÐÅÒÅÇÒÕÖÅÎÉÊ
+
+Squid ÐÏÓÌÁ× ÎÁÓÔÕÐÎÕ FTP ËÏÍÁÎÄÕ:
+
%f
+¦ ÐÏÔ¦Í ÏÔÒÉÍÁ× ÔÁËÕ ×¦ÄÐÏצĨ
+%F
+%g
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
+
diff --git a/errors/Ukrainian-koi8-u/ERR_ICAP_FAILURE b/errors/Ukrainian-koi8-u/ERR_ICAP_FAILURE
new file mode 100644
index 0000000000..2871186c42
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_ICAP_FAILURE
@@ -0,0 +1,33 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+ðÏÍÉÌËÁ ÐÒÏÔÏËÏÌÕ ICAP.
+
+
+
+
+óÉÓÔÅÍÁ ÐÏצÄÏÍÉÌÁ:
+
%E
+
+
+ãÅ ÍÏÖÅ ÏÚÎÁÞÁÔÉ:
+äÅÑ˦ ÁÓÐÅËÔÉ ICAP Ú'¤ÄÎÁÎÎÑ ÎÅÓÐÒÁ×Φ. íÏÖÌÉצ ÐÒÏÂÌÅÍÉ:
+
+- äÏÓÔÕÐ ÄÏ ICAP ÓÅÒ×ÅÒÕ ÎÅÍÏÖÌÉ×ÉÊ.
+
- îÅצÒÎÁ צÄÐÏצĨ ×¦Ä ICAP ÓÅÒ×ÅÒÕ.
+
+
+
diff --git a/errors/Ukrainian-koi8-u/ERR_INVALID_REQ b/errors/Ukrainian-koi8-u/ERR_INVALID_REQ
new file mode 100644
index 0000000000..cd58aaa08b
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_INVALID_REQ
@@ -0,0 +1,31 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+
+
+äÅÑ˦ ÁÓÐÅËÔÉ HTTP ÚÁÐÉÔÕ ÎÅצÒΦ. íÏÖÌÉצ ÐÒÏÂÌÅÍÉ:
+
+- ÷¦ÄÓÕÔÎ¦Ê ÁÂÏ ÎÅצÄÏÍÉÊ ÍÅÔÏÄ ÚÁÐÉÔÕ (GET, POST)
+
- ÷¦ÄÓÕÔÎ¦Ê URL
+
- ÷¦ÄÓÕÔÎ¦Ê HTTP ¦ÄÅÎÔÉÆ¦ËÁÔÏÒ (HTTP/1.0)
+
- úÁÐÉÔ ÎÁÄÔÏ ×ÅÌÉËÉÊ
+
- îÅ ×ËÁÚÁÎÉÊ Content-Length ÄÌÑ ÚÁÐÉÔ¦× POST ÞÉ PUT
+
- îÅÄÏÐÕÓÔÉÍÉÊ ÓÉÍ×ÏÌ × ¦ÍÅΦ ÓÅÒ×ÅÒÁ; ЦÄÞÅÒËÕ×ÁÎÎÑ ÎÅÄÏÐÕÓÔÉͦ
+
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_INVALID_RESP b/errors/Ukrainian-koi8-u/ERR_INVALID_RESP
new file mode 100644
index 0000000000..05fb47704c
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_INVALID_RESP
@@ -0,0 +1,28 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+
+
+The HTTP צÄÐÏצÄÎÅ ÐÏצÄÏÍÌÅÎÎÑ, ÏÔÒÉÍÁÎÅ ×¦Ä ÓÅÒ×ÅÒÁ
+ÎÅ ÍÏÖÅ ÂÕÔÉ ×ÉÚÎÁÞÅÎÅ ÁÂÏ ¤ ÎÅÐÒÁ×ÉÌØÎÏ ÚÆÏÒÍÏ×ÁÎÉÍ.
+âÕÄØ-ÌÁÓËÁ, ËÏÎÔÁËÔÕÊÔÅ Ú ÁÄͦΦÓÔÒÁÔÏÒÏÍ ÓÁÊÔÕ. ÷ÁÛ ÁÄͦΦÓÔÒÁÔÏÒ
+ËÅÛÕ ÍÏÖÅ ÎÁÄÁÔÉ ÷ÁÍ Â¦ÌØÛ ÄÅÔÁÌØÎÕ ¦ÎÆÏÒÍÁæÀ ÐÒÏ
+ÄÁÎÕ ÐÏÍÉÌËÕ, ÑËÝÏ ÃÅ ÎÅÏÂȦÄÎÏ.
+
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_INVALID_URL b/errors/Ukrainian-koi8-u/ERR_INVALID_URL
new file mode 100644
index 0000000000..99800147ff
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_INVALID_URL
@@ -0,0 +1,30 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+îÅÐÒÁ×ÉÌØÎÉÊ URL
+
+
+
+
+äÅÑ˦ ÁÓÐÅËÔÉ ÚÁÐÒÏÛÅÎÏÇÏ URL ¤ ÎÅÐÒÁ×ÉÌØÎÉÍÉ. íÏÖÌÉצ ÐÒÏÂÌÅÍÉ:
+
+- ÷¦ÄÓÕÔÎ¦Ê ÞÉ ÎÅצÒÎÉÊ ÐÒÏÔÏËÏÌ ÄÏÓÔÕÐÕ (ÐÏ×ÉÎÅÎ ÂÕÔÉ `http://'' ÁÂÏ
+ÓÈÏÖÉÊ)
+
- ÷¦ÄÓÕÔΤ ¦Í'Ñ ÓÅÒ×ÅÒÁ
+
- îÅÄÏÐÕÓÔÉÍÉÊ ÐÏÄצÊÎÉÊ ËÅÒÕÀÞÉÊ ÓÉÍ×ÏÌ × URL-ÛÌÑÈÕ
+
- îÅÄÏÐÕÓÔÉÍÉÊ ÓÉÍ×ÏÌ × ¦ÍÅΦ ÓÅÒ×ÅÒÁ; ЦÄÞÅÒËÕ×ÁÎÎÑ ÎÅÄÏÐÕÓÔÉͦ
+
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_LIFETIME_EXP b/errors/Ukrainian-koi8-u/ERR_LIFETIME_EXP
new file mode 100644
index 0000000000..a4bacf97e7
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_LIFETIME_EXP
@@ -0,0 +1,24 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+þÁÓ Ú'¤ÄÎÁÎÎÑ ÚÁ˦ÎÞÉ×ÓÑ
+
+
+
+
+Squid ÚÁ×ÅÒÛÉ× ÷ÁÛ ÚÁÐÉÔ Õ Ú×'ÑÚËÕ Ú ÐÅÒÅ×ÉÝÅÎÎÑÍ
+ÍÁËÓÉÍÁÌØÎÏÇÏ ÞÁÓÕ Ú'¤ÄÎÁÎÎÑ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_NO_RELAY b/errors/Ukrainian-koi8-u/ERR_NO_RELAY
new file mode 100644
index 0000000000..603391b36c
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_NO_RELAY
@@ -0,0 +1,23 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+Wais Relay ÎÅ ×ÉÚÎÁÞÅÎÉÊ
+
+
+
+
+äÌÑ ÃØÏÇÏ ËÅÛÕ ÎÅ ×ÉÚÎÁÞÅÎÉÊ WAIS Relay host! ú×ÅÒÎ¦ÔØÓÑ ÄÏ ÁÄͦΦÓÔÒÁÔÏÒÁ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_ONLY_IF_CACHED_MISS b/errors/Ukrainian-koi8-u/ERR_ONLY_IF_CACHED_MISS
new file mode 100644
index 0000000000..9bc794a59d
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_ONLY_IF_CACHED_MISS
@@ -0,0 +1,26 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+÷¦ÄÐÏצÄÎÉÊ ÏÂ'¤ËÔ ÎÅ ÂÕ× ÚÎÁÊÄÅÎÉÊ × ËÅÛ¦, × ÒÅÚÕÌØÔÁÔ¦ ÞÏÇÏ ÂÕÌÁ
+×ÉÚÎÁÞÅÎÁ ÄÉÒÅËÔÉ×Á
only-if-cached
.
+
+
+
+
+÷Ù ÐÏÓÌÁÌÉ ÚÁÐÉÔ Ú ÄÉÒÅËÔÉ×ÏÀ ËÅÛ-ËÏÎÔÒÏÌÀ only-if-cached
.
+ïÂ'¤ËÔ ÎÅ ÂÕ× ÚÎÁÊÄÅÎÉÊ × ËÅÛ¦, ÁÂÏ ×¦Î ×ÉÍÁÇÁ¤ ÏÎÏ×ÌÅÎÎÑ,
+ÑËÅ ÚÁÂÏÒÏÎÅÎÏ only-if-cached
ÄÉÒÅËÔÉ×ÏÀ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_READ_ERROR b/errors/Ukrainian-koi8-u/ERR_READ_ERROR
new file mode 100644
index 0000000000..f70f36fa16
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_READ_ERROR
@@ -0,0 +1,28 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+
+
+óÉÓÔÅÍÁ ÐÏצÄÏÍÉÌÁ:
+
%E
+
+
+ð¦Ä ÞÁÓ ÞÉÔÁÎÎÑ ÄÁÎÉÈ Ú ÍÅÒÅÖ¦ ×ÉÎÉËÌÁ ÐÏÍÉÌËÁ. âÕÄØ-ÌÁÓËÁ, ÐÏ×ÔÏÒ¦ÔØ
+÷ÁÛ ÚÁÐÉÔ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_READ_TIMEOUT b/errors/Ukrainian-koi8-u/ERR_READ_TIMEOUT
new file mode 100644
index 0000000000..76b775918d
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_READ_TIMEOUT
@@ -0,0 +1,28 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+ðÅÒÅ×ÉÝÅÎÉÊ ÞÁÓ ÏÞ¦ËÕ×ÁÎÎÑ ×¦ÄÐÏצĦ.
+
+
+
+
+óÉÓÔÅÍÁ ÐÏצÄÏÍÉÌÁ:
+
%E
+
+
+ðÅÒÅ×ÉÝÅÎÉÊ ÞÁÓ ÏÞ¦ËÕ×ÁÎÎÑ ×¦ÄÐÏצĦ Ð¦Ä ÞÁÓ ÞÉÔÁÎÎÑ ÄÁÎÉÈ Ú ÍÅÒÅÖ¦. íÅÒÅÖÁ
+ÞÉ ÓÅÒ×ÅÒ ÍÏÖÕÔØ ÎÅ ÐÒÁÃÀ×ÁÔÉ ÞÉ ÂÕÔÉ ÐÅÒÅÇÒÕÖÅÎÉÍÉ. âÕÄØ-ÌÁÓËÁ, ÐÏ×ÔÏÒ¦ÔØ ÷ÁÛ ÚÁÐÉÔ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_SECURE_CONNECT_FAIL b/errors/Ukrainian-koi8-u/ERR_SECURE_CONNECT_FAIL
new file mode 100644
index 0000000000..0cbbe670e9
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_SECURE_CONNECT_FAIL
@@ -0,0 +1,31 @@
+
+
+ERROR: The requested URL could not be retrieved
+
+
+ERROR
+The requested URL could not be retrieved
+
+
+While trying to retrieve the URL:
+%U
+
+The following error was encountered:
+
+-
+
+Failed to establish a secure connection to %I
+
+
+
+
+The system returned:
+
%E
+
+
+This proxy and the remote host failed to negotiate a mutually acceptable
+security settings for handling your request. It is possible that the remote
+host does not support secure connections, or the proxy is not satisfied with
+the host security credentials.
+
+
Your cache administrator is %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_SHUTTING_DOWN b/errors/Ukrainian-koi8-u/ERR_SHUTTING_DOWN
new file mode 100644
index 0000000000..3e9461aae7
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_SHUTTING_DOWN
@@ -0,0 +1,17 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+ãÅÊ ËÅÛ × ÄÁÎÉÊ ÍÏÍÅÎÔ ÞÁÓÕ ÚÎÁÈÏÄÉÔØÓÑ × ÐÒÏÃÅÓ¦ ÚÕÐÉÎËÉ ¦ ÎÅ ÍÏÖÅ ÏÂÓÌÕÖÉÔÉ
+×ÁÛ ÚÁÐÉÔ. âÕÄØ-ÌÁÓËÁ, ÐÏ×ÔÏÒ¦ÔØ ÷ÁÛ ÚÁÐÉÔ ÞÅÒÅÚ ÄÅÑËÉÊ ÞÁÓ ÚÎÏ×Õ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_SOCKET_FAILURE b/errors/Ukrainian-koi8-u/ERR_SOCKET_FAILURE
new file mode 100644
index 0000000000..1777b76d53
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_SOCKET_FAILURE
@@ -0,0 +1,28 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+ðÏÍÉÌËÁ TCP socket.
+
+
+
+
+óÉÓÔÅÍÁ ÐÏצÄÏÍÉÌÁ:
+
%E
+
+
+Squid ÎÅ ÍÏÖÅ ÓÔ×ÏÒÉÔÉ TCP socket, ÓËÏÒ¦Û ÚÁ ×ÓÅ ÞÅÒÅÚ ÄÕÖÅ ×ÉÓÏËÕ ÚÁÇÒÕÚËÕ ÓÅÒ×ÅÒÁ.
+âÕÄØ-ÌÁÓËÁ, ÐÏ×ÔÏÒ¦ÔØ ÷ÁÛ ÚÁÐÉÔ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_TOO_BIG b/errors/Ukrainian-koi8-u/ERR_TOO_BIG
new file mode 100644
index 0000000000..f4ae4d0458
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_TOO_BIG
@@ -0,0 +1,28 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+úÁÐÉÔ ÞÉ ×¦ÄÐÏצĨ ÎÁÄÔÏ ×ÅÌÉËÁ.
+
+
+
+õ ×ÉÐÁÄËÕ, ÑËÝÏ ÷É ÚĦÊÓÎÀ×ÁÌÉ POST ÞÉ PUT ÚÁÐÉÔ, ÔÏĦ ÷ÁÛ ÚÁÐÉÔ
+(ÔÅ, ÝÏ ÷É ÎÁÍÁÇÁÌÉÓØ ÚÁËÁÞÁÔÉ) ¤ ÎÁÄÔÏ ×ÅÌÉËÉÍ. ñËÝÏ ÷É
+ÚĦÊÓÎÀ×ÁÌÉ GET ÚÁÐÉÔ, ÔÏĦ צÄËÌÉË (ÔÅ, ÝÏ ÷É ÎÁÍÁÇÁÌÉÓØ ×ÉËÁÞÁÔÉ
+) ¤ ÎÁÄÔÏ ×ÅÌÉËÉÍ. 㦠ÏÂÍÅÖÅÎÎÑ ÂÕÌÉ ×ÓÔÁÎÏ×ÌÅΦ
+÷ÁÛÉÍ ¶ÎÔÅÒÎÅÔ ðÒÏ×ÁÊÄÅÒÏÍ, ÑËÉÊ ËÅÒÕ¤ ËÅÛÏÍ. âÕÄØ-ÌÁÓËÁ,
+ÐÏצÄÏÍÔÅ ÊÏÇÏ, ÑËÝÏ ÷É ××ÁÖÁ¤ÔÅ ÄÁÎÅ ÐÏצÄÏÍÌÅÎÎÑ ÐÏÍÉÌËÏÀ.
+
+÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_UNSUP_REQ b/errors/Ukrainian-koi8-u/ERR_UNSUP_REQ
new file mode 100644
index 0000000000..e8e2576f54
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_UNSUP_REQ
@@ -0,0 +1,24 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+íÅÔÏÄ ÞÉ ÐÒÏÔÏËÏÌ ÚÁÐÉÔÕ ÎŠЦÄÔÒÉÍÕÀÔØÓÑ
+
+
+
+
+Squid ΊЦÄÔÒÉÍÕ¤ ×Ó¦ ÍÅÔÏÄÉ ÚÁÐÉÔ¦× ÄÌÑ ÕÓ¦È ÐÒÏÔÏËÏ̦×.
+îÁÐÒÉËÌÁÄ, ÄÌÑ ÐÒÏÔÏËÏÌÕ Gopher ÷É ÎÅ ÍÏÖÅÔÅ ×ÉËÏÎÁÔÉ ÚÁÐÉÔ POST.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_URN_RESOLVE b/errors/Ukrainian-koi8-u/ERR_URN_RESOLVE
new file mode 100644
index 0000000000..42a6922f43
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_URN_RESOLVE
@@ -0,0 +1,24 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URN ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+URL ÄÌÑ ÚÁÐÒÏÛÅÎÏÇÏ URN ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URN:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+îÅÍÏÖÌÉ×Ï ×ÉÚÎÁÞÉÔÉ URN
+(Cannot Resolve URN)
+
+
+
+
+îÅ ×ÁÒÔÏ ÂÁÇÁÔÏ ÞÏÇÏ ÏÞ¦ËÕ×ÁÔÉ ×¦Ä Ã¦¤§ ÔÅÈÎÏÌÏǦ§ URNs ÎÁ %T :)
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/ERR_WRITE_ERROR b/errors/Ukrainian-koi8-u/ERR_WRITE_ERROR
new file mode 100644
index 0000000000..ebcad88022
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_WRITE_ERROR
@@ -0,0 +1,32 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+
+
+óÉÓÔÅÍÁ ÐÏצÄÏÍÉÌÁ:
+
%E
+
+
+ð¦Ä ÞÁÓ ×¦ÄÐÒÁ×ÌÅÎÎÑ ¦ÎÆÏÒÍÁæ§ × ÍÅÒÅÖÕ ×ÉÎÉËÌÁ ÐÏÍÉÌËÁ. âÕÄØ-ÌÁÓËÁ, ÐÏ×ÔÏÒ¦ÔØ
+÷ÁÛ ÚÁÐÉÔ
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
+
+
+
+
diff --git a/errors/Ukrainian-koi8-u/ERR_ZERO_SIZE_OBJECT b/errors/Ukrainian-koi8-u/ERR_ZERO_SIZE_OBJECT
new file mode 100644
index 0000000000..2556a630fd
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/ERR_ZERO_SIZE_OBJECT
@@ -0,0 +1,23 @@
+
+
+ðïíéìëá: úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ðïíéìëá
+úÁÐÒÏÛÅÎÉÊ URL ÎÅ ÍÏÖÅ ÂÕÔÉ ÄÏÓÔÁ×ÌÅÎÉÊ
+
+
+ð¦Ä ÞÁÓ ÄÏÓÔÁ×ËÉ URL:
+%U
+
+÷ÉÎÉËÌÁ ÎÁÓÔÕÐÎÁ ÐÏÍÉÌËÁ:
+
+-
+
+÷¦ÄÐÏצĨ ÎÕÌØÏ×ϧ ÄÏ×ÖÉÎÉ
+
+
+
+
+Squid ÎÅ ÏÔÒÉÍÁ× ÂÕÄØ-ÑËÉÈ ÄÁÎÉÈ ÄÌÑ ÃØÏÇÏ ÚÁÐÉÔÕ.
+
÷ÁÛÉÍ ÁÄͦΦÓÔÒÁÔÏÒÏÍ ËÅÛÕ ¤ %w.
diff --git a/errors/Ukrainian-koi8-u/README b/errors/Ukrainian-koi8-u/README
new file mode 100644
index 0000000000..0568e85372
--- /dev/null
+++ b/errors/Ukrainian-koi8-u/README
@@ -0,0 +1,4 @@
+Thank you to
+ ðÅÔÒÏ îÅË
+ Vitaliy Matytsyn (main)
+for creating these error pages in Ukrainian!
diff --git a/errors/Ukrainian-utf8/ERR_ACCESS_DENIED b/errors/Ukrainian-utf8/ERR_ACCESS_DENIED
new file mode 100644
index 0000000000..e113691722
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_ACCESS_DENIED
@@ -0,0 +1,25 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐоÑÑÑп забоÑонений.
+
+
+ÐаÑÑÑойка конÑÑÐ¾Ð»Ñ Ð´Ð¾ÑÑÑÐ¿Ñ Ð½Ðµ дозволÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñи ÐаÑ
+Ð·Ð°Ð¿Ð¸Ñ Ð² даний ÑаÑ. ЯкÑо Ðи вважаÑÑе Ñе непÑавилÑним, Ñо,
+бÑдÑ-лаÑка, конÑакÑÑйÑе з ÐаÑим ÐнÑеÑÐ½ÐµÑ Ð¿ÑовайдеÑом.
+
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
+
diff --git a/errors/Ukrainian-utf8/ERR_CACHE_ACCESS_DENIED b/errors/Ukrainian-utf8/ERR_CACHE_ACCESS_DENIED
new file mode 100644
index 0000000000..30f0b8ea79
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_CACHE_ACCESS_DENIED
@@ -0,0 +1,34 @@
+
+
+ÐÐÐÐÐÐÐ: ÐоÑÑÑп до кеÑÑ Ð·Ð°Ð±Ð¾Ñонений
+
+
+
+ÐÐÐÐÐÐÐ
+ÐоÑÑÑп до кеÑÑ Ð·Ð°Ð±Ð¾Ñонений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐоÑÑÑп до кеÑÑ Ð·Ð°Ð±Ð¾Ñонений
+
+
+
+
+ÐибаÑÑе, але Ðи не можеÑе запÑоÑиÑи:
+
%U
+з ÑÑого кеÑÑ Ð´Ð¾ ÑиÑ
пÑÑ, поки не пÑойдеÑе аÑÑенÑиÑÑкаÑÑÑ.
+
+
+
+Ðам поÑÑÑбно викоÑиÑÑовÑваÑи Netscape веÑÑÑÑ 2.0 Ñи виÑе, або Microsoft Internet
+Explorer 3.0, або HTTP/1.1 ÑÑмÑÑний бÑоÑзеÑ. ÐÑдÑ-лаÑка, зв'ÑжÑÑÑÑÑ
+з адмÑнÑÑÑÑаÑоÑом кеÑÑ, ÑкÑо Ñ ÐÐ°Ñ Ð²Ð¸Ð½Ð¸ÐºÐ»Ð¸ ÑÑÑдноÑÑ
+з аÑÑенÑиÑÑкаÑÑÑÑ, або змÑнÑÑÑ
+ÐÐ°Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð¿Ð¾ замовÑÑваннÑ.
+
diff --git a/errors/Ukrainian-utf8/ERR_CACHE_MGR_ACCESS_DENIED b/errors/Ukrainian-utf8/ERR_CACHE_MGR_ACCESS_DENIED
new file mode 100644
index 0000000000..3195ebdb19
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_CACHE_MGR_ACCESS_DENIED
@@ -0,0 +1,33 @@
+
+
+ÐÐÐÐÐÐÐ: ÐоÑÑÑп до кеÑÑÐ²Ð°Ð½Ð½Ñ ÐºÐµÑом забоÑонений
+
+
+
+ÐÐÐÐÐÐÐ
+ÐоÑÑÑп до кеÑÑÐ²Ð°Ð½Ð½Ñ ÐºÐµÑом забоÑонений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐоÑÑÑп до кеÑÑÐ²Ð°Ð½Ð½Ñ ÐºÐµÑом забоÑонений
+
+
+
+
+ÐибаÑÑе, Ðи не можеÑе запÑоÑиÑи:
+
%U
+з ÑÑого ÐºÐµÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа до ÑиÑ
пÑÑ, поки не пÑойдеÑе аÑÑенÑиÑÑкаÑÑÑ.
+
+
+Ðам поÑÑÑбно викоÑиÑÑовÑваÑи Netscape веÑÑÑÑ 2.0 Ñи виÑе, або Microsoft Internet
+Explorer 3.0, або HTTP/1.1 ÑÑмÑÑний бÑоÑзеÑ. ÐÑдÑ-лаÑка, зв'ÑжÑÑÑÑÑ
+з адмÑнÑÑÑÑаÑоÑом кеÑÑ, ÑкÑо Ñ ÐÐ°Ñ Ð²Ð¸Ð½Ð¸ÐºÐ»Ð¸ ÑÑÑдноÑÑ
+з аÑÑенÑиÑÑкаÑÑÑÑ, а ÑкÑо Ðи Ñ Ð°Ð´Ð¼ÑнÑÑÑÑаÑоÑом,
+пÑоÑиÑайÑе докÑменÑаÑÑÑ Squid по ÑнÑеÑÑейÑÑ ÐºÐµÑÑÐ²Ð°Ð½Ð½Ñ ÐºÐµÑом Ñ Ð¿ÐµÑевÑÑÑе
+жÑÑнал кеÑÑ (cache log) на пÑÐµÐ´Ð¼ÐµÑ Ð±ÑлÑÑ Ð´ÐµÑалÑниÑ
повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ñ Ð¿Ñо помилки.
diff --git a/errors/Ukrainian-utf8/ERR_CANNOT_FORWARD b/errors/Ukrainian-utf8/ERR_CANNOT_FORWARD
new file mode 100644
index 0000000000..b8d3b4deff
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_CANNOT_FORWARD
@@ -0,0 +1,30 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Рданий Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ пеÑеÑлаÑи Ñей запиÑ
+
+
+
+
+Ðаний Ð·Ð°Ð¿Ð¸Ñ Ð½Ðµ може бÑÑи пеÑеÑланий до ÑеÑвеÑа-джеÑела, Ñи до бÑдÑ-Ñкого
+з виÑеÑÑоÑÑиÑ
кеÑÑв. ÐайбÑлÑÑ Ð²ÑÑогÑдна пÑиÑина помилки:
+
+- ÐдмÑнÑÑÑÑаÑÐ¾Ñ ÐºÐµÑÑ Ð·Ð°Ð±Ð¾Ñонив виконÑваÑи пÑÑÐ¼Ñ Ð·'ÑднаннÑ
+з ÑеÑвеÑами-джеÑелами (origin servers) Ñ
+
- ÑÑÑ Ð²Ð¸ÑеÑÑоÑÑÑ ÐºÐµÑ-ÑеÑвеÑа (parent caches) в даний Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½ÐµÐ´Ð¾ÑÑÑпнÑ.
+
+ÐаÑим ÐºÐµÑ Ð°Ð´Ð¼ÑнÑÑÑÑаÑоÑом Ñ %w.
+
diff --git a/errors/Ukrainian-utf8/ERR_CONNECT_FAIL b/errors/Ukrainian-utf8/ERR_CONNECT_FAIL
new file mode 100644
index 0000000000..9b0abbb297
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_CONNECT_FAIL
@@ -0,0 +1,27 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Ðе вдалоÑÑ Ð²ÑÑановиÑи з'ÑднаннÑ
+
+
+
+
+СиÑÑема повÑдомлÑÑ:
+
%E
+
+
+ÐÑÐ´Ð´Ð°Ð»ÐµÐ½Ñ Ñ
оÑÑ Ñи меÑежа не вÑдповÑдаÑÑÑ. ÐÑдÑ-лаÑка, повÑоÑÑÑÑ ÑвÑй Ð·Ð°Ð¿Ð¸Ñ Ñе Ñаз.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_DNS_FAIL b/errors/Ukrainian-utf8/ERR_DNS_FAIL
new file mode 100644
index 0000000000..f4290aa669
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_DNS_FAIL
@@ -0,0 +1,32 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+Ðеможливо визнаÑиÑи IP адÑеÑÑ Ð²Ñзла
+%H
+
+
+
+DNS ÑеÑÐ²ÐµÑ Ð¿Ð¾Ð²ÑдомлÑÑ:
+
+%z
+
+
+
+Це ознаÑаÑ:
+
+ ÐеÑÑ Ð½Ðµ вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°ÑиÑи Ñм'Ñ ÑеÑвеÑа, вказане в URL.
+ ÐеÑевÑÑÑе пÑавилÑнÑÑÑÑ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð½Ñ Ð°Ð´ÑеÑÑ.
+
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
+
diff --git a/errors/Ukrainian-utf8/ERR_ESI b/errors/Ukrainian-utf8/ERR_ESI
new file mode 100644
index 0000000000..74006deac1
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_ESI
@@ -0,0 +1,28 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+ÐбÑобка ESI завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾.
+
+
+
+ESI пÑоÑеÑÐ¾Ñ Ð¿Ð¾Ð²Ñдомив:
+
+%Z
+
+
+
+Це ознаÑÐ°Ñ Ñо:
+
+ ÐамÑнник не змÑг обÑобиÑи ESI ÑемплейÑ. ÐÑдÑ-лаÑка повÑдомÑе пÑо ÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ Ð²ÐµÐ±Ð¼Ð°Ð¹ÑÑÑа.
+
+ÐаÑим вебмайÑÑÑом Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_FORWARDING_DENIED b/errors/Ukrainian-utf8/ERR_FORWARDING_DENIED
new file mode 100644
index 0000000000..329c6bf4d7
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FORWARDING_DENIED
@@ -0,0 +1,24 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐеÑеÑилка забоÑонена
+
+
+
+
+Цей ÐºÐµÑ Ð½Ðµ пеÑеÑилаÑиме ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ, ÑÐ¾Ð¼Ñ Ñо вÑн намагаÑÑÑÑÑ Ð²ÑÑановиÑи бÑаÑÐ½Ñ Ð²ÑдноÑини (sibling relationship).
+Ðожливо, клÑÑÐ½Ñ %i - невÑÑно ÑконÑÑгÑÑований кеÑ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_FTP_DISABLED b/errors/Ukrainian-utf8/ERR_FTP_DISABLED
new file mode 100644
index 0000000000..26234bace3
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_DISABLED
@@ -0,0 +1,23 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+FTP доÑÑÑп забоÑонений.
+
+
+
+
+Цей ÐºÐµÑ Ð½Ðµ пÑдÑÑимÑÑ Ð¿ÑоÑокол FTP.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_FTP_FAILURE b/errors/Ukrainian-utf8/ERR_FTP_FAILURE
new file mode 100644
index 0000000000..63568a1ddb
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_FAILURE
@@ -0,0 +1,19 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL
+виникла помилка пÑоÑÐ¾ÐºÐ¾Ð»Ñ FTP:
+%U
+
+Squid поÑлав наÑÑÑÐ¿Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ FTP:
+
%f
+Ñ Ð¿Ð¾ÑÑм оÑÑимав ÑÐ°ÐºÑ Ð²ÑдповÑдÑ
+%F
+%g
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_FTP_FORBIDDEN b/errors/Ukrainian-utf8/ERR_FTP_FORBIDDEN
new file mode 100644
index 0000000000..d79a8c6d71
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_FORBIDDEN
@@ -0,0 +1,19 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+СÑалаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð° FTP аÑÑенÑиÑÑкаÑÑÑ
+
+Squid поÑлав наÑÑÑÐ¿Ð½Ñ FTP командÑ:
+
%f
+Ñ Ð¿Ð¾ÑÑм оÑÑимав ÑÐ°ÐºÑ Ð²ÑдповÑдÑ
+%F
+%g
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_FTP_NOT_FOUND b/errors/Ukrainian-utf8/ERR_FTP_NOT_FOUND
new file mode 100644
index 0000000000..f5488db76a
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_NOT_FOUND
@@ -0,0 +1,22 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+Ðаний URL не може бÑÑи доÑÑавлений:
+%U
+
+Squid поÑлав наÑÑÑÐ¿Ð½Ñ FTP командÑ:
+
%f
+Ñ Ð¿Ð¾ÑÑм оÑÑимав ÑÐ°ÐºÑ Ð²ÑдповÑдÑ
+%F
+%g
+
+Це може бÑÑи викликано FTP адÑеÑÐ¾Ñ Ð· абÑолÑÑним ÑлÑÑ
ом (Ñкий не
+вÑдповÑÐ´Ð°Ñ ÑÑандаÑÑÑ RFC 1738). Ð ÑÐ°ÐºÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ, Ñайл може бÑÑи
+знайдений за адÑеÑÐ¾Ñ %B.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_FTP_PUT_CREATED b/errors/Ukrainian-utf8/ERR_FTP_PUT_CREATED
new file mode 100644
index 0000000000..9af5f98486
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_PUT_CREATED
@@ -0,0 +1,9 @@
+
+
+Ðоманда FTP PUT завеÑÑилаÑÑ ÑÑпÑÑно: Файл ÑÑвоÑений
+
+
+ÐпеÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑилаÑÑ ÑÑпÑÑно
+Файл ÑÑвоÑений
+
+
diff --git a/errors/Ukrainian-utf8/ERR_FTP_PUT_ERROR b/errors/Ukrainian-utf8/ERR_FTP_PUT_ERROR
new file mode 100644
index 0000000000..fc5feecd6e
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_PUT_ERROR
@@ -0,0 +1,26 @@
+
+
+ÐÐÐÐÐÐÐ: Ðоманда FTP PUT/upload завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾
+
+
+ÐÐÐÐÐÐÐ
+FTP PUT/upload завеÑÑилаÑÑ Ð½ÐµÐ²Ð´Ð°Ð»Ð¾
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки Ñайла за адÑеÑоÑ:
+%U
+
+Squid поÑлав наÑÑÑÐ¿Ð½Ñ FTP командÑ:
+
+ %f
+
+Ñ Ð¿Ð¾ÑÑм оÑÑимав ÑÐ°ÐºÑ Ð²ÑдповÑдÑ
+
+ %F
+
+
+Це ознаÑÐ°Ñ Ñо:
+
+Ðам ÑлÑд пеÑевÑÑиÑи ÑлÑÑ
, пÑава доÑÑÑпÑ, вÑлÑне мÑÑÑе Ñ Ð¿ÑÑÐ»Ñ ÑÑого ÑпÑобÑваÑи зновÑ.
+
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_FTP_PUT_MODIFIED b/errors/Ukrainian-utf8/ERR_FTP_PUT_MODIFIED
new file mode 100644
index 0000000000..66e9f6ee91
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_PUT_MODIFIED
@@ -0,0 +1,11 @@
+
+
+Ðоманда FTP PUT завеÑÑилаÑÑ ÑÑпÑÑно: Файл оновлений
+
+
+ÐпеÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑилаÑÑ ÑÑпÑÑно.
+Файл оновлений
+
+
+
+
diff --git a/errors/Ukrainian-utf8/ERR_FTP_UNAVAILABLE b/errors/Ukrainian-utf8/ERR_FTP_UNAVAILABLE
new file mode 100644
index 0000000000..7fc76932cd
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_FTP_UNAVAILABLE
@@ -0,0 +1,20 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+FTP ÑеÑÐ²ÐµÑ Ð±Ñв пеÑегÑÑжений
+
+Squid поÑлав наÑÑÑÐ¿Ð½Ñ FTP командÑ:
+
%f
+Ñ Ð¿Ð¾ÑÑм оÑÑимав ÑÐ°ÐºÑ Ð²ÑдповÑдÑ
+%F
+%g
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
+
diff --git a/errors/Ukrainian-utf8/ERR_ICAP_FAILURE b/errors/Ukrainian-utf8/ERR_ICAP_FAILURE
new file mode 100644
index 0000000000..b93029de87
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_ICAP_FAILURE
@@ -0,0 +1,33 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Ðомилка пÑоÑÐ¾ÐºÐ¾Ð»Ñ ICAP.
+
+
+
+
+СиÑÑема повÑдомила:
+
%E
+
+
+Це може ознаÑаÑи:
+ÐеÑÐºÑ Ð°ÑпекÑи ICAP з'ÑÐ´Ð½Ð°Ð½Ð½Ñ Ð½ÐµÑпÑавнÑ. ÐÐ¾Ð¶Ð»Ð¸Ð²Ñ Ð¿Ñоблеми:
+
+- ÐоÑÑÑп до ICAP ÑеÑвеÑÑ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð¹.
+
- ÐевÑÑна вÑдповÑÐ´Ñ Ð²Ñд ICAP ÑеÑвеÑÑ.
+
+
+
diff --git a/errors/Ukrainian-utf8/ERR_INVALID_REQ b/errors/Ukrainian-utf8/ERR_INVALID_REQ
new file mode 100644
index 0000000000..10f21d8f6a
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_INVALID_REQ
@@ -0,0 +1,31 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐевÑÑний запиÑ
+
+
+
+
+ÐеÑÐºÑ Ð°ÑпекÑи HTTP запиÑÑ Ð½ÐµÐ²ÑÑнÑ. ÐÐ¾Ð¶Ð»Ð¸Ð²Ñ Ð¿Ñоблеми:
+
+- ÐÑдÑÑÑнÑй або невÑдомий меÑод запиÑÑ (GET, POST)
+
- ÐÑдÑÑÑнÑй URL
+
- ÐÑдÑÑÑнÑй HTTP ÑденÑиÑÑкаÑÐ¾Ñ (HTTP/1.0)
+
- ÐÐ°Ð¿Ð¸Ñ Ð½Ð°Ð´Ñо великий
+
- Ðе вказаний Content-Length Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑв POST Ñи PUT
+
- ÐедопÑÑÑимий Ñимвол в ÑÐ¼ÐµÐ½Ñ ÑеÑвеÑа; пÑдÑеÑкÑÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимÑ
+
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_INVALID_RESP b/errors/Ukrainian-utf8/ERR_INVALID_RESP
new file mode 100644
index 0000000000..3067790026
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_INVALID_RESP
@@ -0,0 +1,28 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐевÑÑний запиÑ
+
+
+
+
+The HTTP вÑдповÑдне повÑдомленнÑ, оÑÑимане вÑд ÑеÑвеÑа
+не може бÑÑи визнаÑене або Ñ Ð½ÐµÐ¿ÑавилÑно зÑоÑмованим.
+ÐÑдÑ-лаÑка, конÑакÑÑйÑе з адмÑнÑÑÑÑаÑоÑом ÑайÑÑ. ÐÐ°Ñ Ð°Ð´Ð¼ÑнÑÑÑÑаÑоÑ
+кеÑÑ Ð¼Ð¾Ð¶Ðµ надаÑи Ðам бÑлÑÑ Ð´ÐµÑалÑÐ½Ñ ÑнÑоÑмаÑÑÑ Ð¿Ñо
+Ð´Ð°Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ, ÑкÑо Ñе необÑ
Ñдно.
+
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_INVALID_URL b/errors/Ukrainian-utf8/ERR_INVALID_URL
new file mode 100644
index 0000000000..898c6af8a3
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_INVALID_URL
@@ -0,0 +1,30 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐепÑавилÑний URL
+
+
+
+
+ÐеÑÐºÑ Ð°ÑпекÑи запÑоÑеного URL Ñ Ð½ÐµÐ¿ÑавилÑними. ÐÐ¾Ð¶Ð»Ð¸Ð²Ñ Ð¿Ñоблеми:
+
+- ÐÑдÑÑÑнÑй Ñи невÑÑний пÑоÑокол доÑÑÑÐ¿Ñ (повинен бÑÑи `http://'' або
+ÑÑ
ожий)
+
- ÐÑдÑÑÑÐ½Ñ Ñм'Ñ ÑеÑвеÑа
+
- ÐедопÑÑÑимий подвÑйний кеÑÑÑÑий Ñимвол в URL-ÑлÑÑ
Ñ
+
- ÐедопÑÑÑимий Ñимвол в ÑÐ¼ÐµÐ½Ñ ÑеÑвеÑа; пÑдÑеÑкÑÐ²Ð°Ð½Ð½Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимÑ
+
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_LIFETIME_EXP b/errors/Ukrainian-utf8/ERR_LIFETIME_EXP
new file mode 100644
index 0000000000..df7f880180
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_LIFETIME_EXP
@@ -0,0 +1,24 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Ð§Ð°Ñ Ð·'ÑÐ´Ð½Ð°Ð½Ð½Ñ Ð·Ð°ÐºÑнÑивÑÑ
+
+
+
+
+Squid завеÑÑив ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ Ñ Ð·Ð²'ÑÐ·ÐºÑ Ð· пеÑевиÑеннÑм
+макÑималÑного ÑаÑÑ Ð·'ÑднаннÑ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_NO_RELAY b/errors/Ukrainian-utf8/ERR_NO_RELAY
new file mode 100644
index 0000000000..0127520b5d
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_NO_RELAY
@@ -0,0 +1,23 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Wais Relay не визнаÑений
+
+
+
+
+ÐÐ»Ñ ÑÑого кеÑÑ Ð½Ðµ визнаÑений WAIS Relay host! ÐвеÑнÑÑÑÑÑ Ð´Ð¾ адмÑнÑÑÑÑаÑоÑа.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_ONLY_IF_CACHED_MISS b/errors/Ukrainian-utf8/ERR_ONLY_IF_CACHED_MISS
new file mode 100644
index 0000000000..bf1404675e
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_ONLY_IF_CACHED_MISS
@@ -0,0 +1,26 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐÑдповÑдний об'ÑÐºÑ Ð½Ðµ бÑв знайдений в кеÑÑ, в ÑезÑлÑÑаÑÑ Ñого бÑла
+визнаÑена диÑекÑива
only-if-cached
.
+
+
+
+
+ÐÑ Ð¿Ð¾Ñлали Ð·Ð°Ð¿Ð¸Ñ Ð· диÑекÑÐ¸Ð²Ð¾Ñ ÐºÐµÑ-конÑÑÐ¾Ð»Ñ only-if-cached
.
+Ðб'ÑÐºÑ Ð½Ðµ бÑв знайдений в кеÑÑ, або вÑн Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ,
+Ñке забоÑонено only-if-cached
диÑекÑивоÑ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_READ_ERROR b/errors/Ukrainian-utf8/ERR_READ_ERROR
new file mode 100644
index 0000000000..d761a31638
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_READ_ERROR
@@ -0,0 +1,28 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Ðомилка ÑиÑаннÑ
+
+
+
+
+СиÑÑема повÑдомила:
+
%E
+
+
+ÐÑд ÑÐ°Ñ ÑиÑÐ°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
з меÑÐµÐ¶Ñ Ð²Ð¸Ð½Ð¸ÐºÐ»Ð° помилка. ÐÑдÑ-лаÑка, повÑоÑÑÑÑ
+ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_READ_TIMEOUT b/errors/Ukrainian-utf8/ERR_READ_TIMEOUT
new file mode 100644
index 0000000000..d909be7416
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_READ_TIMEOUT
@@ -0,0 +1,28 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐеÑевиÑений ÑÐ°Ñ Ð¾ÑÑкÑÐ²Ð°Ð½Ð½Ñ Ð²ÑдповÑдÑ.
+
+
+
+
+СиÑÑема повÑдомила:
+
%E
+
+
+ÐеÑевиÑений ÑÐ°Ñ Ð¾ÑÑкÑÐ²Ð°Ð½Ð½Ñ Ð²ÑдповÑÐ´Ñ Ð¿Ñд ÑÐ°Ñ ÑиÑÐ°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ
з меÑежÑ. ÐеÑежа
+Ñи ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÑÑÑ Ð½Ðµ пÑаÑÑваÑи Ñи бÑÑи пеÑегÑÑженими. ÐÑдÑ-лаÑка, повÑоÑÑÑÑ ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_SECURE_CONNECT_FAIL b/errors/Ukrainian-utf8/ERR_SECURE_CONNECT_FAIL
new file mode 100644
index 0000000000..0cbbe670e9
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_SECURE_CONNECT_FAIL
@@ -0,0 +1,31 @@
+
+
+ERROR: The requested URL could not be retrieved
+
+
+ERROR
+The requested URL could not be retrieved
+
+
+While trying to retrieve the URL:
+%U
+
+The following error was encountered:
+
+-
+
+Failed to establish a secure connection to %I
+
+
+
+
+The system returned:
+
%E
+
+
+This proxy and the remote host failed to negotiate a mutually acceptable
+security settings for handling your request. It is possible that the remote
+host does not support secure connections, or the proxy is not satisfied with
+the host security credentials.
+
+
Your cache administrator is %w.
diff --git a/errors/Ukrainian-utf8/ERR_SHUTTING_DOWN b/errors/Ukrainian-utf8/ERR_SHUTTING_DOWN
new file mode 100644
index 0000000000..90c9259afc
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_SHUTTING_DOWN
@@ -0,0 +1,17 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+Цей ÐºÐµÑ Ð² даний Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑаÑÑ Ð·Ð½Ð°Ñ
одиÑÑÑÑ Ð² пÑоÑеÑÑ Ð·Ñпинки Ñ Ð½Ðµ може обÑлÑжиÑи
+Ð²Ð°Ñ Ð·Ð°Ð¿Ð¸Ñ. ÐÑдÑ-лаÑка, повÑоÑÑÑÑ ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ ÑеÑез деÑкий ÑÐ°Ñ Ð·Ð½Ð¾Ð²Ñ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_SOCKET_FAILURE b/errors/Ukrainian-utf8/ERR_SOCKET_FAILURE
new file mode 100644
index 0000000000..a8dc0f04fb
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_SOCKET_FAILURE
@@ -0,0 +1,28 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Ðомилка TCP socket.
+
+
+
+
+СиÑÑема повÑдомила:
+
%E
+
+
+Squid не може ÑÑвоÑиÑи TCP socket, ÑкоÑÑÑ Ð·Ð° вÑе ÑеÑез дÑже виÑÐ¾ÐºÑ Ð·Ð°Ð³ÑÑÐ·ÐºÑ ÑеÑвеÑа.
+ÐÑдÑ-лаÑка, повÑоÑÑÑÑ ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_TOO_BIG b/errors/Ukrainian-utf8/ERR_TOO_BIG
new file mode 100644
index 0000000000..0ac5a85269
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_TOO_BIG
@@ -0,0 +1,28 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐÐ°Ð¿Ð¸Ñ Ñи вÑдповÑÐ´Ñ Ð½Ð°Ð´Ñо велика.
+
+
+
+У випадкÑ, ÑкÑо Ðи здÑйÑнÑвали POST Ñи PUT запиÑ, ÑÐ¾Ð´Ñ ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ
+(Ñе, Ñо Ðи намагалиÑÑ Ð·Ð°ÐºÐ°ÑаÑи) Ñ Ð½Ð°Ð´Ñо великим. ЯкÑо Ðи
+здÑйÑнÑвали GET запиÑ, ÑÐ¾Ð´Ñ Ð²Ñдклик (Ñе, Ñо Ðи намагалиÑÑ Ð²Ð¸ÐºÐ°ÑаÑи
+) Ñ Ð½Ð°Ð´Ñо великим. Ð¦Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð±Ñли вÑÑановленÑ
+ÐаÑим ÐнÑеÑÐ½ÐµÑ ÐÑовайдеÑом, Ñкий кеÑÑÑ ÐºÐµÑом. ÐÑдÑ-лаÑка,
+повÑдомÑе його, ÑкÑо Ðи вважаÑÑе дане повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¾Ñ.
+
+ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_UNSUP_REQ b/errors/Ukrainian-utf8/ERR_UNSUP_REQ
new file mode 100644
index 0000000000..6453b69355
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_UNSUP_REQ
@@ -0,0 +1,24 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐеÑод Ñи пÑоÑокол запиÑÑ Ð½Ðµ пÑдÑÑимÑÑÑÑÑÑ
+
+
+
+
+Squid не пÑдÑÑимÑÑ Ð²ÑÑ Ð¼ÐµÑоди запиÑÑв Ð´Ð»Ñ ÑÑÑÑ
пÑоÑоколÑв.
+ÐапÑиклад, Ð´Ð»Ñ Ð¿ÑоÑÐ¾ÐºÐ¾Ð»Ñ Gopher Ðи не можеÑе виконаÑи Ð·Ð°Ð¿Ð¸Ñ POST.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_URN_RESOLVE b/errors/Ukrainian-utf8/ERR_URN_RESOLVE
new file mode 100644
index 0000000000..43acf325b5
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_URN_RESOLVE
@@ -0,0 +1,24 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URN не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+URL Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑеного URN не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URN:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Ðеможливо визнаÑиÑи URN
+(Cannot Resolve URN)
+
+
+
+
+Ðе ваÑÑо багаÑо Ñого оÑÑкÑваÑи вÑд ÑÑÑÑ ÑеÑ
нологÑÑ URNs на %T :)
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/ERR_WRITE_ERROR b/errors/Ukrainian-utf8/ERR_WRITE_ERROR
new file mode 100644
index 0000000000..5e88d5cf30
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_WRITE_ERROR
@@ -0,0 +1,32 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+Ðомилка запиÑÑ
+
+
+
+
+СиÑÑема повÑдомила:
+
%E
+
+
+ÐÑд ÑÐ°Ñ Ð²ÑдпÑÐ°Ð²Ð»ÐµÐ½Ð½Ñ ÑнÑоÑмаÑÑÑ Ð² меÑÐµÐ¶Ñ Ð²Ð¸Ð½Ð¸ÐºÐ»Ð° помилка. ÐÑдÑ-лаÑка, повÑоÑÑÑÑ
+ÐÐ°Ñ Ð·Ð°Ð¿Ð¸Ñ
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
+
+
+
+
diff --git a/errors/Ukrainian-utf8/ERR_ZERO_SIZE_OBJECT b/errors/Ukrainian-utf8/ERR_ZERO_SIZE_OBJECT
new file mode 100644
index 0000000000..118ed2d842
--- /dev/null
+++ b/errors/Ukrainian-utf8/ERR_ZERO_SIZE_OBJECT
@@ -0,0 +1,23 @@
+
+
+ÐÐÐÐÐÐÐ: ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÐÐÐÐÐÐ
+ÐапÑоÑений URL не може бÑÑи доÑÑавлений
+
+
+ÐÑд ÑÐ°Ñ Ð´Ð¾ÑÑавки URL:
+%U
+
+Ðиникла наÑÑÑпна помилка:
+
+-
+
+ÐÑдповÑÐ´Ñ Ð½ÑлÑÐ¾Ð²Ð¾Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¸
+
+
+
+
+Squid не оÑÑимав бÑдÑ-ÑкиÑ
даниÑ
Ð´Ð»Ñ ÑÑого запиÑÑ.
+
ÐаÑим адмÑнÑÑÑÑаÑоÑом кеÑÑ Ñ %w.
diff --git a/errors/Ukrainian-utf8/README b/errors/Ukrainian-utf8/README
new file mode 100644
index 0000000000..c8c92cbc57
--- /dev/null
+++ b/errors/Ukrainian-utf8/README
@@ -0,0 +1,4 @@
+Thank you to
+ ÐеÑÑо Ðек
+ Vitaliy Matytsyn (main)
+for creating these error pages in Ukrainian!
diff --git a/errors/list b/errors/list
index 7232a1456c..ccde6aa4e4 100644
--- a/errors/list
+++ b/errors/list
@@ -2,23 +2,30 @@ ERR_ACCESS_DENIED
ERR_CACHE_ACCESS_DENIED
ERR_CACHE_MGR_ACCESS_DENIED
ERR_CANNOT_FORWARD
-ERR_CLIENT_ABORT
ERR_CONNECT_FAIL
ERR_DNS_FAIL
+ERR_ESI
ERR_FORWARDING_DENIED
ERR_FTP_DISABLED
ERR_FTP_FAILURE
+ERR_FTP_FORBIDDEN
+ERR_FTP_NOT_FOUND
ERR_FTP_PUT_CREATED
ERR_FTP_PUT_ERROR
ERR_FTP_PUT_MODIFIED
+ERR_FTP_UNAVAILABLE
+ERR_ICAP_FAILURE
ERR_INVALID_REQ
+ERR_INVALID_RESP
ERR_INVALID_URL
ERR_LIFETIME_EXP
ERR_NO_RELAY
ERR_ONLY_IF_CACHED_MISS
ERR_READ_ERROR
ERR_READ_TIMEOUT
+ERR_SHUTTING_DOWN
ERR_SOCKET_FAILURE
+ERR_TOO_BIG
ERR_UNSUP_REQ
ERR_URN_RESOLVE
ERR_WRITE_ERROR
diff --git a/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c b/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c
index fa4b4836ce..08acc269ee 100755
--- a/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c
+++ b/helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth.c
@@ -37,6 +37,9 @@
#include "spnegohelp.h"
#endif
+#ifndef HOST_NAME_MAX
+#define HOST_NAME_MAX 256
+#endif
#ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN HOST_NAME_MAX
#endif
diff --git a/include/autoconf.h.in b/include/autoconf.h.in
index 5a54db1b5e..0dd1013063 100644
--- a/include/autoconf.h.in
+++ b/include/autoconf.h.in
@@ -170,6 +170,12 @@
/* Define to 1 if you have the header file. */
#undef HAVE_GLIB_H
+/* Define to 1 if you have the `glob' function. */
+#undef HAVE_GLOB
+
+/* Define to 1 if you have the header file. */
+#undef HAVE_GLOB_H
+
/* Define to 1 if you have the header file. */
#undef HAVE_GNUMALLOC_H
diff --git a/include/config.h b/include/config.h
index c468320310..d4bcd88aca 100644
--- a/include/config.h
+++ b/include/config.h
@@ -1,5 +1,5 @@
/*
- * $Id: config.h,v 1.25 2007/09/20 11:07:53 amosjeffries Exp $
+ * $Id: config.h,v 1.25.4.1 2008/02/29 18:30:01 serassio Exp $
*
* AUTHOR: Duane Wessels
*
@@ -440,12 +440,22 @@ typedef union {
*/
#if WITH_VALGRIND
#include
+#undef VALGRIND_MAKE_NOACCESS
+#undef VALGRIND_MAKE_WRITABLE
+#undef VALGRIND_MAKE_READABLE
+/* A little glue for older valgrind version prior to 3.2.0 */
+#ifndef VALGRIND_MAKE_MEM_NOACCESS
+#define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS
+#define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE
+#define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE
+#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE VALGRIND_CHECK_WRITABLE
+#endif
#else
-#define VALGRIND_MAKE_NOACCESS(a,b) (0)
-#define VALGRIND_MAKE_WRITABLE(a,b) (0)
-#define VALGRIND_MAKE_READABLE(a,b) (0)
-#define VALGRIND_CHECK_WRITABLE(a,b) (0)
-#define VALGRIND_CHECK_READABLE(a,b) (0)
+#define VALGRIND_MAKE_MEM_NOACCESS(a,b) (0)
+#define VALGRIND_MAKE_MEM_UNDEFINED(a,b) (0)
+#define VALGRIND_MAKE_MEM_DEFINED(a,b) (0)
+#define VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,b) (0)
+#define VALGRIND_CHECK_MEM_IS_DEFINED(a,b) (0)
#define VALGRIND_MALLOCLIKE_BLOCK(a,b,c,d)
#define VALGRIND_FREELIKE_BLOCK(a,b)
#define RUNNING_ON_VALGRIND 0
diff --git a/lib/MemPool.cc b/lib/MemPool.cc
index 2c660f71da..a7a0ba822b 100644
--- a/lib/MemPool.cc
+++ b/lib/MemPool.cc
@@ -1,6 +1,6 @@
/*
- * $Id: MemPool.cc,v 1.10 2007/11/13 23:25:33 rousskov Exp $
+ * $Id: MemPool.cc,v 1.10.4.1 2008/02/29 18:30:02 serassio Exp $
*
* DEBUG: section 63 Low Level Memory Pool Management
* AUTHOR: Alex Rousskov, Andres Kroonmaa, Robert Collins
@@ -211,7 +211,7 @@ MemChunk::MemChunk(MemPool *aPool)
for (int i = 1; i < pool->chunk_capacity; i++) {
*Free = (void *) ((char *) Free + pool->obj_size);
void **nextFree = (void **)*Free;
- (void) VALGRIND_MAKE_NOACCESS(Free, pool->obj_size);
+ (void) VALGRIND_MAKE_MEM_NOACCESS(Free, pool->obj_size);
Free = nextFree;
}
nextFreeChunk = pool->nextFreeChunk;
@@ -277,7 +277,7 @@ MemPool::push(void *obj)
Free = (void **)obj;
*Free = freeCache;
freeCache = obj;
- (void) VALGRIND_MAKE_NOACCESS(obj, obj_size);
+ (void) VALGRIND_MAKE_MEM_NOACCESS(obj, obj_size);
}
/*
@@ -294,7 +294,7 @@ MemPool::get()
/* first, try cache */
if (freeCache) {
Free = (void **)freeCache;
- (void) VALGRIND_MAKE_READABLE(Free, obj_size);
+ (void) VALGRIND_MAKE_MEM_DEFINED(Free, obj_size);
freeCache = *Free;
*Free = NULL;
return Free;
@@ -317,7 +317,7 @@ MemPool::get()
/* last free in this chunk, so remove us from perchunk freelist chain */
nextFreeChunk = chunk->nextFreeChunk;
}
- (void) VALGRIND_MAKE_READABLE(Free, obj_size);
+ (void) VALGRIND_MAKE_MEM_DEFINED(Free, obj_size);
return Free;
}
@@ -557,7 +557,7 @@ void
MemImplementingAllocator::free(void *obj)
{
assert(obj != NULL);
- (void) VALGRIND_CHECK_WRITABLE(obj, obj_size);
+ (void) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(obj, obj_size);
deallocate(obj);
++free_calls;
}
@@ -602,10 +602,10 @@ MemPool::convertFreeCacheToChunkFreeCache()
assert(splayLastResult == 0);
assert(chunk->inuse_count > 0);
chunk->inuse_count--;
- (void) VALGRIND_MAKE_READABLE(Free, sizeof(void *));
+ (void) VALGRIND_MAKE_MEM_DEFINED(Free, sizeof(void *));
freeCache = *(void **)Free; /* remove from global cache */
*(void **)Free = chunk->freeList; /* stuff into chunks freelist */
- (void) VALGRIND_MAKE_NOACCESS(Free, sizeof(void *));
+ (void) VALGRIND_MAKE_MEM_NOACCESS(Free, sizeof(void *));
chunk->freeList = Free;
chunk->lastref = squid_curtime;
}
diff --git a/lib/rfc2617.c b/lib/rfc2617.c
index 0247879532..ba7bd9095a 100644
--- a/lib/rfc2617.c
+++ b/lib/rfc2617.c
@@ -13,7 +13,7 @@
/*
- * $Id: rfc2617.c,v 1.12 2007/11/15 16:47:34 wessels Exp $
+ * $Id: rfc2617.c,v 1.12.4.1 2008/02/29 18:30:02 serassio Exp $
*
* DEBUG:
* AUTHOR: RFC 2617 & Robert Collins
@@ -94,7 +94,7 @@ CvtBin(const HASHHEX Hex, HASH Bin)
else
Bin[i / 2] |= n;
}
- for (; i <= HASHHEXLEN; i++) {
+ for (i = i / 2; i < HASHLEN; i++) {
Bin[i] = '\0';
}
}
diff --git a/src/ACLChecklist.cc b/src/ACLChecklist.cc
index f5d0181949..5a472f13a1 100644
--- a/src/ACLChecklist.cc
+++ b/src/ACLChecklist.cc
@@ -1,5 +1,5 @@
/*
- * $Id: ACLChecklist.cc,v 1.42 2007/09/01 05:56:37 amosjeffries Exp $
+ * $Id: ACLChecklist.cc,v 1.42.4.1 2008/02/29 18:30:02 serassio Exp $
*
* DEBUG: section 28 Access Control
* AUTHOR: Duane Wessels
@@ -394,12 +394,9 @@ ACLChecklist::~ACLChecklist()
HTTPMSGUNLOCK(reply);
- /*
- * DPW 2007-05-08
- * If this fails, then we'll need a backup UNLOCK call in the
- * destructor.
- */
- assert(auth_user_request == NULL);
+ // no auth_user_request in builds without any Authentication configured
+ if (auth_user_request)
+ AUTHUSERREQUESTUNLOCK(auth_user_request, "ACLChecklist destructor");
conn_ = NULL;
diff --git a/src/ACLDestinationDomain.cc b/src/ACLDestinationDomain.cc
index 68739f53bb..a25d1521d9 100644
--- a/src/ACLDestinationDomain.cc
+++ b/src/ACLDestinationDomain.cc
@@ -1,5 +1,5 @@
/*
- * $Id: ACLDestinationDomain.cc,v 1.15 2007/11/03 04:49:53 wessels Exp $
+ * $Id: ACLDestinationDomain.cc,v 1.15.4.1 2008/02/29 18:30:02 serassio Exp $
*
* DEBUG: section 28 Access Control
* AUTHOR: Duane Wessels
@@ -76,6 +76,8 @@ ACLStrategised ACLDestinationDomain::RegexRegistryEntry_(new ACLRe
int
ACLDestinationDomainStrategy::match (ACLData * &data, ACLChecklist *checklist)
{
+ assert(checklist != NULL && checklist->request != NULL);
+
const ipcache_addrs *ia = NULL;
const char *fqdn = NULL;
diff --git a/src/ACLMyPortName.cc b/src/ACLMyPortName.cc
new file mode 100644
index 0000000000..094d290d19
--- /dev/null
+++ b/src/ACLMyPortName.cc
@@ -0,0 +1,63 @@
+
+/*
+ * $Id: ACLMyPortName.cc,v 1.2.6.1 2008/02/29 18:30:02 serassio Exp $
+ *
+ *
+ * SQUID Web Proxy Cache http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ * Squid is the result of efforts by numerous individuals from
+ * the Internet community; see the CONTRIBUTORS file for full
+ * details. Many organizations have provided support for Squid's
+ * development; see the SPONSORS file for full details. Squid is
+ * Copyrighted (C) 2001 by the Regents of the University of
+ * California; see the COPYRIGHT file for full details. Squid
+ * incorporates software developed and/or copyrighted by other
+ * sources; see the CREDITS file for full details.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ *
+ * Copyright (c) 2003, Robert Collins
+ */
+
+#include "squid.h"
+#include "ACLMyPortName.h"
+#include "ACLStringData.h"
+#include "ACLChecklist.h"
+
+/* explicit template instantiation required for some systems */
+
+template class ACLStrategised;
+
+ACL::Prototype ACLMyPortName::RegistryProtoype(&ACLMyPortName::RegistryEntry_, "myportname");
+
+ACLStrategised ACLMyPortName::RegistryEntry_(new ACLStringData, ACLMyPortNameStrategy::Instance(), "myportname");
+
+int
+ACLMyPortNameStrategy::match (ACLData * &data, ACLChecklist *checklist)
+{
+ if (checklist->conn() != NULL)
+ return data->match (checklist->conn()->port->name);
+ return 0;
+}
+
+ACLMyPortNameStrategy *
+ACLMyPortNameStrategy::Instance()
+{
+ return &Instance_;
+}
+
+ACLMyPortNameStrategy ACLMyPortNameStrategy::Instance_;
diff --git a/src/ACLMyPortName.h b/src/ACLMyPortName.h
new file mode 100644
index 0000000000..1743e5ca35
--- /dev/null
+++ b/src/ACLMyPortName.h
@@ -0,0 +1,67 @@
+
+/*
+ * $Id: ACLMyPortName.h,v 1.1.6.1 2008/02/29 18:30:02 serassio Exp $
+ *
+ *
+ * SQUID Web Proxy Cache http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ * Squid is the result of efforts by numerous individuals from
+ * the Internet community; see the CONTRIBUTORS file for full
+ * details. Many organizations have provided support for Squid's
+ * development; see the SPONSORS file for full details. Squid is
+ * Copyrighted (C) 2001 by the Regents of the University of
+ * California; see the COPYRIGHT file for full details. Squid
+ * incorporates software developed and/or copyrighted by other
+ * sources; see the CREDITS file for full details.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ *
+ * Copyright (c) 2003, Robert Collins
+ */
+
+#ifndef SQUID_ACLMYPORTNAME_H
+#define SQUID_ACLMYPORTNAME_H
+#include "ACLStrategy.h"
+#include "ACLStrategised.h"
+
+class ACLMyPortNameStrategy : public ACLStrategy
+{
+
+public:
+ virtual int match (ACLData * &, ACLChecklist *);
+ static ACLMyPortNameStrategy *Instance();
+ /* Not implemented to prevent copies of the instance. */
+ /* Not private to prevent brain dead g+++ warnings about
+ * private constructors with no friends */
+ ACLMyPortNameStrategy(ACLMyPortNameStrategy const &);
+
+private:
+ static ACLMyPortNameStrategy Instance_;
+ ACLMyPortNameStrategy(){}
+
+ ACLMyPortNameStrategy&operator=(ACLMyPortNameStrategy const &);
+};
+
+class ACLMyPortName
+{
+
+private:
+ static ACL::Prototype RegistryProtoype;
+ static ACLStrategised RegistryEntry_;
+};
+
+#endif /* SQUID_ACLMYPORTNAME_H */
diff --git a/src/ESI.cc b/src/ESI.cc
index c008d84762..09003a5918 100644
--- a/src/ESI.cc
+++ b/src/ESI.cc
@@ -1,6 +1,6 @@
/*
- * $Id: ESI.cc,v 1.26.4.2 2008/01/20 19:39:26 serassio Exp $
+ * $Id: ESI.cc,v 1.26.4.3 2008/02/29 18:30:02 serassio Exp $
*
* DEBUG: section 86 ESI processing
* AUTHOR: Robert Collins
@@ -1566,7 +1566,7 @@ esiLiteral::esiLiteral(ESIContext *context, const char *s, int numberOfCharacter
assert (s);
buffer = new ESISegment;
ESISegment::Pointer local = buffer;
- off_t start = 0;
+ size_t start = 0;
int remainingCharacters = numberOfCharacters;
while (remainingCharacters > 0) {
diff --git a/src/ESIContext.h b/src/ESIContext.h
index 240ab3af81..d96a46caef 100644
--- a/src/ESIContext.h
+++ b/src/ESIContext.h
@@ -1,5 +1,5 @@
/*
- * $Id: ESIContext.h,v 1.4 2003/08/04 22:14:40 robertc Exp $
+ * $Id: ESIContext.h,v 1.4.6.1 2008/02/29 18:30:02 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -133,8 +133,8 @@ int detached:
* for some reason
*/
size_t outbound_offset;
- off_t readpos; /* the logical position we are reading from */
- off_t pos; /* the logical position of outbound_offset in the data stream */
+ int64_t readpos; /* the logical position we are reading from */
+ int64_t pos; /* the logical position of outbound_offset in the data stream */
class ParserState
{
diff --git a/src/ESIInclude.cc b/src/ESIInclude.cc
index e32a9e8cb9..373c24d5ad 100644
--- a/src/ESIInclude.cc
+++ b/src/ESIInclude.cc
@@ -1,6 +1,6 @@
/*
- * $Id: ESIInclude.cc,v 1.14.4.2 2008/01/20 19:39:26 serassio Exp $
+ * $Id: ESIInclude.cc,v 1.14.4.3 2008/02/29 18:30:02 serassio Exp $
*
* DEBUG: section 86 ESI processing
* AUTHOR: Robert Collins
@@ -320,7 +320,7 @@ void
ESIInclude::prepareRequestHeaders(HttpHeader &tempheaders, ESIVarState *vars)
{
tempheaders.update (&vars->header(), NULL);
- tempheaders.removeConnectionHeaderEntries();
+ tempheaders.removeHopByHopEntries();
}
diff --git a/src/HttpHeader.cc b/src/HttpHeader.cc
index 9e5b886706..c0beafa35a 100644
--- a/src/HttpHeader.cc
+++ b/src/HttpHeader.cc
@@ -1,6 +1,6 @@
/*
- * $Id: HttpHeader.cc,v 1.138 2007/11/26 13:09:55 hno Exp $
+ * $Id: HttpHeader.cc,v 1.138.4.1 2008/02/29 18:30:02 serassio Exp $
*
* DEBUG: section 55 HTTP Header
* AUTHOR: Alex Rousskov
@@ -236,6 +236,12 @@ static http_hdr_type RequestHeadersArr[] =
HDR_USER_AGENT, HDR_X_FORWARDED_FOR, HDR_SURROGATE_CAPABILITY
};
+static http_hdr_type HopByHopHeadersArr[] =
+ {
+ HDR_CONNECTION, HDR_KEEP_ALIVE, HDR_PROXY_AUTHENTICATE, HDR_PROXY_AUTHORIZATION,
+ HDR_TE, HDR_TRAILERS, HDR_TRANSFER_ENCODING, HDR_UPGRADE
+ };
+
/* header accounting */
static HttpHeaderStat HttpHeaderStats[] =
{
@@ -1762,6 +1768,18 @@ HttpHeader::hasByNameListMember(const char *name, const char *member, const char
return result;
}
+void
+HttpHeader::removeHopByHopEntries()
+{
+ removeConnectionHeaderEntries();
+
+ int count = countof(HopByHopHeadersArr);
+
+ for (int i=0; i entries; /* parsed fields in raw format */
HttpHeaderMask mask; /* bit set <=> entry present */
http_hdr_owner_type owner; /* request or reply */
int len; /* length when packed, not counting terminating '\0' */
+protected:
+ void removeConnectionHeaderEntries();
+
private:
HttpHeaderEntry *findLastEntry(http_hdr_type id) const;
// Make it non-copyable. Our destructor is a bit nasty...
diff --git a/src/ICAP/ICAPModXact.cc b/src/ICAP/ICAPModXact.cc
index 90622d11eb..b06cecb8de 100644
--- a/src/ICAP/ICAPModXact.cc
+++ b/src/ICAP/ICAPModXact.cc
@@ -1085,6 +1085,16 @@ void ICAPModXact::makeRequestHeaders(MemBuf &buf)
if (!TheICAPConfig.reuse_connections)
buf.Printf("Connection: close\r\n");
+ // we must forward "Proxy-Authenticate" and "Proxy-Authorization"
+ // as ICAP headers.
+ if (virgin.header->header.has(HDR_PROXY_AUTHENTICATE))
+ buf.Printf("Proxy-Authenticate: %s\r\n",
+ virgin.header->header.getByName("Proxy-Authenticate").buf());
+
+ if (virgin.header->header.has(HDR_PROXY_AUTHORIZATION))
+ buf.Printf("Proxy-Authorization: %s\r\n",
+ virgin.header->header.getByName("Proxy-Authorization").buf());
+
buf.Printf("Encapsulated: ");
MemBuf httpBuf;
@@ -1173,8 +1183,38 @@ void ICAPModXact::encapsulateHead(MemBuf &icapBuf, const char *section, MemBuf &
// update ICAP header
icapBuf.Printf("%s=%d, ", section, (int) httpBuf.contentSize());
- // pack HTTP head
- packHead(httpBuf, head);
+ // begin cloning
+ HttpMsg *headClone = NULL;
+
+ if (const HttpRequest* old_request = dynamic_cast(head)) {
+ HttpRequest* new_request = new HttpRequest;
+ urlParse(old_request->method, old_request->canonical,new_request);
+ new_request->http_ver = old_request->http_ver;
+ inheritVirginProperties(*new_request, *old_request);
+ headClone = new_request;
+ }
+ else if (const HttpReply *old_reply = dynamic_cast(head)) {
+ HttpReply* new_reply = new HttpReply;
+ new_reply->sline = old_reply->sline;
+ headClone = new_reply;
+ }
+
+ Must(headClone);
+
+ HttpHeaderPos pos = HttpHeaderInitPos;
+ HttpHeaderEntry* p_head_entry = NULL;
+ while (NULL != (p_head_entry = head->header.getEntry(&pos)) )
+ headClone->header.addEntry(p_head_entry->clone());
+
+ // end cloning
+
+ // remove all hop-by-hop headers from the clone
+ headClone->header.removeHopByHopEntries();
+
+ // pack polished HTTP header
+ packHead(httpBuf, headClone);
+
+ delete headClone;
}
void ICAPModXact::packHead(MemBuf &httpBuf, const HttpMsg *head)
diff --git a/src/Makefile.am b/src/Makefile.am
index d4775064a9..e0132c0ee5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,7 +1,7 @@
#
# Makefile for the Squid Object Cache server
#
-# $Id: Makefile.am,v 1.193 2007/10/31 04:52:15 amosjeffries Exp $
+# $Id: Makefile.am,v 1.193.4.1 2008/02/29 18:30:02 serassio Exp $
#
# Uncomment and customize the following to suit your needs:
#
@@ -329,6 +329,8 @@ squid_ACLSOURCES = \
ACLMyIP.h \
ACLMyPort.cc \
ACLMyPort.h \
+ ACLMyPortName.cc \
+ ACLMyPortName.h \
ACLProtocol.cc \
ACLProtocol.h \
ACLProtocolData.cc \
diff --git a/src/Makefile.in b/src/Makefile.in
index 860bc44670..ef84d85402 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -17,7 +17,7 @@
#
# Makefile for the Squid Object Cache server
#
-# $Id: Makefile.in,v 1.447.4.2 2007/12/27 20:37:46 serassio Exp $
+# $Id: Makefile.in,v 1.447.4.3 2008/02/29 18:30:03 serassio Exp $
#
# Uncomment and customize the following to suit your needs:
#
@@ -186,10 +186,10 @@ am__squid_SOURCES_DIST = access_log.cc AccessLogEntry.h acl.cc \
ACLMaxConnection.cc ACLMaxConnection.h ACLMaxUserIP.cc \
ACLMaxUserIP.h ACLMethod.cc ACLMethod.h ACLMethodData.cc \
ACLMethodData.h ACLMyIP.cc ACLMyIP.h ACLMyPort.cc ACLMyPort.h \
- ACLProtocol.cc ACLProtocol.h ACLProtocolData.cc \
- ACLProtocolData.h ACLProxyAuth.cc ACLProxyAuth.h ACLReferer.cc \
- ACLReferer.h ACLRegexData.cc ACLRegexData.h \
- ACLReplyHeaderStrategy.h ACLReplyMIMEType.cc \
+ ACLMyPortName.cc ACLMyPortName.h ACLProtocol.cc ACLProtocol.h \
+ ACLProtocolData.cc ACLProtocolData.h ACLProxyAuth.cc \
+ ACLProxyAuth.h ACLReferer.cc ACLReferer.h ACLRegexData.cc \
+ ACLRegexData.h ACLReplyHeaderStrategy.h ACLReplyMIMEType.cc \
ACLReplyMIMEType.h ACLHTTPRepHeader.cc ACLHTTPRepHeader.h \
ACLHTTPReqHeader.cc ACLHTTPReqHeader.h \
ACLRequestHeaderStrategy.h ACLRequestMIMEType.cc \
@@ -277,16 +277,16 @@ am__objects_6 = $(am__objects_5) ACLASN.$(OBJEXT) ACLBrowser.$(OBJEXT) \
ACLIntRange.$(OBJEXT) ACLIP.$(OBJEXT) \
ACLMaxConnection.$(OBJEXT) ACLMaxUserIP.$(OBJEXT) \
ACLMethod.$(OBJEXT) ACLMethodData.$(OBJEXT) ACLMyIP.$(OBJEXT) \
- ACLMyPort.$(OBJEXT) ACLProtocol.$(OBJEXT) \
- ACLProtocolData.$(OBJEXT) ACLProxyAuth.$(OBJEXT) \
- ACLReferer.$(OBJEXT) ACLRegexData.$(OBJEXT) \
- ACLReplyMIMEType.$(OBJEXT) ACLHTTPRepHeader.$(OBJEXT) \
- ACLHTTPReqHeader.$(OBJEXT) ACLRequestMIMEType.$(OBJEXT) \
- ACLSourceDomain.$(OBJEXT) ACLSourceIP.$(OBJEXT) \
- ACLStrategised.$(OBJEXT) ACLStringData.$(OBJEXT) \
- ACLTime.$(OBJEXT) ACLTimeData.$(OBJEXT) ACLUrl.$(OBJEXT) \
- ACLUrlPath.$(OBJEXT) ACLUrlPort.$(OBJEXT) \
- ACLUserData.$(OBJEXT)
+ ACLMyPort.$(OBJEXT) ACLMyPortName.$(OBJEXT) \
+ ACLProtocol.$(OBJEXT) ACLProtocolData.$(OBJEXT) \
+ ACLProxyAuth.$(OBJEXT) ACLReferer.$(OBJEXT) \
+ ACLRegexData.$(OBJEXT) ACLReplyMIMEType.$(OBJEXT) \
+ ACLHTTPRepHeader.$(OBJEXT) ACLHTTPReqHeader.$(OBJEXT) \
+ ACLRequestMIMEType.$(OBJEXT) ACLSourceDomain.$(OBJEXT) \
+ ACLSourceIP.$(OBJEXT) ACLStrategised.$(OBJEXT) \
+ ACLStringData.$(OBJEXT) ACLTime.$(OBJEXT) \
+ ACLTimeData.$(OBJEXT) ACLUrl.$(OBJEXT) ACLUrlPath.$(OBJEXT) \
+ ACLUrlPort.$(OBJEXT) ACLUserData.$(OBJEXT)
am__objects_7 = comm_select.$(OBJEXT) comm_select_win32.$(OBJEXT) \
comm_poll.$(OBJEXT) comm_epoll.$(OBJEXT) comm_kqueue.$(OBJEXT)
am__objects_8 = delay_pools.$(OBJEXT) DelayId.$(OBJEXT) \
@@ -1968,6 +1968,8 @@ squid_ACLSOURCES = \
ACLMyIP.h \
ACLMyPort.cc \
ACLMyPort.h \
+ ACLMyPortName.cc \
+ ACLMyPortName.h \
ACLProtocol.cc \
ACLProtocol.h \
ACLProtocolData.cc \
@@ -4628,6 +4630,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACLMethodData.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACLMyIP.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACLMyPort.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACLMyPortName.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACLProtocol.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACLProtocolData.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACLProxyAuth.Po@am__quote@
diff --git a/src/Mem.h b/src/Mem.h
index 22f7d44c7b..76cc02879c 100644
--- a/src/Mem.h
+++ b/src/Mem.h
@@ -1,6 +1,6 @@
/*
- * $Id: Mem.h,v 1.4 2006/05/29 00:15:01 robertc Exp $
+ * $Id: Mem.h,v 1.4.6.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 13 High Level Memory Pool Management
* AUTHOR: Harvest Derived
@@ -47,6 +47,7 @@ class Mem
public:
static void Init();
+ static void Report();
static void RegisterWithCacheManager(CacheManager & manager);
static void Stats(StoreEntry *);
static void CleanIdlePools(void *unused);
diff --git a/src/Server.h b/src/Server.h
index eef3f5d2b8..a9bc2800b0 100644
--- a/src/Server.h
+++ b/src/Server.h
@@ -1,6 +1,6 @@
/*
- * $Id: Server.h,v 1.10 2007/09/27 14:34:06 rousskov Exp $
+ * $Id: Server.h,v 1.10.4.1 2008/02/29 18:30:03 serassio Exp $
*
* AUTHOR: Duane Wessels
*
@@ -163,7 +163,7 @@ protected:
size_t replyBodySpace(size_t space = 4096 * 10);
// These should be private
- off_t currentOffset; // Our current offset in the StoreEntry
+ int64_t currentOffset; // Our current offset in the StoreEntry
MemBuf *responseBodyBuffer; // Data temporarily buffered for ICAP
public: // should not be
diff --git a/src/SquidString.h b/src/SquidString.h
index c2f371d2b2..bd704f96e7 100644
--- a/src/SquidString.h
+++ b/src/SquidString.h
@@ -1,6 +1,6 @@
/*
- * $Id: SquidString.h,v 1.12 2007/11/04 23:59:51 amosjeffries Exp $
+ * $Id: SquidString.h,v 1.12.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 67 String
* AUTHOR: Duane Wessels
@@ -36,6 +36,8 @@
#ifndef SQUID_STRING_H
#define SQUID_STRING_H
+#include "config.h"
+
/* forward decls */
class CacheManager;
diff --git a/src/Store.h b/src/Store.h
index 4f363d211a..bfffa1d0f6 100644
--- a/src/Store.h
+++ b/src/Store.h
@@ -1,6 +1,6 @@
/*
- * $Id: Store.h,v 1.40 2007/11/18 17:19:35 serassio Exp $
+ * $Id: Store.h,v 1.40.4.1 2008/02/29 18:30:03 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -301,9 +301,6 @@ private:
typedef RefCount StorePointer;
SQUIDCEXTERN size_t storeEntryInUse();
-#if UNUSED_CODE_20070420
-SQUIDCEXTERN off_t storeLowestMemReaderOffset(const StoreEntry * entry);
-#endif
SQUIDCEXTERN const char *storeEntryFlags(const StoreEntry *);
extern void storeEntryReplaceObject(StoreEntry *, HttpReply *);
diff --git a/src/StoreMetaUnpacker.cc b/src/StoreMetaUnpacker.cc
index d0d77cf5ec..b9abf6b8f8 100644
--- a/src/StoreMetaUnpacker.cc
+++ b/src/StoreMetaUnpacker.cc
@@ -1,6 +1,6 @@
/*
- * $Id: StoreMetaUnpacker.cc,v 1.5.6.1 2008/02/24 12:41:29 serassio Exp $
+ * $Id: StoreMetaUnpacker.cc,v 1.5.6.2 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 20 Storage Manager Swapfile Unpacker
* AUTHOR: Robert Collins
@@ -37,7 +37,7 @@
#include "StoreMetaUnpacker.h"
#include "StoreMeta.h"
-off_t const StoreMetaUnpacker::MinimumBufferLength = sizeof(char) + sizeof(int);
+int const StoreMetaUnpacker::MinimumBufferLength = sizeof(char) + sizeof(int);
bool
StoreMetaUnpacker::isBufferSane()
diff --git a/src/StoreMetaUnpacker.h b/src/StoreMetaUnpacker.h
index 8cc261e82c..c8db344497 100644
--- a/src/StoreMetaUnpacker.h
+++ b/src/StoreMetaUnpacker.h
@@ -1,6 +1,6 @@
/*
- * $Id: StoreMetaUnpacker.h,v 1.2 2003/02/21 22:50:06 robertc Exp $
+ * $Id: StoreMetaUnpacker.h,v 1.2.6.1 2008/02/29 18:30:03 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -45,7 +45,7 @@ public:
bool isBufferSane();
private:
- static off_t const MinimumBufferLength;
+ static int const MinimumBufferLength;
void getBufferLength();
void getType();
@@ -57,7 +57,7 @@ private:
char const * const buf;
ssize_t buflen;
int *hdr_len;
- off_t position;
+ int position;
char type;
int length;
StoreMeta **tail;
diff --git a/src/String.cci b/src/String.cci
index ccc48f4ac0..c65b70b15c 100644
--- a/src/String.cci
+++ b/src/String.cci
@@ -1,6 +1,6 @@
/*
- * $Id: String.cci,v 1.10 2007/11/04 23:59:52 amosjeffries Exp $
+ * $Id: String.cci,v 1.10.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 67 String
* AUTHOR: Duane Wessels
@@ -33,6 +33,8 @@
*
*/
+#include "assert.h"
+
String::String() : size_(0), len_(0), buf_ (NULL)
{
#if DEBUGSTRINGS
@@ -150,6 +152,8 @@ String::cut(size_t newLength)
if(newLength < 0 || newLength > len_) return;
len_ = newLength;
+
+ if(len_ == 0 && buf_ == NULL) return; // buf_ may be NULL on zero-length strings.
buf_[newLength] = '\0';
}
diff --git a/src/asn.cc b/src/asn.cc
index a533f2dd11..8e79947715 100644
--- a/src/asn.cc
+++ b/src/asn.cc
@@ -1,6 +1,6 @@
/*
- * $Id: asn.cc,v 1.115 2007/09/21 11:41:52 amosjeffries Exp $
+ * $Id: asn.cc,v 1.115.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 53 AS Number handling
* AUTHOR: Duane Wessels, Kostas Anagnostakis
@@ -89,7 +89,7 @@ struct ASState
store_client *sc;
HttpRequest *request;
int as_number;
- off_t offset;
+ int64_t offset;
int reqofs;
char reqbuf[AS_REQBUF_SZ];
bool dataRead;
@@ -299,7 +299,7 @@ asHandleReply(void *data, StoreIOBuffer result)
*/
s = buf;
- while (s - buf < (off_t)(result.length + asState->reqofs) && *s != '\0') {
+ while ((size_t)(s - buf) < result.length + asState->reqofs && *s != '\0') {
while (*s && xisspace(*s))
s++;
diff --git a/src/auth/digest/auth_digest.cc b/src/auth/digest/auth_digest.cc
index 8e6a93148e..b20d937562 100644
--- a/src/auth/digest/auth_digest.cc
+++ b/src/auth/digest/auth_digest.cc
@@ -1,6 +1,6 @@
/*
- * $Id: auth_digest.cc,v 1.59 2007/08/27 12:50:45 hno Exp $
+ * $Id: auth_digest.cc,v 1.59.4.1 2008/02/29 18:30:05 serassio Exp $
*
* DEBUG: section 29 Authenticator
* AUTHOR: Robert Collins
@@ -666,6 +666,7 @@ AuthDigestUserRequest::authenticate(HttpRequest * request, ConnStateData::Pointe
}
} else {
credentials(Failed);
+ digest_request->flags.invalid_password = 1;
digest_request->setDenyMessage("Incorrect password");
return;
}
@@ -673,7 +674,6 @@ AuthDigestUserRequest::authenticate(HttpRequest * request, ConnStateData::Pointe
/* check for stale nonce */
if (!authDigestNonceIsValid(digest_request->nonce, digest_request->nc)) {
debugs(29, 3, "authenticateDigestAuthenticateuser: user '" << digest_user->username() << "' validated OK but nonce stale");
- digest_request->flags.nonce_stale = 1;
credentials(Failed);
digest_request->setDenyMessage("Stale nonce");
return;
@@ -708,11 +708,8 @@ AuthDigestUserRequest::module_direction()
case Failed:
- if (flags.nonce_stale)
- /* nonce is stale, send new challenge */
- return 1;
-
- return -2;
+ /* send new challenge */
+ return 1;
}
return -2;
@@ -783,14 +780,14 @@ AuthDigestConfig::fixHeader(AuthUserRequest *auth_user_request, HttpReply *rep,
if (!authenticate)
return;
- int stale = 0;
+ int stale = 1;
if (auth_user_request) {
AuthDigestUserRequest *digest_request;
digest_request = dynamic_cast < AuthDigestUserRequest * >(auth_user_request);
assert (digest_request != NULL);
- stale = digest_request->flags.nonce_stale;
+ stale = !digest_request->flags.invalid_password;
}
/* on a 407 or 401 we always use a new nonce */
@@ -850,6 +847,7 @@ authenticateDigestHandleReply(void *data, char *reply)
if (reply && (strncasecmp(reply, "ERR", 3) == 0)) {
digest_request->credentials(AuthDigestUserRequest::Failed);
+ digest_request->flags.invalid_password = 1;
if (t && *t)
digest_request->setDenyMessage(t);
@@ -1047,9 +1045,8 @@ authDigestUserLinkNonce(DigestUser * user, digest_nonce_h * nonce)
/* setup the necessary info to log the username */
static AuthUserRequest *
-authDigestLogUsername(char *username)
+authDigestLogUsername(char *username, AuthDigestUserRequest *auth_user_request)
{
- AuthDigestUserRequest *auth_user_request = new AuthDigestUserRequest();
assert(auth_user_request != NULL);
/* log the username */
@@ -1228,7 +1225,7 @@ AuthDigestConfig::decode(char const *proxy_auth)
if (digest_request->cnonce && strlen(digest_request->nc) != 8) {
debugs(29, 4, "authenticateDigestDecode: nonce count length invalid");
delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
/* now the nonce */
@@ -1237,8 +1234,7 @@ AuthDigestConfig::decode(char const *proxy_auth)
if (!nonce) {
/* we couldn't find a matching nonce! */
debugs(29, 4, "authenticateDigestDecode: Unexpected or invalid nonce received");
- delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
digest_request->nonce = nonce;
@@ -1247,11 +1243,11 @@ AuthDigestConfig::decode(char const *proxy_auth)
/* check the qop is what we expected. Note that for compatability with
* RFC 2069 we should support a missing qop. Tough. */
- if (!digest_request->qop || strcmp(digest_request->qop, QOP_AUTH)) {
+ if (digest_request->qop && strcmp(digest_request->qop, QOP_AUTH) != 0) {
/* we received a qop option we didn't send */
debugs(29, 4, "authenticateDigestDecode: Invalid qop option received");
delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
/* we can't check the URI just yet. We'll check it in the
@@ -1262,21 +1258,21 @@ AuthDigestConfig::decode(char const *proxy_auth)
if (!digest_request->response || strlen(digest_request->response) != 32) {
debugs(29, 4, "authenticateDigestDecode: Response length invalid");
delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
/* do we have a username ? */
if (!username || username[0] == '\0') {
debugs(29, 4, "authenticateDigestDecode: Empty or not present username");
delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
/* check that we're not being hacked / the username hasn't changed */
if (nonce->user && strcmp(username, nonce->user->username())) {
debugs(29, 4, "authenticateDigestDecode: Username for the nonce does not equal the username for the request");
delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
/* if we got a qop, did we get a cnonce or did we get a cnonce wihtout a qop? */
@@ -1284,7 +1280,7 @@ AuthDigestConfig::decode(char const *proxy_auth)
|| (!digest_request->qop && digest_request->cnonce)) {
debugs(29, 4, "authenticateDigestDecode: qop without cnonce, or vice versa!");
delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
/* check the algorithm is present and supported */
@@ -1294,7 +1290,7 @@ AuthDigestConfig::decode(char const *proxy_auth)
&& strcmp(digest_request->algorithm, "MD5-sess")) {
debugs(29, 4, "authenticateDigestDecode: invalid algorithm specified!");
delete digest_request;
- return authDigestLogUsername(username);
+ return authDigestLogUsername(username, digest_request);
}
/* the method we'll check at the authenticate step as well */
diff --git a/src/auth/digest/auth_digest.h b/src/auth/digest/auth_digest.h
index 302ef9ec80..72178a6490 100644
--- a/src/auth/digest/auth_digest.h
+++ b/src/auth/digest/auth_digest.h
@@ -99,8 +99,7 @@ public:
unsigned int authinfo_sent:
1;
-unsigned int nonce_stale:
- 1;
+ unsigned int invalid_password:1;
unsigned int helper_queried:
1;
diff --git a/src/cache_cf.cc b/src/cache_cf.cc
index 0420478e07..b7ba0f24c1 100644
--- a/src/cache_cf.cc
+++ b/src/cache_cf.cc
@@ -1,6 +1,6 @@
/*
- * $Id: cache_cf.cc,v 1.528 2007/11/15 23:33:05 wessels Exp $
+ * $Id: cache_cf.cc,v 1.528.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 3 Configuration File Parsing
* AUTHOR: Harvest Derived
@@ -46,6 +46,9 @@
#include "Parsing.h"
#include "MemBuf.h"
#include "wordlist.h"
+#if HAVE_GLOB_H
+#include
+#endif
#if SQUID_SNMP
#include "snmp.h"
@@ -151,6 +154,8 @@ static int check_null_https_port_list(const https_port_list *);
static void parse_b_size_t(size_t * var);
static void parse_b_int64_t(int64_t * var);
+static int parseOneConfigFile(const char *file_name, unsigned int depth);
+
/*
* LegacyParser is a parser for legacy code that uses the global
* approach. This is static so that it is only exposed to cache_cf.
@@ -203,17 +208,53 @@ skip_ws(const char* s)
return s;
}
-int
-parseConfigFile(const char *file_name, CacheManager & manager)
+static int
+parseManyConfigFiles(char* files, int depth)
+{
+ int error_count = 0;
+ char* saveptr = NULL;
+#if HAVE_GLOB
+ char *path;
+ glob_t globbuf;
+ int i;
+ memset(&globbuf, 0, sizeof(globbuf));
+ for (path = strwordtok(files, &saveptr); path; path = strwordtok(NULL, &saveptr)) {
+ if (glob(path, globbuf.gl_pathc ? GLOB_APPEND : 0, NULL, &globbuf) != 0) {
+ fatalf("Unable to find configuration file: %s: %s",
+ path, xstrerror());
+ }
+ }
+ for (i = 0; i < (int)globbuf.gl_pathc; i++) {
+ error_count += parseOneConfigFile(globbuf.gl_pathv[i], depth);
+ }
+ globfree(&globbuf);
+#else
+ char* file = strwordtok(files, &saveptr);
+ while (file != NULL) {
+ error_count += parseOneConfigFile(file, depth);
+ file = strwordtok(NULL, &saveptr);
+ }
+#endif /* HAVE_GLOB */
+ return error_count;
+}
+
+static int
+parseOneConfigFile(const char *file_name, unsigned int depth)
{
FILE *fp = NULL;
+ const char *orig_cfg_filename = cfg_filename;
+ const int orig_config_lineno = config_lineno;
char *token = NULL;
char *tmp_line = NULL;
int tmp_line_len = 0;
int err_count = 0;
int is_pipe = 0;
- configFreeMemory();
- default_all();
+
+ debugs(3, 1, "Processing Configuration File: " << file_name << " (depth " << depth << ")");
+ if (depth > 16) {
+ fatalf("WARNING: can't include %s: includes are nested too deeply (>16)!\n", file_name);
+ return 1;
+ }
if (file_name[0] == '!' || file_name[0] == '|') {
fp = popen(file_name + 1, "r");
@@ -223,8 +264,7 @@ parseConfigFile(const char *file_name, CacheManager & manager)
}
if (fp == NULL)
- fatalf("Unable to open configuration file: %s: %s",
- file_name, xstrerror());
+ fatalf("Unable to open configuration file: %s: %s", file_name, xstrerror());
#ifdef _SQUID_WIN32_
@@ -270,13 +310,6 @@ parseConfigFile(const char *file_name, CacheManager & manager)
*token = '\0';
cfg_filename = new_file_name;
-
-#if PROBABLY_NOT_WANTED_HERE
-
- SetConfigFilename(cfg_filename, false);
-
-#endif
-
}
config_lineno = new_lineno;
@@ -306,11 +339,13 @@ parseConfigFile(const char *file_name, CacheManager & manager)
debugs(3, 5, "Processing: '" << tmp_line << "'");
- if (!parse_line(tmp_line)) {
- debugs(3, 0, "parseConfigFile: '" << cfg_filename << "' line " <<
- config_lineno << " unrecognized: '" << config_input_line << "'");
- err_count++;
- }
+ /* Handle includes here */
+ if (tmp_line_len >= 9 && strncmp(tmp_line, "include", 7) == 0 && xisspace(tmp_line[7])) {
+ err_count += parseManyConfigFiles(tmp_line + 8, depth + 1);
+ } else if (!parse_line(tmp_line)) {
+ debugs(3, 0, HERE << cfg_filename << ":" << config_lineno << " unrecognized: '" << tmp_line << "'");
+ err_count++;
+ }
safe_free(tmp_line);
tmp_line_len = 0;
@@ -326,6 +361,23 @@ parseConfigFile(const char *file_name, CacheManager & manager)
fclose(fp);
}
+ cfg_filename = orig_cfg_filename;
+ config_lineno = orig_config_lineno;
+
+ return err_count;
+}
+
+int
+parseConfigFile(const char *file_name, CacheManager & manager)
+{
+ int err_count = 0;
+
+ configFreeMemory();
+
+ default_all();
+
+ err_count = parseOneConfigFile(file_name, 0);
+
defaults_if_none();
/*
@@ -351,6 +403,7 @@ parseConfigFile(const char *file_name, CacheManager & manager)
return err_count;
}
+
static void
configDoConfigure(void)
{
@@ -2364,18 +2417,6 @@ parse_eol(char *volatile *var)
#define dump_eol dump_string
#define free_eol free_string
-void
-parse_debug(char *volatile *var)
-{
- parse_eol(var);
- safe_free(debug_options)
- debug_options = xstrdup(Config.debugOptions);
- Debug::parseOptions(Config.debugOptions);
-}
-
-#define dump_debug dump_string
-#define free_debug free_string
-
static void
dump_time_t(StoreEntry * entry, const char *name, time_t var)
{
@@ -2769,6 +2810,7 @@ parse_http_port_specification(http_port_list * s, char *token)
char *t;
s->disable_pmtu_discovery = DISABLE_PMTU_OFF;
+ s->name = strdup(token);
if ((t = strchr(token, ':'))) {
/* host:port */
diff --git a/src/carp.cc b/src/carp.cc
index 56e95e1b08..85e8257d0e 100644
--- a/src/carp.cc
+++ b/src/carp.cc
@@ -1,6 +1,6 @@
/*
- * $Id: carp.cc,v 1.26 2007/04/28 22:26:37 hno Exp $
+ * $Id: carp.cc,v 1.26.6.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 39 Cache Array Routing Protocol
* AUTHOR: Henrik Nordstrom
@@ -104,7 +104,7 @@ carpInit(void)
/* calculate this peers hash */
p->carp.hash = 0;
- for (t = p->host; *t != 0; t++)
+ for (t = p->name; *t != 0; t++)
p->carp.hash += ROTATE_LEFT(p->carp.hash, 19) + (unsigned int) *t;
p->carp.hash += p->carp.hash * 0x62531965;
@@ -189,7 +189,7 @@ carpSelectParent(HttpRequest * request)
combined_hash += combined_hash * 0x62531965;
combined_hash = ROTATE_LEFT(combined_hash, 21);
score = combined_hash * tp->carp.load_multiplier;
- debugs(39, 3, "carpSelectParent: " << tp->host << " combined_hash " << combined_hash <<
+ debugs(39, 3, "carpSelectParent: " << tp->name << " combined_hash " << combined_hash <<
" score " << std::setprecision(0) << score);
if ((score > high_score) && peerHTTPOkay(tp, request)) {
@@ -199,7 +199,7 @@ carpSelectParent(HttpRequest * request)
}
if (p)
- debugs(39, 2, "carpSelectParent: selected " << p->host);
+ debugs(39, 2, "carpSelectParent: selected " << p->name);
return p;
}
@@ -221,7 +221,7 @@ carpCachemgr(StoreEntry * sentry)
for (p = Config.peers; p; p = p->next) {
storeAppendPrintf(sentry, "%24s %10x %10f %10f %10f\n",
- p->host, p->carp.hash,
+ p->name, p->carp.hash,
p->carp.load_multiplier,
p->carp.load_factor,
sumfetches ? (double) p->stats.fetches / sumfetches : -1.0);
diff --git a/src/cf.data.pre b/src/cf.data.pre
index 165c2dd439..8f450e1cc8 100644
--- a/src/cf.data.pre
+++ b/src/cf.data.pre
@@ -1,6 +1,6 @@
#
-# $Id: cf.data.pre,v 1.488.4.2 2008/02/10 10:07:53 serassio Exp $
+# $Id: cf.data.pre,v 1.488.4.3 2008/02/29 18:30:03 serassio Exp $
#
# SQUID Web Proxy Cache http://www.squid-cache.org/
# ----------------------------------------------------------
@@ -47,6 +47,21 @@ COMMENT_START
COMMENT_END
+COMMENT_START
+ Configuration options can be included using the "include" directive.
+ Include takes a list of files to include. Quoting and wildcards is
+ supported.
+
+ For example,
+
+ include /path/to/included/file/squid.acl.config
+
+ Includes can be nested up to a hard-coded depth of 16 levels.
+ This arbitrary restriction is to prevent recursive include references
+ from causing Squid entering an infinite loop whilst trying to load
+ configuration files.
+COMMENT_END
+
COMMENT_START
OPTIONS FOR AUTHENTICATION
-----------------------------------------------------------------------------
@@ -488,6 +503,7 @@ DOC_START
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... # ranges allowed
acl aclname myport 3128 ... # (local socket TCP port)
+ acl aclname myportname 3128 ... # http(s)_port name
acl aclname proto HTTP FTP ...
acl aclname method GET POST ...
acl aclname browser [-i] regexp ...
@@ -920,6 +936,9 @@ DOC_START
sporadically hang or never complete requests set
disable-pmtu-discovery option to 'transparent'.
+ name= Specifies a internal name for the port. Defaults to
+ the port specification (port or addr:port)
+
If you run Squid on a dual-homed machine with an internal
and an external interface we recommend you to specify the
internal address:port in http_port. This way Squid will only be
@@ -1032,6 +1051,9 @@ DOC_START
vport=NN As above, but uses specified port number rather
than the https_port number. Implies accel.
+ name= Specifies a internal name for the port. Defaults to
+ the port specification (port or addr:port)
+
DOC_END
NAME: tcp_outgoing_tos tcp_outgoing_ds tcp_outgoing_dscp
@@ -2178,7 +2200,7 @@ DOC_START
DOC_END
NAME: debug_options
-TYPE: debug
+TYPE: eol
DEFAULT: ALL,1
LOC: Config.debugOptions
DOC_START
diff --git a/src/client_side.h b/src/client_side.h
index 5f40f37e1e..88eff35528 100644
--- a/src/client_side.h
+++ b/src/client_side.h
@@ -1,5 +1,5 @@
/*
- * $Id: client_side.h,v 1.26 2007/10/31 04:52:16 amosjeffries Exp $
+ * $Id: client_side.h,v 1.26.4.1 2008/02/29 18:30:03 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -95,7 +95,7 @@ unsigned parsed_ok: 1; /* Was this parsed correctly? */
};
DeferredParams deferredparams;
- off_t writtenToSocket;
+ int64_t writtenToSocket;
void pullData();
int64_t getNextRangeOffset() const;
bool canPackMoreRanges() const;
diff --git a/src/client_side_reply.cc b/src/client_side_reply.cc
index 9d238973e7..58306df552 100644
--- a/src/client_side_reply.cc
+++ b/src/client_side_reply.cc
@@ -1,6 +1,6 @@
/*
- * $Id: client_side_reply.cc,v 1.144.4.1 2008/02/24 12:41:29 serassio Exp $
+ * $Id: client_side_reply.cc,v 1.144.4.2 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 88 Client-side Reply Routines
* AUTHOR: Robert Collins (Originally Duane Wessels in client_side.c)
@@ -1214,10 +1214,7 @@ clientReplyContext::buildReplyHeader()
if (is_hit)
hdr->delById(HDR_SET_COOKIE);
- /*
- * Be sure to obey the Connection header
- */
- reply->header.removeConnectionHeaderEntries();
+ reply->header.removeHopByHopEntries();
// if (request->range)
// clientBuildRangeHeader(http, reply);
@@ -1314,6 +1311,9 @@ clientReplyContext::buildReplyHeader()
#endif
+ /* Check whether we should send keep-alive */
+ // TODO: disable proxy_keepalive only once
+
if (reply->bodySize(request->method) < 0) {
debugs(88, 3, "clientBuildReplyHeader: can't keep-alive, unknown body size" );
request->flags.proxy_keepalive = 0;
@@ -1332,6 +1332,11 @@ clientReplyContext::buildReplyHeader()
if (!Config.onoff.client_pconns && !request->flags.must_keepalive)
request->flags.proxy_keepalive = 0;
+ if (request->flags.proxy_keepalive && shutting_down) {
+ debugs(88, 3, "clientBuildReplyHeader: Shutting down, don't keep-alive.");
+ request->flags.proxy_keepalive = 0;
+ }
+
/* Append VIA */
if (Config.onoff.via) {
LOCAL_ARRAY(char, bbuf, MAX_URL + 32);
diff --git a/src/client_side_reply.h b/src/client_side_reply.h
index de223bbc30..c34cf802e2 100644
--- a/src/client_side_reply.h
+++ b/src/client_side_reply.h
@@ -1,6 +1,6 @@
/*
- * $Id: client_side_reply.h,v 1.17 2007/05/09 07:36:24 wessels Exp $
+ * $Id: client_side_reply.h,v 1.17.6.1 2008/02/29 18:30:03 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -98,7 +98,7 @@ public:
StoreIOBuffer tempBuffer; /* For use in validating requests via IMS */
int old_reqsize; /* ... again, for the buffer */
size_t reqsize;
- off_t reqofs;
+ size_t reqofs;
char tempbuf[HTTP_REQBUF_SZ]; /* a temporary buffer if we need working storage */
#if USE_CACHE_DIGESTS
diff --git a/src/client_side_request.h b/src/client_side_request.h
index 92e1b7848d..34d4d2f2ea 100644
--- a/src/client_side_request.h
+++ b/src/client_side_request.h
@@ -1,6 +1,6 @@
/*
- * $Id: client_side_request.h,v 1.32 2007/08/13 17:20:51 hno Exp $
+ * $Id: client_side_request.h,v 1.32.4.1 2008/02/29 18:30:03 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -183,7 +183,7 @@ private:
BodyPipe::Pointer icapBodySource;
bool request_satisfaction_mode;
- off_t request_satisfaction_offset;
+ int64_t request_satisfaction_offset;
#endif
};
diff --git a/src/comm.cc b/src/comm.cc
index 02157c5389..5d396b9270 100644
--- a/src/comm.cc
+++ b/src/comm.cc
@@ -1,5 +1,5 @@
/*
- * $Id: comm.cc,v 1.438 2007/10/31 04:52:16 amosjeffries Exp $
+ * $Id: comm.cc,v 1.438.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 5 Socket Functions
* AUTHOR: Harvest Derived
@@ -1103,6 +1103,7 @@ ConnectStateData::commResetFD()
return 0;
}
+ commResetSelect(fd);
close(fd2);
fde *F = &fd_table[fd];
@@ -1252,6 +1253,13 @@ comm_connect_addr(int sock, const struct sockaddr_in *address)
x = connect(sock, (struct sockaddr *) address, sizeof(*address));
+ // XXX: ICAP code refuses callbacks during a pending comm_ call
+ // Async calls development will fix this.
+ if (x == 0) {
+ x = -1;
+ errno = EINPROGRESS;
+ }
+
if (x < 0)
debugs(5, 9, "connect FD " << sock << ": " << xstrerror());
} else
@@ -1897,7 +1905,7 @@ commHandleWrite(int fd, void *data) {
/* A successful write, continue */
state->offset += len;
- if (state->offset < (off_t)state->size) {
+ if (state->offset < state->size) {
/* Not done, reinstall the write handler and write some more */
commSetSelect(fd,
COMM_SELECT_WRITE,
diff --git a/src/comm.h b/src/comm.h
index db8b62a9bb..ceaab1ec76 100644
--- a/src/comm.h
+++ b/src/comm.h
@@ -57,6 +57,7 @@ SQUIDCEXTERN u_short comm_local_port(int fd);
SQUIDCEXTERN int comm_set_tos(int fd, int tos);
SQUIDCEXTERN void commSetSelect(int, unsigned int, PF *, void *, time_t);
+SQUIDCEXTERN void commResetSelect(int);
SQUIDCEXTERN int comm_udp_sendto(int, const struct sockaddr_in *, int, const void *, int);
extern void comm_write(int fd, const char *buf, int len, IOCB *callback, void *callback_data, FREE *func);
diff --git a/src/comm_epoll.cc b/src/comm_epoll.cc
index 51ac3be614..546f833d93 100644
--- a/src/comm_epoll.cc
+++ b/src/comm_epoll.cc
@@ -1,6 +1,6 @@
/*
- * $Id: comm_epoll.cc,v 1.17 2007/07/19 13:33:18 hno Exp $
+ * $Id: comm_epoll.cc,v 1.17.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 5 Socket Functions
*
@@ -203,6 +203,14 @@ commSetSelect(int fd, unsigned int type, PF * handler,
F->timeout = squid_curtime + timeout;
}
+void
+commResetSelect(int fd)
+{
+ fde *F = &fd_table[fd];
+ F->epoll_state = 0;
+ commSetSelect(fd, 0, NULL, NULL, 0);
+}
+
static void commIncomingStats(StoreEntry * sentry);
diff --git a/src/comm_kqueue.cc b/src/comm_kqueue.cc
index d759e28fb5..8396595cd9 100644
--- a/src/comm_kqueue.cc
+++ b/src/comm_kqueue.cc
@@ -1,6 +1,6 @@
/*
- * $Id: comm_kqueue.cc,v 1.17 2007/07/19 13:33:18 hno Exp $
+ * $Id: comm_kqueue.cc,v 1.17.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 5 Socket Functions
*
@@ -210,6 +210,18 @@ commSetSelect(int fd, unsigned int type, PF * handler,
}
+void
+commResetSelect(int fd)
+{
+ fde *F = &fd_table[fd];
+ if (F->read_handler) {
+ kq_update_events(fd, EVFILT_READ, (PF *)1);
+ }
+ if (F->write_handler) {
+ kq_update_events(fd, EVFILT_WRITE, (PF *)1);
+ }
+}
+
/*
* Check all connections for new connections and input data that is to be
* processed. Also check for connections with data queued and whether we can
diff --git a/src/comm_poll.cc b/src/comm_poll.cc
index b6d9354027..d35a8d7f68 100644
--- a/src/comm_poll.cc
+++ b/src/comm_poll.cc
@@ -1,6 +1,6 @@
/*
- * $Id: comm_poll.cc,v 1.24 2007/09/01 13:09:59 hno Exp $
+ * $Id: comm_poll.cc,v 1.24.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 5 Socket Functions
*
@@ -145,6 +145,11 @@ commSetSelect(int fd, unsigned int type, PF * handler, void *client_data,
F->timeout = squid_curtime + timeout;
}
+void
+commResetSelect(int fd)
+{
+}
+
static int
fdIsIcp(int fd)
{
diff --git a/src/comm_select.cc b/src/comm_select.cc
index 64d90092e1..aa2255190e 100644
--- a/src/comm_select.cc
+++ b/src/comm_select.cc
@@ -1,6 +1,6 @@
/*
- * $Id: comm_select.cc,v 1.81 2007/06/10 12:13:31 hno Exp $
+ * $Id: comm_select.cc,v 1.81.6.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 5 Socket Functions
*
@@ -156,6 +156,10 @@ commSetSelect(int fd, unsigned int type, PF * handler, void *client_data,
F->timeout = squid_curtime + timeout;
}
+void
+commResetSelect(int fd)
+{
+}
static int
fdIsIcp(int fd)
diff --git a/src/comm_select_win32.cc b/src/comm_select_win32.cc
index 8daf6cb1d8..cc0b8b6c5a 100644
--- a/src/comm_select_win32.cc
+++ b/src/comm_select_win32.cc
@@ -1,6 +1,6 @@
/*
- * $Id: comm_select_win32.cc,v 1.4.6.2 2008/02/24 13:01:55 serassio Exp $
+ * $Id: comm_select_win32.cc,v 1.4.6.3 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 5 Socket Functions
*
@@ -156,6 +156,11 @@ commSetSelect(int fd, unsigned int type, PF * handler, void *client_data,
F->timeout = squid_curtime + timeout;
}
+void
+commResetSelect(int fd)
+{
+}
+
static int
fdIsIcp(int fd)
diff --git a/src/debug.cc b/src/debug.cc
index c707ce80bb..4ab6c781cc 100644
--- a/src/debug.cc
+++ b/src/debug.cc
@@ -1,5 +1,5 @@
/*
- * $Id: debug.cc,v 1.106 2007/12/04 15:20:22 rousskov Exp $
+ * $Id: debug.cc,v 1.106.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 0 Debug Routines
* AUTHOR: Harvest Derived
@@ -445,7 +445,7 @@ Debug::parseOptions(char const *options) {
}
for (i = 0; i < MAX_DEBUG_SECTIONS; i++)
- Debug::Levels[i] = -1;
+ Debug::Levels[i] = 0;
if (options) {
p = xstrdup(options);
diff --git a/src/forward.cc b/src/forward.cc
index 69a2bf2765..01df25e937 100644
--- a/src/forward.cc
+++ b/src/forward.cc
@@ -1,6 +1,6 @@
/*
- * $Id: forward.cc,v 1.168 2007/07/21 16:32:03 hno Exp $
+ * $Id: forward.cc,v 1.168.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 17 Request Forwarding
* AUTHOR: Duane Wessels
@@ -442,6 +442,9 @@ FwdState::checkRetry()
if (flags.dont_retry)
return false;
+ if (!checkRetriable())
+ return false;
+
if (request->bodyNibbled())
return false;
@@ -812,8 +815,12 @@ FwdState::connectStart()
server_fd = fd;
n_tries++;
- if (!fs->_peer)
+ if (!fs->_peer) {
origin_tries++;
+ hierarchyNote(&request->hier, fs->code, request->host);
+ } else {
+ hierarchyNote(&request->hier, fs->code, fs->_peer->host);
+ }
comm_add_close_handler(fd, fwdServerClosedWrapper, this);
diff --git a/src/helper.h b/src/helper.h
index 67992019d0..4cc6b51288 100644
--- a/src/helper.h
+++ b/src/helper.h
@@ -1,6 +1,6 @@
/*
- * $Id: helper.h,v 1.9 2007/05/07 18:38:40 wessels Exp $
+ * $Id: helper.h,v 1.9.6.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 84 Helper process maintenance
* AUTHOR: Harvest Derived?
@@ -117,7 +117,7 @@ struct _helper_server
MemBuf *writebuf;
char *rbuf;
size_t rbuf_sz;
- off_t roffset;
+ size_t roffset;
struct timeval dispatch_time;
@@ -164,7 +164,7 @@ struct _helper_stateful_server
/* MemBuf writebuf; */
char *rbuf;
size_t rbuf_sz;
- off_t roffset;
+ size_t roffset;
struct timeval dispatch_time;
diff --git a/src/main.cc b/src/main.cc
index 413d2041ea..d6215bb35f 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -1,6 +1,6 @@
/*
- * $Id: main.cc,v 1.451.4.2 2008/02/17 19:44:01 serassio Exp $
+ * $Id: main.cc,v 1.451.4.3 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 1 Startup and Main Loop
* AUTHOR: Harvest Derived
@@ -632,6 +632,7 @@ mainReconfigure(void)
errorClean();
enter_suid(); /* root to read config file */
parseConfigFile(ConfigFile, manager);
+ Mem::Report();
setEffectiveUser();
_db_init(Config.Log.log, Config.debugOptions);
ipcache_restart(); /* clear stuck entries */
@@ -1078,7 +1079,7 @@ main(int argc, char **argv)
sbrk_start = sbrk(0);
#endif
- Debug::parseOptions("ALL,1");
+ Debug::parseOptions(NULL);
debug_log = stderr;
#if defined(SQUID_MAXFD_LIMIT)
@@ -1153,6 +1154,10 @@ main(int argc, char **argv)
mainParseOptions(argc, argv);
+ if (opt_parse_cfg_only) {
+ Debug::parseOptions("ALL,1");
+ }
+
#if USE_WIN32_SERVICE
if (opt_install_service)
@@ -1200,6 +1205,8 @@ main(int argc, char **argv)
parse_err = parseConfigFile(ConfigFile, manager);
+ Mem::Report();
+
if (opt_parse_cfg_only)
return parse_err;
diff --git a/src/mem.cc b/src/mem.cc
index 8e253ec7da..73536d57b3 100644
--- a/src/mem.cc
+++ b/src/mem.cc
@@ -1,6 +1,6 @@
/*
- * $Id: mem.cc,v 1.106 2007/11/15 16:47:35 wessels Exp $
+ * $Id: mem.cc,v 1.106.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 13 High Level Memory Pool Management
* AUTHOR: Harvest Derived
@@ -382,8 +382,6 @@ Mem::Init(void)
* debug messages here at level 0 or 1 will always be printed
* on stderr.
*/
- debugs(13, 3, "Memory pools are '" << ((Config.onoff.mem_pools ? "on" : "off")) << "'; limit: "<<
- std::setprecision(3) << toMB(MemPools::GetInstance().idleLimit()) << " MB");
/* set all pointers to null */
memset(MemPools, '\0', sizeof(MemPools));
@@ -430,6 +428,15 @@ Mem::Init(void)
}
}
+void
+Mem::Report()
+{
+ debugs(13, 3, "Memory pools are '" <<
+ (Config.onoff.mem_pools ? "on" : "off") << "'; limit: " <<
+ std::setprecision(3) << toMB(MemPools::GetInstance().idleLimit()) <<
+ " MB");
+}
+
void
Mem::RegisterWithCacheManager(CacheManager & manager)
{
diff --git a/src/mem_node.cc b/src/mem_node.cc
index dc44b48978..c60448294a 100644
--- a/src/mem_node.cc
+++ b/src/mem_node.cc
@@ -1,6 +1,6 @@
/*
- * $Id: mem_node.cc,v 1.10 2007/08/13 17:20:51 hno Exp $
+ * $Id: mem_node.cc,v 1.10.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 19 Store Memory Primitives
* AUTHOR: Robert Collins
@@ -38,7 +38,6 @@
static int makeMemNodeDataOffset();
-unsigned long mem_node::store_mem_size;
static int _mem_node_data_offset = makeMemNodeDataOffset();
/*
@@ -70,9 +69,7 @@ mem_node::mem_node(int64_t offset):nodeBuffer(0,offset,data)
{}
mem_node::~mem_node()
-{
- store_mem_size -= nodeBuffer.length;
-}
+{}
size_t
mem_node::InUseCount()
@@ -80,6 +77,12 @@ mem_node::InUseCount()
return Pool().inUseCount();
}
+size_t
+mem_node::StoreMemSize()
+{
+ return InUseCount() * SM_PAGE_SIZE;
+}
+
int64_t
mem_node::start() const
{
diff --git a/src/mem_node.h b/src/mem_node.h
index 15a20c98e9..75765994c7 100644
--- a/src/mem_node.h
+++ b/src/mem_node.h
@@ -1,6 +1,6 @@
/*
- * $Id: mem_node.h,v 1.10 2007/08/13 17:20:51 hno Exp $
+ * $Id: mem_node.h,v 1.10.4.1 2008/02/29 18:30:03 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -42,7 +42,7 @@ class mem_node
public:
static size_t InUseCount();
- static unsigned long store_mem_size; /* 0 */
+ static size_t StoreMemSize();
MEMPROXY_CLASS(mem_node);
mem_node(int64_t);
diff --git a/src/neighbors.cc b/src/neighbors.cc
index b4e919eef8..9c083d5a93 100644
--- a/src/neighbors.cc
+++ b/src/neighbors.cc
@@ -1,6 +1,6 @@
/*
- * $Id: neighbors.cc,v 1.350 2007/11/13 23:25:34 rousskov Exp $
+ * $Id: neighbors.cc,v 1.350.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 15 Neighbor Routines
* AUTHOR: Harvest Derived
@@ -239,9 +239,8 @@ peerWouldBePinged(const peer * p, HttpRequest * request)
if (squid_curtime - p->stats.last_query > Config.Timeout.deadPeer)
return 1;
- if (p->icp.port == echo_port)
- if (!neighborUp(p))
- return 0;
+ if (!neighborUp(p))
+ return 0;
return 1;
}
diff --git a/src/net_db.cc b/src/net_db.cc
index 96ceead08a..de0d9f7ab7 100644
--- a/src/net_db.cc
+++ b/src/net_db.cc
@@ -1,6 +1,6 @@
/*
- * $Id: net_db.cc,v 1.198 2007/11/27 07:48:40 amosjeffries Exp $
+ * $Id: net_db.cc,v 1.198.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 38 Network Measurement Database
* AUTHOR: Duane Wessels
@@ -72,7 +72,7 @@ typedef struct
StoreEntry *e;
store_client *sc;
HttpRequest *r;
- off_t used;
+ int64_t used;
size_t buf_sz;
char buf[NETDB_REQBUF_SZ];
int buf_ofs;
@@ -678,7 +678,7 @@ netdbExchangeHandleReply(void *data, StoreIOBuffer receivedData)
{
netdbExchangeState *ex = (netdbExchangeState *)data;
int rec_sz = 0;
- off_t o;
+ int o;
struct IN_ADDR addr;
double rtt;
diff --git a/src/peer_digest.cc b/src/peer_digest.cc
index 602a0162f1..4be4631f01 100644
--- a/src/peer_digest.cc
+++ b/src/peer_digest.cc
@@ -1,6 +1,6 @@
/*
- * $Id: peer_digest.cc,v 1.127 2007/08/27 12:50:43 hno Exp $
+ * $Id: peer_digest.cc,v 1.127.4.1 2008/02/29 18:30:03 serassio Exp $
*
* DEBUG: section 72 Peer Digest Routines
* AUTHOR: Alex Rousskov
@@ -724,10 +724,10 @@ peerDigestSwapInMask(void *data, char *buf, ssize_t size)
fetch->mask_offset += size;
- if (fetch->mask_offset >= (off_t)pd->cd->mask_size) {
+ if (fetch->mask_offset >= pd->cd->mask_size) {
debugs(72, 2, "peerDigestSwapInMask: Done! Got " <<
fetch->mask_offset << ", expected " << pd->cd->mask_size);
- assert(fetch->mask_offset == (off_t)pd->cd->mask_size);
+ assert(fetch->mask_offset == pd->cd->mask_size);
assert(peerDigestFetchedEnough(fetch, NULL, 0, "peerDigestSwapInMask"));
return -1; /* XXX! */
} else {
diff --git a/src/snmp_agent.cc b/src/snmp_agent.cc
index d57bc55e81..762392fb47 100644
--- a/src/snmp_agent.cc
+++ b/src/snmp_agent.cc
@@ -1,6 +1,6 @@
/*
- * $Id: snmp_agent.cc,v 1.96 2007/04/28 22:26:37 hno Exp $
+ * $Id: snmp_agent.cc,v 1.96.6.1 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 49 SNMP Interface
* AUTHOR: Kostas Anagnostakis
@@ -57,7 +57,7 @@ snmp_sysFn(variable_list * Var, snint * ErrP)
case SYSVMSIZ:
Answer = snmp_var_new_integer(Var->name, Var->name_length,
- mem_node::store_mem_size >> 10,
+ mem_node::StoreMemSize() >> 10,
ASN_INTEGER);
break;
diff --git a/src/snmp_core.cc b/src/snmp_core.cc
index 2e006cacca..9485adf13e 100644
--- a/src/snmp_core.cc
+++ b/src/snmp_core.cc
@@ -1,6 +1,6 @@
/*
- * $Id: snmp_core.cc,v 1.79 2007/07/06 11:30:45 amosjeffries Exp $
+ * $Id: snmp_core.cc,v 1.79.6.1 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 49 SNMP support
* AUTHOR: Glenn Chisholm
@@ -1106,7 +1106,7 @@ snmpDebugOid(int lvl, oid * Name, snint Len)
for (x = 0; x < Len; x++) {
snprintf(mbuf, sizeof(mbuf), ".%u", (unsigned int) Name[x]);
- strncat(objid, mbuf, sizeof(objid));
+ strncat(objid, mbuf, sizeof(objid) - strlen(objid) - 1);
}
debugs(49, lvl, " oid = " << objid);
diff --git a/src/stat.cc b/src/stat.cc
index e8f928f7e4..b63a557ce8 100644
--- a/src/stat.cc
+++ b/src/stat.cc
@@ -1,5 +1,5 @@
/*
- * $Id: stat.cc,v 1.410 2007/09/20 20:22:20 hno Exp $
+ * $Id: stat.cc,v 1.410.4.1 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 18 Cache Manager Statistics
* AUTHOR: Harvest Derived
@@ -541,16 +541,16 @@ info_get(StoreEntry * sentry)
store_swap_size);
storeAppendPrintf(sentry, "\tStorage Swap capacity:\t%4.1f%% used, %4.1f%% free\n",
- dpercent((int) store_swap_size, (int) Store::Root().maxSize()),
- dpercent((int) (Store::Root().maxSize() - store_swap_size), (int) Store::Root().maxSize()));
+ dpercent(store_swap_size, Store::Root().maxSize()),
+ dpercent((Store::Root().maxSize() - store_swap_size), Store::Root().maxSize()));
storeAppendPrintf(sentry, "\tStorage Mem size:\t%d KB\n",
- (int) (mem_node::store_mem_size >> 10));
+ mem_node::StoreMemSize() >> 10);
storeAppendPrintf(sentry, "\tStorage Mem capacity:\t%4.1f%% used, %4.1f%% free\n",
dpercent(mem_node::InUseCount(), store_pages_max),
- dpercent(((double)store_pages_max - mem_node::InUseCount()), store_pages_max));
+ dpercent((store_pages_max - mem_node::InUseCount()), store_pages_max));
storeAppendPrintf(sentry, "\tMean Object Size:\t%0.2f KB\n",
n_disk_objects ? (double) store_swap_size / n_disk_objects : 0.0);
diff --git a/src/stmem.cc b/src/stmem.cc
index e1837d97e1..8b001ee2fd 100644
--- a/src/stmem.cc
+++ b/src/stmem.cc
@@ -1,6 +1,6 @@
/*
- * $Id: stmem.cc,v 1.92 2007/08/13 18:25:14 hno Exp $
+ * $Id: stmem.cc,v 1.92.4.1 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 19 Store Memory Primitives
* AUTHOR: Harvest Derived
@@ -150,8 +150,6 @@ mem_hdr::writeAvailable(mem_node *aNode, int64_t location, size_t amount, char c
/* Adjust the ptr and len according to what was deposited in the page */
aNode->nodeBuffer.length += copyLen;
- mem_node::store_mem_size += copyLen;
-
return copyLen;
}
diff --git a/src/store_client.cc b/src/store_client.cc
index 3ba1c2c011..e62d772038 100644
--- a/src/store_client.cc
+++ b/src/store_client.cc
@@ -1,6 +1,6 @@
/*
- * $Id: store_client.cc,v 1.159 2007/08/27 12:50:43 hno Exp $
+ * $Id: store_client.cc,v 1.159.4.1 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 90 Storage Manager Client-Side Interface
* AUTHOR: Duane Wessels
@@ -698,14 +698,6 @@ storeUnregister(store_client * sc, StoreEntry * e, void *data)
return 1;
}
-#if UNUSED_CODE_20070420
-off_t
-storeLowestMemReaderOffset(const StoreEntry * entry)
-{
- return entry->mem_obj->lowestMemReaderOffset();
-}
-#endif
-
/* Call handlers waiting for data to be appended to E. */
void
StoreEntry::invokeHandlers()
diff --git a/src/store_digest.cc b/src/store_digest.cc
index 21dba733b5..e201718959 100644
--- a/src/store_digest.cc
+++ b/src/store_digest.cc
@@ -1,6 +1,6 @@
/*
- * $Id: store_digest.cc,v 1.76 2007/08/13 17:20:51 hno Exp $
+ * $Id: store_digest.cc,v 1.76.4.1 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 71 Store Digest Manager
* AUTHOR: Alex Rousskov
@@ -466,7 +466,7 @@ storeDigestSwapOutStep(void *data)
assert(e);
/* _add_ check that nothing bad happened while we were waiting @?@ @?@ */
- if ((size_t)(sd_state.rewrite_offset + chunk_size) > store_digest->mask_size)
+ if (sd_state.rewrite_offset + chunk_size > store_digest->mask_size)
chunk_size = store_digest->mask_size - sd_state.rewrite_offset;
e->append(store_digest->mask + sd_state.rewrite_offset, chunk_size);
@@ -478,7 +478,7 @@ storeDigestSwapOutStep(void *data)
sd_state.rewrite_offset += chunk_size;
/* are we done ? */
- if ((size_t)sd_state.rewrite_offset >= store_digest->mask_size)
+ if (sd_state.rewrite_offset >= store_digest->mask_size)
storeDigestRewriteFinish(e);
else
eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, data, 0.0, 1, false);
diff --git a/src/store_swapmeta.cc b/src/store_swapmeta.cc
index 5f8cca2532..3a4a98683e 100644
--- a/src/store_swapmeta.cc
+++ b/src/store_swapmeta.cc
@@ -1,6 +1,6 @@
/*
- * $Id: store_swapmeta.cc,v 1.27 2007/11/15 16:47:35 wessels Exp $
+ * $Id: store_swapmeta.cc,v 1.27.4.1 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 20 Storage Manager Swapfile Metadata
* AUTHOR: Kostas Anagnostakis
@@ -110,7 +110,7 @@ storeSwapMetaPack(tlv * tlv_list, int *length)
{
int buflen = 0;
tlv *t;
- off_t j = 0;
+ int j = 0;
char *buf;
assert(length != NULL);
buflen++; /* STORE_META_OK */
diff --git a/src/structs.h b/src/structs.h
index ce2a077bf3..fc7d3f24a6 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1,6 +1,6 @@
/*
- * $Id: structs.h,v 1.568 2007/12/02 08:23:56 amosjeffries Exp $
+ * $Id: structs.h,v 1.568.4.1 2008/02/29 18:30:04 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -774,26 +774,12 @@ struct _dread_ctrl
void *client_data;
};
-struct _dnsserver_t
-{
- int id;
- int inpipe;
- int outpipe;
- time_t answer;
- off_t offset;
- size_t size;
- char ip_inbuf[DNS_INBUF_SZ];
-
- struct timeval dispatch_time;
- void *data;
-};
-
struct _dwrite_q
{
off_t file_offset;
char *buf;
- int len;
- off_t buf_offset;
+ size_t len;
+ size_t buf_offset;
dwrite_q *next;
FREE *free_func;
};
@@ -1637,7 +1623,7 @@ struct _CacheDigest
{
/* public, read-only */
char *mask; /* bit mask */
- size_t mask_size; /* mask size in bytes */
+ int mask_size; /* mask size in bytes */
int capacity; /* expected maximum for .count, not a hard limit */
int bits_per_entry; /* number of bits allocated for each entry from capacity */
int count; /* number of digested entries */
@@ -1665,7 +1651,7 @@ struct _Logfile
char path[MAXPATHLEN];
char *buf;
size_t bufsz;
- off_t offset;
+ size_t offset;
struct
{
diff --git a/src/tests/testUfs.cc b/src/tests/testUfs.cc
index cd8a98c7f0..4d9dd0f951 100644
--- a/src/tests/testUfs.cc
+++ b/src/tests/testUfs.cc
@@ -225,6 +225,11 @@ testUfs::testUfsDefaultEngine()
if (0 > system ("rm -rf " TESTDIR))
throw std::runtime_error("Failed to clean test work directory");
+ // This assertion may fail if previous test cases fail.
+ // Apparently, CPPUNIT_ASSERT* failure may prevent destructors of local
+ // objects such as "StorePointer aRoot" from being called.
+ CPPUNIT_ASSERT(!store_table); // or StoreHashIndex ctor will abort below
+
StorePointer aRoot (new StoreController);
Store::Root(aRoot);
SwapDirPointer aStore (new UFSSwapDir("ufs", "Blocking"));
diff --git a/src/typedefs.h b/src/typedefs.h
index 2246ba0ba6..c6e9fea0a9 100644
--- a/src/typedefs.h
+++ b/src/typedefs.h
@@ -1,6 +1,6 @@
/*
- * $Id: typedefs.h,v 1.190 2007/05/09 07:45:58 wessels Exp $
+ * $Id: typedefs.h,v 1.190.6.1 2008/02/29 18:30:04 serassio Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -98,8 +98,6 @@ typedef struct _close_handler close_handler;
typedef struct _dread_ctrl dread_ctrl;
-typedef struct _dnsserver_t dnsserver_t;
-
typedef struct _dwrite_q dwrite_q;
typedef struct _ETag ETag;
diff --git a/src/wccp2.cc b/src/wccp2.cc
index 82033fbae2..cf41d11699 100644
--- a/src/wccp2.cc
+++ b/src/wccp2.cc
@@ -1,6 +1,6 @@
/*
- * $Id: wccp2.cc,v 1.19.4.1 2008/02/24 12:41:29 serassio Exp $
+ * $Id: wccp2.cc,v 1.19.4.2 2008/02/29 18:30:04 serassio Exp $
*
* DEBUG: section 80 WCCP Support
* AUTHOR: Steven Wilton
@@ -443,6 +443,7 @@ int empty_portlist[WCCP2_NUMPORTS] =
/* END WCCP V2 */
void wccp2_add_service_list(int service, int service_id, int service_priority,
int service_proto, int service_flags, int ports[], int security_type, char *password);
+static void wccp2SortCacheList(struct wccp2_cache_list_t *head);
/*
* The functions used during startup:
@@ -1476,6 +1477,8 @@ wccp2HandleUdp(int sock, void *not_used)
num_caches = 1;
}
+ wccp2SortCacheList(&router_list_ptr->cache_list_head);
+
router_list_ptr->num_caches = htonl(num_caches);
if ((found == 1) && (service_list_ptr->lowest_ip == 1)) {
@@ -2375,6 +2378,41 @@ dump_wccp2_service_info(StoreEntry * e, const char *label, void *v)
}
}
+/* Sort the cache list by doing a "selection sort" by IP address */
+static void
+wccp2SortCacheList(struct wccp2_cache_list_t *head)
+{
+ struct wccp2_cache_list_t tmp;
+ struct wccp2_cache_list_t *this_item;
+ struct wccp2_cache_list_t *find_item;
+ struct wccp2_cache_list_t *next_lowest;
+
+ /* Go through each position in the list one at a time */
+ for (this_item = head; this_item->next; this_item = this_item->next) {
+ /* Find the item with the lowest IP */
+ next_lowest = this_item;
+
+ for (find_item = this_item; find_item->next; find_item = find_item->next) {
+ if (find_item->cache_ip.s_addr < next_lowest->cache_ip.s_addr) {
+ next_lowest = find_item;
+ }
+ }
+ /* Swap if we need to */
+ if (next_lowest != this_item) {
+ /* First make a copy of the current item */
+ memcpy(&tmp, this_item, sizeof(struct wccp2_cache_list_t));
+
+ /* Next update the pointers to maintain the linked list */
+ tmp.next = next_lowest->next;
+ next_lowest->next = this_item->next;
+
+ /* Finally copy the updated items to their correct location */
+ memcpy(this_item, next_lowest, sizeof(struct wccp2_cache_list_t));
+ memcpy(next_lowest, &tmp, sizeof(struct wccp2_cache_list_t));
+ }
+ }
+}
+
void
free_wccp2_service_info(void *v)
{}
--
2.47.2