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