ssahani / rpms / libcap-ng

Forked from rpms/libcap-ng 5 years ago
Clone
Blob Blame History Raw
/*
# 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);
}