1b178ba9985013d62416e6fa48bdb71ca30eb596
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / privP.h
1 /* Copyright (C) 2008 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by David Bartley <dtbartle@csclub.uwaterloo.ca>, 2008.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #ifndef _PRIVP_H
21 #define _PRIVP_H
22
23 #include <sys/types.h>
24 #include <stdint.h>
25
26 typedef uint32_t priv_chunk_t;
27 typedef struct priv_set priv_set_t;
28 typedef const char *priv_ptype_t;
29
30 typedef struct prpriv
31   {
32         uint32_t pr_nsets;
33         uint32_t pr_setsize;
34         uint32_t pr_infosize;
35         priv_chunk_t pr_sets[1];
36   } prpriv_t;
37
38 typedef struct priv_impl_info
39   {
40         uint32_t priv_headersize;
41         uint32_t priv_flags;
42         uint32_t priv_nsets;
43         uint32_t priv_setsize;
44         uint32_t priv_max;
45         uint32_t priv_infosize;
46         uint32_t priv_globalinfosize;
47   } priv_impl_info_t;
48
49 #define PRIV_IMPL_INFO_SIZE(p) \
50         ((p)->priv_headersize + (p)->priv_globalinfosize)
51
52 typedef struct priv_info
53   {
54         uint32_t priv_info_type;
55         uint32_t priv_info_size;
56   } priv_info_t;
57
58 typedef struct priv_info_uint
59   {
60         priv_info_t info;
61         unsigned int val;
62   } priv_info_uint_t;
63
64 typedef struct priv_info_set
65   {
66         priv_info_t info;
67         priv_chunk_t set[1];
68   } priv_info_set_t;
69
70 typedef struct priv_info_names
71   {
72         priv_info_t info;
73         int cnt;
74         char names[1];
75   } priv_info_names_t;
76
77 #define PRIV_INFO_SETNAMES      1
78 #define PRIV_INFO_PRIVNAMES     2
79 #define PRIV_INFO_BASICPRIVS    3
80 #define PRIV_INFO_FLAGS         4
81
82 typedef struct priv_data
83   {
84         size_t pd_setsize;
85         uint32_t pd_setnames_cnt;
86         char **pd_setnames;
87         uint32_t pd_privnames_cnt;
88         char **pd_privnames;
89         priv_set_t *pd_basicprivs;
90   } priv_data_t;
91
92 typedef enum priv_op
93 {
94         PRIV_ON,
95         PRIV_OFF,
96         PRIV_SET
97 } priv_op_t;
98
99 #define PRIV_EFFECTIVE          "Effective"
100 #define PRIV_INHERITABLE        "Inheritable"
101 #define PRIV_PERMITTED          "Permitted"
102 #define PRIV_LIMIT              "Limit"
103
104 #define PU_RESETGROUPS          0x01
105 #define PU_LIMITPRIVS           0x02
106 #define PU_INHERITPRIVS         0x04
107 #define PU_CLEARLIMITSET        0x08
108
109 #define __NPRIVBITS     (8 * sizeof (priv_chunk_t))
110 #define __PRIVELT(pr)   ((pr) / __NPRIVBITS)
111 #define __PRIVMASK(pr)  ((priv_chunk_t) 1 << ((pr) % __NPRIVBITS))
112 #define __PRIVSETCHUNKS (getprivimplinfo()->priv_setsize)
113 #define __PRIVSETSIZE   (__PRIVSETCHUNKS * sizeof (priv_chunk_t))
114
115 extern const priv_data_t * __priv_parse_data_cached (void);
116 extern const priv_impl_info_t *getprivimplinfo (void);
117 extern int setppriv (priv_op_t, priv_ptype_t, const priv_set_t *);
118 extern int getppriv (priv_ptype_t, priv_set_t *);
119 extern int priv_getsetbyname (const char *);
120 extern priv_set_t *priv_allocset (void);
121 extern void priv_freeset (priv_set_t *sp);
122 extern void priv_union (const priv_set_t *src, priv_set_t *dst);
123 extern void priv_intersect (const priv_set_t *src, priv_set_t *dst);
124 extern void priv_emptyset (priv_set_t *sp);
125 extern void priv_fillset (priv_set_t *sp);
126 extern int priv_addset (priv_set_t *sp, const char *priv);
127 extern int priv_delset (priv_set_t *sp, const char *priv);
128 extern void priv_copyset (const priv_set_t *src, priv_set_t *dst);
129 extern boolean_t priv_issubset (const priv_set_t *src, const priv_set_t *dst);
130 extern int priv_getbyname (const char *privname);
131
132 #endif /* _PRIVP_H */