Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/tests/sys/audit/administrative.c
39507 views
1
/*-
2
* Copyright (c) 2018 Aniket Pandey
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
* 1. Redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer.
9
* 2. Redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution.
12
*
13
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
20
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
* SUCH DAMAGE.
24
*/
25
26
#include <sys/param.h>
27
#include <sys/mount.h>
28
#include <sys/reboot.h>
29
#include <sys/stat.h>
30
#include <sys/sysctl.h>
31
#include <sys/time.h>
32
#include <sys/timespec.h>
33
#include <sys/timex.h>
34
35
#include <bsm/audit.h>
36
#include <bsm/audit_kevents.h>
37
#include <ufs/ufs/quota.h>
38
39
#include <atf-c.h>
40
#include <errno.h>
41
#include <fcntl.h>
42
#include <stdlib.h>
43
#include <time.h>
44
#include <unistd.h>
45
46
#include "utils.h"
47
48
static pid_t pid;
49
static int filedesc;
50
/* Default argument for handling ENOSYS in auditon(2) functions */
51
static int auditon_def = 0;
52
static mode_t mode = 0777;
53
static struct pollfd fds[1];
54
static char adregex[80];
55
static const char *auclass = "ad";
56
static const char *path = "fileforaudit";
57
static const char *successreg = "fileforaudit.*return,success";
58
59
60
ATF_TC_WITH_CLEANUP(settimeofday_success);
61
ATF_TC_HEAD(settimeofday_success, tc)
62
{
63
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
64
"settimeofday(2) call");
65
}
66
67
ATF_TC_BODY(settimeofday_success, tc)
68
{
69
pid = getpid();
70
snprintf(adregex, sizeof(adregex), "settimeofday.*%d.*success", pid);
71
72
struct timeval tp;
73
struct timezone tzp;
74
ATF_REQUIRE_EQ(0, gettimeofday(&tp, &tzp));
75
76
FILE *pipefd = setup(fds, auclass);
77
/* Setting the same time as obtained by gettimeofday(2) */
78
ATF_REQUIRE_EQ(0, settimeofday(&tp, &tzp));
79
check_audit(fds, adregex, pipefd);
80
}
81
82
ATF_TC_CLEANUP(settimeofday_success, tc)
83
{
84
cleanup();
85
}
86
87
88
ATF_TC_WITH_CLEANUP(settimeofday_failure);
89
ATF_TC_HEAD(settimeofday_failure, tc)
90
{
91
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
92
"settimeofday(2) call");
93
}
94
95
ATF_TC_BODY(settimeofday_failure, tc)
96
{
97
pid = getpid();
98
snprintf(adregex, sizeof(adregex), "settimeofday.*%d.*failure", pid);
99
100
struct timeval tp;
101
struct timezone tzp;
102
ATF_REQUIRE_EQ(0, gettimeofday(&tp, &tzp));
103
104
FILE *pipefd = setup(fds, auclass);
105
tp.tv_sec = -1;
106
/* Failure reason: Invalid value for tp.tv_sec; */
107
ATF_REQUIRE_EQ(-1, settimeofday(&tp, &tzp));
108
check_audit(fds, adregex, pipefd);
109
}
110
111
ATF_TC_CLEANUP(settimeofday_failure, tc)
112
{
113
cleanup();
114
}
115
116
117
ATF_TC_WITH_CLEANUP(clock_settime_success);
118
ATF_TC_HEAD(clock_settime_success, tc)
119
{
120
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
121
"clock_settime(2) call");
122
}
123
124
ATF_TC_BODY(clock_settime_success, tc)
125
{
126
pid = getpid();
127
snprintf(adregex, sizeof(adregex), "clock_settime.*%d.*success", pid);
128
129
struct timespec tp;
130
ATF_REQUIRE_EQ(0, clock_gettime(CLOCK_REALTIME, &tp));
131
132
FILE *pipefd = setup(fds, auclass);
133
/* Setting the same time as obtained by clock_gettime(2) */
134
ATF_REQUIRE_EQ(0, clock_settime(CLOCK_REALTIME, &tp));
135
check_audit(fds, adregex, pipefd);
136
}
137
138
ATF_TC_CLEANUP(clock_settime_success, tc)
139
{
140
cleanup();
141
}
142
143
144
ATF_TC_WITH_CLEANUP(clock_settime_failure);
145
ATF_TC_HEAD(clock_settime_failure, tc)
146
{
147
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
148
"clock_settime(2) call");
149
}
150
151
ATF_TC_BODY(clock_settime_failure, tc)
152
{
153
pid = getpid();
154
snprintf(adregex, sizeof(adregex), "clock_settime.*%d.*failure", pid);
155
156
struct timespec tp;
157
ATF_REQUIRE_EQ(0, clock_gettime(CLOCK_MONOTONIC, &tp));
158
159
FILE *pipefd = setup(fds, auclass);
160
/* Failure reason: cannot use CLOCK_MONOTONIC to set the system time */
161
ATF_REQUIRE_EQ(-1, clock_settime(CLOCK_MONOTONIC, &tp));
162
check_audit(fds, adregex, pipefd);
163
}
164
165
ATF_TC_CLEANUP(clock_settime_failure, tc)
166
{
167
cleanup();
168
}
169
170
171
ATF_TC_WITH_CLEANUP(adjtime_success);
172
ATF_TC_HEAD(adjtime_success, tc)
173
{
174
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
175
"adjtime(2) call");
176
}
177
178
ATF_TC_BODY(adjtime_success, tc)
179
{
180
pid = getpid();
181
snprintf(adregex, sizeof(adregex), "adjtime.*%d.*return,success", pid);
182
183
FILE *pipefd = setup(fds, auclass);
184
/* We don't want to change the system time, hence NULL */
185
ATF_REQUIRE_EQ(0, adjtime(NULL, NULL));
186
check_audit(fds, adregex, pipefd);
187
}
188
189
ATF_TC_CLEANUP(adjtime_success, tc)
190
{
191
cleanup();
192
}
193
194
195
ATF_TC_WITH_CLEANUP(adjtime_failure);
196
ATF_TC_HEAD(adjtime_failure, tc)
197
{
198
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
199
"adjtime(2) call");
200
}
201
202
ATF_TC_BODY(adjtime_failure, tc)
203
{
204
pid = getpid();
205
snprintf(adregex, sizeof(adregex), "adjtime.*%d.*return,failure", pid);
206
207
FILE *pipefd = setup(fds, auclass);
208
ATF_REQUIRE_EQ(-1, adjtime((struct timeval *)(-1), NULL));
209
check_audit(fds, adregex, pipefd);
210
}
211
212
ATF_TC_CLEANUP(adjtime_failure, tc)
213
{
214
cleanup();
215
}
216
217
218
ATF_TC_WITH_CLEANUP(ntp_adjtime_success);
219
ATF_TC_HEAD(ntp_adjtime_success, tc)
220
{
221
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
222
"ntp_adjtime(2) call");
223
}
224
225
ATF_TC_BODY(ntp_adjtime_success, tc)
226
{
227
struct timex timebuff;
228
bzero(&timebuff, sizeof(timebuff));
229
230
pid = getpid();
231
snprintf(adregex, sizeof(adregex), "ntp_adjtime.*%d.*success", pid);
232
233
FILE *pipefd = setup(fds, auclass);
234
ATF_REQUIRE(ntp_adjtime(&timebuff) != -1);
235
check_audit(fds, adregex, pipefd);
236
}
237
238
ATF_TC_CLEANUP(ntp_adjtime_success, tc)
239
{
240
cleanup();
241
}
242
243
244
ATF_TC_WITH_CLEANUP(ntp_adjtime_failure);
245
ATF_TC_HEAD(ntp_adjtime_failure, tc)
246
{
247
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
248
"ntp_adjtime(2) call");
249
}
250
251
ATF_TC_BODY(ntp_adjtime_failure, tc)
252
{
253
pid = getpid();
254
snprintf(adregex, sizeof(adregex), "ntp_adjtime.*%d.*failure", pid);
255
256
FILE *pipefd = setup(fds, auclass);
257
ATF_REQUIRE_EQ(-1, ntp_adjtime(NULL));
258
check_audit(fds, adregex, pipefd);
259
}
260
261
ATF_TC_CLEANUP(ntp_adjtime_failure, tc)
262
{
263
cleanup();
264
}
265
266
267
ATF_TC_WITH_CLEANUP(nfs_getfh_success);
268
ATF_TC_HEAD(nfs_getfh_success, tc)
269
{
270
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
271
"getfh(2) call");
272
}
273
274
ATF_TC_BODY(nfs_getfh_success, tc)
275
{
276
fhandle_t fhp;
277
pid = getpid();
278
snprintf(adregex, sizeof(adregex), "nfs_getfh.*%d.*ret.*success", pid);
279
280
/* File needs to exist to call getfh(2) */
281
ATF_REQUIRE((filedesc = open(path, O_CREAT, mode)) != -1);
282
FILE *pipefd = setup(fds, auclass);
283
ATF_REQUIRE_EQ(0, getfh(path, &fhp));
284
check_audit(fds, adregex, pipefd);
285
close(filedesc);
286
}
287
288
ATF_TC_CLEANUP(nfs_getfh_success, tc)
289
{
290
cleanup();
291
}
292
293
294
ATF_TC_WITH_CLEANUP(nfs_getfh_failure);
295
ATF_TC_HEAD(nfs_getfh_failure, tc)
296
{
297
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
298
"getfh(2) call");
299
}
300
301
ATF_TC_BODY(nfs_getfh_failure, tc)
302
{
303
pid = getpid();
304
snprintf(adregex, sizeof(adregex), "nfs_getfh.*%d.*ret.*failure", pid);
305
306
FILE *pipefd = setup(fds, auclass);
307
/* Failure reason: file does not exist */
308
ATF_REQUIRE_EQ(-1, getfh(path, NULL));
309
check_audit(fds, adregex, pipefd);
310
}
311
312
ATF_TC_CLEANUP(nfs_getfh_failure, tc)
313
{
314
cleanup();
315
}
316
317
318
ATF_TC_WITH_CLEANUP(auditctl_success);
319
ATF_TC_HEAD(auditctl_success, tc)
320
{
321
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
322
"auditctl(2) call");
323
}
324
325
ATF_TC_BODY(auditctl_success, tc)
326
{
327
/* File needs to exist in order to call auditctl(2) */
328
ATF_REQUIRE((filedesc = open(path, O_CREAT | O_WRONLY, mode)) != -1);
329
FILE *pipefd = setup(fds, auclass);
330
ATF_REQUIRE_EQ(0, auditctl(path));
331
check_audit(fds, successreg, pipefd);
332
close(filedesc);
333
}
334
335
ATF_TC_CLEANUP(auditctl_success, tc)
336
{
337
/*
338
* auditctl(2) disables audit log at /var/audit and initiates auditing
339
* at the configured path. To reset this, we need to stop and start the
340
* auditd(8) again. Here, we check if auditd(8) was running already
341
* before the test started. If so, we stop and start it again.
342
*
343
* TODO: should we skip this test if auditd(8) is already running to
344
* avoid restarting it?
345
*/
346
if (!atf_utils_file_exists("started_fake_auditd")) {
347
system("service auditd onestop > /dev/null 2>&1");
348
system("service auditd onestart > /dev/null 2>&1");
349
} else {
350
cleanup();
351
}
352
}
353
354
355
ATF_TC_WITH_CLEANUP(auditctl_failure);
356
ATF_TC_HEAD(auditctl_failure, tc)
357
{
358
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
359
"auditctl(2) call");
360
}
361
362
ATF_TC_BODY(auditctl_failure, tc)
363
{
364
pid = getpid();
365
snprintf(adregex, sizeof(adregex), "auditctl.*%d.*return,failure", pid);
366
367
FILE *pipefd = setup(fds, auclass);
368
/* Failure reason: file does not exist */
369
ATF_REQUIRE_EQ(-1, auditctl(NULL));
370
check_audit(fds, adregex, pipefd);
371
}
372
373
ATF_TC_CLEANUP(auditctl_failure, tc)
374
{
375
cleanup();
376
}
377
378
379
ATF_TC_WITH_CLEANUP(acct_success);
380
ATF_TC_HEAD(acct_success, tc)
381
{
382
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
383
"acct(2) call");
384
atf_tc_set_md_var(tc, "require.files",
385
"/etc/rc.d/accounting /etc/rc.d/auditd");
386
}
387
388
ATF_TC_BODY(acct_success, tc)
389
{
390
int acctinfo, filedesc2;
391
size_t len = sizeof(acctinfo);
392
const char *acctname = "kern.acct_configured";
393
ATF_REQUIRE_EQ(0, sysctlbyname(acctname, &acctinfo, &len, NULL, 0));
394
395
/* File needs to exist to start system accounting */
396
ATF_REQUIRE((filedesc = open(path, O_CREAT | O_RDWR, mode)) != -1);
397
398
/*
399
* acctinfo = 0: System accounting was disabled
400
* acctinfo = 1: System accounting was enabled
401
*/
402
if (acctinfo) {
403
ATF_REQUIRE((filedesc2 = open("acct_ok", O_CREAT, mode)) != -1);
404
close(filedesc2);
405
}
406
407
pid = getpid();
408
snprintf(adregex, sizeof(adregex),
409
"acct.*%s.*%d.*return,success", path, pid);
410
411
/*
412
* We temporarily switch the accounting record to a file at
413
* our own configured path in order to confirm acct(2)'s successful
414
* auditing. Then we set everything back to its original state.
415
*/
416
FILE *pipefd = setup(fds, auclass);
417
ATF_REQUIRE_EQ(0, acct(path));
418
check_audit(fds, adregex, pipefd);
419
close(filedesc);
420
}
421
422
ATF_TC_CLEANUP(acct_success, tc)
423
{
424
/* Reset accounting configured path */
425
ATF_REQUIRE_EQ(0, system("service accounting onestop"));
426
if (atf_utils_file_exists("acct_ok")) {
427
ATF_REQUIRE_EQ(0, system("service accounting onestart"));
428
}
429
cleanup();
430
}
431
432
433
ATF_TC_WITH_CLEANUP(acct_failure);
434
ATF_TC_HEAD(acct_failure, tc)
435
{
436
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
437
"acct(2) call");
438
}
439
440
ATF_TC_BODY(acct_failure, tc)
441
{
442
pid = getpid();
443
snprintf(adregex, sizeof(adregex), "acct.*%d.*return,failure", pid);
444
445
FILE *pipefd = setup(fds, auclass);
446
/* Failure reason: File does not exist */
447
ATF_REQUIRE_EQ(-1, acct(path));
448
check_audit(fds, adregex, pipefd);
449
}
450
451
ATF_TC_CLEANUP(acct_failure, tc)
452
{
453
cleanup();
454
}
455
456
457
ATF_TC_WITH_CLEANUP(getauid_success);
458
ATF_TC_HEAD(getauid_success, tc)
459
{
460
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
461
"getauid(2) call");
462
}
463
464
ATF_TC_BODY(getauid_success, tc)
465
{
466
au_id_t auid;
467
pid = getpid();
468
snprintf(adregex, sizeof(adregex), "getauid.*%d.*return,success", pid);
469
470
FILE *pipefd = setup(fds, auclass);
471
ATF_REQUIRE_EQ(0, getauid(&auid));
472
check_audit(fds, adregex, pipefd);
473
}
474
475
ATF_TC_CLEANUP(getauid_success, tc)
476
{
477
cleanup();
478
}
479
480
481
ATF_TC_WITH_CLEANUP(getauid_failure);
482
ATF_TC_HEAD(getauid_failure, tc)
483
{
484
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
485
"getauid(2) call");
486
}
487
488
ATF_TC_BODY(getauid_failure, tc)
489
{
490
pid = getpid();
491
snprintf(adregex, sizeof(adregex), "getauid.*%d.*return,failure", pid);
492
493
FILE *pipefd = setup(fds, auclass);
494
/* Failure reason: Bad address */
495
ATF_REQUIRE_EQ(-1, getauid(NULL));
496
check_audit(fds, adregex, pipefd);
497
}
498
499
ATF_TC_CLEANUP(getauid_failure, tc)
500
{
501
cleanup();
502
}
503
504
505
ATF_TC_WITH_CLEANUP(setauid_success);
506
ATF_TC_HEAD(setauid_success, tc)
507
{
508
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
509
"setauid(2) call");
510
}
511
512
ATF_TC_BODY(setauid_success, tc)
513
{
514
au_id_t auid;
515
pid = getpid();
516
snprintf(adregex, sizeof(adregex), "setauid.*%d.*return,success", pid);
517
ATF_REQUIRE_EQ(0, getauid(&auid));
518
519
FILE *pipefd = setup(fds, auclass);
520
ATF_REQUIRE_EQ(0, setauid(&auid));
521
check_audit(fds, adregex, pipefd);
522
}
523
524
ATF_TC_CLEANUP(setauid_success, tc)
525
{
526
cleanup();
527
}
528
529
530
ATF_TC_WITH_CLEANUP(setauid_failure);
531
ATF_TC_HEAD(setauid_failure, tc)
532
{
533
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
534
"setauid(2) call");
535
}
536
537
ATF_TC_BODY(setauid_failure, tc)
538
{
539
pid = getpid();
540
snprintf(adregex, sizeof(adregex), "setauid.*%d.*return,failure", pid);
541
542
FILE *pipefd = setup(fds, auclass);
543
/* Failure reason: Bad address */
544
ATF_REQUIRE_EQ(-1, setauid(NULL));
545
check_audit(fds, adregex, pipefd);
546
}
547
548
ATF_TC_CLEANUP(setauid_failure, tc)
549
{
550
cleanup();
551
}
552
553
554
ATF_TC_WITH_CLEANUP(getaudit_success);
555
ATF_TC_HEAD(getaudit_success, tc)
556
{
557
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
558
"getaudit(2) call");
559
}
560
561
ATF_TC_BODY(getaudit_success, tc)
562
{
563
pid = getpid();
564
auditinfo_t auditinfo;
565
snprintf(adregex, sizeof(adregex), "getaudit.*%d.*return,success", pid);
566
567
FILE *pipefd = setup(fds, auclass);
568
ATF_REQUIRE_EQ(0, getaudit(&auditinfo));
569
check_audit(fds, adregex, pipefd);
570
}
571
572
ATF_TC_CLEANUP(getaudit_success, tc)
573
{
574
cleanup();
575
}
576
577
578
ATF_TC_WITH_CLEANUP(getaudit_failure);
579
ATF_TC_HEAD(getaudit_failure, tc)
580
{
581
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
582
"getaudit(2) call");
583
}
584
585
ATF_TC_BODY(getaudit_failure, tc)
586
{
587
pid = getpid();
588
snprintf(adregex, sizeof(adregex), "getaudit.*%d.*return,failure", pid);
589
590
FILE *pipefd = setup(fds, auclass);
591
/* Failure reason: Bad address */
592
ATF_REQUIRE_EQ(-1, getaudit(NULL));
593
check_audit(fds, adregex, pipefd);
594
}
595
596
ATF_TC_CLEANUP(getaudit_failure, tc)
597
{
598
cleanup();
599
}
600
601
602
ATF_TC_WITH_CLEANUP(setaudit_success);
603
ATF_TC_HEAD(setaudit_success, tc)
604
{
605
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
606
"setaudit(2) call");
607
}
608
609
ATF_TC_BODY(setaudit_success, tc)
610
{
611
pid = getpid();
612
auditinfo_t auditinfo;
613
snprintf(adregex, sizeof(adregex), "setaudit.*%d.*return,success", pid);
614
ATF_REQUIRE_EQ(0, getaudit(&auditinfo));
615
616
FILE *pipefd = setup(fds, auclass);
617
ATF_REQUIRE_EQ(0, setaudit(&auditinfo));
618
check_audit(fds, adregex, pipefd);
619
}
620
621
ATF_TC_CLEANUP(setaudit_success, tc)
622
{
623
cleanup();
624
}
625
626
627
ATF_TC_WITH_CLEANUP(setaudit_failure);
628
ATF_TC_HEAD(setaudit_failure, tc)
629
{
630
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
631
"setaudit(2) call");
632
}
633
634
ATF_TC_BODY(setaudit_failure, tc)
635
{
636
pid = getpid();
637
snprintf(adregex, sizeof(adregex), "setaudit.*%d.*return,failure", pid);
638
639
FILE *pipefd = setup(fds, auclass);
640
/* Failure reason: Bad address */
641
ATF_REQUIRE_EQ(-1, setaudit(NULL));
642
check_audit(fds, adregex, pipefd);
643
}
644
645
ATF_TC_CLEANUP(setaudit_failure, tc)
646
{
647
cleanup();
648
}
649
650
651
ATF_TC_WITH_CLEANUP(getaudit_addr_success);
652
ATF_TC_HEAD(getaudit_addr_success, tc)
653
{
654
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
655
"getaudit_addr(2) call");
656
}
657
658
ATF_TC_BODY(getaudit_addr_success, tc)
659
{
660
pid = getpid();
661
auditinfo_addr_t auditinfo;
662
snprintf(adregex, sizeof(adregex),
663
"getaudit_addr.*%d.*return,success", pid);
664
665
FILE *pipefd = setup(fds, auclass);
666
ATF_REQUIRE_EQ(0, getaudit_addr(&auditinfo, sizeof(auditinfo)));
667
check_audit(fds, adregex, pipefd);
668
}
669
670
ATF_TC_CLEANUP(getaudit_addr_success, tc)
671
{
672
cleanup();
673
}
674
675
676
ATF_TC_WITH_CLEANUP(getaudit_addr_failure);
677
ATF_TC_HEAD(getaudit_addr_failure, tc)
678
{
679
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
680
"getaudit_addr(2) call");
681
}
682
683
ATF_TC_BODY(getaudit_addr_failure, tc)
684
{
685
pid = getpid();
686
snprintf(adregex, sizeof(adregex),
687
"getaudit_addr.*%d.*return,failure", pid);
688
689
FILE *pipefd = setup(fds, auclass);
690
/* Failure reason: Bad address */
691
ATF_REQUIRE_EQ(-1, getaudit_addr(NULL, 0));
692
check_audit(fds, adregex, pipefd);
693
}
694
695
ATF_TC_CLEANUP(getaudit_addr_failure, tc)
696
{
697
cleanup();
698
}
699
700
701
ATF_TC_WITH_CLEANUP(setaudit_addr_success);
702
ATF_TC_HEAD(setaudit_addr_success, tc)
703
{
704
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
705
"setaudit_addr(2) call");
706
}
707
708
ATF_TC_BODY(setaudit_addr_success, tc)
709
{
710
pid = getpid();
711
auditinfo_addr_t auditinfo;
712
snprintf(adregex, sizeof(adregex),
713
"setaudit_addr.*%d.*return,success", pid);
714
715
ATF_REQUIRE_EQ(0, getaudit_addr(&auditinfo, sizeof(auditinfo)));
716
FILE *pipefd = setup(fds, auclass);
717
ATF_REQUIRE_EQ(0, setaudit_addr(&auditinfo, sizeof(auditinfo)));
718
check_audit(fds, adregex, pipefd);
719
}
720
721
ATF_TC_CLEANUP(setaudit_addr_success, tc)
722
{
723
cleanup();
724
}
725
726
727
ATF_TC_WITH_CLEANUP(setaudit_addr_failure);
728
ATF_TC_HEAD(setaudit_addr_failure, tc)
729
{
730
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
731
"setaudit_addr(2) call");
732
}
733
734
ATF_TC_BODY(setaudit_addr_failure, tc)
735
{
736
pid = getpid();
737
snprintf(adregex, sizeof(adregex),
738
"setaudit_addr.*%d.*return,failure", pid);
739
740
FILE *pipefd = setup(fds, auclass);
741
/* Failure reason: Bad address */
742
ATF_REQUIRE_EQ(-1, setaudit_addr(NULL, 0));
743
check_audit(fds, adregex, pipefd);
744
}
745
746
ATF_TC_CLEANUP(setaudit_addr_failure, tc)
747
{
748
cleanup();
749
}
750
751
/*
752
* Note: The test-case uses A_GETFSIZE as the command argument but since it is
753
* not an independent audit event, it will be used to check the default mode
754
* auditing of auditon(2) system call.
755
*
756
* Please See: sys/security/audit/audit_bsm_klib.c
757
* function(): au_event_t auditon_command_event() :: case A_GETFSIZE:
758
*/
759
ATF_TC_WITH_CLEANUP(auditon_default_success);
760
ATF_TC_HEAD(auditon_default_success, tc)
761
{
762
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
763
"auditon(2) call");
764
}
765
766
ATF_TC_BODY(auditon_default_success, tc)
767
{
768
au_fstat_t fsize_arg;
769
bzero(&fsize_arg, sizeof(au_fstat_t));
770
771
pid = getpid();
772
snprintf(adregex, sizeof(adregex), "auditon.*%d.*return,success", pid);
773
774
FILE *pipefd = setup(fds, auclass);
775
ATF_REQUIRE_EQ(0, auditon(A_GETFSIZE, &fsize_arg, sizeof(fsize_arg)));
776
check_audit(fds, adregex, pipefd);
777
}
778
779
ATF_TC_CLEANUP(auditon_default_success, tc)
780
{
781
cleanup();
782
}
783
784
785
ATF_TC_WITH_CLEANUP(auditon_default_failure);
786
ATF_TC_HEAD(auditon_default_failure, tc)
787
{
788
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
789
"auditon(2) call");
790
}
791
792
ATF_TC_BODY(auditon_default_failure, tc)
793
{
794
pid = getpid();
795
snprintf(adregex, sizeof(adregex), "auditon.*%d.*return,failure", pid);
796
797
FILE *pipefd = setup(fds, auclass);
798
/* Failure reason: Invalid argument */
799
ATF_REQUIRE_EQ(-1, auditon(A_GETFSIZE, NULL, 0));
800
check_audit(fds, adregex, pipefd);
801
}
802
803
ATF_TC_CLEANUP(auditon_default_failure, tc)
804
{
805
cleanup();
806
}
807
808
809
ATF_TC_WITH_CLEANUP(auditon_getpolicy_success);
810
ATF_TC_HEAD(auditon_getpolicy_success, tc)
811
{
812
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
813
"auditon(2) call for cmd: A_GETPOLICY");
814
}
815
816
ATF_TC_BODY(auditon_getpolicy_success, tc)
817
{
818
int aupolicy;
819
pid = getpid();
820
snprintf(adregex, sizeof(adregex), "GPOLICY command.*%d.*success", pid);
821
822
FILE *pipefd = setup(fds, auclass);
823
ATF_REQUIRE_EQ(0, auditon(A_GETPOLICY, &aupolicy, sizeof(aupolicy)));
824
check_audit(fds, adregex, pipefd);
825
}
826
827
ATF_TC_CLEANUP(auditon_getpolicy_success, tc)
828
{
829
cleanup();
830
}
831
832
833
ATF_TC_WITH_CLEANUP(auditon_getpolicy_failure);
834
ATF_TC_HEAD(auditon_getpolicy_failure, tc)
835
{
836
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
837
"auditon(2) call for cmd: A_GETPOLICY");
838
}
839
840
ATF_TC_BODY(auditon_getpolicy_failure, tc)
841
{
842
pid = getpid();
843
snprintf(adregex, sizeof(adregex), "GPOLICY command.*%d.*failure", pid);
844
845
FILE *pipefd = setup(fds, auclass);
846
/* Failure reason: Invalid argument */
847
ATF_REQUIRE_EQ(-1, auditon(A_GETPOLICY, NULL, 0));
848
check_audit(fds, adregex, pipefd);
849
}
850
851
ATF_TC_CLEANUP(auditon_getpolicy_failure, tc)
852
{
853
cleanup();
854
}
855
856
857
ATF_TC_WITH_CLEANUP(auditon_setpolicy_success);
858
ATF_TC_HEAD(auditon_setpolicy_success, tc)
859
{
860
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
861
"auditon(2) call for cmd: A_SETPOLICY");
862
}
863
864
ATF_TC_BODY(auditon_setpolicy_success, tc)
865
{
866
int aupolicy;
867
pid = getpid();
868
snprintf(adregex, sizeof(adregex), "SPOLICY command.*%d.*success", pid);
869
870
/* Retrieve the current auditing policy, to be used with A_SETPOLICY */
871
ATF_REQUIRE_EQ(0, auditon(A_GETPOLICY, &aupolicy, sizeof(aupolicy)));
872
FILE *pipefd = setup(fds, auclass);
873
ATF_REQUIRE_EQ(0, auditon(A_SETPOLICY, &aupolicy, sizeof(aupolicy)));
874
check_audit(fds, adregex, pipefd);
875
}
876
877
ATF_TC_CLEANUP(auditon_setpolicy_success, tc)
878
{
879
cleanup();
880
}
881
882
883
ATF_TC_WITH_CLEANUP(auditon_setpolicy_failure);
884
ATF_TC_HEAD(auditon_setpolicy_failure, tc)
885
{
886
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
887
"auditon(2) call for cmd: A_SETPOLICY");
888
}
889
890
ATF_TC_BODY(auditon_setpolicy_failure, tc)
891
{
892
pid = getpid();
893
snprintf(adregex, sizeof(adregex), "SPOLICY command.*%d.*failure", pid);
894
895
FILE *pipefd = setup(fds, auclass);
896
/* Failure reason: Invalid argument */
897
ATF_REQUIRE_EQ(-1, auditon(A_SETPOLICY, NULL, 0));
898
check_audit(fds, adregex, pipefd);
899
}
900
901
ATF_TC_CLEANUP(auditon_setpolicy_failure, tc)
902
{
903
cleanup();
904
}
905
906
907
ATF_TC_WITH_CLEANUP(auditon_getkmask_success);
908
ATF_TC_HEAD(auditon_getkmask_success, tc)
909
{
910
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
911
"auditon(2) call for cmd: A_GETKMASK");
912
}
913
914
ATF_TC_BODY(auditon_getkmask_success, tc)
915
{
916
pid = getpid();
917
au_mask_t evmask;
918
snprintf(adregex, sizeof(adregex), "get kernel mask.*%d.*success", pid);
919
920
bzero(&evmask, sizeof(evmask));
921
FILE *pipefd = setup(fds, auclass);
922
ATF_REQUIRE_EQ(0, auditon(A_GETKMASK, &evmask, sizeof(evmask)));
923
check_audit(fds, adregex, pipefd);
924
}
925
926
ATF_TC_CLEANUP(auditon_getkmask_success, tc)
927
{
928
cleanup();
929
}
930
931
932
ATF_TC_WITH_CLEANUP(auditon_getkmask_failure);
933
ATF_TC_HEAD(auditon_getkmask_failure, tc)
934
{
935
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
936
"auditon(2) call for cmd: A_GETKMASK");
937
}
938
939
ATF_TC_BODY(auditon_getkmask_failure, tc)
940
{
941
pid = getpid();
942
snprintf(adregex, sizeof(adregex), "get kernel mask.*%d.*failure", pid);
943
944
FILE *pipefd = setup(fds, auclass);
945
/* Failure reason: Invalid au_mask_t structure */
946
ATF_REQUIRE_EQ(-1, auditon(A_GETKMASK, NULL, 0));
947
check_audit(fds, adregex, pipefd);
948
}
949
950
ATF_TC_CLEANUP(auditon_getkmask_failure, tc)
951
{
952
cleanup();
953
}
954
955
956
ATF_TC_WITH_CLEANUP(auditon_setkmask_success);
957
ATF_TC_HEAD(auditon_setkmask_success, tc)
958
{
959
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
960
"auditon(2) call for cmd: A_SETKMASK");
961
}
962
963
ATF_TC_BODY(auditon_setkmask_success, tc)
964
{
965
pid = getpid();
966
au_mask_t evmask;
967
snprintf(adregex, sizeof(adregex), "set kernel mask.*%d.*success", pid);
968
969
/* Retrieve the current audit mask to be used with A_SETKMASK */
970
bzero(&evmask, sizeof(evmask));
971
ATF_REQUIRE_EQ(0, auditon(A_GETKMASK, &evmask, sizeof(evmask)));
972
973
FILE *pipefd = setup(fds, auclass);
974
ATF_REQUIRE_EQ(0, auditon(A_SETKMASK, &evmask, sizeof(evmask)));
975
check_audit(fds, adregex, pipefd);
976
}
977
978
ATF_TC_CLEANUP(auditon_setkmask_success, tc)
979
{
980
cleanup();
981
}
982
983
984
ATF_TC_WITH_CLEANUP(auditon_setkmask_failure);
985
ATF_TC_HEAD(auditon_setkmask_failure, tc)
986
{
987
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
988
"auditon(2) call for cmd: A_SETKMASK");
989
}
990
991
ATF_TC_BODY(auditon_setkmask_failure, tc)
992
{
993
pid = getpid();
994
snprintf(adregex, sizeof(adregex), "set kernel mask.*%d.*failure", pid);
995
996
FILE *pipefd = setup(fds, auclass);
997
/* Failure reason: Invalid au_mask_t structure */
998
ATF_REQUIRE_EQ(-1, auditon(A_SETKMASK, NULL, 0));
999
check_audit(fds, adregex, pipefd);
1000
}
1001
1002
ATF_TC_CLEANUP(auditon_setkmask_failure, tc)
1003
{
1004
cleanup();
1005
}
1006
1007
1008
ATF_TC_WITH_CLEANUP(auditon_getqctrl_success);
1009
ATF_TC_HEAD(auditon_getqctrl_success, tc)
1010
{
1011
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1012
"auditon(2) call for cmd: A_GETQCTRL");
1013
}
1014
1015
ATF_TC_BODY(auditon_getqctrl_success, tc)
1016
{
1017
pid = getpid();
1018
au_qctrl_t evqctrl;
1019
snprintf(adregex, sizeof(adregex), "GQCTRL command.*%d.*success", pid);
1020
1021
bzero(&evqctrl, sizeof(evqctrl));
1022
FILE *pipefd = setup(fds, auclass);
1023
ATF_REQUIRE_EQ(0, auditon(A_GETQCTRL, &evqctrl, sizeof(evqctrl)));
1024
check_audit(fds, adregex, pipefd);
1025
}
1026
1027
ATF_TC_CLEANUP(auditon_getqctrl_success, tc)
1028
{
1029
cleanup();
1030
}
1031
1032
1033
ATF_TC_WITH_CLEANUP(auditon_getqctrl_failure);
1034
ATF_TC_HEAD(auditon_getqctrl_failure, tc)
1035
{
1036
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1037
"auditon(2) call for cmd: A_GETQCTRL");
1038
}
1039
1040
ATF_TC_BODY(auditon_getqctrl_failure, tc)
1041
{
1042
pid = getpid();
1043
snprintf(adregex, sizeof(adregex), "GQCTRL command.*%d.*failure", pid);
1044
1045
FILE *pipefd = setup(fds, auclass);
1046
/* Failure reason: Invalid au_qctrl_t structure */
1047
ATF_REQUIRE_EQ(-1, auditon(A_GETQCTRL, NULL, 0));
1048
check_audit(fds, adregex, pipefd);
1049
}
1050
1051
ATF_TC_CLEANUP(auditon_getqctrl_failure, tc)
1052
{
1053
cleanup();
1054
}
1055
1056
1057
ATF_TC_WITH_CLEANUP(auditon_setqctrl_success);
1058
ATF_TC_HEAD(auditon_setqctrl_success, tc)
1059
{
1060
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1061
"auditon(2) call for cmd: A_SETKMASK");
1062
}
1063
1064
ATF_TC_BODY(auditon_setqctrl_success, tc)
1065
{
1066
pid = getpid();
1067
au_qctrl_t evqctrl;
1068
snprintf(adregex, sizeof(adregex), "SQCTRL command.*%d.*success", pid);
1069
1070
/* Retrieve the current audit mask to be used with A_SETQCTRL */
1071
bzero(&evqctrl, sizeof(evqctrl));
1072
ATF_REQUIRE_EQ(0, auditon(A_GETQCTRL, &evqctrl, sizeof(evqctrl)));
1073
1074
FILE *pipefd = setup(fds, auclass);
1075
ATF_REQUIRE_EQ(0, auditon(A_SETQCTRL, &evqctrl, sizeof(evqctrl)));
1076
check_audit(fds, adregex, pipefd);
1077
}
1078
1079
ATF_TC_CLEANUP(auditon_setqctrl_success, tc)
1080
{
1081
cleanup();
1082
}
1083
1084
1085
ATF_TC_WITH_CLEANUP(auditon_setqctrl_failure);
1086
ATF_TC_HEAD(auditon_setqctrl_failure, tc)
1087
{
1088
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1089
"auditon(2) call for cmd: A_SETKMASK");
1090
}
1091
1092
ATF_TC_BODY(auditon_setqctrl_failure, tc)
1093
{
1094
pid = getpid();
1095
snprintf(adregex, sizeof(adregex), "SQCTRL command.*%d.*failure", pid);
1096
1097
FILE *pipefd = setup(fds, auclass);
1098
/* Failure reason: Invalid au_qctrl_t structure */
1099
ATF_REQUIRE_EQ(-1, auditon(A_SETQCTRL, NULL, 0));
1100
check_audit(fds, adregex, pipefd);
1101
}
1102
1103
ATF_TC_CLEANUP(auditon_setqctrl_failure, tc)
1104
{
1105
cleanup();
1106
}
1107
1108
1109
ATF_TC_WITH_CLEANUP(auditon_getclass_success);
1110
ATF_TC_HEAD(auditon_getclass_success, tc)
1111
{
1112
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1113
"auditon(2) call for cmd: A_GETCLASS");
1114
}
1115
1116
ATF_TC_BODY(auditon_getclass_success, tc)
1117
{
1118
pid = getpid();
1119
au_evclass_map_t evclass;
1120
snprintf(adregex, sizeof(adregex), "get event class.*%d.*success", pid);
1121
1122
/* Initialize evclass to get the event-class mapping for auditon(2) */
1123
evclass.ec_number = AUE_AUDITON;
1124
evclass.ec_class = 0;
1125
FILE *pipefd = setup(fds, auclass);
1126
ATF_REQUIRE_EQ(0, auditon(A_GETCLASS, &evclass, sizeof(evclass)));
1127
check_audit(fds, adregex, pipefd);
1128
}
1129
1130
ATF_TC_CLEANUP(auditon_getclass_success, tc)
1131
{
1132
cleanup();
1133
}
1134
1135
1136
ATF_TC_WITH_CLEANUP(auditon_getclass_failure);
1137
ATF_TC_HEAD(auditon_getclass_failure, tc)
1138
{
1139
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1140
"auditon(2) call for cmd: A_GETCLASS");
1141
}
1142
1143
ATF_TC_BODY(auditon_getclass_failure, tc)
1144
{
1145
pid = getpid();
1146
snprintf(adregex, sizeof(adregex), "get event class.*%d.*failure", pid);
1147
1148
FILE *pipefd = setup(fds, auclass);
1149
/* Failure reason: Invalid au_evclass_map_t structure */
1150
ATF_REQUIRE_EQ(-1, auditon(A_GETCLASS, NULL, 0));
1151
check_audit(fds, adregex, pipefd);
1152
}
1153
1154
ATF_TC_CLEANUP(auditon_getclass_failure, tc)
1155
{
1156
cleanup();
1157
}
1158
1159
1160
ATF_TC_WITH_CLEANUP(auditon_setclass_success);
1161
ATF_TC_HEAD(auditon_setclass_success, tc)
1162
{
1163
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1164
"auditon(2) call for cmd: A_SETCLASS");
1165
}
1166
1167
ATF_TC_BODY(auditon_setclass_success, tc)
1168
{
1169
pid = getpid();
1170
au_evclass_map_t evclass;
1171
snprintf(adregex, sizeof(adregex), "set event class.*%d.*success", pid);
1172
1173
/* Initialize evclass and get the event-class mapping for auditon(2) */
1174
evclass.ec_number = AUE_AUDITON;
1175
evclass.ec_class = 0;
1176
ATF_REQUIRE_EQ(0, auditon(A_GETCLASS, &evclass, sizeof(evclass)));
1177
1178
FILE *pipefd = setup(fds, auclass);
1179
ATF_REQUIRE_EQ(0, auditon(A_SETCLASS, &evclass, sizeof(evclass)));
1180
check_audit(fds, adregex, pipefd);
1181
}
1182
1183
ATF_TC_CLEANUP(auditon_setclass_success, tc)
1184
{
1185
cleanup();
1186
}
1187
1188
1189
ATF_TC_WITH_CLEANUP(auditon_setclass_failure);
1190
ATF_TC_HEAD(auditon_setclass_failure, tc)
1191
{
1192
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1193
"auditon(2) call for cmd: A_SETCLASS");
1194
}
1195
1196
ATF_TC_BODY(auditon_setclass_failure, tc)
1197
{
1198
pid = getpid();
1199
snprintf(adregex, sizeof(adregex), "set event class.*%d.*failure", pid);
1200
1201
FILE *pipefd = setup(fds, auclass);
1202
/* Failure reason: Invalid au_evclass_map_t structure */
1203
ATF_REQUIRE_EQ(-1, auditon(A_SETCLASS, NULL, 0));
1204
check_audit(fds, adregex, pipefd);
1205
}
1206
1207
ATF_TC_CLEANUP(auditon_setclass_failure, tc)
1208
{
1209
cleanup();
1210
}
1211
1212
1213
ATF_TC_WITH_CLEANUP(auditon_getcond_success);
1214
ATF_TC_HEAD(auditon_getcond_success, tc)
1215
{
1216
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1217
"auditon(2) call for cmd: A_GETCOND");
1218
}
1219
1220
ATF_TC_BODY(auditon_getcond_success, tc)
1221
{
1222
int auditcond;
1223
pid = getpid();
1224
snprintf(adregex, sizeof(adregex), "get audit state.*%d.*success", pid);
1225
1226
FILE *pipefd = setup(fds, auclass);
1227
ATF_REQUIRE_EQ(0, auditon(A_GETCOND, &auditcond, sizeof(auditcond)));
1228
check_audit(fds, adregex, pipefd);
1229
}
1230
1231
ATF_TC_CLEANUP(auditon_getcond_success, tc)
1232
{
1233
cleanup();
1234
}
1235
1236
1237
ATF_TC_WITH_CLEANUP(auditon_getcond_failure);
1238
ATF_TC_HEAD(auditon_getcond_failure, tc)
1239
{
1240
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1241
"auditon(2) call for cmd: A_GETCOND");
1242
}
1243
1244
ATF_TC_BODY(auditon_getcond_failure, tc)
1245
{
1246
pid = getpid();
1247
snprintf(adregex, sizeof(adregex), "get audit state.*%d.*failure", pid);
1248
1249
FILE *pipefd = setup(fds, auclass);
1250
/* Failure reason: Invalid argument */
1251
ATF_REQUIRE_EQ(-1, auditon(A_GETCOND, NULL, 0));
1252
check_audit(fds, adregex, pipefd);
1253
}
1254
1255
ATF_TC_CLEANUP(auditon_getcond_failure, tc)
1256
{
1257
cleanup();
1258
}
1259
1260
1261
ATF_TC_WITH_CLEANUP(auditon_setcond_success);
1262
ATF_TC_HEAD(auditon_setcond_success, tc)
1263
{
1264
atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1265
"auditon(2) call for cmd: A_SETCOND");
1266
}
1267
1268
ATF_TC_BODY(auditon_setcond_success, tc)
1269
{
1270
int auditcond = AUC_AUDITING;
1271
pid = getpid();
1272
snprintf(adregex, sizeof(adregex), "set audit state.*%d.*success", pid);
1273
1274
FILE *pipefd = setup(fds, auclass);
1275
/* At this point auditd is running, so the audit state is AUC_AUDITING */
1276
ATF_REQUIRE_EQ(0, auditon(A_SETCOND, &auditcond, sizeof(auditcond)));
1277
check_audit(fds, adregex, pipefd);
1278
}
1279
1280
ATF_TC_CLEANUP(auditon_setcond_success, tc)
1281
{
1282
cleanup();
1283
}
1284
1285
1286
ATF_TC_WITH_CLEANUP(auditon_setcond_failure);
1287
ATF_TC_HEAD(auditon_setcond_failure, tc)
1288
{
1289
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1290
"auditon(2) call for cmd: A_SETCOND");
1291
}
1292
1293
ATF_TC_BODY(auditon_setcond_failure, tc)
1294
{
1295
pid = getpid();
1296
snprintf(adregex, sizeof(adregex), "set audit state.*%d.*failure", pid);
1297
1298
FILE *pipefd = setup(fds, auclass);
1299
/* Failure reason: Invalid argument */
1300
ATF_REQUIRE_EQ(-1, auditon(A_SETCOND, NULL, 0));
1301
check_audit(fds, adregex, pipefd);
1302
}
1303
1304
ATF_TC_CLEANUP(auditon_setcond_failure, tc)
1305
{
1306
cleanup();
1307
}
1308
1309
/*
1310
* Following test-cases for auditon(2) are all in failure mode only as although
1311
* auditable, they have not been implemented and return ENOSYS whenever called.
1312
*
1313
* Commands: A_GETCWD A_GETCAR A_GETSTAT A_SETSTAT A_SETUMASK A_SETSMASK
1314
*/
1315
1316
ATF_TC_WITH_CLEANUP(auditon_getcwd_failure);
1317
ATF_TC_HEAD(auditon_getcwd_failure, tc)
1318
{
1319
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1320
"auditon(2) call for cmd: A_GETCWD");
1321
}
1322
1323
ATF_TC_BODY(auditon_getcwd_failure, tc)
1324
{
1325
pid = getpid();
1326
snprintf(adregex, sizeof(adregex), "get cwd.*%d.*failure", pid);
1327
1328
FILE *pipefd = setup(fds, auclass);
1329
ATF_REQUIRE_ERRNO(ENOSYS, auditon(A_GETCWD, &auditon_def,
1330
sizeof(auditon_def)) == -1);
1331
check_audit(fds, adregex, pipefd);
1332
}
1333
1334
ATF_TC_CLEANUP(auditon_getcwd_failure, tc)
1335
{
1336
cleanup();
1337
}
1338
1339
1340
ATF_TC_WITH_CLEANUP(auditon_getcar_failure);
1341
ATF_TC_HEAD(auditon_getcar_failure, tc)
1342
{
1343
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1344
"auditon(2) call for cmd: A_GETCAR");
1345
}
1346
1347
ATF_TC_BODY(auditon_getcar_failure, tc)
1348
{
1349
pid = getpid();
1350
snprintf(adregex, sizeof(adregex), "get car.*%d.*failure", pid);
1351
1352
FILE *pipefd = setup(fds, auclass);
1353
ATF_REQUIRE_ERRNO(ENOSYS, auditon(A_GETCAR, &auditon_def,
1354
sizeof(auditon_def)) == -1);
1355
check_audit(fds, adregex, pipefd);
1356
}
1357
1358
ATF_TC_CLEANUP(auditon_getcar_failure, tc)
1359
{
1360
cleanup();
1361
}
1362
1363
1364
ATF_TC_WITH_CLEANUP(auditon_getstat_failure);
1365
ATF_TC_HEAD(auditon_getstat_failure, tc)
1366
{
1367
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1368
"auditon(2) call for cmd: A_GETSTAT");
1369
}
1370
1371
ATF_TC_BODY(auditon_getstat_failure, tc)
1372
{
1373
pid = getpid();
1374
snprintf(adregex, sizeof(adregex),
1375
"get audit statistics.*%d.*return,failure", pid);
1376
1377
FILE *pipefd = setup(fds, auclass);
1378
ATF_REQUIRE_ERRNO(ENOSYS, auditon(A_GETSTAT, &auditon_def,
1379
sizeof(auditon_def)) == -1);
1380
check_audit(fds, adregex, pipefd);
1381
}
1382
1383
ATF_TC_CLEANUP(auditon_getstat_failure, tc)
1384
{
1385
cleanup();
1386
}
1387
1388
1389
ATF_TC_WITH_CLEANUP(auditon_setstat_failure);
1390
ATF_TC_HEAD(auditon_setstat_failure, tc)
1391
{
1392
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1393
"auditon(2) call for cmd: A_SETSTAT");
1394
}
1395
1396
ATF_TC_BODY(auditon_setstat_failure, tc)
1397
{
1398
pid = getpid();
1399
snprintf(adregex, sizeof(adregex),
1400
"set audit statistics.*%d.*return,failure", pid);
1401
1402
FILE *pipefd = setup(fds, auclass);
1403
ATF_REQUIRE_ERRNO(ENOSYS, auditon(A_SETSTAT, &auditon_def,
1404
sizeof(auditon_def)) == -1);
1405
check_audit(fds, adregex, pipefd);
1406
}
1407
1408
ATF_TC_CLEANUP(auditon_setstat_failure, tc)
1409
{
1410
cleanup();
1411
}
1412
1413
1414
ATF_TC_WITH_CLEANUP(auditon_setumask_failure);
1415
ATF_TC_HEAD(auditon_setumask_failure, tc)
1416
{
1417
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1418
"auditon(2) call for cmd: A_SETUMASK");
1419
}
1420
1421
ATF_TC_BODY(auditon_setumask_failure, tc)
1422
{
1423
pid = getpid();
1424
snprintf(adregex, sizeof(adregex),
1425
"set mask per uid.*%d.*return,failure", pid);
1426
1427
FILE *pipefd = setup(fds, auclass);
1428
ATF_REQUIRE_ERRNO(ENOSYS, auditon(A_SETUMASK, &auditon_def,
1429
sizeof(auditon_def)) == -1);
1430
check_audit(fds, adregex, pipefd);
1431
}
1432
1433
ATF_TC_CLEANUP(auditon_setumask_failure, tc)
1434
{
1435
cleanup();
1436
}
1437
1438
1439
ATF_TC_WITH_CLEANUP(auditon_setsmask_failure);
1440
ATF_TC_HEAD(auditon_setsmask_failure, tc)
1441
{
1442
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1443
"auditon(2) call for cmd: A_SETSMASK");
1444
}
1445
1446
ATF_TC_BODY(auditon_setsmask_failure, tc)
1447
{
1448
pid = getpid();
1449
snprintf(adregex, sizeof(adregex),
1450
"set mask per session.*%d.*return,failure", pid);
1451
1452
FILE *pipefd = setup(fds, auclass);
1453
ATF_REQUIRE_ERRNO(ENOSYS, auditon(A_SETSMASK, &auditon_def,
1454
sizeof(auditon_def)) == -1);
1455
check_audit(fds, adregex, pipefd);
1456
}
1457
1458
ATF_TC_CLEANUP(auditon_setsmask_failure, tc)
1459
{
1460
cleanup();
1461
}
1462
1463
1464
/*
1465
* Audit of reboot(2) cannot be tested in normal conditions as we don't want
1466
* to reboot the system while running the tests
1467
*/
1468
1469
1470
ATF_TC_WITH_CLEANUP(reboot_failure);
1471
ATF_TC_HEAD(reboot_failure, tc)
1472
{
1473
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1474
"reboot(2) call");
1475
}
1476
1477
ATF_TC_BODY(reboot_failure, tc)
1478
{
1479
pid = getpid();
1480
snprintf(adregex, sizeof(adregex), "reboot.*%d.*return,failure", pid);
1481
1482
FILE *pipefd = setup(fds, auclass);
1483
ATF_REQUIRE_EQ(-1, reboot(-1));
1484
check_audit(fds, adregex, pipefd);
1485
}
1486
1487
ATF_TC_CLEANUP(reboot_failure, tc)
1488
{
1489
cleanup();
1490
}
1491
1492
1493
/*
1494
* Audit of quotactl(2) cannot be tested in normal conditions as we don't want
1495
* to tamper with filesystem quotas
1496
*/
1497
1498
1499
ATF_TC_WITH_CLEANUP(quotactl_failure);
1500
ATF_TC_HEAD(quotactl_failure, tc)
1501
{
1502
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1503
"quotactl(2) call");
1504
}
1505
1506
ATF_TC_BODY(quotactl_failure, tc)
1507
{
1508
pid = getpid();
1509
snprintf(adregex, sizeof(adregex), "quotactl.*%d.*return,failure", pid);
1510
1511
FILE *pipefd = setup(fds, auclass);
1512
ATF_REQUIRE_EQ(-1, quotactl(NULL, 0, 0, NULL));
1513
check_audit(fds, adregex, pipefd);
1514
}
1515
1516
ATF_TC_CLEANUP(quotactl_failure, tc)
1517
{
1518
cleanup();
1519
}
1520
1521
1522
ATF_TC_WITH_CLEANUP(mount_failure);
1523
ATF_TC_HEAD(mount_failure, tc)
1524
{
1525
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1526
"mount(2) call");
1527
}
1528
1529
ATF_TC_BODY(mount_failure, tc)
1530
{
1531
pid = getpid();
1532
snprintf(adregex, sizeof(adregex), "mount.*%d.*return,failure", pid);
1533
1534
FILE *pipefd = setup(fds, auclass);
1535
ATF_REQUIRE_EQ(-1, mount(NULL, NULL, 0, NULL));
1536
check_audit(fds, adregex, pipefd);
1537
}
1538
1539
ATF_TC_CLEANUP(mount_failure, tc)
1540
{
1541
cleanup();
1542
}
1543
1544
1545
ATF_TC_WITH_CLEANUP(nmount_failure);
1546
ATF_TC_HEAD(nmount_failure, tc)
1547
{
1548
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1549
"nmount(2) call");
1550
}
1551
1552
ATF_TC_BODY(nmount_failure, tc)
1553
{
1554
pid = getpid();
1555
snprintf(adregex, sizeof(adregex), "nmount.*%d.*return,failure", pid);
1556
1557
FILE *pipefd = setup(fds, auclass);
1558
ATF_REQUIRE_EQ(-1, nmount(NULL, 0, 0));
1559
check_audit(fds, adregex, pipefd);
1560
}
1561
1562
ATF_TC_CLEANUP(nmount_failure, tc)
1563
{
1564
cleanup();
1565
}
1566
1567
1568
ATF_TC_WITH_CLEANUP(swapon_failure);
1569
ATF_TC_HEAD(swapon_failure, tc)
1570
{
1571
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1572
"swapon(2) call");
1573
}
1574
1575
ATF_TC_BODY(swapon_failure, tc)
1576
{
1577
pid = getpid();
1578
snprintf(adregex, sizeof(adregex), "swapon.*%d.*return,failure", pid);
1579
1580
FILE *pipefd = setup(fds, auclass);
1581
/* Failure reason: Block device required */
1582
ATF_REQUIRE_EQ(-1, swapon(path));
1583
check_audit(fds, adregex, pipefd);
1584
}
1585
1586
ATF_TC_CLEANUP(swapon_failure, tc)
1587
{
1588
cleanup();
1589
}
1590
1591
1592
ATF_TC_WITH_CLEANUP(swapoff_failure);
1593
ATF_TC_HEAD(swapoff_failure, tc)
1594
{
1595
atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1596
"swapoff(2) call");
1597
}
1598
1599
ATF_TC_BODY(swapoff_failure, tc)
1600
{
1601
pid = getpid();
1602
snprintf(adregex, sizeof(adregex), "swapoff.*%d.*return,failure", pid);
1603
1604
FILE *pipefd = setup(fds, auclass);
1605
/* Failure reason: Block device required */
1606
ATF_REQUIRE_EQ(-1, swapoff(path, 0));
1607
check_audit(fds, adregex, pipefd);
1608
}
1609
1610
ATF_TC_CLEANUP(swapoff_failure, tc)
1611
{
1612
cleanup();
1613
}
1614
1615
1616
ATF_TP_ADD_TCS(tp)
1617
{
1618
ATF_TP_ADD_TC(tp, settimeofday_success);
1619
ATF_TP_ADD_TC(tp, settimeofday_failure);
1620
ATF_TP_ADD_TC(tp, clock_settime_success);
1621
ATF_TP_ADD_TC(tp, clock_settime_failure);
1622
ATF_TP_ADD_TC(tp, adjtime_success);
1623
ATF_TP_ADD_TC(tp, adjtime_failure);
1624
ATF_TP_ADD_TC(tp, ntp_adjtime_success);
1625
ATF_TP_ADD_TC(tp, ntp_adjtime_failure);
1626
1627
ATF_TP_ADD_TC(tp, nfs_getfh_success);
1628
ATF_TP_ADD_TC(tp, nfs_getfh_failure);
1629
ATF_TP_ADD_TC(tp, acct_success);
1630
ATF_TP_ADD_TC(tp, acct_failure);
1631
ATF_TP_ADD_TC(tp, auditctl_success);
1632
ATF_TP_ADD_TC(tp, auditctl_failure);
1633
1634
ATF_TP_ADD_TC(tp, getauid_success);
1635
ATF_TP_ADD_TC(tp, getauid_failure);
1636
ATF_TP_ADD_TC(tp, setauid_success);
1637
ATF_TP_ADD_TC(tp, setauid_failure);
1638
1639
ATF_TP_ADD_TC(tp, getaudit_success);
1640
ATF_TP_ADD_TC(tp, getaudit_failure);
1641
ATF_TP_ADD_TC(tp, setaudit_success);
1642
ATF_TP_ADD_TC(tp, setaudit_failure);
1643
1644
ATF_TP_ADD_TC(tp, getaudit_addr_success);
1645
ATF_TP_ADD_TC(tp, getaudit_addr_failure);
1646
ATF_TP_ADD_TC(tp, setaudit_addr_success);
1647
ATF_TP_ADD_TC(tp, setaudit_addr_failure);
1648
1649
ATF_TP_ADD_TC(tp, auditon_default_success);
1650
ATF_TP_ADD_TC(tp, auditon_default_failure);
1651
1652
ATF_TP_ADD_TC(tp, auditon_getpolicy_success);
1653
ATF_TP_ADD_TC(tp, auditon_getpolicy_failure);
1654
ATF_TP_ADD_TC(tp, auditon_setpolicy_success);
1655
ATF_TP_ADD_TC(tp, auditon_setpolicy_failure);
1656
1657
ATF_TP_ADD_TC(tp, auditon_getkmask_success);
1658
ATF_TP_ADD_TC(tp, auditon_getkmask_failure);
1659
ATF_TP_ADD_TC(tp, auditon_setkmask_success);
1660
ATF_TP_ADD_TC(tp, auditon_setkmask_failure);
1661
1662
ATF_TP_ADD_TC(tp, auditon_getqctrl_success);
1663
ATF_TP_ADD_TC(tp, auditon_getqctrl_failure);
1664
ATF_TP_ADD_TC(tp, auditon_setqctrl_success);
1665
ATF_TP_ADD_TC(tp, auditon_setqctrl_failure);
1666
1667
ATF_TP_ADD_TC(tp, auditon_getclass_success);
1668
ATF_TP_ADD_TC(tp, auditon_getclass_failure);
1669
ATF_TP_ADD_TC(tp, auditon_setclass_success);
1670
ATF_TP_ADD_TC(tp, auditon_setclass_failure);
1671
1672
ATF_TP_ADD_TC(tp, auditon_getcond_success);
1673
ATF_TP_ADD_TC(tp, auditon_getcond_failure);
1674
ATF_TP_ADD_TC(tp, auditon_setcond_success);
1675
ATF_TP_ADD_TC(tp, auditon_setcond_failure);
1676
1677
ATF_TP_ADD_TC(tp, auditon_getcwd_failure);
1678
ATF_TP_ADD_TC(tp, auditon_getcar_failure);
1679
ATF_TP_ADD_TC(tp, auditon_getstat_failure);
1680
ATF_TP_ADD_TC(tp, auditon_setstat_failure);
1681
ATF_TP_ADD_TC(tp, auditon_setumask_failure);
1682
ATF_TP_ADD_TC(tp, auditon_setsmask_failure);
1683
1684
ATF_TP_ADD_TC(tp, reboot_failure);
1685
ATF_TP_ADD_TC(tp, quotactl_failure);
1686
ATF_TP_ADD_TC(tp, mount_failure);
1687
ATF_TP_ADD_TC(tp, nmount_failure);
1688
ATF_TP_ADD_TC(tp, swapon_failure);
1689
ATF_TP_ADD_TC(tp, swapoff_failure);
1690
1691
return (atf_no_error());
1692
}
1693
1694