278 lines
6.6 KiB
C
278 lines
6.6 KiB
C
#ifndef H_RPMSX
|
|
#define H_RPMSX
|
|
|
|
/** \ingroup rpmdep rpmtrans
|
|
* \file lib/rpmsx.h
|
|
* Structure(s) used for file security context pattern handling
|
|
*/
|
|
|
|
#include <regex.h>
|
|
|
|
/**
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@unchecked@*/
|
|
extern int _rpmsx_debug;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@unchecked@*/
|
|
extern int _rpmsx_nopromote;
|
|
/*@=exportlocal@*/
|
|
|
|
typedef /*@abstract@*/ /*@refcounted@*/ struct rpmsx_s * rpmsx;
|
|
typedef struct rpmsxp_s * rpmsxp;
|
|
typedef struct rpmsxs_s * rpmsxs;
|
|
|
|
#if defined(_RPMSX_INTERNAL)
|
|
/**
|
|
* File security context regex pattern.
|
|
*/
|
|
struct rpmsxp_s {
|
|
/*@only@*/ /*@relnull@*/
|
|
const char * pattern; /*!< File path regex pattern. */
|
|
/*@only@*/ /*@relnull@*/
|
|
const char * type; /*!< File type string. */
|
|
/*@only@*/ /*@relnull@*/
|
|
const char * context; /*!< Security context. */
|
|
/*@only@*/ /*@relnull@*/
|
|
regex_t * preg; /*!< Compiled regex. */
|
|
mode_t fmode; /*!< File type. */
|
|
int matches;
|
|
int hasMetaChars;
|
|
int fstem; /*!< Stem id. */
|
|
};
|
|
|
|
/**
|
|
* File/pattern stem.
|
|
*/
|
|
struct rpmsxs_s {
|
|
/*@only@*/ /*@relnull@*/
|
|
const char * stem;
|
|
int len;
|
|
};
|
|
|
|
/**
|
|
* File security context patterns container.
|
|
*/
|
|
struct rpmsx_s {
|
|
/*@only@*/ /*@relnull@*/
|
|
rpmsxp sxp; /*!< File context patterns. */
|
|
int Count; /*!< No. of file context patterns. */
|
|
int i; /*!< Current pattern index. */
|
|
/*@only@*/ /*@relnull@*/
|
|
rpmsxs sxs; /*!< File stems. */
|
|
int nsxs; /*!< No. of file stems. */
|
|
int maxsxs; /*!< No. of allocated file stems. */
|
|
int reverse; /*!< Reverse traversal? */
|
|
/*@refs@*/
|
|
int nrefs; /*!< Reference count. */
|
|
};
|
|
#endif /* defined(_RPMSX_INTERNAL) */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Unreference a security context patterns instance.
|
|
* @param sx security context patterns
|
|
* @param msg
|
|
* @return NULL always
|
|
*/
|
|
/*@unused@*/ /*@null@*/
|
|
rpmsx rpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
|
|
/*@null@*/ const char * msg)
|
|
/*@modifies sx @*/;
|
|
|
|
/** @todo Remove debugging entry from the ABI. */
|
|
/*@-exportlocal@*/
|
|
/*@null@*/
|
|
rpmsx XrpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
|
|
/*@null@*/ const char * msg, const char * fn, unsigned ln)
|
|
/*@modifies sx @*/;
|
|
/*@=exportlocal@*/
|
|
#define rpmsxUnlink(_sx, _msg) XrpmsxUnlink(_sx, _msg, __FILE__, __LINE__)
|
|
|
|
/**
|
|
* Reference a security context patterns instance.
|
|
* @param sx security context patterns
|
|
* @param msg
|
|
* @return new security context patterns reference
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@unused@*/ /*@newref@*/ /*@null@*/
|
|
rpmsx rpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg)
|
|
/*@modifies sx @*/;
|
|
|
|
/** @todo Remove debugging entry from the ABI. */
|
|
/*@newref@*/ /*@null@*/
|
|
rpmsx XrpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg,
|
|
const char * fn, unsigned ln)
|
|
/*@modifies sx @*/;
|
|
/*@=exportlocal@*/
|
|
#define rpmsxLink(_sx, _msg) XrpmsxLink(_sx, _msg, __FILE__, __LINE__)
|
|
|
|
/**
|
|
* Destroy a security context patterns.
|
|
* @param sx security context patterns
|
|
* @return NULL always
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@null@*/
|
|
rpmsx rpmsxFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx)
|
|
/*@modifies sx@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Parse selinux file security context patterns.
|
|
* @param sx security context patterns
|
|
* @param fn file name to parse
|
|
* @return 0 on success
|
|
*/
|
|
/*@-exportlocal@*/
|
|
int rpmsxParse(rpmsx sx, /*@null@*/ const char *fn)
|
|
/*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
|
|
/*@modifies sx, rpmGlobalMacroContext, h_errno, fileSystem @*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Create and load security context patterns.
|
|
* @param fn security context patterns file name
|
|
* @return new security context patterns
|
|
*/
|
|
/*@null@*/
|
|
rpmsx rpmsxNew(const char * fn)
|
|
/*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
|
|
/*@modifies rpmGlobalMacroContext, h_errno, fileSystem @*/;
|
|
|
|
/**
|
|
* Return security context patterns count.
|
|
* @param sx security context patterns
|
|
* @return current count
|
|
*/
|
|
int rpmsxCount(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Return security context patterns index.
|
|
* @param sx security context patterns
|
|
* @return current index
|
|
*/
|
|
int rpmsxIx(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
|
|
/**
|
|
* Set security context patterns index.
|
|
* @param sx security context patterns
|
|
* @param ix new index
|
|
* @return current index
|
|
*/
|
|
int rpmsxSetIx(/*@null@*/ rpmsx sx, int ix)
|
|
/*@modifies sx @*/;
|
|
|
|
/**
|
|
* Return current pattern.
|
|
* @param sx security context patterns
|
|
* @return current pattern, NULL on invalid
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmsxPattern(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Return current type.
|
|
* @param sx security context patterns
|
|
* @return current type, NULL on invalid/missing
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmsxType(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Return current context.
|
|
* @param sx security context patterns
|
|
* @return current context, NULL on invalid
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern const char * rpmsxContext(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Return current regex.
|
|
* @param sx security context patterns
|
|
* @return current context, NULL on invalid
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@observer@*/ /*@null@*/
|
|
extern regex_t * rpmsxRE(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Return current file mode.
|
|
* @param sx security context patterns
|
|
* @return current file mode, 0 on invalid
|
|
*/
|
|
/*@-exportlocal@*/
|
|
extern mode_t rpmsxFMode(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Return current file stem.
|
|
* @param sx security context patterns
|
|
* @return current file stem, -1 on invalid
|
|
*/
|
|
/*@-exportlocal@*/
|
|
extern int rpmsxFStem(/*@null@*/ const rpmsx sx)
|
|
/*@*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Return next security context patterns iterator index.
|
|
* @param sx security context patterns
|
|
* @return security context patterns iterator index, -1 on termination
|
|
*/
|
|
/*@-exportlocal@*/
|
|
int rpmsxNext(/*@null@*/ rpmsx sx)
|
|
/*@modifies sx @*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Initialize security context patterns iterator.
|
|
* @param sx security context patterns
|
|
* @param reverse iterate in reverse order?
|
|
* @return security context patterns
|
|
*/
|
|
/*@-exportlocal@*/
|
|
/*@null@*/
|
|
rpmsx rpmsxInit(/*@null@*/ rpmsx sx, int reverse)
|
|
/*@modifies sx @*/;
|
|
/*@=exportlocal@*/
|
|
|
|
/**
|
|
* Find file security context from path and type.
|
|
* @param sx security context patterns
|
|
* @param fn file path
|
|
* @param fmode file mode
|
|
* @return file security context
|
|
*/
|
|
/*@owned@*/ /*@null@*/
|
|
const char * rpmsxFContext(/*@null@*/ rpmsx sx, const char * fn, mode_t fmode)
|
|
/*@modifies sx @*/;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* H_RPMSX */
|