xref: /freebsd/sys/nlm/nlm_prot_server.c (revision dfdcada31e7924c832024404c6a09a2db04e397e)
1dfdcada3SDoug Rabson /*-
2dfdcada3SDoug Rabson  * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
3dfdcada3SDoug Rabson  * Authors: Doug Rabson <dfr@rabson.org>
4dfdcada3SDoug Rabson  * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
5dfdcada3SDoug Rabson  *
6dfdcada3SDoug Rabson  * Redistribution and use in source and binary forms, with or without
7dfdcada3SDoug Rabson  * modification, are permitted provided that the following conditions
8dfdcada3SDoug Rabson  * are met:
9dfdcada3SDoug Rabson  * 1. Redistributions of source code must retain the above copyright
10dfdcada3SDoug Rabson  *    notice, this list of conditions and the following disclaimer.
11dfdcada3SDoug Rabson  * 2. Redistributions in binary form must reproduce the above copyright
12dfdcada3SDoug Rabson  *    notice, this list of conditions and the following disclaimer in the
13dfdcada3SDoug Rabson  *    documentation and/or other materials provided with the distribution.
14dfdcada3SDoug Rabson  *
15dfdcada3SDoug Rabson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16dfdcada3SDoug Rabson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17dfdcada3SDoug Rabson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18dfdcada3SDoug Rabson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19dfdcada3SDoug Rabson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20dfdcada3SDoug Rabson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21dfdcada3SDoug Rabson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22dfdcada3SDoug Rabson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23dfdcada3SDoug Rabson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24dfdcada3SDoug Rabson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25dfdcada3SDoug Rabson  * SUCH DAMAGE.
26dfdcada3SDoug Rabson  */
27dfdcada3SDoug Rabson 
28dfdcada3SDoug Rabson #include <sys/cdefs.h>
29dfdcada3SDoug Rabson #ifndef lint
30dfdcada3SDoug Rabson /*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
31dfdcada3SDoug Rabson /*static char sccsid[] = "from: * @(#)nlm_prot.x	2.1 88/08/01 4.0 RPCSRC";*/
32dfdcada3SDoug Rabson __RCSID("$NetBSD: nlm_prot.x,v 1.6 2000/06/07 14:30:15 bouyer Exp $");
33dfdcada3SDoug Rabson #endif /* not lint */
34dfdcada3SDoug Rabson __FBSDID("$FreeBSD$");
35dfdcada3SDoug Rabson 
36dfdcada3SDoug Rabson #include <sys/param.h>
37dfdcada3SDoug Rabson #include <sys/malloc.h>
38dfdcada3SDoug Rabson #include <sys/systm.h>
39dfdcada3SDoug Rabson 
40dfdcada3SDoug Rabson #include "nlm_prot.h"
41dfdcada3SDoug Rabson #include "nlm.h"
42dfdcada3SDoug Rabson 
43dfdcada3SDoug Rabson /**********************************************************************/
44dfdcada3SDoug Rabson 
45dfdcada3SDoug Rabson /*
46dfdcada3SDoug Rabson  * Convert between various versions of the protocol structures.
47dfdcada3SDoug Rabson  */
48dfdcada3SDoug Rabson 
49dfdcada3SDoug Rabson static void
50dfdcada3SDoug Rabson nlm_convert_to_nlm4_lock(struct nlm4_lock *dst, struct nlm_lock *src)
51dfdcada3SDoug Rabson {
52dfdcada3SDoug Rabson 
53dfdcada3SDoug Rabson 	dst->caller_name = src->caller_name;
54dfdcada3SDoug Rabson 	dst->fh = src->fh;
55dfdcada3SDoug Rabson 	dst->oh = src->oh;
56dfdcada3SDoug Rabson 	dst->svid = src->svid;
57dfdcada3SDoug Rabson 	dst->l_offset = src->l_offset;
58dfdcada3SDoug Rabson 	dst->l_len = src->l_len;
59dfdcada3SDoug Rabson }
60dfdcada3SDoug Rabson 
61dfdcada3SDoug Rabson static void
62dfdcada3SDoug Rabson nlm_convert_to_nlm4_share(struct nlm4_share *dst, struct nlm_share *src)
63dfdcada3SDoug Rabson {
64dfdcada3SDoug Rabson 
65dfdcada3SDoug Rabson 	dst->caller_name = src->caller_name;
66dfdcada3SDoug Rabson 	dst->fh = src->fh;
67dfdcada3SDoug Rabson 	dst->oh = src->oh;
68dfdcada3SDoug Rabson 	dst->mode = src->mode;
69dfdcada3SDoug Rabson 	dst->access = src->access;
70dfdcada3SDoug Rabson }
71dfdcada3SDoug Rabson 
72dfdcada3SDoug Rabson static void
73dfdcada3SDoug Rabson nlm_convert_to_nlm_holder(struct nlm_holder *dst, struct nlm4_holder *src)
74dfdcada3SDoug Rabson {
75dfdcada3SDoug Rabson 
76dfdcada3SDoug Rabson 	dst->exclusive = src->exclusive;
77dfdcada3SDoug Rabson 	dst->svid = src->svid;
78dfdcada3SDoug Rabson 	dst->oh = src->oh;
79dfdcada3SDoug Rabson 	dst->l_offset = src->l_offset;
80dfdcada3SDoug Rabson 	dst->l_len = src->l_len;
81dfdcada3SDoug Rabson }
82dfdcada3SDoug Rabson 
83dfdcada3SDoug Rabson static void
84dfdcada3SDoug Rabson nlm_convert_to_nlm4_holder(struct nlm4_holder *dst, struct nlm_holder *src)
85dfdcada3SDoug Rabson {
86dfdcada3SDoug Rabson 
87dfdcada3SDoug Rabson 	dst->exclusive = src->exclusive;
88dfdcada3SDoug Rabson 	dst->svid = src->svid;
89dfdcada3SDoug Rabson 	dst->oh = src->oh;
90dfdcada3SDoug Rabson 	dst->l_offset = src->l_offset;
91dfdcada3SDoug Rabson 	dst->l_len = src->l_len;
92dfdcada3SDoug Rabson }
93dfdcada3SDoug Rabson 
94dfdcada3SDoug Rabson static enum nlm_stats
95dfdcada3SDoug Rabson nlm_convert_to_nlm_stats(enum nlm4_stats src)
96dfdcada3SDoug Rabson {
97dfdcada3SDoug Rabson 	if (src > nlm4_deadlck)
98dfdcada3SDoug Rabson 		return nlm_denied;
99dfdcada3SDoug Rabson 	return (enum nlm_stats) src;
100dfdcada3SDoug Rabson }
101dfdcada3SDoug Rabson 
102dfdcada3SDoug Rabson static void
103dfdcada3SDoug Rabson nlm_convert_to_nlm_res(struct nlm_res *dst, struct nlm4_res *src)
104dfdcada3SDoug Rabson {
105dfdcada3SDoug Rabson 	dst->cookie = src->cookie;
106dfdcada3SDoug Rabson 	dst->stat.stat = nlm_convert_to_nlm_stats(src->stat.stat);
107dfdcada3SDoug Rabson }
108dfdcada3SDoug Rabson 
109dfdcada3SDoug Rabson static void
110dfdcada3SDoug Rabson nlm_convert_to_nlm4_res(struct nlm4_res *dst, struct nlm_res *src)
111dfdcada3SDoug Rabson {
112dfdcada3SDoug Rabson 	dst->cookie = src->cookie;
113dfdcada3SDoug Rabson 	dst->stat.stat = (enum nlm4_stats) src->stat.stat;
114dfdcada3SDoug Rabson }
115dfdcada3SDoug Rabson 
116dfdcada3SDoug Rabson /**********************************************************************/
117dfdcada3SDoug Rabson 
118dfdcada3SDoug Rabson /*
119dfdcada3SDoug Rabson  * RPC server stubs.
120dfdcada3SDoug Rabson  */
121dfdcada3SDoug Rabson 
122dfdcada3SDoug Rabson bool_t
123dfdcada3SDoug Rabson nlm_sm_notify_0_svc(struct nlm_sm_status *argp, void *result, struct svc_req *rqstp)
124dfdcada3SDoug Rabson {
125dfdcada3SDoug Rabson 	nlm_sm_notify(argp);
126dfdcada3SDoug Rabson 
127dfdcada3SDoug Rabson 	return (TRUE);
128dfdcada3SDoug Rabson }
129dfdcada3SDoug Rabson 
130dfdcada3SDoug Rabson bool_t
131dfdcada3SDoug Rabson nlm_test_1_svc(struct nlm_testargs *argp, nlm_testres *result, struct svc_req *rqstp)
132dfdcada3SDoug Rabson {
133dfdcada3SDoug Rabson 	bool_t retval;
134dfdcada3SDoug Rabson 	nlm4_testargs args4;
135dfdcada3SDoug Rabson 	nlm4_testres res4;
136dfdcada3SDoug Rabson 
137dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
138dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
139dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
140dfdcada3SDoug Rabson 
141dfdcada3SDoug Rabson 	retval = nlm4_test_4_svc(&args4, &res4, rqstp);
142dfdcada3SDoug Rabson 	if (retval) {
143dfdcada3SDoug Rabson 		result->cookie = res4.cookie;
144dfdcada3SDoug Rabson 		result->stat.stat = nlm_convert_to_nlm_stats(res4.stat.stat);
145dfdcada3SDoug Rabson 		if (result->stat.stat == nlm_denied)
146dfdcada3SDoug Rabson 			nlm_convert_to_nlm_holder(
147dfdcada3SDoug Rabson 				&result->stat.nlm_testrply_u.holder,
148dfdcada3SDoug Rabson 				&res4.stat.nlm4_testrply_u.holder);
149dfdcada3SDoug Rabson 	}
150dfdcada3SDoug Rabson 
151dfdcada3SDoug Rabson 	return (retval);
152dfdcada3SDoug Rabson }
153dfdcada3SDoug Rabson 
154dfdcada3SDoug Rabson bool_t
155dfdcada3SDoug Rabson nlm_lock_1_svc(struct nlm_lockargs *argp, nlm_res *result, struct svc_req *rqstp)
156dfdcada3SDoug Rabson {
157dfdcada3SDoug Rabson 	bool_t retval;
158dfdcada3SDoug Rabson 	nlm4_lockargs args4;
159dfdcada3SDoug Rabson 	nlm4_res res4;
160dfdcada3SDoug Rabson 
161dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
162dfdcada3SDoug Rabson 	args4.block = argp->block;
163dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
164dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
165dfdcada3SDoug Rabson 	args4.reclaim = argp->reclaim;
166dfdcada3SDoug Rabson 	args4.state = argp->state;
167dfdcada3SDoug Rabson 
168dfdcada3SDoug Rabson 	retval = nlm4_lock_4_svc(&args4, &res4, rqstp);
169dfdcada3SDoug Rabson 	if (retval)
170dfdcada3SDoug Rabson 		nlm_convert_to_nlm_res(result, &res4);
171dfdcada3SDoug Rabson 
172dfdcada3SDoug Rabson 	return (retval);
173dfdcada3SDoug Rabson }
174dfdcada3SDoug Rabson 
175dfdcada3SDoug Rabson bool_t
176dfdcada3SDoug Rabson nlm_cancel_1_svc(struct nlm_cancargs *argp, nlm_res *result, struct svc_req *rqstp)
177dfdcada3SDoug Rabson {
178dfdcada3SDoug Rabson 	bool_t retval;
179dfdcada3SDoug Rabson 	nlm4_cancargs args4;
180dfdcada3SDoug Rabson 	nlm4_res res4;
181dfdcada3SDoug Rabson 
182dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
183dfdcada3SDoug Rabson 	args4.block = argp->block;
184dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
185dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
186dfdcada3SDoug Rabson 
187dfdcada3SDoug Rabson 	retval = nlm4_cancel_4_svc(&args4, &res4, rqstp);
188dfdcada3SDoug Rabson 	if (retval)
189dfdcada3SDoug Rabson 		nlm_convert_to_nlm_res(result, &res4);
190dfdcada3SDoug Rabson 
191dfdcada3SDoug Rabson 	return (retval);
192dfdcada3SDoug Rabson }
193dfdcada3SDoug Rabson 
194dfdcada3SDoug Rabson bool_t
195dfdcada3SDoug Rabson nlm_unlock_1_svc(struct nlm_unlockargs *argp, nlm_res *result, struct svc_req *rqstp)
196dfdcada3SDoug Rabson {
197dfdcada3SDoug Rabson 	bool_t retval;
198dfdcada3SDoug Rabson 	nlm4_unlockargs args4;
199dfdcada3SDoug Rabson 	nlm4_res res4;
200dfdcada3SDoug Rabson 
201dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
202dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
203dfdcada3SDoug Rabson 
204dfdcada3SDoug Rabson 	retval = nlm4_unlock_4_svc(&args4, &res4, rqstp);
205dfdcada3SDoug Rabson 	if (retval)
206dfdcada3SDoug Rabson 		nlm_convert_to_nlm_res(result, &res4);
207dfdcada3SDoug Rabson 
208dfdcada3SDoug Rabson 	return (retval);
209dfdcada3SDoug Rabson }
210dfdcada3SDoug Rabson 
211dfdcada3SDoug Rabson bool_t
212dfdcada3SDoug Rabson nlm_granted_1_svc(struct nlm_testargs *argp, nlm_res *result, struct svc_req *rqstp)
213dfdcada3SDoug Rabson {
214dfdcada3SDoug Rabson 	bool_t retval;
215dfdcada3SDoug Rabson 	nlm4_testargs args4;
216dfdcada3SDoug Rabson 	nlm4_res res4;
217dfdcada3SDoug Rabson 
218dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
219dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
220dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
221dfdcada3SDoug Rabson 
222dfdcada3SDoug Rabson 	retval = nlm4_granted_4_svc(&args4, &res4, rqstp);
223dfdcada3SDoug Rabson 	if (retval)
224dfdcada3SDoug Rabson 		nlm_convert_to_nlm_res(result, &res4);
225dfdcada3SDoug Rabson 
226dfdcada3SDoug Rabson 	return (retval);
227dfdcada3SDoug Rabson }
228dfdcada3SDoug Rabson 
229dfdcada3SDoug Rabson bool_t
230dfdcada3SDoug Rabson nlm_test_msg_1_svc(struct nlm_testargs *argp, void *result, struct svc_req *rqstp)
231dfdcada3SDoug Rabson {
232dfdcada3SDoug Rabson 	nlm4_testargs args4;
233dfdcada3SDoug Rabson 	nlm4_testres res4;
234dfdcada3SDoug Rabson 	nlm_testres res;
235dfdcada3SDoug Rabson 	struct nlm_host *host;
236dfdcada3SDoug Rabson 	CLIENT *rpc;
237dfdcada3SDoug Rabson 	char dummy;
238dfdcada3SDoug Rabson 
239dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
240dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
241dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
242dfdcada3SDoug Rabson 
243dfdcada3SDoug Rabson 	host = nlm_do_test(&args4, &res4, rqstp);
244dfdcada3SDoug Rabson 
245dfdcada3SDoug Rabson 	res.cookie = res4.cookie;
246dfdcada3SDoug Rabson 	res.stat.stat = nlm_convert_to_nlm_stats(res4.stat.stat);
247dfdcada3SDoug Rabson 	if (res.stat.stat == nlm_denied)
248dfdcada3SDoug Rabson 		nlm_convert_to_nlm_holder(
249dfdcada3SDoug Rabson 			&res.stat.nlm_testrply_u.holder,
250dfdcada3SDoug Rabson 			&res4.stat.nlm4_testrply_u.holder);
251dfdcada3SDoug Rabson 
252dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
253dfdcada3SDoug Rabson 	if (rpc)
254dfdcada3SDoug Rabson 		nlm_test_res_1(&res, &dummy, rpc);
255dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm_testres, &res);
256dfdcada3SDoug Rabson 
257dfdcada3SDoug Rabson 	return (FALSE);
258dfdcada3SDoug Rabson }
259dfdcada3SDoug Rabson 
260dfdcada3SDoug Rabson bool_t
261dfdcada3SDoug Rabson nlm_lock_msg_1_svc(struct nlm_lockargs *argp, void *result, struct svc_req *rqstp)
262dfdcada3SDoug Rabson {
263dfdcada3SDoug Rabson 	nlm4_lockargs args4;
264dfdcada3SDoug Rabson 	nlm4_res res4;
265dfdcada3SDoug Rabson 	nlm_res res;
266dfdcada3SDoug Rabson 	struct nlm_host *host;
267dfdcada3SDoug Rabson 	CLIENT *rpc;
268dfdcada3SDoug Rabson 	char dummy;
269dfdcada3SDoug Rabson 
270dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
271dfdcada3SDoug Rabson 	args4.block = argp->block;
272dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
273dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
274dfdcada3SDoug Rabson 	args4.reclaim = argp->reclaim;
275dfdcada3SDoug Rabson 	args4.state = argp->state;
276dfdcada3SDoug Rabson 
277dfdcada3SDoug Rabson 	host = nlm_do_lock(&args4, &res4, rqstp, TRUE);
278dfdcada3SDoug Rabson 
279dfdcada3SDoug Rabson 	nlm_convert_to_nlm_res(&res, &res4);
280dfdcada3SDoug Rabson 
281dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
282dfdcada3SDoug Rabson 	if (rpc)
283dfdcada3SDoug Rabson 		nlm_lock_res_1(&res, &dummy, rpc);
284dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm_res, &res);
285dfdcada3SDoug Rabson 
286dfdcada3SDoug Rabson 	return (FALSE);
287dfdcada3SDoug Rabson }
288dfdcada3SDoug Rabson 
289dfdcada3SDoug Rabson bool_t
290dfdcada3SDoug Rabson nlm_cancel_msg_1_svc(struct nlm_cancargs *argp, void *result, struct svc_req *rqstp)
291dfdcada3SDoug Rabson {
292dfdcada3SDoug Rabson 	nlm4_cancargs args4;
293dfdcada3SDoug Rabson 	nlm4_res res4;
294dfdcada3SDoug Rabson 	nlm_res res;
295dfdcada3SDoug Rabson 	struct nlm_host *host;
296dfdcada3SDoug Rabson 	CLIENT *rpc;
297dfdcada3SDoug Rabson 	char dummy;
298dfdcada3SDoug Rabson 
299dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
300dfdcada3SDoug Rabson 	args4.block = argp->block;
301dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
302dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
303dfdcada3SDoug Rabson 
304dfdcada3SDoug Rabson 	host = nlm_do_cancel(&args4, &res4, rqstp);
305dfdcada3SDoug Rabson 
306dfdcada3SDoug Rabson 	nlm_convert_to_nlm_res(&res, &res4);
307dfdcada3SDoug Rabson 
308dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
309dfdcada3SDoug Rabson 	if (rpc)
310dfdcada3SDoug Rabson 		nlm_cancel_res_1(&res, &dummy, rpc);
311dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm_res, &res);
312dfdcada3SDoug Rabson 
313dfdcada3SDoug Rabson 	return (FALSE);
314dfdcada3SDoug Rabson }
315dfdcada3SDoug Rabson 
316dfdcada3SDoug Rabson bool_t
317dfdcada3SDoug Rabson nlm_unlock_msg_1_svc(struct nlm_unlockargs *argp, void *result, struct svc_req *rqstp)
318dfdcada3SDoug Rabson {
319dfdcada3SDoug Rabson 	nlm4_unlockargs args4;
320dfdcada3SDoug Rabson 	nlm4_res res4;
321dfdcada3SDoug Rabson 	nlm_res res;
322dfdcada3SDoug Rabson 	struct nlm_host *host;
323dfdcada3SDoug Rabson 	CLIENT *rpc;
324dfdcada3SDoug Rabson 	char dummy;
325dfdcada3SDoug Rabson 
326dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
327dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
328dfdcada3SDoug Rabson 
329dfdcada3SDoug Rabson 	host = nlm_do_unlock(&args4, &res4, rqstp);
330dfdcada3SDoug Rabson 
331dfdcada3SDoug Rabson 	nlm_convert_to_nlm_res(&res, &res4);
332dfdcada3SDoug Rabson 
333dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
334dfdcada3SDoug Rabson 	if (rpc)
335dfdcada3SDoug Rabson 		nlm_unlock_res_1(&res, &dummy, rpc);
336dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm_res, &res);
337dfdcada3SDoug Rabson 
338dfdcada3SDoug Rabson 	return (FALSE);
339dfdcada3SDoug Rabson }
340dfdcada3SDoug Rabson 
341dfdcada3SDoug Rabson bool_t
342dfdcada3SDoug Rabson nlm_granted_msg_1_svc(struct nlm_testargs *argp, void *result, struct svc_req *rqstp)
343dfdcada3SDoug Rabson {
344dfdcada3SDoug Rabson 	nlm4_testargs args4;
345dfdcada3SDoug Rabson 	nlm4_res res4;
346dfdcada3SDoug Rabson 	nlm_res res;
347dfdcada3SDoug Rabson 	struct nlm_host *host;
348dfdcada3SDoug Rabson 	CLIENT *rpc;
349dfdcada3SDoug Rabson 	char dummy;
350dfdcada3SDoug Rabson 
351dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
352dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
353dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
354dfdcada3SDoug Rabson 
355dfdcada3SDoug Rabson 	/*
356dfdcada3SDoug Rabson 	 * We make a synchronous call to userland and send the reply
357dfdcada3SDoug Rabson 	 * back async.
358dfdcada3SDoug Rabson 	 */
359dfdcada3SDoug Rabson 	nlm4_granted_4_svc(&args4, &res4, rqstp);
360dfdcada3SDoug Rabson 
361dfdcada3SDoug Rabson 	nlm_convert_to_nlm_res(&res, &res4);
362dfdcada3SDoug Rabson 
363dfdcada3SDoug Rabson 	host = nlm_find_host_by_addr(
364dfdcada3SDoug Rabson 		(struct sockaddr *) rqstp->rq_xprt->xp_rtaddr.buf,
365dfdcada3SDoug Rabson 		rqstp->rq_vers);
366dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
367dfdcada3SDoug Rabson 	if (rpc)
368dfdcada3SDoug Rabson 		nlm_granted_res_1(&res, &dummy, rpc);
369dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm_res, &res);
370dfdcada3SDoug Rabson 
371dfdcada3SDoug Rabson 	return (FALSE);
372dfdcada3SDoug Rabson }
373dfdcada3SDoug Rabson 
374dfdcada3SDoug Rabson bool_t
375dfdcada3SDoug Rabson nlm_test_res_1_svc(nlm_testres *argp, void *result, struct svc_req *rqstp)
376dfdcada3SDoug Rabson {
377dfdcada3SDoug Rabson 	nlm4_testres args4;
378dfdcada3SDoug Rabson 
379dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
380dfdcada3SDoug Rabson 	if (argp->stat.stat == nlm_denied)
381dfdcada3SDoug Rabson 		nlm_convert_to_nlm4_holder(
382dfdcada3SDoug Rabson 			&args4.stat.nlm4_testrply_u.holder,
383dfdcada3SDoug Rabson 			&argp->stat.nlm_testrply_u.holder);
384dfdcada3SDoug Rabson 
385dfdcada3SDoug Rabson 	return (nlm4_test_res_4_svc(&args4, result, rqstp));
386dfdcada3SDoug Rabson }
387dfdcada3SDoug Rabson 
388dfdcada3SDoug Rabson bool_t
389dfdcada3SDoug Rabson nlm_lock_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
390dfdcada3SDoug Rabson {
391dfdcada3SDoug Rabson 	nlm4_res arg4;
392dfdcada3SDoug Rabson 
393dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_res(&arg4, argp);
394dfdcada3SDoug Rabson 	return (nlm4_lock_res_4_svc(&arg4, result, rqstp));
395dfdcada3SDoug Rabson }
396dfdcada3SDoug Rabson 
397dfdcada3SDoug Rabson bool_t
398dfdcada3SDoug Rabson nlm_cancel_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
399dfdcada3SDoug Rabson {
400dfdcada3SDoug Rabson 	nlm4_res arg4;
401dfdcada3SDoug Rabson 
402dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_res(&arg4, argp);
403dfdcada3SDoug Rabson 	return (nlm4_cancel_res_4_svc(&arg4, result, rqstp));
404dfdcada3SDoug Rabson }
405dfdcada3SDoug Rabson 
406dfdcada3SDoug Rabson bool_t
407dfdcada3SDoug Rabson nlm_unlock_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
408dfdcada3SDoug Rabson {
409dfdcada3SDoug Rabson 	nlm4_res arg4;
410dfdcada3SDoug Rabson 
411dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_res(&arg4, argp);
412dfdcada3SDoug Rabson 	return (nlm4_unlock_res_4_svc(&arg4, result, rqstp));
413dfdcada3SDoug Rabson }
414dfdcada3SDoug Rabson 
415dfdcada3SDoug Rabson bool_t
416dfdcada3SDoug Rabson nlm_granted_res_1_svc(nlm_res *argp, void *result, struct svc_req *rqstp)
417dfdcada3SDoug Rabson {
418dfdcada3SDoug Rabson 	nlm4_res arg4;
419dfdcada3SDoug Rabson 
420dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_res(&arg4, argp);
421dfdcada3SDoug Rabson 	return (nlm4_granted_res_4_svc(&arg4, result, rqstp));
422dfdcada3SDoug Rabson }
423dfdcada3SDoug Rabson 
424dfdcada3SDoug Rabson int
425dfdcada3SDoug Rabson nlm_prog_1_freeresult(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
426dfdcada3SDoug Rabson {
427dfdcada3SDoug Rabson 
428dfdcada3SDoug Rabson 	(void) xdr_free(xdr_result, result);
429dfdcada3SDoug Rabson 	return (TRUE);
430dfdcada3SDoug Rabson }
431dfdcada3SDoug Rabson 
432dfdcada3SDoug Rabson bool_t
433dfdcada3SDoug Rabson nlm_share_3_svc(nlm_shareargs *argp, nlm_shareres *result, struct svc_req *rqstp)
434dfdcada3SDoug Rabson {
435dfdcada3SDoug Rabson 	bool_t retval;
436dfdcada3SDoug Rabson 	nlm4_shareargs args4;
437dfdcada3SDoug Rabson 	nlm4_shareres res4;
438dfdcada3SDoug Rabson 
439dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
440dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_share(&args4.share, &argp->share);
441dfdcada3SDoug Rabson 	args4.reclaim = argp->reclaim;
442dfdcada3SDoug Rabson 
443dfdcada3SDoug Rabson 	retval = nlm4_share_4_svc(&args4, &res4, rqstp);
444dfdcada3SDoug Rabson 	if (retval) {
445dfdcada3SDoug Rabson 		result->cookie = res4.cookie;
446dfdcada3SDoug Rabson 		result->stat = nlm_convert_to_nlm_stats(res4.stat);
447dfdcada3SDoug Rabson 		result->sequence = res4.sequence;
448dfdcada3SDoug Rabson 	}
449dfdcada3SDoug Rabson 
450dfdcada3SDoug Rabson 	return (retval);
451dfdcada3SDoug Rabson }
452dfdcada3SDoug Rabson 
453dfdcada3SDoug Rabson bool_t
454dfdcada3SDoug Rabson nlm_unshare_3_svc(nlm_shareargs *argp, nlm_shareres *result, struct svc_req *rqstp)
455dfdcada3SDoug Rabson {
456dfdcada3SDoug Rabson 	bool_t retval;
457dfdcada3SDoug Rabson 	nlm4_shareargs args4;
458dfdcada3SDoug Rabson 	nlm4_shareres res4;
459dfdcada3SDoug Rabson 
460dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
461dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_share(&args4.share, &argp->share);
462dfdcada3SDoug Rabson 	args4.reclaim = argp->reclaim;
463dfdcada3SDoug Rabson 
464dfdcada3SDoug Rabson 	retval = nlm4_unshare_4_svc(&args4, &res4, rqstp);
465dfdcada3SDoug Rabson 	if (retval) {
466dfdcada3SDoug Rabson 		result->cookie = res4.cookie;
467dfdcada3SDoug Rabson 		result->stat = nlm_convert_to_nlm_stats(res4.stat);
468dfdcada3SDoug Rabson 		result->sequence = res4.sequence;
469dfdcada3SDoug Rabson 	}
470dfdcada3SDoug Rabson 
471dfdcada3SDoug Rabson 	return (retval);
472dfdcada3SDoug Rabson }
473dfdcada3SDoug Rabson 
474dfdcada3SDoug Rabson bool_t
475dfdcada3SDoug Rabson nlm_nm_lock_3_svc(nlm_lockargs *argp, nlm_res *result, struct svc_req *rqstp)
476dfdcada3SDoug Rabson {
477dfdcada3SDoug Rabson 	bool_t retval;
478dfdcada3SDoug Rabson 	nlm4_lockargs args4;
479dfdcada3SDoug Rabson 	nlm4_res res4;
480dfdcada3SDoug Rabson 
481dfdcada3SDoug Rabson 	args4.cookie = argp->cookie;
482dfdcada3SDoug Rabson 	args4.block = argp->block;
483dfdcada3SDoug Rabson 	args4.exclusive = argp->exclusive;
484dfdcada3SDoug Rabson 	nlm_convert_to_nlm4_lock(&args4.alock, &argp->alock);
485dfdcada3SDoug Rabson 	args4.reclaim = argp->reclaim;
486dfdcada3SDoug Rabson 	args4.state = argp->state;
487dfdcada3SDoug Rabson 
488dfdcada3SDoug Rabson 	retval = nlm4_nm_lock_4_svc(&args4, &res4, rqstp);
489dfdcada3SDoug Rabson 	if (retval)
490dfdcada3SDoug Rabson 		nlm_convert_to_nlm_res(result, &res4);
491dfdcada3SDoug Rabson 
492dfdcada3SDoug Rabson 	return (retval);
493dfdcada3SDoug Rabson }
494dfdcada3SDoug Rabson 
495dfdcada3SDoug Rabson bool_t
496dfdcada3SDoug Rabson nlm_free_all_3_svc(nlm_notify *argp, void *result, struct svc_req *rqstp)
497dfdcada3SDoug Rabson {
498dfdcada3SDoug Rabson 	struct nlm4_notify args4;
499dfdcada3SDoug Rabson 
500dfdcada3SDoug Rabson 	args4.name = argp->name;
501dfdcada3SDoug Rabson 	args4.state = argp->state;
502dfdcada3SDoug Rabson 
503dfdcada3SDoug Rabson 	return (nlm4_free_all_4_svc(&args4, result, rqstp));
504dfdcada3SDoug Rabson }
505dfdcada3SDoug Rabson 
506dfdcada3SDoug Rabson int
507dfdcada3SDoug Rabson nlm_prog_3_freeresult(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
508dfdcada3SDoug Rabson {
509dfdcada3SDoug Rabson 
510dfdcada3SDoug Rabson 	(void) xdr_free(xdr_result, result);
511dfdcada3SDoug Rabson 	return (TRUE);
512dfdcada3SDoug Rabson }
513dfdcada3SDoug Rabson 
514dfdcada3SDoug Rabson bool_t
515dfdcada3SDoug Rabson nlm4_test_4_svc(nlm4_testargs *argp, nlm4_testres *result, struct svc_req *rqstp)
516dfdcada3SDoug Rabson {
517dfdcada3SDoug Rabson 
518dfdcada3SDoug Rabson 	nlm_do_test(argp, result, rqstp);
519dfdcada3SDoug Rabson 	return (TRUE);
520dfdcada3SDoug Rabson }
521dfdcada3SDoug Rabson 
522dfdcada3SDoug Rabson bool_t
523dfdcada3SDoug Rabson nlm4_lock_4_svc(nlm4_lockargs *argp, nlm4_res *result, struct svc_req *rqstp)
524dfdcada3SDoug Rabson {
525dfdcada3SDoug Rabson 
526dfdcada3SDoug Rabson 	nlm_do_lock(argp, result, rqstp, TRUE);
527dfdcada3SDoug Rabson 	return (TRUE);
528dfdcada3SDoug Rabson }
529dfdcada3SDoug Rabson 
530dfdcada3SDoug Rabson bool_t
531dfdcada3SDoug Rabson nlm4_cancel_4_svc(nlm4_cancargs *argp, nlm4_res *result, struct svc_req *rqstp)
532dfdcada3SDoug Rabson {
533dfdcada3SDoug Rabson 
534dfdcada3SDoug Rabson 	nlm_do_cancel(argp, result, rqstp);
535dfdcada3SDoug Rabson 	return (TRUE);
536dfdcada3SDoug Rabson }
537dfdcada3SDoug Rabson 
538dfdcada3SDoug Rabson bool_t
539dfdcada3SDoug Rabson nlm4_unlock_4_svc(nlm4_unlockargs *argp, nlm4_res *result, struct svc_req *rqstp)
540dfdcada3SDoug Rabson {
541dfdcada3SDoug Rabson 
542dfdcada3SDoug Rabson 	nlm_do_unlock(argp, result, rqstp);
543dfdcada3SDoug Rabson 	return (TRUE);
544dfdcada3SDoug Rabson }
545dfdcada3SDoug Rabson 
546dfdcada3SDoug Rabson bool_t
547dfdcada3SDoug Rabson nlm4_granted_4_svc(nlm4_testargs *argp, nlm4_res *result, struct svc_req *rqstp)
548dfdcada3SDoug Rabson {
549dfdcada3SDoug Rabson 	CLIENT* lockd;
550dfdcada3SDoug Rabson 	struct timeval tv;
551dfdcada3SDoug Rabson 
552dfdcada3SDoug Rabson 	memset(result, 0, sizeof(*result));
553dfdcada3SDoug Rabson 	nlm_copy_netobj(&result->cookie, &argp->cookie, M_RPC);
554dfdcada3SDoug Rabson 
555dfdcada3SDoug Rabson 	/*
556dfdcada3SDoug Rabson 	 * Set a non-zero timeout to give the userland a chance to reply.
557dfdcada3SDoug Rabson 	 */
558dfdcada3SDoug Rabson 	lockd = nlm_user_lockd();
559dfdcada3SDoug Rabson 	if (!lockd) {
560dfdcada3SDoug Rabson 		result->stat.stat = nlm4_failed;
561dfdcada3SDoug Rabson 		return (TRUE);
562dfdcada3SDoug Rabson 	}
563dfdcada3SDoug Rabson 	tv.tv_sec = 20;
564dfdcada3SDoug Rabson 	tv.tv_usec = 0;
565dfdcada3SDoug Rabson 	CLNT_CONTROL(lockd, CLSET_TIMEOUT, &tv);
566dfdcada3SDoug Rabson 	nlm4_granted_4(argp, result, lockd);
567dfdcada3SDoug Rabson 	tv.tv_sec = 0;
568dfdcada3SDoug Rabson 	tv.tv_usec = 0;
569dfdcada3SDoug Rabson 	CLNT_CONTROL(lockd, CLSET_TIMEOUT, &tv);
570dfdcada3SDoug Rabson 
571dfdcada3SDoug Rabson 	return (TRUE);
572dfdcada3SDoug Rabson }
573dfdcada3SDoug Rabson 
574dfdcada3SDoug Rabson bool_t
575dfdcada3SDoug Rabson nlm4_test_msg_4_svc(nlm4_testargs *argp, void *result, struct svc_req *rqstp)
576dfdcada3SDoug Rabson {
577dfdcada3SDoug Rabson 	nlm4_testres res4;
578dfdcada3SDoug Rabson 	struct nlm_host *host;
579dfdcada3SDoug Rabson 	CLIENT *rpc;
580dfdcada3SDoug Rabson 	char dummy;
581dfdcada3SDoug Rabson 
582dfdcada3SDoug Rabson 	host = nlm_do_test(argp, &res4, rqstp);
583dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
584dfdcada3SDoug Rabson 	if (rpc)
585dfdcada3SDoug Rabson 		nlm4_test_res_4(&res4, &dummy, rpc);
586dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm4_testres, &res4);
587dfdcada3SDoug Rabson 
588dfdcada3SDoug Rabson 	return (FALSE);
589dfdcada3SDoug Rabson }
590dfdcada3SDoug Rabson 
591dfdcada3SDoug Rabson bool_t
592dfdcada3SDoug Rabson nlm4_lock_msg_4_svc(nlm4_lockargs *argp, void *result, struct svc_req *rqstp)
593dfdcada3SDoug Rabson {
594dfdcada3SDoug Rabson 	nlm4_res res4;
595dfdcada3SDoug Rabson 	struct nlm_host *host;
596dfdcada3SDoug Rabson 	CLIENT *rpc;
597dfdcada3SDoug Rabson 	char dummy;
598dfdcada3SDoug Rabson 
599dfdcada3SDoug Rabson 	host = nlm_do_lock(argp, &res4, rqstp, TRUE);
600dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
601dfdcada3SDoug Rabson 	if (rpc)
602dfdcada3SDoug Rabson 		nlm4_lock_res_4(&res4, &dummy, rpc);
603dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
604dfdcada3SDoug Rabson 
605dfdcada3SDoug Rabson 	return (FALSE);
606dfdcada3SDoug Rabson }
607dfdcada3SDoug Rabson 
608dfdcada3SDoug Rabson bool_t
609dfdcada3SDoug Rabson nlm4_cancel_msg_4_svc(nlm4_cancargs *argp, void *result, struct svc_req *rqstp)
610dfdcada3SDoug Rabson {
611dfdcada3SDoug Rabson 	nlm4_res res4;
612dfdcada3SDoug Rabson 	struct nlm_host *host;
613dfdcada3SDoug Rabson 	CLIENT *rpc;
614dfdcada3SDoug Rabson 	char dummy;
615dfdcada3SDoug Rabson 
616dfdcada3SDoug Rabson 	host = nlm_do_cancel(argp, &res4, rqstp);
617dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
618dfdcada3SDoug Rabson 	if (rpc)
619dfdcada3SDoug Rabson 		nlm4_cancel_res_4(&res4, &dummy, rpc);
620dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
621dfdcada3SDoug Rabson 
622dfdcada3SDoug Rabson 	return (FALSE);
623dfdcada3SDoug Rabson }
624dfdcada3SDoug Rabson 
625dfdcada3SDoug Rabson bool_t
626dfdcada3SDoug Rabson nlm4_unlock_msg_4_svc(nlm4_unlockargs *argp, void *result, struct svc_req *rqstp)
627dfdcada3SDoug Rabson {
628dfdcada3SDoug Rabson 	nlm4_res res4;
629dfdcada3SDoug Rabson 	struct nlm_host *host;
630dfdcada3SDoug Rabson 	CLIENT *rpc;
631dfdcada3SDoug Rabson 	char dummy;
632dfdcada3SDoug Rabson 
633dfdcada3SDoug Rabson 	host = nlm_do_unlock(argp, &res4, rqstp);
634dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
635dfdcada3SDoug Rabson 	if (rpc)
636dfdcada3SDoug Rabson 		nlm4_unlock_res_4(&res4, &dummy, rpc);
637dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
638dfdcada3SDoug Rabson 
639dfdcada3SDoug Rabson 	return (FALSE);
640dfdcada3SDoug Rabson }
641dfdcada3SDoug Rabson 
642dfdcada3SDoug Rabson bool_t
643dfdcada3SDoug Rabson nlm4_granted_msg_4_svc(nlm4_testargs *argp, void *result, struct svc_req *rqstp)
644dfdcada3SDoug Rabson {
645dfdcada3SDoug Rabson 	struct nlm_host *host;
646dfdcada3SDoug Rabson 	CLIENT *rpc;
647dfdcada3SDoug Rabson 	nlm4_res res4;
648dfdcada3SDoug Rabson 	char dummy;
649dfdcada3SDoug Rabson 
650dfdcada3SDoug Rabson 	/*
651dfdcada3SDoug Rabson 	 * We make a synchronous call to userland and send the reply
652dfdcada3SDoug Rabson 	 * back async.
653dfdcada3SDoug Rabson 	 */
654dfdcada3SDoug Rabson 	nlm4_granted_4_svc(argp, &res4, rqstp);
655dfdcada3SDoug Rabson 
656dfdcada3SDoug Rabson 	host = nlm_find_host_by_addr(
657dfdcada3SDoug Rabson 		(struct sockaddr *) rqstp->rq_xprt->xp_rtaddr.buf,
658dfdcada3SDoug Rabson 		rqstp->rq_vers);
659dfdcada3SDoug Rabson 	rpc = nlm_host_get_rpc(host);
660dfdcada3SDoug Rabson 	if (rpc)
661dfdcada3SDoug Rabson 		nlm4_granted_res_4(&res4, &dummy, rpc);
662dfdcada3SDoug Rabson 	xdr_free((xdrproc_t) xdr_nlm4_res, &res4);
663dfdcada3SDoug Rabson 
664dfdcada3SDoug Rabson 	return (FALSE);
665dfdcada3SDoug Rabson }
666dfdcada3SDoug Rabson 
667dfdcada3SDoug Rabson bool_t
668dfdcada3SDoug Rabson nlm4_test_res_4_svc(nlm4_testres *argp, void *result, struct svc_req *rqstp)
669dfdcada3SDoug Rabson {
670dfdcada3SDoug Rabson 	CLIENT* lockd;
671dfdcada3SDoug Rabson 
672dfdcada3SDoug Rabson 	lockd = nlm_user_lockd();
673dfdcada3SDoug Rabson 	if (lockd)
674dfdcada3SDoug Rabson 		nlm4_test_res_4(argp, result, lockd);
675dfdcada3SDoug Rabson 
676dfdcada3SDoug Rabson 	return (FALSE);
677dfdcada3SDoug Rabson }
678dfdcada3SDoug Rabson 
679dfdcada3SDoug Rabson bool_t
680dfdcada3SDoug Rabson nlm4_lock_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
681dfdcada3SDoug Rabson {
682dfdcada3SDoug Rabson 	CLIENT* lockd;
683dfdcada3SDoug Rabson 
684dfdcada3SDoug Rabson 	lockd = nlm_user_lockd();
685dfdcada3SDoug Rabson 	if (lockd)
686dfdcada3SDoug Rabson 		nlm4_lock_res_4(argp, result, lockd);
687dfdcada3SDoug Rabson 
688dfdcada3SDoug Rabson 	return (FALSE);
689dfdcada3SDoug Rabson }
690dfdcada3SDoug Rabson 
691dfdcada3SDoug Rabson bool_t
692dfdcada3SDoug Rabson nlm4_cancel_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
693dfdcada3SDoug Rabson {
694dfdcada3SDoug Rabson 	CLIENT* lockd;
695dfdcada3SDoug Rabson 
696dfdcada3SDoug Rabson 	lockd = nlm_user_lockd();
697dfdcada3SDoug Rabson 	if (lockd)
698dfdcada3SDoug Rabson 		nlm4_cancel_res_4(argp, result, lockd);
699dfdcada3SDoug Rabson 
700dfdcada3SDoug Rabson 	return (FALSE);
701dfdcada3SDoug Rabson }
702dfdcada3SDoug Rabson 
703dfdcada3SDoug Rabson bool_t
704dfdcada3SDoug Rabson nlm4_unlock_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
705dfdcada3SDoug Rabson {
706dfdcada3SDoug Rabson 	CLIENT* lockd;
707dfdcada3SDoug Rabson 
708dfdcada3SDoug Rabson 	lockd = nlm_user_lockd();
709dfdcada3SDoug Rabson 	if (lockd)
710dfdcada3SDoug Rabson 		nlm4_unlock_res_4(argp, result, lockd);
711dfdcada3SDoug Rabson 
712dfdcada3SDoug Rabson 	return (FALSE);
713dfdcada3SDoug Rabson }
714dfdcada3SDoug Rabson 
715dfdcada3SDoug Rabson bool_t
716dfdcada3SDoug Rabson nlm4_granted_res_4_svc(nlm4_res *argp, void *result, struct svc_req *rqstp)
717dfdcada3SDoug Rabson {
718dfdcada3SDoug Rabson 
719dfdcada3SDoug Rabson 	return (FALSE);
720dfdcada3SDoug Rabson }
721dfdcada3SDoug Rabson 
722dfdcada3SDoug Rabson bool_t
723dfdcada3SDoug Rabson nlm4_share_4_svc(nlm4_shareargs *argp, nlm4_shareres *result, struct svc_req *rqstp)
724dfdcada3SDoug Rabson {
725dfdcada3SDoug Rabson 
726dfdcada3SDoug Rabson 	memset(result, 0, sizeof(*result));
727dfdcada3SDoug Rabson 	result->stat = nlm4_denied;
728dfdcada3SDoug Rabson 	return (TRUE);
729dfdcada3SDoug Rabson }
730dfdcada3SDoug Rabson 
731dfdcada3SDoug Rabson bool_t
732dfdcada3SDoug Rabson nlm4_unshare_4_svc(nlm4_shareargs *argp, nlm4_shareres *result, struct svc_req *rqstp)
733dfdcada3SDoug Rabson {
734dfdcada3SDoug Rabson 
735dfdcada3SDoug Rabson 	memset(result, 0, sizeof(*result));
736dfdcada3SDoug Rabson 	result->stat = nlm4_denied;
737dfdcada3SDoug Rabson 	return (TRUE);
738dfdcada3SDoug Rabson }
739dfdcada3SDoug Rabson 
740dfdcada3SDoug Rabson bool_t
741dfdcada3SDoug Rabson nlm4_nm_lock_4_svc(nlm4_lockargs *argp, nlm4_res *result, struct svc_req *rqstp)
742dfdcada3SDoug Rabson {
743dfdcada3SDoug Rabson 
744dfdcada3SDoug Rabson 	nlm_do_lock(argp, result, rqstp, FALSE);
745dfdcada3SDoug Rabson 	return (TRUE);
746dfdcada3SDoug Rabson }
747dfdcada3SDoug Rabson 
748dfdcada3SDoug Rabson bool_t
749dfdcada3SDoug Rabson nlm4_free_all_4_svc(nlm4_notify *argp, void *result, struct svc_req *rqstp)
750dfdcada3SDoug Rabson {
751dfdcada3SDoug Rabson 
752dfdcada3SDoug Rabson 	nlm_do_free_all(argp);
753dfdcada3SDoug Rabson 	return (TRUE);
754dfdcada3SDoug Rabson }
755dfdcada3SDoug Rabson 
756dfdcada3SDoug Rabson int
757dfdcada3SDoug Rabson nlm_prog_4_freeresult(SVCXPRT *transp, xdrproc_t xdr_result, caddr_t result)
758dfdcada3SDoug Rabson {
759dfdcada3SDoug Rabson 
760dfdcada3SDoug Rabson 	(void) xdr_free(xdr_result, result);
761dfdcada3SDoug Rabson 	return (TRUE);
762dfdcada3SDoug Rabson }
763