1*9781SMoriah.Waterland@Sun.COM /*
2*9781SMoriah.Waterland@Sun.COM  * CDDL HEADER START
3*9781SMoriah.Waterland@Sun.COM  *
4*9781SMoriah.Waterland@Sun.COM  * The contents of this file are subject to the terms of the
5*9781SMoriah.Waterland@Sun.COM  * Common Development and Distribution License (the "License").
6*9781SMoriah.Waterland@Sun.COM  * You may not use this file except in compliance with the License.
7*9781SMoriah.Waterland@Sun.COM  *
8*9781SMoriah.Waterland@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9781SMoriah.Waterland@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9781SMoriah.Waterland@Sun.COM  * See the License for the specific language governing permissions
11*9781SMoriah.Waterland@Sun.COM  * and limitations under the License.
12*9781SMoriah.Waterland@Sun.COM  *
13*9781SMoriah.Waterland@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9781SMoriah.Waterland@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9781SMoriah.Waterland@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9781SMoriah.Waterland@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9781SMoriah.Waterland@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9781SMoriah.Waterland@Sun.COM  *
19*9781SMoriah.Waterland@Sun.COM  * CDDL HEADER END
20*9781SMoriah.Waterland@Sun.COM  */
21*9781SMoriah.Waterland@Sun.COM 
22*9781SMoriah.Waterland@Sun.COM /*
23*9781SMoriah.Waterland@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*9781SMoriah.Waterland@Sun.COM  * Use is subject to license terms.
25*9781SMoriah.Waterland@Sun.COM  */
26*9781SMoriah.Waterland@Sun.COM 
27*9781SMoriah.Waterland@Sun.COM /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
28*9781SMoriah.Waterland@Sun.COM /* All Rights Reserved */
29*9781SMoriah.Waterland@Sun.COM 
30*9781SMoriah.Waterland@Sun.COM #ifndef	_PKGLIB_H
31*9781SMoriah.Waterland@Sun.COM #define	_PKGLIB_H
32*9781SMoriah.Waterland@Sun.COM 
33*9781SMoriah.Waterland@Sun.COM 
34*9781SMoriah.Waterland@Sun.COM #ifdef	__cplusplus
35*9781SMoriah.Waterland@Sun.COM extern "C" {
36*9781SMoriah.Waterland@Sun.COM #endif
37*9781SMoriah.Waterland@Sun.COM 
38*9781SMoriah.Waterland@Sun.COM #include <sys/types.h>
39*9781SMoriah.Waterland@Sun.COM #include <limits.h>
40*9781SMoriah.Waterland@Sun.COM #include <stdio.h>
41*9781SMoriah.Waterland@Sun.COM #include <pkgdev.h>
42*9781SMoriah.Waterland@Sun.COM #include <pkgstrct.h>
43*9781SMoriah.Waterland@Sun.COM #include <openssl/bio.h>
44*9781SMoriah.Waterland@Sun.COM #include <openssl/x509.h>
45*9781SMoriah.Waterland@Sun.COM #include <netdb.h>
46*9781SMoriah.Waterland@Sun.COM #include <boot_http.h>
47*9781SMoriah.Waterland@Sun.COM #include "pkgerr.h"
48*9781SMoriah.Waterland@Sun.COM #include "keystore.h"
49*9781SMoriah.Waterland@Sun.COM #include "cfext.h"
50*9781SMoriah.Waterland@Sun.COM 
51*9781SMoriah.Waterland@Sun.COM /*
52*9781SMoriah.Waterland@Sun.COM  * Virtual File Protocol definitions
53*9781SMoriah.Waterland@Sun.COM  */
54*9781SMoriah.Waterland@Sun.COM 
55*9781SMoriah.Waterland@Sun.COM /*
56*9781SMoriah.Waterland@Sun.COM  * flags associated with virtual file protocol operations; note that these flags
57*9781SMoriah.Waterland@Sun.COM  * may only occupy the low order 16 bits of the 32-bit unsigned flag.
58*9781SMoriah.Waterland@Sun.COM  */
59*9781SMoriah.Waterland@Sun.COM 
60*9781SMoriah.Waterland@Sun.COM typedef unsigned long VFPFLAGS_T;
61*9781SMoriah.Waterland@Sun.COM 
62*9781SMoriah.Waterland@Sun.COM #define	VFP_NONE	0x00000000	/* no special flags */
63*9781SMoriah.Waterland@Sun.COM #define	VFP_NEEDNOW	0x00000001	/* need memory now */
64*9781SMoriah.Waterland@Sun.COM #define	VFP_SEQUENTIAL	0x00000002	/* sequential access */
65*9781SMoriah.Waterland@Sun.COM #define	VFP_RANDOM	0x00000004	/* random access */
66*9781SMoriah.Waterland@Sun.COM #define	VFP_NOMMAP	0x00000008	/* do not use mmap to access file */
67*9781SMoriah.Waterland@Sun.COM #define	VFP_NOMALLOC	0x00000010	/* do not use malloc to buffer file */
68*9781SMoriah.Waterland@Sun.COM 
69*9781SMoriah.Waterland@Sun.COM /* virtual file protocol object */
70*9781SMoriah.Waterland@Sun.COM 
71*9781SMoriah.Waterland@Sun.COM typedef struct _vfp VFP_T;
72*9781SMoriah.Waterland@Sun.COM 
73*9781SMoriah.Waterland@Sun.COM /* structure behind the virtual file protocol object */
74*9781SMoriah.Waterland@Sun.COM 
75*9781SMoriah.Waterland@Sun.COM struct _vfp {
76*9781SMoriah.Waterland@Sun.COM 	FILE		*_vfpFile;	/* -> opened FILE */
77*9781SMoriah.Waterland@Sun.COM 	char		*_vfpCurr;	/* -> current byte to read/write */
78*9781SMoriah.Waterland@Sun.COM 	char		*_vfpHighWater;	/* -> last byte modified */
79*9781SMoriah.Waterland@Sun.COM 	char		*_vfpEnd;	/* -> last data byte */
80*9781SMoriah.Waterland@Sun.COM 	char		*_vfpPath;	/* -> path associated with FILE */
81*9781SMoriah.Waterland@Sun.COM 	char		*_vfpStart;	/* -> first data byte */
82*9781SMoriah.Waterland@Sun.COM 	void		*_vfpExtra;	/* undefined */
83*9781SMoriah.Waterland@Sun.COM 	size_t		_vfpSize;	/* size of mapped/allocated area */
84*9781SMoriah.Waterland@Sun.COM 	size_t		_vfpMapSize;	/* # mapped bytes */
85*9781SMoriah.Waterland@Sun.COM 	VFPFLAGS_T	_vfpFlags;	/* flags associated with vfp/data */
86*9781SMoriah.Waterland@Sun.COM 	int		_vfpOverflow;	/* non-zero if buffer write overflow */
87*9781SMoriah.Waterland@Sun.COM 	blkcnt_t	_vfpCkStBlocks;	/* checkpoint # blocks */
88*9781SMoriah.Waterland@Sun.COM 	dev_t		_vfpCkDev;	/* checkpoint device i.d. */
89*9781SMoriah.Waterland@Sun.COM 	ino_t		_vfpCkIno;	/* checkpoint inode # */
90*9781SMoriah.Waterland@Sun.COM 	off_t		_vfpCkSize;	/* checkpoint size */
91*9781SMoriah.Waterland@Sun.COM 	time_t		_vfpCkMtime;	/* checkpoint modification time */
92*9781SMoriah.Waterland@Sun.COM };
93*9781SMoriah.Waterland@Sun.COM 
94*9781SMoriah.Waterland@Sun.COM /*
95*9781SMoriah.Waterland@Sun.COM  * get highest modified byte (length) contained in vfp
96*9781SMoriah.Waterland@Sun.COM  *
97*9781SMoriah.Waterland@Sun.COM  * determine number of bytes to write - it will be the highest of:
98*9781SMoriah.Waterland@Sun.COM  *  -- the current pointer into the file - this is updated whenever
99*9781SMoriah.Waterland@Sun.COM  *	the location of the file is changed by a single byte
100*9781SMoriah.Waterland@Sun.COM  *  -- the last "high water mark" - the last known location that
101*9781SMoriah.Waterland@Sun.COM  *	was written to the file - updated only when the location
102*9781SMoriah.Waterland@Sun.COM  *	of the file is directly changed - e.g. vfpSetCurrCharPtr,
103*9781SMoriah.Waterland@Sun.COM  *	vfpTruncate, vfpRewind.
104*9781SMoriah.Waterland@Sun.COM  * this reduces the "bookkeeping" that needs to be done to know
105*9781SMoriah.Waterland@Sun.COM  * how many bytes to write out to the file - typically a file is
106*9781SMoriah.Waterland@Sun.COM  * written sequentially so the current file pointer is sufficient
107*9781SMoriah.Waterland@Sun.COM  * to determine how many bytes to write out.
108*9781SMoriah.Waterland@Sun.COM  */
109*9781SMoriah.Waterland@Sun.COM 
110*9781SMoriah.Waterland@Sun.COM #define	vfpGetModifiedLen(VFP)						\
111*9781SMoriah.Waterland@Sun.COM 	(size_t)(((VFP)->_vfpHighWater > (VFP)->_vfpCurr) ?		\
112*9781SMoriah.Waterland@Sun.COM 		(((ptrdiff_t)(VFP)->_vfpHighWater -			\
113*9781SMoriah.Waterland@Sun.COM 				(ptrdiff_t)(VFP)->_vfpStart)) :		\
114*9781SMoriah.Waterland@Sun.COM 		(((ptrdiff_t)(VFP)->_vfpCurr -				\
115*9781SMoriah.Waterland@Sun.COM 				(ptrdiff_t)(VFP)->_vfpStart)))
116*9781SMoriah.Waterland@Sun.COM 
117*9781SMoriah.Waterland@Sun.COM /*
118*9781SMoriah.Waterland@Sun.COM  * increment current pointer by specified delta
119*9781SMoriah.Waterland@Sun.COM  * if the delta exceeds the buffer size, set pointer to buffer end
120*9781SMoriah.Waterland@Sun.COM  */
121*9781SMoriah.Waterland@Sun.COM #define	vfpIncCurrPtrBy(VFP, INC)					\
122*9781SMoriah.Waterland@Sun.COM 	{								\
123*9781SMoriah.Waterland@Sun.COM 		((VFP)->_vfpCurr) += (INC);				\
124*9781SMoriah.Waterland@Sun.COM 		if (((VFP)->_vfpCurr) > ((VFP)->_vfpEnd)) {		\
125*9781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr = (VFP)->_vfpEnd;		\
126*9781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpOverflow = 1;			\
127*9781SMoriah.Waterland@Sun.COM 		}							\
128*9781SMoriah.Waterland@Sun.COM 		if ((VFP)->_vfpHighWater < (VFP)->_vfpCurr) {		\
129*9781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpHighWater = (VFP)->_vfpCurr;		\
130*9781SMoriah.Waterland@Sun.COM 		}							\
131*9781SMoriah.Waterland@Sun.COM 	}
132*9781SMoriah.Waterland@Sun.COM 
133*9781SMoriah.Waterland@Sun.COM /* get the path associated with the vfp */
134*9781SMoriah.Waterland@Sun.COM #define	vfpGetPath(VFP)		((VFP)->_vfpPath)
135*9781SMoriah.Waterland@Sun.COM 
136*9781SMoriah.Waterland@Sun.COM /* get a string from the vfp into a fixed size buffer */
137*9781SMoriah.Waterland@Sun.COM #define	vfpGets(VFP, PTR, LEN)						\
138*9781SMoriah.Waterland@Sun.COM 	{								\
139*9781SMoriah.Waterland@Sun.COM 		char	*XXpXX = (PTR);					\
140*9781SMoriah.Waterland@Sun.COM 		size_t	XXlXX = (LEN);					\
141*9781SMoriah.Waterland@Sun.COM 		while ((*(VFP)->_vfpCurr != '\0') &&			\
142*9781SMoriah.Waterland@Sun.COM 				(*(VFP)->_vfpCurr != '\n')) {		\
143*9781SMoriah.Waterland@Sun.COM 			if (XXlXX > 1) {				\
144*9781SMoriah.Waterland@Sun.COM 				*XXpXX++ = *(VFP)->_vfpCurr;		\
145*9781SMoriah.Waterland@Sun.COM 				XXlXX--;				\
146*9781SMoriah.Waterland@Sun.COM 			}						\
147*9781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr++;				\
148*9781SMoriah.Waterland@Sun.COM 		}							\
149*9781SMoriah.Waterland@Sun.COM 		*XXpXX++ = '\0';					\
150*9781SMoriah.Waterland@Sun.COM 		if (*(VFP)->_vfpCurr != '\0') {				\
151*9781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr++;				\
152*9781SMoriah.Waterland@Sun.COM 		}							\
153*9781SMoriah.Waterland@Sun.COM 	}
154*9781SMoriah.Waterland@Sun.COM 
155*9781SMoriah.Waterland@Sun.COM /* get number of bytes remaining to read */
156*9781SMoriah.Waterland@Sun.COM #define	vfpGetBytesRemaining(VFP)	\
157*9781SMoriah.Waterland@Sun.COM 	(((((VFP)->_vfpHighWater) <= ((VFP)->_vfpCurr))) ? 0 : 		\
158*9781SMoriah.Waterland@Sun.COM 	((((ptrdiff_t)(VFP)->_vfpHighWater)-((ptrdiff_t)(VFP)->_vfpCurr))))
159*9781SMoriah.Waterland@Sun.COM 
160*9781SMoriah.Waterland@Sun.COM /* get number of bytes remaining to write */
161*9781SMoriah.Waterland@Sun.COM #define	vfpGetBytesAvailable(VFP)	\
162*9781SMoriah.Waterland@Sun.COM 	(((((VFP)->_vfpEnd) <= ((VFP)->_vfpCurr))) ? 0 : 		\
163*9781SMoriah.Waterland@Sun.COM 	((((ptrdiff_t)(VFP)->_vfpEnd)-((ptrdiff_t)(VFP)->_vfpCurr))))
164*9781SMoriah.Waterland@Sun.COM 
165*9781SMoriah.Waterland@Sun.COM /* put current character and increment to next */
166*9781SMoriah.Waterland@Sun.COM #define	vfpPutc(VFP, C)							\
167*9781SMoriah.Waterland@Sun.COM 	{								\
168*9781SMoriah.Waterland@Sun.COM 		(*(VFP)->_vfpCurr) = ((char)(C));			\
169*9781SMoriah.Waterland@Sun.COM 		vfpIncCurrPtrBy((VFP), 1);				\
170*9781SMoriah.Waterland@Sun.COM 	}
171*9781SMoriah.Waterland@Sun.COM 
172*9781SMoriah.Waterland@Sun.COM /* put integer to current character and increment */
173*9781SMoriah.Waterland@Sun.COM #define	vfpPutInteger(VFP, NUMBER)	vfpPutFormat((VFP), "%d", (NUMBER))
174*9781SMoriah.Waterland@Sun.COM 
175*9781SMoriah.Waterland@Sun.COM /* put long to current character and increment */
176*9781SMoriah.Waterland@Sun.COM #define	vfpPutLong(VFP, NUMBER)	vfpPutFormat((VFP), "%ld", (NUMBER))
177*9781SMoriah.Waterland@Sun.COM 
178*9781SMoriah.Waterland@Sun.COM /* get current character and increment to next */
179*9781SMoriah.Waterland@Sun.COM #define	vfpGetc(VFP)		(*(VFP)->_vfpCurr++)
180*9781SMoriah.Waterland@Sun.COM 
181*9781SMoriah.Waterland@Sun.COM /* get current character - do not increment */
182*9781SMoriah.Waterland@Sun.COM #define	vfpGetcNoInc(VFP)	(*(VFP)->_vfpCurr)
183*9781SMoriah.Waterland@Sun.COM 
184*9781SMoriah.Waterland@Sun.COM /* get pointer to current character */
185*9781SMoriah.Waterland@Sun.COM #define	vfpGetCurrCharPtr(VFP)	((VFP)->_vfpCurr)
186*9781SMoriah.Waterland@Sun.COM 
187*9781SMoriah.Waterland@Sun.COM /* increment current character pointer */
188*9781SMoriah.Waterland@Sun.COM #define	vfpIncCurrPtr(VFP)	vfpIncCurrPtrBy((VFP), 1)
189*9781SMoriah.Waterland@Sun.COM 
190*9781SMoriah.Waterland@Sun.COM /* decrement current character pointer */
191*9781SMoriah.Waterland@Sun.COM #define	vfpDecCurrPtr(VFP)	((VFP)->_vfpCurr--)
192*9781SMoriah.Waterland@Sun.COM 
193*9781SMoriah.Waterland@Sun.COM /* get pointer to first data byte in buffer */
194*9781SMoriah.Waterland@Sun.COM #define	vfpGetFirstCharPtr(VFP)	((VFP)->_vfpStart)
195*9781SMoriah.Waterland@Sun.COM 
196*9781SMoriah.Waterland@Sun.COM /* get pointer to last data byte in buffer */
197*9781SMoriah.Waterland@Sun.COM #define	vfpGetLastCharPtr(VFP)	((VFP)->_vfpHighWater)
198*9781SMoriah.Waterland@Sun.COM 
199*9781SMoriah.Waterland@Sun.COM /* set pointer to current character */
200*9781SMoriah.Waterland@Sun.COM #define	vfpSetCurrCharPtr(VFP, PTR)					\
201*9781SMoriah.Waterland@Sun.COM 	if ((VFP)->_vfpCurr > (VFP)->_vfpHighWater) {			\
202*9781SMoriah.Waterland@Sun.COM 		(VFP)->_vfpHighWater = (VFP)->_vfpCurr;			\
203*9781SMoriah.Waterland@Sun.COM 	}								\
204*9781SMoriah.Waterland@Sun.COM 	((VFP)->_vfpCurr = (PTR))
205*9781SMoriah.Waterland@Sun.COM 
206*9781SMoriah.Waterland@Sun.COM /* set pointer to last data byte in buffer */
207*9781SMoriah.Waterland@Sun.COM #define	vfpSetLastCharPtr(VFP, PTR)					\
208*9781SMoriah.Waterland@Sun.COM 	if ((PTR) >= (VFP)->_vfpStart) {				\
209*9781SMoriah.Waterland@Sun.COM 		(VFP)->_vfpHighWater = (PTR);				\
210*9781SMoriah.Waterland@Sun.COM 		if ((VFP)->_vfpCurr > (VFP)->_vfpHighWater) {		\
211*9781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpCurr = (VFP)->_vfpHighWater;		\
212*9781SMoriah.Waterland@Sun.COM 		}							\
213*9781SMoriah.Waterland@Sun.COM 	}
214*9781SMoriah.Waterland@Sun.COM 
215*9781SMoriah.Waterland@Sun.COM /* seek to end of file - one past last data byte in file */
216*9781SMoriah.Waterland@Sun.COM #define	vfpSeekToEnd(VFP)	((VFP)->_vfpCurr = ((VFP)->_vfpHighWater)+1)
217*9781SMoriah.Waterland@Sun.COM 
218*9781SMoriah.Waterland@Sun.COM /* get number of bytes between current char and specified char */
219*9781SMoriah.Waterland@Sun.COM #define	vfpGetCurrPtrDelta(VFP, P)	\
220*9781SMoriah.Waterland@Sun.COM 	(((ptrdiff_t)(P))-((ptrdiff_t)(VFP)->_vfpCurr))
221*9781SMoriah.Waterland@Sun.COM 
222*9781SMoriah.Waterland@Sun.COM /* put string to current character and increment */
223*9781SMoriah.Waterland@Sun.COM #define	vfpPuts(VFP, S)							\
224*9781SMoriah.Waterland@Sun.COM 	{								\
225*9781SMoriah.Waterland@Sun.COM 		size_t	xxLen;						\
226*9781SMoriah.Waterland@Sun.COM 		size_t	xxResult;					\
227*9781SMoriah.Waterland@Sun.COM 		xxLen = vfpGetBytesAvailable((VFP));			\
228*9781SMoriah.Waterland@Sun.COM 		xxResult = strlcpy(((VFP)->_vfpCurr), (S), xxLen);	\
229*9781SMoriah.Waterland@Sun.COM 		vfpIncCurrPtrBy((VFP), xxResult);			\
230*9781SMoriah.Waterland@Sun.COM 	}
231*9781SMoriah.Waterland@Sun.COM 
232*9781SMoriah.Waterland@Sun.COM /* put fixed number of bytes to current character and increment */
233*9781SMoriah.Waterland@Sun.COM #define	vfpPutBytes(VFP, PTR, LEN)					\
234*9781SMoriah.Waterland@Sun.COM 	{								\
235*9781SMoriah.Waterland@Sun.COM 		size_t	xxLen;						\
236*9781SMoriah.Waterland@Sun.COM 		xxLen = vfpGetBytesAvailable((VFP));			\
237*9781SMoriah.Waterland@Sun.COM 		if (xxLen > (LEN)) {					\
238*9781SMoriah.Waterland@Sun.COM 			xxLen = (LEN);					\
239*9781SMoriah.Waterland@Sun.COM 		} else {						\
240*9781SMoriah.Waterland@Sun.COM 			(VFP)->_vfpOverflow = 1;			\
241*9781SMoriah.Waterland@Sun.COM 		}							\
242*9781SMoriah.Waterland@Sun.COM 		memcpy((VFP)->_vfpCurr, (PTR), (xxLen));		\
243*9781SMoriah.Waterland@Sun.COM 		vfpIncCurrPtrBy((VFP), (xxLen));			\
244*9781SMoriah.Waterland@Sun.COM 	}
245*9781SMoriah.Waterland@Sun.COM 
246*9781SMoriah.Waterland@Sun.COM /* put format one arg to current character and increment */
247*9781SMoriah.Waterland@Sun.COM #define	vfpPutFormat(VFP, FORMAT, ARG)					\
248*9781SMoriah.Waterland@Sun.COM 	{								\
249*9781SMoriah.Waterland@Sun.COM 	char	xxTeMpXX[256];						\
250*9781SMoriah.Waterland@Sun.COM 	(void) snprintf(xxTeMpXX, sizeof (xxTeMpXX), (FORMAT), (ARG));	\
251*9781SMoriah.Waterland@Sun.COM 	vfpPuts((VFP), xxTeMpXX);					\
252*9781SMoriah.Waterland@Sun.COM 	}
253*9781SMoriah.Waterland@Sun.COM 
254*9781SMoriah.Waterland@Sun.COM struct dm_buf {
255*9781SMoriah.Waterland@Sun.COM 	char *text_buffer;	/* start of allocated buffer */
256*9781SMoriah.Waterland@Sun.COM 	int offset;		/* number of bytes into the text_buffer */
257*9781SMoriah.Waterland@Sun.COM 	int allocation;		/* size of buffer in bytes */
258*9781SMoriah.Waterland@Sun.COM };
259*9781SMoriah.Waterland@Sun.COM 
260*9781SMoriah.Waterland@Sun.COM /* This structure is used to hold a dynamically growing string */
261*9781SMoriah.Waterland@Sun.COM 
262*9781SMoriah.Waterland@Sun.COM struct dstr {
263*9781SMoriah.Waterland@Sun.COM 	char *pc;
264*9781SMoriah.Waterland@Sun.COM 	int   len;
265*9781SMoriah.Waterland@Sun.COM 	int   max;
266*9781SMoriah.Waterland@Sun.COM };
267*9781SMoriah.Waterland@Sun.COM 
268*9781SMoriah.Waterland@Sun.COM /* setmapmode() defines */
269*9781SMoriah.Waterland@Sun.COM #define	MAPALL		0	/* resolve all variables */
270*9781SMoriah.Waterland@Sun.COM #define	MAPBUILD	1	/* map only build variables */
271*9781SMoriah.Waterland@Sun.COM #define	MAPINSTALL	2	/* map only install variables */
272*9781SMoriah.Waterland@Sun.COM #define	MAPNONE		3	/* map no variables */
273*9781SMoriah.Waterland@Sun.COM 
274*9781SMoriah.Waterland@Sun.COM #define	NON_ABI_NAMELNGTH	33	/* 32 chars for name + 1 for NULL */
275*9781SMoriah.Waterland@Sun.COM 
276*9781SMoriah.Waterland@Sun.COM #define	BLK_SIZE	512	/* size of logical block */
277*9781SMoriah.Waterland@Sun.COM 
278*9781SMoriah.Waterland@Sun.COM /* max length for printed attributes */
279*9781SMoriah.Waterland@Sun.COM #define	ATTR_MAX	80
280*9781SMoriah.Waterland@Sun.COM 
281*9781SMoriah.Waterland@Sun.COM /*
282*9781SMoriah.Waterland@Sun.COM  * These three defines indicate that the prototype file contains a '?'
283*9781SMoriah.Waterland@Sun.COM  * meaning do not specify this data in the pkgmap entry.
284*9781SMoriah.Waterland@Sun.COM  */
285*9781SMoriah.Waterland@Sun.COM #define	CURMODE		BADMODE		/* current mode has been specified */
286*9781SMoriah.Waterland@Sun.COM #define	CUROWNER	BADOWNER	/* ... same for owner ... */
287*9781SMoriah.Waterland@Sun.COM #define	CURGROUP	BADGROUP	/* ... and group. */
288*9781SMoriah.Waterland@Sun.COM 
289*9781SMoriah.Waterland@Sun.COM #define	WILDCARD		BADMODE >> 1
290*9781SMoriah.Waterland@Sun.COM #define	DB_UNDEFINED_ENTRY	"?"
291*9781SMoriah.Waterland@Sun.COM 
292*9781SMoriah.Waterland@Sun.COM #define	DEFAULT_MODE		0755
293*9781SMoriah.Waterland@Sun.COM #define	DEFAULT_MODE_FILE	0644
294*9781SMoriah.Waterland@Sun.COM #define	DEFAULT_OWNER	"root"
295*9781SMoriah.Waterland@Sun.COM #define	DEFAULT_GROUP	"other"
296*9781SMoriah.Waterland@Sun.COM 
297*9781SMoriah.Waterland@Sun.COM #define	INST_RELEASE "var/sadm/system/admin/INST_RELEASE"
298*9781SMoriah.Waterland@Sun.COM 
299*9781SMoriah.Waterland@Sun.COM #define	RANDOM			"/dev/urandom"
300*9781SMoriah.Waterland@Sun.COM #define	BLOCK			256
301*9781SMoriah.Waterland@Sun.COM 
302*9781SMoriah.Waterland@Sun.COM #define	TERM_WIDTH		60
303*9781SMoriah.Waterland@Sun.COM #define	SMALL_DIVISOR		4
304*9781SMoriah.Waterland@Sun.COM #define	MED_DIVISOR		5
305*9781SMoriah.Waterland@Sun.COM #define	LARGE_DIVISOR		10
306*9781SMoriah.Waterland@Sun.COM #define	MED_DWNLD		(10 * 1024 * 1024) /* 10 MB */
307*9781SMoriah.Waterland@Sun.COM #define	LARGE_DWNLD		(5 * MED_DWNLD) /* 50 MB */
308*9781SMoriah.Waterland@Sun.COM 
309*9781SMoriah.Waterland@Sun.COM #define	HTTP			"http://"
310*9781SMoriah.Waterland@Sun.COM #define	HTTPS			"https://"
311*9781SMoriah.Waterland@Sun.COM 
312*9781SMoriah.Waterland@Sun.COM #define	PKGADD			"pkgadd"
313*9781SMoriah.Waterland@Sun.COM 
314*9781SMoriah.Waterland@Sun.COM /* Settings for network admin defaults */
315*9781SMoriah.Waterland@Sun.COM 
316*9781SMoriah.Waterland@Sun.COM #define	NET_TIMEOUT_DEFAULT 	60
317*9781SMoriah.Waterland@Sun.COM #define	NET_RETRIES_DEFAULT 	3
318*9781SMoriah.Waterland@Sun.COM #define	NET_TIMEOUT_MIN		1		/* 1 second */
319*9781SMoriah.Waterland@Sun.COM #define	NET_TIMEOUT_MAX		(5 * 60)	/* 5 minutes */
320*9781SMoriah.Waterland@Sun.COM #define	NET_RETRIES_MIN		1
321*9781SMoriah.Waterland@Sun.COM #define	NET_RETRIES_MAX		10
322*9781SMoriah.Waterland@Sun.COM #define	AUTH_NOCHECK		0
323*9781SMoriah.Waterland@Sun.COM #define	AUTH_QUIT		1
324*9781SMoriah.Waterland@Sun.COM 
325*9781SMoriah.Waterland@Sun.COM /* package header magic tokens */
326*9781SMoriah.Waterland@Sun.COM #define	HDR_PREFIX	"# PaCkAgE DaTaStReAm"
327*9781SMoriah.Waterland@Sun.COM #define	HDR_SUFFIX	"# end of header"
328*9781SMoriah.Waterland@Sun.COM 
329*9781SMoriah.Waterland@Sun.COM /* name of security files */
330*9781SMoriah.Waterland@Sun.COM #define	PKGSEC		"/var/sadm/security"
331*9781SMoriah.Waterland@Sun.COM #define	SIGNATURE_FILENAME	"signature"
332*9781SMoriah.Waterland@Sun.COM 
333*9781SMoriah.Waterland@Sun.COM #define	GROUP	"/etc/group"
334*9781SMoriah.Waterland@Sun.COM #define	PASSWD	"/etc/passwd"
335*9781SMoriah.Waterland@Sun.COM 
336*9781SMoriah.Waterland@Sun.COM /*
337*9781SMoriah.Waterland@Sun.COM  * The next three mean that no mode, owner or group was specified or that the
338*9781SMoriah.Waterland@Sun.COM  * one specified is invalid for some reason. Sometimes this is an error in
339*9781SMoriah.Waterland@Sun.COM  * which case it is generally converted to CUR* with a warning. Other times
340*9781SMoriah.Waterland@Sun.COM  * it means "look it up" by stating the existing file system object pointred
341*9781SMoriah.Waterland@Sun.COM  * to in the prototype file.
342*9781SMoriah.Waterland@Sun.COM  */
343*9781SMoriah.Waterland@Sun.COM #define	NOMODE		(BADMODE-1)
344*9781SMoriah.Waterland@Sun.COM #define	NOOWNER		"@"
345*9781SMoriah.Waterland@Sun.COM #define	NOGROUP		"@"
346*9781SMoriah.Waterland@Sun.COM 
347*9781SMoriah.Waterland@Sun.COM /* string comparitor abbreviators */
348*9781SMoriah.Waterland@Sun.COM 
349*9781SMoriah.Waterland@Sun.COM #define	ci_streq(a, b)		(strcasecmp((a), (b)) == 0)
350*9781SMoriah.Waterland@Sun.COM #define	ci_strneq(a, b, c)	(strncasecmp((a), (b), (c)) == 0)
351*9781SMoriah.Waterland@Sun.COM #define	streq(a, b)		(strcmp((a), (b)) == 0)
352*9781SMoriah.Waterland@Sun.COM #define	strneq(a, b, c)		(strncmp((a), (b), (c)) == 0)
353*9781SMoriah.Waterland@Sun.COM 
354*9781SMoriah.Waterland@Sun.COM #ifdef	__STDC__
355*9781SMoriah.Waterland@Sun.COM 
356*9781SMoriah.Waterland@Sun.COM extern FILE	*epopen(char *cmd, char *mode);
357*9781SMoriah.Waterland@Sun.COM extern char	**gpkglist(char *dir, char **pkg, char **catg);
358*9781SMoriah.Waterland@Sun.COM extern int	is_not_valid_length(char **category);
359*9781SMoriah.Waterland@Sun.COM extern int	is_not_valid_category(char **category, char *progname);
360*9781SMoriah.Waterland@Sun.COM extern int	is_same_CATEGORY(char **category, char *installed_category);
361*9781SMoriah.Waterland@Sun.COM extern char **get_categories(char *catg_arg);
362*9781SMoriah.Waterland@Sun.COM 
363*9781SMoriah.Waterland@Sun.COM extern void	pkglist_cont(char *keyword);
364*9781SMoriah.Waterland@Sun.COM extern char	**pkgalias(char *pkg);
365*9781SMoriah.Waterland@Sun.COM extern char	*get_prog_name(void);
366*9781SMoriah.Waterland@Sun.COM extern char 	*set_prog_name(char *name);
367*9781SMoriah.Waterland@Sun.COM extern int	averify(int fix, char *ftype, char *path, struct ainfo *ainfo);
368*9781SMoriah.Waterland@Sun.COM extern int	ckparam(char *param, char *value);
369*9781SMoriah.Waterland@Sun.COM extern int	ckvolseq(char *dir, int part, int nparts);
370*9781SMoriah.Waterland@Sun.COM extern int	cverify(int fix, char *ftype, char *path, struct cinfo *cinfo,
371*9781SMoriah.Waterland@Sun.COM 			int allow_checksum);
372*9781SMoriah.Waterland@Sun.COM extern unsigned long	compute_checksum(int *r_cksumerr, char *a_path);
373*9781SMoriah.Waterland@Sun.COM extern int	fverify(int fix, char *ftype, char *path, struct ainfo *ainfo,
374*9781SMoriah.Waterland@Sun.COM 		    struct cinfo *cinfo);
375*9781SMoriah.Waterland@Sun.COM extern char	*getErrbufAddr(void);
376*9781SMoriah.Waterland@Sun.COM extern int	getErrbufSize(void);
377*9781SMoriah.Waterland@Sun.COM extern char	*getErrstr(void);
378*9781SMoriah.Waterland@Sun.COM extern void	setErrstr(char *errstr);
379*9781SMoriah.Waterland@Sun.COM extern int	devtype(char *alias, struct pkgdev *devp);
380*9781SMoriah.Waterland@Sun.COM extern int	ds_totread;	/* total number of parts read */
381*9781SMoriah.Waterland@Sun.COM extern int	ds_close(int pkgendflg);
382*9781SMoriah.Waterland@Sun.COM extern int	ds_findpkg(char *device, char *pkg);
383*9781SMoriah.Waterland@Sun.COM extern int	ds_getinfo(char *string);
384*9781SMoriah.Waterland@Sun.COM extern int	ds_getpkg(char *device, int n, char *dstdir);
385*9781SMoriah.Waterland@Sun.COM extern int	ds_ginit(char *device);
386*9781SMoriah.Waterland@Sun.COM extern boolean_t	ds_fd_open(void);
387*9781SMoriah.Waterland@Sun.COM extern int	ds_init(char *device, char **pkg, char *norewind);
388*9781SMoriah.Waterland@Sun.COM extern int	BIO_ds_dump_header(PKG_ERR *, BIO *);
389*9781SMoriah.Waterland@Sun.COM extern int	BIO_ds_dump(PKG_ERR *, char *, BIO *);
390*9781SMoriah.Waterland@Sun.COM extern int	BIO_dump_cmd(char *cmd, BIO *bio);
391*9781SMoriah.Waterland@Sun.COM extern int	ds_next(char *, char *);
392*9781SMoriah.Waterland@Sun.COM extern int	ds_readbuf(char *device);
393*9781SMoriah.Waterland@Sun.COM extern int	epclose(FILE *pp);
394*9781SMoriah.Waterland@Sun.COM extern int	esystem(char *cmd, int ifd, int ofd);
395*9781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdArray(int *r_status, char **r_results,
396*9781SMoriah.Waterland@Sun.COM 			char *a_inputFile, char *a_cmd, char **a_args);
397*9781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdList(int *r_status, char **r_results,
398*9781SMoriah.Waterland@Sun.COM 			char *a_inputFile, char *a_cmd, ...);
399*9781SMoriah.Waterland@Sun.COM extern int	gpkgmap(struct cfent *ept, FILE *fp);
400*9781SMoriah.Waterland@Sun.COM extern int	gpkgmapvfp(struct cfent *ept, VFP_T *fpv);
401*9781SMoriah.Waterland@Sun.COM extern void	setmapmode(int mode_no);
402*9781SMoriah.Waterland@Sun.COM extern int	isFdRemote(int a_fd);
403*9781SMoriah.Waterland@Sun.COM extern int	isFstypeRemote(char *a_fstype);
404*9781SMoriah.Waterland@Sun.COM extern int	isPathRemote(char *a_path);
405*9781SMoriah.Waterland@Sun.COM extern int	iscpio(char *path, int *iscomp);
406*9781SMoriah.Waterland@Sun.COM extern int	isdir(char *path);
407*9781SMoriah.Waterland@Sun.COM extern int	isfile(char *dir, char *file);
408*9781SMoriah.Waterland@Sun.COM extern int	fmkdir(char *a_path, int a_mode);
409*9781SMoriah.Waterland@Sun.COM extern int	pkgexecl(char *filein, char *fileout, char *uname, char *gname,
410*9781SMoriah.Waterland@Sun.COM 			...);
411*9781SMoriah.Waterland@Sun.COM extern int	pkgexecv(char *filein, char *fileout, char *uname, char *gname,
412*9781SMoriah.Waterland@Sun.COM 			char *arg[]);
413*9781SMoriah.Waterland@Sun.COM extern int	pkghead(char *device);
414*9781SMoriah.Waterland@Sun.COM extern int	pkgmount(struct pkgdev *devp, char *pkg, int part, int nparts,
415*9781SMoriah.Waterland@Sun.COM 			int getvolflg);
416*9781SMoriah.Waterland@Sun.COM extern int	pkgtrans(char *device1, char *device2, char **pkg,
417*9781SMoriah.Waterland@Sun.COM 			int options, keystore_handle_t, char *);
418*9781SMoriah.Waterland@Sun.COM extern int	pkgumount(struct pkgdev *devp);
419*9781SMoriah.Waterland@Sun.COM extern int	ppkgmap(struct cfent *ept, FILE *fp);
420*9781SMoriah.Waterland@Sun.COM extern int	putcfile(struct cfent *ept, FILE *fp);
421*9781SMoriah.Waterland@Sun.COM extern int	putcvfpfile(struct cfent *ept, VFP_T *vfp);
422*9781SMoriah.Waterland@Sun.COM extern int	rrmdir(char *path);
423*9781SMoriah.Waterland@Sun.COM extern void	set_memalloc_failure_func(void (*)(int));
424*9781SMoriah.Waterland@Sun.COM extern void	*xmalloc(size_t size);
425*9781SMoriah.Waterland@Sun.COM extern void	*xrealloc(void *ptr, size_t size);
426*9781SMoriah.Waterland@Sun.COM extern char	*xstrdup(char *str);
427*9781SMoriah.Waterland@Sun.COM extern void	set_passphrase_prompt(char *);
428*9781SMoriah.Waterland@Sun.COM extern void	set_passphrase_passarg(char *);
429*9781SMoriah.Waterland@Sun.COM extern int	pkg_passphrase_cb(char *, int, int, void *);
430*9781SMoriah.Waterland@Sun.COM 
431*9781SMoriah.Waterland@Sun.COM extern int	srchcfile(struct cfent *ept, char *path, VFP_T *vfp,
432*9781SMoriah.Waterland@Sun.COM 			VFP_T *vfpout);
433*9781SMoriah.Waterland@Sun.COM extern struct	group *cgrgid(gid_t gid);
434*9781SMoriah.Waterland@Sun.COM extern struct	group *cgrnam(char *nam);
435*9781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwnam(char *nam);
436*9781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwuid(uid_t uid);
437*9781SMoriah.Waterland@Sun.COM extern struct	group *clgrgid(gid_t gid);
438*9781SMoriah.Waterland@Sun.COM extern struct	group *clgrnam(char *nam);
439*9781SMoriah.Waterland@Sun.COM extern struct	passwd *clpwnam(char *nam);
440*9781SMoriah.Waterland@Sun.COM extern struct	passwd *clpwuid(uid_t uid);
441*9781SMoriah.Waterland@Sun.COM extern void	basepath(char *path, char *basedir, char *ir);
442*9781SMoriah.Waterland@Sun.COM extern void	canonize(char *file);
443*9781SMoriah.Waterland@Sun.COM extern void	canonize_slashes(char *file);
444*9781SMoriah.Waterland@Sun.COM extern void	checksum_off(void);
445*9781SMoriah.Waterland@Sun.COM extern void	checksum_on(void);
446*9781SMoriah.Waterland@Sun.COM extern void	cvtpath(char *path, char *copy);
447*9781SMoriah.Waterland@Sun.COM extern void	ds_order(char *list[]);
448*9781SMoriah.Waterland@Sun.COM extern void	ds_putinfo(char *buf);
449*9781SMoriah.Waterland@Sun.COM extern void	ds_skiptoend(char *device);
450*9781SMoriah.Waterland@Sun.COM extern void	ecleanup(void);
451*9781SMoriah.Waterland@Sun.COM /*PRINTFLIKE1*/
452*9781SMoriah.Waterland@Sun.COM extern void	logerr(char *fmt, ...);
453*9781SMoriah.Waterland@Sun.COM extern int	mappath(int flag, char *path);
454*9781SMoriah.Waterland@Sun.COM extern int	mapvar(int flag, char *varname);
455*9781SMoriah.Waterland@Sun.COM /*PRINTFLIKE1*/
456*9781SMoriah.Waterland@Sun.COM extern void	progerr(char *fmt, ...);
457*9781SMoriah.Waterland@Sun.COM extern void	pkgerr(PKG_ERR *);
458*9781SMoriah.Waterland@Sun.COM extern void	rpterr(void);
459*9781SMoriah.Waterland@Sun.COM extern void	tputcfent(struct cfent *ept, FILE *fp);
460*9781SMoriah.Waterland@Sun.COM extern void	set_nonABI_symlinks(void);
461*9781SMoriah.Waterland@Sun.COM extern int	nonABI_symlinks(void);
462*9781SMoriah.Waterland@Sun.COM extern void	disable_attribute_check(void);
463*9781SMoriah.Waterland@Sun.COM extern int	get_disable_attribute_check(void);
464*9781SMoriah.Waterland@Sun.COM 
465*9781SMoriah.Waterland@Sun.COM /* security.c */
466*9781SMoriah.Waterland@Sun.COM extern void	sec_init(void);
467*9781SMoriah.Waterland@Sun.COM extern char	*get_subject_display_name(X509 *);
468*9781SMoriah.Waterland@Sun.COM extern char	*get_issuer_display_name(X509 *);
469*9781SMoriah.Waterland@Sun.COM extern char	*get_serial_num(X509 *);
470*9781SMoriah.Waterland@Sun.COM extern char	*get_fingerprint(X509 *, const EVP_MD *);
471*9781SMoriah.Waterland@Sun.COM extern int	get_cert_chain(PKG_ERR *, X509 *, STACK_OF(X509) *,
472*9781SMoriah.Waterland@Sun.COM     STACK_OF(X509) *, STACK_OF(X509) **);
473*9781SMoriah.Waterland@Sun.COM 
474*9781SMoriah.Waterland@Sun.COM /* pkgstr.c */
475*9781SMoriah.Waterland@Sun.COM void		pkgstrConvertUllToTimeString_r(unsigned long long a_time,
476*9781SMoriah.Waterland@Sun.COM 			char *a_buf, int a_bufLen);
477*9781SMoriah.Waterland@Sun.COM char		*pkgstrConvertPathToBasename(char *a_path);
478*9781SMoriah.Waterland@Sun.COM char		*pkgstrConvertPathToDirname(char *a_path);
479*9781SMoriah.Waterland@Sun.COM char		*pkgstrDup(char *a_str);
480*9781SMoriah.Waterland@Sun.COM char		*pkgstrLocatePathBasename(char *a_path);
481*9781SMoriah.Waterland@Sun.COM void		pkgstrScaleNumericString(char *a_buf, unsigned long long scale);
482*9781SMoriah.Waterland@Sun.COM void		pkgstrAddToken(char **a_old, char *a_new, char a_separator);
483*9781SMoriah.Waterland@Sun.COM boolean_t	pkgstrContainsToken(char *a_string, char *a_token,
484*9781SMoriah.Waterland@Sun.COM 			char *a_separators);
485*9781SMoriah.Waterland@Sun.COM void		pkgstrExpandTokens(char **a_old, char *a_string,
486*9781SMoriah.Waterland@Sun.COM 			char a_separator, char *a_separators);
487*9781SMoriah.Waterland@Sun.COM char		*pkgstrGetToken(char *r_sep, char *a_string, int a_index,
488*9781SMoriah.Waterland@Sun.COM 			char *a_separators);
489*9781SMoriah.Waterland@Sun.COM void		pkgstrGetToken_r(char *r_sep, char *a_string, int a_index,
490*9781SMoriah.Waterland@Sun.COM 			char *a_separators, char *a_buf, int a_bufLen);
491*9781SMoriah.Waterland@Sun.COM unsigned long	pkgstrNumTokens(char *a_string, char *a_separators);
492*9781SMoriah.Waterland@Sun.COM char		*pkgstrPrintf(char *a_format, ...);
493*9781SMoriah.Waterland@Sun.COM void		pkgstrPrintf_r(char *a_buf, int a_bufLen, char *a_format, ...);
494*9781SMoriah.Waterland@Sun.COM void		pkgstrRemoveToken(char **r_string, char *a_token,
495*9781SMoriah.Waterland@Sun.COM 			char *a_separators, int a_index);
496*9781SMoriah.Waterland@Sun.COM void		pkgstrRemoveLeadingWhitespace(char **a_str);
497*9781SMoriah.Waterland@Sun.COM /* vfpops.c */
498*9781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointFile(VFP_T **r_destVfp, VFP_T **a_vfp,
499*9781SMoriah.Waterland@Sun.COM 			char *a_path);
500*9781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointOpen(VFP_T **a_cvfp, VFP_T **r_vfp, char *a_path,
501*9781SMoriah.Waterland@Sun.COM 			char *a_mode, VFPFLAGS_T a_flags);
502*9781SMoriah.Waterland@Sun.COM extern int	vfpClearModified(VFP_T *a_vfp);
503*9781SMoriah.Waterland@Sun.COM extern int	vfpClose(VFP_T **r_vfp);
504*9781SMoriah.Waterland@Sun.COM extern int	vfpGetModified(VFP_T *a_vfp);
505*9781SMoriah.Waterland@Sun.COM extern int	vfpOpen(VFP_T **r_vfp, char *a_path, char *a_mode,
506*9781SMoriah.Waterland@Sun.COM 			VFPFLAGS_T a_flags);
507*9781SMoriah.Waterland@Sun.COM extern void	vfpRewind(VFP_T *a_vfp);
508*9781SMoriah.Waterland@Sun.COM extern ssize_t	vfpSafePwrite(int a_fildes, void *a_buf,
509*9781SMoriah.Waterland@Sun.COM 			size_t a_nbyte, off_t a_offset);
510*9781SMoriah.Waterland@Sun.COM extern ssize_t	vfpSafeWrite(int a_fildes, void *a_buf, size_t a_nbyte);
511*9781SMoriah.Waterland@Sun.COM extern int	vfpSetFlags(VFP_T *a_vfp, VFPFLAGS_T a_flags);
512*9781SMoriah.Waterland@Sun.COM extern int	vfpSetModified(VFP_T *a_vfp);
513*9781SMoriah.Waterland@Sun.COM extern int	vfpSetSize(VFP_T *a_vfp, size_t a_size);
514*9781SMoriah.Waterland@Sun.COM extern void	vfpTruncate(VFP_T *a_vfp);
515*9781SMoriah.Waterland@Sun.COM extern int	vfpWriteToFile(VFP_T *a_vfp, char *a_path);
516*9781SMoriah.Waterland@Sun.COM 
517*9781SMoriah.Waterland@Sun.COM /* handlelocalfs.c */
518*9781SMoriah.Waterland@Sun.COM boolean_t	enable_local_fs(void);
519*9781SMoriah.Waterland@Sun.COM boolean_t	restore_local_fs(void);
520*9781SMoriah.Waterland@Sun.COM 
521*9781SMoriah.Waterland@Sun.COM #else	/* __STDC__ */
522*9781SMoriah.Waterland@Sun.COM 
523*9781SMoriah.Waterland@Sun.COM extern FILE	*epopen();
524*9781SMoriah.Waterland@Sun.COM extern void	pkglist_cont();
525*9781SMoriah.Waterland@Sun.COM extern char	**gpkglist();
526*9781SMoriah.Waterland@Sun.COM extern char	**pkgalias();
527*9781SMoriah.Waterland@Sun.COM extern char	*get_prog_name();
528*9781SMoriah.Waterland@Sun.COM extern char 	*set_prog_name();
529*9781SMoriah.Waterland@Sun.COM extern int	averify();
530*9781SMoriah.Waterland@Sun.COM extern int	ckparam();
531*9781SMoriah.Waterland@Sun.COM extern int	ckvolseq();
532*9781SMoriah.Waterland@Sun.COM extern int	cverify();
533*9781SMoriah.Waterland@Sun.COM extern unsigned long	compute_checksum();
534*9781SMoriah.Waterland@Sun.COM extern int	fverify();
535*9781SMoriah.Waterland@Sun.COM extern char	*getErrbufAddr();
536*9781SMoriah.Waterland@Sun.COM extern int	getErrbufSize();
537*9781SMoriah.Waterland@Sun.COM extern char	*getErrstr();
538*9781SMoriah.Waterland@Sun.COM extern void	setErrstr();
539*9781SMoriah.Waterland@Sun.COM extern int	devtype();
540*9781SMoriah.Waterland@Sun.COM extern int	ds_close();
541*9781SMoriah.Waterland@Sun.COM extern int	ds_findpkg();
542*9781SMoriah.Waterland@Sun.COM extern int	ds_getinfo();
543*9781SMoriah.Waterland@Sun.COM extern int	ds_getpkg();
544*9781SMoriah.Waterland@Sun.COM extern int	ds_ginit();
545*9781SMoriah.Waterland@Sun.COM extern boolean_t	ds_fd_open();
546*9781SMoriah.Waterland@Sun.COM extern int	ds_init();
547*9781SMoriah.Waterland@Sun.COM extern int	ds_next();
548*9781SMoriah.Waterland@Sun.COM extern int	ds_readbuf();
549*9781SMoriah.Waterland@Sun.COM extern int	epclose();
550*9781SMoriah.Waterland@Sun.COM extern int	esystem();
551*9781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdArray();
552*9781SMoriah.Waterland@Sun.COM extern int	e_ExecCmdList();
553*9781SMoriah.Waterland@Sun.COM extern int	gpkgmap();
554*9781SMoriah.Waterland@Sun.COM extern int	isFdRemote();
555*9781SMoriah.Waterland@Sun.COM extern int	isFstypeRemote();
556*9781SMoriah.Waterland@Sun.COM extern int	isPathRemote();
557*9781SMoriah.Waterland@Sun.COM extern int	iscpio();
558*9781SMoriah.Waterland@Sun.COM extern int	isdir();
559*9781SMoriah.Waterland@Sun.COM extern int	isfile();
560*9781SMoriah.Waterland@Sun.COM extern int	pkgexecl();
561*9781SMoriah.Waterland@Sun.COM extern int	pkgexecv();
562*9781SMoriah.Waterland@Sun.COM extern int	pkghead();
563*9781SMoriah.Waterland@Sun.COM extern int	pkgmount();
564*9781SMoriah.Waterland@Sun.COM extern int	pkgtrans();
565*9781SMoriah.Waterland@Sun.COM extern int	pkgumount();
566*9781SMoriah.Waterland@Sun.COM extern int	ppkgmap();
567*9781SMoriah.Waterland@Sun.COM extern int	putcfile();
568*9781SMoriah.Waterland@Sun.COM extern int	putcvfpfile();
569*9781SMoriah.Waterland@Sun.COM extern int	rrmdir();
570*9781SMoriah.Waterland@Sun.COM extern int	srchcfile();
571*9781SMoriah.Waterland@Sun.COM extern struct	group *cgrgid();
572*9781SMoriah.Waterland@Sun.COM extern struct	group *cgrnam();
573*9781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwnam();
574*9781SMoriah.Waterland@Sun.COM extern struct	passwd *cpwuid();
575*9781SMoriah.Waterland@Sun.COM extern void	basepath();
576*9781SMoriah.Waterland@Sun.COM extern void	canonize();
577*9781SMoriah.Waterland@Sun.COM extern void	canonize_slashes();
578*9781SMoriah.Waterland@Sun.COM extern void	checksum_off();
579*9781SMoriah.Waterland@Sun.COM extern void	checksum_on();
580*9781SMoriah.Waterland@Sun.COM extern void	cvtpath();
581*9781SMoriah.Waterland@Sun.COM extern void	ds_order();
582*9781SMoriah.Waterland@Sun.COM extern void	ds_putinfo();
583*9781SMoriah.Waterland@Sun.COM extern void	ds_skiptoend();
584*9781SMoriah.Waterland@Sun.COM extern void	ecleanup();
585*9781SMoriah.Waterland@Sun.COM extern void	logerr();
586*9781SMoriah.Waterland@Sun.COM extern int	mappath();
587*9781SMoriah.Waterland@Sun.COM extern int	mapvar();
588*9781SMoriah.Waterland@Sun.COM extern void	progerr();
589*9781SMoriah.Waterland@Sun.COM extern void	rpterr();
590*9781SMoriah.Waterland@Sun.COM extern void	tputcfent();
591*9781SMoriah.Waterland@Sun.COM extern void	set_nonABI_symlinks();
592*9781SMoriah.Waterland@Sun.COM extern int	nonABI_symlinks();
593*9781SMoriah.Waterland@Sun.COM extern void	disable_attribute_check();
594*9781SMoriah.Waterland@Sun.COM extern int	get_disable_attribute_check();
595*9781SMoriah.Waterland@Sun.COM /* vfpops.c */
596*9781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointFile();
597*9781SMoriah.Waterland@Sun.COM extern int	vfpCheckpointOpen();
598*9781SMoriah.Waterland@Sun.COM extern int	vfpClearModified();
599*9781SMoriah.Waterland@Sun.COM extern int	vfpClose();
600*9781SMoriah.Waterland@Sun.COM extern int	vfpGetModified();
601*9781SMoriah.Waterland@Sun.COM extern int	vfpOpen();
602*9781SMoriah.Waterland@Sun.COM extern void	vfpRewind();
603*9781SMoriah.Waterland@Sun.COM extern int	vfpSetFlags();
604*9781SMoriah.Waterland@Sun.COM extern int	vfpSetModified();
605*9781SMoriah.Waterland@Sun.COM extern int	vfpSetSize();
606*9781SMoriah.Waterland@Sun.COM extern void	vfpTruncate();
607*9781SMoriah.Waterland@Sun.COM extern int	vfpWriteToFile();
608*9781SMoriah.Waterland@Sun.COM 
609*9781SMoriah.Waterland@Sun.COM /* handlelocalfs.c */
610*9781SMoriah.Waterland@Sun.COM boolean_t	enable_local_fs();
611*9781SMoriah.Waterland@Sun.COM boolean_t	restore_local_fs();
612*9781SMoriah.Waterland@Sun.COM 
613*9781SMoriah.Waterland@Sun.COM /* gpkgmap.c */
614*9781SMoriah.Waterland@Sun.COM int		getmapmode(void);
615*9781SMoriah.Waterland@Sun.COM 
616*9781SMoriah.Waterland@Sun.COM #endif	/* __STDC__ */
617*9781SMoriah.Waterland@Sun.COM 
618*9781SMoriah.Waterland@Sun.COM #ifdef	__cplusplus
619*9781SMoriah.Waterland@Sun.COM }
620*9781SMoriah.Waterland@Sun.COM #endif
621*9781SMoriah.Waterland@Sun.COM 
622*9781SMoriah.Waterland@Sun.COM #endif	/* _PKGLIB_H */
623