#ifndef _TSOL_LABEL_H
#define _TSOL_LABEL_H
#include <sys/types32.h>
#include <sys/tsol/label.h>
#include <priv.h>
#ifdef __cplusplus
extern "C" {
#endif
struct label_info {
short ilabel_len;
short slabel_len;
short clabel_len;
short clear_len;
short vers_len;
short header_len;
short protect_as_len;
short caveats_len;
short channels_len;
};
typedef struct label_set_identifier {
int type;
char *name;
} set_id;
struct name_fields {
char *class_name;
char *comps_name;
char *marks_name;
};
#define SYSTEM_ACCREDITATION_RANGE 1
#define USER_ACCREDITATION_RANGE 2
extern int getlabel(const char *, m_label_t *);
extern int fgetlabel(int, m_label_t *);
extern int getplabel(m_label_t *);
extern int setflabel(const char *, m_label_t *);
extern char *getpathbylabel(const char *, char *, size_t,
const m_label_t *sl);
extern m_label_t *getzonelabelbyid(zoneid_t);
extern m_label_t *getzonelabelbyname(const char *);
extern zoneid_t getzoneidbylabel(const m_label_t *);
extern char *getzonenamebylabel(const m_label_t *);
extern char *getzonerootbyid(zoneid_t);
extern char *getzonerootbyname(const char *);
extern char *getzonerootbylabel(const m_label_t *);
extern m_label_t *getlabelbypath(const char *);
#define ALL_ENTRIES 0x00000000
#define ACCESS_RELATED 0x00000001
#define ACCESS_MASK 0x0000FFFF
#define ACCESS_SHIFT 0
#define LONG_WORDS 0x00010000
#define SHORT_WORDS 0x00020000
#define LONG_CLASSIFICATION 0x00040000
#define SHORT_CLASSIFICATION 0x00080000
#define NO_CLASSIFICATION 0x00100000
#define VIEW_INTERNAL 0x00200000
#define VIEW_EXTERNAL 0x00400000
#define NEW_LABEL 0x00000001
#define NO_CORRECTION 0x00000002
#define CVT_DIM 0x01
#define CVT_SET 0x02
extern m_label_t *blabel_alloc(void);
extern void blabel_free(m_label_t *);
extern size32_t blabel_size(void);
extern char *bsltoh(const m_label_t *);
extern char *bcleartoh(const m_label_t *);
extern char *bsltoh_r(const m_label_t *, char *);
extern char *bcleartoh_r(const m_label_t *, char *);
extern char *h_alloc(uint8_t);
extern void h_free(char *);
extern int htobsl(const char *, m_label_t *);
extern int htobclear(const char *, m_label_t *);
extern m_range_t *getuserrange(const char *);
extern m_range_t *getdevicerange(const char *);
extern int set_effective_priv(priv_op_t, int, ...);
extern int set_inheritable_priv(priv_op_t, int, ...);
extern int set_permitted_priv(priv_op_t, int, ...);
extern int is_system_labeled(void);
extern int tsol_check_admin_auth(uid_t uid);
extern int blinset(const m_label_t *, const set_id *);
extern int labelinfo(struct label_info *);
extern ssize_t labelvers(char **, size_t);
extern char *bltocolor(const m_label_t *);
extern char *bltocolor_r(const m_label_t *, size_t, char *);
extern ssize_t bsltos(const m_label_t *, char **, size_t, int);
extern ssize_t bcleartos(const m_label_t *, char **, size_t, int);
extern char *sbsltos(const m_label_t *, size_t);
extern char *sbcleartos(const m_label_t *, size_t);
extern int stobsl(const char *, m_label_t *, int, int *);
extern int stobclear(const char *, m_label_t *, int, int *);
extern int bslvalid(const m_label_t *);
extern int bclearvalid(const m_label_t *);
typedef enum _m_label_str {
M_LABEL = 1,
M_INTERNAL = 2,
M_COLOR = 3,
PRINTER_TOP_BOTTOM = 4,
PRINTER_LABEL = 5,
PRINTER_CAVEATS = 6,
PRINTER_CHANNELS = 7
} m_label_str_t;
#define DEF_NAMES 0x1
#define SHORT_NAMES 0x3
#define LONG_NAMES 0x4
extern int label_to_str(const m_label_t *, char **, const m_label_str_t,
uint_t);
extern int l_to_str_internal(const m_label_t *, char **);
typedef enum _m_label_type {
MAC_LABEL = 1,
USER_CLEAR = 2
} m_label_type_t;
#define L_DEFAULT 0x0
#define L_MODIFY_EXISTING 0x1
#define L_NO_CORRECTION 0x2
#define L_CHECK_AR 0x10
#define M_OUTSIDE_AR -4
#define M_BAD_STRING -3
#define M_BAD_LABEL -2
extern int str_to_label(const char *, m_label_t **, const m_label_type_t,
uint_t, int *);
extern int hexstr_to_label(const char *, m_label_t *);
extern m_label_t *m_label_alloc(const m_label_type_t);
extern int m_label_dup(m_label_t **, const m_label_t *);
extern void m_label_free(m_label_t *);
extern int bslcvtfull(const m_label_t *, const m_range_t *, int,
char **, char **[], char **[], char *[], int *, int *);
extern int bslcvt(const m_label_t *, int, char **, char *[]);
extern int bclearcvtfull(const m_label_t *, const m_range_t *, int,
char **, char **[], char **[], char *[], int *, int *);
extern int bclearcvt(const m_label_t *, int, char **, char *[]);
extern int labelfields(struct name_fields *);
extern int userdefs(m_label_t *, m_label_t *);
extern int zonecopy(m_label_t *, char *, char *, char *, int);
#ifdef DEBUG
#define is_system_labeled_debug(statbufp) \
((stat("/ALLOCATE_FORCE_LABEL", (statbufp)) == 0) ? 1 : 0)
#else
#define is_system_labeled_debug(statbufp) 0
#endif
#ifdef __cplusplus
}
#endif
#endif