Home | History | Annotate | Download | only in test
      1 #include "config.h"
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include <cap-ng.h>
      5 #include <pthread.h>
      6 
      7 //#define DEBUG 1
      8 
      9 pthread_t thread1, thread2;
     10 
     11 void *thread1_main(void *arg)
     12 {
     13 	capng_fill(CAPNG_SELECT_BOTH);
     14 #ifdef DEBUG
     15 	printf("thread1 filled capabilities\n");
     16 #endif
     17 	sleep(2);
     18 	if (capng_have_capabilities(CAPNG_SELECT_CAPS) < CAPNG_FULL) {
     19 		printf("Capabilities missing when there should be some\n");
     20 		exit(1);
     21 	}
     22 #ifdef DEBUG
     23 		printf("SUCCESS: Full capabilities reported\n");
     24 #endif
     25 	return NULL;
     26 }
     27 
     28 void *thread2_main(void *arg)
     29 {
     30 	sleep(1);
     31 #ifdef DEBUG
     32 	printf("thread2 getting capabilities\n");
     33 #endif
     34 	capng_get_caps_process();
     35 	if (capng_have_capabilities(CAPNG_SELECT_CAPS) != CAPNG_NONE) {
     36 		printf("Detected capabilities when there should not be any\n");
     37 		exit(1);
     38 	}
     39 	capng_clear(CAPNG_SELECT_BOTH);
     40 #ifdef DEBUG
     41 	printf("SUCCESS: No capabilities reported\n");
     42 #endif
     43 	return NULL;
     44 }
     45 
     46 int main(void)
     47 {
     48 	printf("Testing thread separation of capabilities\n");
     49 	pthread_create(&thread1, NULL, thread1_main, NULL);
     50 	pthread_create(&thread2, NULL, thread2_main, NULL);
     51 	sleep(3);
     52 	return 0;
     53 }
     54 
     55