xref: /openbsd/usr.sbin/rpc.statd/test.c (revision f7f1b834)
1 /*	$OpenBSD: test.c,v 1.2 2017/01/21 08:33:51 krw Exp $	*/
2 
3 #include <stdio.h>
4 #include <rpc/rpc.h>
5 #include <rpcsvc/sm_inter.h>
6 
7 
8 /* Default timeout can be changed using clnt_control() */
9 static struct timeval TIMEOUT = {25, 0};
10 
11 struct sm_stat_res *
sm_stat_1(argp,clnt)12 sm_stat_1(argp, clnt)
13 	struct sm_name *argp;
14 	CLIENT *clnt;
15 {
16 	static struct sm_stat_res res;
17 
18 	bzero((char *) &res, sizeof(res));
19 	if (clnt_call(clnt, SM_STAT, xdr_sm_name, argp, xdr_sm_stat_res,
20 	    &res, TIMEOUT) != RPC_SUCCESS)
21 		return (NULL);
22 	return (&res);
23 }
24 
25 
26 struct sm_stat_res *
sm_mon_1(argp,clnt)27 sm_mon_1(argp, clnt)
28 	struct mon *argp;
29 	CLIENT *clnt;
30 {
31 	static struct sm_stat_res res;
32 
33 	bzero((char *) &res, sizeof(res));
34 	if (clnt_call(clnt, SM_MON, xdr_mon, argp, xdr_sm_stat_res,
35 	    &res, TIMEOUT) != RPC_SUCCESS)
36 		return (NULL);
37 	return (&res);
38 }
39 
40 
41 struct sm_stat *
sm_unmon_1(argp,clnt)42 sm_unmon_1(argp, clnt)
43 	struct mon_id *argp;
44 	CLIENT *clnt;
45 {
46 	static struct sm_stat res;
47 
48 	bzero((char *) &res, sizeof(res));
49 	if (clnt_call(clnt, SM_UNMON, xdr_mon_id, argp, xdr_sm_stat,
50 	    &res, TIMEOUT) != RPC_SUCCESS)
51 		return (NULL);
52 	return (&res);
53 }
54 
55 
56 struct sm_stat *
sm_unmon_all_1(argp,clnt)57 sm_unmon_all_1(argp, clnt)
58 	struct my_id *argp;
59 	CLIENT *clnt;
60 {
61 	static struct sm_stat res;
62 
63 	bzero((char *) &res, sizeof(res));
64 	if (clnt_call(clnt, SM_UNMON_ALL, xdr_my_id, argp, xdr_sm_stat,
65 	    &res, TIMEOUT) != RPC_SUCCESS)
66 		return (NULL);
67 	return (&res);
68 }
69 
70 
71 void *
sm_simu_crash_1(argp,clnt)72 sm_simu_crash_1(argp, clnt)
73 	void   *argp;
74 	CLIENT *clnt;
75 {
76 	static char res;
77 
78 	bzero((char *) &res, sizeof(res));
79 	if (clnt_call(clnt, SM_SIMU_CRASH, xdr_void, argp, xdr_void,
80 	    &res, TIMEOUT) != RPC_SUCCESS)
81 		return (NULL);
82 	return ((void *) &res);
83 }
84 
85 
86 int
main(argc,argv)87 main(argc, argv)
88 	int argc;
89 	char **argv;
90 {
91 	CLIENT *cli;
92 	char dummy;
93 	void *out;
94 	struct mon mon;
95 
96 	if (argc < 2) {
97 		warnx("usage: test {<hostname> | crash}");
98 		errx(1, "Always talks to statd at localhost");
99 	}
100 	printf("Creating client for localhost\n");
101 	cli = clnt_create("localhost", SM_PROG, SM_VERS, "udp");
102 	if (!cli) {
103 		errx(1, "Failed to create client");
104 	}
105 	mon.mon_id.mon_name = argv[1];
106 	mon.mon_id.my_id.my_name = argv[1];
107 	mon.mon_id.my_id.my_prog = SM_PROG;
108 	mon.mon_id.my_id.my_vers = SM_VERS;
109 	mon.mon_id.my_id.my_proc = 1;	/* have it call sm_stat() !!! */
110 
111 	if (strcmp(argv[1], "crash")) {
112 		/* Hostname given */
113 		struct sm_stat_res *res;
114 		if (res = sm_mon_1(&mon, cli))
115 			printf("Success!\n");
116 		else
117 			printf("Fail\n");
118 	} else {
119 		if (out = sm_simu_crash_1(&dummy, cli))
120 			printf("Success!\n");
121 		else
122 			printf("Fail\n");
123 	}
124 
125 	return 0;
126 }
127