]> sjero.net Git - wget/blobdiff - src/host.c
[svn] Rewrite parsing and handling of URLs.
[wget] / src / host.c
index 148ba036cec31d0e98e982b21ce99909baf7b5bc..82725d8b695b79bb324cf0b9bf47a75de744c63a 100644 (file)
@@ -1,20 +1,20 @@
 /* Dealing with host names.
    Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
 
-This file is part of Wget.
+This file is part of GNU Wget.
 
-This program is free software; you can redistribute it and/or modify
+GNU Wget is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 
-This program is distributed in the hope that it will be useful,
+GNU Wget is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
+along with Wget; if not, write to the Free Software
 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include <config.h>
@@ -34,10 +34,16 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #else
 # include <sys/socket.h>
 # include <netinet/in.h>
+#ifndef __BEOS__
 # include <arpa/inet.h>
+#endif
 # include <netdb.h>
 #endif /* WINDOWS */
 
+#ifndef NO_ADDRESS
+#define NO_ADDRESS NO_DATA
+#endif
+
 #ifdef HAVE_SYS_UTSNAME_H
 # include <sys/utsname.h>
 #endif
@@ -221,7 +227,7 @@ realhost (const char *host)
   char *master_name;
 
   DEBUGP (("Checking for %s in host_name_address_map.\n", host));
-  if (hash_table_exists (host_name_address_map, host))
+  if (hash_table_contains (host_name_address_map, host))
     {
       DEBUGP (("Found; %s was already used, by that name.\n", host));
       return xstrdup_lower (host);
@@ -272,14 +278,12 @@ same_host (const char *u1, const char *u2)
   char *real1, *real2;
 
   /* Skip protocol, if present.  */
-  u1 += skip_url (u1);
-  u2 += skip_url (u2);
-  u1 += skip_proto (u1);
-  u2 += skip_proto (u2);
+  u1 += url_skip_scheme (u1);
+  u2 += url_skip_scheme (u2);
 
   /* Skip username ans password, if present.  */
-  u1 += skip_uname (u1);
-  u2 += skip_uname (u2);
+  u1 += url_skip_uname (u1);
+  u2 += url_skip_uname (u2);
 
   for (s = u1; *u1 && *u1 != '/' && *u1 != ':'; u1++);
   p1 = strdupdelim (s, u1);
@@ -323,7 +327,7 @@ same_host (const char *u1, const char *u2)
 /* Determine whether a URL is acceptable to be followed, according to
    a list of domains to accept.  */
 int
-accept_domain (struct urlinfo *u)
+accept_domain (struct url *u)
 {
   assert (u->host != NULL);
   if (opt.domains)
@@ -362,130 +366,6 @@ sufmatch (const char **list, const char *what)
   return 0;
 }
 
-/* Return email address of the form username@FQDN suitable for
-   anonymous FTP passwords.  This process is error-prone, and the
-   escape hatch is the MY_HOST preprocessor constant, which can be
-   used to hard-code either your hostname or FQDN at compile-time.
-
-   If the FQDN cannot be determined, a warning is printed, and the
-   function returns a short `username@' form, accepted by most
-   anonymous servers.
-
-   The returned string is generated by malloc() and should be freed
-   using free().
-
-   If not even the username cannot be divined, it means things are
-   seriously fucked up, and Wget exits.  */
-char *
-ftp_getaddress (void)
-{
-  static char *address;
-
-  /* Do the drill only the first time, as it won't change.  */
-  if (!address)
-    {
-      char userid[32];         /* 9 should be enough for Unix, but
-                                  I'd rather be on the safe side.  */
-      char *host, *fqdn;
-
-      if (!pwd_cuserid (userid))
-       {
-         logprintf (LOG_ALWAYS, _("%s: Cannot determine user-id.\n"),
-                    exec_name);
-         exit (1);
-       }
-#ifdef MY_HOST
-      STRDUP_ALLOCA (host, MY_HOST);
-#else /* not MY_HOST */
-#ifdef HAVE_UNAME
-      {
-       struct utsname ubuf;
-       if (uname (&ubuf) < 0)
-         {
-           logprintf (LOG_ALWAYS, _("%s: Warning: uname failed: %s\n"),
-                      exec_name, strerror (errno));
-           fqdn = "";
-           goto giveup;
-         }
-       STRDUP_ALLOCA (host, ubuf.nodename);
-      }
-#else /* not HAVE_UNAME */
-#ifdef HAVE_GETHOSTNAME
-      host = alloca (256);
-      if (gethostname (host, 256) < 0)
-       {
-         logprintf (LOG_ALWAYS, _("%s: Warning: gethostname failed\n"),
-                    exec_name);
-         fqdn = "";
-         goto giveup;
-       }
-#else /* not HAVE_GETHOSTNAME */
- #error Cannot determine host name.
-#endif /* not HAVE_GETHOSTNAME */
-#endif /* not HAVE_UNAME */
-#endif /* not MY_HOST */
-      /* If the address we got so far contains a period, don't bother
-         anymore.  */
-      if (strchr (host, '.'))
-       fqdn = host;
-      else
-       {
-         /* #### I've seen the following scheme fail on at least one
-            system!  Do we care?  */
-         char *tmpstore;
-         /* According to Richard Stevens, the correct way to find the
-            FQDN is to (1) find the host name, (2) find its IP
-            address using gethostbyname(), and (3) get the FQDN using
-            gethostbyaddr().  So that's what we'll do.  Step one has
-            been done above.  */
-         /* (2) */
-         struct hostent *hp = gethostbyname (host);
-         if (!hp || !hp->h_addr_list)
-           {
-             logprintf (LOG_ALWAYS, _("\
-%s: Warning: cannot determine local IP address.\n"),
-                        exec_name);
-             fqdn = "";
-             goto giveup;
-           }
-         /* Copy the argument, so the call to gethostbyaddr doesn't
-            clobber it -- just in case.  */
-         tmpstore = (char *)alloca (hp->h_length);
-         memcpy (tmpstore, *hp->h_addr_list, hp->h_length);
-         /* (3) */
-         hp = gethostbyaddr (tmpstore, hp->h_length, hp->h_addrtype);
-         if (!hp || !hp->h_name)
-           {
-             logprintf (LOG_ALWAYS, _("\
-%s: Warning: cannot reverse-lookup local IP address.\n"),
-                        exec_name);
-             fqdn = "";
-             goto giveup;
-           }
-         if (!strchr (hp->h_name, '.'))
-           {
-#if 0
-             /* This gets ticked pretty often.  Karl Berry reports
-                 that there can be valid reasons for the local host
-                 name not to be an FQDN, so I've decided to remove the
-                 annoying warning.  */
-             logprintf (LOG_ALWAYS, _("\
-%s: Warning: reverse-lookup of local address did not yield FQDN!\n"),
-                      exec_name);
-#endif
-             fqdn = "";
-             goto giveup;
-           }
-         /* Once we're here, hp->h_name contains the correct FQDN.  */
-         STRDUP_ALLOCA (fqdn, hp->h_name);
-       }
-    giveup:
-      address = (char *)xmalloc (strlen (userid) + 1 + strlen (fqdn) + 1);
-      sprintf (address, "%s@%s", userid, fqdn);
-    }
-  return address;
-}
-
 /* Print error messages for host errors.  */
 char *
 herrmsg (int error)