DARWIN: Fix processing using rx_ifaddr_* macros in afsi_SetServerIPRank()
authorAntoine Verheijen <antoine@ualberta.ca>
Wed, 1 Dec 2010 18:37:02 +0000 (11:37 -0700)
committerDerrick Brashear <shadow@dementia.org>
Wed, 1 Dec 2010 20:41:13 +0000 (12:41 -0800)
The macros rx_ifaddr_address, rx_ifaddr_netmask, and rx_ifaddr_dstaddress
all expand to a call to memcpy() which returns the destination address as
its return value. The test in the DARWIN version of afsi_SetServerIPRank()
for completion when using this macro, however, seems to assume that success
returns zero, which is wrong and results in myAddr, subnetmask, and
myDstaddr always being set to zero. This patch corrects this behaviour.

Change-Id: I66f5c790d8c55b359e3550b6d71f3abe040a2820
Reviewed-on: http://gerrit.openafs.org/3401
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Tested-by: Derrick Brashear <shadow@dementia.org>

src/afs/afs_server.c

index 66546df..086ab4d 100644 (file)
@@ -1253,7 +1253,7 @@ afsi_SetServerIPRank(struct srvAddr *sa, rx_ifaddr_t ifa)
     if (rx_ifaddr_address_family(ifa) != AF_INET)
        return;
     t = rx_ifaddr_address(ifa, &sout, sizeof(sout));
-    if (t == 0) {
+    if (t != 0) {
        sin = (struct sockaddr_in *)&sout;
        myAddr = ntohl(sin->sin_addr.s_addr);   /* one of my IP addr in host order */
     } else {
@@ -1261,14 +1261,14 @@ afsi_SetServerIPRank(struct srvAddr *sa, rx_ifaddr_t ifa)
     }
     serverAddr = ntohl(sa->sa_ip);     /* server's IP addr in host order */
     t = rx_ifaddr_netmask(ifa, &sout, sizeof(sout));
-    if (t == 0) {
+    if (t != 0) {
        sin = (struct sockaddr_in *)&sout;
        subnetmask = ntohl(sin->sin_addr.s_addr);       /* subnet mask in host order */
     } else {
        subnetmask = 0;
     }
     t = rx_ifaddr_dstaddress(ifa, &sout, sizeof(sout));
-    if (t == 0) {
+    if (t != 0) {
        sin = (struct sockaddr_in *)&sout;
        myDstaddr = sin->sin_addr.s_addr;
     } else {