xref: /freebsd/usr.sbin/clear_locks/clear_locks.c (revision 1d386b48a555f61cb7325543adbbb5c3f3407a66)
1dfdcada3SDoug Rabson /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
31de7b4b8SPedro F. Giffuni  *
4dfdcada3SDoug Rabson  * Copyright (c) 2008 Isilon Inc http://www.isilon.com/
5dfdcada3SDoug Rabson  * Authors: Doug Rabson <dfr@rabson.org>
6dfdcada3SDoug Rabson  * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org>
7dfdcada3SDoug Rabson  *
8dfdcada3SDoug Rabson  * Redistribution and use in source and binary forms, with or without
9dfdcada3SDoug Rabson  * modification, are permitted provided that the following conditions
10dfdcada3SDoug Rabson  * are met:
11dfdcada3SDoug Rabson  * 1. Redistributions of source code must retain the above copyright
12dfdcada3SDoug Rabson  *    notice, this list of conditions and the following disclaimer.
13dfdcada3SDoug Rabson  * 2. Redistributions in binary form must reproduce the above copyright
14dfdcada3SDoug Rabson  *    notice, this list of conditions and the following disclaimer in the
15dfdcada3SDoug Rabson  *    documentation and/or other materials provided with the distribution.
16dfdcada3SDoug Rabson  *
17dfdcada3SDoug Rabson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18dfdcada3SDoug Rabson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19dfdcada3SDoug Rabson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20dfdcada3SDoug Rabson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21dfdcada3SDoug Rabson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22dfdcada3SDoug Rabson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23dfdcada3SDoug Rabson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24dfdcada3SDoug Rabson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25dfdcada3SDoug Rabson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26dfdcada3SDoug Rabson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27dfdcada3SDoug Rabson  * SUCH DAMAGE.
28dfdcada3SDoug Rabson  */
29dfdcada3SDoug Rabson 
30dfdcada3SDoug Rabson #include <sys/cdefs.h>
31dfdcada3SDoug Rabson #include <stdio.h>
32dfdcada3SDoug Rabson #include <stdlib.h>
33dfdcada3SDoug Rabson #include <unistd.h>
34dfdcada3SDoug Rabson 
35dfdcada3SDoug Rabson #include <rpc/rpc.h>
36dfdcada3SDoug Rabson #include <rpcsvc/nlm_prot.h>
37dfdcada3SDoug Rabson 
38dfdcada3SDoug Rabson int
main(int argc,char ** argv)39dfdcada3SDoug Rabson main(int argc, char **argv)
40dfdcada3SDoug Rabson {
41dfdcada3SDoug Rabson 	enum clnt_stat stat;
42dfdcada3SDoug Rabson 	char *hostname;
43dfdcada3SDoug Rabson 	nlm4_notify notify;
44dfdcada3SDoug Rabson 
45dfdcada3SDoug Rabson 	if (argc != 2) {
46dfdcada3SDoug Rabson 		fprintf(stderr, "Usage: clear_locks <hostname>\n");
47dfdcada3SDoug Rabson 		exit(1);
48dfdcada3SDoug Rabson 	}
49dfdcada3SDoug Rabson 	hostname = argv[1];
50dfdcada3SDoug Rabson 
51dfdcada3SDoug Rabson 	if (geteuid() != 0) {
52dfdcada3SDoug Rabson 		fprintf(stderr, "clear_locks: must be root\n");
53dfdcada3SDoug Rabson 		exit(1);
54dfdcada3SDoug Rabson 	}
55dfdcada3SDoug Rabson 
56dfdcada3SDoug Rabson 	notify.name = hostname;
57dfdcada3SDoug Rabson 	notify.state = 0;
58dfdcada3SDoug Rabson 	stat = rpc_call("localhost", NLM_PROG, NLM_VERS4, NLM4_FREE_ALL,
59dfdcada3SDoug Rabson 	    (xdrproc_t) xdr_nlm4_notify, (void *) &notify,
60dfdcada3SDoug Rabson 	    (xdrproc_t) xdr_void, NULL, NULL);
61dfdcada3SDoug Rabson 
62dfdcada3SDoug Rabson 	if (stat != RPC_SUCCESS) {
63dfdcada3SDoug Rabson 		clnt_perrno(stat);
64dfdcada3SDoug Rabson 		exit(1);
65dfdcada3SDoug Rabson 	}
66dfdcada3SDoug Rabson 	fprintf(stderr, "clear_locks: cleared locks for hostname %s\n",
67dfdcada3SDoug Rabson 	    hostname);
68dfdcada3SDoug Rabson 
69dfdcada3SDoug Rabson 	return (0);
70dfdcada3SDoug Rabson }
71