public inbox for linux-nfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Chuck Lever <chuck.lever@oracle.com>
To: steved@redhat.com
Cc: linux-nfs@vger.kernel.org, Chris.Mason@oracle.com
Subject: [PATCH 29/29] statd: Send unqualified and fully qualified mon_name in SM_NOTIFY
Date: Tue, 10 Nov 2009 17:01:15 -0500	[thread overview]
Message-ID: <20091110220115.23822.96182.stgit@matisse.1015granger.net> (raw)
In-Reply-To: <20091110215447.23822.15275.stgit-RytpoXr2tKZ9HhUboXbp9zCvJB+x5qRC@public.gmane.org>

During any file locking interaction between an NFS client and server,
the client tells the server what hostname to use as the mon_name
argument of an SM_NOTIFY request.

The server, however, never tells the client what mon_name argument
it will use when sending an SM_NOTIFY request.  In order to recognize
the server, clients usually guess what mon_name the server might send
by using the server hostname provided by the user on the mount
command line.

Sometimes, however, the user provides an unqualified server name.  The
server might then call the client back with a fully qualified domain
name, which might not match.

Solaris, and perhaps other implementations, attempt to mitigate this
problem by sending two SM_NOTIFY requests: one with an unqualified
mon_name argument, and one with a fully qualified mon_name.

Implement such a scheme for sm-notify.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---

 utils/statd/sm-notify.c |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/utils/statd/sm-notify.c b/utils/statd/sm-notify.c
index e883ae9..5c4d38f 100644
--- a/utils/statd/sm-notify.c
+++ b/utils/statd/sm-notify.c
@@ -149,13 +149,13 @@ smn_get_host(const char *hostname,
 		__attribute__((unused)) const struct sockaddr *sap,
 		const struct mon *mon, const time_t timestamp)
 {
+	char *c, my_name[SM_MAXSTRLEN + 1];
 	struct nsm_host	*host;
-	char *my_name;
 
 	if (opt_srcaddr)
-		my_name = nsm_hostname;
+		strncpy(my_name, nsm_hostname, sizeof(my_name) - 1);
 	else
-		my_name = mon->mon_id.my_id.my_name;
+		strncpy(my_name, mon->mon_id.my_id.my_name, sizeof(my_name) - 1);
 
 	host = smn_alloc_host(hostname, my_name, timestamp);
 	if (host == NULL)
@@ -163,6 +163,19 @@ smn_get_host(const char *hostname,
 
 	insert_host(host);
 	xlog(D_GENERAL, "Added host %s to notify list", hostname);
+
+	/* See if we should send an unqualified copy of my_name as well */
+	c = strchr(my_name, '.');
+	if (c) {
+		*c = '\0';
+		host = smn_alloc_host(hostname, my_name, timestamp);
+		if (host != NULL) {
+			insert_host(host);
+			xlog(D_GENERAL, "Added unqualified copy of %s "
+					"to notify list", hostname);
+		}
+	}
+
 	return 1;
 }
 


  parent reply	other threads:[~2009-11-10 22:01 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-10 21:56 [PATCH 00/29] IPv6 support for statd Chuck Lever
     [not found] ` <20091110215447.23822.15275.stgit-RytpoXr2tKZ9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
2009-11-10 21:56   ` [PATCH 01/29] statd: Replace note() with xlog() in rpc.statd Chuck Lever
2009-11-10 21:56   ` [PATCH 02/29] statd: Replace nsm_log() with xlog() in sm-notify command Chuck Lever
2009-11-10 21:56   ` [PATCH 03/29] statd: replace smn_{get, set}_port() with the shared equivalents Chuck Lever
2009-11-10 21:56   ` [PATCH 04/29] statd: fix address copy in sm-notify.c Chuck Lever
2009-11-10 21:56   ` [PATCH 05/29] libnsm.a: Move the sm_inter XDR pieces to libnsm.a Chuck Lever
2009-11-10 21:57   ` [PATCH 06/29] libnsm.a: Introduce common routines to handle persistent storage Chuck Lever
2009-11-10 21:57   ` [PATCH 07/29] statd: Use the new nsm_ file.c calls in sm_notify Chuck Lever
2009-11-10 21:57   ` [PATCH 08/29] statd: Use the new nsm_ file.c calls in rpc.statd Chuck Lever
2009-11-10 21:57   ` [PATCH 09/29] libnsm.a: Add RPC construction helper functions Chuck Lever
2009-11-10 21:57   ` [PATCH 10/29] statd: Support sending SM_NOTIFY requests to IPv6 remotes Chuck Lever
2009-11-10 21:58   ` [PATCH 11/29] statd: Update rmtcall.c Chuck Lever
2009-11-10 21:58   ` [PATCH 12/29] statd: factor socket creation out of notify() Chuck Lever
2009-11-10 21:58   ` [PATCH 13/29] statd: Support creating a PF_INET6 socket in smn_create_socket() Chuck Lever
2009-11-10 21:58   ` [PATCH 14/29] statd: IPv6 support in reserved port binding " Chuck Lever
2009-11-10 21:58   ` [PATCH 15/29] statd: Use getaddrinfo(3) to generate bind address " Chuck Lever
2009-11-10 21:58   ` [PATCH 16/29] statd: Support IPv6 DNS lookups in smn_lookup Chuck Lever
2009-11-10 21:59   ` [PATCH 17/29] statd: squelch compiler warning in sm-notify.c Chuck Lever
2009-11-10 21:59   ` [PATCH 19/29] statd: add nsm_present_address() API Chuck Lever
2009-11-10 21:59   ` [PATCH 20/29] statd: add IPv6 support in sm_notify_1_svc() Chuck Lever
2009-11-10 21:59   ` [PATCH 21/29] statd: Support IPv6 is caller_is_localhost() Chuck Lever
2009-11-10 21:59   ` [PATCH 22/29] statd: Support IPv6 in sm_simu_crash_1_svc Chuck Lever
2009-11-10 21:59   ` [PATCH 23/29] statd: Support IPv6 in sm_mon_1_svc() Chuck Lever
2009-11-10 22:00   ` [PATCH 24/29] statd: Support IPv6 in sm_stat_1_svc() Chuck Lever
2009-11-10 22:00   ` [PATCH 25/29] libnsm.a: retain CAP_NET_BIND when dropping privileges Chuck Lever
2009-11-10 22:00   ` [PATCH 26/29] statd: Support TI-RPC statd listener Chuck Lever
2009-11-10 22:00   ` [PATCH 27/29] statd: update rpc.statd(8) and sm-notify(8) to reflect IPv6 support Chuck Lever
2009-11-10 22:01   ` [PATCH 28/29] statd: Use my_name when sending SM_NOTIFY requests Chuck Lever
2009-11-10 22:01   ` Chuck Lever [this message]
2009-11-12 16:04   ` [PATCH 00/29] IPv6 support for statd Chuck Lever
2009-11-12 16:33     ` Steve Dickson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091110220115.23822.96182.stgit@matisse.1015granger.net \
    --to=chuck.lever@oracle.com \
    --cc=Chris.Mason@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=steved@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox