OpenSolaris_b135/cmd/lvm/rpc.metamedd/med_svc_subr.c

/*
 * 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);
}