1162271Srwatson/*- 2162271Srwatson * Copyright (c) 2006 nCircle Network Security, Inc. 3172106Srwatson * Copyright (c) 2007 Robert N. M. Watson 4162271Srwatson * All rights reserved. 5162271Srwatson * 6162271Srwatson * This software was developed by Robert N. M. Watson for the TrustedBSD 7162271Srwatson * Project under contract to nCircle Network Security, Inc. 8162271Srwatson * 9162271Srwatson * Redistribution and use in source and binary forms, with or without 10162271Srwatson * modification, are permitted provided that the following conditions 11162271Srwatson * are met: 12162271Srwatson * 1. Redistributions of source code must retain the above copyright 13162271Srwatson * notice, this list of conditions and the following disclaimer. 14162271Srwatson * 2. Redistributions in binary form must reproduce the above copyright 15162271Srwatson * notice, this list of conditions and the following disclaimer in the 16162271Srwatson * documentation and/or other materials provided with the distribution. 17162271Srwatson * 18162271Srwatson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19162271Srwatson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20162271Srwatson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21162271Srwatson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR, NCIRCLE NETWORK SECURITY, 22162271Srwatson * INC., OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23162271Srwatson * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 24162271Srwatson * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 25162271Srwatson * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 26162271Srwatson * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 27162271Srwatson * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28162271Srwatson * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29162271Srwatson * 30162271Srwatson * $FreeBSD$ 31162271Srwatson */ 32162271Srwatson 33162271Srwatson#define UID_ROOT 0 34162271Srwatson#define UID_OWNER 100 35162271Srwatson#define UID_OTHER 200 36162271Srwatson#define UID_THIRD 300 37162271Srwatson 38162271Srwatson#define GID_WHEEL 0 39162271Srwatson#define GID_OWNER 100 40162271Srwatson#define GID_OTHER 200 41162271Srwatson 42162271Srwatson#define KENV_VAR_NAME "test" 43162271Srwatson#define KENV_VAR_VALUE "test" 44172106Srwatson#define KENV_VAR_LEN sizeof(KENV_VAR_VALUE) 45162271Srwatson 46162271Srwatson/* 47162271Srwatson * Library routines used by many tests. 48162271Srwatson */ 49172106Srwatsonvoid setup_dir(const char *test, char *dpathp, uid_t uid, gid_t gid, 50172106Srwatson mode_t mode); 51172106Srwatsonvoid setup_file(const char *test, char *fpathp, uid_t uid, gid_t gid, 52172106Srwatson mode_t mode); 53172106Srwatsonvoid expect(const char *test, int error, int expected_error, 54172106Srwatson int expected_errno); 55162271Srwatson 56162271Srwatson/* 57172106Srwatson * Definition for a particular test, both used to manage the test list in 58172106Srwatson * main.c, and passed to tests so they can be aware of which specific test is 59172106Srwatson * running if particular method implementations are shared across tests. 60162271Srwatson */ 61172106Srwatsonstruct test { 62172106Srwatson const char *t_name; 63172106Srwatson int (*t_setup_func)(int asroot, int injail, 64172106Srwatson struct test *test); 65172106Srwatson void (*t_test_func)(int asroot, int injail, 66172106Srwatson struct test *test); 67172106Srwatson void (*t_cleanup_func)(int asroot, int injail, 68172106Srwatson struct test *test); 69172106Srwatson}; 70162271Srwatson 71162271Srwatson/* 72172106Srwatson * Prototypes for test functions that will be hooked up to the test vector in 73172106Srwatson * main.c. It's possible to imagine more dynamic (convenient?) ways to do 74172106Srwatson * this. 75162271Srwatson */ 76172106Srwatsonint priv_acct_setup(int, int, struct test *); 77172106Srwatsonvoid priv_acct_enable(int, int, struct test *); 78172106Srwatsonvoid priv_acct_disable(int, int, struct test *); 79172106Srwatsonvoid priv_acct_rotate(int, int, struct test *); 80172106Srwatsonvoid priv_acct_noopdisable(int, int, struct test *); 81172106Srwatsonvoid priv_acct_cleanup(int, int, struct test *); 82172106Srwatson 83172106Srwatsonint priv_adjtime_setup(int, int, struct test *); 84172106Srwatsonvoid priv_adjtime_set(int, int, struct test *); 85172106Srwatsonvoid priv_adjtime_cleanup(int, int, struct test *); 86172106Srwatson 87172106Srwatsonint priv_audit_submit_setup(int, int, struct test *); 88172106Srwatsonvoid priv_audit_submit(int, int, struct test *); 89172106Srwatsonvoid priv_audit_submit_cleanup(int, int, struct test *); 90172106Srwatson 91172106Srwatsonint priv_audit_control_setup(int, int, struct test *); 92172106Srwatsonvoid priv_audit_control(int, int, struct test *); 93172106Srwatsonvoid priv_audit_control_cleanup(int, int, struct test *); 94172106Srwatson 95172106Srwatsonint priv_audit_getaudit_setup(int, int, struct test *); 96172106Srwatsonvoid priv_audit_getaudit(int, int, struct test *); 97172106Srwatsonvoid priv_audit_getaudit_addr(int, int, struct test *); 98172106Srwatsonvoid priv_audit_getaudit_cleanup(int, int, struct test *); 99172106Srwatson 100172106Srwatsonint priv_audit_setaudit_setup(int, int, struct test *); 101172106Srwatsonvoid priv_audit_setaudit(int, int, struct test *); 102172106Srwatsonvoid priv_audit_setaudit_addr(int, int, struct test *); 103172106Srwatsonvoid priv_audit_setaudit_cleanup(int, int, struct test *); 104172106Srwatson 105172106Srwatsonint priv_clock_settime_setup(int, int, struct test *); 106172106Srwatsonvoid priv_clock_settime(int, int, struct test *); 107172106Srwatsonvoid priv_clock_settime_cleanup(int, int, struct test *); 108172106Srwatson 109172106Srwatsonint priv_cred_setup(int, int, struct test *); 110172106Srwatsonvoid priv_cred_setuid(int, int, struct test *); 111172106Srwatsonvoid priv_cred_seteuid(int, int, struct test *); 112172106Srwatsonvoid priv_cred_setgid(int, int, struct test *); 113172106Srwatsonvoid priv_cred_setegid(int, int, struct test *); 114172106Srwatsonvoid priv_cred_setgroups(int, int, struct test *); 115172106Srwatsonvoid priv_cred_setreuid(int, int, struct test *); 116172106Srwatsonvoid priv_cred_setregid(int, int, struct test *); 117172106Srwatsonvoid priv_cred_setresuid(int, int, struct test *); 118172106Srwatsonvoid priv_cred_setresgid(int, int, struct test *); 119172106Srwatsonvoid priv_cred_cleanup(int, int, struct test *); 120172106Srwatson 121172106Srwatsonint priv_io_setup(int, int, struct test *); 122172106Srwatsonvoid priv_io(int, int, struct test *); 123172106Srwatsonvoid priv_io_cleanup(int, int, struct test *); 124172106Srwatson 125172106Srwatsonint priv_kenv_set_setup(int, int, struct test *); 126172106Srwatsonvoid priv_kenv_set(int, int, struct test *); 127172106Srwatsonvoid priv_kenv_set_cleanup(int, int, struct test *); 128172106Srwatson 129172106Srwatsonint priv_kenv_unset_setup(int, int, struct test *); 130172106Srwatsonvoid priv_kenv_unset(int, int, struct test *); 131172106Srwatsonvoid priv_kenv_unset_cleanup(int, int, struct test *); 132172106Srwatson 133172106Srwatsonint priv_msgbuf_privonly_setup(int, int, struct test *); 134172106Srwatsonvoid priv_msgbuf_privonly(int, int, struct test *); 135172106Srwatson 136172106Srwatsonint priv_msgbuf_unprivok_setup(int, int, struct test *); 137172106Srwatsonvoid priv_msgbuf_unprivok(int, int, struct test *); 138172106Srwatson 139172106Srwatsonvoid priv_msgbuf_cleanup(int, int, struct test *); 140172106Srwatson 141173578Sbzvoid priv_netinet_ipsec_pfkey(int, int, struct test *); 142173679Sbzint priv_netinet_ipsec_policy4_bypass_setup(int, int, struct test *); 143173679Sbzvoid priv_netinet_ipsec_policy4_bypass(int, int, struct test *); 144173679Sbzint priv_netinet_ipsec_policy6_bypass_setup(int, int, struct test *); 145173679Sbzvoid priv_netinet_ipsec_policy6_bypass(int, int, struct test *); 146173679Sbzvoid priv_netinet_ipsec_policy_bypass_cleanup(int, int, struct test *); 147173679Sbzint priv_netinet_ipsec_policy4_entrust_setup(int, int, struct test *); 148173679Sbzvoid priv_netinet_ipsec_policy4_entrust(int, int, struct test *); 149173679Sbzint priv_netinet_ipsec_policy6_entrust_setup(int, int, struct test *); 150173679Sbzvoid priv_netinet_ipsec_policy6_entrust(int, int, struct test *); 151173679Sbzvoid priv_netinet_ipsec_policy_entrust_cleanup(int, int, struct test *); 152173578Sbz 153172106Srwatsonint priv_netinet_raw_setup(int, int, struct test *); 154172106Srwatsonvoid priv_netinet_raw(int, int, struct test *); 155172106Srwatsonvoid priv_netinet_raw_cleanup(int, int, struct test *); 156172106Srwatson 157172106Srwatsonint priv_proc_setlogin_setup(int, int, struct test *); 158172106Srwatsonvoid priv_proc_setlogin(int, int, struct test *); 159172106Srwatsonvoid priv_proc_setlogin_cleanup(int, int, struct test *); 160172106Srwatson 161172106Srwatsonint priv_proc_setrlimit_setup(int, int, struct test *); 162172106Srwatsonvoid priv_proc_setrlimit_raisemax(int, int, struct test *); 163172106Srwatsonvoid priv_proc_setrlimit_raisecur(int, int, struct test *); 164172106Srwatsonvoid priv_proc_setrlimit_raisecur_nopriv(int, int, struct test *); 165172106Srwatsonvoid priv_proc_setrlimit_cleanup(int, int, struct test *); 166172106Srwatson 167172106Srwatsonint priv_sched_rtprio_setup(int, int, struct test *); 168172106Srwatsonvoid priv_sched_rtprio_curproc_normal(int, int, struct test *); 169172106Srwatsonvoid priv_sched_rtprio_curproc_idle(int, int, struct test *); 170172106Srwatsonvoid priv_sched_rtprio_curproc_realtime(int, int, struct test *); 171172106Srwatson 172172106Srwatsonvoid priv_sched_rtprio_myproc_normal(int, int, struct test *); 173172106Srwatsonvoid priv_sched_rtprio_myproc_idle(int, int, struct test *); 174172106Srwatsonvoid priv_sched_rtprio_myproc_realtime(int, int, struct test *); 175172106Srwatson 176172106Srwatsonvoid priv_sched_rtprio_aproc_normal(int, int, struct test *); 177172106Srwatsonvoid priv_sched_rtprio_aproc_idle(int, int, struct test *); 178172106Srwatsonvoid priv_sched_rtprio_aproc_realtime(int, int, struct test *); 179172106Srwatsonvoid priv_sched_rtprio_cleanup(int, int, struct test *); 180172106Srwatson 181172106Srwatsonint priv_sched_setpriority_setup(int, int, struct test *); 182172106Srwatsonvoid priv_sched_setpriority_curproc(int, int, struct test *); 183172106Srwatsonvoid priv_sched_setpriority_myproc(int, int, struct test *); 184172106Srwatsonvoid priv_sched_setpriority_aproc(int, int, struct test *); 185172106Srwatsonvoid priv_sched_setpriority_cleanup(int, int, struct test *); 186172106Srwatson 187172106Srwatsonint priv_settimeofday_setup(int, int, struct test *); 188172106Srwatsonvoid priv_settimeofday(int, int, struct test *); 189172106Srwatsonvoid priv_settimeofday_cleanup(int, int, struct test *); 190172106Srwatson 191172106Srwatsonint priv_sysctl_write_setup(int, int, struct test *); 192172106Srwatsonvoid priv_sysctl_write(int, int, struct test *); 193172106Srwatsonvoid priv_sysctl_writejail(int, int, struct test *); 194172106Srwatsonvoid priv_sysctl_write_cleanup(int, int, struct test *); 195172106Srwatson 196172106Srwatsonint priv_vfs_chflags_froot_setup(int, int, struct test *); 197172106Srwatsonvoid priv_vfs_chflags_froot_uflags(int, int, struct test *); 198172106Srwatsonvoid priv_vfs_chflags_froot_sflags(int, int, struct test *); 199172106Srwatson 200172106Srwatsonint priv_vfs_chflags_fowner_setup(int, int, struct test *); 201172106Srwatsonvoid priv_vfs_chflags_fowner_uflags(int, int, struct test *); 202172106Srwatsonvoid priv_vfs_chflags_fowner_sflags(int, int, struct test *); 203172106Srwatson 204172106Srwatsonint priv_vfs_chflags_fother_setup(int, int, struct test *); 205172106Srwatsonvoid priv_vfs_chflags_fother_uflags(int, int, struct test *); 206172106Srwatsonvoid priv_vfs_chflags_fother_sflags(int, int, struct test *); 207172106Srwatson 208172106Srwatsonvoid priv_vfs_chflags_cleanup(int, int, struct test *); 209172106Srwatson 210172106Srwatsonint priv_vfs_chmod_froot_setup(int, int, struct test *); 211172106Srwatsonvoid priv_vfs_chmod_froot(int, int, struct test *); 212172106Srwatson 213172106Srwatsonint priv_vfs_chmod_fowner_setup(int, int, struct test *); 214172106Srwatsonvoid priv_vfs_chmod_fowner(int, int, struct test *); 215172106Srwatson 216172106Srwatsonint priv_vfs_chmod_fother_setup(int, int, struct test *); 217172106Srwatsonvoid priv_vfs_chmod_fother(int, int, struct test *); 218172106Srwatson 219172106Srwatsonvoid priv_vfs_chmod_cleanup(int, int, struct test *); 220172106Srwatson 221172106Srwatsonint priv_vfs_chown_uid_setup(int, int, struct test *); 222172106Srwatsonvoid priv_vfs_chown_uid(int, int, struct test *); 223172106Srwatson 224172106Srwatsonint priv_vfs_chown_mygid_setup(int, int, struct test *); 225172106Srwatsonvoid priv_vfs_chown_mygid(int, int, struct test *); 226172106Srwatson 227172106Srwatsonint priv_vfs_chown_othergid_setup(int, int, struct test *); 228172106Srwatsonvoid priv_vfs_chown_othergid(int, int, struct test *); 229172106Srwatson 230172106Srwatsonvoid priv_vfs_chown_cleanup(int, int, struct test *); 231172106Srwatson 232172106Srwatsonint priv_vfs_chroot_setup(int, int, struct test *); 233172106Srwatsonvoid priv_vfs_chroot(int, int, struct test *); 234172106Srwatsonvoid priv_vfs_chroot_cleanup(int, int, struct test *); 235172106Srwatson 236172106Srwatsonint priv_vfs_clearsugid_setup(int, int, struct test *); 237172106Srwatsonvoid priv_vfs_clearsugid_chgrp(int, int, struct test *); 238172106Srwatsonvoid priv_vfs_clearsugid_extattr(int, int, struct test *); 239172106Srwatsonvoid priv_vfs_clearsugid_write(int, int, struct test *); 240172106Srwatsonvoid priv_vfs_clearsugid_cleanup(int, int, struct test *); 241172106Srwatson 242172106Srwatsonint priv_vfs_extattr_system_setup(int, int, struct test *); 243172106Srwatsonvoid priv_vfs_extattr_system(int, int, struct test *); 244172106Srwatsonvoid priv_vfs_extattr_system_cleanup(int, int, struct test *); 245172106Srwatson 246172106Srwatsonint priv_vfs_fhopen_setup(int, int, struct test *); 247172106Srwatsonvoid priv_vfs_fhopen(int, int, struct test *); 248172106Srwatsonvoid priv_vfs_fhopen_cleanup(int, int, struct test *); 249172106Srwatson 250172106Srwatsonint priv_vfs_fhstat_setup(int, int, struct test *); 251172106Srwatsonvoid priv_vfs_fhstat(int, int, struct test *); 252172106Srwatsonvoid priv_vfs_fhstat_cleanup(int, int, struct test *); 253172106Srwatson 254172106Srwatsonint priv_vfs_fhstatfs_setup(int, int, struct test *); 255172106Srwatsonvoid priv_vfs_fhstatfs(int, int, struct test *); 256172106Srwatsonvoid priv_vfs_fhstatfs_cleanup(int, int, struct test *); 257172106Srwatson 258172106Srwatsonint priv_vfs_generation_setup(int, int, struct test *); 259172106Srwatsonvoid priv_vfs_generation(int, int, struct test *); 260172106Srwatsonvoid priv_vfs_generation_cleanup(int, int, struct test *); 261172106Srwatson 262172106Srwatsonint priv_vfs_getfh_setup(int, int, struct test *); 263172106Srwatsonvoid priv_vfs_getfh(int, int, struct test *); 264172106Srwatsonvoid priv_vfs_getfh_cleanup(int, int, struct test *); 265172106Srwatson 266172106Srwatsonint priv_vfs_readwrite_fowner_setup(int, int, struct test *); 267172106Srwatsonvoid priv_vfs_readwrite_fowner(int, int, struct test *); 268172106Srwatson 269172106Srwatsonint priv_vfs_readwrite_fgroup_setup(int, int, struct test *); 270172106Srwatsonvoid priv_vfs_readwrite_fgroup(int, int, struct test *); 271172106Srwatson 272172106Srwatsonint priv_vfs_readwrite_fother_setup(int, int, struct test *); 273172106Srwatsonvoid priv_vfs_readwrite_fother(int, int, struct test *); 274172106Srwatson 275172106Srwatsonvoid priv_vfs_readwrite_cleanup(int, int, struct test *); 276172106Srwatson 277172106Srwatsonint priv_vfs_setgid_fowner_setup(int, int, struct test *); 278172106Srwatsonvoid priv_vfs_setgid_fowner(int, int, struct test *); 279172106Srwatson 280172106Srwatsonint priv_vfs_setgid_fother_setup(int, int, struct test *); 281172106Srwatsonvoid priv_vfs_setgid_fother(int, int, struct test *); 282172106Srwatson 283172106Srwatsonvoid priv_vfs_setgid_cleanup(int, int, struct test *); 284172106Srwatson 285172106Srwatsonint priv_vfs_stickyfile_dir_fowner_setup(int, int, struct test *); 286172106Srwatson 287172106Srwatsonvoid priv_vfs_stickyfile_dir_fowner(int, int, struct test *); 288172106Srwatsonint priv_vfs_stickyfile_dir_fother_setup(int, int, struct test *); 289172106Srwatsonvoid priv_vfs_stickyfile_dir_fother(int, int, struct test *); 290172106Srwatson 291172106Srwatsonvoid priv_vfs_stickyfile_dir_cleanup(int, int, struct test *); 292172106Srwatson 293172106Srwatsonint priv_vfs_stickyfile_file_fowner_setup(int, int, struct test *); 294172106Srwatsonvoid priv_vfs_stickyfile_file_fowner(int, int, struct test *); 295172106Srwatson 296172106Srwatsonint priv_vfs_stickyfile_file_fother_setup(int, int, struct test *); 297172106Srwatsonvoid priv_vfs_stickyfile_file_fother(int, int, struct test *); 298172106Srwatson 299172106Srwatsonvoid priv_vfs_stickyfile_file_cleanup(int, int, struct test *); 300172106Srwatson 301172106Srwatsonint priv_vfs_utimes_froot_setup(int, int, struct test *); 302172106Srwatsonvoid priv_vfs_utimes_froot(int, int, struct test *); 303172106Srwatsonvoid priv_vfs_utimes_froot_null(int, int, struct test *); 304172106Srwatson 305172106Srwatsonint priv_vfs_utimes_fowner_setup(int, int, struct test *); 306172106Srwatsonvoid priv_vfs_utimes_fowner(int, int, struct test *); 307172106Srwatsonvoid priv_vfs_utimes_fowner_null(int, int, struct test *); 308172106Srwatson 309172106Srwatsonint priv_vfs_utimes_fother_setup(int, int, struct test *); 310172106Srwatsonvoid priv_vfs_utimes_fother(int, int, struct test *); 311172106Srwatsonvoid priv_vfs_utimes_fother_null(int, int, struct test *); 312172106Srwatson 313172106Srwatsonvoid priv_vfs_utimes_cleanup(int, int, struct test *); 314172106Srwatson 315172106Srwatsonint priv_vm_madv_protect_setup(int, int, struct test *); 316172106Srwatsonvoid priv_vm_madv_protect(int, int, struct test *); 317172106Srwatsonvoid priv_vm_madv_protect_cleanup(int, int, struct test *); 318172106Srwatson 319172106Srwatsonint priv_vm_mlock_setup(int, int, struct test *); 320172106Srwatsonvoid priv_vm_mlock(int, int, struct test *); 321172106Srwatsonvoid priv_vm_mlock_cleanup(int, int, struct test *); 322172106Srwatson 323172106Srwatsonint priv_vm_munlock_setup(int, int, struct test *); 324172106Srwatsonvoid priv_vm_munlock(int, int, struct test *); 325172106Srwatsonvoid priv_vm_munlock_cleanup(int, int, struct test *); 326