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 *) ¬ify,
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