Merge branch 'less_closed'
[unleashed.git] / usr / src / lib / libtsol / common / label.h
blobd6b3600c580b9923cd9828d373b9b26d0da1133e
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _TSOL_LABEL_H
27 #define _TSOL_LABEL_H
29 #include <sys/types32.h>
30 #include <sys/tsol/label.h>
31 #include <priv.h>
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
37 /* Procedural Interface Structure Definitions */
39 struct label_info { /* structure returned by label_info */
40 short ilabel_len; /* max Information Label length */
41 short slabel_len; /* max Sensitivity Label length */
42 short clabel_len; /* max CMW Label length */
43 short clear_len; /* max Clearance Label length */
44 short vers_len; /* version string length */
45 short header_len; /* max len of banner page header */
46 short protect_as_len; /* max len of banner page protect as */
47 short caveats_len; /* max len of banner page caveats */
48 short channels_len; /* max len of banner page channels */
51 typedef struct label_set_identifier { /* valid label set identifier */
52 int type; /* type of the set */
53 char *name; /* name of the set if needed */
54 } set_id;
56 struct name_fields { /* names for label builder fields */
57 char *class_name; /* Classifications field name */
58 char *comps_name; /* Compartments field name */
59 char *marks_name; /* Markings field name */
62 /* Label Set Identifier Types */
65 * The accreditation ranges as specified in the label encodings file.
66 * The name parameter is ignored.
68 * System Accreditation Range is all valid labels plus Admin High and Low.
70 * User Accreditation Range is valid user labels as defined in the
71 * ACCREDITATION RANGE: section of the label encodings file.
74 #define SYSTEM_ACCREDITATION_RANGE 1
75 #define USER_ACCREDITATION_RANGE 2
78 /* System Call Interface Definitions */
80 extern int getlabel(const char *, m_label_t *);
81 extern int fgetlabel(int, m_label_t *);
83 extern int getplabel(m_label_t *);
84 extern int setflabel(const char *, m_label_t *);
85 extern char *getpathbylabel(const char *, char *, size_t,
86 const m_label_t *sl);
87 extern m_label_t *getzonelabelbyid(zoneid_t);
88 extern m_label_t *getzonelabelbyname(const char *);
89 extern zoneid_t getzoneidbylabel(const m_label_t *);
90 extern char *getzonenamebylabel(const m_label_t *);
91 extern char *getzonerootbyid(zoneid_t);
92 extern char *getzonerootbyname(const char *);
93 extern char *getzonerootbylabel(const m_label_t *);
94 extern m_label_t *getlabelbypath(const char *);
97 /* Flag word values */
99 #define ALL_ENTRIES 0x00000000
100 #define ACCESS_RELATED 0x00000001
101 #define ACCESS_MASK 0x0000FFFF
102 #define ACCESS_SHIFT 0
104 #define LONG_WORDS 0x00010000 /* use long names */
105 #define SHORT_WORDS 0x00020000 /* use short names if present */
106 #define LONG_CLASSIFICATION 0x00040000 /* use long classification */
107 #define SHORT_CLASSIFICATION 0x00080000 /* use short classification */
108 #define NO_CLASSIFICATION 0x00100000 /* don't translate the class */
109 #define VIEW_INTERNAL 0x00200000 /* don't promote/demote */
110 #define VIEW_EXTERNAL 0x00400000 /* promote/demote label */
112 #define NEW_LABEL 0x00000001 /* create a full new label */
113 #define NO_CORRECTION 0x00000002 /* don't correct label errors */
114 /* implies NEW_LABEL */
116 #define CVT_DIM 0x01 /* display word dimmed */
117 #define CVT_SET 0x02 /* display word currently set */
119 /* Procedure Interface Definitions available to user */
121 /* APIs shared with the kernel are in <sys/tsol/label.h */
123 extern m_label_t *blabel_alloc(void);
124 extern void blabel_free(m_label_t *);
125 extern size32_t blabel_size(void);
126 extern char *bsltoh(const m_label_t *);
127 extern char *bcleartoh(const m_label_t *);
129 extern char *bsltoh_r(const m_label_t *, char *);
130 extern char *bcleartoh_r(const m_label_t *, char *);
131 extern char *h_alloc(uint8_t);
132 extern void h_free(char *);
134 extern int htobsl(const char *, m_label_t *);
135 extern int htobclear(const char *, m_label_t *);
137 extern m_range_t *getuserrange(const char *);
138 extern m_range_t *getdevicerange(const char *);
140 extern int set_effective_priv(priv_op_t, int, ...);
141 extern int set_inheritable_priv(priv_op_t, int, ...);
142 extern int set_permitted_priv(priv_op_t, int, ...);
143 extern int is_system_labeled(void);
145 /* Procedures needed for multi-level printing */
147 extern int tsol_check_admin_auth(uid_t uid);
149 /* APIs implemented via labeld */
151 extern int blinset(const m_label_t *, const set_id *);
152 extern int labelinfo(struct label_info *);
153 extern ssize_t labelvers(char **, size_t);
154 extern char *bltocolor(const m_label_t *);
155 extern char *bltocolor_r(const m_label_t *, size_t, char *);
157 extern ssize_t bsltos(const m_label_t *, char **, size_t, int);
158 extern ssize_t bcleartos(const m_label_t *, char **, size_t, int);
161 extern char *sbsltos(const m_label_t *, size_t);
162 extern char *sbcleartos(const m_label_t *, size_t);
165 extern int stobsl(const char *, m_label_t *, int, int *);
166 extern int stobclear(const char *, m_label_t *, int, int *);
167 extern int bslvalid(const m_label_t *);
168 extern int bclearvalid(const m_label_t *);
170 /* DIA label conversion and parsing */
172 /* Conversion types */
174 typedef enum _m_label_str {
175 M_LABEL = 1, /* process or user clearance */
176 M_INTERNAL = 2, /* internal form for use in public databases */
177 M_COLOR = 3, /* process label color */
178 PRINTER_TOP_BOTTOM = 4, /* DIA banner page top/bottom */
179 PRINTER_LABEL = 5, /* DIA banner page label */
180 PRINTER_CAVEATS = 6, /* DIA banner page caveats */
181 PRINTER_CHANNELS = 7 /* DIA banner page handling channels */
182 } m_label_str_t;
184 /* Flags for conversion, not all flags apply to all types */
185 #define DEF_NAMES 0x1
186 #define SHORT_NAMES 0x3 /* short names are prefered where defined */
187 #define LONG_NAMES 0x4 /* long names are prefered where defined */
189 extern int label_to_str(const m_label_t *, char **, const m_label_str_t,
190 uint_t);
191 extern int l_to_str_internal(const m_label_t *, char **);
193 /* Parsing types */
194 typedef enum _m_label_type {
195 MAC_LABEL = 1, /* process or object label */
196 USER_CLEAR = 2 /* user's clearance (LUB) */
197 } m_label_type_t;
199 /* Flags for parsing */
201 #define L_DEFAULT 0x0
202 #define L_MODIFY_EXISTING 0x1 /* start parsing with existing label */
203 #define L_NO_CORRECTION 0x2 /* must be correct by l_e rules */
204 #define L_CHECK_AR 0x10 /* must be in l_e AR */
206 /* EINVAL sub codes */
208 #define M_OUTSIDE_AR -4 /* not in l_e AR */
209 #define M_BAD_STRING -3 /* DIA L_BAD_LABEL */
210 /* bad requested label type, bad previous label type */
211 #define M_BAD_LABEL -2 /* DIA L_BAD_CLASSIFICATION, */
213 extern int str_to_label(const char *, m_label_t **, const m_label_type_t,
214 uint_t, int *);
215 extern int hexstr_to_label(const char *, m_label_t *);
217 extern m_label_t *m_label_alloc(const m_label_type_t);
219 extern int m_label_dup(m_label_t **, const m_label_t *);
221 extern void m_label_free(m_label_t *);
223 /* Contract Private interfaces with the label builder GUIs */
225 extern int bslcvtfull(const m_label_t *, const m_range_t *, int,
226 char **, char **[], char **[], char *[], int *, int *);
227 extern int bslcvt(const m_label_t *, int, char **, char *[]);
228 extern int bclearcvtfull(const m_label_t *, const m_range_t *, int,
229 char **, char **[], char **[], char *[], int *, int *);
230 extern int bclearcvt(const m_label_t *, int, char **, char *[]);
232 extern int labelfields(struct name_fields *);
233 extern int userdefs(m_label_t *, m_label_t *);
234 extern int zonecopy(m_label_t *, char *, char *, char *, int);
236 #ifdef DEBUG
237 /* testing hook: see devfsadm.c, mkdevalloc.c and allocate.c */
238 #define is_system_labeled_debug(statbufp) \
239 ((stat("/ALLOCATE_FORCE_LABEL", (statbufp)) == 0) ? 1 : 0)
240 #else /* DEBUG */
241 #define is_system_labeled_debug(statbufp) 0
242 #endif /* DEBUG */
244 #ifdef __cplusplus
246 #endif
248 #endif /* !_TSOL_LABEL_H */