1244541Sbrooks/* $NetBSD: mtree.h,v 1.31 2012/10/05 09:17:29 wiz Exp $ */ 2244541Sbrooks 3244541Sbrooks/*- 4244541Sbrooks * Copyright (c) 1990, 1993 5244541Sbrooks * The Regents of the University of California. All rights reserved. 6244541Sbrooks * 7244541Sbrooks * Redistribution and use in source and binary forms, with or without 8244541Sbrooks * modification, are permitted provided that the following conditions 9244541Sbrooks * are met: 10244541Sbrooks * 1. Redistributions of source code must retain the above copyright 11244541Sbrooks * notice, this list of conditions and the following disclaimer. 12244541Sbrooks * 2. Redistributions in binary form must reproduce the above copyright 13244541Sbrooks * notice, this list of conditions and the following disclaimer in the 14244541Sbrooks * documentation and/or other materials provided with the distribution. 15244541Sbrooks * 3. Neither the name of the University nor the names of its contributors 16244541Sbrooks * may be used to endorse or promote products derived from this software 17244541Sbrooks * without specific prior written permission. 18244541Sbrooks * 19244541Sbrooks * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20244541Sbrooks * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21244541Sbrooks * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22244541Sbrooks * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23244541Sbrooks * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24244541Sbrooks * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25244541Sbrooks * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26244541Sbrooks * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27244541Sbrooks * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28244541Sbrooks * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29244541Sbrooks * SUCH DAMAGE. 30244541Sbrooks * 31244541Sbrooks * @(#)mtree.h 8.1 (Berkeley) 6/6/93 32244541Sbrooks */ 33244541Sbrooks 34244541Sbrooks#ifndef _MTREE_H_ 35244541Sbrooks#define _MTREE_H_ 36244541Sbrooks 37244541Sbrooks#define KEYDEFAULT (F_GID | F_MODE | F_NLINK | F_SIZE | F_SLINK | \ 38244541Sbrooks F_TIME | F_TYPE | F_UID | F_FLAGS) 39244541Sbrooks 40244541Sbrooks#define MISMATCHEXIT 2 41244541Sbrooks 42244541Sbrookstypedef struct _node { 43244541Sbrooks struct _node *parent, *child; /* up, down */ 44244541Sbrooks struct _node *prev, *next; /* left, right */ 45244541Sbrooks off_t st_size; /* size */ 46244541Sbrooks struct timespec st_mtimespec; /* last modification time */ 47244541Sbrooks char *slink; /* symbolic link reference */ 48244541Sbrooks uid_t st_uid; /* uid */ 49244541Sbrooks gid_t st_gid; /* gid */ 50244541Sbrooks#define MBITS (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO) 51244541Sbrooks mode_t st_mode; /* mode */ 52244541Sbrooks dev_t st_rdev; /* device type */ 53244541Sbrooks u_long st_flags; /* flags */ 54244541Sbrooks nlink_t st_nlink; /* link count */ 55244541Sbrooks u_long cksum; /* check sum */ 56244541Sbrooks char *md5digest; /* MD5 digest */ 57244541Sbrooks char *rmd160digest; /* RMD-160 digest */ 58244541Sbrooks char *sha1digest; /* SHA1 digest */ 59244541Sbrooks char *sha256digest; /* SHA256 digest */ 60244541Sbrooks char *sha384digest; /* SHA384 digest */ 61244541Sbrooks char *sha512digest; /* SHA512 digest */ 62244541Sbrooks char *tags; /* tags, comma delimited, 63244541Sbrooks * also with leading and 64244541Sbrooks * trailing commas */ 65244541Sbrooks size_t lineno; /* line # entry came from */ 66244541Sbrooks 67244541Sbrooks#define F_CKSUM 0x00000001 /* cksum(1) check sum */ 68244541Sbrooks#define F_DEV 0x00000002 /* device type */ 69244541Sbrooks#define F_DONE 0x00000004 /* directory done */ 70244541Sbrooks#define F_FLAGS 0x00000008 /* file flags */ 71244541Sbrooks#define F_GID 0x00000010 /* gid */ 72244541Sbrooks#define F_GNAME 0x00000020 /* group name */ 73244541Sbrooks#define F_IGN 0x00000040 /* ignore */ 74244541Sbrooks#define F_MAGIC 0x00000080 /* name has magic chars */ 75244541Sbrooks#define F_MD5 0x00000100 /* MD5 digest */ 76244541Sbrooks#define F_MODE 0x00000200 /* mode */ 77244541Sbrooks#define F_NLINK 0x00000400 /* number of links */ 78244541Sbrooks#define F_OPT 0x00000800 /* existence optional */ 79244541Sbrooks#define F_RMD160 0x00001000 /* RMD-160 digest */ 80244541Sbrooks#define F_SHA1 0x00002000 /* SHA1 digest */ 81244541Sbrooks#define F_SIZE 0x00004000 /* size */ 82244541Sbrooks#define F_SLINK 0x00008000 /* symbolic link */ 83244541Sbrooks#define F_TAGS 0x00010000 /* tags */ 84244541Sbrooks#define F_TIME 0x00020000 /* modification time */ 85244541Sbrooks#define F_TYPE 0x00040000 /* file type */ 86244541Sbrooks#define F_UID 0x00080000 /* uid */ 87244541Sbrooks#define F_UNAME 0x00100000 /* user name */ 88244541Sbrooks#define F_VISIT 0x00200000 /* file visited */ 89244541Sbrooks#define F_NOCHANGE 0x00400000 /* check existence, but not */ 90244541Sbrooks /* other properties */ 91244541Sbrooks#define F_SHA256 0x00800000 /* SHA256 digest */ 92244541Sbrooks#define F_SHA384 0x01000000 /* SHA384 digest */ 93244541Sbrooks#define F_SHA512 0x02000000 /* SHA512 digest */ 94244541Sbrooks 95244541Sbrooks int flags; /* items set */ 96244541Sbrooks 97244541Sbrooks#define F_BLOCK 0x001 /* block special */ 98244541Sbrooks#define F_CHAR 0x002 /* char special */ 99244541Sbrooks#define F_DIR 0x004 /* directory */ 100244541Sbrooks#define F_FIFO 0x008 /* fifo */ 101244541Sbrooks#define F_FILE 0x010 /* regular file */ 102244541Sbrooks#define F_LINK 0x020 /* symbolic link */ 103244541Sbrooks#define F_SOCK 0x040 /* socket */ 104244541Sbrooks#define F_DOOR 0x080 /* door */ 105244541Sbrooks int type; /* file type */ 106244541Sbrooks 107244541Sbrooks char name[1]; /* file name (must be last) */ 108244541Sbrooks} NODE; 109244541Sbrooks 110244541Sbrooks 111244541Sbrookstypedef struct { 112244541Sbrooks char **list; 113244541Sbrooks int count; 114244541Sbrooks} slist_t; 115244541Sbrooks 116244541Sbrooks 117244541Sbrooks/* 118244541Sbrooks * prototypes for functions published to other programs which want to use 119244541Sbrooks * the specfile parser but don't want to pull in all of "extern.h" 120244541Sbrooks */ 121244541Sbrooksconst char *inotype(u_int); 122244541Sbrooksu_int nodetoino(u_int); 123244541Sbrooksint setup_getid(const char *); 124244541SbrooksNODE *spec(FILE *); 125244541Sbrooksint mtree_specspec(FILE *, FILE *); 126244541Sbrooksvoid free_nodes(NODE *); 127244541Sbrookschar *vispath(const char *); 128244541Sbrooks 129244541Sbrooks#ifdef __FreeBSD__ 130244541Sbrooks#define KEY_DIGEST "digest" 131244541Sbrooks#else 132244541Sbrooks#define KEY_DIGEST 133244541Sbrooks#endif 134244541Sbrooks 135244541Sbrooks#define MD5KEY "md5" KEY_DIGEST 136244541Sbrooks#ifdef __FreeBSD__ 137244541Sbrooks#define RMD160KEY "ripemd160" KEY_DIGEST 138244541Sbrooks#else 139244541Sbrooks#define RMD160KEY "rmd160" KEY_DIGEST 140244541Sbrooks#endif 141244541Sbrooks#define SHA1KEY "sha1" KEY_DIGEST 142244541Sbrooks#define SHA256KEY "sha256" KEY_DIGEST 143244541Sbrooks#define SHA384KEY "sha384" 144244541Sbrooks#define SHA512KEY "sha512" 145244541Sbrooks 146244541Sbrooks#define RP(p) \ 147244541Sbrooks ((p)->fts_path[0] == '.' && (p)->fts_path[1] == '/' ? \ 148244541Sbrooks (p)->fts_path + 2 : (p)->fts_path) 149244541Sbrooks 150244541Sbrooks#define UF_MASK ((UF_NODUMP | UF_IMMUTABLE | \ 151244541Sbrooks UF_APPEND | UF_OPAQUE) \ 152244541Sbrooks & UF_SETTABLE) /* user settable flags */ 153244541Sbrooks#define SF_MASK ((SF_ARCHIVED | SF_IMMUTABLE | \ 154244541Sbrooks SF_APPEND) & SF_SETTABLE) /* root settable flags */ 155244541Sbrooks#define CH_MASK (UF_MASK | SF_MASK) /* all settable flags */ 156244541Sbrooks#define SP_FLGS (SF_IMMUTABLE | SF_APPEND) /* special flags */ 157244541Sbrooks 158244541Sbrooks#endif /* _MTREE_H_ */ 159