1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* adt.h
*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* This is a contract private interface and is subject to change
*/
#ifndef _ADT_H
#define _ADT_H
#include <bsm/audit.h>
#include <bsm/libbsm.h>
#include <bsm/audit_record.h>
#include <bsm/audit_uevents.h>
#include <door.h>
#ifdef __cplusplus
extern "C" {
#endif
#define ADT_STRING_MAX 511 /* max non-null characters */
#define ADT_NO_ATTRIB (uid_t)-1 /* unattributed user */
#define ADT_NO_CHANGE (uid_t)-2 /* no update for this parameter */
#define ADT_NO_AUDIT (uid_t)-3 /* unaudited user */
/*
* terminal id types
*/
#define ADT_IPv4 1
#define ADT_IPv6 2
/*
* for adt_set_user(): ADT_NEW if creating a session for a newly
* authenticated user -- login -- and ADT_UPDATE if an authenticated
* user is changing uid/gid -- e.g., su. ADT_USER changes only the
* ruid / euid / rgid / egid values and is appropriate for login-like
* operations where PAM has already set the audit context in the cred.
* ADT_SETTID is for the special case where it is necessary to store
* the terminal id in the credential before forking to the login or
* login-like process.
*/
enum adt_user_context {ADT_NEW, ADT_UPDATE, ADT_USER, ADT_SETTID};
typedef ulong_t adt_session_flags_t;
typedef struct adt_session_data adt_session_data_t;
typedef struct adt_export_data adt_export_data_t;
typedef union adt_event_data adt_event_data_t;
typedef struct adt_termid adt_termid_t;
typedef struct translation adt_translation_t;
/*
* flag defs for the flags argument of adt_start_session()
*/
#define ADT_BUFFER_RECORDS 0x2 /* server buffering */
#define ADT_USE_PROC_DATA 0x1 /* copy audit char's from proc */
/* | all of above = ADT_FLAGS_ALL */
#define ADT_FLAGS_ALL ADT_BUFFER_RECORDS | \
ADT_USE_PROC_DATA
/*
* Functions
*/
extern int adt_start_session(adt_session_data_t **,
const adt_export_data_t *,
adt_session_flags_t);
extern int adt_end_session(adt_session_data_t *);
extern int adt_dup_session(const adt_session_data_t *,
adt_session_data_t **);
extern int adt_set_proc(const adt_session_data_t *);
extern int adt_set_user(const adt_session_data_t *, uid_t, gid_t,
uid_t, gid_t, const adt_termid_t *,
enum adt_user_context);
extern int adt_set_from_ucred(const adt_session_data_t *,
const ucred_t *,
enum adt_user_context);
extern size_t adt_get_session_id(const adt_session_data_t *, char **);
extern size_t adt_export_session_data(const adt_session_data_t *,
adt_export_data_t **);
extern adt_event_data_t
*adt_alloc_event(const adt_session_data_t *, au_event_t);
extern int adt_put_event(const adt_event_data_t *, int, int);
extern void adt_free_event(adt_event_data_t *);
extern int adt_load_termid(int, adt_termid_t **);
extern int adt_load_hostname(const char *, adt_termid_t **);
extern int adt_load_ttyname(const char *, adt_termid_t **);
extern boolean_t adt_audit_enabled(void);
extern boolean_t adt_audit_state(int);
/*
* Special typedefs for translations.
*/
typedef int fd_t; /* file descriptor */
#ifdef __cplusplus
}
#endif
#endif /* _ADT_H */
|