pud: fix readIPAddress function
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 15 Aug 2013 21:11:04 +0000 (23:11 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 15 Aug 2013 21:18:06 +0000 (23:18 +0200)
It would also set the port instead of only the IP address, thereby
opening up the possibility to lose the port if the address is set
after the port.

Reported-by: shkdee
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/pud/src/configTools.c
lib/pud/src/netTools.h

index 036623d..4a957d8 100644 (file)
@@ -291,7 +291,7 @@ bool readULL(const char * parameterName, const char * str, unsigned long long *
                setOlsrSockaddrPort(&ip, htons(portDefault));
        }
 
-       *dst = ip;
+  setOlsrSockaddrAddr(dst, &ip);
        *dstSet = true;
        return true;
 }
index badda94..8510d11 100644 (file)
@@ -11,6 +11,7 @@
 #include <unistd.h>
 #include <stdbool.h>
 #include <net/if.h>
+#include <netinet/in.h>
 
 
 #ifdef __ANDROID__
@@ -60,6 +61,26 @@ static inline void setOlsrSockaddrPort(union olsr_sockaddr * addr, in_port_t por
 }
 
 /**
+ Set the IP address in an OLSR socket address
+
+ @param addr
+ A pointer to OLSR socket address
+ @param addr
+ A pointer to the IP address (in network byte order)
+ */
+static inline void setOlsrSockaddrAddr(union olsr_sockaddr * addr, void * ip) {
+       if (!addr) {
+               return;
+       }
+
+       if (addr->in.sa_family == AF_INET) {
+               addr->in4.sin_addr = *((struct in_addr *)ip);
+       } else {
+               addr->in6.sin6_addr = *((struct in6_addr *)ip);
+       }
+}
+
+/**
  Determine whether an IP address (v4 or v6) is a multicast address.
 
  @param addr