1
0
Files
irix-657m-src/eoe/include/mls.h
2022-09-29 17:59:04 +03:00

212 lines
6.8 KiB
C

/**************************************************************************
* *
* Copyright (C) 1990, Silicon Graphics, Inc. *
* *
* These coded instructions, statements, and computer programs contain *
* unpublished proprietary information of Silicon Graphics, Inc., and *
* are protected by Federal copyright law. They may not be disclosed *
* to third parties or copied or duplicated in any form, in whole or *
* in part, without the prior written consent of Silicon Graphics, Inc. *
* *
**************************************************************************/
#ifndef _MLS_DOT_H_
#define _MLS_DOT_H_
#ifdef __cplusplus
extern "C" {
#endif
#ident "$Revision: 1.23 $"
#include <sys/types.h>
#include <sys/mac_label.h>
#include <shadow.h>
#include <clearance.h>
/* constant define for mlsfile type */
#define MAC_LABEL 0 /* labels file */
#define MAC_MSEN_TYPE 1 /* msentypes file */
#define MAC_LEVEL 2 /* levels file */
#define MAC_CATEGORY 3 /* categorys file */
#define MAC_MINT_TYPE 4 /* minttypes file */
#define MAC_GRADE 5 /* grades file */
#define MAC_DIVISION 6 /* divisions file */
#define MAX_MLSFILES 7 /* total 7 files above */
#define MAC_MIN_ENT 1 /* minumim value for entity database type */
#define MAC_MAX_ENT 7 /* maximum value for entity database type */
#define MAC_MAX_DEFAULT 26 /* maximum internal msentype and minttype */
#define WITHOUT_LEVEL 0 /* msen type don't need level, category */
#define WITHOUT_GRADE 0 /* mint type don't need grade, division */
#define WITHOUT_LVLGRD 0 /* don't need level,grade,category, division */
#define NEED_LEVEL 1 /* msen type need level, category */
#define NEED_GRADE 1 /* mint type need grade, division */
#define NEED_LVLGRD 1 /* need level, cat or grade, division */
#define INVALID_TYPE -1 /* no such msen or mint type value */
#define MAX_MLS_NAME_LEN 128 /* max string length for a field name */
#define MAX_MLS_LINE_LEN 512 /* max line length for a entry */
#define INVALID_ENTRY_VALUE 65535
/* binary mls database file path */
#define LABEL_DB_PATH "/etc/mac_label"
#define LABEL_DB "lbldb_bin"
/* Error returns from mac_label_devs */
#define MAC_LD_DEVL_FOPEN -1 /* couldn't open device list file */
#define MAC_LD_GETPLABEL -2 /* couldn't get current plabel value */
#define MAC_LD_SETPLABEL -3 /* couldn't set plabel to system hi */
#define MAC_LD_RESETPLABEL -4 /* couldn't restore original plabel */
#define MAC_LD_SOME_FAIL -5 /* couldn't relabel some devices */
#define MAC_LD_ALL_FAIL -6 /* couldn't relabel any devices */
#define MAC_LD_KMEM_ERR -7 /* error reading /dev/kmem */
/* constant defines for mac_invalid error code return */
#define VALID_MAC_LABEL 0 /* valid mac label indication */
#define NULL_MAC_LABEL 1 /* mac label pointer is a NULL */
#define INVALID_MSENTYPE 2 /* msentype value is not valid */
#define INVALID_MINTTYPE 3 /* minttype value is not valid */
#define INVALID_MSEN_ASSOC 4 /* level and category present when not
allowed, or level, category missing
when it is required */
#define INVALID_MINT_ASSOC 5 /* grade and division present when not
allowed, or grade,division missing
when it is required */
#define INVALID_SET_FORMAT 6 /* category or division set has duplicate
numbers or not in ascending order */
#define INVALID_SET_COUNT 7 /* category set and division set total is
out of range */
#define TAB_CHAR 0x09
/* constant define for mac_labeltostr() flag argument */
#define COMP_ONLY 0
#define NAME_OR_COMP 1
#define NAME_ONLY 2
/*
* structure for sorting category set and division set value
*/
typedef struct valueent {
unsigned short value; /* category or division value */
struct valueent *next; /* pointer to next entry */
struct valueent *prev; /* pointer to prev entry */
}VALUEENT;
typedef struct valuelist {
VALUEENT *head;
VALUEENT *tail;
}VALUELIST;
/*
* minttype, grade and division entry
*/
typedef struct dbent {
int value; /* data field value */
char *name; /* pointer to data field name */
struct dbent *next;
struct dbent *prev;
}DBENT;
/*
* structure for label/component string entry
*/
typedef struct lbldbent {
char *name; /* pointer to label name string */
char *comp; /* pointer to label component string */
struct lbldbent *next;
}LBLDBENT;
/*
* structure to build entry list for label/component string
*/
typedef struct lbldblist {
struct lbldbent *head; /* head of entry list */
struct lbldbent *tail; /* tail of entry list */
}LBLDBLIST;
/* structure for loadin msentype, level, category, minttype, grade and
* division entry information into binary file
*/
typedef struct db_bin_ent {
unsigned short value;
unsigned short strlen;
char name[MAX_MLS_NAME_LEN];
}DB_BIN_ENT;
/* structure for loadin msentype, level, category, minttype, grade and
* division header information into binary file
*/
typedef struct db_bin_hdr {
int db_type; /* database type */
int entry_total; /* total entry count */
int entries_bytes; /* total entry bytes */
}DB_BIN_HDR;
/* structure for loading label name and label component string header
* information into binary file
*/
typedef struct lbldb_bin_hdr {
int entry_total; /* total entry count */
int entries_bytes; /* total entry bytes */
}LBLDB_BIN_HDR;
/*
* structure for loading label name and label component string into
* binary file
*/
typedef struct lbldb_bin_ent {
unsigned short strlen; /* string length */
unsigned short lblsize; /* mac label size */
char name[MAX_MLS_NAME_LEN]; /* label name string */
mac_label label; /* mac label */
}LBLDB_BIN_ENT;
/*
* structure to store the entry information from reading the db binary
* file
*/
typedef struct dbinfo {
DB_BIN_ENT *list;
int entry_total;
}DBINFO;
/*
* structure to store the entry information from reading the lbldb binary
* file
*/
typedef struct lbldbinfo {
LBLDB_BIN_ENT *list;
int entry_total;
}LBLDBINFO;
/*
* global variables used for Trusted IRIX/B library functions
*/
extern LBLDB_BIN_HDR __mac_lhead; /* header for labelname binary file */
extern DB_BIN_HDR __mac_dhead[]; /* header for entity binary file */
extern int __mls_entry_total[]; /* total entry for each db file */
extern int __mac_bad_label_entry; /* bad label entry in labelnames */
extern int __mac_db_error; /* bad entity entry in mlsfiles */
extern DBINFO __mac_db[]; /* binary entity database */
extern LBLDBINFO __mac_lbldb; /* binary label database */
extern int mac_label_devs (char *, mac_label *, uid_t);
#ifdef __cplusplus
}
#endif
#endif /* _MLS_DOT_H_ */