summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>1999-10-17 07:16:32 +0000
committerKen Raeburn <raeburn@mit.edu>1999-10-17 07:16:32 +0000
commitedd7d0bd06393e75488d196219cb23228a911dbd (patch)
tree360dcd9c5aec3391a4de194bc887340f1212a40e /src
parenta2f39dd545c470fa892736da884eb93bbfb0aaec (diff)
downloadkrb5-edd7d0bd06393e75488d196219cb23228a911dbd.tar.gz
krb5-edd7d0bd06393e75488d196219cb23228a911dbd.tar.xz
krb5-edd7d0bd06393e75488d196219cb23228a911dbd.zip
* localaddr.c (krb5_os_localaddr): Raise buffer size to 10K. Handle INET6
addresses. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@11863 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/krb5/os/ChangeLog5
-rw-r--r--src/lib/krb5/os/localaddr.c42
2 files changed, 43 insertions, 4 deletions
diff --git a/src/lib/krb5/os/ChangeLog b/src/lib/krb5/os/ChangeLog
index 208125a8d..fb2461596 100644
--- a/src/lib/krb5/os/ChangeLog
+++ b/src/lib/krb5/os/ChangeLog
@@ -1,3 +1,8 @@
+1999-10-17 Ken Raeburn <raeburn@raeburn.org>
+
+ * localaddr.c (krb5_os_localaddr): Raise buffer size to 10K.
+ Handle INET6 addresses.
+
1999-09-28 Ken Raeburn <raeburn@mit.edu>
* changepw.c (krb5_locate_kpasswd): Declare local variable i even
diff --git a/src/lib/krb5/os/localaddr.c b/src/lib/krb5/os/localaddr.c
index 5c5a27334..c4d4986e3 100644
--- a/src/lib/krb5/os/localaddr.c
+++ b/src/lib/krb5/os/localaddr.c
@@ -54,7 +54,11 @@
#include <netinet/in.h>
#ifndef USE_AF
+#ifdef AF_INET6
+#define USE_AF AF_INET6
+#else
#define USE_AF AF_INET
+#endif
#define USE_TYPE SOCK_DGRAM
#define USE_PROTO 0
#endif
@@ -115,8 +119,8 @@ krb5_os_localaddr(context, addr)
struct ifreq *ifr, ifreq;
struct ifconf ifc;
int s, code, n, i;
- char buf[1024];
- krb5_address *addr_temp [ 1024/sizeof(struct ifreq) ];
+ char buf[1024*10];
+ krb5_address *addr_temp [ sizeof(buf)/sizeof(struct ifreq) ];
int n_found;
int mem_err = 0;
@@ -181,9 +185,39 @@ n_found = 0;
}
} else mem_err++;
}
-#endif
+#ifdef AF_INET6
+ case AF_INET6:
+ {
+ struct sockaddr_in6 *in =
+ (struct sockaddr_in6 *)&ifr->ifr_addr;
+
+ if (IN6_IS_ADDR_LINKLOCAL (&in->sin6_addr))
+ continue;
+
+ address = (krb5_address *)
+ malloc (sizeof(krb5_address));
+ if (address) {
+ address->magic = KV5M_ADDRESS;
+ address->addrtype = ADDRTYPE_INET6;
+ address->length = sizeof(struct in6_addr);
+ address->contents = (unsigned char *)malloc(address->length);
+ if (!address->contents) {
+ krb5_xfree(address);
+ address = 0;
+ mem_err++;
+ } else {
+ memcpy ((char *)address->contents,
+ (char *)&in->sin6_addr,
+ address->length);
+ break;
+ }
+ } else mem_err++;
+ }
+#endif /* AF_INET6 */
+#endif /* netinet/in.h */
+
#ifdef KRB5_USE_NS
- case AF_XNS:
+ case AF_XNS:
{
struct sockaddr_ns *ns =
(struct sockaddr_ns *)&ifr->ifr_addr;