]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/rmtcall.c
release 1.0.7-pre2
[nfs-utils.git] / utils / statd / rmtcall.c
index 29972545d7389b9ac7ca54defee529c4cfb18b43..f6798f9b29b9e5623dd9617dd529b09b8b5cad34 100644 (file)
@@ -38,6 +38,7 @@
 #include "statd.h"
 #include "notlist.h"
 #include "log.h"
+#include "ha-callout.h"
 
 #define MAXMSGSIZE     (2048 / sizeof(unsigned int))
 
@@ -65,6 +66,16 @@ statd_get_socket(int port)
        memset(&sin, 0, sizeof(sin));
        sin.sin_family = AF_INET;
        sin.sin_port = port;
+       /*
+        * If a local hostname is given (-n option to statd), bind to the address
+        * specified. This is required to support clients that ignore the mon_name in
+        * the statd protocol but use the source address from the request packet.
+        */
+       if (MY_NAME) {
+               struct hostent *hp = gethostbyname(MY_NAME);
+               if (hp)
+                       sin.sin_addr = *(struct in_addr *) hp->h_addr;
+       }
        if (bindresvport(sockfd, &sin) < 0) {
                dprintf(N_WARNING,
                        "process_hosts: can't bind to reserved port\n");
@@ -414,6 +425,8 @@ process_notify_list(void)
                        note(N_ERROR,
                                "Can't notify %s, giving up.",
                                        NL_MON_NAME(entry));
+                       /* PRC: do the HA callout */
+                       ha_callout("del-client", NL_MON_NAME(entry), NL_MY_NAME(entry), -1);
                        xunlink(SM_BAK_DIR, NL_MON_NAME(entry), 0);
                        nlist_free(&notify, entry);
                }