* localaddr.c (print_addr): If getnameinfo returns EAI_SYSTEM, report what the
authorKen Raeburn <raeburn@mit.edu>
Wed, 6 Oct 2004 23:51:21 +0000 (23:51 +0000)
committerKen Raeburn <raeburn@mit.edu>
Wed, 6 Oct 2004 23:51:21 +0000 (23:51 +0000)
system error is.

Also fix a fencepost error in the last change.

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

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

index 1258c91511fe4f53f952f9424e063cf0ed33717d..f75f0c053fe6109ed294016660028ec2cb44e354 100644 (file)
@@ -3,6 +3,8 @@
        * localaddr.c (foreach_localaddr): Be more careful not to walk
        past the end of the ifreq array.
        (get_ifreq_array): Return 0 in success case, not errno.
+       (print_addr): If getnameinfo returns EAI_SYSTEM, report what the
+       system error is.
 
        * localaddr.c (get_ifreq_array): Split out from foreach_localaddr
        general version.
index 91324660b94f02e70c05073a439109820ef10f8a..9af5a5ed2811434bb9401a0c9bea2eaaca6b8ede 100644 (file)
@@ -955,10 +955,10 @@ foreach_localaddr (/*@null@*/ void *data,
        The Samba mailing list archives mention that NTP looks for the
        size on these systems: *-fujitsu-uxp* *-ncr-sysv4*
        *-univel-sysv*.  */
-    for (i = 0; i + sizeof(struct ifreq) < n; i+= ifreq_size(*ifr) ) {
+    for (i = 0; i + sizeof(struct ifreq) <= n; i+= ifreq_size(*ifr) ) {
        ifr = (struct ifreq *)((caddr_t) buf+i);
        /* In case ifreq_size is more than sizeof().  */
-       if (i + ifreq_size(*ifr) >= n)
+       if (i + ifreq_size(*ifr) > n)
          break;
 
        strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof (ifreq.ifr_name));
@@ -1022,7 +1022,7 @@ foreach_localaddr (/*@null@*/ void *data,
     /*@=moduncon@*/
 
     if (pass2fn) {
-       for (i = 0; i < n; i+= ifreq_size(*ifr) ) {
+       for (i = 0; i + sizeof(struct ifreq) <= n; i+= ifreq_size(*ifr) ) {
            ifr = (struct ifreq *)((caddr_t) buf+i);
 
            if (ifr->ifr_name[0] == '\0')
@@ -1074,9 +1074,12 @@ static int print_addr (/*@unused@*/ void *dataptr, struct sockaddr *sa)
     len = socklen (sa);
     err = getnameinfo (sa, len, hostbuf, (socklen_t) sizeof (hostbuf),
                       (char *) NULL, 0, NI_NUMERICHOST);
-    if (err)
+    if (err) {
+       int e = errno;
        printf ("<getnameinfo error %d: %s>\n", err, gai_strerror (err));
-    else
+       if (err == EAI_SYSTEM)
+           printf ("\t\t<errno is %d: %s>\n", e, strerror(e));
+    } else
        printf ("addr %s\n", hostbuf);
     return 0;
 }