/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (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 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */

#ifndef __INSTALL_H
#define	__INSTALL_H


#ifdef __cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <limits.h>
#include <pkgstrct.h>

/* Settings for procedure scripts */
#define	PROC_USER	"root"
#define	PROC_GRP	"other"
#define	PROC_STDIN	"/dev/null"
#define	PROC_XSTDIN	"/dev/tty"
#define	PROC_STDOUT	"/dev/tty"

/* Settings for class action scripts */
#define	CAS_USER	"root"
#define	CAS_GRP		"other"
#define	CAS_STDIN	"/dev/null"
#define	CAS_STDOUT	"/dev/tty"

/* Settings for non-privileged scripts */
#define	CHK_USER	"install"	/* default user i.d. to use */
#define	CHK_USER_ALT	"noaccess"	/* alternate non-priv user */
#define	CHK_USER_ROOT	"root"		/* root user */
#define	CHK_USER_NON	"root"		/* user for non-compliant pkg's */
#define	CHK_GRP		"other"
#define	CHK_STDIN	"/dev/null"
#define	CHK_STDOUT	"/dev/tty"

/* Settings for admin "rscriptalt" option */
#define	RSCRIPTALT		rscriptalt
#define	RSCRIPTALT_KEYWORD	"rscriptalt"
#define	RSCRIPTALT_ROOT		"root"
#define	RSCRIPTALT_NOACCESS	"noaccess"

#define	OAMBASE	"/usr/sadm/sysadm"
#define	MAILCMD	"/usr/bin/mail"
#define	DATSTRM	"datastream"
#define	SHELL	"/sbin/sh"
#define	PKGINFO	"pkginfo"
#define	PKGMAP	"pkgmap"
#define	LIVE_CONT	"__live_cont__"
#define	RELOC "reloc"
#define	ROOT "root"

/* Additional cfent/cfextra codes. */
#define	BADFSYS	(short)(-1) /* an fsys is needed */
#define	BADINDEX    (-1)    /* pkg class idx not yet set */

/* This holds admin file data. */
struct admin {
	char	*mail;
	char	*instance;
	char	*partial;
	char	*runlevel;
	char	*idepend;
	char	*rdepend;
	char	*space;
	char	*setuid;
	char	*conflict;
	char	*action;
	char	*networktimeout;
	char	*networkretries;
	char	*authentication;
	char	*keystore;
	char	*proxy;
	char	*basedir;
	char	*rscriptalt;
};

/*
 * This table details the status of all filesystems available to the target
 * host.
 */
struct fstable {
	char	*name;	/* name of filesystem, (mount point) */
	int	namlen;	/* The length of the name (mountpoint) */
	fsblkcnt_t bsize;	/* fundamental file system block size */
	fsblkcnt_t frsize;	/* file system fragment size */
	fsblkcnt_t bfree;	/* total # of free blocks */
	fsblkcnt_t bused;	/* total # of used blocks */
	fsblkcnt_t ffree;	/* total # of free file nodes */
	fsblkcnt_t fused;	/* total # of used file nodes */
	char	*fstype;	/* type of filesystem - nfs, lo, ... */
	char	*remote_name;	/* client's mounted filesystem */
	unsigned	writeable:1;	/* access permission */
	unsigned	write_tested:1;	/* access permission fully tested */
	unsigned	remote:1;	/* on a remote filesystem */
	unsigned	mounted:1;	/* actually mounted right now */
	unsigned	srvr_map:1;	/* use server_map() */
	unsigned	cl_mounted:1;	/* mounted in client space */
	unsigned	mnt_failed:1;	/* attempt to loopback mount failed */
	unsigned	served:1;	/* filesystem comes from a server */
};

#define	ADM(x, y)	((adm.x != NULL) && (y != NULL) && \
			    strcmp(adm.x, y) == 0)
#define	ADMSET(x)	(adm.x != NULL)
#define	PARAMETRIC(x) (x[0] == '$')
#define	RELATIVE(x)	(x[0] != '/')

#if defined(lint) && !defined(gettext)
#define	gettext(x)	x
#endif	/* defined(lint) && !defined(gettext) */

#ifdef __cplusplus
}
#endif

#endif	/* __INSTALL_H */