diff -Nru apt-cacher-ng-0.6.10/ChangeLog apt-cacher-ng-0.6.11/ChangeLog --- apt-cacher-ng-0.6.10/ChangeLog 2011-11-26 12:09:54.000000000 +0000 +++ apt-cacher-ng-0.6.11/ChangeLog 2011-12-26 15:38:30.000000000 +0000 @@ -1,3 +1,13 @@ +apt-cacher-ng (0.6.11) BETA; urgency=low + + * FIX: when original source used chunked transfer encoding, the local + delivery also prefered chunked mode even where Content-Length was known + * FIX: [acngfs] copy complete statvfs buffer in statfs call + * minor optimizations + * added .db to vfile patterns (for pacman) + + -- Eduard Bloch Mon, 26 Dec 2011 16:38:19 +0100 + apt-cacher-ng (0.6.10) BETA; urgency=low * NEW: option to permit use of custom ports specified in user requests diff -Nru apt-cacher-ng-0.6.10/conf/acng.conf apt-cacher-ng-0.6.11/conf/acng.conf --- apt-cacher-ng-0.6.10/conf/acng.conf 2011-11-19 21:20:19.000000000 +0000 +++ apt-cacher-ng-0.6.11/conf/acng.conf 2011-12-26 15:30:31.000000000 +0000 @@ -121,7 +121,7 @@ # Pigeonholing files with regular expressions (static/volatile). Can be # overriden here but not should not be done permanently because future update # of default settings would not be applied later. -# VfilePattern = (^|.*?/)(Index|Packages(\.gz|\.bz2|\.lzma|\.xz)?|InRelease|Release|Release\.gpg|Sources(\.gz|\.bz2|\.lzma|\.xz)?|release|index\.db-.*\.gz|Contents-[^/]*(\.gz|\.bz2|\.lzma|\.xz)?|pkglist[^/]*\.bz2|rclist[^/]*\.bz2|/meta-release[^/]*|Translation[^/]*(\.gz|\.bz2|\.lzma|\.xz)?|MD5SUMS|SHA1SUMS|((setup|setup-legacy)(\.ini|\.bz2|\.hint)(\.sig)?)|mirrors\.lst|repo(index|md)\.xml(\.asc|\.key)?|directory\.yast|products|content(\.asc|\.key)?|media|filelists\.xml\.gz|filelists\.sqlite\.bz2|repomd\.xml|packages\.[a-zA-Z][a-zA-Z]\.gz|info\.txt|license\.tar\.gz|license\.zip|.*\.db\.tar\.gz|.*\.files\.tar\.gz|.*\.abs\.tar\.gz|metalink\?repo|.*prestodelta\.xml\.gz)$|/dists/.*/installer-[^/]+/[^0-9][^/]+/images/.* +# VfilePattern = (^|.*?/)(Index|Packages(\.gz|\.bz2|\.lzma|\.xz)?|InRelease|Release|Release\.gpg|Sources(\.gz|\.bz2|\.lzma|\.xz)?|release|index\.db-.*\.gz|Contents-[^/]*(\.gz|\.bz2|\.lzma|\.xz)?|pkglist[^/]*\.bz2|rclist[^/]*\.bz2|/meta-release[^/]*|Translation[^/]*(\.gz|\.bz2|\.lzma|\.xz)?|MD5SUMS|SHA1SUMS|((setup|setup-legacy)(\.ini|\.bz2|\.hint)(\.sig)?)|mirrors\.lst|repo(index|md)\.xml(\.asc|\.key)?|directory\.yast|products|content(\.asc|\.key)?|media|filelists\.xml\.gz|filelists\.sqlite\.bz2|repomd\.xml|packages\.[a-zA-Z][a-zA-Z]\.gz|info\.txt|license\.tar\.gz|license\.zip|.*\.db(\.tar\.gz)?|.*\.files\.tar\.gz|.*\.abs\.tar\.gz|metalink\?repo|.*prestodelta\.xml\.gz)$|/dists/.*/installer-[^/]+/[^0-9][^/]+/images/.* # PfilePattern = .*(\.d?deb|\.rpm|\.dsc|\.tar(\.gz|\.bz2|\.lzma|\.xz)(\.gpg)?|\.diff(\.gz|\.bz2|\.lzma|\.xz)|\.jigdo|\.template|changelog|copyright|\.udeb|\.debdelta|\.diff/.*\.gz|(Devel)?ReleaseAnnouncement(\?.*)?|[a-f0-9]+-(susedata|updateinfo|primary|deltainfo).xml.gz|fonts/(final/)?[a-z]+32.exe(\?download.*)?|/dists/.*/installer-[^/]+/[0-9][^/]+/images/.*)$ # Whitelist for expiration, file types not to be removed even when being # unreferenced. Default: many parts from VfilePattern where no parent index diff -Nru apt-cacher-ng-0.6.10/debian/apt-cacher-ng.init apt-cacher-ng-0.6.11/debian/apt-cacher-ng.init --- apt-cacher-ng-0.6.10/debian/apt-cacher-ng.init 2011-02-10 08:32:45.000000000 +0000 +++ apt-cacher-ng-0.6.11/debian/apt-cacher-ng.init 2011-12-26 15:39:53.000000000 +0000 @@ -3,6 +3,7 @@ # Provides: apt-cacher-ng # Required-Start: $local_fs $network $remote_fs # Required-Stop: $local_fs $network $remote_fs +# Should-Start: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Apt-Cacher NG package proxy diff -Nru apt-cacher-ng-0.6.10/debian/apt-cacher-ng.logrotate apt-cacher-ng-0.6.11/debian/apt-cacher-ng.logrotate --- apt-cacher-ng-0.6.10/debian/apt-cacher-ng.logrotate 2010-12-13 15:10:02.000000000 +0000 +++ apt-cacher-ng-0.6.11/debian/apt-cacher-ng.logrotate 2011-12-22 19:57:23.000000000 +0000 @@ -1,4 +1,5 @@ /var/log/apt-cacher-ng/apt-cache*.log { + su apt-cacher-ng apt-cacher-ng size 10M missingok rotate 12 @@ -14,6 +15,7 @@ } /var/log/apt-cacher-ng/apt-cache*.err { + su apt-cacher-ng apt-cacher-ng size 10M missingok rotate 700 diff -Nru apt-cacher-ng-0.6.10/debian/changelog apt-cacher-ng-0.6.11/debian/changelog --- apt-cacher-ng-0.6.10/debian/changelog 2011-11-30 00:23:06.000000000 +0000 +++ apt-cacher-ng-0.6.11/debian/changelog 2011-12-26 15:38:12.000000000 +0000 @@ -1,3 +1,14 @@ +apt-cacher-ng (0.6.11-1) unstable; urgency=low + + * Start init script at S18, not before bind (closes: 650726). Also adds the + reference to LSB init info block. + * specified effective user/group in logrotate config + * Adds sample config snippet for apt.conf.d to examples + * added Dutch translation of debconf templates (closes: 652020) + * documented AllowUserPorts (available since 0.6.10, closes: 648802) + + -- Eduard Bloch Mon, 26 Dec 2011 16:38:05 +0100 + apt-cacher-ng (0.6.10-2) unstable; urgency=low * Release to Unstable diff -Nru apt-cacher-ng-0.6.10/debian/po/nl.po apt-cacher-ng-0.6.11/debian/po/nl.po --- apt-cacher-ng-0.6.10/debian/po/nl.po 1970-01-01 00:00:00.000000000 +0000 +++ apt-cacher-ng-0.6.11/debian/po/nl.po 2011-12-18 20:24:25.000000000 +0000 @@ -0,0 +1,77 @@ +# Dutch translation of apt-cacher-ng debconf templates. +# Copyright (C) 2011 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the apt-cacher-ng package. +# Jeroen Schot , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: apt-cacher-ng 0.6.10-2\n" +"Report-Msgid-Bugs-To: apt-cacher-ng@packages.debian.org\n" +"POT-Creation-Date: 2009-11-02 20:43+0000\n" +"PO-Revision-Date: 2011-12-14 09:30+0100\n" +"Last-Translator: Jeroen Schot \n" +"Language-Team: Debian l10n Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: select +#. Choices +#: ../apt-cacher-ng.templates:2001 +msgid "Set up once" +msgstr "Eenmalig instellen" + +#. Type: select +#. Choices +#: ../apt-cacher-ng.templates:2001 +msgid "Set up now and update later" +msgstr "Nu en bij elke update instellen" + +#. Type: select +#. Choices +#: ../apt-cacher-ng.templates:2001 +msgid "No automated setup" +msgstr "Geen automatische instelling" + +#. Type: select +#. Description +#: ../apt-cacher-ng.templates:2002 +msgid "Automatic remapping of client requests:" +msgstr "Automatisch omschrijven van client-verzoeken:" + +#. Type: select +#. Description +#: ../apt-cacher-ng.templates:2002 +msgid "" +"Apt-Cacher NG can download packages from repositories other than those " +"requested by the clients. This allows it to cache content effectively, and " +"makes it easy for an administrator to switch to another mirror later." +msgstr "" +"Apt-Cacher NG kan pakketten ophalen van andere pakketbronnen dan waar de " +"clienten om vragen. Hierdoor kan inhoud beter worden gecached en maakt het " +"voor de beheerder makkelijk om later naar een andere spiegelserver over te " +"schakelen." + +#. Type: select +#. Description +#: ../apt-cacher-ng.templates:2002 +msgid "" +"This remapping of URLs can be configured now in an automated way based on " +"the current state of /etc/apt/sources.list. Optionally, this process can be " +"repeated on every package update (modifying the configuration files each " +"time)." +msgstr "" +"Dit omschrijven van URL's kan nu automatisch worden gedaan gebaseerd op de " +"huidige inhoud van /etc/apt/sources.list. Dit kan ook bij elke pakketupdate " +"worden herhaald (de configuratiebestanden worden dan elke keer aangepast)." + +#. Type: select +#. Description +#: ../apt-cacher-ng.templates:2002 +msgid "" +"Selecting \"No automated setup\" will leave the existing configuration " +"unchanged. It will need to be updated manually." +msgstr "" +"Indien u \"Geen automatische instelling\" kiest zal de bestaande configuratie " +"met rust worden gelaten. U dient deze dan handmatig bij te werken." diff -Nru apt-cacher-ng-0.6.10/debian/README.Debian apt-cacher-ng-0.6.11/debian/README.Debian --- apt-cacher-ng-0.6.10/debian/README.Debian 2011-08-01 19:10:15.000000000 +0000 +++ apt-cacher-ng-0.6.11/debian/README.Debian 2011-12-18 20:47:56.000000000 +0000 @@ -1,12 +1,10 @@ apt-cacher-ng for Debian ------------------------ -See apt-cacher-ng.pdf for configuration instructions (or HTML version or README). -The configuration directory on Debian systems is located in -/etc/apt-cacher-ng/. Some files which are unlikely to be changed are stored -outside of /etc and only symlinks to them are placed among other config files. -To customize them, remove the symlink and replace it with the file which the -symlink pointed to. +See apt-cacher-ng.pdf for configuration instructions (or HTML version or +README). The main configuration directory on Debian systems is located in +/etc/apt-cacher-ng/. A sample configuration file for the clients is provided +in /usr/share/doc/apt-cacher-ng/examples/000apt-cacher-ng-proxy . The logs are stored in /var/log/apt-cacher-ng/ and are rotated/expired by logrotate except of temporary maintenance logs which are removed ASAP. @@ -31,7 +29,9 @@ /etc/apt-cacher-ng/security.conf is installed which contains security related options (but it can be in any other *.conf file as well). Currently it sets the "AdminAuth: user:pass" option to protect some action triggers in the web user -interface against unauthorized use. +interface against unauthorized use. The permissions of security.conf file +itself are chosen in a way to allowing apt-cacher-ng daemon to use it but not +letting every local user read it. INETD USAGE ----------- @@ -44,6 +44,9 @@ to /etc/inetd.conf and reload of the inetd daemon. The parameters above need to be adapted as needed, also see the package documentation for more details. +NOTE: this inetd bridge is not needed in order to use ACLs via /etc/host.* +files, recent versions of apt-cacher-ng support these access filters natively. + MISCELANEOUS NOTES ------------------ @@ -57,4 +60,4 @@ includes a script (/usr/lib/apt-cacher-ng/urlencode-fixer.pl) which checks and corrects the files already existing in the cache directory. - -- Eduard Bloch Mon, 01 Aug 2011 21:10:09 +0200 + -- Eduard Bloch Thu, 08 Dec 2011 21:07:22 +0100 diff -Nru apt-cacher-ng-0.6.10/debian/rules apt-cacher-ng-0.6.11/debian/rules --- apt-cacher-ng-0.6.10/debian/rules 2011-10-22 22:48:15.000000000 +0000 +++ apt-cacher-ng-0.6.11/debian/rules 2011-12-26 11:26:52.000000000 +0000 @@ -10,7 +10,7 @@ ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else -CFLAGS += -O2 +CFLAGS += -O3 endif PARJOBS=-j2 @@ -79,10 +79,10 @@ dh_testroot dh_installchangelogs ChangeLog dh_installdocs - dh_installexamples conf/*.conf conf/debrep.hooks + dh_installexamples conf/*.conf conf/debrep.hooks doc/000apt-cacher-ng-proxy dh_installdebconf dh_installlogrotate - dh_installinit + dh_installinit -- defaults 18 dh_installcron dh_installman doc/man/*.8 dh_link diff -Nru apt-cacher-ng-0.6.10/doc/000apt-cacher-ng-proxy apt-cacher-ng-0.6.11/doc/000apt-cacher-ng-proxy --- apt-cacher-ng-0.6.10/doc/000apt-cacher-ng-proxy 1970-01-01 00:00:00.000000000 +0000 +++ apt-cacher-ng-0.6.11/doc/000apt-cacher-ng-proxy 2011-12-08 19:30:31.000000000 +0000 @@ -0,0 +1,5 @@ +# This configuration snipped is intended to be stored in /etc/apt/apt.conf.d/ +# on the client system in order to change a regular setup to use apt-cacher-ng. + +Acquire::http::Proxy "http://192.168.0.245:3142/"; + diff -Nru apt-cacher-ng-0.6.10/doc/apt-cacher-ng.pdf apt-cacher-ng-0.6.11/doc/apt-cacher-ng.pdf --- apt-cacher-ng-0.6.10/doc/apt-cacher-ng.pdf 2011-11-26 12:10:31.000000000 +0000 +++ apt-cacher-ng-0.6.11/doc/apt-cacher-ng.pdf 2011-12-26 15:30:31.000000000 +0000 @@ -19,17 +19,16 @@ 3 0 obj << /Type /Outlines -/First 84 0 R -/Last 84 0 R +/First 86 0 R +/Last 86 0 R /Count 13 >> endobj 4 0 obj << /Type /Pages -/Count 31 +/Count 32 /Kids [ -45 0 R 46 0 R 47 0 R 48 0 R @@ -37,6 +36,7 @@ 50 0 R 51 0 R 52 0 R +53 0 R ] /Resources 5 0 R /MediaBox 13 0 R @@ -247,88 +247,88 @@ 14 0 obj << /Type /Page -/Parent 45 0 R -/Contents 53 0 R +/Parent 46 0 R +/Contents 54 0 R >> endobj 15 0 obj << /Type /Page -/Parent 45 0 R -/Contents 54 0 R +/Parent 46 0 R +/Contents 55 0 R /Annots [ <> +/Dest[18 0 R/XYZ null null null]>> <> +/Dest[19 0 R/XYZ null null null]>> <> +/Dest[20 0 R/XYZ null null null]>> <> +/Dest[20 0 R/XYZ null null null]>> <> +/Dest[20 0 R/XYZ null null null]>> <> +/Dest[21 0 R/XYZ null null null]>> <> +/Dest[21 0 R/XYZ null null null]>> <> +/Dest[21 0 R/XYZ null null null]>> <> +/Dest[22 0 R/XYZ null null null]>> <> +/Dest[23 0 R/XYZ null null null]>> <> +/Dest[24 0 R/XYZ null null null]>> <> +/Dest[26 0 R/XYZ null null null]>> <> +/Dest[26 0 R/XYZ null null null]>> <> +/Dest[26 0 R/XYZ null null null]>> <> +/Dest[27 0 R/XYZ null null null]>> <> +/Dest[27 0 R/XYZ null null null]>> <> <> +/Dest[28 0 R/XYZ null null null]>> <> +/Dest[28 0 R/XYZ null null null]>> <> +/Dest[28 0 R/XYZ null null null]>> <> +/Dest[28 0 R/XYZ null null null]>> <> +/Dest[28 0 R/XYZ null null null]>> <> <> +/Dest[29 0 R/XYZ null null null]>> <> @@ -338,95 +338,95 @@ 16 0 obj << /Type /Page -/Parent 45 0 R -/Contents 55 0 R +/Parent 46 0 R +/Contents 56 0 R /Annots [ <> -<> +/Dest[30 0 R/XYZ null null null]>> <> <> +/Rect[72 712.506 523 724.506]/Border[0 0 0] +/Dest[30 0 R/XYZ null null null]>> <> <> +/Rect[72 667.011 523 679.011]/Border[0 0 0] +/Dest[32 0 R/XYZ null null null]>> <> +/Rect[72 644.264 523 656.264]/Border[0 0 0] +/Dest[32 0 R/XYZ null null null]>> <> <> -<> -<> +/Rect[72 598.769 523 610.769]/Border[0 0 0] +/Dest[34 0 R/XYZ null null null]>> <> <> <> <> <> <> <> <> <> +/Rect[72 394.043 523 406.043]/Border[0 0 0] +/Dest[37 0 R/XYZ null null null]>> +<> <> +/Rect[72 348.549 523 360.549]/Border[0 0 0] +/Dest[38 0 R/XYZ null null null]>> <> +/Rect[72 325.801 523 337.801]/Border[0 0 0] +/Dest[38 0 R/XYZ null null null]>> <> <> <> <> +<> <> <> +/Rect[72 166.57 523 178.57]/Border[0 0 0] +/Dest[42 0 R/XYZ null null null]>> <> +<> ] >> @@ -435,278 +435,290 @@ << /Type /Page /Parent 46 0 R -/Contents 56 0 R +/Contents 57 0 R /Annots [ <>>> +/Rect[72 758 523 770]/Border[0 0 0] +/Dest[45 0 R/XYZ null null null]>> ] >> endobj 18 0 obj << /Type /Page -/Parent 46 0 R -/Contents 57 0 R +/Parent 47 0 R +/Contents 58 0 R /Annots [ <> +/Rect[281.964 242 401.448 254]/Border[0 0 0] +/A<>>> ] >> endobj 19 0 obj << /Type /Page -/Parent 46 0 R -/Contents 58 0 R ->> -endobj -20 0 obj -<< -/Type /Page -/Parent 46 0 R +/Parent 47 0 R /Contents 59 0 R /Annots [ <> ] >> endobj -21 0 obj +20 0 obj << /Type /Page /Parent 47 0 R /Contents 60 0 R -/Annots [ -<> -] >> endobj -22 0 obj +21 0 obj << /Type /Page /Parent 47 0 R /Contents 61 0 R /Annots [ <> +/Rect[434.844 545.849 486.84 557.849]/Border[0 0 0] +/Dest[22 0 R/XYZ null null null]>> ] >> endobj -23 0 obj +22 0 obj << /Type /Page -/Parent 47 0 R +/Parent 48 0 R /Contents 62 0 R /Annots [ <> +/Rect[118.32 576.306 179.316 588.306]/Border[0 0 0] +/Dest[24 0 R/XYZ null null null]>> ] >> endobj -24 0 obj +23 0 obj << /Type /Page -/Parent 47 0 R +/Parent 48 0 R /Contents 63 0 R +/Annots [ +<> +] >> endobj -25 0 obj +24 0 obj << /Type /Page /Parent 48 0 R /Contents 64 0 R /Annots [ <> -<> -<> +/Rect[114.324 130.213 172.32 142.213]/Border[0 0 0] +/Dest[38 0 R/XYZ null null null]>> ] >> endobj -26 0 obj +25 0 obj << /Type /Page /Parent 48 0 R /Contents 65 0 R >> endobj -27 0 obj +26 0 obj << /Type /Page -/Parent 48 0 R +/Parent 49 0 R /Contents 66 0 R +/Annots [ +<> +<> +<> +] >> endobj -28 0 obj +27 0 obj << /Type /Page -/Parent 48 0 R +/Parent 49 0 R /Contents 67 0 R >> endobj -29 0 obj +28 0 obj << /Type /Page /Parent 49 0 R /Contents 68 0 R >> endobj -30 0 obj +29 0 obj << /Type /Page /Parent 49 0 R /Contents 69 0 R >> endobj -31 0 obj +30 0 obj << /Type /Page -/Parent 49 0 R +/Parent 50 0 R /Contents 70 0 R >> endobj -32 0 obj +31 0 obj << /Type /Page -/Parent 49 0 R +/Parent 50 0 R /Contents 71 0 R -/Annots [ -<> -] >> endobj -33 0 obj +32 0 obj << /Type /Page /Parent 50 0 R /Contents 72 0 R -/Annots [ -<> -] >> endobj -34 0 obj +33 0 obj << /Type /Page /Parent 50 0 R /Contents 73 0 R /Annots [ <> +/Rect[310.764 623 362.76 635]/Border[0 0 0] +/Dest[35 0 R/XYZ null null null]>> ] >> endobj -35 0 obj +34 0 obj << /Type /Page -/Parent 50 0 R +/Parent 51 0 R /Contents 74 0 R +/Annots [ +<> +] >> endobj -36 0 obj +35 0 obj << /Type /Page -/Parent 50 0 R +/Parent 51 0 R /Contents 75 0 R /Annots [ <> -<> +/Rect[471.376 586.484 523 598.484]/Border[0 0 0] +/Dest[32 0 R/XYZ null null null]>> ] >> endobj -37 0 obj +36 0 obj << /Type /Page /Parent 51 0 R /Contents 76 0 R >> endobj -38 0 obj +37 0 obj << /Type /Page /Parent 51 0 R /Contents 77 0 R /Annots [ <> +/Rect[222.156 611.813 274.152 623.813]/Border[0 0 0] +/Dest[37 0 R/XYZ null null null]>> +<> ] >> endobj -39 0 obj +38 0 obj << /Type /Page -/Parent 51 0 R +/Parent 52 0 R /Contents 78 0 R +>> +endobj +39 0 obj +<< +/Type /Page +/Parent 52 0 R +/Contents 79 0 R /Annots [ <> +/Rect[195.917 557 256.606 569]/Border[0 0 0] +/Dest[31 0 R/XYZ null null null]>> ] >> endobj 40 0 obj << /Type /Page -/Parent 51 0 R -/Contents 79 0 R +/Parent 52 0 R +/Contents 80 0 R +/Annots [ +<> +] >> endobj 41 0 obj << /Type /Page /Parent 52 0 R -/Contents 80 0 R +/Contents 81 0 R +>> +endobj +42 0 obj +<< +/Type /Page +/Parent 53 0 R +/Contents 82 0 R /Annots [ <> +/Dest[40 0 R/XYZ null null null]>> <> +/Dest[30 0 R/XYZ null null null]>> ] >> endobj -42 0 obj +43 0 obj << /Type /Page -/Parent 52 0 R -/Contents 81 0 R +/Parent 53 0 R +/Contents 83 0 R >> endobj -43 0 obj +44 0 obj << /Type /Page -/Parent 52 0 R -/Contents 82 0 R +/Parent 53 0 R +/Contents 84 0 R >> endobj -44 0 obj +45 0 obj << /Type /Page -/Parent 52 0 R -/Contents 83 0 R +/Parent 53 0 R +/Contents 85 0 R /Annots [ <> endobj -45 0 obj +46 0 obj << /Type /Pages /Parent 4 0 R -/Count 3 +/Count 4 /Kids [ 14 0 R 15 0 R 16 0 R +17 0 R ] >> endobj -46 0 obj +47 0 obj << /Type /Pages /Parent 4 0 R /Count 4 /Kids [ -17 0 R 18 0 R 19 0 R 20 0 R +21 0 R ] >> endobj -47 0 obj +48 0 obj << /Type /Pages /Parent 4 0 R /Count 4 /Kids [ -21 0 R 22 0 R 23 0 R 24 0 R +25 0 R ] >> endobj -48 0 obj +49 0 obj << /Type /Pages /Parent 4 0 R /Count 4 /Kids [ -25 0 R 26 0 R 27 0 R 28 0 R +29 0 R ] >> endobj -49 0 obj +50 0 obj << /Type /Pages /Parent 4 0 R /Count 4 /Kids [ -29 0 R 30 0 R 31 0 R 32 0 R +33 0 R ] >> endobj -50 0 obj +51 0 obj << /Type /Pages /Parent 4 0 R /Count 4 /Kids [ -33 0 R 34 0 R 35 0 R 36 0 R +37 0 R ] >> endobj -51 0 obj +52 0 obj << /Type /Pages /Parent 4 0 R /Count 4 /Kids [ -37 0 R 38 0 R 39 0 R 40 0 R +41 0 R ] >> endobj -52 0 obj +53 0 obj << /Type /Pages /Parent 4 0 R /Count 4 /Kids [ -41 0 R 42 0 R 43 0 R 44 0 R +45 0 R ] >> endobj -53 0 obj +54 0 obj << /Filter/FlateDecode /Length 434 @@ -835,30 +848,41 @@ xeRMs Wp+dt2tN%dQKd;WAo{ )q26ObsWqvHT>BY.!,Mqa)ķzH 4 %>+0${@\?l,& qI-aeW|V5"ZݐIՊZ^[W0T?}M6=ioS-S\j9}&f[UhWΎv.l0{!c2Y{}hT/ZFIR,YD5M4 ]LQ> stream -xݘMs<ZIՙtivw!cQc F@^!b d;?>G*"( GCEZÌ! aF49** w b h;u>"׹RΦUZLbx #~4J 8CM,RJ}?qs^ݧ2g}NI<4o4g$)g7qI=8GB߻9~v/sGbLj󅄅Lj;jt`=}:w sJԾq2j5wR>1T-^÷OzH `]ՌBr,eƎ%7" -YfZ'7k{y^,a⽙:@<>HmxgښtTEcH-ӻp|:LmTVZגWJdLk$6SLe6SG"@(6P57doԲc( a76Y7{3)$X;N\-dyng /EJ@1v9a)s%,IWAwa2)t! Xz&Mhʎ p'w.DrSe wk.fti{|ɋP[$DN;BnNعz0"DfvU:L8v\ZgMvAYBn%kh|%.[NQykոr)Q0|<7 -1>a#apU$|@ ܜ,co8">p~9 R$ +xݘOs:Z<$!t8y3d 8Bb)x+>uO0Hq<9O[2D\/F.|0ҥAДwȚ*'C.!4BqYӛ'ȶ.eN+K{}L,ǞPpDŸF&qp51ԳZJ!WV7PE\ Wy>=KJ'ëZ%挄# .ck;眫{39E< yq'C{O{0+)̋߫ þ[QؘDV& H:Q[hu =TMK/Rf{ryƋUkzl=}=27wIQ4- ?ho&vD34f1+5z#L /H֭Ho%Y|,yeJ7F&M4e&M> stream -x՘Is6ȃ\KDZYnd4$I9ΧBjK@ogh`<?<E8Lb:usA;I4gl+wÎa 7O#3 e03ΗKpQ(laRY7q(@A|U6Wn25Yz: "뙔n. 5 _IGF33P)Դ@/ 8 h5KҶCLEQ@`' /&贯=f\Qd?`Y>BUQKBEi\+eݘJF"'ƻա*H>nY.Aͣ[׬!MG*Q|kH.g?C7] U7w1n͉'/*`1I& zO\J{xL0:ɺc )Z0NЎSPZKf:pG:)@QT,12c9WQ_fT%9 =@IۜZ^=逓. Fem -*:RGd/ o?~eg<QԬB䛅y]PMk}#pFy=%v8BGF{]VnL!ƉX{UN|#X14 -)۪)N,'E}$è{jicM FF+z G -ɮu b/'ثWY&wh.P75sTLOj?dܙUr:O?7:41M[B D}U^O^ag2srR1q& /&7W^Q^6eƼ +Q +?.J'p0(u&9s ! +F˶ۓNZjTqI.J(0ÚmĂ6,8GADzD1Q{8vx97 ՍY/L֠_mΈٖݫh˸*܂19XӌvGW꩖ ys^7O=Ц5JAc2>8{FJs!^[yhiK#܋ck1;W-7J(JHTHytFHoz?.9S1~_$0w?_\֒6rː rdڳ^ 6۸YF;R] qτ,sp'F[i*"$Wyh&uPi_O V=]!-є[\[ZI,LBk(J붟0igj}EŖT6$ii I Bߢ x-zR+9m*3cCN癬03X@ia1 6Ϫ࠳U}2,ʂE5+8vU,!lm xc>+)B+"W$U<*.oYn-[Ϭ![*Q|Zhp0h߻oZ^'=oDk}n\-͝B> p1ܨWeû^KiFS=SoLƦ1D1cr*V䂙Nr>7lAzR ^o#7RWFmSٰzg +(}SI8jO\F+" QhNdBʶZ+y7&"!;J?onZa8 ^Y}8!B]. +{<% -$2~ + ͯu ) uIMs^YsU/f3_W"#@ dbgBh$?g?NR{ȡ endstream endobj -56 0 obj +57 0 obj +<< +/Filter/FlateDecode +/Length 116 +>> +stream +xՐ1}]ݽ^GBH dĈqsY2D #ZF3M_Z204_m6 +%?Y2#S)j*۱_g8R 8 +endstream +endobj +58 0 obj << /Filter/FlateDecode /Length 1717 @@ -871,10 +895,11 @@ |R=)^bO QYga[IaGYo{,^\ك\Je{g(^o%-ʋس06ֱWz<~tz٨\2#evTosU0}a`+7&&'ƏÞSsЉJGg<C.7 A e 5^ҥqMvЁh?KhQu).Xэ{j o Rߋכ:ei "bQ_5ړHm Mm Unܱ#WFhΓ' Bt7>~q (/&_Z߯F\4ӝ] Ya .GAqS4 #b+ ^F[Ϻa+Z7DNS#t˭osP̓"p?O4,Fa(^ ב4Ew'? 4MEsa2Q0r5Բ;x mj.t_<)$0U0l(W#p3?8Ђv? "0؛!Iݔ$W!OӎԝoD8G;΃pT̡`zYʐ,ڞ&v/*A/w sRe&G4t}/N!PstqTGV;1UB́De\ߞ;15?lXKbKǦ :JDU.*F*zl[8a)K1SJTg*,-xϐHO@x!?y+т*_Z?X/F # IϮzFTNɶ $fMx"0@'t2FdVIԌQŌFi0l.Okf/q 00X(q8f<c났rjXÃQ +ą+a_KZ5?4,41; OڈOTU?fIk.xJdVIԌQŌFi0l.Okf/q 00X(q8f<c났rj[ʃR endstream endobj -58 0 obj +60 0 obj << /Filter/FlateDecode /Length 1672 @@ -896,10 +921,10 @@ %iuf^5*IpdJ/:\ej4 $VؠI{5EL Mߤ3tK!u$)3kg}Ov#⑪iT-٠Өe&LjL@pe-I:IIoN6LYڨYK̶ܹ:/4[*?ii}I];-ܖ)Y,я-#%YuZTm__|4H(RH+ol"fN Ԕyq\G#\{='BHuK6<(xHXE-OCC 2` fbwsk*5?=nLF^|6j=X4T֍/ՖVh[iJzaFPIO5K}{زg&Zz'[k=$,RusR' tp%řZ=@ AMK3VE@U|כ[G)z(Un*[VG˙.ŎR ^:!? ~H1|o!&,hUUc!;9^o7zV\;])qhaRY0v?s]'KXe[y(!prt{&C\s "1fbv 6!Gq Gȃ҉}6t܍mwjka -s@C)}6]F?)=w<|yS-=ig`CíYs+}`.rOEw9p/ެoѸP7|su+t,Xc0hڇyĘgCKu0YzJW]XO3 0?H5猪e=nrA?!kw[!];u"bcԳcf_-BKz ئZ#`Lr{$/]WOALnsbuƱ9ы:%a"@0=aI))wl w:~"߅xJFO$jйlwMrwGG9ewg]_c Әof؛?uE'OwI:+W6NZay~1{`x4\:D2QR;??:|:\Ϳ`}уYRX/jLV:.wbx?w4-7[n\Ry hcZC=;[02`uR?8EH:qҘ HH<9zAeq<31V)d~F!@0&d;`AܳPOhA3 |) D{r4ܢXo\ fq [H*&-FA"k<5B.eKJDh"cbе\|5\ԥY- XN&iCk;j71t/~AlC <~v%g-WCωKdloYt r7NI_>qR}ŏidqY(Y^y8-0#矇?EJT/!3EOe`,e%d ϣ[N#c?NTذQ k* #N-S3\V ^{GOtvб QjKU/bOpKcZ@41۫Eh-"*.dit߶Lm6V `89&Sαe0bS[õn2 -CAGoŠ n9*xÊJ a *ÛF'b  2IxQ yYmwMObۢv1jۉ jwHǍD{=U%hW#8#-v)CEc2w"'ꦆy#N۬rϺqgC77ZskYȈDFT<-9`erw >:uo7Kaisqw I%(9.?NsGۑhXG.KȬK@!:J|GىC^r=M+wqHEPEJxUC yWˀ Wd=Aςn.HA*yհkL?xdQf$T'dhA3ZB śu2ڏ\S'ءAߦEm;ݻ u,9 $HDn!vUא5۲ =w^Y)Gv/*:vڷǭB aڿst/[|"'52 +CAGoŠ n9*xÊJ a *ÛF'b  2IxQ yYmwMObۢv1jۉ jwHǍD{=U%hW#8#-v)CEc2w"'ꦆy#N۬rϺqgC77ZskYȈDFT<-9`erw >:uo7Kaisqw I%(9.?NsGۑhXG.KȬK@!:J|GىC^r=M+wqHEPEJxUC yWˀ Wd=Aςn.HA*yհkL?xdQf$T'dhA3ZB śu2ڏ\S'ءAߦEm;ݻ u,9 $HDn!vUא5۲ =w^Y)Gv/*:vڷǭB aڿst/;|"'53 endstream endobj -60 0 obj +62 0 obj << /Filter/FlateDecode /Length 2741 @@ -928,13 +953,13 @@ jR@TA/n4E,p~8cEҼ&'C ,S.ԯsQi)_aw'"BVc^/M*-eN=]bks^r"(*PNBS*j@/ݡDCH:0s;]-mf^݋n40x'B)5v:.)^B?Uvp(\NcRl@v\}K_g/E5V'8ZS*maЧ":hvJ;e`:Kc  OeG ~^=}^qp3^Õ@ϒpie*>&*\ilKfMS5o61)GWatg)Kv L`S bAEvТ!uҽa*FY%cb,U ޫ[0$?2AK-7\& % j4}`]^?u$G،M6HGT|tL~P9c0=RQKL9XHSبf;0HժvJo&ym9OCA-|E B*0@dW/Ʒqx7if֗WPc_ۿ!iP~jsusNc|<g?I92"k+9ŧQYPelV?U0ᦛ.x럾,N 2މMIZ|b n"Xr?pfYbG$K'U2[*cr!P!|'e8U,!3 ]*?FOBIY|3].Ƴ-(8N%%\JɰqLFo溔,%.`ob~98?$1vCtGˡgHJ#(X^PbϕƇ4WǪwO!?ea{f~ -1xc5#k"-`ͱ+O69.;4 2镓$vwibbUcXÇ\xd&s8m> stream xɎ)nh9y  ,**y+e8 XzzRw"N"^_%f8֋姥LOMާbX[yQY~k*u6y5AϮ]T4D3|AӆRķ;m^yOpXn^'IfX.Mz۷quD9ʶA.=znM!pa8R$c-.,MQ>JEۍB7-p8)@Mi)z6 jCm}g @@ -947,10 +972,10 @@ ܍uV Mh1eӠ3YT,|;8,.,7bR/bUP%#oUsa0 wxLS(*JsEN Wx:FSn7SJmkYM)_ {Uc׀Jp'6^ˉ>:K DhP᠑AK'GKD!9hА|@Q'x]"p´_LĒp2{Uu$J1NHe:REBpױlAl;]/3F'}kTu Ӂ?W5P>s3upP4\MH"hYG; -õ3_4!WPT|\"0<Ư-`mrOvJ 1r0Qq+MHoՔBx]ΗhD#Ncdl>Ŵk,&)wy }:a1Ղ"g*|4d Xf: z9*:v"y&[V`<㚋A `$sm8V Bo)Bb[(/JTX&茉1{ZlF(D د4:րB;# ˢi4&EN)[nd6Ѭ.P2AYHq(Xtzhc&[ٖkWpOk~{*hw|on_ 1ˀ5DpɄH5<mFDY+߹2=394ܲ T[ I!m`&)dhSRĔ﷠]AkbBK~V`.c?;4Ċ/  > -(OpV;> stream xTn0+T]쒥rT1Vc#ۛ;ƐAQތdEɚ,ǧ`5K`Fx: 5}vꁷϠ{BZrU6Ŗ5%g(^qA|L+11ڥmQgb"宰/0YPgͰVZB 8*~J, ׯzU.FR%Uً>?oԎp4Rv' 8{[4$+U$8bQ˓|(:";؀^hM(+ʂ8iu/z-Xt+eVXT;ϕ^ySĊЊ% t'r ~7*1ZaaRs ҹL4pe]g{Ǹ Ch EZV>8<-EK -(t9R̈tAu9)Ahu!4pok,KT֖•if!8<\E*1RS#pcP1 9qL໓"ϭ/jL75?$UlS-)itG +(t9R̈tAu9)Ahu!4pok,KT֖•if!8<\E*1RS#pcP1 9qL໓"ϭ/jL75?$UlS-)itH endstream endobj -64 0 obj +66 0 obj << /Filter/FlateDecode /Length 2530 @@ -996,28 +1021,26 @@ 3z|G# oئJLvҕ2|a٘12%e3q\ʲ>!Y9Cm c"NUēpp,dM'h3"V5&gL'#˾[SRQ6@4ioܹܶ/rNpb$-;'ViklOPҲ=Hϧs_/w d]{d7g=k=$ =azJ\X>p%sWڄ2vl: .WƷvwP v:;jLg yiƠF8$Y?A -z")H`j+/x[wN wERyr$XAݠʢ0x?Q +z")H`j+/x[wN wERyr$XAݠʢ\aX endstream endobj -65 0 obj +67 0 obj << /Filter/FlateDecode -/Length 1488 +/Length 1922 >> stream -xWKo6 R $e;A -d({{%F^o}RlEș qC_ =s*Ȫ^͑m:'me|wt ۢ{$3t'yQ5ohM>Jute68R}Zjug*ҁގ5/*{Â$yI6- @^D {k|7{đ$g7b̘@ϡ$mE3.BB莹%m *X7sl_|iRUZT$)x:8*d)^RXpn^_ -^mj|\v\ڍ!uFExAdih]`yQG4Bjk -*&Ҷ2rrYwL+n&`w|8s>/HQC5UL@@wNJfߙ rp`AA.`Yke%M)L.QNp -W8J1JNcʠRyxvb?t>*$Di#!dg5! -U;>d )qXnuE.B9T -X+yߙJG0谗p/c1g0`3>g+j,?$X¬m3j #{G:.i ?yiwGC舝Vtڧ  m\mp=) CBUˤTܤ4BÛ6)ׁ/n(ٱI6h-͝Z _ -oѢ9dqDXсAp[`3NSr` -iX @ gj¸8AyI  *ƪG .:~P~7(xR'YDkӥ x 2I@ӈbbQvAwG_"rHlR 8y[i$CWyVx0e$?7$-'IkZ@%0]d+xx|\j-|vZ ZsON$ -o~bH^]?)E~*FҰ7 +xXK80PqW}-b{X3G؆%OM!ERRl!HQ)}iqZFiNQ-?Y.7}wͳmy76/"mT{i~"Bi4 fiDWҋAL[a,+_qԉ'_i_wrkYv?ZF4vG.,2DCaZpFg)\uxoD(w#4LS7Р3jdT:Q] wC2JWy^$Yͳ_d=Vh*9287ejV#uf$ #ϊd +LQXpB-މjl_@/(:vPzn0G; )`7md,j^sOn(h<`#.> X%+% VJhlo1QKLE؊!Zt^!Nc)=8 oj?YlɓǦӖZxVV~5ık]R=ަ|Fr #,M0lB=paà瀳s?6U{abPihܱ!}"+ɞЌs8s9\ _DAFUlX~ؽvi2LM@ܱq<kkў7r?cB[f_녍[Y#@,ID&n#mPFsnxEO37> +[WJ~^*0Јր mn\H:4Ղ:.QSe '=Il]!jfyZQ % ᣶{D. "qnb܊ɦQwX|m=Ot3,P:ZHЅW\`ҞXg2~j7eU7il,L~i촩9oEp@{ +/b[Y-mKnw:7)4ۻ?xpD!R/R:3] ׮{4m'L`c0zՙoyS MZQo oxxM# acAװWo8Tt,[N7qB[,ï~yh^\BEŶaUo~Ai3* !yjE"00: )ƊZ.2=bY4TꜮE+ 5p B'7M)'Ɏ@*U#o_#rL6ۺ1Tkjj >͉iS{0y"?F_.#z9d?ǧ5U,IW +`~ A?ǰCNkWRvJlZ@@Խ#-+"'Rccu{v=Խldۜ[W #ogkA[AqS@^lV +Oċ^T%iaG/]@K_ +Sn ո1k4Xo]jWhTK4vX42J~O;An :_(8[evhk=N +``4#1?Ɛ"5q/`>bu>̄`#}ԇ<:~;^ )#!(-jܓoA.8/tjswD6ċp,nuJhzs}(C6@1>x`սmh%2KIͷkˑur endstream endobj -66 0 obj +68 0 obj << /Filter/FlateDecode /Length 1967 @@ -1030,24 +1053,21 @@ 2{ ACf. xw"ols@05̶R!LkGJmRu> stream -x}UKo6 WVx' P/Ackb5Jr&__aӝL )R|~kpl5(RzU5ccUJ>O\Ļ%#W*S"UUD45[kEeˁʗ yWDHl_yQLbs1jFIrFn U(Cgۍg($if)Aogd5S L.+| Zj+WeY "\lo1m.j x:AƐ)Ndv1uב ^{tz'qP -,hɔ|˔p\)!.XxP]4+WRLs0 J -sj <|?7H)/3S0wt=cAےY"Mj!L \Uȅk -zJ3kiDmYxz88YX){U@lA -@`af^,*6I͍Tܡ3\F!cѣ rH!fL~\<\n "2=+-#C/W}'_Ay&  /W%Ұ`ڗ ?n;0EM~ȫ͚[:g>r u e9bc!(^)Dݒl:!uV -L\QٝCKkf%F:]d Y.)YhAeG%Ǎo.\}`-"v{Yʰ^|y8C+kȿ)p&$ +QT D>f* =y 9$~.𺁘c:k`_N =*>Q1q"zI7EDBqu+&L{0emaTIpNu?ۏwwqmԪHJ+DOy9=QRLuҀܷ# tu<➒3 +Jf v*k>˳ji`lzEY{C;3@dO1eaaj j. } %p CDg͘X\+Y9d2X*+Yf{C.WyN2\p`wtH_偆ӽlM\9dx]܎ jrX^ux<(K>MA$sAĎ:OBJ{ɶMD36Ki:ΔY1qEQXhw^jZo_F6ک‚D,׋ϧ+kA8OVAtc ̋sutgzk.!zF{&]yS K W endstream endobj -68 0 obj +70 0 obj << /Filter/FlateDecode /Length 2274 @@ -1061,10 +1081,10 @@ ay(+wvr18>]s0OXc>p bOˇ6u~A_XİZJ͍}T94FZCx|m Wg3F5D~mJ)5Է(E*l_aۂvur#l$mK7PK# b8Β}JV?`wD76NQt ;3:Y& A;@~˰Y^ reD@`^C?r]2.\^2;gPy Z'i67E Ǐ^;LN%ŎADDB1OZc1'S8x o";s%ǻC+H`^=Sa76_cpc@qcoB‹66K4fAł~M#$~r:L2ؙCPFNs?p 9u,lۛvY2rxu@6fQZ -.0E8:l7>sj:ZSHR^tsj:ZSHR^t6|ZªT]@l͑&AA r'$ MΗq0-"3 +i xl]`[-A`K$ܜ@kjX`n{;(AHF-gLФf닧ryT5sVe*΍p#MWyYR1:vRLJ=Na%MPOM'iEvOHb)1z6ˌϓzftmnwУGSD"׏/H.çκbY/N  nuAo-.a!훋OeCP1gN>tH8u"P4 q&AL> O. -:2&%G +:2%%G endstream endobj -70 0 obj +72 0 obj << /Filter/FlateDecode /Length 2600 @@ -1097,41 +1117,30 @@ v sG T_t󏠼ƪ-\[ XOa[VGbWP_wĮDT0#Dǃ]e qhAW؃rEVF( ikJ,B7Q # aȩ"F:eYNvR7r3cꣶ{&~v?埊!o|HU%j3^YԹqm`L7 -ǥ);^;\2;7W$Uzqsh?I }Ԝ}95Bڦuw}g$r+^,7a=uϞKeKZcDiÕT?q:8j-XB~3+qfR'j'I NgIzeiij봯qgs57s#޶7L 8Ȏ!de s 48Ez$F;wq{>Ćp?:3?$av? +ǥ);^;\2;7W$Uzqsh?I }Ԝ}95Bڦuw}g$r+^,7a=uϞKeKZcDiÕT?q:8j-XB~3+qfR'j'I NgIzeiij봯qgs57s#޶7L 8Ȏ!de s 48Ez$F;wq{>Ćp?:3?$ endstream endobj -71 0 obj +73 0 obj << /Filter/FlateDecode /Length 850 >> stream -xuUK6ϯY4@Vvٲt nls8Lhy|>oERVI;$eR_4Uԧ3DuNE)pHg%ϜN9Jڑ'= -ns.iuz"%wt53aQD -3nF*3#EFE9%z%$ix+}yHr'b*?E=1:U޹k~^#*f]e#3Sİ袎 m2Q 9a "րn YW' + 'pu*`qS9`@`P^IH|<^U>6;A8R=Sg9ˌ 9ЎjוUO#YOPSmAP_ ݄!0a9ġ>~`Pr\*eU3G@!}r/9"wv}}GTݘ/F7a3|t Q=oU3%DZȇ4H-<{Hj1";f90} _a7G#gޠ@:پ#.yT:&l锧ƞifVR2s z3E;أ*qҶӳ -r`'srpZ$KhLPÇ -?mh En-c3; gsT%zwx% hVo&yw6A>в16^u,=ʅ/~Suœh~:NVv|w?3 3/G_ɾ>66~M +xuUK:ϯY4 If{Y˖] L6M{02<߼IY%MIe}}H!i+uu(}O6tT鐣93GqI"MNYY䆮zCb",궐Ha 3ș3EFE9%z%$5^d]n܉}o˽ E1:U޹kү^#*F^i!ߑ)bXtQZ6D0 Ts@T;r#gAyRTPvwLH cx m$]c*{ M^6iDڄ hKʬp,6P W n@sO삅.`M^`جkv*k]qoJgAET{fY9?s6RN%G`WIڅ,"l&:?.!*Ƕ4aXx&Q?^+0X&iŠ"}"QMUuh(BWn4д0o'+q3r2d|U {ަVE~yoM endstream endobj -72 0 obj +74 0 obj << /Filter/FlateDecode /Length 2144 >> stream -xَ}˒C7q qȖ-+_:Vh"l4ouGe4=Ȣ)ʣ Y[b= ?rJVvm(15O.!ɿc *iV2-}th&q SRf"_Dg9YdpQKF0\`#(Ҽذw$EsMV6KUs7="qcj1"Gt,3C`U[ -0'9#C9zESbYax7J_^/Ts+8TR؅VYMRSWϝ[T Qϰkjhfp,X)C_gihR4ȓnML8q5@^)ݚ ^`|49bv+*lE#fJ-V8p MoЯZw^>1 -D6ƞ 9 ~}jw wt@4GCZ=yP[~NidG"gRmR`Ѯ1V轵 |2h!E֝+ì RF -L˛x<@a@J֐@ԇ_QË&Y -b|SL7,0_G긏Oq -q r+{Ep;2lpb0 -F{9N䰇؅SË /bS\nà䋟JO&NqѷS۽rnoԃf“$jD+GyC9-'~~Q [@k}xje@Gjd >YmZ8ç1O JYoؠD ;2|/0БV?{&bΙftpa}'Iޤ;Va!b[@-4"f~' KOfrB5Z'9)2xG xT[zblLZߪMgr]`>եs5.1~j!mQ?yPNg1%Cyt|"f߲&g8cvöDkVGNut Jx6BvE@oqY !'~ #rhLM -G.+ ^'/0IQHn20N*L8J*bzCvmSf0Uwt"ߧ|~Ȱ p/f# +xَ}˒IQI kg-d2A"["wH&=V>u% t]]]U]yje(8J'YaR3-Z5`-P#IT(ʜD[E wë*u蔨IL55OyyC%/]h՛(4ԪA%[Ke2xf?[jWޕ/$ӟuI2*:͎Qf&E@kiѾ_Qa$j1/PzhY 66iAj;(Y{2,h?C/d@?Fў i&o{Cmd9!KbƇ5fKEX ֶ&̃qY 6K)t0-oNNM([CS~ rDY/e5)M'"$DO=q>3?=h+YHˍ!kd{qɋ*AD:^b;VL /6\qJ=s /~)s3=Z9AZ:;LmҦfT1g:P2G Ojޫx&eerG1l5>6IG|UaE@dq ƨW?+fa/0՞c0БV5?{&le&wtpa=OwI$_oݿ @m˰1*2P M >Pz_N wz@y%}>Qv}rr^1EjjӗbX+ui\KGGHkyOTII ?O~[ V`11YG9:M?s:-W[| C8C/7wŁ;;On1m8`Song^~,T4j/^RGs)"zq1ञ%(.lIbpX( qz1a[.4k]d &:&&UY(-_,]yb;S*4 GoS >|؝s*|,qUGޯy7B-›y*@\]E'N~շk1G\^hWƇVM/\FGM 2 +{GiS_`.ܾ 3E815$AeujMM s7Q@oTʹ\CUxT:84Kqֻꍝ־=`lgsm-'qyvdbݲHyOɒatR+ SwK g%dM[v:*2~fB7eܕ :5p14Րh$ۚL#aq"sUO3'LNP;Ǔ* xoC5,հP'OSHkUyPD)3"8h`ҦT!9N큚!zIPN<מ }]y5Gaա82  2HOlwyF@9!놙 +Jգ"Ï vQL7<:>p3oY#~ Xci1a[P##QUO%_eY$'dY|E{94\T8_,hX&Fd5MC40a䮘 h8o$yw!p>' 3c`ߚH@ǢI`{i"%3\H_Q$\k{5!|J'SB(!1bӫ|TfzdTwi [Flbt!;׆=amAaJΚƩA&{pqF,VIvSb3-= g Q;(NBҝiL=]K=I<kڊ㽐4B-Vvtwq:_.^;ĆN!;Hmq LL(h;:y2 Z_a- A5;i{j"n :嶜 W 7*2ˆ 4a?KjF̌[u%E?0>DITV2,ˌ&{tEv7Nٛ}o - à;x>k)۩4_%^/0kz[ȯܽ~_(qZlw룅xIaƾJ&E:^;VځXа~Vs w}P .y.`aaeUI8+"%)=^mT#|3h o!i(ɲGr#͠8ꃻ1!uXcmxV%Gmi  ş(M|}SbE.Y|#9diϴ JpbXO)wN-ϼ7QG*b|2hAIBj=(d]sxR=3:/gP?i n6=pp 9ǗEn[", + à;x>k)۩4_%^/0kz[ȯܽ~_(qZlw룅xIaƾJ&E:^;VځXа~Vs w}P .y.`aaeUI8+"%)=^mT#|3h o!i(ɲGr#͠8ꃻ1!uXcmxV%Gmi  ş(M|}SbE.Y|#9diϴ JpbXO)wN-ϼ7QG*b|2hAIBj=(d]sxR=3:/gP?i n6=pp 9ǗEab"- endstream endobj -74 0 obj +76 0 obj << /Filter/FlateDecode /Length 2023 >> stream -xXKs6W| Y%qfOJMڊ]`CC$@@74z.{xF?UyѾhhG6ڷQw9teT -m8 FNuNh_Fۏ.yOr$hXX IF;;0UJv/qQyZ`] -;g[|Hacf°i+$ =w -$lX~Q3I:P؊cJrr jzcT?G{ܒmf~l$̶q8ʁ))'E(j$*4҆/.+!Xv+e1C^uEP8<y{Jt–0VG4 *J;,p{1 ̩xmF&U-kJ sKEz{L}\9c9=WX=hT:MlXvLx)bbp[wwyovToΜEhg{wy3fߙڥlax{sjc-$mnnk$+'siqwT85xO/85#nl GT 9͍Tlc쉀k Ve7.aXȶfgr/`;vOTbCRs{uW[\G* N>xF/W :0a XuF{XBU]E]#Lpm 1QnYf ҮNϦģga Ow5/rPc'7} ^l/?2æaF$݉Pd <!.=.-PDF*%A =8Mכ,J!yќ\Cir_G󣆕Mda'#gZFq:s9+tƏsU>(Lj"*0. j !6j2M - UFb}0%qQ1C#O"%W-Zkzě, F2|pRRid%밐^J To_<1Lr$hXP*/Q F=90J6f/a^x\`m ;'tŰ13~XO YRJ*+ ^LC9s*Z]ɤkb0Ԙ8H]'𦫙4gLaNdU=VcP&6a{ENb"QD$stk +KlP8V )[%;kmWZ~^rJ.WQWa4@Z j](% ؋J fW~ ىw 1̍_cy[0Eh=FգNeyP`o~Z#O^aeLޔ,cf?ObL ϮhҨ%q>3pLn\C \=/cV̠9;b;;ed'IN8[g*Iфdƅ;H\Cu;ċ7u:d  ; endstream endobj -75 0 obj +77 0 obj << /Filter/FlateDecode -/Length 2518 +/Length 2519 >> stream xY/lIעWȡqwE KJ]IT!y![wioo6""\l/\!9.RjE eh{Gڵ/QT֩tPB5ޜY}o,q@ްvXY[E%͓c쪆Vԝ򘝮ݨB}7:8`Nz1C sn$uf|]ۥNd; Hb(_Tn^J=vF˺ԣh; @@ -1174,10 +1185,10 @@ KAרay\Ijà UC r%ZmDŽ]7S\SC\!Y%<,VS-y ?"c?`6OKmf"C#yɇCs_)sƍ oҚ=cLB(@>[Jf|S4TߪuwWo/[t۝b6! PbXz AUrCöTMoګ04 H̛|̨^v g8"pR\RS,E T+wW(~lyޡ٧; -I"2p+PRL`x3Fc#:1hRGz"TFOt7 +I"2p+PRL`x3Fc#:1hRGz"TFO{8 endstream endobj -76 0 obj +78 0 obj << /Filter/FlateDecode /Length 2929 @@ -1196,22 +1207,23 @@ IpH~;C> Rw0@{_Qr:SU<ʢKǴF``tRk6mVnNt "r'iP@>KAr0a BpS",pMTM0 5k&y)p')K7ʢbW VFF}B;Zp)mh%6u brFp$3 UIȇ RefMe#$L&_/U(mŎ$V.+x~&}S_9hFvk&0%VDZSɸI&eZ!AG6H)Z>PŔ6XMSp kYVGtE*) 5=`.Ɋ2>J%d1HH t r  : gQz +צ"eff!9;ޚq.v$ZhȴՍPABNf`'X@G;Wxc.ӯBO.7Dy^?i eXٲ4%D)\Txs{P5.y-V:{?^z. -X=}"칮*cݗ9;'Mp˨+=8n3tLObÿ Ys +X=}"칮*cݗ9;'Mp˨+=8n3tLObÿ Yt endstream endobj -77 0 obj +79 0 obj << /Filter/FlateDecode -/Length 1091 +/Length 1090 >> stream -xuVKs6WV2cQ|[&vztSHB$`0}ewfeJNP߭ -FEGMf~S:KYkw.:. PkǬ(U;EM'*ĺ_odWɹ9)뼸HH/RM͋#Lq5+cD^EQN ˪S;ۑnNLHu͎MzUHt\`bǘ@ld&Ύ)|9./ Y;ayϝD&%,$L3دn?Tݱ(ҞІ#o-D]!dꏇ'}%oװ"HsA-'c.E׋z\C޸;eաhpꉙ1JTyޜ54A@$U{9337x }I{ii$$(!;mʗSm.U72L*@:*"1C%c]eʮb@}QhU#DȎ0T]lb6 QL.Er6a8 -k nd][ZOC^/RD<`Lgw6j'6f.iV p k.pU74nj'%/ +xuVK&Wɵ{f}s;TI@{7 Vk_7xˢ.(2ˣSst1ɡ(TNJooˉM1똋 w%Ubf~64xR\Y`8٫v#=Otd!/K1S"4;e7.&ZES +(Y1z"0E$ER`;ۡn NDNqqO:~*(ʙ\#lsVW_.l9.o ^&І=51 .)`Gh)~\~׏\KM=n=TA&F[C7꾢˷kXoO)Cԣ1b:׳rL*MzuWdX +dz1עʇşz"j:3 }7',y2{+`jS#8&-_hoKsM'F9rD~-Y2[;{}N-E7Lj8: +ĺ1YѲQJa6NHU#SXtb6 /E|V~k,v^N.- d'm 8)"pKf:j!,/auingBqoLAP2E +Mz60sk*4KzD}w4O 2gE)a Ck/-WZh߱?f0ME:PsUbˑ̳)Еl޴C髮Em X: 4ah1;yGFQF2"8 g!+c=$a6{$N87$&C}XUaj>,B9u}~ZwC["ֳO- !廪[r(Js•Zo:};$3xBe-'DQmUr0<\"|;A?utl~%0 endstream endobj -78 0 obj +80 0 obj << /Filter/FlateDecode /Length 2055 @@ -1220,10 +1232,10 @@ x}XKϯ hk,:IA;8a:Zm%Q!Tr۳h4zXU,~,j[gf_]nl)>ev8eU*Cʪk WŢ}?e-sU\ǢZ=)ſ Z^eum١`,Xle3?fS7MC?+ދALc`bl(yhؓr LGjz]#i*鷻6=)1ЗHucrV.FQJwQ-k/Kp7j>2hdG8&YV_%iC(- V$:jݐtSWNB@@!YɏʽHPDo6nW'VXsYٜ>yK :MІM[ ~.>,ޝY r\A 3ա|5NA.J^xK?qpJ tZs`]"=Nx{{J/g]8<)鼢b262?gtëxWEK/$BKش.жE7xhcrm͵ kb_jKiv_bd(ޢp`o3{PuȜ2v\o_;4obPeE;'Җb%-ӘGY `d.#4k֋ Uew@p#nweF+nw މj>˕}Zb-7p3Z,i=GrF›"di|/fyӐ@=I:9J\-ۻ+Vo({ -J%0v($ ^kc'!|5G+h(KFm/zWm +J%0v($ ^kc'!|5G+h(KFm/zWn endstream endobj -79 0 obj +81 0 obj << /Filter/FlateDecode /Length 2534 @@ -1235,10 +1247,10 @@ I [i ; zG~3u)i/pLfZЂ)l 3 rOe?p&aFX^ >CϞd .>;3'G7@|pI,BӜx`ANU%DY+}OpZDGP/ޡ*u7pHoJԈ*G]^zikO|9 y Nޥ$/Z n Ƃ!z&^@xږ|*!͏}7qٟWs(_םZt+[ GiFএK> d= a2rS2xioXOCbJ>Sa1na; CFWs8L1xs]\3* +0wPUа׀k'm;fй̳}4z'= :mGxJf|8:1IӼ|Wj,s ƒL񔟽n4W o֣0YY*AÆosk% \{їh Z]p#aAőAB%9|gv&p|ZE3+ endstream endobj -81 0 obj +83 0 obj << /Filter/FlateDecode -/Length 388 +/Length 387 >> stream -x}ROs0)1)HQ魫vq' A@7jԩ ޟߟ `S xS -P/&AH" h#9c4t\b{vɷC#}o63qL"x9-_%j Vhڭ{Q0'ai8&cl`;גЮkU &(MRciL"7*uJ:b}x ZԪ<`4ǟ[,j~=¨9W$m_HzNvUף6;ɩf.+&J<˵@3^|_78eJBȦoߝW8¤Onla[D(M -)?>Ŭ4Wn?-B +x}ROs0)1)R3팻d,PoQ6x~ރGe@B }-4x!x$42x48?n7u9;/Op?͗KY,?Hߝ۶-D4}sek9L +%-[ʺ4BSq-u W0bFIa3%^Mj%;l')ѢVSĹ}񨪲67أs5LʩɆ\u=vma悸b*/ -\/<]z>~UM'߾;0Ola[D(˔K>N}{': endstream endobj -82 0 obj +84 0 obj << /Filter/FlateDecode -/Length 1613 +/Length 1614 >> stream -xr6=_Kə!r'Mę=f>@$$! ⲜbUmmS&u"hr|}$UǤL ->vO)+Ȣ6>-,1i<+nF$"s61EnE ҊvɦLV*۔eSgeYTHscSHTQ:BW.F_]7@:;A}$HYY?7Yz-؉d(_?D`%5#@Iol+ɦIHe^Z}XUMzH_=4S/:477ZxU=<-t<M$[bB_eY΄ -i=q].Quo\5,zuvѤ߾zL{3:>Mᤠd>da tO7[˂Q,}S,8Z'Măs F&!KCgȉSm`[GߕJ%N5W_t0 3;slBt z,b]ҍ r@fOAA2%s rSJDXKt0z@Љ+ns_M 15{dY|vYWiX8 ڬܧoMڷatBIۛ4|/:D0:#!Cw%OY =ЎkLsBtvsJ>q&:[xaUf_J0H lt9+.[ 5; gXI -q/],/ 9&΍ʙ)oz!ږB7eަբgz63fy`[msÙt=I|;<Ę@4U$hAȝq=^"B٬U83Bep?U,[]"wQvA''/֧%yvh%y|CMua;:-MNSN%)8s:#ʠS1PhHD9(D@֑Smr9:Y. 'KX̺.yD~̣</6 I-!:HhXFN.׃$ҠC=Qoޤf[  xz?MI#K6 G3rژXmV¬gFaB_7;3^ɫEۯ ͑351faiu;VdhhbΨG>B:.yfE*pr[ eY*xrD3̬l3tA,Y)ۢ7]D[<0拎w0@u.6A`iњi6ƾ䰁K5rB1qGjM}>Aњ,M3ŕ|DdK檼tշҺmJPy +xr6Rr&bDR'Mę}=@$$! bZNAv/d$mT6)I}Ld ".I=$W W٪ا:K64_FnDbc1ÌE vɪLߖ2[vErݍUUm"=ps wuj *"Q.)9+R֟,V$Fx#gpۯKGVUQV1+7F#Awr[ȭSO=^Ye_c xi<ɓ'&%l =q&Qso\u\?M響vM߿}& 4ػu`4rI M\'P?]ԏn{qLBl^}yìx+d\(7#{"މCӚNNyĻ䀾͞H:jQl/H98Hrax"D{('(>HCXj"N.c$Ɠ[OnUg>~s}ֿ 3aM=Rҧ}oQ*3%LFBJxmޗ7nSM>^Z w>]wl]Wy)H훨XؾV<Ī +"M4<7H!_F&{ TklTe17GhPR#7E/7l 3ײH0C}% 5wR&"+B̈́Ah@d}VT-$Fx:+|BKsrFRc-=ЬCZL˭F֟,?ClM^ʖJ.AEtAyqkH/a;;ʁI_Tu<[qn久axDNQ6Qg gg3Z3>y턷v%||GСS.غibdvl0"OƎJX4Q:1B(4wYa^,(LAٕ,P}rG-_'%n]۔q-%sY\[tҪJWz endstream endobj -83 0 obj +85 0 obj << /Filter/FlateDecode /Length 500 >> stream -xeRr +fjW +jtMЮKW)L :>v mѶDPQub;DQ>|n=X0dv{L)d[`DV7Կ{v mѶDPQub;DQ>|n=X0dv{L)d[`DV7Կ{> endobj -85 0 obj +87 0 obj << /Title (Contents) -/Parent 84 0 R +/Parent 86 0 R /Dest[15 0 R/XYZ null null null] -/Next 86 0 R ->> -endobj -86 0 obj -<< -/Title (Chapter 1: Introduction) -/Parent 84 0 R -/Dest[17 0 R/XYZ null null null] -/Prev 85 0 R -/Next 87 0 R ->> -endobj -87 0 obj -<< -/Title (Chapter 2: Running apt-cacher-ng) -/Parent 84 0 R -/Dest[18 0 R/XYZ null null null] -/Prev 86 0 R /Next 88 0 R >> endobj 88 0 obj << -/Title (Chapter 3: Basic Configuration) -/Parent 84 0 R -/Dest[19 0 R/XYZ null null null] +/Title (Chapter 1: Introduction) +/Parent 86 0 R +/Dest[18 0 R/XYZ null null null] /Prev 87 0 R -/First 89 0 R -/Last 90 0 R -/Count -2 -/Next 91 0 R +/Next 89 0 R >> endobj 89 0 obj << -/Title (3.1 Server Configuration) -/Parent 88 0 R +/Title (Chapter 2: Running apt-cacher-ng) +/Parent 86 0 R /Dest[19 0 R/XYZ null null null] +/Prev 88 0 R /Next 90 0 R >> endobj 90 0 obj << -/Title (3.2 Client Configuration) -/Parent 88 0 R -/Dest[19 0 R/XYZ null null null] +/Title (Chapter 3: Basic Configuration) +/Parent 86 0 R +/Dest[20 0 R/XYZ null null null] /Prev 89 0 R +/First 91 0 R +/Last 92 0 R +/Count -2 +/Next 93 0 R >> endobj 91 0 obj << -/Title (Chapter 4: Advanced Server Configuration) -/Parent 84 0 R +/Title (3.1 Server Configuration) +/Parent 90 0 R /Dest[20 0 R/XYZ null null null] -/Prev 88 0 R -/First 92 0 R -/Last 94 0 R -/Count -3 -/Next 97 0 R +/Next 92 0 R >> endobj 92 0 obj << -/Title (4.1 Vocabulary) -/Parent 91 0 R +/Title (3.2 Client Configuration) +/Parent 90 0 R /Dest[20 0 R/XYZ null null null] -/Next 93 0 R +/Prev 91 0 R >> endobj 93 0 obj << -/Title (4.2 Configuration file types) -/Parent 91 0 R -/Dest[20 0 R/XYZ null null null] -/Prev 92 0 R -/Next 94 0 R +/Title (Chapter 4: Advanced Server Configuration) +/Parent 86 0 R +/Dest[21 0 R/XYZ null null null] +/Prev 90 0 R +/First 94 0 R +/Last 96 0 R +/Count -3 +/Next 99 0 R >> endobj 94 0 obj << -/Title (4.3 Repositories and URL mapping) -/Parent 91 0 R +/Title (4.1 Vocabulary) +/Parent 93 0 R /Dest[21 0 R/XYZ null null null] -/Prev 93 0 R -/First 95 0 R -/Last 96 0 R -/Count -2 +/Next 95 0 R >> endobj 95 0 obj << -/Title (4.3.1 Writing Remap-... configuration) -/Parent 94 0 R -/Dest[22 0 R/XYZ null null null] +/Title (4.2 Configuration file types) +/Parent 93 0 R +/Dest[21 0 R/XYZ null null null] +/Prev 94 0 R /Next 96 0 R >> endobj 96 0 obj << -/Title (4.3.2 Special tricks and additional notes) -/Parent 94 0 R -/Dest[23 0 R/XYZ null null null] +/Title (4.3 Repositories and URL mapping) +/Parent 93 0 R +/Dest[22 0 R/XYZ null null null] /Prev 95 0 R +/First 97 0 R +/Last 98 0 R +/Count -2 >> endobj 97 0 obj << -/Title (Chapter 5: Security) -/Parent 84 0 R -/Dest[25 0 R/XYZ null null null] -/Prev 91 0 R -/First 98 0 R -/Last 101 0 R -/Count -4 -/Next 102 0 R +/Title (4.3.1 Writing Remap-... configuration) +/Parent 96 0 R +/Dest[23 0 R/XYZ null null null] +/Next 98 0 R >> endobj 98 0 obj << -/Title (5.1 Access control by IP interface) -/Parent 97 0 R -/Dest[25 0 R/XYZ null null null] -/Next 99 0 R +/Title (4.3.2 Special tricks and additional notes) +/Parent 96 0 R +/Dest[24 0 R/XYZ null null null] +/Prev 97 0 R >> endobj 99 0 obj << -/Title (5.2 Access control with libwrap) -/Parent 97 0 R -/Dest[25 0 R/XYZ null null null] -/Prev 98 0 R -/Next 100 0 R +/Title (Chapter 5: Security) +/Parent 86 0 R +/Dest[26 0 R/XYZ null null null] +/Prev 93 0 R +/First 100 0 R +/Last 104 0 R +/Count -5 +/Next 105 0 R >> endobj 100 0 obj << -/Title (5.3 Access control with inetd) -/Parent 97 0 R +/Title (5.1 Access control by IP interface) +/Parent 99 0 R /Dest[26 0 R/XYZ null null null] -/Prev 99 0 R /Next 101 0 R >> endobj 101 0 obj << -/Title (5.4 Access control with iptables) -/Parent 97 0 R +/Title (5.2 Access control with libwrap) +/Parent 99 0 R /Dest[26 0 R/XYZ null null null] /Prev 100 0 R +/Next 102 0 R >> endobj 102 0 obj << -/Title (Chapter 6: Distribution specific instructions) -/Parent 84 0 R +/Title (5.3 Access control with inetd) +/Parent 99 0 R /Dest[27 0 R/XYZ null null null] -/Prev 97 0 R -/First 103 0 R -/Last 109 0 R -/Count -7 -/Next 110 0 R +/Prev 101 0 R +/Next 103 0 R >> endobj 103 0 obj << -/Title (6.1 Debian and Ubuntu) -/Parent 102 0 R +/Title (5.4 Access control with iptables) +/Parent 99 0 R /Dest[27 0 R/XYZ null null null] +/Prev 102 0 R /Next 104 0 R >> endobj 104 0 obj << -/Title (6.2 OpenSUSE) -/Parent 102 0 R +/Title (5.5 Target port filter) +/Parent 99 0 R /Dest[27 0 R/XYZ null null null] /Prev 103 0 R -/Next 105 0 R >> endobj 105 0 obj << -/Title (6.3 Fedora Core) -/Parent 102 0 R -/Dest[27 0 R/XYZ null null null] -/Prev 104 0 R -/Next 106 0 R +/Title (Chapter 6: Distribution specific instructions) +/Parent 86 0 R +/Dest[28 0 R/XYZ null null null] +/Prev 99 0 R +/First 106 0 R +/Last 112 0 R +/Count -7 +/Next 113 0 R >> endobj 106 0 obj << -/Title (6.4 Arch Linux) -/Parent 102 0 R -/Dest[27 0 R/XYZ null null null] -/Prev 105 0 R +/Title (6.1 Debian and Ubuntu) +/Parent 105 0 R +/Dest[28 0 R/XYZ null null null] /Next 107 0 R >> endobj 107 0 obj << -/Title (6.5 Sourceforge mirror network) -/Parent 102 0 R -/Dest[27 0 R/XYZ null null null] +/Title (6.2 OpenSUSE) +/Parent 105 0 R +/Dest[28 0 R/XYZ null null null] /Prev 106 0 R /Next 108 0 R >> endobj 108 0 obj << -/Title (6.6 Cygwin mirrors) -/Parent 102 0 R +/Title (6.3 Fedora Core) +/Parent 105 0 R /Dest[28 0 R/XYZ null null null] /Prev 107 0 R /Next 109 0 R @@ -1521,119 +1511,119 @@ endobj 109 0 obj << -/Title (6.7 Limited expiration) -/Parent 102 0 R +/Title (6.4 Arch Linux) +/Parent 105 0 R /Dest[28 0 R/XYZ null null null] /Prev 108 0 R +/Next 110 0 R >> endobj 110 0 obj << -/Title (Chapter 7: Maintenance) -/Parent 84 0 R -/Dest[29 0 R/XYZ null null null] -/Prev 102 0 R -/First 111 0 R -/Last 115 0 R -/Count -2 -/Next 116 0 R +/Title (6.5 Sourceforge mirror network) +/Parent 105 0 R +/Dest[28 0 R/XYZ null null null] +/Prev 109 0 R +/Next 111 0 R >> endobj 111 0 obj << -/Title (7.1 Cache cleanup) -/Parent 110 0 R +/Title (6.6 Cygwin mirrors) +/Parent 105 0 R /Dest[29 0 R/XYZ null null null] -/First 112 0 R -/Last 114 0 R -/Count -3 -/Next 115 0 R +/Prev 110 0 R +/Next 112 0 R >> endobj 112 0 obj << -/Title (7.1.1 Manual expiration) -/Parent 111 0 R +/Title (6.7 Limited expiration) +/Parent 105 0 R /Dest[29 0 R/XYZ null null null] -/Next 113 0 R +/Prev 111 0 R >> endobj 113 0 obj << -/Title (7.1.2 Automated cache cleanup) -/Parent 111 0 R +/Title (Chapter 7: Maintenance) +/Parent 86 0 R /Dest[30 0 R/XYZ null null null] -/Prev 112 0 R -/Next 114 0 R +/Prev 105 0 R +/First 114 0 R +/Last 118 0 R +/Count -2 +/Next 119 0 R >> endobj 114 0 obj << -/Title (7.1.3 Keeping latest versions of expired package files) -/Parent 111 0 R -/Dest[31 0 R/XYZ null null null] -/Prev 113 0 R +/Title (7.1 Cache cleanup) +/Parent 113 0 R +/Dest[30 0 R/XYZ null null null] +/First 115 0 R +/Last 117 0 R +/Count -3 +/Next 118 0 R >> endobj 115 0 obj << -/Title (7.2 Removal of distribution releases) -/Parent 110 0 R -/Dest[31 0 R/XYZ null null null] -/Prev 111 0 R +/Title (7.1.1 Manual expiration) +/Parent 114 0 R +/Dest[30 0 R/XYZ null null null] +/Next 116 0 R >> endobj 116 0 obj << -/Title (Chapter 8: HOWTOs and FAQ) -/Parent 84 0 R -/Dest[33 0 R/XYZ null null null] -/Prev 110 0 R -/First 117 0 R -/Last 129 0 R -/Count -13 -/Next 130 0 R +/Title (7.1.2 Automated cache cleanup) +/Parent 114 0 R +/Dest[31 0 R/XYZ null null null] +/Prev 115 0 R +/Next 117 0 R >> endobj 117 0 obj << -/Title (8.1 Package import) -/Parent 116 0 R -/Dest[33 0 R/XYZ null null null] -/Next 118 0 R +/Title (7.1.3 Keeping latest versions of expired package files) +/Parent 114 0 R +/Dest[32 0 R/XYZ null null null] +/Prev 116 0 R >> endobj 118 0 obj << -/Title (8.2 Cache overview) -/Parent 116 0 R -/Dest[34 0 R/XYZ null null null] -/Prev 117 0 R -/Next 119 0 R +/Title (7.2 Removal of distribution releases) +/Parent 113 0 R +/Dest[32 0 R/XYZ null null null] +/Prev 114 0 R >> endobj 119 0 obj << -/Title (8.3 JIGDO usage) -/Parent 116 0 R -/Dest[35 0 R/XYZ null null null] -/Prev 118 0 R -/Next 120 0 R +/Title (Chapter 8: HOWTOs and FAQ) +/Parent 86 0 R +/Dest[34 0 R/XYZ null null null] +/Prev 113 0 R +/First 120 0 R +/Last 132 0 R +/Count -13 +/Next 133 0 R >> endobj 120 0 obj << -/Title (8.4 Avoid use of apt-cacher-ng for certain hosts) -/Parent 116 0 R -/Dest[35 0 R/XYZ null null null] -/Prev 119 0 R +/Title (8.1 Package import) +/Parent 119 0 R +/Dest[34 0 R/XYZ null null null] /Next 121 0 R >> endobj 121 0 obj << -/Title (8.5 Avoid caching for certain domains or certain file types) -/Parent 116 0 R +/Title (8.2 Cache overview) +/Parent 119 0 R /Dest[35 0 R/XYZ null null null] /Prev 120 0 R /Next 122 0 R @@ -1641,17 +1631,17 @@ endobj 122 0 obj << -/Title (8.6 How to make big download series faster) -/Parent 116 0 R -/Dest[35 0 R/XYZ null null null] +/Title (8.3 JIGDO usage) +/Parent 119 0 R +/Dest[36 0 R/XYZ null null null] /Prev 121 0 R /Next 123 0 R >> endobj 123 0 obj << -/Title (8.7 How to import DVDs or ISO images) -/Parent 116 0 R +/Title (8.4 Avoid use of apt-cacher-ng for certain hosts) +/Parent 119 0 R /Dest[36 0 R/XYZ null null null] /Prev 122 0 R /Next 124 0 R @@ -1659,8 +1649,8 @@ endobj 124 0 obj << -/Title (8.8 How to integrate DVDs or ISO image data) -/Parent 116 0 R +/Title (8.5 Avoid caching for certain domains or certain file types) +/Parent 119 0 R /Dest[36 0 R/XYZ null null null] /Prev 123 0 R /Next 125 0 R @@ -1668,8 +1658,8 @@ endobj 125 0 obj << -/Title (8.9 How to execute commands before and after going online?) -/Parent 116 0 R +/Title (8.6 How to make big download series faster) +/Parent 119 0 R /Dest[36 0 R/XYZ null null null] /Prev 124 0 R /Next 126 0 R @@ -1677,17 +1667,17 @@ endobj 126 0 obj << -/Title (8.10 Listen to only specific interfaces or IP protocols) -/Parent 116 0 R -/Dest[36 0 R/XYZ null null null] +/Title (8.7 How to import DVDs or ISO images) +/Parent 119 0 R +/Dest[37 0 R/XYZ null null null] /Prev 125 0 R /Next 127 0 R >> endobj 127 0 obj << -/Title (8.11 How to avoid use of IPv4 \(or IPv6\) where possible?) -/Parent 116 0 R +/Title (8.8 How to integrate DVDs or ISO image data) +/Parent 119 0 R /Dest[37 0 R/XYZ null null null] /Prev 126 0 R /Next 128 0 R @@ -1695,8 +1685,8 @@ endobj 128 0 obj << -/Title (8.12 Use the proxy without storing all data twice) -/Parent 116 0 R +/Title (8.9 How to execute commands before and after going online?) +/Parent 119 0 R /Dest[37 0 R/XYZ null null null] /Prev 127 0 R /Next 129 0 R @@ -1704,63 +1694,63 @@ endobj 129 0 obj << -/Title (8.13 Partial Mirroring) -/Parent 116 0 R +/Title (8.10 Listen to only specific interfaces or IP protocols) +/Parent 119 0 R /Dest[37 0 R/XYZ null null null] /Prev 128 0 R +/Next 130 0 R >> endobj 130 0 obj << -/Title (Chapter 9: Troubleshooting) -/Parent 84 0 R -/Dest[39 0 R/XYZ null null null] -/Prev 116 0 R -/First 131 0 R -/Last 137 0 R -/Count -7 -/Next 138 0 R +/Title (8.11 How to avoid use of IPv4 \(or IPv6\) where possible?) +/Parent 119 0 R +/Dest[38 0 R/XYZ null null null] +/Prev 129 0 R +/Next 131 0 R >> endobj 131 0 obj << -/Title (9.1 Debugging) -/Parent 130 0 R -/Dest[39 0 R/XYZ null null null] +/Title (8.12 Use the proxy without storing all data twice) +/Parent 119 0 R +/Dest[38 0 R/XYZ null null null] +/Prev 130 0 R /Next 132 0 R >> endobj 132 0 obj << -/Title (9.2 Problem: keeps delivering damaged files) -/Parent 130 0 R -/Dest[39 0 R/XYZ null null null] +/Title (8.13 Partial Mirroring) +/Parent 119 0 R +/Dest[38 0 R/XYZ null null null] /Prev 131 0 R -/Next 133 0 R >> endobj 133 0 obj << -/Title (9.3 Problem: regular expiration action reproducibly aborts) -/Parent 130 0 R +/Title (Chapter 9: Troubleshooting) +/Parent 86 0 R /Dest[40 0 R/XYZ null null null] -/Prev 132 0 R -/Next 134 0 R +/Prev 119 0 R +/First 134 0 R +/Last 140 0 R +/Count -7 +/Next 141 0 R >> endobj 134 0 obj << -/Title (9.4 Problem: download fails with 503 ... status message) -/Parent 130 0 R +/Title (9.1 Debugging) +/Parent 133 0 R /Dest[40 0 R/XYZ null null null] -/Prev 133 0 R /Next 135 0 R >> endobj 135 0 obj << -/Title (9.5 Problem: 'apt-get' freezes when downloading files) -/Parent 130 0 R +/Title (9.2 Problem: keeps delivering damaged files) +/Parent 133 0 R /Dest[40 0 R/XYZ null null null] /Prev 134 0 R /Next 136 0 R @@ -1768,8 +1758,8 @@ endobj 136 0 obj << -/Title (9.6 'apt-get' reports corrupted bzip2 data) -/Parent 130 0 R +/Title (9.3 Problem: regular expiration action reproducibly aborts) +/Parent 133 0 R /Dest[41 0 R/XYZ null null null] /Prev 135 0 R /Next 137 0 R @@ -1777,31 +1767,58 @@ endobj 137 0 obj << -/Title (9.7 Problem: 'apt-cacher-ng' refuses to start with "Address already in use") -/Parent 130 0 R +/Title (9.4 Problem: download fails with 503 ... status message) +/Parent 133 0 R /Dest[41 0 R/XYZ null null null] /Prev 136 0 R +/Next 138 0 R >> endobj 138 0 obj << -/Title (Chapter 10: Known Bugs and Limitations) -/Parent 84 0 R -/Dest[43 0 R/XYZ null null null] -/Prev 130 0 R +/Title (9.5 Problem: 'apt-get' freezes when downloading files) +/Parent 133 0 R +/Dest[41 0 R/XYZ null null null] +/Prev 137 0 R /Next 139 0 R >> endobj 139 0 obj << -/Title (Chapter 11: Contact) -/Parent 84 0 R -/Dest[44 0 R/XYZ null null null] +/Title (9.6 'apt-get' reports corrupted bzip2 data) +/Parent 133 0 R +/Dest[42 0 R/XYZ null null null] /Prev 138 0 R +/Next 140 0 R +>> +endobj +140 0 obj +<< +/Title (9.7 Problem: 'apt-cacher-ng' refuses to start with "Address already in use") +/Parent 133 0 R +/Dest[42 0 R/XYZ null null null] +/Prev 139 0 R +>> +endobj +141 0 obj +<< +/Title (Chapter 10: Known Bugs and Limitations) +/Parent 86 0 R +/Dest[44 0 R/XYZ null null null] +/Prev 133 0 R +/Next 142 0 R +>> +endobj +142 0 obj +<< +/Title (Chapter 11: Contact) +/Parent 86 0 R +/Dest[45 0 R/XYZ null null null] +/Prev 141 0 R >> endobj xref -0 140 +0 143 0000000000 65535 f 0000000066 00000 n 0000000184 00000 n @@ -1819,135 +1836,138 @@ 0000004711 00000 n 0000004777 00000 n 0000007218 00000 n -0000009819 00000 n -0000010067 00000 n -0000010240 00000 n -0000010306 00000 n -0000010487 00000 n -0000010668 00000 n -0000010850 00000 n -0000011031 00000 n -0000011097 00000 n -0000011462 00000 n -0000011528 00000 n -0000011594 00000 n -0000011660 00000 n -0000011726 00000 n -0000011792 00000 n -0000011858 00000 n -0000012031 00000 n -0000012213 00000 n -0000012391 00000 n -0000012457 00000 n -0000012742 00000 n -0000012808 00000 n -0000012982 00000 n -0000013164 00000 n -0000013230 00000 n -0000013515 00000 n -0000013581 00000 n -0000013647 00000 n -0000014217 00000 n -0000014306 00000 n -0000014402 00000 n -0000014498 00000 n +0000010031 00000 n +0000010196 00000 n +0000010444 00000 n +0000010617 00000 n +0000010683 00000 n +0000010864 00000 n +0000011045 00000 n +0000011227 00000 n +0000011408 00000 n +0000011474 00000 n +0000011839 00000 n +0000011905 00000 n +0000011971 00000 n +0000012037 00000 n +0000012103 00000 n +0000012169 00000 n +0000012235 00000 n +0000012408 00000 n +0000012590 00000 n +0000012768 00000 n +0000012834 00000 n +0000013119 00000 n +0000013185 00000 n +0000013359 00000 n +0000013541 00000 n +0000013607 00000 n +0000013892 00000 n +0000013958 00000 n +0000014024 00000 n 0000014594 00000 n 0000014690 00000 n 0000014786 00000 n 0000014882 00000 n 0000014978 00000 n -0000015484 00000 n -0000016390 00000 n -0000017664 00000 n -0000019454 00000 n -0000020131 00000 n -0000021876 00000 n -0000024057 00000 n -0000026871 00000 n -0000029476 00000 n -0000032547 00000 n -0000033220 00000 n -0000035823 00000 n -0000037384 00000 n -0000039424 00000 n -0000040403 00000 n -0000042750 00000 n -0000045219 00000 n -0000047892 00000 n -0000048814 00000 n -0000051031 00000 n -0000052350 00000 n -0000054446 00000 n -0000057037 00000 n -0000060039 00000 n -0000061203 00000 n -0000063331 00000 n -0000065938 00000 n -0000067910 00000 n -0000068370 00000 n -0000070056 00000 n -0000070628 00000 n -0000070770 00000 n -0000070871 00000 n -0000071000 00000 n -0000071138 00000 n -0000071311 00000 n -0000071428 00000 n -0000071545 00000 n -0000071728 00000 n -0000071835 00000 n -0000071969 00000 n -0000072131 00000 n -0000072261 00000 n -0000072395 00000 n -0000072559 00000 n -0000072686 00000 n -0000072824 00000 n -0000072961 00000 n -0000073088 00000 n -0000073280 00000 n -0000073397 00000 n -0000073519 00000 n -0000073644 00000 n -0000073768 00000 n -0000073908 00000 n -0000074036 00000 n +0000015074 00000 n +0000015170 00000 n +0000015266 00000 n +0000015362 00000 n +0000015868 00000 n +0000016777 00000 n +0000018086 00000 n +0000018274 00000 n +0000020064 00000 n +0000020741 00000 n +0000022486 00000 n +0000024667 00000 n +0000027481 00000 n +0000030087 00000 n +0000033158 00000 n +0000033831 00000 n +0000036434 00000 n +0000038429 00000 n +0000040469 00000 n +0000041449 00000 n +0000043796 00000 n +0000046265 00000 n +0000048938 00000 n +0000049860 00000 n +0000052077 00000 n +0000053396 00000 n +0000055492 00000 n +0000058084 00000 n +0000061086 00000 n +0000062249 00000 n +0000064377 00000 n +0000066984 00000 n +0000068956 00000 n +0000069415 00000 n +0000071102 00000 n +0000071674 00000 n +0000071816 00000 n +0000071917 00000 n +0000072046 00000 n +0000072184 00000 n +0000072357 00000 n +0000072474 00000 n +0000072591 00000 n +0000072774 00000 n +0000072881 00000 n +0000073015 00000 n +0000073177 00000 n +0000073307 00000 n +0000073441 00000 n +0000073606 00000 n +0000073735 00000 n +0000073875 00000 n +0000074013 00000 n 0000074154 00000 n -0000074324 00000 n -0000074476 00000 n -0000074595 00000 n -0000074734 00000 n -0000074884 00000 n -0000075016 00000 n -0000075190 00000 n -0000075304 00000 n -0000075432 00000 n -0000075557 00000 n -0000075715 00000 n -0000075884 00000 n -0000076036 00000 n -0000076182 00000 n -0000076335 00000 n -0000076503 00000 n -0000076668 00000 n -0000076835 00000 n -0000076994 00000 n -0000077112 00000 n -0000077286 00000 n -0000077395 00000 n -0000077548 00000 n -0000077716 00000 n -0000077881 00000 n -0000078044 00000 n -0000078196 00000 n -0000078367 00000 n -0000078514 00000 n +0000074271 00000 n +0000074463 00000 n +0000074580 00000 n +0000074702 00000 n +0000074827 00000 n +0000074951 00000 n +0000075091 00000 n +0000075219 00000 n +0000075337 00000 n +0000075507 00000 n +0000075659 00000 n +0000075778 00000 n +0000075917 00000 n +0000076067 00000 n +0000076199 00000 n +0000076373 00000 n +0000076487 00000 n +0000076615 00000 n +0000076740 00000 n +0000076898 00000 n +0000077067 00000 n +0000077219 00000 n +0000077365 00000 n +0000077518 00000 n +0000077686 00000 n +0000077851 00000 n +0000078018 00000 n +0000078177 00000 n +0000078295 00000 n +0000078469 00000 n +0000078578 00000 n +0000078731 00000 n +0000078899 00000 n +0000079064 00000 n +0000079227 00000 n +0000079379 00000 n +0000079550 00000 n +0000079697 00000 n trailer << -/Size 140 +/Size 143 /Root 2 0 R /Info 1 0 R >> startxref -78628 +79811 %%EOF diff -Nru apt-cacher-ng-0.6.10/doc/html/index.html apt-cacher-ng-0.6.11/doc/html/index.html --- apt-cacher-ng-0.6.10/doc/html/index.html 2011-11-19 21:51:15.000000000 +0000 +++ apt-cacher-ng-0.6.11/doc/html/index.html 2011-12-26 15:30:31.000000000 +0000 @@ -36,6 +36,7 @@
  • 5.2 Access control with libwrap
  • 5.3 Access control with inetd
  • 5.4 Access control with iptables
  • +
  • 5.5 Target port filter
  • Chapter 6: Distribution specific instructions
  • Chapter 5: Security

    @@ -84,6 +85,16 @@ iptables -A INPUT -p tcp --dport 3142 --source 192.168.0.0.0/16 -j ACCEPT iptables -A INPUT -p tcp --dport 3142 -j REJECT --reject-with tcp-reset +

    5.5 Target port filter

    +

    +In the default configuration, apt-cacher-ng restricts the choice of the target port on the remote mirror to the default HTTP port (80). This is intended to prevent creation of HTTP tunnels and similar malicious user activities. +

    +

    +Cache administrator can define an own list of allowed ports by setting them as (space separated) list with the AllowUserPorts configuration directive. +

    +

    +Alternatively, access to custom TCP ports can be established through custom remapping specification. +


    Comments to blade@debian.org
    diff -Nru apt-cacher-ng-0.6.10/doc/README apt-cacher-ng-0.6.11/doc/README --- apt-cacher-ng-0.6.10/doc/README 2011-11-26 12:10:31.000000000 +0000 +++ apt-cacher-ng-0.6.11/doc/README 2011-12-26 15:30:31.000000000 +0000 @@ -510,6 +510,20 @@ iptables -A INPUT -p tcp --dport 3142 --source 192.168.0.0.0/16 -j ACCEPT iptables -A INPUT -p tcp --dport 3142 -j REJECT --reject-with tcp-reset + 5.5 Target port filter + + In the default configuration, apt-cacher-ng restricts the choice + of the target port on the remote mirror to the default HTTP port + (80). This is intended to prevent creation of HTTP tunnels and + similar malicious user activities. + + Cache administrator can define an own list of allowed ports by + setting them as (space separated) list with the AllowUserPorts + configuration directive. + + Alternatively, access to custom TCP ports can be established through + custom remapping specification. + Chapter 6: Distribution specific instructions --------------------------------------------- diff -Nru apt-cacher-ng-0.6.10/doc/src/README.but apt-cacher-ng-0.6.11/doc/src/README.but --- apt-cacher-ng-0.6.10/doc/src/README.but 2011-11-20 21:57:20.000000000 +0000 +++ apt-cacher-ng-0.6.11/doc/src/README.but 2011-12-26 15:30:31.000000000 +0000 @@ -488,6 +488,19 @@ \c iptables -A INPUT -p tcp --dport 3142 --source 192.168.0.0.0/16 -j ACCEPT \c iptables -A INPUT -p tcp --dport 3142 -j REJECT --reject-with tcp-reset +\H{acl-tgtports} Target port filter + +In the default configuration, \e{apt-cacher-ng} restricts the choice of the +target port on the remote mirror to the default HTTP port (80). This is +intended to prevent creation of HTTP tunnels and similar malicious user +activities. + +Cache administrator can define an own list of allowed ports by setting them as +(space separated) list with the AllowUserPorts configuration directive. + +Alternatively, access to custom TCP ports can be established through custom +remapping specification. + \C{distinstructions} Distribution specific instructions \H{hin-debuntu} Debian and Ubuntu diff -Nru apt-cacher-ng-0.6.10/fs/httpfs.cc apt-cacher-ng-0.6.11/fs/httpfs.cc --- apt-cacher-ng-0.6.10/fs/httpfs.cc 2011-11-06 19:14:42.000000000 +0000 +++ apt-cacher-ng-0.6.11/fs/httpfs.cc 2011-12-08 19:30:31.000000000 +0000 @@ -749,7 +749,7 @@ static int acngfs_statfs(const char *path, struct statvfs *stbuf) { - memcpy(stbuf, &stfsTemp, sizeof(stbuf)); + memcpy(stbuf, &stfsTemp, sizeof(*stbuf)); return 0; } diff -Nru apt-cacher-ng-0.6.10/GNUmakefile apt-cacher-ng-0.6.11/GNUmakefile --- apt-cacher-ng-0.6.10/GNUmakefile 2011-10-31 20:17:18.000000000 +0000 +++ apt-cacher-ng-0.6.11/GNUmakefile 2011-12-26 15:30:31.000000000 +0000 @@ -2,7 +2,7 @@ ifneq ($(CXXFLAGS),) CMAKEOPTS += "-DCMAKE_CXX_FLAGS=$(CXXFLAGS)" else -CMAKEOPTS += "-DCMAKE_CXX_FLAGS=-g -O2 -Wall" +CMAKEOPTS += "-DCMAKE_CXX_FLAGS=-g -O3 -Wall" endif ifneq ($(LDFLAGS),) @@ -27,10 +27,11 @@ @test -d build || mkdir build @>$@ -clean: - rm -rf build $(DBTMP) +clean: build/.config-stamp + $(MAKE) -C build clean -distclean: clean +distclean: + rm -rf build $(DBTMP) doc: build/.doc-stamp build/.doc-stamp: build/.dir-stamp doc/src/README.but doc/src/manpage.but doc/src/acngfs.but doc/src/textparm.but GNUmakefile diff -Nru apt-cacher-ng-0.6.10/include/acfg.h apt-cacher-ng-0.6.11/include/acfg.h --- apt-cacher-ng-0.6.10/include/acfg.h 2011-11-19 21:20:19.000000000 +0000 +++ apt-cacher-ng-0.6.11/include/acfg.h 2011-12-08 19:30:31.000000000 +0000 @@ -60,6 +60,7 @@ { virtual void JobRelease()=0; virtual void JobConnect()=0; + virtual ~IHookHandler() {}; }; IHookHandler *m_pHooks; tStrVec m_keyfiles; diff -Nru apt-cacher-ng-0.6.10/include/config.h apt-cacher-ng-0.6.11/include/config.h --- apt-cacher-ng-0.6.10/include/config.h 2011-11-22 21:05:03.000000000 +0000 +++ apt-cacher-ng-0.6.11/include/config.h 2011-12-08 19:30:31.000000000 +0000 @@ -4,7 +4,7 @@ #include "acsyscap.h" -#define ACVERSION "0.6.10" +#define ACVERSION "0.6.11" #define __STDC_FORMAT_MACROS #include diff -Nru apt-cacher-ng-0.6.10/README apt-cacher-ng-0.6.11/README --- apt-cacher-ng-0.6.10/README 2011-11-26 12:10:31.000000000 +0000 +++ apt-cacher-ng-0.6.11/README 2011-12-26 15:30:31.000000000 +0000 @@ -510,6 +510,20 @@ iptables -A INPUT -p tcp --dport 3142 --source 192.168.0.0.0/16 -j ACCEPT iptables -A INPUT -p tcp --dport 3142 -j REJECT --reject-with tcp-reset + 5.5 Target port filter + + In the default configuration, apt-cacher-ng restricts the choice + of the target port on the remote mirror to the default HTTP port + (80). This is intended to prevent creation of HTTP tunnels and + similar malicious user activities. + + Cache administrator can define an own list of allowed ports by + setting them as (space separated) list with the AllowUserPorts + configuration directive. + + Alternatively, access to custom TCP ports can be established through + custom remapping specification. + Chapter 6: Distribution specific instructions --------------------------------------------- diff -Nru apt-cacher-ng-0.6.10/source/acfg_defaults.cc apt-cacher-ng-0.6.11/source/acfg_defaults.cc --- apt-cacher-ng-0.6.10/source/acfg_defaults.cc 2011-11-20 21:57:20.000000000 +0000 +++ apt-cacher-ng-0.6.11/source/acfg_defaults.cc 2011-12-26 15:30:31.000000000 +0000 @@ -43,7 +43,7 @@ "|products|content(\\.asc|\\.key)?|media" // opensuse 2, are they important? "|filelists\\.xml\\.gz|filelists\\.sqlite\\.bz2|repomd\\.xml" // SL, http://ra.khe.sh/computers/linux/apt-cacher-ng-with-yum.html "|packages\\.[a-zA-Z][a-zA-Z]\\.gz|info\\.txt|license\\.tar\\.gz|license\\.zip" //opensuse - "|.*\\.db\\.tar\\.gz|.*\\.files\\.tar\\.gz|.*\\.abs\\.tar\\.gz" // Arch Linux + "|.*\\.db(\\.tar\\.gz)?|.*\\.files\\.tar\\.gz|.*\\.abs\\.tar\\.gz" // Arch Linux "|metalink\\?repo|.*prestodelta\\.xml\\.gz" // fedora core, maybe... never worked reliably ")$" // end of filename paterns. Any other some specific URLs? "|/dists/.*/installer-[^/]+/[^0-9][^/]+/images/.*"); // d-i stuff but not containing a number (year) in the revision directory (like "current", "beta", ...) diff -Nru apt-cacher-ng-0.6.10/source/dlcon.cc apt-cacher-ng-0.6.11/source/dlcon.cc --- apt-cacher-ng-0.6.10/source/dlcon.cc 2011-11-06 00:06:14.000000000 +0000 +++ apt-cacher-ng-0.6.11/source/dlcon.cc 2011-12-08 19:30:31.000000000 +0000 @@ -327,8 +327,12 @@ } if (m_pStorage->m_bHeadOnly) m_DlState = STATE_FINISHJOB; - else if (NULL != (p = h.h[header::TRANSFER_ENCODING]) && 0 == strcasecmp(p, "chunked")) + else if (h.h[header::TRANSFER_ENCODING] && + 0 == strcasecmp(h.h[header::TRANSFER_ENCODING], "chunked")) + { m_DlState = STATE_GETCHUNKHEAD; + h.del(header::TRANSFER_ENCODING); // don't care anymore + } else { dbgline; diff -Nru apt-cacher-ng-0.6.10/source/header.cc apt-cacher-ng-0.6.11/source/header.cc --- apt-cacher-ng-0.6.10/source/header.cc 2011-11-06 19:14:42.000000000 +0000 +++ apt-cacher-ng-0.6.11/source/header.cc 2011-12-26 15:30:31.000000000 +0000 @@ -17,29 +17,50 @@ #include "fileio.h" #include "filereader.h" +#include + using namespace MYSTD; -struct { +#if 1 +struct eHeadPos2label +{ header::eHeadPos pos; const char *str; - } -static mapId2Headname[] = +}; + +eHeadPos2label mapId2Headname[] = { - { header::CONNECTION, "Connection"}, + { header::LAST_MODIFIED, "Last-Modified"}, { header::CONTENT_LENGTH, "Content-Length"}, + { header::CONNECTION, "Connection"}, + { header::CONTENT_TYPE, "Content-Type"}, { header::IF_MODIFIED_SINCE, "If-Modified-Since"}, { header::RANGE, "Range"}, { header::IFRANGE, "If-Range"}, { header::CONTENT_RANGE, "Content-Range"}, - { header::LAST_MODIFIED, "Last-Modified"}, { header::PROXY_CONNECTION, "Proxy-Connection"}, { header::TRANSFER_ENCODING, "Transfer-Encoding"}, - { header::XORIG, "X-Original-Source"}, { header::AUTHORIZATION, "Authorization"}, - { header::XFORWARDEDFOR, "X-Forwarded-For"}, { header::LOCATION, "Location" }, - { header::CONTENT_TYPE, "Content-Type" } + { header::XFORWARDEDFOR, "X-Forwarded-For"}, + { header::XORIG, "X-Original-Source"} }; +#endif +#if 0 // nonsense... save a penny, waste an hour +struct tHeadLabelMap +{ + class noCaseComp + { + // bool operator<(const tStringRef &a) { return strncasecmp(a.first, first, second)<0; } + }; + map, header::eHeadPos> lookup; + tHeadLabelMap() + { + //tHeadLabelMap &x=*this; + insert(make_pair(tStringRef(NAMEWLEN("foo")), header::XORIG)); + } +} label_map; +#endif header::header() : @@ -63,7 +84,7 @@ type=s.type; frontLine=s.frontLine; m_nEstimLength=s.m_nEstimLength; - for (UINT i = 0; i < HEADPOS_MAX; i++) + for (UINT i = 0; i < HEADPOS_MAX; ++i) { if (h[i]) free(h[i]); @@ -75,10 +96,7 @@ header::~header() { for(UINT i=0; istr, key, keyLen)) + continue; + UINT l=end-sep; + if( ! (h[pMap->pos] = (char*) realloc(h[pMap->pos], l+1))) + continue; + memcpy(h[pMap->pos], sep, l); + h[pMap->pos][l]='\0'; + break; } } return -2; @@ -222,13 +230,13 @@ void header::set(eHeadPos i, const char *val, size_t len) { - if (h[i]) + if(!val) { free(h[i]); h[i]=NULL; + return; } - if(val) - h[i] = (char*) malloc(len+1); + h[i] = (char*) realloc(h[i], len+1); if(h[i]) { memcpy(h[i], val, len); @@ -236,7 +244,8 @@ } } -void header::set(eHeadPos key, const MYSTD::string &value) { +void header::set(eHeadPos key, cmstring &value) +{ string::size_type l=value.size()+1; h[key]=(char*) realloc(h[key], l); if(h[key]) @@ -246,25 +255,25 @@ void header::set(eHeadPos key, off_t nValue) { char buf[3*sizeof(off_t)]; - sprintf(buf, OFF_T_FMT, nValue); - set(key, buf); + int len=sprintf(buf, OFF_T_FMT, nValue); + set(key, buf, len); } #ifndef MINIBUILD mstring header::ToString() const { - - string hstr = frontLine + "\r\n"; - for (UINT n = 0; n < _countof(mapId2Headname); n++) + string s = frontLine; + s+="\r\n"; + for(const eHeadPos2label *pMap=mapId2Headname; + pMappos]) { - hstr.append(mapId2Headname[n].str); - hstr += ": "; - hstr += h[idx]; - hstr += "\r\n"; + s += pMap->str; + s += ": "; + s += h[pMap->pos]; + s += "\r\n"; } } char buf[26]; @@ -272,10 +281,10 @@ const time_t cur = time(NULL); gmtime_r(&cur, &tmp); asctime_r(&tmp, buf); - hstr += "Date: "; - hstr.append(buf, 24); - hstr += "\r\n\r\n"; - return hstr; + s+="Date: "; + s.append(buf, 24); + s+= "\r\n\r\n"; + return s; } int header::StoreToFile(const string &sPath) const diff -Nru apt-cacher-ng-0.6.10/source/job.cc apt-cacher-ng-0.6.11/source/job.cc --- apt-cacher-ng-0.6.10/source/job.cc 2011-11-22 22:11:10.000000000 +0000 +++ apt-cacher-ng-0.6.11/source/job.cc 2011-12-08 19:30:31.000000000 +0000 @@ -885,7 +885,6 @@ if(n<0) THROW_ERROR("400 Client error"); - return R_AGAIN; } case(STATE_SEND_CHUNK_HEADER): @@ -986,39 +985,14 @@ if(respHead.type != header::ANSWER) return "500 Rotten Data"; -#if 0 // defined DEBUG - respHead.h[header::CONTENT_LENGTH]=0; - respHead.set(header::TRANSFER_ENCODING, "chunked"); -#endif - // make sure that header has consistent state and there is data to send which is expected by the client - bool bHasSendableData = false; int httpstatus = respHead.getStatus(); LOG("State: " << httpstatus); - if (!BODYFREECODE(httpstatus)) // never for not-unmodified&co. - { - bool bChunked = respHead.h[header::TRANSFER_ENCODING] && 0 == strncasecmp( respHead.h[header::TRANSFER_ENCODING], "chunk", 5); - if (httpstatus == 200) - { - if (bChunked) - { - // chunked data, usually ok... - if (respHead.h[header::CONTENT_LENGTH]) - { - aclog::err("internal error: chunked transfer encoding and content length value are both set"); - respHead.del(header::CONTENT_LENGTH); - } - bHasSendableData = true; - } - else - bHasSendableData = respHead.h[header::CONTENT_LENGTH]; - LOG("has contlen? " << bool(respHead.h[header::CONTENT_LENGTH])); - } - else if (httpstatus >= 300) - { - bHasSendableData = atoofft(respHead.h[header::CONTENT_LENGTH], 0) || bChunked; - } - } + + // nothing to send for special codes (not-unmodified&co.) or zero length bodies + bool bHasSendableData = !BODYFREECODE(httpstatus) + && atoofft(respHead.h[header::CONTENT_LENGTH], 0); + // if that's a status for object with body but contlen is missing -> use chunked mode later tSS &sb=m_sendbuf; sb.clear(); diff -Nru apt-cacher-ng-0.6.10/source/pkgimport.cc apt-cacher-ng-0.6.11/source/pkgimport.cc --- apt-cacher-ng-0.6.10/source/pkgimport.cc 2011-10-04 18:58:04.000000000 +0000 +++ apt-cacher-ng-0.6.11/source/pkgimport.cc 2011-12-18 21:02:20.000000000 +0000 @@ -89,7 +89,7 @@ /* if ( (IsIndexDiff(sPath) && fpr.ScanFile(sPath, CSTYPE_SHA1, true)) || (!IsIndexDiff(sPath) && fpr.ScanFile(sPath, CSTYPE_MD5, false))) */ - if (!fpr.ScanFile(sPath, ctp, false)) + if (!fpr.ScanFile(sPath, ctp, false, NULL)) { SendFmt() << "Error checking " << sPath << "
    \n"; continue; diff -Nru apt-cacher-ng-0.6.10/VERSION apt-cacher-ng-0.6.11/VERSION --- apt-cacher-ng-0.6.10/VERSION 2011-11-19 21:51:15.000000000 +0000 +++ apt-cacher-ng-0.6.11/VERSION 2011-12-08 19:30:31.000000000 +0000 @@ -1 +1 @@ -0.6.10 +0.6.11