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