summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorTom Yu <tlyu@mit.edu>1995-07-29 08:25:53 +0000
committerTom Yu <tlyu@mit.edu>1995-07-29 08:25:53 +0000
commite413b4ce15cf61c0d959344b945b3229adfd782f (patch)
tree03dc9934cf04545ad51bd120aabe6a4270eac704 /src/lib
parent92296ff3d57b2241cdb14b5337646714f89466f6 (diff)
* localaddr.c (krb5_crypto_os_localaddr): Don't bash the return
from SIOCGIFCONF with the output of a SIOCGIFFLAGS. Duh. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6356 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/crypto/os/ChangeLog5
-rw-r--r--src/lib/crypto/os/localaddr.c20
2 files changed, 14 insertions, 11 deletions
diff --git a/src/lib/crypto/os/ChangeLog b/src/lib/crypto/os/ChangeLog
index 73381f574..a054acb27 100644
--- a/src/lib/crypto/os/ChangeLog
+++ b/src/lib/crypto/os/ChangeLog
@@ -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.
diff --git a/src/lib/crypto/os/localaddr.c b/src/lib/crypto/os/localaddr.c
index 2fcb96412..7ab153a8a 100644
--- a/src/lib/crypto/os/localaddr.c
+++ b/src/lib/crypto/os/localaddr.c
@@ -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) {