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