Procházet zdrojové kódy

Alfredo's no_proxy patch
Author: jgg
Date: 2001-02-23 05:45:27 GMT
Alfredo's no_proxy patch

Arch Librarian před 22 roky
rodič
revize
f8081133c5
5 změnil soubory, kde provedl 51 přidání a 23 odebrání
  1. 25 1
      apt-pkg/contrib/strutl.cc
  2. 2 1
      apt-pkg/contrib/strutl.h
  3. 1 0
      debian/changelog
  4. 17 1
      methods/ftp.cc
  5. 6 20
      methods/http.cc

+ 25 - 1
apt-pkg/contrib/strutl.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: strutl.cc,v 1.35 2001/02/20 07:03:17 jgg Exp $
+// $Id: strutl.cc,v 1.36 2001/02/23 05:45:27 jgg Exp $
 /* ######################################################################
 
    String Util - Some useful string functions.
@@ -880,6 +880,30 @@ void ioprintf(ostream &out,const char *format,...)
 }
 									/*}}}*/
 
+// CheckDomainList - See if Host is in a , seperate list		/*{{{*/
+// ---------------------------------------------------------------------
+/* The domain list is a comma seperate list of domains that are suffix
+   matched against the argument */
+bool CheckDomainList(string Host,string List)
+{
+   const char *Start = List.begin();
+   for (const char *Cur = List.begin(); Cur <= List.end() ; Cur++)
+   {
+      if (Cur < List.end() && *Cur != ',')
+	 continue;
+      
+      // Match the end of the string..
+      if ((Host.size() >= (Cur - List.begin())) &&
+	  Cur - Start != 0 &&
+	  stringcasecmp(Host.end() - (Cur - Start),Host.end(),Start,Cur) == 0)
+	 return true;
+      
+      Start = Cur + 1;
+   }
+   return false;
+}
+									/*}}}*/
+
 // URI::CopyFrom - Copy from an object					/*{{{*/
 // ---------------------------------------------------------------------
 /* This parses the URI into all of its components */

+ 2 - 1
apt-pkg/contrib/strutl.h

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: strutl.h,v 1.16 2001/02/20 07:03:17 jgg Exp $
+// $Id: strutl.h,v 1.17 2001/02/23 05:45:27 jgg Exp $
 /* ######################################################################
 
    String Util - These are some useful string functions
@@ -53,6 +53,7 @@ bool Hex2Num(const char *Start,const char *End,unsigned char *Num,
 bool TokSplitString(char Tok,char *Input,char **List,
 		    unsigned long ListMax);
 void ioprintf(ostream &out,const char *format,...) APT_FORMAT2;
+bool CheckDomainList(string Host,string List);
 
 int stringcmp(const char *A,const char *AEnd,const char *B,const char *BEnd);
 inline int stringcmp(const char *A,const char *AEnd,const char *B) {return stringcmp(A,AEnd,B,B+strlen(B));};

+ 1 - 0
debian/changelog

@@ -2,6 +2,7 @@ apt (0.5.1) unstable; urgency=low
 
   * Fixed #82894 again, or should be and.
   * Process the option string right. Closes: #86921
+  * Alfredo's no_proxy patch
   
  -- Jason Gunthorpe <jgg@debian.org>  Thu, 22 Feb 2001 00:39:15 -0500
 

+ 17 - 1
methods/ftp.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: ftp.cc,v 1.21 2001/02/20 07:03:18 jgg Exp $
+// $Id: ftp.cc,v 1.22 2001/02/23 05:45:27 jgg Exp $
 /* ######################################################################
 
    HTTP Aquire Method - This is the FTP aquire method for APT.
@@ -125,6 +125,13 @@ bool FTPConn::Open(pkgAcqMethod *Owner)
    else
       Proxy = getenv("ftp_proxy");
    
+   // Parse no_proxy, a , separated list of domains
+   if (getenv("no_proxy") != 0)
+   {
+      if (CheckDomainList(ServerName.Host,getenv("no_proxy")) == true)
+	 Proxy = "";
+   }
+   
    // Determine what host and port to use based on the proxy settings
    int Port = 0;
    string Host;   
@@ -1071,6 +1078,15 @@ int main(int argc,const char *argv[])
    if (getenv("ftp_proxy") != 0)
    {
       URI Proxy = string(getenv("ftp_proxy"));
+      
+      // Parse no_proxy, a , separated list of domains
+      if (getenv("no_proxy") != 0)
+      {
+	 if (CheckDomainList(Proxy.Host,getenv("no_proxy")) == true)
+	    Proxy.Access = "";
+      }
+      
+      // Run the HTTP method
       if (Proxy.Access == "http")
       {
 	 // Copy over the environment setting

+ 6 - 20
methods/http.cc

@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description								/*{{{*/
-// $Id: http.cc,v 1.47 2001/02/20 07:03:18 jgg Exp $
+// $Id: http.cc,v 1.48 2001/02/23 05:45:27 jgg Exp $
 /* ######################################################################
 
    HTTP Aquire Method - This is the HTTP aquire method for APT.
@@ -285,27 +285,13 @@ bool ServerState::Open()
    else
       Proxy = getenv("http_proxy");
    
-   // Parse no_proxy, a , separated list of hosts
+   // Parse no_proxy, a , separated list of domains
    if (getenv("no_proxy") != 0)
    {
-      const char *Start = getenv("no_proxy");
-      for (const char *Cur = Start; true ; Cur++)
-      {
-	 if (*Cur != ',' && *Cur != 0)
-	    continue;
-	 if (stringcasecmp(ServerName.Host.begin(),ServerName.Host.end(),
-			   Start,Cur) == 0)
-	 {
-	    Proxy = "";
-	    break;
-	 }
-	 
-	 Start = Cur + 1;
-	 if (*Cur == 0)
-	    break;
-      }	 
-   }      
-
+      if (CheckDomainList(ServerName.Host,getenv("no_proxy")) == true)
+	 Proxy = "";
+   }
+   
    // Determine what host and port to use based on the proxy settings
    int Port = 0;
    string Host;