xref: /onnv-gate/usr/src/lib/libpkg/common/pkglib.h (revision 10176:7d4731c42dff)
19781SMoriah.Waterland@Sun.COM /*
29781SMoriah.Waterland@Sun.COM  * CDDL HEADER START
39781SMoriah.Waterland@Sun.COM  *
49781SMoriah.Waterland@Sun.COM  * The contents of this file are subject to the terms of the
59781SMoriah.Waterland@Sun.COM  * Common Development and Distribution License (the "License").
69781SMoriah.Waterland@Sun.COM  * You may not use this file except in compliance with the License.
79781SMoriah.Waterland@Sun.COM  *
89781SMoriah.Waterland@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99781SMoriah.Waterland@Sun.COM  * or http://www.opensolaris.org/os/licensing.
109781SMoriah.Waterland@Sun.COM  * See the License for the specific language governing permissions
119781SMoriah.Waterland@Sun.COM  * and limitations under the License.
129781SMoriah.Waterland@Sun.COM  *
139781SMoriah.Waterland@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
149781SMoriah.Waterland@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159781SMoriah.Waterland@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
169781SMoriah.Waterland@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
179781SMoriah.Waterland@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
189781SMoriah.Waterland@Sun.COM  *
199781SMoriah.Waterland@Sun.COM  * CDDL HEADER END
209781SMoriah.Waterland@Sun.COM  */
219781SMoriah.Waterland@Sun.COM 
229781SMoriah.Waterland@Sun.COM /*
239781SMoriah.Waterland@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
249781SMoriah.Waterland@Sun.COM  * Use is subject to license terms.
259781SMoriah.Waterland@Sun.COM  */
269781SMoriah.Waterland@Sun.COM 
279781SMoriah.Waterland@Sun.COM /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
289781SMoriah.Waterland@Sun.COM /* All Rights Reserved */
299781SMoriah.Waterland@Sun.COM 
309781SMoriah.Waterland@Sun.COM #ifndef	_PKGLIB_H
319781SMoriah.Waterland@Sun.COM #define	_PKGLIB_H
329781SMoriah.Waterland@Sun.COM 
339781SMoriah.Waterland@Sun.COM 
349781SMoriah.Waterland@Sun.COM #ifdef	__cplusplus
359781SMoriah.Waterland@Sun.COM extern "C" {
369781SMoriah.Waterland@Sun.COM #endif
379781SMoriah.Waterland@Sun.COM 
389781SMoriah.Waterland@Sun.COM #include <sys/types.h>
399781SMoriah.Waterland@Sun.COM #include <limits.h>
409781SMoriah.Waterland@Sun.COM #include <stdio.h>
419781SMoriah.Waterland@Sun.COM #include <pkgdev.h>
429781SMoriah.Waterland@Sun.COM #include <pkgstrct.h>
439781SMoriah.Waterland@Sun.COM #include <openssl/bio.h>
449781SMoriah.Waterland@Sun.COM #include <openssl/x509.h>
459781SMoriah.Waterland@Sun.COM #include <netdb.h>
469781SMoriah.Waterland@Sun.COM #include <boot_http.h>
479781SMoriah.Waterland@Sun.COM #include "pkgerr.h"
489781SMoriah.Waterland@Sun.COM #include "keystore.h"
499781SMoriah.Waterland@Sun.COM #include "cfext.h"
509781SMoriah.Waterland@Sun.COM 
519781SMoriah.Waterland@Sun.COM /*
52*9869SCasper.Dik@Sun.COM  * The contents database file interface.
53*9869SCasper.Dik@Sun.COM  */
54*9869SCasper.Dik@Sun.COM 
55*9869SCasper.Dik@Sun.COM typedef struct pkg_server *PKGserver;
56*9869SCasper.Dik@Sun.COM 
57*9869SCasper.Dik@Sun.COM /* Some commands modify the internal database: add them here */
58*9869SCasper.Dik@Sun.COM #define	PKG_WRITE_COMMAND(cmd)	((cmd) == PKG_ADDLINES)
59*9869SCasper.Dik@Sun.COM 
60*9869SCasper.Dik@Sun.COM #define	PKG_EXIT		0x0
61*9869SCasper.Dik@Sun.COM #define	PKG_FINDFILE		0x1
62*9869SCasper.Dik@Sun.COM #define	PKG_DUMP		0x2
63*9869SCasper.Dik@Sun.COM #define	PKG_PKGSYNC		0x3
64*9869SCasper.Dik@Sun.COM #define	PKG_FILTER		0x4
65*9869SCasper.Dik@Sun.COM #define	PKG_ADDLINES		0x5
66*9869SCasper.Dik@Sun.COM #define	PKG_NOP			0x6
67*9869SCasper.Dik@Sun.COM 
68*9869SCasper.Dik@Sun.COM #define	SUNW_PKG_SERVERMODE	"SUNW_PKG_SERVERMODE"
69*9869SCasper.Dik@Sun.COM 
70*9869SCasper.Dik@Sun.COM #define	PKGSERV_MODE		"pkg-server-mode="
71*9869SCasper.Dik@Sun.COM #define	PKGSERV_MODE_LEN	(sizeof (PKGSERV_MODE) - 1)
72*9869SCasper.Dik@Sun.COM 
73*9869SCasper.Dik@Sun.COM #define	MODE_PERMANENT		"permanent"
74*9869SCasper.Dik@Sun.COM #define	MODE_RUN_ONCE		"run_once"
75*9869SCasper.Dik@Sun.COM #define	MODE_TIMEOUT		"timeout"
76*9869SCasper.Dik@Sun.COM 
77*9869SCasper.Dik@Sun.COM #define	MAXLOGFILESIZE		(20 * 1024 * 1024)
78*9869SCasper.Dik@Sun.COM 
79*9869SCasper.Dik@Sun.COM #define	PKGLOG			"pkglog"
80*9869SCasper.Dik@Sun.COM #define	PKGDOOR			".door"
81*9869SCasper.Dik@Sun.COM 
82*9869SCasper.Dik@Sun.COM typedef enum {
83*9869SCasper.Dik@Sun.COM 	INVALID,		/* Not initialized */
84*9869SCasper.Dik@Sun.COM 	NEVER,			/* Don't start, does check if it is running. */
85*9869SCasper.Dik@Sun.COM 	FLUSH_LOG,		/* Run it once to incorporate the log. */
86*9869SCasper.Dik@Sun.COM 	RUN_ONCE,		/* Run until the current client stops. */
87*9869SCasper.Dik@Sun.COM 	TIMEOUT,		/* Run until a timeout occurs. */
88*9869SCasper.Dik@Sun.COM 	PERMANENT,		/* Run until it is externally terminated. */
89*9869SCasper.Dik@Sun.COM 	DEFAULTMODE = TIMEOUT	/* The default mode, must come last */
90*9869SCasper.Dik@Sun.COM } start_mode_t;
91*9869SCasper.Dik@Sun.COM 
92*9869SCasper.Dik@Sun.COM typedef struct pkgcmd {
93*9869SCasper.Dik@Sun.COM 	int cmd;
94*9869SCasper.Dik@Sun.COM 	char buf[1];
95*9869SCasper.Dik@Sun.COM } pkgcmd_t;
96*9869SCasper.Dik@Sun.COM 
97*9869SCasper.Dik@Sun.COM typedef struct pkgfilter {
98*9869SCasper.Dik@Sun.COM 	int cmd;
99*9869SCasper.Dik@Sun.COM 	int len;
100*9869SCasper.Dik@Sun.COM 	char buf[1];
101*9869SCasper.Dik@Sun.COM } pkgfilter_t;
102*9869SCasper.Dik@Sun.COM 
103*9869SCasper.Dik@Sun.COM /*
1049781SMoriah.Waterland@Sun.COM  * Virtual File Protocol definitions
1059781SMoriah.Waterland@Sun.COM  */
1069781SMoriah.Waterland@Sun.COM 
1079781SMoriah.Waterland@Sun.COM /*
1089781SMoriah.Waterland@Sun.COM  * flags associated with virtual file protocol operations; note that these flags
1099781SMoriah.Waterland@Sun.COM  * may only occupy the low order 16 bits of the 32-bit unsigned flag.
1109781SMoriah.Waterland@Sun.COM  */
1119781SMoriah.Waterland@Sun.COM 
1129781SMoriah.Waterland@Sun.COM typedef unsigned long VFPFLAGS_T;
1139781SMoriah.Waterland@Sun.COM 
1149781SMoriah.Waterland@Sun.COM #define	VFP_NONE	0x00000000	/* no special flags */
1159781SMoriah.Waterland@Sun.COM #define	VFP_NEEDNOW	0x00000001	/* need memory now */
1169781SMoriah.Waterland@Sun.COM #define	VFP_SEQUENTIAL	0x00000002	/* sequential access */
1179781SMoriah.Waterland@Sun.COM #define	VFP_RANDOM	0x00000004	/* random access */
1189781SMoriah.Waterland@Sun.COM #define	VFP_NOMMAP	0x00000008	/* do not use mmap to access file */
1199781SMoriah.Waterland@Sun.COM #define	VFP_NOMALLOC	0x00000010	/* do not use malloc to buffer file */
1209781SMoriah.Waterland@Sun.COM 
1219781SMoriah.Waterland@Sun.COM /* virtual file protocol object */
1229781SMoriah.Waterland@Sun.COM 
1239781SMoriah.Waterland@Sun.COM typedef struct _vfp VFP_T;
1249781SMoriah.Waterland@Sun.COM 
1259781SMoriah.Waterland@Sun.COM /* structure behind the virtual file protocol object */
1269781SMoriah.Waterland@Sun.COM 
1279781SMoriah.Waterland@Sun.COM struct _vfp {
1289781SMoriah.Waterland@Sun.COM 	FILE		*_vfpFile;	/* -> opened FILE */
1299781SMoriah.Waterland@Sun.COM 	char		*_vfpCurr;	/* -> current byte to read/write */
1309781SMoriah.Waterland@Sun.COM 	char		*_vfpHighWater;	/* -> last byte modified */
1319781SMoriah.Waterland@Sun.COM 	char		*_vfpEnd;	/* -> last data byte */
1329781SMoriah.Waterland@Sun.COM 	char		*_vfpPath;	/* -> path associated with FILE */
1339781SMoriah.Waterland@Sun.COM 	char		*_vfpStart;	/* -> first data byte */
1349781SMoriah.Waterland@Sun.COM 	void		*_vfpExtra;	/* undefined */
1359781SMoriah.Waterland@Sun.COM 	size_t		_vfpSize;	/* size of mapped/allocated area */
1369781SMoriah.Waterland@Sun.COM 	size_t		_vfpMapSize;	/* # mapped bytes */
1379781SMoriah.Waterland@Sun.COM 	VFPFLAGS_T	_vfpFlags;	/* flags associated with vfp/data */
1389781SMoriah.Waterland@Sun.COM 	int		_vfpOverflow;	/* non-zero if buffer write overflow */
1399781SMoriah.Waterland@Sun.COM 	blkcnt_t	_vfpCkStBlocks;	/* checkpoint # blocks */
1409781SMoriah.Waterland@Sun.COM 	dev_t		_vfpCkDev;	/* checkpoint device i.d. */
1419781SMoriah.Waterland@Sun.COM 	ino_t		_vfpCkIno;	/* checkpoint inode # */
1429781SMoriah.Waterland@Sun.COM 	off_t		_vfpCkSize;	/* checkpoint size */
1439781SMoriah.Waterland@Sun.COM 	time_t		_vfpCkMtime;	/* checkpoint modification time */
1449781SMoriah.Waterland@Sun.COM };
1459781SMoriah.Waterland@Sun.COM 
1469781SMoriah.Waterland@Sun.COM /*
1479781SMoriah.Waterland@Sun.COM  * get highest modified byte (length) contained in vfp
1489781SMoriah.Waterland@Sun.COM  *
1499781SMoriah.Waterland@Sun.COM  * determine number of bytes to write - it will be the highest of:
1509781SMoriah.Waterland@Sun.COM  *  -- the current pointer into the file - this is updated whenever
1519781SMoriah.Waterland@Sun.COM  *	the location of the file is changed by a single byte
1529781SMoriah.Waterland@Sun.COM  *  -- the last "high water mark" - the last known location that
1539781SMoriah.Waterland@Sun.COM  *	was written to the file - updated only when the location
1549781SMoriah.Waterland@Sun.COM  *	of the file is directly changed - e.g. vfpSetCurrCharPtr,
1559781SMoriah.Waterland@Sun.COM  *	vfpTruncate, vfpRewind.
1569781SMoriah.Waterland@Sun.COM  * this reduces the "bookkeeping" that needs to be done to know
1579781SMoriah.Waterland@Sun.COM  * how many bytes to write out to the file - typically a file is
1589781SMoriah.Waterland@Sun.COM  * written sequentially so the current file pointer is sufficient
1599781SMoriah.Waterland@Sun.COM  * to determine how many bytes to write out.
1609781SMoriah.Waterland@Sun.COM  */
1619781SMoriah.Waterland@Sun.COM 
1629781SMoriah.Waterland@Sun.COM #define	vfpGetModifiedLen(VFP)						\
1639781SMoriah.Waterland@Sun.COM 	(size_t)(((VFP)->_vfpHighWater > (VFP)->_vfpCurr) ?		\
1649781SMoriah.Waterland@Sun.COM 		(((ptrdiff_t)(VFP)->_vfpHighWater -			\
1659781SMoriah.Waterland@Sun.COM 				(ptrdiff_t)(VFP)->_vfpStart)) :		\
1669781SMoriah.Waterland@Sun.COM 		(((ptrdiff_t)(VFP)->_vfpCurr -				\
1679781SMoriah.Waterland@Sun.COM 				(ptrdiff_t)(VFP)->_vfpStart)))
1689781SMoriah.Waterland@Sun.COM 
1699781SMoriah.Waterland@Sun.COM /*
1709781SMoriah.Waterland@Sun.COM  * increment current pointer by specified delta
1719781SMoriah.Waterland@Sun.COM  * if the delta exceeds the buffer size, set pointer to buffer end
1729781SMoriah.Waterland@Sun.COM  */
1739781SMoriah.Waterland@Sun.COM #define	vfpIncCurrPtrBy(VFP, INC)					\
1749781SMoriah.Waterland@Sun.COM 	{								\
1759781SMoriah.Waterland@Sun.COM 		((VFP)->_vfpCurr) += (INC);				\
1769781SMoriah.Waterland@Sun.COM 		if (((VFP)->_vfpCurr) > ((VFP)->_vfpEnd)) {		\
1779781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr = (VFP)->_vfpEnd;		\
1789781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpOverflow = 1;			\
1799781SMoriah.Waterland@Sun.COM 		}							\
1809781SMoriah.Waterland@Sun.COM 		if ((VFP)->_vfpHighWater < (VFP)->_vfpCurr) {		\
1819781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpHighWater = (VFP)->_vfpCurr;		\
1829781SMoriah.Waterland@Sun.COM 		}							\
1839781SMoriah.Waterland@Sun.COM 	}
1849781SMoriah.Waterland@Sun.COM 
1859781SMoriah.Waterland@Sun.COM /* get the path associated with the vfp */
1869781SMoriah.Waterland@Sun.COM #define	vfpGetPath(VFP)		((VFP)->_vfpPath)
1879781SMoriah.Waterland@Sun.COM 
1889781SMoriah.Waterland@Sun.COM /* get a string from the vfp into a fixed size buffer */
1899781SMoriah.Waterland@Sun.COM #define	vfpGets(VFP, PTR, LEN)						\
1909781SMoriah.Waterland@Sun.COM 	{								\
1919781SMoriah.Waterland@Sun.COM 		char	*XXpXX = (PTR);					\
1929781SMoriah.Waterland@Sun.COM 		size_t	XXlXX = (LEN);					\
1939781SMoriah.Waterland@Sun.COM 		while ((*(VFP)->_vfpCurr != '\0') &&			\
1949781SMoriah.Waterland@Sun.COM 				(*(VFP)->_vfpCurr != '\n')) {		\
1959781SMoriah.Waterland@Sun.COM 			if (XXlXX > 1) {				\
1969781SMoriah.Waterland@Sun.COM 				*XXpXX++ = *(VFP)->_vfpCurr;		\
1979781SMoriah.Waterland@Sun.COM 				XXlXX--;				\
1989781SMoriah.Waterland@Sun.COM 			}						\
1999781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr++;				\
2009781SMoriah.Waterland@Sun.COM 		}							\
2019781SMoriah.Waterland@Sun.COM 		*XXpXX++ = '\0';					\
2029781SMoriah.Waterland@Sun.COM 		if (*(VFP)->_vfpCurr != '\0') {				\
2039781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr++;				\
2049781SMoriah.Waterland@Sun.COM 		}							\
2059781SMoriah.Waterland@Sun.COM 	}
2069781SMoriah.Waterland@Sun.COM 
2079781SMoriah.Waterland@Sun.COM /* get number of bytes remaining to read */
2089781SMoriah.Waterland@Sun.COM #define	vfpGetBytesRemaining(VFP)	\
2099781SMoriah.Waterland@Sun.COM 	(((((VFP)->_vfpHighWater) <= ((VFP)->_vfpCurr))) ? 0 : 		\
2109781SMoriah.Waterland@Sun.COM 	((((ptrdiff_t)(VFP)->_vfpHighWater)-((ptrdiff_t)(VFP)->_vfpCurr))))
2119781SMoriah.Waterland@Sun.COM 
2129781SMoriah.Waterland@Sun.COM /* get number of bytes remaining to write */
2139781SMoriah.Waterland@Sun.COM #define	vfpGetBytesAvailable(VFP)	\
2149781SMoriah.Waterland@Sun.COM 	(((((VFP)->_vfpEnd) <= ((VFP)->_vfpCurr))) ? 0 : 		\
2159781SMoriah.Waterland@Sun.COM 	((((ptrdiff_t)(VFP)->_vfpEnd)-((ptrdiff_t)(VFP)->_vfpCurr))))
2169781SMoriah.Waterland@Sun.COM 
2179781SMoriah.Waterland@Sun.COM /* put current character and increment to next */
2189781SMoriah.Waterland@Sun.COM #define	vfpPutc(VFP, C)							\
2199781SMoriah.Waterland@Sun.COM 	{								\
2209781SMoriah.Waterland@Sun.COM 		(*(VFP)->_vfpCurr) = ((char)(C));			\
2219781SMoriah.Waterland@Sun.COM 		vfpIncCurrPtrBy((VFP), 1);				\
2229781SMoriah.Waterland@Sun.COM 	}
2239781SMoriah.Waterland@Sun.COM 
2249781SMoriah.Waterland@Sun.COM /* put integer to current character and increment */
2259781SMoriah.Waterland@Sun.COM #define	vfpPutInteger(VFP, NUMBER)	vfpPutFormat((VFP), "%d", (NUMBER))
2269781SMoriah.Waterland@Sun.COM 
2279781SMoriah.Waterland@Sun.COM /* put long to current character and increment */
2289781SMoriah.Waterland@Sun.COM #define	vfpPutLong(VFP, NUMBER)	vfpPutFormat((VFP), "%ld", (NUMBER))
2299781SMoriah.Waterland@Sun.COM 
2309781SMoriah.Waterland@Sun.COM /* get current character and increment to next */
2319781SMoriah.Waterland@Sun.COM #define	vfpGetc(VFP)		(*(VFP)->_vfpCurr++)
2329781SMoriah.Waterland@Sun.COM 
2339781SMoriah.Waterland@Sun.COM /* get current character - do not increment */
2349781SMoriah.Waterland@Sun.COM #define	vfpGetcNoInc(VFP)	(*(VFP)->_vfpCurr)
2359781SMoriah.Waterland@Sun.COM 
2369781SMoriah.Waterland@Sun.COM /* get pointer to current character */
2379781SMoriah.Waterland@Sun.COM #define	vfpGetCurrCharPtr(VFP)	((VFP)->_vfpCurr)
2389781SMoriah.Waterland@Sun.COM 
2399781SMoriah.Waterland@Sun.COM /* increment current character pointer */
2409781SMoriah.Waterland@Sun.COM #define	vfpIncCurrPtr(VFP)	vfpIncCurrPtrBy((VFP), 1)
2419781SMoriah.Waterland@Sun.COM 
2429781SMoriah.Waterland@Sun.COM /* decrement current character pointer */
2439781SMoriah.Waterland@Sun.COM #define	vfpDecCurrPtr(VFP)	((VFP)->_vfpCurr--)
2449781SMoriah.Waterland@Sun.COM 
2459781SMoriah.Waterland@Sun.COM /* get pointer to first data byte in buffer */
2469781SMoriah.Waterland@Sun.COM #define	vfpGetFirstCharPtr(VFP)	((VFP)->_vfpStart)
2479781SMoriah.Waterland@Sun.COM 
2489781SMoriah.Waterland@Sun.COM /* get pointer to last data byte in buffer */
2499781SMoriah.Waterland@Sun.COM #define	vfpGetLastCharPtr(VFP)	((VFP)->_vfpHighWater)
2509781SMoriah.Waterland@Sun.COM 
2519781SMoriah.Waterland@Sun.COM /* set pointer to current character */
2529781SMoriah.Waterland@Sun.COM #define	vfpSetCurrCharPtr(VFP, PTR)					\
2539781SMoriah.Waterland@Sun.COM 	if ((VFP)->_vfpCurr > (VFP)->_vfpHighWater) {			\
2549781SMoriah.Waterland@Sun.COM 		(VFP)->_vfpHighWater = (VFP)->_vfpCurr;			\
2559781SMoriah.Waterland@Sun.COM 	}								\
2569781SMoriah.Waterland@Sun.COM 	((VFP)->_vfpCurr = (PTR))
2579781SMoriah.Waterland@Sun.COM 
2589781SMoriah.Waterland@Sun.COM /* set pointer to last data byte in buffer */
2599781SMoriah.Waterland@Sun.COM #define	vfpSetLastCharPtr(VFP, PTR)					\
2609781SMoriah.Waterland@Sun.COM 	if ((PTR) >= (VFP)->_vfpStart) {				\
2619781SMoriah.Waterland@Sun.COM 		(VFP)->_vfpHighWater = (PTR);				\
2629781SMoriah.Waterland@Sun.COM 		if ((VFP)->_vfpCurr > (VFP)->_vfpHighWater) {		\
2639781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr = (VFP)->_vfpHighWater;		\
2649781SMoriah.Waterland@Sun.COM 		}							\
2659781SMoriah.Waterland@Sun.COM 	}
2669781SMoriah.Waterland@Sun.COM 
2679781SMoriah.Waterland@Sun.COM /* seek to end of file - one past last data byte in file */
2689781SMoriah.Waterland@Sun.COM #define	vfpSeekToEnd(VFP)	((VFP)->_vfpCurr = ((VFP)->_vfpHighWater)+1)
2699781SMoriah.Waterland@Sun.COM 
2709781SMoriah.Waterland@Sun.COM /* get number of bytes between current char and specified char */
2719781SMoriah.Waterland@Sun.COM #define	vfpGetCurrPtrDelta(VFP, P)	\
2729781SMoriah.Waterland@Sun.COM 	(((ptrdiff_t)(P))-((ptrdiff_t)(VFP)->_vfpCurr))
2739781SMoriah.Waterland@Sun.COM 
2749781SMoriah.Waterland@Sun.COM /* put string to current character and increment */
2759781SMoriah.Waterland@Sun.COM #define	vfpPuts(VFP, S)							\
2769781SMoriah.Waterland@Sun.COM 	{								\
2779781SMoriah.Waterland@Sun.COM 		size_t	xxLen;						\
2789781SMoriah.Waterland@Sun.COM 		size_t	xxResult;					\
2799781SMoriah.Waterland@Sun.COM 		xxLen = vfpGetBytesAvailable((VFP));			\
2809781SMoriah.Waterland@Sun.COM 		xxResult = strlcpy(((VFP)->_vfpCurr), (S), xxLen);	\
2819781SMoriah.Waterland@Sun.COM 		vfpIncCurrPtrBy((VFP), xxResult);			\
2829781SMoriah.Waterland@Sun.COM 	}
2839781SMoriah.Waterland@Sun.COM 
2849781SMoriah.Waterland@Sun.COM /* put fixed number of bytes to current character and increment */
2859781SMoriah.Waterland@Sun.COM #define	vfpPutBytes(VFP, PTR, LEN)					\
2869781SMoriah.Waterland@Sun.COM 	{								\
2879781SMoriah.Waterland@Sun.COM 		size_t	xxLen;						\
2889781SMoriah.Waterland@Sun.COM 		xxLen = vfpGetBytesAvailable((VFP));			\
2899781SMoriah.Waterland@Sun.COM 		if (xxLen > (LEN)) {					\
2909781SMoriah.Waterland@Sun.COM 			xxLen = (LEN);					\
2919781SMoriah.Waterland@Sun.COM 		} else {						\
2929781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpOverflow = 1;			\
2939781SMoriah.Waterland@Sun.COM 		}							\
2949781SMoriah.Waterland@Sun.COM 		memcpy((VFP)->_vfpCurr, (PTR), (xxLen));		\
2959781SMoriah.Waterland@Sun.COM 		vfpIncCurrPtrBy((VFP), (xxLen));			\
2969781SMoriah.Waterland@Sun.COM 	}
2979781SMoriah.Waterland@Sun.COM 
2989781SMoriah.Waterland@Sun.COM /* put format one arg to current character and increment */
2999781SMoriah.Waterland@Sun.COM #define	vfpPutFormat(VFP, FORMAT, ARG)					\
3009781SMoriah.Waterland@Sun.COM 	{								\
3019781SMoriah.Waterland@Sun.COM 	char	xxTeMpXX[256];						\
3029781SMoriah.Waterland@Sun.COM 	(void) snprintf(xxTeMpXX, sizeof (xxTeMpXX), (FORMAT), (ARG));	\
3039781SMoriah.Waterland@Sun.COM 	vfpPuts((VFP), xxTeMpXX);					\
3049781SMoriah.Waterland@Sun.COM 	}
3059781SMoriah.Waterland@Sun.COM 
3069781SMoriah.Waterland@Sun.COM struct dm_buf {
3079781SMoriah.Waterland@Sun.COM 	char *text_buffer;	/* start of allocated buffer */
3089781SMoriah.Waterland@Sun.COM 	int offset;		/* number of bytes into the text_buffer */
3099781SMoriah.Waterland@Sun.COM 	int allocation;		/* size of buffer in bytes */
3109781SMoriah.Waterland@Sun.COM };
3119781SMoriah.Waterland@Sun.COM 
3129781SMoriah.Waterland@Sun.COM /* This structure is used to hold a dynamically growing string */
3139781SMoriah.Waterland@Sun.COM 
3149781SMoriah.Waterland@Sun.COM struct dstr {
3159781SMoriah.Waterland@Sun.COM 	char *pc;
3169781SMoriah.Waterland@Sun.COM 	int   len;
3179781SMoriah.Waterland@Sun.COM 	int   max;
3189781SMoriah.Waterland@Sun.COM };
3199781SMoriah.Waterland@Sun.COM 
3209781SMoriah.Waterland@Sun.COM /* setmapmode() defines */
3219781SMoriah.Waterland@Sun.COM #define	MAPALL		0	/* resolve all variables */
3229781SMoriah.Waterland@Sun.COM #define	MAPBUILD	1	/* map only build variables */
3239781SMoriah.Waterland@Sun.COM #define	MAPINSTALL	2	/* map only install variables */
3249781SMoriah.Waterland@Sun.COM #define	MAPNONE		3	/* map no variables */
3259781SMoriah.Waterland@Sun.COM 
3269781SMoriah.Waterland@Sun.COM #define	NON_ABI_NAMELNGTH	33	/* 32 chars for name + 1 for NULL */
3279781SMoriah.Waterland@Sun.COM 
3289781SMoriah.Waterland@Sun.COM #define	BLK_SIZE	512	/* size of logical block */
3299781SMoriah.Waterland@Sun.COM 
3309781SMoriah.Waterland@Sun.COM /* max length for printed attributes */
3319781SMoriah.Waterland@Sun.COM #define	ATTR_MAX	80
3329781SMoriah.Waterland@Sun.COM 
3339781SMoriah.Waterland@Sun.COM /*
3349781SMoriah.Waterland@Sun.COM  * These three defines indicate that the prototype file contains a '?'
3359781SMoriah.Waterland@Sun.COM  * meaning do not specify this data in the pkgmap entry.
3369781SMoriah.Waterland@Sun.COM  */
3379781SMoriah.Waterland@Sun.COM #define	CURMODE		BADMODE		/* current mode has been specified */
3389781SMoriah.Waterland@Sun.COM #define	CUROWNER	BADOWNER	/* ... same for owner ... */
3399781SMoriah.Waterland@Sun.COM #define	CURGROUP	BADGROUP	/* ... and group. */
3409781SMoriah.Waterland@Sun.COM 
3419781SMoriah.Waterland@Sun.COM #define	WILDCARD		BADMODE >> 1
3429781SMoriah.Waterland@Sun.COM #define	DB_UNDEFINED_ENTRY	"?"
3439781SMoriah.Waterland@Sun.COM 
3449781SMoriah.Waterland@Sun.COM #define	DEFAULT_MODE		0755
3459781SMoriah.Waterland@Sun.COM #define	DEFAULT_MODE_FILE	0644
3469781SMoriah.Waterland@Sun.COM #define	DEFAULT_OWNER	"root"
3479781SMoriah.Waterland@Sun.COM #define	DEFAULT_GROUP	"other"
3489781SMoriah.Waterland@Sun.COM 
3499781SMoriah.Waterland@Sun.COM #define	INST_RELEASE "var/sadm/system/admin/INST_RELEASE"
3509781SMoriah.Waterland@Sun.COM 
3519781SMoriah.Waterland@Sun.COM #define	RANDOM			"/dev/urandom"
3529781SMoriah.Waterland@Sun.COM #define	BLOCK			256
3539781SMoriah.Waterland@Sun.COM 
3549781SMoriah.Waterland@Sun.COM #define	TERM_WIDTH		60
3559781SMoriah.Waterland@Sun.COM #define	SMALL_DIVISOR		4
3569781SMoriah.Waterland@Sun.COM #define	MED_DIVISOR		5
3579781SMoriah.Waterland@Sun.COM #define	LARGE_DIVISOR		10
3589781SMoriah.Waterland@Sun.COM #define	MED_DWNLD		(10 * 1024 * 1024) /* 10 MB */
3599781SMoriah.Waterland@Sun.COM #define	LARGE_DWNLD		(5 * MED_DWNLD) /* 50 MB */
3609781SMoriah.Waterland@Sun.COM 
3619781SMoriah.Waterland@Sun.COM #define	HTTP			"http://"
3629781SMoriah.Waterland@Sun.COM #define	HTTPS			"https://"
3639781SMoriah.Waterland@Sun.COM 
3649781SMoriah.Waterland@Sun.COM #define	PKGADD			"pkgadd"
3659781SMoriah.Waterland@Sun.COM 
3669781SMoriah.Waterland@Sun.COM /* Settings for network admin defaults */
3679781SMoriah.Waterland@Sun.COM 
3689781SMoriah.Waterland@Sun.COM #define	NET_TIMEOUT_DEFAULT 	60
3699781SMoriah.Waterland@Sun.COM #define	NET_RETRIES_DEFAULT 	3
3709781SMoriah.Waterland@Sun.COM #define	NET_TIMEOUT_MIN		1		/* 1 second */
3719781SMoriah.Waterland@Sun.COM #define	NET_TIMEOUT_MAX		(5 * 60)	/* 5 minutes */
3729781SMoriah.Waterland@Sun.COM #define	NET_RETRIES_MIN		1
3739781SMoriah.Waterland@Sun.COM #define	NET_RETRIES_MAX		10
3749781SMoriah.Waterland@Sun.COM #define	AUTH_NOCHECK		0
3759781SMoriah.Waterland@Sun.COM #define	AUTH_QUIT		1
3769781SMoriah.Waterland@Sun.COM 
3779781SMoriah.Waterland@Sun.COM /* package header magic tokens */
3789781SMoriah.Waterland@Sun.COM #define	HDR_PREFIX	"# PaCkAgE DaTaStReAm"
3799781SMoriah.Waterland@Sun.COM #define	HDR_SUFFIX	"# end of header"
3809781SMoriah.Waterland@Sun.COM 
3819781SMoriah.Waterland@Sun.COM /* name of security files */
3829781SMoriah.Waterland@Sun.COM #define	PKGSEC		"/var/sadm/security"
3839781SMoriah.Waterland@Sun.COM #define	SIGNATURE_FILENAME	"signature"
3849781SMoriah.Waterland@Sun.COM 
3859781SMoriah.Waterland@Sun.COM #define	GROUP	"/etc/group"
3869781SMoriah.Waterland@Sun.COM #define	PASSWD	"/etc/passwd"
3879781SMoriah.Waterland@Sun.COM 
3889781SMoriah.Waterland@Sun.COM /*
3899781SMoriah.Waterland@Sun.COM  * The next three mean that no mode, owner or group was specified or that the
3909781SMoriah.Waterland@Sun.COM  * one specified is invalid for some reason. Sometimes this is an error in
3919781SMoriah.Waterland@Sun.COM  * which case it is generally converted to CUR* with a warning. Other times
3929781SMoriah.Waterland@Sun.COM  * it means "look it up" by stating the existing file system object pointred
3939781SMoriah.Waterland@Sun.COM  * to in the prototype file.
3949781SMoriah.Waterland@Sun.COM  */
3959781SMoriah.Waterland@Sun.COM #define	NOMODE		(BADMODE-1)
3969781SMoriah.Waterland@Sun.COM #define	NOOWNER		"@"
3979781SMoriah.Waterland@Sun.COM #define	NOGROUP		"@"
3989781SMoriah.Waterland@Sun.COM 
3999781SMoriah.Waterland@Sun.COM /* string comparitor abbreviators */
4009781SMoriah.Waterland@Sun.COM 
4019781SMoriah.Waterland@Sun.COM #define	ci_streq(a, b)		(strcasecmp((a), (b)) == 0)
4029781SMoriah.Waterland@Sun.COM #define	ci_strneq(a, b, c)	(strncasecmp((a), (b), (c)) == 0)
4039781SMoriah.Waterland@Sun.COM #define	streq(a, b)		(strcmp((a), (b)) == 0)
4049781SMoriah.Waterland@Sun.COM #define	strneq(a, b, c)		(strncmp((a), (b), (c)) == 0)
4059781SMoriah.Waterland@Sun.COM 
4069781SMoriah.Waterland@Sun.COM #ifdef	__STDC__
4079781SMoriah.Waterland@Sun.COM 
4089781SMoriah.Waterland@Sun.COM extern FILE	*epopen(char *cmd, char *mode);
4099781SMoriah.Waterland@Sun.COM extern char	**gpkglist(char *dir, char **pkg, char **catg);
4109781SMoriah.Waterland@Sun.COM extern int	is_not_valid_length(char **category);
4119781SMoriah.Waterland@Sun.COM extern int	is_not_valid_category(char **category, char *progname);
4129781SMoriah.Waterland@Sun.COM extern int	is_same_CATEGORY(char **category, char *installed_category);
4139781SMoriah.Waterland@Sun.COM extern char **get_categories(char *catg_arg);
4149781SMoriah.Waterland@Sun.COM 
4159781SMoriah.Waterland@Sun.COM extern void	pkglist_cont(char *keyword);
4169781SMoriah.Waterland@Sun.COM extern char	**pkgalias(char *pkg);
4179781SMoriah.Waterland@Sun.COM extern char	*get_prog_name(void);
4189781SMoriah.Waterland@Sun.COM extern char 	*set_prog_name(char *name);
4199781SMoriah.Waterland@Sun.COM extern int	averify(int fix, char *ftype, char *path, struct ainfo *ainfo);
4209781SMoriah.Waterland@Sun.COM extern int	ckparam(char *param, char *value);
4219781SMoriah.Waterland@Sun.COM extern int	ckvolseq(char *dir, int part, int nparts);
4229781SMoriah.Waterland@Sun.COM extern int	cverify(int fix, char *ftype, char *path, struct cinfo *cinfo,
4239781SMoriah.Waterland@Sun.COM 			int allow_checksum);
4249781SMoriah.Waterland@Sun.COM extern unsigned long	compute_checksum(int *r_cksumerr, char *a_path);
4259781SMoriah.Waterland@Sun.COM extern int	fverify(int fix, char *ftype, char *path, struct ainfo *ainfo,
4269781SMoriah.Waterland@Sun.COM 		    struct cinfo *cinfo);
4279781SMoriah.Waterland@Sun.COM extern char	*getErrbufAddr(void);
4289781SMoriah.Waterland@Sun.COM extern int	getErrbufSize(void);
4299781SMoriah.Waterland@Sun.COM extern char	*getErrstr(void);
4309781SMoriah.Waterland@Sun.COM extern void	setErrstr(char *errstr);
4319781SMoriah.Waterland@Sun.COM extern int	devtype(char *alias, struct pkgdev *devp);
4329781SMoriah.Waterland@Sun.COM extern int	ds_totread;	/* total number of parts read */
4339781SMoriah.Waterland@Sun.COM extern int	ds_close(int pkgendflg);
4349781SMoriah.Waterland@Sun.COM extern int	ds_findpkg(char *device, char *pkg);
4359781SMoriah.Waterland@Sun.COM extern int	ds_getinfo(char *string);
4369781SMoriah.Waterland@Sun.COM extern int	ds_getpkg(char *device, int n, char *dstdir);
4379781SMoriah.Waterland@Sun.COM extern int	ds_ginit(char *device);
4389781SMoriah.Waterland@Sun.COM extern boolean_t	ds_fd_open(void);
4399781SMoriah.Waterland@Sun.COM extern int	ds_init(char *device, char **pkg, char *norewind);
4409781SMoriah.Waterland@Sun.COM extern int	BIO_ds_dump_header(PKG_ERR *, BIO *);
4419781SMoriah.Waterland@Sun.COM extern int	BIO_ds_dump(PKG_ERR *, char *, BIO *);
4429781SMoriah.Waterland@Sun.COM extern int	BIO_dump_cmd(char *cmd, BIO *bio);
4439781SMoriah.Waterland@Sun.COM extern int	ds_next(char *, char *);
4449781SMoriah.Waterland@Sun.COM extern int	ds_readbuf(char *device);
4459781SMoriah.Waterland@Sun.COM extern int	epclose(FILE *pp);
4469781SMoriah.Waterland@Sun.COM extern int	esystem(char *cmd, int ifd, int ofd);
4479781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdArray(int *r_status, char **r_results,
4489781SMoriah.Waterland@Sun.COM 			char *a_inputFile, char *a_cmd, char **a_args);
4499781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdList(int *r_status, char **r_results,
4509781SMoriah.Waterland@Sun.COM 			char *a_inputFile, char *a_cmd, ...);
4519781SMoriah.Waterland@Sun.COM extern int	gpkgmap(struct cfent *ept, FILE *fp);
4529781SMoriah.Waterland@Sun.COM extern int	gpkgmapvfp(struct cfent *ept, VFP_T *fpv);
4539781SMoriah.Waterland@Sun.COM extern void	setmapmode(int mode_no);
4549781SMoriah.Waterland@Sun.COM extern int	isFdRemote(int a_fd);
4559781SMoriah.Waterland@Sun.COM extern int	isFstypeRemote(char *a_fstype);
4569781SMoriah.Waterland@Sun.COM extern int	isPathRemote(char *a_path);
4579781SMoriah.Waterland@Sun.COM extern int	iscpio(char *path, int *iscomp);
4589781SMoriah.Waterland@Sun.COM extern int	isdir(char *path);
4599781SMoriah.Waterland@Sun.COM extern int	isfile(char *dir, char *file);
4609781SMoriah.Waterland@Sun.COM extern int	fmkdir(char *a_path, int a_mode);
4619781SMoriah.Waterland@Sun.COM extern int	pkgexecl(char *filein, char *fileout, char *uname, char *gname,
4629781SMoriah.Waterland@Sun.COM 			...);
4639781SMoriah.Waterland@Sun.COM extern int	pkgexecv(char *filein, char *fileout, char *uname, char *gname,
4649781SMoriah.Waterland@Sun.COM 			char *arg[]);
4659781SMoriah.Waterland@Sun.COM extern int	pkghead(char *device);
4669781SMoriah.Waterland@Sun.COM extern int	pkgmount(struct pkgdev *devp, char *pkg, int part, int nparts,
4679781SMoriah.Waterland@Sun.COM 			int getvolflg);
4689781SMoriah.Waterland@Sun.COM extern int	pkgtrans(char *device1, char *device2, char **pkg,
4699781SMoriah.Waterland@Sun.COM 			int options, keystore_handle_t, char *);
4709781SMoriah.Waterland@Sun.COM extern int	pkgumount(struct pkgdev *devp);
4719781SMoriah.Waterland@Sun.COM extern int	ppkgmap(struct cfent *ept, FILE *fp);
4729781SMoriah.Waterland@Sun.COM extern int	putcfile(struct cfent *ept, FILE *fp);
4739781SMoriah.Waterland@Sun.COM extern int	putcvfpfile(struct cfent *ept, VFP_T *vfp);
4749781SMoriah.Waterland@Sun.COM extern int	rrmdir(char *path);
4759781SMoriah.Waterland@Sun.COM extern void	set_memalloc_failure_func(void (*)(int));
4769781SMoriah.Waterland@Sun.COM extern void	*xmalloc(size_t size);
4779781SMoriah.Waterland@Sun.COM extern void	*xrealloc(void *ptr, size_t size);
4789781SMoriah.Waterland@Sun.COM extern char	*xstrdup(char *str);
4799781SMoriah.Waterland@Sun.COM extern void	set_passphrase_prompt(char *);
4809781SMoriah.Waterland@Sun.COM extern void	set_passphrase_passarg(char *);
4819781SMoriah.Waterland@Sun.COM extern int	pkg_passphrase_cb(char *, int, int, void *);
4829781SMoriah.Waterland@Sun.COM 
483*9869SCasper.Dik@Sun.COM extern int	srchcfile(struct cfent *ept, char *path, PKGserver server);
4849781SMoriah.Waterland@Sun.COM extern struct	group *cgrgid(gid_t gid);
4859781SMoriah.Waterland@Sun.COM extern struct	group *cgrnam(char *nam);
4869781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwnam(char *nam);
4879781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwuid(uid_t uid);
4889781SMoriah.Waterland@Sun.COM extern struct	group *clgrgid(gid_t gid);
4899781SMoriah.Waterland@Sun.COM extern struct	group *clgrnam(char *nam);
4909781SMoriah.Waterland@Sun.COM extern struct	passwd *clpwnam(char *nam);
4919781SMoriah.Waterland@Sun.COM extern struct	passwd *clpwuid(uid_t uid);
4929781SMoriah.Waterland@Sun.COM extern void	basepath(char *path, char *basedir, char *ir);
4939781SMoriah.Waterland@Sun.COM extern void	canonize(char *file);
4949781SMoriah.Waterland@Sun.COM extern void	canonize_slashes(char *file);
4959781SMoriah.Waterland@Sun.COM extern void	checksum_off(void);
4969781SMoriah.Waterland@Sun.COM extern void	checksum_on(void);
4979781SMoriah.Waterland@Sun.COM extern void	cvtpath(char *path, char *copy);
4989781SMoriah.Waterland@Sun.COM extern void	ds_order(char *list[]);
4999781SMoriah.Waterland@Sun.COM extern void	ds_putinfo(char *buf);
5009781SMoriah.Waterland@Sun.COM extern void	ds_skiptoend(char *device);
5019781SMoriah.Waterland@Sun.COM extern void	ecleanup(void);
5029781SMoriah.Waterland@Sun.COM /*PRINTFLIKE1*/
5039781SMoriah.Waterland@Sun.COM extern void	logerr(char *fmt, ...);
5049781SMoriah.Waterland@Sun.COM extern int	mappath(int flag, char *path);
5059781SMoriah.Waterland@Sun.COM extern int	mapvar(int flag, char *varname);
5069781SMoriah.Waterland@Sun.COM /*PRINTFLIKE1*/
5079781SMoriah.Waterland@Sun.COM extern void	progerr(char *fmt, ...);
5089781SMoriah.Waterland@Sun.COM extern void	pkgerr(PKG_ERR *);
5099781SMoriah.Waterland@Sun.COM extern void	rpterr(void);
5109781SMoriah.Waterland@Sun.COM extern void	tputcfent(struct cfent *ept, FILE *fp);
5119781SMoriah.Waterland@Sun.COM extern void	set_nonABI_symlinks(void);
5129781SMoriah.Waterland@Sun.COM extern int	nonABI_symlinks(void);
5139781SMoriah.Waterland@Sun.COM extern void	disable_attribute_check(void);
5149781SMoriah.Waterland@Sun.COM extern int	get_disable_attribute_check(void);
5159781SMoriah.Waterland@Sun.COM 
5169781SMoriah.Waterland@Sun.COM /* security.c */
5179781SMoriah.Waterland@Sun.COM extern void	sec_init(void);
5189781SMoriah.Waterland@Sun.COM extern char	*get_subject_display_name(X509 *);
5199781SMoriah.Waterland@Sun.COM extern char	*get_issuer_display_name(X509 *);
5209781SMoriah.Waterland@Sun.COM extern char	*get_serial_num(X509 *);
5219781SMoriah.Waterland@Sun.COM extern char	*get_fingerprint(X509 *, const EVP_MD *);
5229781SMoriah.Waterland@Sun.COM extern int	get_cert_chain(PKG_ERR *, X509 *, STACK_OF(X509) *,
5239781SMoriah.Waterland@Sun.COM     STACK_OF(X509) *, STACK_OF(X509) **);
5249781SMoriah.Waterland@Sun.COM 
5259781SMoriah.Waterland@Sun.COM /* pkgstr.c */
5269781SMoriah.Waterland@Sun.COM void		pkgstrConvertUllToTimeString_r(unsigned long long a_time,
5279781SMoriah.Waterland@Sun.COM 			char *a_buf, int a_bufLen);
5289781SMoriah.Waterland@Sun.COM char		*pkgstrConvertPathToBasename(char *a_path);
5299781SMoriah.Waterland@Sun.COM char		*pkgstrConvertPathToDirname(char *a_path);
5309781SMoriah.Waterland@Sun.COM char		*pkgstrDup(char *a_str);
5319781SMoriah.Waterland@Sun.COM char		*pkgstrLocatePathBasename(char *a_path);
5329781SMoriah.Waterland@Sun.COM void		pkgstrScaleNumericString(char *a_buf, unsigned long long scale);
5339781SMoriah.Waterland@Sun.COM void		pkgstrAddToken(char **a_old, char *a_new, char a_separator);
5349781SMoriah.Waterland@Sun.COM boolean_t	pkgstrContainsToken(char *a_string, char *a_token,
5359781SMoriah.Waterland@Sun.COM 			char *a_separators);
5369781SMoriah.Waterland@Sun.COM void		pkgstrExpandTokens(char **a_old, char *a_string,
5379781SMoriah.Waterland@Sun.COM 			char a_separator, char *a_separators);
5389781SMoriah.Waterland@Sun.COM char		*pkgstrGetToken(char *r_sep, char *a_string, int a_index,
5399781SMoriah.Waterland@Sun.COM 			char *a_separators);
5409781SMoriah.Waterland@Sun.COM void		pkgstrGetToken_r(char *r_sep, char *a_string, int a_index,
5419781SMoriah.Waterland@Sun.COM 			char *a_separators, char *a_buf, int a_bufLen);
5429781SMoriah.Waterland@Sun.COM unsigned long	pkgstrNumTokens(char *a_string, char *a_separators);
5439781SMoriah.Waterland@Sun.COM char		*pkgstrPrintf(char *a_format, ...);
5449781SMoriah.Waterland@Sun.COM void		pkgstrPrintf_r(char *a_buf, int a_bufLen, char *a_format, ...);
5459781SMoriah.Waterland@Sun.COM void		pkgstrRemoveToken(char **r_string, char *a_token,
5469781SMoriah.Waterland@Sun.COM 			char *a_separators, int a_index);
5479781SMoriah.Waterland@Sun.COM void		pkgstrRemoveLeadingWhitespace(char **a_str);
5489781SMoriah.Waterland@Sun.COM /* vfpops.c */
5499781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointFile(VFP_T **r_destVfp, VFP_T **a_vfp,
5509781SMoriah.Waterland@Sun.COM 			char *a_path);
5519781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointOpen(VFP_T **a_cvfp, VFP_T **r_vfp, char *a_path,
5529781SMoriah.Waterland@Sun.COM 			char *a_mode, VFPFLAGS_T a_flags);
5539781SMoriah.Waterland@Sun.COM extern int	vfpClearModified(VFP_T *a_vfp);
5549781SMoriah.Waterland@Sun.COM extern int	vfpClose(VFP_T **r_vfp);
5559781SMoriah.Waterland@Sun.COM extern int	vfpGetModified(VFP_T *a_vfp);
5569781SMoriah.Waterland@Sun.COM extern int	vfpOpen(VFP_T **r_vfp, char *a_path, char *a_mode,
5579781SMoriah.Waterland@Sun.COM 			VFPFLAGS_T a_flags);
5589781SMoriah.Waterland@Sun.COM extern void	vfpRewind(VFP_T *a_vfp);
5599781SMoriah.Waterland@Sun.COM extern ssize_t	vfpSafePwrite(int a_fildes, void *a_buf,
5609781SMoriah.Waterland@Sun.COM 			size_t a_nbyte, off_t a_offset);
5619781SMoriah.Waterland@Sun.COM extern ssize_t	vfpSafeWrite(int a_fildes, void *a_buf, size_t a_nbyte);
5629781SMoriah.Waterland@Sun.COM extern int	vfpSetFlags(VFP_T *a_vfp, VFPFLAGS_T a_flags);
5639781SMoriah.Waterland@Sun.COM extern int	vfpSetModified(VFP_T *a_vfp);
5649781SMoriah.Waterland@Sun.COM extern int	vfpSetSize(VFP_T *a_vfp, size_t a_size);
5659781SMoriah.Waterland@Sun.COM extern void	vfpTruncate(VFP_T *a_vfp);
5669781SMoriah.Waterland@Sun.COM extern int	vfpWriteToFile(VFP_T *a_vfp, char *a_path);
5679781SMoriah.Waterland@Sun.COM 
5689781SMoriah.Waterland@Sun.COM /* handlelocalfs.c */
5699781SMoriah.Waterland@Sun.COM boolean_t	enable_local_fs(void);
5709781SMoriah.Waterland@Sun.COM boolean_t	restore_local_fs(void);
5719781SMoriah.Waterland@Sun.COM 
572*9869SCasper.Dik@Sun.COM /* pkgserv.c */
573*9869SCasper.Dik@Sun.COM extern PKGserver	pkgopenserver(const char *, const char *, boolean_t);
574*9869SCasper.Dik@Sun.COM extern void		pkgcloseserver(PKGserver);
575*9869SCasper.Dik@Sun.COM extern int		pkgcmd(PKGserver, void *, size_t, char **, size_t *,
576*9869SCasper.Dik@Sun.COM     int *);
577*9869SCasper.Dik@Sun.COM extern boolean_t	pkgsync_needed(const char *, const char *, boolean_t);
578*9869SCasper.Dik@Sun.COM extern int		pkgsync(const char *, const char *, boolean_t);
579*9869SCasper.Dik@Sun.COM extern int		pkgservercommitfile(VFP_T *, PKGserver);
580*9869SCasper.Dik@Sun.COM extern int		pkgopenfilter(PKGserver server, const char *pkginst);
581*9869SCasper.Dik@Sun.COM extern void		pkgclosefilter(PKGserver);
582*9869SCasper.Dik@Sun.COM extern char 		*pkggetentry(PKGserver, int *, int *);
583*9869SCasper.Dik@Sun.COM extern char 		*pkggetentry_named(PKGserver, const char *, int *,
584*9869SCasper.Dik@Sun.COM     int *);
585*9869SCasper.Dik@Sun.COM extern void		pkgserversetmode(start_mode_t);
586*9869SCasper.Dik@Sun.COM extern start_mode_t	pkgservergetmode(void);
587*9869SCasper.Dik@Sun.COM extern start_mode_t	pkgparsemode(const char *);
588*9869SCasper.Dik@Sun.COM extern char 		*pkgmodeargument(start_mode_t);
589*9869SCasper.Dik@Sun.COM 
590*9869SCasper.Dik@Sun.COM 
5919781SMoriah.Waterland@Sun.COM #else	/* __STDC__ */
5929781SMoriah.Waterland@Sun.COM 
5939781SMoriah.Waterland@Sun.COM extern FILE	*epopen();
5949781SMoriah.Waterland@Sun.COM extern void	pkglist_cont();
5959781SMoriah.Waterland@Sun.COM extern char	**gpkglist();
5969781SMoriah.Waterland@Sun.COM extern char	**pkgalias();
5979781SMoriah.Waterland@Sun.COM extern char	*get_prog_name();
5989781SMoriah.Waterland@Sun.COM extern char 	*set_prog_name();
5999781SMoriah.Waterland@Sun.COM extern int	averify();
6009781SMoriah.Waterland@Sun.COM extern int	ckparam();
6019781SMoriah.Waterland@Sun.COM extern int	ckvolseq();
6029781SMoriah.Waterland@Sun.COM extern int	cverify();
6039781SMoriah.Waterland@Sun.COM extern unsigned long	compute_checksum();
6049781SMoriah.Waterland@Sun.COM extern int	fverify();
6059781SMoriah.Waterland@Sun.COM extern char	*getErrbufAddr();
6069781SMoriah.Waterland@Sun.COM extern int	getErrbufSize();
6079781SMoriah.Waterland@Sun.COM extern char	*getErrstr();
6089781SMoriah.Waterland@Sun.COM extern void	setErrstr();
6099781SMoriah.Waterland@Sun.COM extern int	devtype();
6109781SMoriah.Waterland@Sun.COM extern int	ds_close();
6119781SMoriah.Waterland@Sun.COM extern int	ds_findpkg();
6129781SMoriah.Waterland@Sun.COM extern int	ds_getinfo();
6139781SMoriah.Waterland@Sun.COM extern int	ds_getpkg();
6149781SMoriah.Waterland@Sun.COM extern int	ds_ginit();
6159781SMoriah.Waterland@Sun.COM extern boolean_t	ds_fd_open();
6169781SMoriah.Waterland@Sun.COM extern int	ds_init();
6179781SMoriah.Waterland@Sun.COM extern int	ds_next();
6189781SMoriah.Waterland@Sun.COM extern int	ds_readbuf();
6199781SMoriah.Waterland@Sun.COM extern int	epclose();
6209781SMoriah.Waterland@Sun.COM extern int	esystem();
6219781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdArray();
6229781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdList();
6239781SMoriah.Waterland@Sun.COM extern int	gpkgmap();
6249781SMoriah.Waterland@Sun.COM extern int	isFdRemote();
6259781SMoriah.Waterland@Sun.COM extern int	isFstypeRemote();
6269781SMoriah.Waterland@Sun.COM extern int	isPathRemote();
6279781SMoriah.Waterland@Sun.COM extern int	iscpio();
6289781SMoriah.Waterland@Sun.COM extern int	isdir();
6299781SMoriah.Waterland@Sun.COM extern int	isfile();
6309781SMoriah.Waterland@Sun.COM extern int	pkgexecl();
6319781SMoriah.Waterland@Sun.COM extern int	pkgexecv();
6329781SMoriah.Waterland@Sun.COM extern int	pkghead();
6339781SMoriah.Waterland@Sun.COM extern int	pkgmount();
6349781SMoriah.Waterland@Sun.COM extern int	pkgtrans();
6359781SMoriah.Waterland@Sun.COM extern int	pkgumount();
6369781SMoriah.Waterland@Sun.COM extern int	ppkgmap();
6379781SMoriah.Waterland@Sun.COM extern int	putcfile();
6389781SMoriah.Waterland@Sun.COM extern int	putcvfpfile();
6399781SMoriah.Waterland@Sun.COM extern int	rrmdir();
6409781SMoriah.Waterland@Sun.COM extern int	srchcfile();
6419781SMoriah.Waterland@Sun.COM extern struct	group *cgrgid();
6429781SMoriah.Waterland@Sun.COM extern struct	group *cgrnam();
6439781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwnam();
6449781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwuid();
6459781SMoriah.Waterland@Sun.COM extern void	basepath();
6469781SMoriah.Waterland@Sun.COM extern void	canonize();
6479781SMoriah.Waterland@Sun.COM extern void	canonize_slashes();
6489781SMoriah.Waterland@Sun.COM extern void	checksum_off();
6499781SMoriah.Waterland@Sun.COM extern void	checksum_on();
6509781SMoriah.Waterland@Sun.COM extern void	cvtpath();
6519781SMoriah.Waterland@Sun.COM extern void	ds_order();
6529781SMoriah.Waterland@Sun.COM extern void	ds_putinfo();
6539781SMoriah.Waterland@Sun.COM extern void	ds_skiptoend();
6549781SMoriah.Waterland@Sun.COM extern void	ecleanup();
6559781SMoriah.Waterland@Sun.COM extern void	logerr();
6569781SMoriah.Waterland@Sun.COM extern int	mappath();
6579781SMoriah.Waterland@Sun.COM extern int	mapvar();
6589781SMoriah.Waterland@Sun.COM extern void	progerr();
6599781SMoriah.Waterland@Sun.COM extern void	rpterr();
6609781SMoriah.Waterland@Sun.COM extern void	tputcfent();
6619781SMoriah.Waterland@Sun.COM extern void	set_nonABI_symlinks();
6629781SMoriah.Waterland@Sun.COM extern int	nonABI_symlinks();
6639781SMoriah.Waterland@Sun.COM extern void	disable_attribute_check();
6649781SMoriah.Waterland@Sun.COM extern int	get_disable_attribute_check();
6659781SMoriah.Waterland@Sun.COM /* vfpops.c */
6669781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointFile();
6679781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointOpen();
6689781SMoriah.Waterland@Sun.COM extern int	vfpClearModified();
6699781SMoriah.Waterland@Sun.COM extern int	vfpClose();
6709781SMoriah.Waterland@Sun.COM extern int	vfpGetModified();
6719781SMoriah.Waterland@Sun.COM extern int	vfpOpen();
6729781SMoriah.Waterland@Sun.COM extern void	vfpRewind();
6739781SMoriah.Waterland@Sun.COM extern int	vfpSetFlags();
6749781SMoriah.Waterland@Sun.COM extern int	vfpSetModified();
6759781SMoriah.Waterland@Sun.COM extern int	vfpSetSize();
6769781SMoriah.Waterland@Sun.COM extern void	vfpTruncate();
6779781SMoriah.Waterland@Sun.COM extern int	vfpWriteToFile();
6789781SMoriah.Waterland@Sun.COM 
6799781SMoriah.Waterland@Sun.COM /* handlelocalfs.c */
6809781SMoriah.Waterland@Sun.COM boolean_t	enable_local_fs();
6819781SMoriah.Waterland@Sun.COM boolean_t	restore_local_fs();
6829781SMoriah.Waterland@Sun.COM 
6839781SMoriah.Waterland@Sun.COM /* gpkgmap.c */
6849781SMoriah.Waterland@Sun.COM int		getmapmode(void);
6859781SMoriah.Waterland@Sun.COM 
6869781SMoriah.Waterland@Sun.COM #endif	/* __STDC__ */
6879781SMoriah.Waterland@Sun.COM 
6889781SMoriah.Waterland@Sun.COM #ifdef	__cplusplus
6899781SMoriah.Waterland@Sun.COM }
6909781SMoriah.Waterland@Sun.COM #endif
6919781SMoriah.Waterland@Sun.COM 
6929781SMoriah.Waterland@Sun.COM #endif	/* _PKGLIB_H */
693