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 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  *
25  */
26 
27 #ifndef	_AUDIT_REMOTE_H
28 #define	_AUDIT_REMOTE_H
29 
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #include <stdio.h>
36 #include <security/auditd.h>
37 
38 /* gettext() obfuscation routine for lint */
39 #ifdef __lint
40 #define	gettext(x)	x
41 #endif
42 
43 
44 /* send_record() return code */
45 enum send_record_rc {
46 	SEND_RECORD_SUCCESS,
47 	SEND_RECORD_NEXT,
48 	SEND_RECORD_RETRY,
49 	SEND_RECORD_FAIL
50 };
51 typedef enum send_record_rc send_record_rc_t;
52 
53 /* closing helpers - the reason of connection closure */
54 enum close_rsn_e {
55 		RSN_UNDEFINED,		/* reason not defined */
56 		RSN_INIT_POLL,		/* poll() initialization failed */
57 		RSN_TOK_RECV_FAILED,	/* token receiving failed */
58 		RSN_TOK_TOO_BIG,	/* unacceptable token size */
59 		RSN_TOK_UNVERIFIABLE,	/* received unverifiable token */
60 		RSN_SOCKET_CLOSE,	/* socket closure */
61 		RSN_SOCKET_CREATE,	/* socket creation */
62 		RSN_CONNECTION_CREATE,	/* connection creation */
63 		RSN_PROTOCOL_NEGOTIATE,	/* protocol version negotiation */
64 		RSN_GSS_CTX_ESTABLISH,	/* establish GSS-API context */
65 		RSN_GSS_CTX_EXP,	/* expiration of the GSS-API context */
66 		RSN_UNKNOWN_AF,		/* unknown address family */
67 		RSN_MEMORY_ALLOCATE,	/* memory allocation failure */
68 		RSN_OTHER_ERR		/* other, not classified error */
69 };
70 typedef enum close_rsn_e close_rsn_t;
71 
72 /* linked list of remote audit hosts (servers) */
73 typedef struct hostlist_s hostlist_t;
74 struct hostlist_s {
75 	hostlist_t	*next_host;
76 	struct hostent	*host;
77 	in_port_t	port;		/* TCP port number */
78 	gss_OID		mech;		/* GSS mechanism - see mech(5) */
79 };
80 
81 /* transq_t - single, already sent token in the transmit queue. */
82 struct transq_node_s {
83 	struct transq_node_s	*next;
84 	struct transq_node_s	*prev;
85 	gss_buffer_desc		seq_token;	/* seq num || plain token */
86 	uint64_t		seq_num;	/* seq number */
87 };
88 typedef struct transq_node_s transq_node_t;
89 
90 /* transq_hdr_t - the transmit queue header structure */
91 struct transq_hdr_s {
92 	struct transq_node_s	*head;
93 	struct transq_node_s	*end;
94 	long			count;	/* amount of nodes in the queue */
95 };
96 typedef struct transq_hdr_s transq_hdr_t;
97 
98 /* pipe_msg_s - the notification pipe message */
99 struct pipe_msg_s {
100 	int		sock_num;	/* socket fd to be poll()ed and more */
101 	boolean_t	sync;		/* call the sync routines */
102 };
103 typedef struct pipe_msg_s pipe_msg_t;
104 
105 
106 /*
107  * Cross audit_remote plugin source code shared functions and bool parameters.
108  *
109  * reset_transport() helpers:
110  *     arg1) DO_SYNC, DO_NOT_SYNC
111  *     arg2) DO_EXIT, DO_CLOSE, DO_NOT_EXIT, DO_NOT_CLOSE
112  */
113 #define	DO_SYNC		B_TRUE
114 #define	DO_NOT_SYNC	B_FALSE
115 #define	DO_EXIT		B_FALSE
116 #define	DO_CLOSE	B_TRUE
117 #define	DO_NOT_EXIT	B_CLOSE
118 #define	DO_NOT_CLOSE	B_EXIT
119 extern void		reset_transport(boolean_t, boolean_t);
120 extern send_record_rc_t send_record(struct hostlist_s *, const char *, size_t,
121     uint64_t, close_rsn_t *);
122 
123 #if DEBUG
124 #define	DPRINT(x) { (void) fprintf x; (void) fflush(dfile); }
125 #else
126 #define	DPRINT(x)
127 #endif
128 
129 #if DEBUG
130 extern FILE	*dfile;
131 #endif
132 
133 
134 #ifdef __cplusplus
135 }
136 #endif
137 
138 #endif	/* _AUDIT_REMOTE_H */
139