/*
# SPDX-License-Identifier: LGPL-2.1+
# ~~~
# Description: libcap tests
#
# Author: Susant Sahani <susant@redhat.com>
# Copyright (c) 2018 Red Hat, Inc.
# ~~~
*/
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <netinet/in.h>
#include <setjmp.h>
#include <inttypes.h>
#include <cmocka.h>
#include <sys/capability.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <unistd.h>
#include <cap-ng.h>
static void drop_cap(uint32_t cap) {
capng_clear(CAPNG_SELECT_BOTH);
assert_return_code(capng_update(CAPNG_DROP, CAPNG_PERMITTED, cap), 0);
assert_return_code(capng_update(CAPNG_DROP, CAPNG_EFFECTIVE, cap), 0);
assert_return_code(capng_apply(CAPNG_SELECT_CAPS), 0);
}
static void test_drop_cap_net_raw(void **state) {
int s, r;
assert_true((s = socket(PF_INET, SOCK_RAW, IPPROTO_UDP)) >= 0);
close(s);
drop_cap(CAP_NET_RAW);
assert_false((s = socket(PF_INET, SOCK_RAW, IPPROTO_UDP) >= 0));
}
int main(int argc, char *argv[]) {
const struct CMUnitTest libcap_ng_tests[] = {
cmocka_unit_test(test_drop_cap_net_raw),
};
return cmocka_run_group_tests(libcap_ng_tests, NULL, NULL);
}