]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/sm-notify.c
nfs-utils: Remove all uses of AI_ADDRCONFIG
[nfs-utils.git] / utils / statd / sm-notify.c
index 2d146687f706dca0a8cc70dc38ebd80405ddcdac..b7f43715b5e536d284571a7a506aaed9942b3a7d 100644 (file)
 #include "nsm.h"
 #include "nfsrpc.h"
 
-#ifndef HAVE_DECL_AI_ADDRCONFIG
-#define AI_ADDRCONFIG  0
-#endif
-
 #define NSM_TIMEOUT    2
 #define NSM_MAX_TIMEOUT        120     /* don't make this too big */
 
@@ -78,7 +74,6 @@ smn_lookup(const char *name)
 {
        struct addrinfo *ai = NULL;
        struct addrinfo hint = {
-               .ai_flags       = AI_ADDRCONFIG,
                .ai_family      = (nsm_family == AF_INET ? AF_INET: AF_UNSPEC),
                .ai_protocol    = (int)IPPROTO_UDP,
        };
@@ -634,15 +629,28 @@ recv_rpcbind_reply(struct sockaddr *sap, struct nsm_host *host, XDR *xdr)
 }
 
 /*
- * Successful NOTIFY call. Server returns void, so nothing
- * we need to do here.
+ * Successful NOTIFY call. Server returns void.
+ *
+ * Try sending another SM_NOTIFY with an unqualified "my_name"
+ * argument.  Reuse the port number.  If "my_name" is already
+ * unqualified, we're done.
  */
 static void
 recv_notify_reply(struct nsm_host *host)
 {
-       xlog(D_GENERAL, "Host %s notified successfully", host->name);
+       char *dot = strchr(host->my_name, '.');
 
-       smn_forget_host(host);
+       if (dot != NULL) {
+               *dot = '\0';
+               host->send_next = time(NULL);
+               host->xid = 0;
+               if (host->timeout >= NSM_MAX_TIMEOUT / 4)
+                       host->timeout = NSM_MAX_TIMEOUT / 4;
+               insert_host(host);
+       } else {
+               xlog(D_GENERAL, "Host %s notified successfully", host->name);
+               smn_forget_host(host);
+       }
 }
 
 /*