summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2008-02-29 00:06:55 +0100
committerMichael Adam <obnox@samba.org>2008-02-29 09:31:19 +0100
commit650cc1da4b4404880389c583dbb07ce86df48576 (patch)
tree45a5fbed8f1da2743cf2594d3e46bae039540986
parentc5932414fdf0b568cbfe6cdefaec41c8afc8ca6b (diff)
downloadsamba-650cc1da4b4404880389c583dbb07ce86df48576.tar.gz
samba-650cc1da4b4404880389c583dbb07ce86df48576.tar.xz
samba-650cc1da4b4404880389c583dbb07ce86df48576.zip
libreplace: try and fix rep_getifaddrs() for Tru64.
Don't fail when there is no address assigned to the interface. Put NULL into the ifaddrs structure instead. Michael (cherry picked from commit ee170c85e0e76411bd752de5fe51db6940dab929)
-rw-r--r--source/lib/replace/getifaddrs.c37
1 files changed, 16 insertions, 21 deletions
diff --git a/source/lib/replace/getifaddrs.c b/source/lib/replace/getifaddrs.c
index 551ff863df2..f66bf800eb8 100644
--- a/source/lib/replace/getifaddrs.c
+++ b/source/lib/replace/getifaddrs.c
@@ -109,38 +109,33 @@ int rep_getifaddrs(struct ifaddrs **ifap)
/* Loop through interfaces, looking for given IP address */
for (i=n-1; i>=0; i--) {
- if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != 0) {
+ if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) == -1) {
freeifaddrs(*ifap);
+ return -1;
}
curif = calloc(1, sizeof(struct ifaddrs));
- if (lastif == NULL) {
- *ifap = curif;
- } else {
- lastif->ifa_next = curif;
- }
-
curif->ifa_name = strdup(ifr[i].ifr_name);
- curif->ifa_addr = sockaddr_dup(&ifr[i].ifr_addr);
+ curif->ifa_flags = ifr[i].ifr_flags;
curif->ifa_dstaddr = NULL;
curif->ifa_data = NULL;
curif->ifa_next = NULL;
- curif->ifa_netmask = NULL;
-
- if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) != 0) {
- freeifaddrs(*ifap);
- return -1;
- }
- curif->ifa_flags = ifr[i].ifr_flags;
-
- if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != 0) {
- freeifaddrs(*ifap);
- return -1;
- }
+ curif->ifa_addr = NULL
+ if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != -1) {
+ curif->ifa_addr = sockaddr_dup(&ifr[i].ifr_addr);
+ }
- curif->ifa_netmask = sockaddr_dup(&ifr[i].ifr_addr);
+ curif->ifa_netmask = NULL;
+ if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != -1) {
+ curif->ifa_netmask = sockaddr_dup(&ifr[i].ifr_addr);
+ }
+ if (lastif == NULL) {
+ *ifap = curif;
+ } else {
+ lastif->ifa_next = curif;
+ }
lastif = curif;
}