Path: blob/main/lib/libcasper/services/cap_sysctl/tests/sysctl_test.c
48383 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2013, 2018 The FreeBSD Foundation4*5* This software was developed by Pawel Jakub Dawidek under sponsorship from6* the FreeBSD Foundation.7*8* Portions of this software were developed by Mark Johnston9* under sponsorship from the FreeBSD Foundation.10*11* Redistribution and use in source and binary forms, with or without12* modification, are permitted provided that the following conditions13* are met:14* 1. Redistributions of source code must retain the above copyright15* notice, this list of conditions and the following disclaimer.16* 2. Redistributions in binary form must reproduce the above copyright17* notice, this list of conditions and the following disclaimer in the18* documentation and/or other materials provided with the distribution.19*20* THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND21* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE22* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE23* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE24* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL25* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS26* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)27* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT28* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY29* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF30* SUCH DAMAGE.31*/3233#include <sys/types.h>34#include <sys/capsicum.h>35#include <sys/sysctl.h>36#include <sys/nv.h>3738#include <assert.h>39#include <err.h>40#include <errno.h>41#include <netdb.h>42#include <stdio.h>43#include <stdlib.h>44#include <string.h>45#include <unistd.h>4647#include <libcasper.h>48#include <casper/cap_sysctl.h>4950#include <atf-c.h>5152/*53* We need some sysctls to perform the tests on.54* We remember their values and restore them afer the test is done.55*/56#define SYSCTL0_PARENT "kern"57#define SYSCTL0_NAME "kern.sync_on_panic"58#define SYSCTL0_FILE "./sysctl0"59#define SYSCTL1_PARENT "debug"60#define SYSCTL1_NAME "debug.minidump"61#define SYSCTL1_FILE "./sysctl1"6263#define SYSCTL0_READ0 0x000164#define SYSCTL0_READ1 0x000265#define SYSCTL0_READ2 0x000466#define SYSCTL0_WRITE 0x000867#define SYSCTL0_READ_WRITE 0x001068#define SYSCTL1_READ0 0x002069#define SYSCTL1_READ1 0x004070#define SYSCTL1_READ2 0x008071#define SYSCTL1_WRITE 0x010072#define SYSCTL1_READ_WRITE 0x02007374static void75save_int_sysctl(const char *name, const char *file)76{77ssize_t n;78size_t sz;79int error, fd, val;8081sz = sizeof(val);82error = sysctlbyname(name, &val, &sz, NULL, 0);83ATF_REQUIRE_MSG(error == 0,84"sysctlbyname(%s): %s", name, strerror(errno));8586fd = open(file, O_CREAT | O_WRONLY, 0600);87ATF_REQUIRE_MSG(fd >= 0, "open(%s): %s", file, strerror(errno));88n = write(fd, &val, sz);89ATF_REQUIRE(n >= 0 && (size_t)n == sz);90error = close(fd);91ATF_REQUIRE(error == 0);92}9394static void95restore_int_sysctl(const char *name, const char *file)96{97ssize_t n;98size_t sz;99int error, fd, val;100101fd = open(file, O_RDONLY);102ATF_REQUIRE(fd >= 0);103sz = sizeof(val);104n = read(fd, &val, sz);105ATF_REQUIRE(n >= 0 && (size_t)n == sz);106error = unlink(file);107ATF_REQUIRE(error == 0);108error = close(fd);109ATF_REQUIRE(error == 0);110111error = sysctlbyname(name, NULL, NULL, &val, sz);112ATF_REQUIRE_MSG(error == 0,113"sysctlbyname(%s): %s", name, strerror(errno));114}115116static cap_channel_t *117initcap(void)118{119cap_channel_t *capcas, *capsysctl;120121save_int_sysctl(SYSCTL0_NAME, SYSCTL0_FILE);122save_int_sysctl(SYSCTL1_NAME, SYSCTL1_FILE);123124capcas = cap_init();125ATF_REQUIRE(capcas != NULL);126127capsysctl = cap_service_open(capcas, "system.sysctl");128ATF_REQUIRE(capsysctl != NULL);129130cap_close(capcas);131132return (capsysctl);133}134135static void136cleanup(void)137{138139restore_int_sysctl(SYSCTL0_NAME, SYSCTL0_FILE);140restore_int_sysctl(SYSCTL1_NAME, SYSCTL1_FILE);141}142143static unsigned int144checkcaps(cap_channel_t *capsysctl)145{146unsigned int result;147size_t len0, len1, oldsize;148int error, mib0[2], mib1[2], oldvalue, newvalue;149150result = 0;151152len0 = nitems(mib0);153ATF_REQUIRE(sysctlnametomib(SYSCTL0_NAME, mib0, &len0) == 0);154len1 = nitems(mib1);155ATF_REQUIRE(sysctlnametomib(SYSCTL1_NAME, mib1, &len1) == 0);156157oldsize = sizeof(oldvalue);158if (cap_sysctlbyname(capsysctl, SYSCTL0_NAME, &oldvalue, &oldsize,159NULL, 0) == 0) {160if (oldsize == sizeof(oldvalue))161result |= SYSCTL0_READ0;162}163error = cap_sysctl(capsysctl, mib0, len0, &oldvalue, &oldsize, NULL, 0);164if ((result & SYSCTL0_READ0) != 0)165ATF_REQUIRE(error == 0);166else167ATF_REQUIRE_ERRNO(ENOTCAPABLE, error != 0);168169newvalue = 123;170if (cap_sysctlbyname(capsysctl, SYSCTL0_NAME, NULL, NULL, &newvalue,171sizeof(newvalue)) == 0) {172result |= SYSCTL0_WRITE;173}174175if ((result & SYSCTL0_WRITE) != 0) {176oldsize = sizeof(oldvalue);177if (cap_sysctlbyname(capsysctl, SYSCTL0_NAME, &oldvalue,178&oldsize, NULL, 0) == 0) {179if (oldsize == sizeof(oldvalue) && oldvalue == 123)180result |= SYSCTL0_READ1;181}182}183newvalue = 123;184error = cap_sysctl(capsysctl, mib0, len0, NULL, NULL,185&newvalue, sizeof(newvalue));186if ((result & SYSCTL0_WRITE) != 0)187ATF_REQUIRE(error == 0);188else189ATF_REQUIRE_ERRNO(ENOTCAPABLE, error != 0);190191oldsize = sizeof(oldvalue);192newvalue = 4567;193if (cap_sysctlbyname(capsysctl, SYSCTL0_NAME, &oldvalue, &oldsize,194&newvalue, sizeof(newvalue)) == 0) {195if (oldsize == sizeof(oldvalue) && oldvalue == 123)196result |= SYSCTL0_READ_WRITE;197}198199if ((result & SYSCTL0_READ_WRITE) != 0) {200oldsize = sizeof(oldvalue);201if (cap_sysctlbyname(capsysctl, SYSCTL0_NAME, &oldvalue,202&oldsize, NULL, 0) == 0) {203if (oldsize == sizeof(oldvalue) && oldvalue == 4567)204result |= SYSCTL0_READ2;205}206}207208oldsize = sizeof(oldvalue);209if (cap_sysctlbyname(capsysctl, SYSCTL1_NAME, &oldvalue, &oldsize,210NULL, 0) == 0) {211if (oldsize == sizeof(oldvalue))212result |= SYSCTL1_READ0;213}214error = cap_sysctl(capsysctl, mib1, len1, &oldvalue, &oldsize, NULL, 0);215if ((result & SYSCTL1_READ0) != 0)216ATF_REQUIRE(error == 0);217else218ATF_REQUIRE_ERRNO(ENOTCAPABLE, error != 0);219220newvalue = 506;221if (cap_sysctlbyname(capsysctl, SYSCTL1_NAME, NULL, NULL, &newvalue,222sizeof(newvalue)) == 0) {223result |= SYSCTL1_WRITE;224}225226if ((result & SYSCTL1_WRITE) != 0) {227newvalue = 506;228ATF_REQUIRE(cap_sysctl(capsysctl, mib1, len1, NULL, NULL,229&newvalue, sizeof(newvalue)) == 0);230231oldsize = sizeof(oldvalue);232if (cap_sysctlbyname(capsysctl, SYSCTL1_NAME, &oldvalue,233&oldsize, NULL, 0) == 0) {234if (oldsize == sizeof(oldvalue) && oldvalue == 506)235result |= SYSCTL1_READ1;236}237}238newvalue = 506;239error = cap_sysctl(capsysctl, mib1, len1, NULL, NULL,240&newvalue, sizeof(newvalue));241if ((result & SYSCTL1_WRITE) != 0)242ATF_REQUIRE(error == 0);243else244ATF_REQUIRE_ERRNO(ENOTCAPABLE, error != 0);245246oldsize = sizeof(oldvalue);247newvalue = 7008;248if (cap_sysctlbyname(capsysctl, SYSCTL1_NAME, &oldvalue, &oldsize,249&newvalue, sizeof(newvalue)) == 0) {250if (oldsize == sizeof(oldvalue) && oldvalue == 506)251result |= SYSCTL1_READ_WRITE;252}253254if ((result & SYSCTL1_READ_WRITE) != 0) {255oldsize = sizeof(oldvalue);256if (cap_sysctlbyname(capsysctl, SYSCTL1_NAME, &oldvalue,257&oldsize, NULL, 0) == 0) {258if (oldsize == sizeof(oldvalue) && oldvalue == 7008)259result |= SYSCTL1_READ2;260}261}262263return (result);264}265266ATF_TC_WITH_CLEANUP(cap_sysctl__operation);267ATF_TC_HEAD(cap_sysctl__operation, tc)268{269}270ATF_TC_BODY(cap_sysctl__operation, tc)271{272cap_channel_t *capsysctl, *ocapsysctl;273void *limit;274275ocapsysctl = initcap();276277/*278* Allow:279* SYSCTL0_PARENT/RDWR/RECURSIVE280* SYSCTL1_PARENT/RDWR/RECURSIVE281*/282283capsysctl = cap_clone(ocapsysctl);284ATF_REQUIRE(capsysctl != NULL);285286limit = cap_sysctl_limit_init(capsysctl);287(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,288CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);289(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,290CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);291ATF_REQUIRE(cap_sysctl_limit(limit) == 0);292293limit = cap_sysctl_limit_init(capsysctl);294(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,295CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);296(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,297CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);298(void)cap_sysctl_limit_name(limit, "foo.bar",299CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);300ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);301302limit = cap_sysctl_limit_init(capsysctl);303(void)cap_sysctl_limit_name(limit, "foo.bar",304CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);305ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);306307ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL0_READ1 |308SYSCTL0_READ2 | SYSCTL0_WRITE | SYSCTL0_READ_WRITE |309SYSCTL1_READ0 | SYSCTL1_READ1 | SYSCTL1_READ2 | SYSCTL1_WRITE |310SYSCTL1_READ_WRITE));311312limit = cap_sysctl_limit_init(capsysctl);313(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,314CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);315(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,316CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);317ATF_REQUIRE(cap_sysctl_limit(limit) == 0);318319ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL0_READ1 |320SYSCTL0_READ2 | SYSCTL0_WRITE | SYSCTL0_READ_WRITE |321SYSCTL1_READ0 | SYSCTL1_READ1 | SYSCTL1_READ2 | SYSCTL1_WRITE |322SYSCTL1_READ_WRITE));323324limit = cap_sysctl_limit_init(capsysctl);325(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,326CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);327(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,328CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);329ATF_REQUIRE(cap_sysctl_limit(limit) == 0);330331ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_WRITE));332333limit = cap_sysctl_limit_init(capsysctl);334(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);335(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);336ATF_REQUIRE(cap_sysctl_limit(limit) == 0);337338ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_WRITE));339340limit = cap_sysctl_limit_init(capsysctl);341(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);342ATF_REQUIRE(cap_sysctl_limit(limit) == 0);343344ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL0_READ0);345346cap_close(capsysctl);347348/*349* Allow:350* SYSCTL0_NAME/RDWR/RECURSIVE351* SYSCTL1_NAME/RDWR/RECURSIVE352*/353354capsysctl = cap_clone(ocapsysctl);355ATF_REQUIRE(capsysctl != NULL);356357limit = cap_sysctl_limit_init(capsysctl);358(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,359CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);360(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,361CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);362ATF_REQUIRE(cap_sysctl_limit(limit) == 0);363364limit = cap_sysctl_limit_init(capsysctl);365(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,366CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);367(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,368CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);369ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);370limit = cap_sysctl_limit_init(capsysctl);371(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);372(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);373ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);374limit = cap_sysctl_limit_init(capsysctl);375(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);376(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);377ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);378limit = cap_sysctl_limit_init(capsysctl);379(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);380ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);381382ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL0_READ1 |383SYSCTL0_READ2 | SYSCTL0_WRITE | SYSCTL0_READ_WRITE |384SYSCTL1_READ0 | SYSCTL1_READ1 | SYSCTL1_READ2 | SYSCTL1_WRITE |385SYSCTL1_READ_WRITE));386387cap_close(capsysctl);388389/*390* Allow:391* SYSCTL0_PARENT/RDWR392* SYSCTL1_PARENT/RDWR393*/394395capsysctl = cap_clone(ocapsysctl);396ATF_REQUIRE(capsysctl != NULL);397398limit = cap_sysctl_limit_init(capsysctl);399(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);400(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);401ATF_REQUIRE(cap_sysctl_limit(limit) == 0);402limit = cap_sysctl_limit_init(capsysctl);403(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,404CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);405(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,406CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);407ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);408limit = cap_sysctl_limit_init(capsysctl);409(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,410CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);411(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,412CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);413ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);414limit = cap_sysctl_limit_init(capsysctl);415(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,416CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);417ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);418419ATF_REQUIRE(checkcaps(capsysctl) == 0);420421cap_close(capsysctl);422423/*424* Allow:425* SYSCTL0_NAME/RDWR426* SYSCTL1_NAME/RDWR427*/428429capsysctl = cap_clone(ocapsysctl);430ATF_REQUIRE(capsysctl != NULL);431432limit = cap_sysctl_limit_init(capsysctl);433(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);434(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);435ATF_REQUIRE(cap_sysctl_limit(limit) == 0);436limit = cap_sysctl_limit_init(capsysctl);437(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,438CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);439(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,440CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);441ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);442limit = cap_sysctl_limit_init(capsysctl);443(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,444CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);445(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,446CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);447ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);448limit = cap_sysctl_limit_init(capsysctl);449(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,450CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);451ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);452453ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL0_READ1 |454SYSCTL0_READ2 | SYSCTL0_WRITE | SYSCTL0_READ_WRITE |455SYSCTL1_READ0 | SYSCTL1_READ1 | SYSCTL1_READ2 | SYSCTL1_WRITE |456SYSCTL1_READ_WRITE));457458cap_close(capsysctl);459460/*461* Allow:462* SYSCTL0_PARENT/RDWR463* SYSCTL1_PARENT/RDWR/RECURSIVE464*/465466capsysctl = cap_clone(ocapsysctl);467ATF_REQUIRE(capsysctl != NULL);468469limit = cap_sysctl_limit_init(capsysctl);470(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);471(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,472CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);473ATF_REQUIRE(cap_sysctl_limit(limit) == 0);474limit = cap_sysctl_limit_init(capsysctl);475(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,476CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);477(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,478CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);479ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);480limit = cap_sysctl_limit_init(capsysctl);481(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,482CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);483ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);484limit = cap_sysctl_limit_init(capsysctl);485(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,486CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);487ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);488limit = cap_sysctl_limit_init(capsysctl);489(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,490CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);491ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);492493ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL1_READ0 | SYSCTL1_READ1 |494SYSCTL1_READ2 | SYSCTL1_WRITE | SYSCTL1_READ_WRITE));495496cap_close(capsysctl);497498/*499* Allow:500* SYSCTL0_NAME/RDWR501* SYSCTL1_NAME/RDWR/RECURSIVE502*/503504capsysctl = cap_clone(ocapsysctl);505ATF_REQUIRE(capsysctl != NULL);506507limit = cap_sysctl_limit_init(capsysctl);508(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);509(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,510CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);511ATF_REQUIRE(cap_sysctl_limit(limit) == 0);512limit = cap_sysctl_limit_init(capsysctl);513(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,514CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);515(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,516CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);517ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);518limit = cap_sysctl_limit_init(capsysctl);519(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,520CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);521ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);522limit = cap_sysctl_limit_init(capsysctl);523(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,524CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);525ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);526527ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL0_READ1 |528SYSCTL0_READ2 | SYSCTL0_WRITE | SYSCTL0_READ_WRITE |529SYSCTL1_READ0 | SYSCTL1_READ1 | SYSCTL1_READ2 | SYSCTL1_WRITE |530SYSCTL1_READ_WRITE));531532cap_close(capsysctl);533534/*535* Allow:536* SYSCTL0_PARENT/READ/RECURSIVE537* SYSCTL1_PARENT/READ/RECURSIVE538*/539540capsysctl = cap_clone(ocapsysctl);541ATF_REQUIRE(capsysctl != NULL);542543limit = cap_sysctl_limit_init(capsysctl);544(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,545CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);546(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,547CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);548ATF_REQUIRE(cap_sysctl_limit(limit) == 0);549limit = cap_sysctl_limit_init(capsysctl);550(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,551CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);552(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,553CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);554ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);555limit = cap_sysctl_limit_init(capsysctl);556(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,557CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);558(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,559CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);560ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);561limit = cap_sysctl_limit_init(capsysctl);562(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);563(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);564ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);565limit = cap_sysctl_limit_init(capsysctl);566(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);567(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);568ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);569limit = cap_sysctl_limit_init(capsysctl);570(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,571CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);572ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);573limit = cap_sysctl_limit_init(capsysctl);574(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,575CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);576ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);577limit = cap_sysctl_limit_init(capsysctl);578(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);579ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);580limit = cap_sysctl_limit_init(capsysctl);581(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);582ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);583584ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_READ0));585586cap_close(capsysctl);587588/*589* Allow:590* SYSCTL0_NAME/READ/RECURSIVE591* SYSCTL1_NAME/READ/RECURSIVE592*/593594capsysctl = cap_clone(ocapsysctl);595ATF_REQUIRE(capsysctl != NULL);596597limit = cap_sysctl_limit_init(capsysctl);598(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,599CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);600(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,601CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);602ATF_REQUIRE(cap_sysctl_limit(limit) == 0);603limit = cap_sysctl_limit_init(capsysctl);604(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,605CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);606(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,607CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);608ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);609limit = cap_sysctl_limit_init(capsysctl);610(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,611CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);612(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,613CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);614ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);615limit = cap_sysctl_limit_init(capsysctl);616(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);617(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);618ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);619limit = cap_sysctl_limit_init(capsysctl);620(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);621(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);622ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);623limit = cap_sysctl_limit_init(capsysctl);624(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,625CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);626ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);627limit = cap_sysctl_limit_init(capsysctl);628(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,629CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);630ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);631limit = cap_sysctl_limit_init(capsysctl);632(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);633ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);634limit = cap_sysctl_limit_init(capsysctl);635(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);636ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);637638ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_READ0));639640cap_close(capsysctl);641642/*643* Allow:644* SYSCTL0_PARENT/READ645* SYSCTL1_PARENT/READ646*/647648capsysctl = cap_clone(ocapsysctl);649ATF_REQUIRE(capsysctl != NULL);650651limit = cap_sysctl_limit_init(capsysctl);652(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);653(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);654ATF_REQUIRE(cap_sysctl_limit(limit) == 0);655limit = cap_sysctl_limit_init(capsysctl);656(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,657CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);658(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,659CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);660ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);661limit = cap_sysctl_limit_init(capsysctl);662(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,663CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);664(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,665CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);666ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);667limit = cap_sysctl_limit_init(capsysctl);668(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,669CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);670(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,671CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);672ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);673limit = cap_sysctl_limit_init(capsysctl);674(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);675(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);676ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);677limit = cap_sysctl_limit_init(capsysctl);678(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);679(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);680ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);681limit = cap_sysctl_limit_init(capsysctl);682(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,683CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);684ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);685limit = cap_sysctl_limit_init(capsysctl);686(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,687CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);688ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);689limit = cap_sysctl_limit_init(capsysctl);690(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,691CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);692ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);693limit = cap_sysctl_limit_init(capsysctl);694(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);695ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);696limit = cap_sysctl_limit_init(capsysctl);697(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);698ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);699700ATF_REQUIRE(checkcaps(capsysctl) == 0);701702cap_close(capsysctl);703704/*705* Allow:706* SYSCTL0_NAME/READ707* SYSCTL1_NAME/READ708*/709710capsysctl = cap_clone(ocapsysctl);711ATF_REQUIRE(capsysctl != NULL);712713limit = cap_sysctl_limit_init(capsysctl);714(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);715(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);716ATF_REQUIRE(cap_sysctl_limit(limit) == 0);717limit = cap_sysctl_limit_init(capsysctl);718(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,719CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);720(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,721CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);722ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);723limit = cap_sysctl_limit_init(capsysctl);724(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,725CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);726(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,727CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);728ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);729limit = cap_sysctl_limit_init(capsysctl);730(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,731CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);732(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,733CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);734ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);735limit = cap_sysctl_limit_init(capsysctl);736(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);737(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);738ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);739limit = cap_sysctl_limit_init(capsysctl);740(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);741(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);742ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);743limit = cap_sysctl_limit_init(capsysctl);744(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,745CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);746ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);747limit = cap_sysctl_limit_init(capsysctl);748(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,749CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);750ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);751limit = cap_sysctl_limit_init(capsysctl);752(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,753CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);754ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);755limit = cap_sysctl_limit_init(capsysctl);756(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);757ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);758limit = cap_sysctl_limit_init(capsysctl);759(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);760ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);761762ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_READ0));763764cap_close(capsysctl);765766/*767* Allow:768* SYSCTL0_PARENT/READ769* SYSCTL1_PARENT/READ/RECURSIVE770*/771772capsysctl = cap_clone(ocapsysctl);773ATF_REQUIRE(capsysctl != NULL);774775limit = cap_sysctl_limit_init(capsysctl);776(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);777(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,778CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);779ATF_REQUIRE(cap_sysctl_limit(limit) == 0);780limit = cap_sysctl_limit_init(capsysctl);781(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,782CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);783(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);784ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);785786ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL1_READ0);787788cap_close(capsysctl);789790/*791* Allow:792* SYSCTL0_NAME/READ793* SYSCTL1_NAME/READ/RECURSIVE794*/795796capsysctl = cap_clone(ocapsysctl);797ATF_REQUIRE(capsysctl != NULL);798799limit = cap_sysctl_limit_init(capsysctl);800(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);801(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,802CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);803ATF_REQUIRE(cap_sysctl_limit(limit) == 0);804limit = cap_sysctl_limit_init(capsysctl);805(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,806CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);807(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);808ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);809810ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_READ0));811812cap_close(capsysctl);813814/*815* Allow:816* SYSCTL0_PARENT/WRITE/RECURSIVE817* SYSCTL1_PARENT/WRITE/RECURSIVE818*/819820capsysctl = cap_clone(ocapsysctl);821ATF_REQUIRE(capsysctl != NULL);822823limit = cap_sysctl_limit_init(capsysctl);824(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,825CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);826(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,827CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);828ATF_REQUIRE(cap_sysctl_limit(limit) == 0);829limit = cap_sysctl_limit_init(capsysctl);830(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,831CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);832(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,833CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);834ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);835limit = cap_sysctl_limit_init(capsysctl);836(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,837CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);838(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,839CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);840ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);841limit = cap_sysctl_limit_init(capsysctl);842(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);843(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);844ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);845limit = cap_sysctl_limit_init(capsysctl);846(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);847(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);848ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);849limit = cap_sysctl_limit_init(capsysctl);850(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,851CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);852ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);853limit = cap_sysctl_limit_init(capsysctl);854(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,855CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);856ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);857limit = cap_sysctl_limit_init(capsysctl);858(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);859ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);860limit = cap_sysctl_limit_init(capsysctl);861(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);862ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);863864ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_WRITE | SYSCTL1_WRITE));865866cap_close(capsysctl);867868/*869* Allow:870* SYSCTL0_NAME/WRITE/RECURSIVE871* SYSCTL1_NAME/WRITE/RECURSIVE872*/873874capsysctl = cap_clone(ocapsysctl);875ATF_REQUIRE(capsysctl != NULL);876877limit = cap_sysctl_limit_init(capsysctl);878(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,879CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);880(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,881CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);882ATF_REQUIRE(cap_sysctl_limit(limit) == 0);883limit = cap_sysctl_limit_init(capsysctl);884(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,885CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);886(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,887CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);888ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);889limit = cap_sysctl_limit_init(capsysctl);890(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,891CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);892(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,893CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);894ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);895limit = cap_sysctl_limit_init(capsysctl);896(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);897(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);898ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);899limit = cap_sysctl_limit_init(capsysctl);900(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);901(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);902ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);903limit = cap_sysctl_limit_init(capsysctl);904(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,905CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);906ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);907limit = cap_sysctl_limit_init(capsysctl);908(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,909CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);910ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);911limit = cap_sysctl_limit_init(capsysctl);912(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);913ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);914limit = cap_sysctl_limit_init(capsysctl);915(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);916ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);917918ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_WRITE | SYSCTL1_WRITE));919920cap_close(capsysctl);921922/*923* Allow:924* SYSCTL0_PARENT/WRITE925* SYSCTL1_PARENT/WRITE926*/927928capsysctl = cap_clone(ocapsysctl);929ATF_REQUIRE(capsysctl != NULL);930931limit = cap_sysctl_limit_init(capsysctl);932(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);933(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);934ATF_REQUIRE(cap_sysctl_limit(limit) == 0);935limit = cap_sysctl_limit_init(capsysctl);936(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,937CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);938(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,939CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);940ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);941limit = cap_sysctl_limit_init(capsysctl);942(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,943CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);944(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,945CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);946ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);947limit = cap_sysctl_limit_init(capsysctl);948(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,949CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);950(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,951CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);952ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);953limit = cap_sysctl_limit_init(capsysctl);954(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);955(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);956ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);957limit = cap_sysctl_limit_init(capsysctl);958(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);959(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);960ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);961limit = cap_sysctl_limit_init(capsysctl);962(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,963CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);964ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);965limit = cap_sysctl_limit_init(capsysctl);966(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,967CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);968ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);969limit = cap_sysctl_limit_init(capsysctl);970(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,971CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);972ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);973limit = cap_sysctl_limit_init(capsysctl);974(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);975ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);976limit = cap_sysctl_limit_init(capsysctl);977(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);978ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);979980ATF_REQUIRE(checkcaps(capsysctl) == 0);981982cap_close(capsysctl);983984/*985* Allow:986* SYSCTL0_NAME/WRITE987* SYSCTL1_NAME/WRITE988*/989990capsysctl = cap_clone(ocapsysctl);991ATF_REQUIRE(capsysctl != NULL);992993limit = cap_sysctl_limit_init(capsysctl);994(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);995(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);996ATF_REQUIRE(cap_sysctl_limit(limit) == 0);997limit = cap_sysctl_limit_init(capsysctl);998(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,999CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1000(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1001CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1002ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1003limit = cap_sysctl_limit_init(capsysctl);1004(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1005CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1006(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1007CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1008ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1009limit = cap_sysctl_limit_init(capsysctl);1010(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1011CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1012(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1013CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1014ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1015limit = cap_sysctl_limit_init(capsysctl);1016(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);1017(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);1018ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1019limit = cap_sysctl_limit_init(capsysctl);1020(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1021(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);1022ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1023limit = cap_sysctl_limit_init(capsysctl);1024(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1025CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1026ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1027limit = cap_sysctl_limit_init(capsysctl);1028(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1029CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1030ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1031limit = cap_sysctl_limit_init(capsysctl);1032(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1033CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1034ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1035limit = cap_sysctl_limit_init(capsysctl);1036(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);1037ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1038limit = cap_sysctl_limit_init(capsysctl);1039(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1040ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);10411042ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_WRITE | SYSCTL1_WRITE));10431044cap_close(capsysctl);10451046/*1047* Allow:1048* SYSCTL0_PARENT/WRITE1049* SYSCTL1_PARENT/WRITE/RECURSIVE1050*/10511052capsysctl = cap_clone(ocapsysctl);1053ATF_REQUIRE(capsysctl != NULL);10541055limit = cap_sysctl_limit_init(capsysctl);1056(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);1057(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1058CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1059ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1060limit = cap_sysctl_limit_init(capsysctl);1061(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1062CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1063(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);1064ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);10651066ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL1_WRITE);10671068cap_close(capsysctl);10691070/*1071* Allow:1072* SYSCTL0_NAME/WRITE1073* SYSCTL1_NAME/WRITE/RECURSIVE1074*/10751076capsysctl = cap_clone(ocapsysctl);1077ATF_REQUIRE(capsysctl != NULL);10781079limit = cap_sysctl_limit_init(capsysctl);1080(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);1081(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1082CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1083ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1084limit = cap_sysctl_limit_init(capsysctl);1085(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1086CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1087(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);1088ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);10891090ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_WRITE | SYSCTL1_WRITE));10911092cap_close(capsysctl);10931094/*1095* Allow:1096* SYSCTL0_PARENT/READ/RECURSIVE1097* SYSCTL1_PARENT/WRITE/RECURSIVE1098*/10991100capsysctl = cap_clone(ocapsysctl);1101ATF_REQUIRE(capsysctl != NULL);11021103limit = cap_sysctl_limit_init(capsysctl);1104(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1105CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1106(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1107CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1108ATF_REQUIRE(cap_sysctl_limit(limit) == 0);11091110ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_WRITE));11111112cap_close(capsysctl);11131114/*1115* Allow:1116* SYSCTL0_NAME/READ/RECURSIVE1117* SYSCTL1_NAME/WRITE/RECURSIVE1118*/11191120capsysctl = cap_clone(ocapsysctl);1121ATF_REQUIRE(capsysctl != NULL);11221123limit = cap_sysctl_limit_init(capsysctl);1124(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1125CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1126(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1127CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1128ATF_REQUIRE(cap_sysctl_limit(limit) == 0);11291130ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_WRITE));11311132cap_close(capsysctl);11331134/*1135* Allow:1136* SYSCTL0_PARENT/READ1137* SYSCTL1_PARENT/WRITE1138*/11391140capsysctl = cap_clone(ocapsysctl);1141ATF_REQUIRE(capsysctl != NULL);11421143limit = cap_sysctl_limit_init(capsysctl);1144(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);1145(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);1146ATF_REQUIRE(cap_sysctl_limit(limit) == 0);11471148ATF_REQUIRE(checkcaps(capsysctl) == 0);11491150cap_close(capsysctl);11511152/*1153* Allow:1154* SYSCTL0_NAME/READ1155* SYSCTL1_NAME/WRITE1156*/11571158capsysctl = cap_clone(ocapsysctl);1159ATF_REQUIRE(capsysctl != NULL);11601161limit = cap_sysctl_limit_init(capsysctl);1162(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1163(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);1164ATF_REQUIRE(cap_sysctl_limit(limit) == 0);11651166ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_WRITE));11671168cap_close(capsysctl);11691170/*1171* Allow:1172* SYSCTL0_PARENT/READ1173* SYSCTL1_PARENT/WRITE/RECURSIVE1174*/11751176capsysctl = cap_clone(ocapsysctl);1177ATF_REQUIRE(capsysctl != NULL);11781179limit = cap_sysctl_limit_init(capsysctl);1180(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);1181(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1182CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1183ATF_REQUIRE(cap_sysctl_limit(limit) == 0);11841185ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL1_WRITE);11861187cap_close(capsysctl);11881189/*1190* Allow:1191* SYSCTL0_NAME/READ1192* SYSCTL1_NAME/WRITE/RECURSIVE1193*/11941195capsysctl = cap_clone(ocapsysctl);1196ATF_REQUIRE(capsysctl != NULL);11971198limit = cap_sysctl_limit_init(capsysctl);1199(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1200(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1201CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1202ATF_REQUIRE(cap_sysctl_limit(limit) == 0);12031204ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL1_WRITE));12051206cap_close(capsysctl);1207}1208ATF_TC_CLEANUP(cap_sysctl__operation, tc)1209{1210cleanup();1211}12121213ATF_TC_WITH_CLEANUP(cap_sysctl__names);1214ATF_TC_HEAD(cap_sysctl__names, tc)1215{1216}1217ATF_TC_BODY(cap_sysctl__names, tc)1218{1219cap_channel_t *capsysctl, *ocapsysctl;1220void *limit;12211222ocapsysctl = initcap();12231224/*1225* Allow:1226* SYSCTL0_PARENT/READ/RECURSIVE1227*/12281229capsysctl = cap_clone(ocapsysctl);1230ATF_REQUIRE(capsysctl != NULL);12311232limit = cap_sysctl_limit_init(capsysctl);1233(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1234CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1235ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1236limit = cap_sysctl_limit_init(capsysctl);1237(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1238CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1239(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1240CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1241ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1242limit = cap_sysctl_limit_init(capsysctl);1243(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1244CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1245ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1246limit = cap_sysctl_limit_init(capsysctl);1247(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);1248(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);1249ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1250limit = cap_sysctl_limit_init(capsysctl);1251(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);1252ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);12531254ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL0_READ0);12551256cap_close(capsysctl);12571258/*1259* Allow:1260* SYSCTL1_NAME/READ/RECURSIVE1261*/12621263capsysctl = cap_clone(ocapsysctl);1264ATF_REQUIRE(capsysctl != NULL);12651266limit = cap_sysctl_limit_init(capsysctl);1267(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1268CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1269ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1270limit = cap_sysctl_limit_init(capsysctl);1271(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1272CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1273(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1274CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1275ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1276limit = cap_sysctl_limit_init(capsysctl);1277(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1278CAP_SYSCTL_READ | CAP_SYSCTL_RECURSIVE);1279ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1280limit = cap_sysctl_limit_init(capsysctl);1281(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1282(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);1283ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1284limit = cap_sysctl_limit_init(capsysctl);1285(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1286ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);12871288ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL1_READ0);12891290cap_close(capsysctl);12911292/*1293* Allow:1294* SYSCTL0_PARENT/WRITE/RECURSIVE1295*/12961297capsysctl = cap_clone(ocapsysctl);1298ATF_REQUIRE(capsysctl != NULL);12991300limit = cap_sysctl_limit_init(capsysctl);1301(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1302CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1303ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1304limit = cap_sysctl_limit_init(capsysctl);1305(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1306CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1307(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1308CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1309ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1310limit = cap_sysctl_limit_init(capsysctl);1311(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1312CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1313ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1314limit = cap_sysctl_limit_init(capsysctl);1315(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);1316(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);1317ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1318limit = cap_sysctl_limit_init(capsysctl);1319(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);1320ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);13211322ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL0_WRITE);13231324cap_close(capsysctl);13251326/*1327* Allow:1328* SYSCTL1_NAME/WRITE/RECURSIVE1329*/13301331capsysctl = cap_clone(ocapsysctl);1332ATF_REQUIRE(capsysctl != NULL);13331334limit = cap_sysctl_limit_init(capsysctl);1335(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1336CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1337ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1338limit = cap_sysctl_limit_init(capsysctl);1339(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1340CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1341(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1342CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1343ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1344limit = cap_sysctl_limit_init(capsysctl);1345(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1346CAP_SYSCTL_WRITE | CAP_SYSCTL_RECURSIVE);1347ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1348limit = cap_sysctl_limit_init(capsysctl);1349(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);1350(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);1351ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1352limit = cap_sysctl_limit_init(capsysctl);1353(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);1354ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);13551356ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL1_WRITE);13571358cap_close(capsysctl);13591360/*1361* Allow:1362* SYSCTL0_PARENT/RDWR/RECURSIVE1363*/13641365capsysctl = cap_clone(ocapsysctl);1366ATF_REQUIRE(capsysctl != NULL);13671368limit = cap_sysctl_limit_init(capsysctl);1369(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1370CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1371ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1372limit = cap_sysctl_limit_init(capsysctl);1373(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT,1374CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1375(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1376CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1377ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1378limit = cap_sysctl_limit_init(capsysctl);1379(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT,1380CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1381ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1382limit = cap_sysctl_limit_init(capsysctl);1383(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);1384(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);1385ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1386limit = cap_sysctl_limit_init(capsysctl);1387(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);1388ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);13891390ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL0_READ0 | SYSCTL0_READ1 |1391SYSCTL0_READ2 | SYSCTL0_WRITE | SYSCTL0_READ_WRITE));13921393cap_close(capsysctl);13941395/*1396* Allow:1397* SYSCTL1_NAME/RDWR/RECURSIVE1398*/13991400capsysctl = cap_clone(ocapsysctl);1401ATF_REQUIRE(capsysctl != NULL);14021403limit = cap_sysctl_limit_init(capsysctl);1404(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1405CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1406ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1407limit = cap_sysctl_limit_init(capsysctl);1408(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1409CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1410(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME,1411CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1412ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1413limit = cap_sysctl_limit_init(capsysctl);1414(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME,1415CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1416ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1417limit = cap_sysctl_limit_init(capsysctl);1418(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1419(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);1420ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1421limit = cap_sysctl_limit_init(capsysctl);1422(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1423ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);14241425ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL1_READ0 | SYSCTL1_READ1 |1426SYSCTL1_READ2 | SYSCTL1_WRITE | SYSCTL1_READ_WRITE));14271428cap_close(capsysctl);14291430/*1431* Allow:1432* SYSCTL0_PARENT/READ1433*/14341435capsysctl = cap_clone(ocapsysctl);1436ATF_REQUIRE(capsysctl != NULL);14371438limit = cap_sysctl_limit_init(capsysctl);1439(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);1440ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1441limit = cap_sysctl_limit_init(capsysctl);1442(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_READ);1443(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);1444ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1445limit = cap_sysctl_limit_init(capsysctl);1446(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_READ);1447ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);14481449ATF_REQUIRE(checkcaps(capsysctl) == 0);14501451cap_close(capsysctl);14521453/*1454* Allow:1455* SYSCTL1_NAME/READ1456*/14571458capsysctl = cap_clone(ocapsysctl);1459ATF_REQUIRE(capsysctl != NULL);14601461limit = cap_sysctl_limit_init(capsysctl);1462(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);1463ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1464limit = cap_sysctl_limit_init(capsysctl);1465(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1466(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_READ);1467ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1468limit = cap_sysctl_limit_init(capsysctl);1469(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_READ);1470ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);14711472ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL1_READ0);14731474cap_close(capsysctl);14751476/*1477* Allow:1478* SYSCTL0_PARENT/WRITE1479*/14801481capsysctl = cap_clone(ocapsysctl);1482ATF_REQUIRE(capsysctl != NULL);14831484limit = cap_sysctl_limit_init(capsysctl);1485(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);1486ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1487limit = cap_sysctl_limit_init(capsysctl);1488(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_WRITE);1489(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);1490ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1491limit = cap_sysctl_limit_init(capsysctl);1492(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_WRITE);1493ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);14941495ATF_REQUIRE(checkcaps(capsysctl) == 0);14961497cap_close(capsysctl);14981499/*1500* Allow:1501* SYSCTL1_NAME/WRITE1502*/15031504capsysctl = cap_clone(ocapsysctl);1505ATF_REQUIRE(capsysctl != NULL);15061507limit = cap_sysctl_limit_init(capsysctl);1508(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);1509ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1510limit = cap_sysctl_limit_init(capsysctl);1511(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);1512(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_WRITE);1513ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1514limit = cap_sysctl_limit_init(capsysctl);1515(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_WRITE);1516ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);15171518ATF_REQUIRE(checkcaps(capsysctl) == SYSCTL1_WRITE);15191520cap_close(capsysctl);15211522/*1523* Allow:1524* SYSCTL0_PARENT/RDWR1525*/15261527capsysctl = cap_clone(ocapsysctl);1528ATF_REQUIRE(capsysctl != NULL);15291530limit = cap_sysctl_limit_init(capsysctl);1531(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);1532ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1533limit = cap_sysctl_limit_init(capsysctl);1534(void)cap_sysctl_limit_name(limit, SYSCTL0_PARENT, CAP_SYSCTL_RDWR);1535(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);1536ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1537limit = cap_sysctl_limit_init(capsysctl);1538(void)cap_sysctl_limit_name(limit, SYSCTL1_PARENT, CAP_SYSCTL_RDWR);1539ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);15401541ATF_REQUIRE(checkcaps(capsysctl) == 0);15421543cap_close(capsysctl);15441545/*1546* Allow:1547* SYSCTL1_NAME/RDWR1548*/15491550capsysctl = cap_clone(ocapsysctl);1551ATF_REQUIRE(capsysctl != NULL);15521553limit = cap_sysctl_limit_init(capsysctl);1554(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);1555ATF_REQUIRE(cap_sysctl_limit(limit) == 0);1556limit = cap_sysctl_limit_init(capsysctl);1557(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);1558(void)cap_sysctl_limit_name(limit, SYSCTL1_NAME, CAP_SYSCTL_RDWR);1559ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);1560limit = cap_sysctl_limit_init(capsysctl);1561(void)cap_sysctl_limit_name(limit, SYSCTL0_NAME, CAP_SYSCTL_RDWR);1562ATF_REQUIRE(cap_sysctl_limit(limit) == -1 && errno == ENOTCAPABLE);15631564ATF_REQUIRE(checkcaps(capsysctl) == (SYSCTL1_READ0 | SYSCTL1_READ1 |1565SYSCTL1_READ2 | SYSCTL1_WRITE | SYSCTL1_READ_WRITE));15661567cap_close(capsysctl);1568}1569ATF_TC_CLEANUP(cap_sysctl__names, tc)1570{1571cleanup();1572}15731574ATF_TC_WITH_CLEANUP(cap_sysctl__no_limits);1575ATF_TC_HEAD(cap_sysctl__no_limits, tc)1576{1577}1578ATF_TC_BODY(cap_sysctl__no_limits, tc)1579{1580cap_channel_t *capsysctl;15811582capsysctl = initcap();15831584ATF_REQUIRE_EQ(checkcaps(capsysctl), (SYSCTL0_READ0 | SYSCTL0_READ1 |1585SYSCTL0_READ2 | SYSCTL0_WRITE | SYSCTL0_READ_WRITE |1586SYSCTL1_READ0 | SYSCTL1_READ1 | SYSCTL1_READ2 | SYSCTL1_WRITE |1587SYSCTL1_READ_WRITE));1588}1589ATF_TC_CLEANUP(cap_sysctl__no_limits, tc)1590{1591cleanup();1592}15931594ATF_TC_WITH_CLEANUP(cap_sysctl__recursive_limits);1595ATF_TC_HEAD(cap_sysctl__recursive_limits, tc)1596{1597}1598ATF_TC_BODY(cap_sysctl__recursive_limits, tc)1599{1600cap_channel_t *capsysctl, *ocapsysctl;1601void *limit;1602size_t len;1603int mib[2], val = 420;16041605len = nitems(mib);1606ATF_REQUIRE(sysctlnametomib(SYSCTL0_NAME, mib, &len) == 0);16071608ocapsysctl = initcap();16091610/*1611* Make sure that we match entire components.1612*/1613capsysctl = cap_clone(ocapsysctl);1614ATF_REQUIRE(capsysctl != NULL);16151616limit = cap_sysctl_limit_init(capsysctl);1617(void)cap_sysctl_limit_name(limit, "ker",1618CAP_SYSCTL_RDWR | CAP_SYSCTL_RECURSIVE);1619ATF_REQUIRE(cap_sysctl_limit(limit) == 0);16201621ATF_REQUIRE_ERRNO(ENOTCAPABLE, cap_sysctlbyname(capsysctl, SYSCTL0_NAME,1622NULL, NULL, &val, sizeof(val)));1623ATF_REQUIRE_ERRNO(ENOTCAPABLE, cap_sysctl(capsysctl, mib, len,1624NULL, NULL, &val, sizeof(val)));16251626cap_close(capsysctl);16271628/*1629* Verify that we check for CAP_SYSCTL_RECURSIVE.1630*/1631capsysctl = cap_clone(ocapsysctl);1632ATF_REQUIRE(capsysctl != NULL);16331634limit = cap_sysctl_limit_init(capsysctl);1635(void)cap_sysctl_limit_name(limit, "kern", CAP_SYSCTL_RDWR);1636ATF_REQUIRE(cap_sysctl_limit(limit) == 0);16371638ATF_REQUIRE_ERRNO(ENOTCAPABLE, cap_sysctlbyname(capsysctl, SYSCTL0_NAME,1639NULL, NULL, &val, sizeof(val)));1640ATF_REQUIRE_ERRNO(ENOTCAPABLE, cap_sysctl(capsysctl, mib, len,1641NULL, NULL, &val, sizeof(val)));16421643cap_close(capsysctl);1644}1645ATF_TC_CLEANUP(cap_sysctl__recursive_limits, tc)1646{1647cleanup();1648}16491650ATF_TC_WITH_CLEANUP(cap_sysctl__just_size);1651ATF_TC_HEAD(cap_sysctl__just_size, tc)1652{1653}1654ATF_TC_BODY(cap_sysctl__just_size, tc)1655{1656cap_channel_t *capsysctl;1657size_t len;1658int mib0[2];16591660capsysctl = initcap();16611662len = nitems(mib0);1663ATF_REQUIRE(sysctlnametomib(SYSCTL0_NAME, mib0, &len) == 0);16641665ATF_REQUIRE(cap_sysctlbyname(capsysctl, SYSCTL0_NAME,1666NULL, &len, NULL, 0) == 0);1667ATF_REQUIRE(len == sizeof(int));1668ATF_REQUIRE(cap_sysctl(capsysctl, mib0, nitems(mib0),1669NULL, &len, NULL, 0) == 0);1670ATF_REQUIRE(len == sizeof(int));16711672cap_close(capsysctl);1673}1674ATF_TC_CLEANUP(cap_sysctl__just_size, tc)1675{1676cleanup();1677}16781679ATF_TP_ADD_TCS(tp)1680{1681ATF_TP_ADD_TC(tp, cap_sysctl__operation);1682ATF_TP_ADD_TC(tp, cap_sysctl__names);1683ATF_TP_ADD_TC(tp, cap_sysctl__no_limits);1684ATF_TP_ADD_TC(tp, cap_sysctl__recursive_limits);1685ATF_TP_ADD_TC(tp, cap_sysctl__just_size);16861687return (atf_no_error());1688}168916901691