Home | History | Annotate | Download | only in sys
      1 /*
      2  * <sys/capability.h>
      3  *
      4  * Copyright (C) 1997   Aleph One
      5  * Copyright (C) 1997-8,2008 Andrew G. Morgan <morgan (at) kernel.org>
      6  *
      7  * defunct POSIX.1e Standard: 25.2 Capabilities           <sys/capability.h>
      8  */
      9 
     10 #ifndef _SYS_CAPABILITY_H
     11 #define _SYS_CAPABILITY_H
     12 
     13 #ifdef __cplusplus
     14 extern "C" {
     15 #endif
     16 
     17 /*
     18  * This file complements the kernel file by providing prototype
     19  * information for the user library.
     20  */
     21 
     22 #include <sys/types.h>
     23 #include <stdint.h>
     24 #include <linux/types.h>
     25 
     26 /*
     27  * Required to limit what gets defined in the kernel header file.
     28  */
     29 #ifndef __user
     30 #define __user
     31 #endif
     32 #include <linux/capability.h>
     33 
     34 /*
     35  * POSIX capability types
     36  */
     37 
     38 /*
     39  * Opaque capability handle (defined internally by libcap)
     40  * internal capability representation
     41  */
     42 typedef struct _cap_struct *cap_t;
     43 
     44 /* "external" capability representation is a (void *) */
     45 
     46 /*
     47  * This is the type used to identify capabilities
     48  */
     49 
     50 typedef int cap_value_t;
     51 
     52 /*
     53  * Set identifiers
     54  */
     55 typedef enum {
     56     CAP_EFFECTIVE=0,                        /* Specifies the effective flag */
     57     CAP_PERMITTED=1,                        /* Specifies the permitted flag */
     58     CAP_INHERITABLE=2                     /* Specifies the inheritable flag */
     59 } cap_flag_t;
     60 
     61 /*
     62  * These are the states available to each capability
     63  */
     64 typedef enum {
     65     CAP_CLEAR=0,                            /* The flag is cleared/disabled */
     66     CAP_SET=1                                    /* The flag is set/enabled */
     67 } cap_flag_value_t;
     68 
     69 /*
     70  * User-space capability manipulation routines
     71  */
     72 
     73 /* libcap/cap_alloc.c */
     74 extern cap_t   cap_dup(cap_t);
     75 extern int     cap_free(void *);
     76 extern cap_t   cap_init(void);
     77 
     78 /* libcap/cap_flag.c */
     79 extern int     cap_get_flag(cap_t, cap_value_t, cap_flag_t, cap_flag_value_t *);
     80 extern int     cap_set_flag(cap_t, cap_flag_t, int, const cap_value_t *,
     81 			    cap_flag_value_t);
     82 extern int     cap_clear(cap_t);
     83 extern int     cap_clear_flag(cap_t, cap_flag_t);
     84 
     85 /* libcap/cap_file.c */
     86 extern cap_t   cap_get_fd(int);
     87 extern cap_t   cap_get_file(const char *);
     88 extern int     cap_set_fd(int, cap_t);
     89 extern int     cap_set_file(const char *, cap_t);
     90 
     91 /* libcap/cap_proc.c */
     92 extern cap_t   cap_get_proc(void);
     93 extern cap_t   cap_get_pid(pid_t);
     94 extern int     cap_set_proc(cap_t);
     95 
     96 extern int     cap_get_bound(cap_value_t);
     97 extern int     cap_drop_bound(cap_value_t);
     98 
     99 #define CAP_IS_SUPPORTED(cap)  (cap_get_bound(cap) >= 0)
    100 
    101 /* libcap/cap_extint.c */
    102 extern ssize_t cap_size(cap_t);
    103 extern ssize_t cap_copy_ext(void *, cap_t, ssize_t);
    104 extern cap_t   cap_copy_int(const void *);
    105 
    106 /* libcap/cap_text.c */
    107 extern cap_t   cap_from_text(const char *);
    108 extern char *  cap_to_text(cap_t, ssize_t *);
    109 extern int     cap_from_name(const char *, cap_value_t *);
    110 extern char *  cap_to_name(cap_value_t);
    111 
    112 #define CAP_DIFFERS(result, flag)  (((result) & (1 << (flag))) != 0)
    113 extern int     cap_compare(cap_t, cap_t);
    114 
    115 /* system calls - look to libc for function to system call mapping */
    116 extern int capset(cap_user_header_t header, cap_user_data_t data);
    117 extern int capget(cap_user_header_t header, const cap_user_data_t data);
    118 
    119 /* deprecated - use cap_get_pid() */
    120 extern int capgetp(pid_t pid, cap_t cap_d);
    121 
    122 /* not valid with filesystem capability support - use cap_set_proc() */
    123 extern int capsetp(pid_t pid, cap_t cap_d);
    124 
    125 #ifdef __cplusplus
    126 }
    127 #endif
    128 
    129 #endif /* _SYS_CAPABILITY_H */
    130