Subject: pkg/22475: patch to get net/ipw mostly working again
To: None <gnats-bugs@gnats.netbsd.org>
From: None <gcw@primenet.com.au>
List: netbsd-bugs
Date: 08/14/2003 18:22:29
>Number:         22475
>Category:       pkg
>Synopsis:       get net/ipw mostly working again
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Aug 14 08:23:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Geoff C. Wing
>Release:        NetBSD 1.6W
>Organization:
Geoff Wing : <gcw@pobox.com>
Rxvt Stuff : <gcw@rxvt.org>
Zsh Stuff  : <gcw@zsh.org>
>Environment:
System: NetBSD g.primenet.com.au 1.6W NetBSD 1.6W (G) #0: Mon Aug 4 10:11:19 EST 2003 gcw@g.primenet.com.au:/usr/netbsd/src/sys/arch/i386/compile/G i386
Architecture: i386
Machine: i386
>Description:
	Due to changes in ARIN whois response (around a year ago), the ipw
	package has been (mostly) useless since then.  The patch provides
	basic functionality again.

>How-To-Repeat:
	
>Fix:
--- ipw.c.orig	1999-03-30 17:04:12.000000000 +1000
+++ ipw.c	2003-08-14 18:08:26.000000000 +1000
@@ -782,7 +782,7 @@
   if (!p)
     return NULL;
 
-  for (q = p + rwhois_prefix_len; *q && !isspace (*q); q++)
+  for (q = p + rwhois_prefix_len; *q && !isspace (*q) && *q != ':'; q++)
     continue;
   srvr_len = q - p;
   server = (char *) xmalloc (srvr_len + 1);
@@ -1745,14 +1745,14 @@
     {
       static char const ripe1[] = "European Regional Internet Registry/RIPE";
       static char const ripe2[] = "RIPE NCC (NET-RIPE-NCC-";
-      static char const apnic[] = "Asia Pacific Network Information Center";
+      static char const apnic[] = "Asia Pacific Network Information Centre";
       static char const nomatch[] = "No match";
       static char const updated[] = "Record last updated on ";
       static char const hostname[] = "Hostname:";
       auto char arin_query[200];
 
 try_next_addr:
-      strcpy (arin_query, "net ");
+      strcpy (arin_query, "n ");
       strcat (arin_query, dotted_blockname);
       whois_data = whois (arin_server, arin_query);
       if (whois_data == NULL)  /* Server must be down!  */
@@ -1760,8 +1760,15 @@
       if (strncmp (whois_data, nomatch, sizeof nomatch -1))
 	{
 	  register char const *rwhois_data;
+	  char const *orgname = strstr (whois_data, "OrgName:");
 
-          if (!strncmp (whois_data, ripe1, sizeof ripe1 - 1))
+	  if (orgname)
+	    {
+	      orgname += sizeof "OrgName:";
+	      while (isspace (*orgname))
+		orgname++;
+	    }
+          if (orgname && !strncmp (orgname, ripe1, sizeof ripe1 - 1))
 	    {
               if (try_ripe (dotted_quad))
                 break;
@@ -1769,7 +1776,7 @@
                 return 0;
 	    }
 
-          if (!strncmp (whois_data, ripe2, sizeof ripe2 - 1))
+          if (orgname && !strncmp (orgname, ripe2, sizeof ripe2 - 1))
 	    {
               if (try_ripe (dotted_quad))
                 break;
@@ -1777,7 +1784,7 @@
                 return 0;
 	    }
 
-          if (!strncmp (whois_data, apnic, sizeof apnic - 1))
+          if (orgname && !strncmp (orgname, apnic, sizeof apnic - 1))
 	    {
               if (try_apnic (dotted_quad))
                 break;
@@ -1802,6 +1809,7 @@
 	      goto try_next_addr;
 	    }
 
+#if 0	/* needs fixing */
           if (!substr (whois_data, updated))
             {
               /* Handle a special case.  ARIN has returned to us a list of
@@ -1813,6 +1821,7 @@
               if ((whois_data = arin_grunge (whois_data, addr)) == NULL)
 		return 1;
             }
+#endif
 	  if ((rwhois_data = fetch_rwhois_data (whois_data, dotted_quad)))
 	    return present_rwhois_style_results (rwhois_data, whois_data);
 	  else
>Release-Note:
>Audit-Trail:
>Unformatted: