|
@@ -48,6 +48,7 @@ struct nlm_lookup_host_info {
|
|
|
const size_t hostname_len; /* it's length */
|
|
|
const struct sockaddr *src_sap; /* our address (optional) */
|
|
|
const size_t src_len; /* it's length */
|
|
|
+ const int noresvport; /* use non-priv port */
|
|
|
};
|
|
|
|
|
|
/*
|
|
@@ -222,6 +223,7 @@ static struct nlm_host *nlm_lookup_host(struct nlm_lookup_host_info *ni)
|
|
|
host->h_nsmstate = 0; /* real NSM state */
|
|
|
host->h_nsmhandle = nsm;
|
|
|
host->h_server = ni->server;
|
|
|
+ host->h_noresvport = ni->noresvport;
|
|
|
hlist_add_head(&host->h_hash, chain);
|
|
|
INIT_LIST_HEAD(&host->h_lockowners);
|
|
|
spin_lock_init(&host->h_lock);
|
|
@@ -272,6 +274,7 @@ nlm_destroy_host(struct nlm_host *host)
|
|
|
* @protocol: transport protocol to use
|
|
|
* @version: NLM protocol version
|
|
|
* @hostname: '\0'-terminated hostname of server
|
|
|
+ * @noresvport: 1 if non-privileged port should be used
|
|
|
*
|
|
|
* Returns an nlm_host structure that matches the passed-in
|
|
|
* [server address, transport protocol, NLM version, server hostname].
|
|
@@ -281,7 +284,9 @@ nlm_destroy_host(struct nlm_host *host)
|
|
|
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 u32 version,
|
|
|
+ const char *hostname,
|
|
|
+ int noresvport)
|
|
|
{
|
|
|
const struct sockaddr source = {
|
|
|
.sa_family = AF_UNSPEC,
|
|
@@ -296,6 +301,7 @@ struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
|
|
|
.hostname_len = strlen(hostname),
|
|
|
.src_sap = &source,
|
|
|
.src_len = sizeof(source),
|
|
|
+ .noresvport = noresvport,
|
|
|
};
|
|
|
|
|
|
dprintk("lockd: %s(host='%s', vers=%u, proto=%s)\n", __func__,
|
|
@@ -417,6 +423,8 @@ nlm_bind_host(struct nlm_host *host)
|
|
|
*/
|
|
|
if (!host->h_server)
|
|
|
args.flags |= RPC_CLNT_CREATE_HARDRTRY;
|
|
|
+ if (host->h_noresvport)
|
|
|
+ args.flags |= RPC_CLNT_CREATE_NONPRIVPORT;
|
|
|
|
|
|
clnt = rpc_create(&args);
|
|
|
if (!IS_ERR(clnt))
|