audit_ftpd.c (f48205be) audit_ftpd.c (f8994074)
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

--- 5 unchanged lines hidden (view full) ---

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/*
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

--- 5 unchanged lines hidden (view full) ---

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 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
22 * Copyright (c) 1992, 2010, Oracle and/or its affiliates. All rights reserved.
24 */
25
23 */
24
26#pragma ident "%Z%%M% %I% %E% SMI"
27
28#include <sys/types.h>
29#include <sys/param.h>
30#include <stdio.h>
31#include <sys/fcntl.h>
32#include <stdlib.h>
33#include <string.h>
34#include <syslog.h>
35#include <unistd.h>

--- 14 unchanged lines hidden (view full) ---

50#include <generic.h>
51
52#define BAD_PASSWD (1)
53#define UNKNOWN_USER (2)
54#define EXCLUDED_USER (3)
55#define NO_ANONYMOUS (4)
56#define MISC_FAILURE (5)
57
25#include <sys/types.h>
26#include <sys/param.h>
27#include <stdio.h>
28#include <sys/fcntl.h>
29#include <stdlib.h>
30#include <string.h>
31#include <syslog.h>
32#include <unistd.h>

--- 14 unchanged lines hidden (view full) ---

47#include <generic.h>
48
49#define BAD_PASSWD (1)
50#define UNKNOWN_USER (2)
51#define EXCLUDED_USER (3)
52#define NO_ANONYMOUS (4)
53#define MISC_FAILURE (5)
54
58static char luser[16];
55static char luser[LOGNAME_MAX + 1];
59
60static void generate_record(char *, int, char *);
61static int selected(uid_t, char *, au_event_t, int);
62
63void
64audit_ftpd_bad_pw(char *uname)
65{
66 if (cannot_audit(0)) {
67 return;
68 }
56
57static void generate_record(char *, int, char *);
58static int selected(uid_t, char *, au_event_t, int);
59
60void
61audit_ftpd_bad_pw(char *uname)
62{
63 if (cannot_audit(0)) {
64 return;
65 }
69 (void) strncpy(luser, uname, 8);
70 luser[8] = '\0';
71 generate_record(luser, BAD_PASSWD, dgettext(bsm_dom,
72 "bad password"));
66 (void) strncpy(luser, uname, LOGNAME_MAX);
67 generate_record(luser, BAD_PASSWD, dgettext(bsm_dom, "bad password"));
73}
74
75
76void
77audit_ftpd_unknown(char *uname)
78{
79 if (cannot_audit(0)) {
80 return;
81 }
68}
69
70
71void
72audit_ftpd_unknown(char *uname)
73{
74 if (cannot_audit(0)) {
75 return;
76 }
82 (void) strncpy(luser, uname, 8);
83 luser[8] = '\0';
84 generate_record(luser, UNKNOWN_USER, dgettext(bsm_dom,
85 "unknown user"));
77 (void) strncpy(luser, uname, LOGNAME_MAX);
78 generate_record(luser, UNKNOWN_USER, dgettext(bsm_dom, "unknown user"));
86}
87
88
89void
90audit_ftpd_excluded(char *uname)
91{
92 if (cannot_audit(0)) {
93 return;
94 }
79}
80
81
82void
83audit_ftpd_excluded(char *uname)
84{
85 if (cannot_audit(0)) {
86 return;
87 }
95 (void) strncpy(luser, uname, 8);
96 luser[8] = '\0';
88 (void) strncpy(luser, uname, LOGNAME_MAX);
97 generate_record(luser, EXCLUDED_USER, dgettext(bsm_dom,
89 generate_record(luser, EXCLUDED_USER, dgettext(bsm_dom,
98 "excluded user"));
90 "excluded user"));
99}
100
101
102void
103audit_ftpd_no_anon(void)
104{
105 if (cannot_audit(0)) {
106 return;
107 }
91}
92
93
94void
95audit_ftpd_no_anon(void)
96{
97 if (cannot_audit(0)) {
98 return;
99 }
108 generate_record("", NO_ANONYMOUS, dgettext(bsm_dom,
109 "no anonymous"));
100 generate_record("", NO_ANONYMOUS, dgettext(bsm_dom, "no anonymous"));
110}
111
112void
113audit_ftpd_failure(char *uname)
114{
115 if (cannot_audit(0)) {
116 return;
117 }
101}
102
103void
104audit_ftpd_failure(char *uname)
105{
106 if (cannot_audit(0)) {
107 return;
108 }
118 generate_record(uname, MISC_FAILURE, dgettext(bsm_dom,
119 "misc failure"));
109 generate_record(uname, MISC_FAILURE, dgettext(bsm_dom, "misc failure"));
120}
121
122void
123audit_ftpd_success(char *uname)
124{
125 if (cannot_audit(0)) {
126 return;
127 }
110}
111
112void
113audit_ftpd_success(char *uname)
114{
115 if (cannot_audit(0)) {
116 return;
117 }
128 (void) strncpy(luser, uname, 8);
129 luser[8] = '\0';
118 (void) strncpy(luser, uname, LOGNAME_MAX);
130 generate_record(luser, 0, "");
131}
132
133
134
135static void
136generate_record(
137 char *locuser, /* username of local user */

--- 43 unchanged lines hidden (view full) ---

181 if (getaudit_addr(&info, sizeof (info)) < 0) {
182 perror("getaudit");
183 }
184
185 rd = au_open();
186
187 /* add subject token */
188 (void) au_write(rd, au_to_subject_ex(uid, uid, gid,
119 generate_record(luser, 0, "");
120}
121
122
123
124static void
125generate_record(
126 char *locuser, /* username of local user */

--- 43 unchanged lines hidden (view full) ---

170 if (getaudit_addr(&info, sizeof (info)) < 0) {
171 perror("getaudit");
172 }
173
174 rd = au_open();
175
176 /* add subject token */
177 (void) au_write(rd, au_to_subject_ex(uid, uid, gid,
189 ruid, rgid, pid, pid, &info.ai_termid));
178 ruid, rgid, pid, pid, &info.ai_termid));
190
191 if (is_system_labeled())
192 (void) au_write(rd, au_to_mylabel());
193
194 /* add return token */
195 errno = 0;
196 if (err) {
197 /* add reason for failure */

--- 26 unchanged lines hidden (view full) ---

224
225static int
226selected(
227 uid_t uid,
228 char *locuser,
229 au_event_t event,
230 int err)
231{
179
180 if (is_system_labeled())
181 (void) au_write(rd, au_to_mylabel());
182
183 /* add return token */
184 errno = 0;
185 if (err) {
186 /* add reason for failure */

--- 26 unchanged lines hidden (view full) ---

213
214static int
215selected(
216 uid_t uid,
217 char *locuser,
218 au_event_t event,
219 int err)
220{
232 int rc, sorf;
233 char naflags[512];
234 struct au_mask mask;
221 int sorf;
222 struct au_mask mask;
235
236 mask.am_success = mask.am_failure = 0;
237 if (uid > MAXEPHUID) {
223
224 mask.am_success = mask.am_failure = 0;
225 if (uid > MAXEPHUID) {
238 rc = getacna(naflags, 256); /* get non-attrib flags */
239 if (rc == 0)
240 (void) getauditflagsbin(naflags, &mask);
226 /* get non-attrib flags */
227 (void) auditon(A_GETKMASK, (caddr_t)&mask, sizeof (mask));
241 } else {
228 } else {
242 rc = au_user_mask(locuser, &mask);
229 (void) au_user_mask(locuser, &mask);
243 }
244
230 }
231
245 if (err == 0)
232 if (err == 0) {
246 sorf = AU_PRS_SUCCESS;
233 sorf = AU_PRS_SUCCESS;
247 else if (err >= 1)
234 } else if (err >= 1) {
248 sorf = AU_PRS_FAILURE;
235 sorf = AU_PRS_FAILURE;
249 else
236 } else {
250 sorf = AU_PRS_BOTH;
237 sorf = AU_PRS_BOTH;
251 rc = au_preselect(event, &mask, sorf, AU_PRS_REREAD);
252 return (rc);
238 }
239
240 return (au_preselect(event, &mask, sorf, AU_PRS_REREAD));
253}
254
255
256void
257audit_ftpd_logout(void)
258{
259 int rd; /* audit record descriptor */
260 uid_t euid;

--- 11 unchanged lines hidden (view full) ---

272
273 /* see if terminal id already set */
274 if (getaudit_addr(&info, sizeof (info)) < 0) {
275 perror("getaudit");
276 }
277
278 /* determine if we're preselected */
279 if (au_preselect(AUE_ftpd_logout, &info.ai_mask, AU_PRS_SUCCESS,
241}
242
243
244void
245audit_ftpd_logout(void)
246{
247 int rd; /* audit record descriptor */
248 uid_t euid;

--- 11 unchanged lines hidden (view full) ---

260
261 /* see if terminal id already set */
262 if (getaudit_addr(&info, sizeof (info)) < 0) {
263 perror("getaudit");
264 }
265
266 /* determine if we're preselected */
267 if (au_preselect(AUE_ftpd_logout, &info.ai_mask, AU_PRS_SUCCESS,
280 AU_PRS_USECACHE) == 0) {
268 AU_PRS_USECACHE) == 0) {
281 (void) priv_set(PRIV_OFF, PRIV_EFFECTIVE, PRIV_PROC_AUDIT,
282 NULL);
283 return;
284 }
285
286 euid = geteuid();
287 egid = getegid();
288 uid = getuid();
289 gid = getgid();
290 pid = getpid();
291
292 rd = au_open();
293
294 /* add subject token */
295 (void) au_write(rd, au_to_subject_ex(info.ai_auid, euid,
269 (void) priv_set(PRIV_OFF, PRIV_EFFECTIVE, PRIV_PROC_AUDIT,
270 NULL);
271 return;
272 }
273
274 euid = geteuid();
275 egid = getegid();
276 uid = getuid();
277 gid = getgid();
278 pid = getpid();
279
280 rd = au_open();
281
282 /* add subject token */
283 (void) au_write(rd, au_to_subject_ex(info.ai_auid, euid,
296 egid, uid, gid, pid, pid, &info.ai_termid));
284 egid, uid, gid, pid, pid, &info.ai_termid));
297
298 if (is_system_labeled())
299 (void) au_write(rd, au_to_mylabel());
300
301 /* add return token */
302 errno = 0;
303#ifdef _LP64
304 (void) au_write(rd, au_to_return64(0, (int64_t)0));
305#else
306 (void) au_write(rd, au_to_return32(0, (int32_t)0));
307#endif
308
309 /* write audit record */
310 if (au_close(rd, 1, AUE_ftpd_logout) < 0) {
311 (void) au_close(rd, 0, 0);
312 }
313 (void) priv_set(PRIV_OFF, PRIV_EFFECTIVE, PRIV_PROC_AUDIT, NULL);
314}
285
286 if (is_system_labeled())
287 (void) au_write(rd, au_to_mylabel());
288
289 /* add return token */
290 errno = 0;
291#ifdef _LP64
292 (void) au_write(rd, au_to_return64(0, (int64_t)0));
293#else
294 (void) au_write(rd, au_to_return32(0, (int32_t)0));
295#endif
296
297 /* write audit record */
298 if (au_close(rd, 1, AUE_ftpd_logout) < 0) {
299 (void) au_close(rd, 0, 0);
300 }
301 (void) priv_set(PRIV_OFF, PRIV_EFFECTIVE, PRIV_PROC_AUDIT, NULL);
302}