11d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include "config.h"
21d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include <stdio.h>
31d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include <stdlib.h>
41d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include <cap-ng.h>
51d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include <pthread.h>
61d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
71d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich//#define DEBUG 1
81d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
91d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichpthread_t thread1, thread2;
101d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
111d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid *thread1_main(void *arg)
121d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich{
131d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	capng_fill(CAPNG_SELECT_BOTH);
141d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#ifdef DEBUG
151d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	printf("thread1 filled capabilities\n");
161d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#endif
171d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	sleep(2);
181d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if (capng_have_capabilities(CAPNG_SELECT_CAPS) < CAPNG_FULL) {
191d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		printf("Capabilities missing when there should be some\n");
201d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		exit(1);
211d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	}
221d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#ifdef DEBUG
231d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		printf("SUCCESS: Full capabilities reported\n");
241d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#endif
251d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	return NULL;
261d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich}
271d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
281d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid *thread2_main(void *arg)
291d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich{
301d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	sleep(1);
311d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#ifdef DEBUG
321d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	printf("thread2 getting capabilities\n");
331d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#endif
341d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	capng_get_caps_process();
351d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	if (capng_have_capabilities(CAPNG_SELECT_CAPS) != CAPNG_NONE) {
361d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		printf("Detected capabilities when there should not be any\n");
371d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich		exit(1);
381d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	}
391d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	capng_clear(CAPNG_SELECT_BOTH);
401d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#ifdef DEBUG
411d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	printf("SUCCESS: No capabilities reported\n");
421d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#endif
431d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	return NULL;
441d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich}
451d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
461d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichint main(void)
471d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich{
481d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	printf("Testing thread separation of capabilities\n");
491d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	pthread_create(&thread1, NULL, thread1_main, NULL);
501d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	pthread_create(&thread2, NULL, thread2_main, NULL);
511d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	sleep(3);
521d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich	return 0;
531d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich}
541d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich
55