Package: apt-cacher
Version: 1.5.3
Severity: wishlist
Tags: patch

Because I use it to 'transport' packages to locations without network, I
need to be able to run apt-cacher in offline mode for certain hosts;
though the need occurs only at times during which other clients won't be
making requests, it is impractical to change the configuration all the
time.

Below is a patch to add a offline_hosts/offline_hosts_6 setting to both
the man-page and the script itself. Sorry about the messed-up diff
paths, I wasn't working against the source package, if you want I can
regenerate them.

offline_hosts=* isn't supported because that would be almost identical
to setting offline_mode=1 (unless you used a different offline_hosts and
offline_hosts_6 setting) so that didn't seem to make sense.

--- apt-cacher.1.orig   2006-06-18 13:01:51.989079705 +0200
+++ apt-cacher.1        2006-06-18 13:06:20.079079705 +0200
@@ -111,6 +111,15 @@
 Avoid any outgoing connection, return files available in the cache and just
 return errors if they are missing.
 .TP
+.B offline_hosts
+For hosts listed in this list, behave as if offline_mode was set when they
+start a request. If another request for the same file is already running, they
+can piggyback on it, but they can't start new requests. Setting this list to *
+is not supported, use offline_mode.
+.TP
+.B offline_hosts_6
+Like offline_hosts for IPv6.
+.TP
 .B admin_email [EMAIL PROTECTED]
 The email address of the administrator is displayed in the info page
 and traffic reports.
--- apt-cacher.orig     2006-06-18 12:44:05.979079705 +0200
+++ apt-cacher  2006-06-18 13:00:42.599079705 +0200
@@ -429,6 +429,8 @@
 
 sub handle_connection {
     # now begin connection's personal stuff
+    my $offline_mode = $$cfg{offline_mode};
+
     debug_message("New HTTP connection open");
     
     if($direct_mode) {
@@ -477,6 +479,10 @@
                 ipv6_addr_in_list ($clientaddr, 'allowed_hosts_6');
                 $ip_fail = ipv6_addr_in_list ($clientaddr, 'denied_hosts_6');
             }
+            if (!$offline_mode)
+            {
+                $offline_mode = ipv6_addr_in_list ($clientaddr, 
'offline_hosts_6');
+            }
         }
         elsif (defined ($clientaddr = ipv4_normalise ($client))) # IPv4?
         {
@@ -491,6 +497,10 @@
                 ipv4_addr_in_list ($clientaddr, 'allowed_hosts');
                 $ip_fail = ipv4_addr_in_list ($clientaddr, 'denied_hosts');
             }
+            if (!$offline_mode)
+            {
+                $offline_mode = ipv4_addr_in_list ($clientaddr, 
'offline_hosts');
+            }
         }
         else
         {
@@ -689,7 +699,7 @@
         if ($is_index_file) {
             debug_message("known as index file: $filename");
             # in offline mode, deliver it as-is, otherwise check freshness
-            if (-f $cached_file && -f $cached_head && !$$cfg{offline_mode}) {
+            if (-f $cached_file && -f $cached_head && !$offline_mode) {
                 if($$cfg{expire_hours} > 0) {
                     my $now = time();
                     my @stat = stat($cached_file);
@@ -787,7 +797,7 @@
         }
         else {
             # bypass for offline mode, no forking, just report the "problem"
-            if($$cfg{offline_mode})
+            if($offline_mode)
             {
                 &sendrsp(503, "Apt-Cacher in Offline Mode");
                 next REQUEST;




-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to