1 /*- 2 * Copyright (c) 2006 nCircle Network Security, Inc. 3 * Copyright (c) 2007 Robert N. M. Watson 4 * All rights reserved. 5 * 6 * This software was developed by Robert N. M. Watson for the TrustedBSD 7 * Project under contract to nCircle Network Security, Inc. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR, NCIRCLE NETWORK SECURITY, 22 * INC., OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 24 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 25 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 26 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 27 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 30 * $FreeBSD$ 31 */ 32 33 #define UID_ROOT 0 34 #define UID_OWNER 100 35 #define UID_OTHER 200 36 #define UID_THIRD 300 37 38 #define GID_WHEEL 0 39 #define GID_OWNER 100 40 #define GID_OTHER 200 41 42 #define KENV_VAR_NAME "test" 43 #define KENV_VAR_VALUE "test" 44 #define KENV_VAR_LEN sizeof(KENV_VAR_VALUE) 45 46 /* 47 * Library routines used by many tests. 48 */ 49 void setup_dir(const char *test, char *dpathp, uid_t uid, gid_t gid, 50 mode_t mode); 51 void setup_file(const char *test, char *fpathp, uid_t uid, gid_t gid, 52 mode_t mode); 53 void expect(const char *test, int error, int expected_error, 54 int expected_errno); 55 56 /* 57 * Definition for a particular test, both used to manage the test list in 58 * main.c, and passed to tests so they can be aware of which specific test is 59 * running if particular method implementations are shared across tests. 60 */ 61 struct test { 62 const char *t_name; 63 int (*t_setup_func)(int asroot, int injail, 64 struct test *test); 65 void (*t_test_func)(int asroot, int injail, 66 struct test *test); 67 void (*t_cleanup_func)(int asroot, int injail, 68 struct test *test); 69 }; 70 71 /* 72 * Prototypes for test functions that will be hooked up to the test vector in 73 * main.c. It's possible to imagine more dynamic (convenient?) ways to do 74 * this. 75 */ 76 int priv_acct_setup(int, int, struct test *); 77 void priv_acct_enable(int, int, struct test *); 78 void priv_acct_disable(int, int, struct test *); 79 void priv_acct_rotate(int, int, struct test *); 80 void priv_acct_noopdisable(int, int, struct test *); 81 void priv_acct_cleanup(int, int, struct test *); 82 83 int priv_adjtime_setup(int, int, struct test *); 84 void priv_adjtime_set(int, int, struct test *); 85 void priv_adjtime_cleanup(int, int, struct test *); 86 87 int priv_audit_submit_setup(int, int, struct test *); 88 void priv_audit_submit(int, int, struct test *); 89 void priv_audit_submit_cleanup(int, int, struct test *); 90 91 int priv_audit_control_setup(int, int, struct test *); 92 void priv_audit_control(int, int, struct test *); 93 void priv_audit_control_cleanup(int, int, struct test *); 94 95 int priv_audit_getaudit_setup(int, int, struct test *); 96 void priv_audit_getaudit(int, int, struct test *); 97 void priv_audit_getaudit_addr(int, int, struct test *); 98 void priv_audit_getaudit_cleanup(int, int, struct test *); 99 100 int priv_audit_setaudit_setup(int, int, struct test *); 101 void priv_audit_setaudit(int, int, struct test *); 102 void priv_audit_setaudit_addr(int, int, struct test *); 103 void priv_audit_setaudit_cleanup(int, int, struct test *); 104 105 int priv_clock_settime_setup(int, int, struct test *); 106 void priv_clock_settime(int, int, struct test *); 107 void priv_clock_settime_cleanup(int, int, struct test *); 108 109 int priv_cred_setup(int, int, struct test *); 110 void priv_cred_setuid(int, int, struct test *); 111 void priv_cred_seteuid(int, int, struct test *); 112 void priv_cred_setgid(int, int, struct test *); 113 void priv_cred_setegid(int, int, struct test *); 114 void priv_cred_setgroups(int, int, struct test *); 115 void priv_cred_setreuid(int, int, struct test *); 116 void priv_cred_setregid(int, int, struct test *); 117 void priv_cred_setresuid(int, int, struct test *); 118 void priv_cred_setresgid(int, int, struct test *); 119 void priv_cred_cleanup(int, int, struct test *); 120 121 int priv_io_setup(int, int, struct test *); 122 void priv_io(int, int, struct test *); 123 void priv_io_cleanup(int, int, struct test *); 124 125 int priv_kenv_set_setup(int, int, struct test *); 126 void priv_kenv_set(int, int, struct test *); 127 void priv_kenv_set_cleanup(int, int, struct test *); 128 129 int priv_kenv_unset_setup(int, int, struct test *); 130 void priv_kenv_unset(int, int, struct test *); 131 void priv_kenv_unset_cleanup(int, int, struct test *); 132 133 int priv_msgbuf_privonly_setup(int, int, struct test *); 134 void priv_msgbuf_privonly(int, int, struct test *); 135 136 int priv_msgbuf_unprivok_setup(int, int, struct test *); 137 void priv_msgbuf_unprivok(int, int, struct test *); 138 139 void priv_msgbuf_cleanup(int, int, struct test *); 140 141 void priv_netinet_ipsec_pfkey(int, int, struct test *); 142 int priv_netinet_ipsec_policy4_bypass_setup(int, int, struct test *); 143 void priv_netinet_ipsec_policy4_bypass(int, int, struct test *); 144 int priv_netinet_ipsec_policy6_bypass_setup(int, int, struct test *); 145 void priv_netinet_ipsec_policy6_bypass(int, int, struct test *); 146 void priv_netinet_ipsec_policy_bypass_cleanup(int, int, struct test *); 147 int priv_netinet_ipsec_policy4_entrust_setup(int, int, struct test *); 148 void priv_netinet_ipsec_policy4_entrust(int, int, struct test *); 149 int priv_netinet_ipsec_policy6_entrust_setup(int, int, struct test *); 150 void priv_netinet_ipsec_policy6_entrust(int, int, struct test *); 151 void priv_netinet_ipsec_policy_entrust_cleanup(int, int, struct test *); 152 153 int priv_netinet_raw_setup(int, int, struct test *); 154 void priv_netinet_raw(int, int, struct test *); 155 void priv_netinet_raw_cleanup(int, int, struct test *); 156 157 int priv_proc_setlogin_setup(int, int, struct test *); 158 void priv_proc_setlogin(int, int, struct test *); 159 void priv_proc_setlogin_cleanup(int, int, struct test *); 160 161 int priv_proc_setrlimit_setup(int, int, struct test *); 162 void priv_proc_setrlimit_raisemax(int, int, struct test *); 163 void priv_proc_setrlimit_raisecur(int, int, struct test *); 164 void priv_proc_setrlimit_raisecur_nopriv(int, int, struct test *); 165 void priv_proc_setrlimit_cleanup(int, int, struct test *); 166 167 int priv_sched_rtprio_setup(int, int, struct test *); 168 void priv_sched_rtprio_curproc_normal(int, int, struct test *); 169 void priv_sched_rtprio_curproc_idle(int, int, struct test *); 170 void priv_sched_rtprio_curproc_realtime(int, int, struct test *); 171 172 void priv_sched_rtprio_myproc_normal(int, int, struct test *); 173 void priv_sched_rtprio_myproc_idle(int, int, struct test *); 174 void priv_sched_rtprio_myproc_realtime(int, int, struct test *); 175 176 void priv_sched_rtprio_aproc_normal(int, int, struct test *); 177 void priv_sched_rtprio_aproc_idle(int, int, struct test *); 178 void priv_sched_rtprio_aproc_realtime(int, int, struct test *); 179 void priv_sched_rtprio_cleanup(int, int, struct test *); 180 181 int priv_sched_setpriority_setup(int, int, struct test *); 182 void priv_sched_setpriority_curproc(int, int, struct test *); 183 void priv_sched_setpriority_myproc(int, int, struct test *); 184 void priv_sched_setpriority_aproc(int, int, struct test *); 185 void priv_sched_setpriority_cleanup(int, int, struct test *); 186 187 int priv_settimeofday_setup(int, int, struct test *); 188 void priv_settimeofday(int, int, struct test *); 189 void priv_settimeofday_cleanup(int, int, struct test *); 190 191 int priv_sysctl_write_setup(int, int, struct test *); 192 void priv_sysctl_write(int, int, struct test *); 193 void priv_sysctl_writejail(int, int, struct test *); 194 void priv_sysctl_write_cleanup(int, int, struct test *); 195 196 int priv_vfs_chflags_froot_setup(int, int, struct test *); 197 void priv_vfs_chflags_froot_uflags(int, int, struct test *); 198 void priv_vfs_chflags_froot_sflags(int, int, struct test *); 199 200 int priv_vfs_chflags_fowner_setup(int, int, struct test *); 201 void priv_vfs_chflags_fowner_uflags(int, int, struct test *); 202 void priv_vfs_chflags_fowner_sflags(int, int, struct test *); 203 204 int priv_vfs_chflags_fother_setup(int, int, struct test *); 205 void priv_vfs_chflags_fother_uflags(int, int, struct test *); 206 void priv_vfs_chflags_fother_sflags(int, int, struct test *); 207 208 void priv_vfs_chflags_cleanup(int, int, struct test *); 209 210 int priv_vfs_chmod_froot_setup(int, int, struct test *); 211 void priv_vfs_chmod_froot(int, int, struct test *); 212 213 int priv_vfs_chmod_fowner_setup(int, int, struct test *); 214 void priv_vfs_chmod_fowner(int, int, struct test *); 215 216 int priv_vfs_chmod_fother_setup(int, int, struct test *); 217 void priv_vfs_chmod_fother(int, int, struct test *); 218 219 void priv_vfs_chmod_cleanup(int, int, struct test *); 220 221 int priv_vfs_chown_uid_setup(int, int, struct test *); 222 void priv_vfs_chown_uid(int, int, struct test *); 223 224 int priv_vfs_chown_mygid_setup(int, int, struct test *); 225 void priv_vfs_chown_mygid(int, int, struct test *); 226 227 int priv_vfs_chown_othergid_setup(int, int, struct test *); 228 void priv_vfs_chown_othergid(int, int, struct test *); 229 230 void priv_vfs_chown_cleanup(int, int, struct test *); 231 232 int priv_vfs_chroot_setup(int, int, struct test *); 233 void priv_vfs_chroot(int, int, struct test *); 234 void priv_vfs_chroot_cleanup(int, int, struct test *); 235 236 int priv_vfs_clearsugid_setup(int, int, struct test *); 237 void priv_vfs_clearsugid_chgrp(int, int, struct test *); 238 void priv_vfs_clearsugid_extattr(int, int, struct test *); 239 void priv_vfs_clearsugid_write(int, int, struct test *); 240 void priv_vfs_clearsugid_cleanup(int, int, struct test *); 241 242 int priv_vfs_extattr_system_setup(int, int, struct test *); 243 void priv_vfs_extattr_system(int, int, struct test *); 244 void priv_vfs_extattr_system_cleanup(int, int, struct test *); 245 246 int priv_vfs_fhopen_setup(int, int, struct test *); 247 void priv_vfs_fhopen(int, int, struct test *); 248 void priv_vfs_fhopen_cleanup(int, int, struct test *); 249 250 int priv_vfs_fhstat_setup(int, int, struct test *); 251 void priv_vfs_fhstat(int, int, struct test *); 252 void priv_vfs_fhstat_cleanup(int, int, struct test *); 253 254 int priv_vfs_fhstatfs_setup(int, int, struct test *); 255 void priv_vfs_fhstatfs(int, int, struct test *); 256 void priv_vfs_fhstatfs_cleanup(int, int, struct test *); 257 258 int priv_vfs_generation_setup(int, int, struct test *); 259 void priv_vfs_generation(int, int, struct test *); 260 void priv_vfs_generation_cleanup(int, int, struct test *); 261 262 int priv_vfs_getfh_setup(int, int, struct test *); 263 void priv_vfs_getfh(int, int, struct test *); 264 void priv_vfs_getfh_cleanup(int, int, struct test *); 265 266 int priv_vfs_readwrite_fowner_setup(int, int, struct test *); 267 void priv_vfs_readwrite_fowner(int, int, struct test *); 268 269 int priv_vfs_readwrite_fgroup_setup(int, int, struct test *); 270 void priv_vfs_readwrite_fgroup(int, int, struct test *); 271 272 int priv_vfs_readwrite_fother_setup(int, int, struct test *); 273 void priv_vfs_readwrite_fother(int, int, struct test *); 274 275 void priv_vfs_readwrite_cleanup(int, int, struct test *); 276 277 int priv_vfs_setgid_fowner_setup(int, int, struct test *); 278 void priv_vfs_setgid_fowner(int, int, struct test *); 279 280 int priv_vfs_setgid_fother_setup(int, int, struct test *); 281 void priv_vfs_setgid_fother(int, int, struct test *); 282 283 void priv_vfs_setgid_cleanup(int, int, struct test *); 284 285 int priv_vfs_stickyfile_dir_fowner_setup(int, int, struct test *); 286 287 void priv_vfs_stickyfile_dir_fowner(int, int, struct test *); 288 int priv_vfs_stickyfile_dir_fother_setup(int, int, struct test *); 289 void priv_vfs_stickyfile_dir_fother(int, int, struct test *); 290 291 void priv_vfs_stickyfile_dir_cleanup(int, int, struct test *); 292 293 int priv_vfs_stickyfile_file_fowner_setup(int, int, struct test *); 294 void priv_vfs_stickyfile_file_fowner(int, int, struct test *); 295 296 int priv_vfs_stickyfile_file_fother_setup(int, int, struct test *); 297 void priv_vfs_stickyfile_file_fother(int, int, struct test *); 298 299 void priv_vfs_stickyfile_file_cleanup(int, int, struct test *); 300 301 int priv_vfs_utimes_froot_setup(int, int, struct test *); 302 void priv_vfs_utimes_froot(int, int, struct test *); 303 void priv_vfs_utimes_froot_null(int, int, struct test *); 304 305 int priv_vfs_utimes_fowner_setup(int, int, struct test *); 306 void priv_vfs_utimes_fowner(int, int, struct test *); 307 void priv_vfs_utimes_fowner_null(int, int, struct test *); 308 309 int priv_vfs_utimes_fother_setup(int, int, struct test *); 310 void priv_vfs_utimes_fother(int, int, struct test *); 311 void priv_vfs_utimes_fother_null(int, int, struct test *); 312 313 void priv_vfs_utimes_cleanup(int, int, struct test *); 314 315 int priv_vm_madv_protect_setup(int, int, struct test *); 316 void priv_vm_madv_protect(int, int, struct test *); 317 void priv_vm_madv_protect_cleanup(int, int, struct test *); 318 319 int priv_vm_mlock_setup(int, int, struct test *); 320 void priv_vm_mlock(int, int, struct test *); 321 void priv_vm_mlock_cleanup(int, int, struct test *); 322 323 int priv_vm_munlock_setup(int, int, struct test *); 324 void priv_vm_munlock(int, int, struct test *); 325 void priv_vm_munlock_cleanup(int, int, struct test *); 326