test-cap-list.c revision 4b7c1d5d6a006088910bac42ab3b777be9cf3cc1
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering/***
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering This file is part of systemd.
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering Copyright 2014 Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering systemd is free software; you can redistribute it and/or modify it
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering under the terms of the GNU Lesser General Public License as published by
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering (at your option) any later version.
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering systemd is distributed in the hope that it will be useful, but
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering Lesser General Public License for more details.
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering You should have received a copy of the GNU Lesser General Public License
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering***/
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering#include "log.h"
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering#include "cap-list.h"
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering#include "capability.h"
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poetteringint main(int argc, char *argv[]) {
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering int i;
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(!capability_to_name(-1));
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(!capability_to_name(cap_last_cap()+1));
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering for (i = 0; i <= (int) cap_last_cap(); i++) {
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering const char *n;
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(n = capability_to_name(i));
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(capability_from_name(n) == i);
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering printf("%s = %i\n", n, i);
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering }
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(capability_from_name("asdfbsd") == -EINVAL);
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(capability_from_name("CAP_AUDIT_READ") == CAP_AUDIT_READ);
34a3e4ecad5fd2042eb83ffcbf30379a536cc3eeLennart Poettering assert_se(capability_from_name("cap_audit_read") == CAP_AUDIT_READ);
34a3e4ecad5fd2042eb83ffcbf30379a536cc3eeLennart Poettering assert_se(capability_from_name("cAp_aUdIt_rEAd") == CAP_AUDIT_READ);
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(capability_from_name("0") == 0);
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(capability_from_name("15") == 15);
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering assert_se(capability_from_name("-1") == -EINVAL);
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering for (i = 0; i <= (int) cap_last_cap(); i++) {
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering _cleanup_cap_free_charp_ char *a = NULL;
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering const char *b;
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering unsigned u;
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering assert_se(a = cap_to_name(i));
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering /* quite the loop as soon as libcap only returns
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering * numeric ids, formatted as string */
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering if (safe_atou(a, &u) >= 0)
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering break;
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering assert_se(b = capability_to_name(i));
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering printf("%s vs. %s\n", a, b);
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering assert_se(streq(a, b));
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering }
4b7c1d5d6a006088910bac42ab3b777be9cf3cc1Lennart Poettering
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering return 0;
2822da4fb7f891e5320f02f1d00f64b72221ced4Lennart Poettering}