]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/callback.c
configure changed to corrently report the default for --enable-mount
[nfs-utils.git] / utils / statd / callback.c
index 09477271d6c5a4918a049ccde3ed02678dfb39c4..d5d036e9fc28357b3ef703f3da3005f7cee0ad06 100644 (file)
@@ -6,9 +6,13 @@
  * NSM for Linux.
  */
 
-#include "config.h"
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include "misc.h"
 #include "statd.h"
 #include "notlist.h"
+#include <arpa/inet.h>
 
 /* Callback notify list. */
 /* notify_list *cbnl = NULL; ... never used */
@@ -25,6 +29,8 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)
 {
        notify_list    *lp, *call;
        static char    *result = NULL;
+       char *ip_addr = xstrdup(inet_ntoa(svc_getcaller(rqstp->rq_xprt)
+                                         ->sin_addr));
 
        dprintf(N_DEBUG, "Received SM_NOTIFY from %s, state: %d",
                                argp->mon_name, argp->state);
@@ -43,15 +49,15 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)
         * it. Lockd will want to continue monitoring the remote host
         * until it issues an SM_UNMON call.
         */
-       while ((lp = nlist_gethost(lp, argp->mon_name, 0)) != NULL) {
-               if (NL_STATE(lp) != argp->state) {
+       for (lp = rtnl ; lp ; lp = lp->next)
+               if (NL_STATE(lp) != argp->state &&
+                   (matchhostname(argp->mon_name, lp->dns_name) ||
+                    matchhostname(ip_addr, lp->dns_name))) {
                        NL_STATE(lp) = argp->state;
                        call = nlist_clone(lp);
-                       NL_TYPE(call) = NOTIFY_CALLBACK;
                        nlist_insert(&notify, call);
                }
-               lp = NL_NEXT(lp);
-       }
+
 
        return ((void *) &result);
 }