Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/ftp Separate no_proxy handling.



details:   https://anonhg.NetBSD.org/src/rev/f96e78a81a37
branches:  trunk
changeset: 342301:f96e78a81a37
user:      christos <christos%NetBSD.org@localhost>
date:      Tue Dec 15 21:01:27 2015 +0000

description:
Separate no_proxy handling.

diffstat:

 usr.bin/ftp/fetch.c |  84 +++++++++++++++++++++++++++++-----------------------
 1 files changed, 46 insertions(+), 38 deletions(-)

diffs (115 lines):

diff -r 61b655a65041 -r f96e78a81a37 usr.bin/ftp/fetch.c
--- a/usr.bin/ftp/fetch.c       Tue Dec 15 20:49:49 2015 +0000
+++ b/usr.bin/ftp/fetch.c       Tue Dec 15 21:01:27 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: fetch.c,v 1.210 2015/12/15 20:49:49 christos Exp $     */
+/*     $NetBSD: fetch.c,v 1.211 2015/12/15 21:01:27 christos Exp $     */
 
 /*-
  * Copyright (c) 1997-2015 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: fetch.c,v 1.210 2015/12/15 20:49:49 christos Exp $");
+__RCSID("$NetBSD: fetch.c,v 1.211 2015/12/15 21:01:27 christos Exp $");
 #endif /* not lint */
 
 /*
@@ -566,6 +566,45 @@
        return s;
 }
 
+static int
+handle_noproxy(const char *host, in_port_t portnum)
+{
+
+       char *cp, *ep, *np, *np_copy, *np_iter, *no_proxy;
+       unsigned long np_port;
+       size_t hlen, plen;
+       int isproxy = 1;
+
+       /* check URL against list of no_proxied sites */
+       no_proxy = getoptionvalue("no_proxy");
+       if (EMPTYSTRING(no_proxy))
+               return isproxy;
+
+       np_iter = np_copy = ftp_strdup(no_proxy);
+       hlen = strlen(host);
+       while ((cp = strsep(&np_iter, " ,")) != NULL) {
+               if (*cp == '\0')
+                       continue;
+               if ((np = strrchr(cp, ':')) != NULL) {
+                       *np++ =  '\0';
+                       np_port = strtoul(np, &ep, 10);
+                       if (*np == '\0' || *ep != '\0')
+                               continue;
+                       if (np_port != portnum)
+                               continue;
+               }
+               plen = strlen(cp);
+               if (hlen < plen)
+                       continue;
+               if (strncasecmp(host + hlen - plen, cp, plen) == 0) {
+                       isproxy = 0;
+                       break;
+               }
+       }
+       FREEPTR(np_copy);
+       return isproxy;
+}
+
 /*
  * Retrieve URL, via a proxy if necessary, using HTTP.
  * If proxyenv is set, use that for the proxy, otherwise try ftp_proxy or
@@ -726,45 +765,14 @@
                if (! EMPTYSTRING(penv)) {                      /* use proxy */
                        url_t purltype;
                        char *phost, *ppath;
-                       char *pport, *no_proxy;
+                       char *pport;
                        in_port_t pportnum;
 
-                       isproxy = 1;
-
-                               /* check URL against list of no_proxied sites */
-                       no_proxy = getoptionvalue("no_proxy");
-                       if (! EMPTYSTRING(no_proxy)) {
-                               char *np, *np_copy, *np_iter;
-                               unsigned long np_port;
-                               size_t hlen, plen;
+                       isproxy = handle_noproxy(host, portnum);
 
-                               np_iter = np_copy = ftp_strdup(no_proxy);
-                               hlen = strlen(host);
-                               while ((cp = strsep(&np_iter, " ,")) != NULL) {
-                                       if (*cp == '\0')
-                                               continue;
-                                       if ((np = strrchr(cp, ':')) != NULL) {
-                                               *np++ =  '\0';
-                                               np_port = strtoul(np, &ep, 10);
-                                               if (*np == '\0' || *ep != '\0')
-                                                       continue;
-                                               if (np_port != portnum)
-                                                       continue;
-                                       }
-                                       plen = strlen(cp);
-                                       if (hlen < plen)
-                                               continue;
-                                       if (strncasecmp(host + hlen - plen,
-                                           cp, plen) == 0) {
-                                               isproxy = 0;
-                                               break;
-                                       }
-                               }
-                               FREEPTR(np_copy);
-                               if (isproxy == 0 && urltype == FTP_URL_T) {
-                                       rval = fetch_ftp(url);
-                                       goto cleanup_fetch_url;
-                               }
+                       if (isproxy == 0 && urltype == FTP_URL_T) {
+                               rval = fetch_ftp(url);
+                               goto cleanup_fetch_url;
                        }
 
                        if (isproxy) {



Home | Main Index | Thread Index | Old Index