aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2004-10-06 23:51:21 +0000
committerKen Raeburn <raeburn@mit.edu>2004-10-06 23:51:21 +0000
commit054856b97becdce9591dfb470eb1e53016006d82 (patch)
tree09be0025423b3b7ad42961ecbd47be22b151b5ff
parent2104847a26d384bb50d474a108c3997c453d5a3d (diff)
downloadkrb5-054856b97becdce9591dfb470eb1e53016006d82.zip
krb5-054856b97becdce9591dfb470eb1e53016006d82.tar.gz
krb5-054856b97becdce9591dfb470eb1e53016006d82.tar.bz2
* localaddr.c (print_addr): If getnameinfo returns EAI_SYSTEM, report what the
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
-rw-r--r--src/lib/krb5/os/ChangeLog2
-rw-r--r--src/lib/krb5/os/localaddr.c13
2 files changed, 10 insertions, 5 deletions
diff --git a/src/lib/krb5/os/ChangeLog b/src/lib/krb5/os/ChangeLog
index 1258c91..f75f0c0 100644
--- a/src/lib/krb5/os/ChangeLog
+++ b/src/lib/krb5/os/ChangeLog
@@ -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.
diff --git a/src/lib/krb5/os/localaddr.c b/src/lib/krb5/os/localaddr.c
index 9132466..9af5a5e 100644
--- a/src/lib/krb5/os/localaddr.c
+++ b/src/lib/krb5/os/localaddr.c
@@ -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;
}