1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright (c) 1993, 2000 by Sun Microsystems, Inc.
24 * All rights reserved.
25 */
26
27#pragma ident	"%Z%%M%	%I%	%E% SMI"
28
29#include "med_local.h"
30
31/*
32 * return a response
33 */
34/*ARGSUSED*/
35bool_t
36med_null_1_svc(
37	void		*argp,
38	med_err_t	*res,
39	struct svc_req	*rqstp		/* RPC stuff */
40)
41{
42	/* Initialization */
43	*res = med_null_err;
44
45	/* do nothing */
46	return (TRUE);
47}
48
49/*
50 * Update the mediator data file.
51 */
52/*ARGSUSED*/
53bool_t
54med_upd_data_1_svc(
55	med_upd_data_args_t	*argp,
56	med_err_t		*res,
57	struct svc_req		*rqstp		/* RPC stuff */
58)
59{
60	int			err;
61
62	/* Initialization */
63	*res = med_null_err;
64
65	/* setup, check permissions */
66	if ((err = med_init(rqstp, W_OK, res)) < 0)
67		return (FALSE);
68	else if (err != 0)
69		return (TRUE);
70
71	/* doit */
72	if (med_db_init(res))
73		goto out;
74
75	(void) med_db_put_data(&argp->med, &argp->med_data, res);
76
77out:
78	return (TRUE);
79}
80
81/*
82 * Get the mediator data
83 */
84/*ARGSUSED*/
85bool_t
86med_get_data_1_svc(
87	med_args_t			*argp,
88	med_get_data_res_t		*res,
89	struct svc_req			*rqstp		/* RPC stuff */
90)
91{
92	int				err;
93	med_data_t			*meddp;
94	med_err_t			*medep = &res->med_status;
95
96	/* Initialization */
97	(void) memset(res, 0, sizeof (*res));
98	*medep = med_null_err;
99
100	/* setup, check permissions */
101	if ((err = med_init(rqstp, R_OK, medep)) < 0)
102		return (FALSE);
103	else if (err != 0)
104		return (TRUE);
105
106	/* doit */
107	if (med_db_init(medep))
108		goto out;
109
110	if ((meddp = med_db_get_data(&argp->med, medep)) == NULL)
111		goto out;
112
113	res->med_data = *meddp;			/* structure assignment */
114
115out:
116	return (TRUE);
117}
118
119/*
120 * Update the mediator record.
121 */
122/*ARGSUSED*/
123bool_t
124med_upd_rec_1_svc(
125	med_upd_rec_args_t	*argp,
126	med_err_t		*res,
127	struct svc_req		*rqstp		/* RPC stuff */
128)
129{
130	int			err;
131
132	/* Initialization */
133	*res = med_null_err;
134
135	/* setup, check permissions */
136	if ((err = med_init(rqstp, W_OK, res)) < 0)
137		return (FALSE);
138	else if (err != 0)
139		return (TRUE);
140
141	/* doit */
142	if (med_db_init(res))
143		goto out;
144
145	(void) med_db_put_rec(&argp->med, &argp->med_rec, res);
146
147out:
148	return (TRUE);
149}
150
151/*
152 * Get the mediator record
153 */
154/*ARGSUSED*/
155bool_t
156med_get_rec_1_svc(
157	med_args_t			*argp,
158	med_get_rec_res_t		*res,
159	struct svc_req			*rqstp		/* RPC stuff */
160)
161{
162	med_rec_t			*medrp;
163	int				err;
164	med_err_t			*medep = &res->med_status;
165
166	/* Initialization */
167	(void) memset(res, 0, sizeof (*res));
168	*medep = med_null_err;
169
170	/* setup, check permissions */
171	if ((err = med_init(rqstp, R_OK, medep)) < 0)
172		return (FALSE);
173	else if (err != 0)
174		return (TRUE);
175
176	/* doit */
177	if (med_db_init(medep))
178		goto out;
179
180	if ((medrp = med_db_get_rec(&argp->med, medep)) == NULL)
181		goto out;
182
183	res->med_rec = *medrp;			/* structure assignment */
184
185out:
186	return (TRUE);
187}
188
189/*
190 * return the official host name for the callee
191 */
192/*ARGSUSED*/
193bool_t
194med_hostname_1_svc(
195	void 			*argp,
196	med_hnm_res_t 		*res,
197	struct svc_req		*rqstp		/* RPC stuff */
198)
199{
200	med_err_t		*medep = &res->med_status;
201	int			err;
202
203	/* Initialization */
204	(void) memset(res, 0, sizeof (*res));
205	*medep = med_null_err;
206
207	/* setup, check permissions */
208	if ((err = med_init(rqstp, R_OK, medep)) < 0)
209		return (FALSE);
210	else if (err != 0)
211		return (TRUE);
212
213	/* doit */
214	res->med_hnm = Strdup(mynode());
215
216	return (TRUE);
217}
218