xref: /aosp_15_r20/external/libcap/contrib/bug400591/bug.c (revision 2810ac1b38eead2603277920c78344c84ddf3aff)
1*2810ac1bSKiyoung Kim #include <assert.h>
2*2810ac1bSKiyoung Kim #include <stdlib.h>
3*2810ac1bSKiyoung Kim #include <sys/capability.h>
4*2810ac1bSKiyoung Kim 
5*2810ac1bSKiyoung Kim /*
6*2810ac1bSKiyoung Kim  * Original from http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=400591
7*2810ac1bSKiyoung Kim  *
8*2810ac1bSKiyoung Kim  * Modified to test more functions.. AGM - 2008/07/06.
9*2810ac1bSKiyoung Kim  */
10*2810ac1bSKiyoung Kim 
main(int argc,char * argv[])11*2810ac1bSKiyoung Kim int main (int argc, char *argv[])
12*2810ac1bSKiyoung Kim {
13*2810ac1bSKiyoung Kim   cap_t caps, caps2;
14*2810ac1bSKiyoung Kim   ssize_t size, copy_size;
15*2810ac1bSKiyoung Kim   void *buffer;
16*2810ac1bSKiyoung Kim   char *text1, *text2;
17*2810ac1bSKiyoung Kim 
18*2810ac1bSKiyoung Kim   assert((caps = cap_get_pid(1)));
19*2810ac1bSKiyoung Kim 
20*2810ac1bSKiyoung Kim   text1 = cap_to_text(caps, NULL);
21*2810ac1bSKiyoung Kim   assert(text1);
22*2810ac1bSKiyoung Kim 
23*2810ac1bSKiyoung Kim   size = cap_size (caps);
24*2810ac1bSKiyoung Kim   assert (size>0  && size<1024);
25*2810ac1bSKiyoung Kim 
26*2810ac1bSKiyoung Kim   buffer = malloc (size);
27*2810ac1bSKiyoung Kim   assert (buffer);
28*2810ac1bSKiyoung Kim 
29*2810ac1bSKiyoung Kim   copy_size = cap_copy_ext (buffer, caps, size);
30*2810ac1bSKiyoung Kim   assert (copy_size == size);
31*2810ac1bSKiyoung Kim 
32*2810ac1bSKiyoung Kim   caps2 = cap_copy_int(buffer);
33*2810ac1bSKiyoung Kim   assert (caps2);
34*2810ac1bSKiyoung Kim 
35*2810ac1bSKiyoung Kim   text2 = cap_to_text(caps2, NULL);
36*2810ac1bSKiyoung Kim   assert(text2);
37*2810ac1bSKiyoung Kim 
38*2810ac1bSKiyoung Kim   assert(strcmp(text1, text2) == 0);
39*2810ac1bSKiyoung Kim 
40*2810ac1bSKiyoung Kim   assert(cap_compare(caps, caps2) == 0);
41*2810ac1bSKiyoung Kim 
42*2810ac1bSKiyoung Kim   return 0;
43*2810ac1bSKiyoung Kim }
44