#ifndef _BSM_XLATE_H
#define _BSM_XLATE_H
#include <priv.h>
#include <bsm/libbsm.h>
#include <tsol/label.h>
#include "adt_event.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef TEXT_DOMAIN
#define TEXT_DOMAIN "SYS_TEST"
#endif
#define ADT_SESSION_MODEL 1
#define ADT_PROCESS_MODEL 0
#define ADT_HAVE_MASK 0x01
#define ADT_HAVE_TID 0x02
#define ADT_HAVE_AUID 0x04
#define ADT_HAVE_ASID 0x08
#define ADT_HAVE_IDS 0x10
#define ADT_HAVE_ALL (uint32_t)\
(ADT_HAVE_MASK | ADT_HAVE_TID | ADT_HAVE_AUID | ADT_HAVE_ASID |\
ADT_HAVE_IDS)
#define ADT_AUT_PRIV_L -100
#define ADT_AUT_PRIV_I -101
#define ADT_AUT_PRIV_E -102
#define ADT_CMD_ALT -103
#define ADT_IN_PEER -104
#define ADT_IN_REMOTE -105
enum adt_generic {ADT_GENERIC};
typedef struct adt_internal_state adt_internal_state_t;
union union_of_events {
union adt_event_data d0;
};
enum adt_msg_list {
ADT_LIST_FAIL_PAM,
ADT_LIST_FAIL_VALUE,
ADT_LIST_LOGIN_TEXT,
ADT_LIST_TPM_E,
ADT_LIST_UADMIN_FCN};
enum datatype {ADT_UNDEFINED = 0,
ADT_DATE,
ADT_MSG,
ADT_UINT,
ADT_INT,
ADT_INT32,
ADT_UINT16,
ADT_UINT32,
ADT_UINT32STAR,
ADT_UINT32ARRAY,
ADT_UID,
ADT_GID,
ADT_UIDSTAR,
ADT_GIDSTAR,
ADT_UINT64,
ADT_LONG,
ADT_ULONG,
ADT_CHAR,
ADT_CHARSTAR,
ADT_CHAR2STAR,
ADT_PID,
ADT_PRIVSTAR,
ADT_TERMIDSTAR,
ADT_MLABELSTAR,
ADT_FD
};
typedef enum datatype datatype_t;
union convert {
enum adt_generic msg_selector;
boolean_t tbool;
uint_t tuint;
int tint;
int32_t tint32;
uint16_t tuint16;
uint32_t tuint32;
uint64_t tuint64;
int32_t *tint32star;
uint32_t *tuint32star;
uid_t tuid;
gid_t tgid;
uid_t *tuidstar;
gid_t *tgidstar;
pid_t tpid;
long tlong;
ulong_t tulong;
char tchar;
char *tcharstar;
char **tchar2star;
au_tid_addr_t *ttermid;
priv_set_t *tprivstar;
m_label_t *tm_label;
fd_t tfd;
};
struct adt_event_state {
union union_of_events ae_event_data;
uint_t ae_check;
int ae_event_handle;
au_event_t ae_event_id;
au_event_t ae_internal_id;
int ae_rc;
int ae_type;
struct adt_internal_state *ae_session;
};
struct datadefs {
datatype_t dd_datatype;
size_t dd_input_size;
};
typedef struct datadefs datadef;
typedef void (* adt_token_func_t)(datadef *, void *, int,
struct adt_event_state *, char *);
typedef char *(* adt_msg_func_t)(enum adt_generic);
#define ADT_VALID 0xAAAA5555
struct adt_internal_state {
uint32_t as_check;
uid_t as_euid;
uid_t as_ruid;
gid_t as_egid;
gid_t as_rgid;
struct auditinfo_addr as_info;
int as_audit_state;
uint32_t as_have_user_data;
uint32_t as_kernel_audit_policy;
int as_session_model;
adt_session_flags_t as_flags;
pid_t as_pid;
m_label_t *as_label;
adt_translation_t **as_xlate;
void (*as_preload)(au_event_t, adt_event_data_t *);
};
#define PROTOCOL_VERSION_1 1
#define PROTOCOL_VERSION_2 2
struct adt_export_v2 {
int32_t ax_euid;
int32_t ax_ruid;
int32_t ax_egid;
int32_t ax_rgid;
int32_t ax_auid;
uint32_t ax_mask_success;
uint32_t ax_mask_failure;
uint32_t ax_port;
uint32_t ax_type;
uint32_t ax_addr[4];
uint32_t ax_asid;
int ax_audit_state;
pid_t ax_pid;
size32_t ax_label_len;
};
struct adt_export_v1 {
int32_t ax_euid;
int32_t ax_ruid;
int32_t ax_egid;
int32_t ax_rgid;
int32_t ax_auid;
uint32_t ax_mask_success;
uint32_t ax_mask_failure;
uint32_t ax_port;
uint32_t ax_type;
uint32_t ax_addr[4];
uint32_t ax_asid;
int ax_audit_state;
uint32_t ax_size_of_tsol_data;
};
struct export_link {
int32_t ax_version;
int32_t ax_offset;
};
struct export_header {
uint32_t ax_check;
int32_t ax_buffer_length;
struct export_link ax_link;
};
struct adt_export_data {
struct export_header ax_header;
struct adt_export_v2 ax_v2;
struct export_link ax_next_v1;
struct adt_export_v1 ax_v1;
struct export_link ax_last;
};
struct entry {
char en_token_id;
int en_count_types;
datadef *en_type_def;
struct entry *en_next_token;
size_t en_offset;
int en_required;
int en_tsol;
char *en_msg_format;
};
struct translation {
int tx_offsetsCalculated;
au_event_t tx_external_event;
au_event_t tx_internal_event;
int tx_entries;
struct entry *tx_first_entry;
struct entry *tx_top_entry;
};
struct token_jmp {
long jmp_id;
adt_token_func_t jmp_to;
};
struct msg_text {
int ml_min_index;
int ml_max_index;
char **ml_msg_list;
int ml_offset;
};
extern struct msg_text adt_msg_text[];
extern void adt_write_syslog(const char *, int);
extern void adt_token_open(struct adt_event_state *);
extern int adt_token_close(struct adt_event_state *);
extern void adt_generate_token(struct entry *, void *,
struct adt_event_state *);
extern void *adt_adjust_address(void *, size_t, size_t);
#ifdef __cplusplus
}
#endif
#endif