diff options
-rw-r--r-- | apt-pkg/contrib/strutl.cc | 26 | ||||
-rw-r--r-- | apt-pkg/contrib/strutl.h | 3 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | methods/ftp.cc | 18 | ||||
-rw-r--r-- | methods/http.cc | 26 |
5 files changed, 51 insertions, 23 deletions
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index c1a1cb4db..7175402a7 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/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 */ diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 5549673a1..88f9a5013 100644 --- a/apt-pkg/contrib/strutl.h +++ b/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));}; diff --git a/debian/changelog b/debian/changelog index df46e3d9e..309723246 100644 --- a/debian/changelog +++ b/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 diff --git a/methods/ftp.cc b/methods/ftp.cc index 0d617dd8f..e0f71239f 100644 --- a/methods/ftp.cc +++ b/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 diff --git a/methods/http.cc b/methods/http.cc index 7347e8349..9f4494dc7 100644 --- a/methods/http.cc +++ b/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; |