xref: /dragonfly/usr.sbin/mtree/mtree.h (revision a43287cc892c020da5e640dcf3d1e66475ae6cd4)
1 /*        $NetBSD: mtree.h,v 1.31 2012/10/05 09:17:29 wiz Exp $       */
2 
3 /*-
4  * Copyright (c) 1990, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *        @(#)mtree.h         8.1 (Berkeley) 6/6/93
32  */
33 
34 #ifndef _MTREE_H_
35 #define   _MTREE_H_
36 
37 #define   KEYDEFAULT          (F_GID | F_MODE | F_NLINK | F_SIZE | F_SLINK | \
38                               F_TIME | F_TYPE | F_UID | F_FLAGS)
39 
40 #define   MISMATCHEXIT        2
41 
42 typedef struct _node {
43           struct _node        *parent, *child;    /* up, down */
44           struct _node        *prev, *next;                 /* left, right */
45           off_t     st_size;                      /* size */
46           struct timespec     st_mtimespec;                 /* last modification time */
47           char      *slink;                                 /* symbolic link reference */
48           uid_t     st_uid;                                 /* uid */
49           gid_t     st_gid;                                 /* gid */
50 #define   MBITS     (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)
51           mode_t    st_mode;                      /* mode */
52           dev_t     st_rdev;                      /* device type */
53           u_long    st_flags;                     /* flags */
54           nlink_t   st_nlink;                     /* link count */
55           u_long    cksum;                                  /* check sum */
56           char      *md5digest;                             /* MD5 digest */
57           char      *rmd160digest;                          /* RMD-160 digest */
58           char      *sha1digest;                            /* SHA1 digest */
59           char      *sha256digest;                          /* SHA256 digest */
60           char      *sha384digest;                          /* SHA384 digest */
61           char      *sha512digest;                          /* SHA512 digest */
62           char      *tags;                                  /* tags, comma delimited,
63                                                              * also with leading and
64                                                              * trailing commas */
65           size_t    lineno;                                 /* line # entry came from */
66 
67 #define   F_CKSUM             0x00000001                    /* cksum(1) check sum */
68 #define   F_DEV               0x00000002                    /* device type */
69 #define   F_DONE              0x00000004                    /* directory done */
70 #define   F_FLAGS             0x00000008                    /* file flags */
71 #define   F_GID               0x00000010                    /* gid */
72 #define   F_GNAME             0x00000020                    /* group name */
73 #define   F_IGN               0x00000040                    /* ignore */
74 #define   F_MAGIC             0x00000080                    /* name has magic chars */
75 #define   F_MD5               0x00000100                    /* MD5 digest */
76 #define   F_MODE              0x00000200                    /* mode */
77 #define   F_NLINK             0x00000400                    /* number of links */
78 #define   F_OPT               0x00000800                    /* existence optional */
79 #define   F_RMD160  0x00001000                    /* RMD-160 digest */
80 #define   F_SHA1              0x00002000                    /* SHA1 digest */
81 #define   F_SIZE              0x00004000                    /* size */
82 #define   F_SLINK             0x00008000                    /* symbolic link */
83 #define   F_TAGS              0x00010000                    /* tags */
84 #define   F_TIME              0x00020000                    /* modification time */
85 #define   F_TYPE              0x00040000                    /* file type */
86 #define   F_UID               0x00080000                    /* uid */
87 #define   F_UNAME             0x00100000                    /* user name */
88 #define   F_VISIT             0x00200000                    /* file visited */
89 #define   F_NOCHANGE          0x00400000                    /* check existence, but not */
90                                                             /* other properties */
91 #define   F_SHA256  0x00800000                    /* SHA256 digest */
92 #define   F_SHA384  0x01000000                    /* SHA384 digest */
93 #define   F_SHA512  0x02000000                    /* SHA512 digest */
94 
95           int       flags;                                  /* items set */
96 
97 #define   F_BLOCK   0x001                                   /* block special */
98 #define   F_CHAR    0x002                                   /* char special */
99 #define   F_DIR     0x004                                   /* directory */
100 #define   F_FIFO    0x008                                   /* fifo */
101 #define   F_FILE    0x010                                   /* regular file */
102 #define   F_LINK    0x020                                   /* symbolic link */
103 #define   F_SOCK    0x040                                   /* socket */
104 #define   F_DOOR    0x080                                   /* door */
105           int       type;                                   /* file type */
106 
107           char      name[1];                      /* file name (must be last) */
108 } NODE;
109 
110 
111 typedef struct {
112           char  **list;
113           int       count;
114 } slist_t;
115 
116 
117 /*
118  * prototypes for functions published to other programs which want to use
119  * the specfile parser but don't want to pull in all of "extern.h"
120  */
121 const char          *inotype(u_int);
122 u_int                nodetoino(u_int);
123 int                  setup_getid(const char *);
124 NODE                *spec(FILE *);
125 int                  mtree_specspec(FILE *, FILE *);
126 void                 free_nodes(NODE *);
127 char                *vispath(const char *);
128 
129 #ifdef __FreeBSD__
130 #define KEY_DIGEST "digest"
131 #else
132 #define KEY_DIGEST
133 #endif
134 
135 #define   MD5KEY              "md5"               KEY_DIGEST
136 #ifdef __FreeBSD__
137 #define   RMD160KEY "ripemd160"         KEY_DIGEST
138 #else
139 #define   RMD160KEY "rmd160"  KEY_DIGEST
140 #endif
141 #define   SHA1KEY             "sha1"              KEY_DIGEST
142 #define   SHA256KEY "sha256"  KEY_DIGEST
143 #define   SHA384KEY "sha384"
144 #define   SHA512KEY "sha512"
145 
146 #define   RP(p)     \
147           ((p)->fts_path[0] == '.' && (p)->fts_path[1] == '/' ? \
148               (p)->fts_path + 2 : (p)->fts_path)
149 
150 #define   UF_MASK ((UF_NODUMP | UF_IMMUTABLE |   \
151                   UF_APPEND | UF_OPAQUE)       \
152                     & UF_SETTABLE)              /* user settable flags */
153 #define   SF_MASK ((SF_ARCHIVED | SF_IMMUTABLE | \
154                   SF_APPEND) & SF_SETTABLE)     /* root settable flags */
155 #define   CH_MASK  (UF_MASK | SF_MASK)            /* all settable flags */
156 #define   SP_FLGS  (SF_IMMUTABLE | SF_APPEND)     /* special flags */
157 
158 #endif /* _MTREE_H_ */
159