Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7d20440 authored by Chuck Lever's avatar Chuck Lever Committed by J. Bruce Fields
Browse files

lockd: Adjust nlmclnt_lookup_host() signature to accomodate non-AF_INET



Pass a struct sockaddr * and a length to nlmclnt_lookup_host() to
accomodate non-AF_INET family addresses.

As a side benefit, eliminate the hostname_len argument, as the hostname
is always NUL-terminated.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent 88541c84
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -58,10 +58,9 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
	if (status < 0)
		return ERR_PTR(status);

	host = nlmclnt_lookup_host((struct sockaddr_in *)nlm_init->address,
	host = nlmclnt_lookup_host(nlm_init->address, nlm_init->addrlen,
				   nlm_init->protocol, nlm_version,
				   nlm_init->hostname,
				   strlen(nlm_init->hostname));
				   nlm_init->hostname);
	if (host == NULL) {
		lockd_down();
		return ERR_PTR(-ENOLCK);
+21 −11
Original line number Diff line number Diff line
@@ -264,32 +264,42 @@ nlm_destroy_host(struct nlm_host *host)
	kfree(host);
}

/*
 * Find an NLM server handle in the cache. If there is none, create it.
/**
 * nlmclnt_lookup_host - Find an NLM host handle matching a remote server
 * @sap: network address of server
 * @salen: length of server address
 * @protocol: transport protocol to use
 * @version: NLM protocol version
 * @hostname: '\0'-terminated hostname of server
 *
 * Returns an nlm_host structure that matches the passed-in
 * [server address, transport protocol, NLM version, server hostname].
 * If one doesn't already exist in the host cache, a new handle is
 * created and returned.
 */
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr_in *sin,
				     int proto, u32 version,
				     const char *hostname,
				     unsigned int hostname_len)
struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
				     const size_t salen,
				     const unsigned short protocol,
				     const u32 version, const char *hostname)
{
	const struct sockaddr source = {
		.sa_family	= AF_UNSPEC,
	};
	struct nlm_lookup_host_info ni = {
		.server		= 0,
		.sap		= (struct sockaddr *)sin,
		.salen		= sizeof(*sin),
		.protocol	= proto,
		.sap		= sap,
		.salen		= salen,
		.protocol	= protocol,
		.version	= version,
		.hostname	= hostname,
		.hostname_len	= hostname_len,
		.hostname_len	= strlen(hostname),
		.src_sap	= &source,
		.src_len	= sizeof(source),
	};

	dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__,
			(hostname ? hostname : "<none>"), version,
			(proto == IPPROTO_UDP ? "udp" : "tcp"));
			(protocol == IPPROTO_UDP ? "udp" : "tcp"));

	return nlm_lookup_host(&ni);
}
+5 −4
Original line number Diff line number Diff line
@@ -215,10 +215,11 @@ void nlmclnt_next_cookie(struct nlm_cookie *);
/*
 * Host cache
 */
struct nlm_host  *nlmclnt_lookup_host(const struct sockaddr_in *sin,
					int proto, u32 version,
					const char *hostname,
					unsigned int hostname_len);
struct nlm_host  *nlmclnt_lookup_host(const struct sockaddr *sap,
					const size_t salen,
					const unsigned short protocol,
					const u32 version,
					const char *hostname);
struct nlm_host  *nlmsvc_lookup_host(struct svc_rqst *, const char *,
					unsigned int);
struct rpc_clnt * nlm_bind_host(struct nlm_host *);