xref: /illumos-gate/usr/src/lib/libtsol/common/labeld.h (revision fd6d41c5025e9fb45a115fc82d86e9983d1e9fd6)
1 /*
2  * CDDL HEADER START
3  *
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.
7  *
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.
12  *
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]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef	_LABELD_H
27 #define	_LABELD_H
28 
29 #include <sys/types.h>
30 #include <tsol/label.h>
31 #include <sys/tsol/label_macro.h>
32 
33 #ifdef	__cplusplus
34 extern "C" {
35 #endif
36 
37 /*
38  *	Definitions for the call parameters for the door-based label
39  * translation service.
40  */
41 
42 #define	BUFSIZE	4096
43 
44 #define	DOOR_PATH	"/var/tsol/doors/"
45 #define	DOOR_NAME	"labeld"
46 #define	COOKIE		0x6c616264ull	/* "labd" */
47 
48 /*	Op codes */
49 
50 /*	Labeld Commands */
51 
52 #define	LABELDNULL	1
53 
54 /*	Miscellaneous */
55 
56 #define	BLINSET		10
57 #define	BSLVALID	11
58 #define	BILVALID	12
59 #define	BCLEARVALID	13
60 #define	LABELINFO	14
61 #define	LABELVERS	15
62 #define	BLTOCOLOR	16
63 
64 /*	Binary to String Label Translation */
65 
66 #define	BSLTOS		23
67 #define	BCLEARTOS	25
68 
69 /*	String to Binary Label Translation */
70 
71 #define	STOBSL		31
72 #define	STOBCLEAR	33
73 
74 /*
75  *	Dimming List Routines
76  *	Contract private for label builders
77  */
78 
79 #define	BSLCVT		40
80 #define	BCLEARCVT	42
81 #define	LABELFIELDS	43
82 #define	UDEFS		44
83 
84 #define	GETFLABEL	45
85 #define	SETFLABEL	46
86 #define	ZCOPY		47
87 
88 /* NEW LABELS */
89 /* DIA printer banner labels */
90 
91 #define	PR_CAVEATS	101
92 #define	PR_CHANNELS	102
93 #define	PR_LABEL	103
94 #define	PR_TOP		104
95 
96 /* DIA label to string  */
97 
98 #define	LTOS		105
99 
100 /* DIA string to label */
101 
102 #define	STOL		106
103 
104 /*	Structures */
105 
106 typedef	uint_t	bufp_t;		/* offset into buf[] in/out string buffer */
107 
108 /* Null call */
109 
110 typedef	struct {
111 	int	null;
112 } null_call_t;
113 
114 typedef	struct {
115 	int	null;
116 } null_ret_t;
117 
118 /* Miscellaneous interfaces */
119 
120 typedef	struct {
121 	bslabel_t label;
122 	int	type;
123 } inset_call_t;
124 
125 typedef	struct {
126 	int	inset;
127 } inset_ret_t;
128 
129 typedef	struct {
130 	bslabel_t label;
131 } slvalid_call_t;
132 
133 typedef	struct {
134 	int	valid;
135 } slvalid_ret_t;
136 
137 typedef	struct {
138 	bclear_t clear;
139 } clrvalid_call_t;
140 
141 typedef	struct {
142 	int	valid;
143 } clrvalid_ret_t;
144 
145 typedef	struct {
146 	int	null;
147 } info_call_t;
148 
149 typedef	struct {
150 	struct label_info info;
151 } info_ret_t;
152 
153 typedef	struct {
154 	int	null;
155 } vers_call_t;
156 
157 typedef	struct {
158 	char	vers[BUFSIZE];
159 } vers_ret_t;
160 
161 typedef struct {
162 	blevel_t label;
163 } color_call_t;
164 
165 typedef struct {
166 	char	color[BUFSIZE];
167 } color_ret_t;
168 
169 /* Binary Label to String interfaces */
170 
171 typedef	struct {
172 	bslabel_t label;
173 	uint_t	flags;
174 } bsltos_call_t;
175 
176 typedef	struct {
177 	char	slabel[BUFSIZE];
178 } bsltos_ret_t;
179 
180 typedef	struct {
181 	bclear_t clear;
182 	uint_t	flags;
183 } bcleartos_call_t;
184 
185 typedef	struct {
186 	char	cslabel[BUFSIZE];
187 } bcleartos_ret_t;
188 
189 /* String to Binary Label interfaces */
190 
191 typedef	struct {
192 	bslabel_t label;
193 	uint_t	flags;
194 	char	string[BUFSIZE];
195 } stobsl_call_t;
196 
197 typedef	struct {
198 	bslabel_t label;
199 } stobsl_ret_t;
200 
201 typedef	struct {
202 	bclear_t clear;
203 	uint_t	flags;
204 	char	string[BUFSIZE];
205 } stobclear_call_t;
206 
207 typedef	struct {
208 	bclear_t clear;
209 } stobclear_ret_t;
210 
211 /*
212  * The following Dimming List and Miscellaneous interfaces
213  * implement contract private interfaces for the label builder
214  * interfaces.
215  */
216 
217 /* Dimming List interfaces */
218 
219 typedef	struct {
220 	bslabel_t label;
221 	brange_t bounds;
222 	uint_t	flags;
223 } bslcvt_call_t;
224 
225 typedef	struct {
226 	bufp_t	string;
227 	bufp_t	dim;
228 	bufp_t	lwords;
229 	bufp_t	swords;
230 	size_t	d_len;
231 	size_t	l_len;
232 	size_t	s_len;
233 	int	first_comp;
234 	int	first_mark;
235 	char	buf[BUFSIZE];
236 } cvt_ret_t;
237 
238 typedef cvt_ret_t bslcvt_ret_t;
239 
240 typedef	struct {
241 	bclear_t clear;
242 	brange_t bounds;
243 	uint_t	flags;
244 } bclearcvt_call_t;
245 
246 typedef cvt_ret_t bclearcvt_ret_t;
247 
248 /* Miscellaneous interfaces */
249 
250 typedef	struct {
251 	int	null;
252 } fields_call_t;
253 
254 typedef	struct {
255 	bufp_t	classi;
256 	bufp_t	compsi;
257 	bufp_t	marksi;
258 	char	buf[BUFSIZE];
259 } fields_ret_t;
260 
261 typedef	struct {
262 	int	null;
263 } udefs_call_t;
264 
265 typedef	struct {
266 	bslabel_t sl;
267 	bclear_t  clear;
268 } udefs_ret_t;
269 
270 typedef	struct {
271 	bslabel_t  sl;
272 	char	pathname[BUFSIZE];
273 } setfbcl_call_t;
274 
275 typedef	struct {
276 	int	status;
277 } setfbcl_ret_t;
278 
279 typedef	struct {
280 	bslabel_t  src_win_sl;
281 	int	transfer_mode;
282 	bufp_t  remote_dir;
283 	bufp_t  filename;
284 	bufp_t  local_dir;
285 	bufp_t  display;
286 	char    buf[BUFSIZE];
287 } zcopy_call_t;
288 
289 typedef	struct {
290 	int	status;
291 } zcopy_ret_t;
292 
293 typedef	struct {
294 	m_label_t label;
295 	uint_t	flags;
296 } pr_call_t;
297 
298 typedef	struct {
299 	char	buf[BUFSIZE];
300 } pr_ret_t;
301 
302 typedef	struct {
303 	m_label_t label;
304 	uint_t	flags;
305 } ls_call_t;
306 
307 typedef	struct {
308 	char	buf[BUFSIZE];
309 } ls_ret_t;
310 
311 typedef	struct {
312 	m_label_t label;
313 	uint_t	flags;
314 	char	string[BUFSIZE];
315 } sl_call_t;
316 
317 typedef	struct {
318 	m_label_t label;
319 } sl_ret_t;
320 
321 /* Labeld operation call structure */
322 
323 typedef	struct {
324 	uint_t	op;
325 	union	{
326 		null_call_t	null_arg;
327 
328 		inset_call_t	inset_arg;
329 		slvalid_call_t	slvalid_arg;
330 		clrvalid_call_t	clrvalid_arg;
331 		info_call_t	info_arg;
332 		vers_call_t	vers_arg;
333 		color_call_t	color_arg;
334 
335 		bsltos_call_t	bsltos_arg;
336 		bcleartos_call_t	bcleartos_arg;
337 
338 		stobsl_call_t	stobsl_arg;
339 		stobclear_call_t	stobclear_arg;
340 
341 		bslcvt_call_t	bslcvt_arg;
342 		bclearcvt_call_t	bclearcvt_arg;
343 		fields_call_t	fields_arg;
344 		udefs_call_t	udefs_arg;
345 		setfbcl_call_t	setfbcl_arg;
346 		zcopy_call_t	zcopy_arg;
347 		pr_call_t	pr_arg;
348 		ls_call_t	ls_arg;
349 		sl_call_t	sl_arg;
350 	} cargs;
351 } labeld_call_t;
352 
353 /* Labeld operation return structure */
354 
355 typedef struct {
356 	int	ret;		/* labeld return codes */
357 	int	err;		/* function error codes */
358 	union	{
359 		null_ret_t	null_ret;
360 
361 		inset_ret_t	inset_ret;
362 		slvalid_ret_t	slvalid_ret;
363 		clrvalid_ret_t	clrvalid_ret;
364 		info_ret_t	info_ret;
365 		vers_ret_t	vers_ret;
366 		color_ret_t	color_ret;
367 
368 		bsltos_ret_t	bsltos_ret;
369 		bcleartos_ret_t	bcleartos_ret;
370 
371 		stobsl_ret_t	stobsl_ret;
372 		stobclear_ret_t	stobclear_ret;
373 
374 		bslcvt_ret_t	bslcvt_ret;
375 		bclearcvt_ret_t	bclearcvt_ret;
376 		fields_ret_t	fields_ret;
377 		udefs_ret_t	udefs_ret;
378 		setfbcl_ret_t	setfbcl_ret;
379 		zcopy_ret_t	zcopy_ret;
380 		pr_ret_t	pr_ret;
381 		ls_ret_t	ls_ret;
382 		sl_ret_t	sl_ret;
383 	} rvals;
384 } labeld_ret_t;
385 
386 /* Labeld call/return structure */
387 
388 typedef	struct {
389 	union {
390 		labeld_call_t	acall;
391 		labeld_ret_t	aret;
392 	} param;
393 } labeld_data_t;
394 
395 #define	callop	param.acall.op
396 #define	retret	param.aret.ret
397 #define	reterr	param.aret.err
398 
399 #define	CALL_SIZE(type, buf)	(size_t)(sizeof (type) + sizeof (int) + (buf))
400 #define	RET_SIZE(type, buf)	(size_t)(sizeof (type) + 2*sizeof (int) + (buf))
401 #define	CALL_SIZE_STR(type, buf)	CALL_SIZE(type, (-BUFSIZE +(buf)))
402 
403 /* Labeld common client call function */
404 
405 int
406 __call_labeld(labeld_data_t **dptr, size_t *ndata, size_t *adata);
407 
408 /* Return Codes */
409 
410 #define	SUCCESS		1	/* Call OK */
411 #define	NOTFOUND	-1	/* Function not found */
412 #define	SERVERFAULT	-2	/* Internal labeld error */
413 #define	NOSERVER	-3	/* No server thread available, try later */
414 
415 /* Flag Translation Values */
416 
417 #define	L_NEW_LABEL		0x10000000
418 
419 /* GFI FLAGS */
420 
421 #define	GFI_FLAG_MASK		 0x0000FFFF
422 #define	GFI_ACCESS_RELATED	 0x00000001
423 
424 /* binary to ASCII */
425 
426 #define	LABELS_NO_CLASS		 0x00010000
427 #define	LABELS_SHORT_CLASS	 0x00020000
428 #define	LABELS_SHORT_WORDS	 0x00040000
429 
430 /* Label view */
431 
432 #define	LABELS_VIEW_INTERNAL	 0x00100000
433 #define	LABELS_VIEW_EXTERNAL	 0x00200000
434 
435 /* Dimming list (convert -- b*cvt* ) */
436 
437 #define	LABELS_FULL_CONVERT	 0x00010000
438 
439 /* ASCII to binary */
440 
441 #define	LABELS_NEW_LABEL	 0x00010000
442 #define	LABELS_FULL_PARSE	 0x00020000
443 #define	LABELS_ONLY_INFO_LABEL	 0x00040000
444 
445 #define	MOVE_FILE	0
446 #define	COPY_FILE	1
447 #define	LINK_FILE	2
448 
449 #define	PIPEMSG_FILEOP_ERROR	1
450 #define	PIPEMSG_EXIST_ERROR	2
451 #define	PIPEMSG_DONE 		7
452 #define	PIPEMSG_PATH_ERROR	20
453 #define	PIPEMSG_ZONE_ERROR	21
454 #define	PIPEMSG_LABEL_ERROR	22
455 #define	PIPEMSG_READ_ERROR	23
456 #define	PIPEMSG_READONLY_ERROR  24
457 #define	PIPEMSG_WRITE_ERROR	25
458 #define	PIPEMSG_CREATE_ERROR	26
459 #define	PIPEMSG_DELETE_ERROR	27
460 #define	PIPEMSG_CANCEL		101
461 #define	PIPEMSG_PROCEED		102
462 #define	PIPEMSG_MERGE		103
463 #define	PIPEMSG_REPLACE_BUFFER	104
464 #define	PIPEMSG_RENAME_BUFFER	105
465 #define	PIPEMSG_MULTI_PROCEED	106
466 #define	PIPEMSG_RENAME_FILE	107
467 
468 #ifdef	__cplusplus
469 }
470 #endif
471 
472 #endif	/* _LABELD_H */
473