]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/callback.c
sm-notify command: use static function definitions
[nfs-utils.git] / utils / statd / callback.c
index 8a85ce90737c7de3aa8ce1db7b9f1bf214b83b90..d5d036e9fc28357b3ef703f3da3005f7cee0ad06 100644 (file)
@@ -9,8 +9,10 @@
 #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 */
@@ -27,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);
@@ -45,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);
 }