1336728Sasomers/*- 2336728Sasomers * Copyright (c) 2018 Aniket Pandey 3336728Sasomers * 4336728Sasomers * Redistribution and use in source and binary forms, with or without 5336728Sasomers * modification, are permitted provided that the following conditions 6336728Sasomers * are met: 7336728Sasomers * 1. Redistributions of source code must retain the above copyright 8336728Sasomers * notice, this list of conditions and the following disclaimer. 9336728Sasomers * 2. Redistributions in binary form must reproduce the above copyright 10336728Sasomers * notice, this list of conditions and the following disclaimer in the 11336728Sasomers * documentation and/or other materials provided with the distribution. 12336728Sasomers * 13336728Sasomers * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14336728Sasomers * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15336728Sasomers * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16336728Sasomers * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17336728Sasomers * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18336728Sasomers * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19336728Sasomers * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 20336728Sasomers * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21336728Sasomers * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22336728Sasomers * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23336728Sasomers * SUCH DAMAGE. 24336728Sasomers * 25336728Sasomers * $FreeBSD: stable/11/tests/sys/auditpipe/auditpipe_test.c 336728 2018-07-26 00:16:41Z asomers $ 26336728Sasomers */ 27336728Sasomers 28336728Sasomers#include <sys/ioctl.h> 29336728Sasomers 30336728Sasomers#include <bsm/audit.h> 31336728Sasomers#include <security/audit/audit_ioctl.h> 32336728Sasomers 33336728Sasomers#include <atf-c.h> 34336728Sasomers#include <fcntl.h> 35336728Sasomers#include <stdio.h> 36336728Sasomers#include <unistd.h> 37336728Sasomers 38336728Sasomersstatic int filedesc; 39336728Sasomersstatic FILE *fileptr; 40336728Sasomers 41336728SasomersATF_TC(auditpipe_get_qlen); 42336728SasomersATF_TC_HEAD(auditpipe_get_qlen, tc) 43336728Sasomers{ 44336728Sasomers atf_tc_set_md_var(tc, "descr", "Verifies whether the auditpipe ioctl, " 45336728Sasomers "AUDITPIPE_GET_QLEN works properly"); 46336728Sasomers} 47336728Sasomers 48336728SasomersATF_TC_BODY(auditpipe_get_qlen, tc) 49336728Sasomers{ 50336728Sasomers int qlen = -1; 51336728Sasomers ATF_REQUIRE((filedesc = open("/dev/auditpipe", O_RDONLY)) != -1); 52336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_GET_QLEN, &qlen)); 53336728Sasomers ATF_REQUIRE(qlen != -1); 54336728Sasomers close(filedesc); 55336728Sasomers} 56336728Sasomers 57336728Sasomers 58336728SasomersATF_TC(auditpipe_get_qlimit); 59336728SasomersATF_TC_HEAD(auditpipe_get_qlimit, tc) 60336728Sasomers{ 61336728Sasomers atf_tc_set_md_var(tc, "descr", "Verifies whether the auditpipe ioctl, " 62336728Sasomers "AUDITPIPE_GET_QLIMIT works properly"); 63336728Sasomers} 64336728Sasomers 65336728SasomersATF_TC_BODY(auditpipe_get_qlimit, tc) 66336728Sasomers{ 67336728Sasomers int qlimit = -1; 68336728Sasomers ATF_REQUIRE((filedesc = open("/dev/auditpipe", O_RDONLY)) != -1); 69336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_GET_QLIMIT, &qlimit)); 70336728Sasomers ATF_REQUIRE(qlimit != -1); 71336728Sasomers close(filedesc); 72336728Sasomers} 73336728Sasomers 74336728Sasomers 75336728SasomersATF_TC_WITH_CLEANUP(auditpipe_set_qlimit); 76336728SasomersATF_TC_HEAD(auditpipe_set_qlimit, tc) 77336728Sasomers{ 78336728Sasomers atf_tc_set_md_var(tc, "descr", "Verifies whether the auditpipe ioctl, " 79336728Sasomers "AUDITPIPE_SET_QLIMIT works properly"); 80336728Sasomers} 81336728Sasomers 82336728SasomersATF_TC_BODY(auditpipe_set_qlimit, tc) 83336728Sasomers{ 84336728Sasomers int test_qlimit, curr_qlimit, recv_qlimit; 85336728Sasomers 86336728Sasomers ATF_REQUIRE((filedesc = open("/dev/auditpipe", O_RDONLY)) != -1); 87336728Sasomers /* Retreive the current QLIMIT value and store it in a file */ 88336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_GET_QLIMIT, &curr_qlimit)); 89336728Sasomers ATF_REQUIRE((fileptr = fopen("qlimit_store", "a")) != NULL); 90336728Sasomers ATF_REQUIRE_EQ(sizeof(curr_qlimit), 91336728Sasomers fprintf(fileptr, "%d\n", curr_qlimit)); 92336728Sasomers 93336728Sasomers /* 94336728Sasomers * Set QLIMIT different from the current system value to confirm 95336728Sasomers * proper functioning of AUDITPIPE_SET_QLIMIT ioctl. 96336728Sasomers */ 97336728Sasomers test_qlimit = curr_qlimit - 1; 98336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_SET_QLIMIT, &test_qlimit)); 99336728Sasomers /* Receive modified value and check whether QLIMIT was set correctly */ 100336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_GET_QLIMIT, &recv_qlimit)); 101336728Sasomers ATF_REQUIRE_EQ(test_qlimit, recv_qlimit); 102336728Sasomers 103336728Sasomers fclose(fileptr); 104336728Sasomers close(filedesc); 105336728Sasomers} 106336728Sasomers 107336728SasomersATF_TC_CLEANUP(auditpipe_set_qlimit, tc) 108336728Sasomers{ 109336728Sasomers if (atf_utils_file_exists("qlimit_store")) { 110336728Sasomers int fd, curr_qlim; 111336728Sasomers ATF_REQUIRE((fileptr = fopen("qlimit_store", "r")) != NULL); 112336728Sasomers ATF_REQUIRE(fscanf(fileptr, "%d", &curr_qlim)); 113336728Sasomers 114336728Sasomers ATF_REQUIRE((fd = open("/dev/auditpipe", O_RDONLY)) != -1); 115336728Sasomers /* Set QLIMIT's value as it was prior to test-case invocation */ 116336728Sasomers ATF_REQUIRE_EQ(0, ioctl(fd, AUDITPIPE_SET_QLIMIT, &curr_qlim)); 117336728Sasomers 118336728Sasomers close(fd); 119336728Sasomers fclose(fileptr); 120336728Sasomers } 121336728Sasomers} 122336728Sasomers 123336728Sasomers 124336728SasomersATF_TC(auditpipe_get_qlimit_min); 125336728SasomersATF_TC_HEAD(auditpipe_get_qlimit_min, tc) 126336728Sasomers{ 127336728Sasomers atf_tc_set_md_var(tc, "descr", "Verifies whether the auditpipe ioctl, " 128336728Sasomers "AUDITPIPE_GET_QLIMIT_MIN works properly"); 129336728Sasomers} 130336728Sasomers 131336728SasomersATF_TC_BODY(auditpipe_get_qlimit_min, tc) 132336728Sasomers{ 133336728Sasomers int qlim_min = -1; 134336728Sasomers ATF_REQUIRE((filedesc = open("/dev/auditpipe", O_RDONLY)) != -1); 135336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_GET_QLIMIT_MIN, &qlim_min)); 136336728Sasomers ATF_REQUIRE(qlim_min != -1); 137336728Sasomers close(filedesc); 138336728Sasomers} 139336728Sasomers 140336728Sasomers 141336728SasomersATF_TC(auditpipe_get_qlimit_max); 142336728SasomersATF_TC_HEAD(auditpipe_get_qlimit_max, tc) 143336728Sasomers{ 144336728Sasomers atf_tc_set_md_var(tc, "descr", "Verifies whether the auditpipe ioctl, " 145336728Sasomers "AUDITPIPE_GET_QLIMIT_MAX works properly"); 146336728Sasomers} 147336728Sasomers 148336728SasomersATF_TC_BODY(auditpipe_get_qlimit_max, tc) 149336728Sasomers{ 150336728Sasomers int qlim_max = -1; 151336728Sasomers ATF_REQUIRE((filedesc = open("/dev/auditpipe", O_RDONLY)) != -1); 152336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_GET_QLIMIT_MAX, &qlim_max)); 153336728Sasomers ATF_REQUIRE(qlim_max != -1); 154336728Sasomers close(filedesc); 155336728Sasomers} 156336728Sasomers 157336728Sasomers 158336728SasomersATF_TC(auditpipe_get_maxauditdata); 159336728SasomersATF_TC_HEAD(auditpipe_get_maxauditdata, tc) 160336728Sasomers{ 161336728Sasomers atf_tc_set_md_var(tc, "descr", "Verifies whether the auditpipe ioctl, " 162336728Sasomers "AUDITPIPE_GET_MAXAUDITDATA works properly"); 163336728Sasomers} 164336728Sasomers 165336728SasomersATF_TC_BODY(auditpipe_get_maxauditdata, tc) 166336728Sasomers{ 167336728Sasomers int audata = -1; 168336728Sasomers ATF_REQUIRE((filedesc = open("/dev/auditpipe", O_RDONLY)) != -1); 169336728Sasomers ATF_REQUIRE_EQ(0, ioctl(filedesc, AUDITPIPE_GET_MAXAUDITDATA, &audata)); 170336728Sasomers ATF_REQUIRE(audata != -1); 171336728Sasomers close(filedesc); 172336728Sasomers} 173336728Sasomers 174336728Sasomers 175336728SasomersATF_TP_ADD_TCS(tp) 176336728Sasomers{ 177336728Sasomers ATF_TP_ADD_TC(tp, auditpipe_get_qlen); 178336728Sasomers ATF_TP_ADD_TC(tp, auditpipe_get_qlimit); 179336728Sasomers ATF_TP_ADD_TC(tp, auditpipe_set_qlimit); 180336728Sasomers ATF_TP_ADD_TC(tp, auditpipe_get_qlimit_min); 181336728Sasomers ATF_TP_ADD_TC(tp, auditpipe_get_qlimit_max); 182336728Sasomers ATF_TP_ADD_TC(tp, auditpipe_get_maxauditdata); 183336728Sasomers 184336728Sasomers return (atf_no_error()); 185336728Sasomers} 186