4 /** \ingroup rpmdep rpmtrans
6 * Structure(s) used for file security context pattern handling
15 extern int _rpmsx_debug;
22 extern int _rpmsx_nopromote;
25 typedef /*@abstract@*/ /*@refcounted@*/ struct rpmsx_s * rpmsx;
26 typedef struct rpmsxp_s * rpmsxp;
27 typedef struct rpmsxs_s * rpmsxs;
29 #if defined(_RPMSX_INTERNAL)
31 * File security context regex pattern.
34 /*@only@*/ /*@relnull@*/
35 const char * pattern; /*!< File path regex pattern. */
36 /*@only@*/ /*@relnull@*/
37 const char * type; /*!< File type string. */
38 /*@only@*/ /*@relnull@*/
39 const char * context; /*!< Security context. */
40 /*@only@*/ /*@relnull@*/
41 regex_t * preg; /*!< Compiled regex. */
42 mode_t fmode; /*!< File type. */
45 int fstem; /*!< Stem id. */
52 /*@only@*/ /*@relnull@*/
58 * File security context patterns container.
61 /*@only@*/ /*@relnull@*/
62 rpmsxp sxp; /*!< File context patterns. */
63 int Count; /*!< No. of file context patterns. */
64 int i; /*!< Current pattern index. */
65 /*@only@*/ /*@relnull@*/
66 rpmsxs sxs; /*!< File stems. */
67 int nsxs; /*!< No. of file stems. */
68 int maxsxs; /*!< No. of allocated file stems. */
69 int reverse; /*!< Reverse traversal? */
71 int nrefs; /*!< Reference count. */
73 #endif /* defined(_RPMSX_INTERNAL) */
80 * Unreference a security context patterns instance.
81 * @param sx security context patterns
85 /*@unused@*/ /*@null@*/
86 rpmsx rpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
87 /*@null@*/ const char * msg)
90 /** @todo Remove debugging entry from the ABI. */
93 rpmsx XrpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
94 /*@null@*/ const char * msg, const char * fn, unsigned ln)
97 #define rpmsxUnlink(_sx, _msg) XrpmsxUnlink(_sx, _msg, __FILE__, __LINE__)
100 * Reference a security context patterns instance.
101 * @param sx security context patterns
103 * @return new security context patterns reference
106 /*@unused@*/ /*@newref@*/ /*@null@*/
107 rpmsx rpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg)
110 /** @todo Remove debugging entry from the ABI. */
111 /*@newref@*/ /*@null@*/
112 rpmsx XrpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg,
113 const char * fn, unsigned ln)
116 #define rpmsxLink(_sx, _msg) XrpmsxLink(_sx, _msg, __FILE__, __LINE__)
119 * Destroy a security context patterns.
120 * @param sx security context patterns
121 * @return NULL always
125 rpmsx rpmsxFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx)
130 * Parse selinux file security context patterns.
131 * @param sx security context patterns
132 * @param fn file name to parse
133 * @return 0 on success
136 int rpmsxParse(rpmsx sx, /*@null@*/ const char *fn)
137 /*@globals fileSystem @*/
138 /*@modifies sx, fileSystem @*/;
142 * Create and load security context patterns.
143 * @param fn security context patterns file name
144 * @return new security context patterns
147 rpmsx rpmsxNew(const char * fn)
148 /*@globals fileSystem @*/
149 /*@modifies fileSystem @*/;
152 * Return security context patterns count.
153 * @param sx security context patterns
154 * @return current count
156 int rpmsxCount(/*@null@*/ const rpmsx sx)
160 * Return security context patterns index.
161 * @param sx security context patterns
162 * @return current index
164 int rpmsxIx(/*@null@*/ const rpmsx sx)
168 * Set security context patterns index.
169 * @param sx security context patterns
170 * @param ix new index
171 * @return current index
173 int rpmsxSetIx(/*@null@*/ rpmsx sx, int ix)
177 * Return current pattern.
178 * @param sx security context patterns
179 * @return current pattern, NULL on invalid
182 /*@observer@*/ /*@null@*/
183 extern const char * rpmsxPattern(/*@null@*/ const rpmsx sx)
188 * Return current type.
189 * @param sx security context patterns
190 * @return current type, NULL on invalid/missing
193 /*@observer@*/ /*@null@*/
194 extern const char * rpmsxType(/*@null@*/ const rpmsx sx)
199 * Return current context.
200 * @param sx security context patterns
201 * @return current context, NULL on invalid
204 /*@observer@*/ /*@null@*/
205 extern const char * rpmsxContext(/*@null@*/ const rpmsx sx)
210 * Return current regex.
211 * @param sx security context patterns
212 * @return current context, NULL on invalid
215 /*@observer@*/ /*@null@*/
216 extern regex_t * rpmsxRE(/*@null@*/ const rpmsx sx)
221 * Return current file mode.
222 * @param sx security context patterns
223 * @return current file mode, 0 on invalid
226 extern mode_t rpmsxFMode(/*@null@*/ const rpmsx sx)
231 * Return current file stem.
232 * @param sx security context patterns
233 * @return current file stem, -1 on invalid
236 extern int rpmsxFStem(/*@null@*/ const rpmsx sx)
241 * Return next security context patterns iterator index.
242 * @param sx security context patterns
243 * @return security context patterns iterator index, -1 on termination
246 int rpmsxNext(/*@null@*/ rpmsx sx)
251 * Initialize security context patterns iterator.
252 * @param sx security context patterns
253 * @param reverse iterate in reverse order?
254 * @return security context patterns
258 rpmsx rpmsxInit(/*@null@*/ rpmsx sx, int reverse)
263 * Find file security context from path and type.
264 * @param sx security context patterns
265 * @param fn file path
266 * @param fmode file mode
267 * @return file security context
269 /*@owned@*/ /*@null@*/
270 const char * rpmsxFContext(rpmsx sx, const char * fn, mode_t fmode)