med_svc_subr.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1993, 2000 by Sun Microsystems, Inc.
* All rights reserved.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include "med_local.h"
/*
* return a response
*/
/*ARGSUSED*/
bool_t
med_null_1_svc(
void *argp,
med_err_t *res,
struct svc_req *rqstp /* RPC stuff */
)
{
/* Initialization */
*res = med_null_err;
/* do nothing */
return (TRUE);
}
/*
* Update the mediator data file.
*/
/*ARGSUSED*/
bool_t
med_upd_data_1_svc(
med_upd_data_args_t *argp,
med_err_t *res,
struct svc_req *rqstp /* RPC stuff */
)
{
int err;
/* Initialization */
*res = med_null_err;
/* setup, check permissions */
if ((err = med_init(rqstp, W_OK, res)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
if (med_db_init(res))
goto out;
(void) med_db_put_data(&argp->med, &argp->med_data, res);
out:
return (TRUE);
}
/*
* Get the mediator data
*/
/*ARGSUSED*/
bool_t
med_get_data_1_svc(
med_args_t *argp,
med_get_data_res_t *res,
struct svc_req *rqstp /* RPC stuff */
)
{
int err;
med_data_t *meddp;
med_err_t *medep = &res->med_status;
/* Initialization */
(void) memset(res, 0, sizeof (*res));
*medep = med_null_err;
/* setup, check permissions */
if ((err = med_init(rqstp, R_OK, medep)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
if (med_db_init(medep))
goto out;
if ((meddp = med_db_get_data(&argp->med, medep)) == NULL)
goto out;
res->med_data = *meddp; /* structure assignment */
out:
return (TRUE);
}
/*
* Update the mediator record.
*/
/*ARGSUSED*/
bool_t
med_upd_rec_1_svc(
med_upd_rec_args_t *argp,
med_err_t *res,
struct svc_req *rqstp /* RPC stuff */
)
{
int err;
/* Initialization */
*res = med_null_err;
/* setup, check permissions */
if ((err = med_init(rqstp, W_OK, res)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
if (med_db_init(res))
goto out;
(void) med_db_put_rec(&argp->med, &argp->med_rec, res);
out:
return (TRUE);
}
/*
* Get the mediator record
*/
/*ARGSUSED*/
bool_t
med_get_rec_1_svc(
med_args_t *argp,
med_get_rec_res_t *res,
struct svc_req *rqstp /* RPC stuff */
)
{
med_rec_t *medrp;
int err;
med_err_t *medep = &res->med_status;
/* Initialization */
(void) memset(res, 0, sizeof (*res));
*medep = med_null_err;
/* setup, check permissions */
if ((err = med_init(rqstp, R_OK, medep)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
if (med_db_init(medep))
goto out;
if ((medrp = med_db_get_rec(&argp->med, medep)) == NULL)
goto out;
res->med_rec = *medrp; /* structure assignment */
out:
return (TRUE);
}
/*
* return the official host name for the callee
*/
/*ARGSUSED*/
bool_t
med_hostname_1_svc(
void *argp,
med_hnm_res_t *res,
struct svc_req *rqstp /* RPC stuff */
)
{
med_err_t *medep = &res->med_status;
int err;
/* Initialization */
(void) memset(res, 0, sizeof (*res));
*medep = med_null_err;
/* setup, check permissions */
if ((err = med_init(rqstp, R_OK, medep)) < 0)
return (FALSE);
else if (err != 0)
return (TRUE);
/* doit */
res->med_hnm = Strdup(mynode());
return (TRUE);
}