* localaddr.c (krb5_crypto_os_localaddr): Don't bash the return
authorTom Yu <tlyu@mit.edu>
Sat, 29 Jul 1995 08:25:53 +0000 (08:25 +0000)
committerTom Yu <tlyu@mit.edu>
Sat, 29 Jul 1995 08:25:53 +0000 (08:25 +0000)
from SIOCGIFCONF with the output of a SIOCGIFFLAGS.  Duh.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6356 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/crypto/os/ChangeLog
src/lib/crypto/os/localaddr.c

index 73381f574e40a40eb6186c127cbc698638cab6b0..a054acb27aa555c7f8ea03d509c2fc8b3d4bc7c3 100644 (file)
@@ -1,3 +1,8 @@
+Sat Jul 29 03:17:21 1995  Tom Yu  <tlyu@lothlorien.MIT.EDU>
+
+       * localaddr.c (krb5_crypto_os_localaddr): Don't bash the return
+               from SIOCGIFCONF with the output of a SIOCGIFFLAGS.  Duh.
+
 Wed Jul 19 17:17:54 1995  Tom Yu  <tlyu@lothlorien.MIT.EDU>
 
        * localaddr.c: also add definition of max if it's not there.
index 2fcb964123a1c7c861f31efa2b700634e1f07197..7ab153a8a79fb120febb4573fb2ea431b29adc06 100644 (file)
@@ -75,7 +75,8 @@
  */
 
 /*
- * BSD 4.4 defines the size of an ifreq to be max(sizeof(ifreq), sizeof(ifr.ifr_name)+ifreq.ifr_ifr_addr.sa_len
+ * BSD 4.4 defines the size of an ifreq to be
+ * max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len
  * However, under earlier systems, sa_len isn't present, so the size is 
  * just sizeof(struct ifreq)
  */
@@ -108,7 +109,7 @@ krb5_error_code INTERFACE
 krb5_crypto_os_localaddr(addr)
     krb5_address ***addr;
 {
-    struct ifreq *ifr;
+    struct ifreq *ifr, ifreq;
     struct ifconf ifc;
     int s, code, n, i;
     char buf[1024];
@@ -135,23 +136,20 @@ n_found = 0;
     for (i = 0; i < n; i+= ifreq_size(*ifr) ) {
        krb5_address *address;
        ifr = (struct ifreq *)((caddr_t) ifc.ifc_buf+i);
-       
-       if (ioctl (s, SIOCGIFFLAGS, (char *)ifr) < 0)
+
+       strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof (ifreq.ifr_name));
+       if (ioctl (s, SIOCGIFFLAGS, (char *)&ifreq) < 0)
            continue;
 
 #ifdef IFF_LOOPBACK
-       if (ifr->ifr_flags & IFF_LOOPBACK) 
+       if (ifreq.ifr_flags & IFF_LOOPBACK) 
            continue;
 #endif
 
-       if (!(ifr->ifr_flags & IFF_UP)) 
+       if (!(ifreq.ifr_flags & IFF_UP)) 
            /* interface is down; skip */
            continue;
 
-       if (ioctl (s, SIOCGIFADDR, (char *)ifr) < 0)
-           /* can't get address */
-           continue;
-
        /* ifr->ifr_addr has what we want! */
        switch (ifr->ifr_addr.sa_family) {
 #ifdef KRB5_USE_INET
@@ -183,7 +181,7 @@ n_found = 0;
            case AF_XNS:
            {  
                struct sockaddr_ns *ns =
-                   (struct sockaddr_ns *)&ifr->ifr_addr;                   
+                   (struct sockaddr_ns *)&ifr->ifr_addr;
                address = (krb5_address *)
                    malloc (sizeof (krb5_address) + sizeof (struct ns_addr));
                if (address) {