summaryrefslogtreecommitdiff
path: root/sbin/isakmpd/if.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/isakmpd/if.c')
-rw-r--r--sbin/isakmpd/if.c149
1 files changed, 71 insertions, 78 deletions
diff --git a/sbin/isakmpd/if.c b/sbin/isakmpd/if.c
index ab6cd66bcc2..52bd4ec1905 100644
--- a/sbin/isakmpd/if.c
+++ b/sbin/isakmpd/if.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if.c,v 1.18 2004/04/13 21:48:15 hshoexer Exp $ */
+/* $OpenBSD: if.c,v 1.19 2004/04/15 18:39:25 deraadt Exp $ */
/* $EOM: if.c,v 1.12 1999/10/01 13:45:20 niklas Exp $ */
/*
@@ -59,96 +59,89 @@
* Return 0 if successful, -1 otherwise.
*/
int
-siocgifconf (struct ifconf *ifcp)
+siocgifconf(struct ifconf *ifcp)
{
- int s;
- int len;
- caddr_t buf, new_buf;
-
- /* Get a socket to ask for the network interface configurations. */
- s = monitor_socket (AF_INET, SOCK_DGRAM, 0);
- if (s == -1)
- {
- log_error ("siocgifconf: socket (AF_INET, SOCK_DGRAM, 0) failed");
- return -1;
- }
-
- len = sizeof (struct ifreq) * INITIAL_IFREQ_COUNT;
- buf = 0;
- while (1)
- {
- /*
- * Allocate a larger buffer each time around the loop and get the
- * network interfaces configurations into it.
- */
- new_buf = realloc (buf, len);
- if (!new_buf)
- {
- log_error ("siocgifconf: realloc (%p, %d) failed", buf, len);
- goto err;
+ caddr_t buf, new_buf;
+ int s, len;
+
+ /* Get a socket to ask for the network interface configurations. */
+ s = monitor_socket(AF_INET, SOCK_DGRAM, 0);
+ if (s == -1) {
+ log_error("siocgifconf: socket (AF_INET, SOCK_DGRAM, 0) failed");
+ return -1;
}
- ifcp->ifc_len = len;
- ifcp->ifc_buf = buf = new_buf;
- if (ioctl (s, SIOCGIFCONF, ifcp) == -1)
- {
- log_error ("siocgifconf: ioctl (%d, SIOCGIFCONF, ...) failed", s);
- goto err;
+ len = sizeof(struct ifreq) * INITIAL_IFREQ_COUNT;
+ buf = 0;
+ while (1) {
+ /*
+ * Allocate a larger buffer each time around the loop and get the
+ * network interfaces configurations into it.
+ */
+ new_buf = realloc(buf, len);
+ if (!new_buf) {
+ log_error("siocgifconf: realloc (%p, %d) failed", buf, len);
+ goto err;
+ }
+ ifcp->ifc_len = len;
+ ifcp->ifc_buf = buf = new_buf;
+ if (ioctl(s, SIOCGIFCONF, ifcp) == -1) {
+ log_error("siocgifconf: ioctl (%d, SIOCGIFCONF, ...) failed", s);
+ goto err;
+ }
+ /*
+ * If there is place for another ifreq we can be sure that the buffer
+ * was big enough, otherwise double the size and try again.
+ */
+ if (len - ifcp->ifc_len >= sizeof(struct ifreq))
+ break;
+ len *= 2;
}
-
- /*
- * If there is place for another ifreq we can be sure that the buffer
- * was big enough, otherwise double the size and try again.
- */
- if (len - ifcp->ifc_len >= sizeof (struct ifreq))
- break;
- len *= 2;
- }
- close (s);
- return 0;
+ close(s);
+ return 0;
err:
- if (buf)
- free (buf);
- ifcp->ifc_len = 0;
- ifcp->ifc_buf = 0;
- close (s);
- return -1;
+ if (buf)
+ free(buf);
+ ifcp->ifc_len = 0;
+ ifcp->ifc_buf = 0;
+ close(s);
+ return -1;
}
#endif
int
-if_map (int (*func) (char *, struct sockaddr *, void *), void *arg)
+if_map(int (*func)(char *, struct sockaddr *, void *), void *arg)
{
- int err = 0;
+ int err = 0;
+
#ifdef HAVE_GETIFADDRS
- struct ifaddrs *ifap, *ifa;
+ struct ifaddrs *ifap, *ifa;
- if (getifaddrs (&ifap) < 0)
- return -1;
+ if (getifaddrs(&ifap) < 0)
+ return -1;
- for (ifa = ifap; ifa; ifa = ifa->ifa_next)
- if ((*func) (ifa->ifa_name, ifa->ifa_addr, arg) == -1)
- err = -1;
- freeifaddrs (ifap);
+ for (ifa = ifap; ifa; ifa = ifa->ifa_next)
+ if ((*func) (ifa->ifa_name, ifa->ifa_addr, arg) == -1)
+ err = -1;
+ freeifaddrs(ifap);
#else
- struct ifconf ifc;
- struct ifreq *ifrp;
- caddr_t limit, p;
- size_t len;
-
- if (siocgifconf (&ifc))
- return -1;
-
- limit = ifc.ifc_buf + ifc.ifc_len;
- for (p = ifc.ifc_buf; p < limit; p += len)
- {
- ifrp = (struct ifreq *)p;
- if ((*func) (ifrp->ifr_name, &ifrp->ifr_addr, arg) == -1)
- err = -1;
- len = sizeof ifrp->ifr_name
- + MAX (sysdep_sa_len (&ifrp->ifr_addr), sizeof ifrp->ifr_addr);
- }
- free (ifc.ifc_buf);
+ struct ifconf ifc;
+ struct ifreq *ifrp;
+ caddr_t limit, p;
+ size_t len;
+
+ if (siocgifconf(&ifc))
+ return -1;
+
+ limit = ifc.ifc_buf + ifc.ifc_len;
+ for (p = ifc.ifc_buf; p < limit; p += len) {
+ ifrp = (struct ifreq *) p;
+ if ((*func) (ifrp->ifr_name, &ifrp->ifr_addr, arg) == -1)
+ err = -1;
+ len = sizeof ifrp->ifr_name +
+ MAX(sysdep_sa_len(&ifrp->ifr_addr), sizeof ifrp->ifr_addr);
+ }
+ free(ifc.ifc_buf);
#endif
- return err;
+ return err;
}