[exim-cvs] Linux and the BSDs have getifaddrs(). Use it and …

Startseite
Nachricht löschen
Nachricht beantworten
Autor: Exim Git Commits Mailing List
Datum:  
To: exim-cvs
Betreff: [exim-cvs] Linux and the BSDs have getifaddrs(). Use it and save a bunch of complex coding.
Gitweb: https://git.exim.org/exim.git/commitdiff/995e599afd3e6468d3396fb351ed0cd0ea212779
Commit:     995e599afd3e6468d3396fb351ed0cd0ea212779
Parent:     376fa78ab65917689a9eb5d4bcd44ce6e41feb35
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Wed Mar 17 14:33:46 2021 +0000
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Wed Mar 17 14:33:46 2021 +0000


        Linux and the BSDs have getifaddrs().  Use it and save a bunch of complex coding.
---
 src/OS/os.h-FreeBSD |  1 +
 src/OS/os.h-Linux   |  1 +
 src/OS/os.h-OpenBSD |  1 +
 src/src/host.c      |  2 +-
 src/src/os.c        | 10 ++++++----
 5 files changed, 10 insertions(+), 5 deletions(-)


diff --git a/src/OS/os.h-FreeBSD b/src/OS/os.h-FreeBSD
index 0083642..4f13584 100644
--- a/src/OS/os.h-FreeBSD
+++ b/src/OS/os.h-FreeBSD
@@ -11,6 +11,7 @@
#define HAVE_SETCLASSRESOURCES
#define HAVE_MMAP
#define HAVE_SYS_MOUNT_H
+#define HAVE_GETIFADDR
#define SIOCGIFCONF_GIVES_ADDR
#define HAVE_SRANDOMDEV
#define HAVE_ARC4RANDOM
diff --git a/src/OS/os.h-Linux b/src/OS/os.h-Linux
index 287e154..f2c243e 100644
--- a/src/OS/os.h-Linux
+++ b/src/OS/os.h-Linux
@@ -16,6 +16,7 @@ with the issue. */
#define HAVE_MMAP
#define HAVE_BSD_GETLOADAVG
#define HAVE_SYS_STATVFS_H
+#define HAVE_GETIFADDRS
#define NO_IP_VAR_H
#define SIG_IGN_WORKS

diff --git a/src/OS/os.h-OpenBSD b/src/OS/os.h-OpenBSD
index 08f2dca..eaa2f6b 100644
--- a/src/OS/os.h-OpenBSD
+++ b/src/OS/os.h-OpenBSD
@@ -6,6 +6,7 @@
#define HAVE_BSD_GETLOADAVG
#define HAVE_MMAP
#define HAVE_SYS_MOUNT_H
+#define HAVE_GETIFADDR
#define SIOCGIFCONF_GIVES_ADDR
#define EXIM_HAVE_OPENAT
#define EXIM_HAVE_FUTIMENS
diff --git a/src/src/host.c b/src/src/host.c
index 5f254a2..6b9f674 100644
--- a/src/src/host.c
+++ b/src/src/host.c
@@ -815,7 +815,7 @@ host_find_interfaces(void)
{
ip_address_item *running_interfaces = NULL;

-if (local_interface_data == NULL)
+if (!local_interface_data)
{
void *reset_item = store_mark();
ip_address_item *dlist = host_build_ifacelist(CUS local_interfaces,
diff --git a/src/src/os.c b/src/src/os.c
index ae9c604..9a450a8 100644
--- a/src/src/os.c
+++ b/src/src/os.c
@@ -495,9 +495,11 @@ if (getifaddrs(&ifalist) != 0)

 for (struct ifaddrs * ifa = ifalist; ifa; ifa = ifa->ifa_next)
   {
-  if (ifa->ifa_addr->sa_family != AF_INET
+  struct sockaddr * ifa_addr = ifa->ifa_addr;
+  if (!ifa_addr) continue;
+  if (ifa_addr->sa_family != AF_INET
 #if HAVE_IPV6
-    && ifa->ifa_addr->sa_family != AF_INET6
+    && ifa_addr->sa_family != AF_INET6
 #endif /* HAVE_IPV6 */
     )
     continue;
@@ -511,9 +513,9 @@ for (struct ifaddrs * ifa = ifalist; ifa; ifa = ifa->ifa_next)
   next = store_get(sizeof(ip_address_item), FALSE);
   next->next = NULL;
   next->port = 0;
-  (void)host_ntoa(-1, ifa->ifa_addr, next->address, NULL);
+  (void)host_ntoa(-1, ifa_addr, next->address, NULL);


-  if (yield == NULL)
+  if (!yield)
     yield = last = next;
   else
     {