summaryrefslogtreecommitdiffstats
path: root/libqpol/include/qpol/type_query.h
blob: 9537f251cde9e2bbb2325ef93dd0cbd52aa15ce4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
 /**
 *  @file
 *  Defines the public interface for searching and iterating over types.
 *
 *  @author Kevin Carr kcarr@tresys.com
 *  @author Jeremy A. Mowery jmowery@tresys.com
 *  @author Jason Tang jtang@tresys.com
 *
 *  Copyright (C) 2006-2008 Tresys Technology, LLC
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#ifndef QPOL_TYPE_QUERY_H
#define QPOL_TYPE_QUERY_H

#ifdef	__cplusplus
extern "C"
{
#endif

#include <stddef.h>
#include <stdint.h>
#include <qpol/iterator.h>
#include <qpol/policy.h>

	typedef struct qpol_type qpol_type_t;

/**
 *  Get the datum for a type by name.
 *  @param policy The policy from which to get the type.
 *  @param name The name of the type; searching is case sensitive.
 *  @param datum Pointer in which to store the type datum; the caller
 *  should not free this pointer.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and *datum will be NULL.
 */
	extern int qpol_policy_get_type_by_name(const qpol_policy_t * policy, const char *name, const qpol_type_t ** datum);

/**
 *  Get an iterator for types (including attributes and aliases)
 *  declared in the policy.
 *  @param policy The policy from which to create the iterator.
 *  @param iter Iterator of type qpol_type_t* returned;
 *  the caller is responsible for calling qpol_iterator_destroy to
 *  free memory used; it is important to note that the iterator is
 *  valid only as long as the policy is unchanged.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and *iter will be NULL.
 */
	extern int qpol_policy_get_type_iter(const qpol_policy_t * policy, qpol_iterator_t ** iter);

/**
 *  Get the integer value associated with a type. Values range from 1
 *  to the number of types declared in the policy.
 *  @param policy The policy associated with the type.
 *  @param datum The type from which to get the value.
 *  @param value Pointer to the integer in which to store value.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and value will be 0.
 */
	extern int qpol_type_get_value(const qpol_policy_t * policy, const qpol_type_t * datum, uint32_t * value);

/**
 *  Determine whether a given type is an alias for another type.
 *  @param policy The policy associated with the type.
 *  @param datum The type to check.
 *  @param isalias Pointer to be set to 1 (true) if the type is an alias
 *  and 0 (false) otherwise.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and *isalias will be 0 (false).
 */
	extern int qpol_type_get_isalias(const qpol_policy_t * policy, const qpol_type_t * datum, unsigned char *isalias);

/**
 *  Determine whether a given type is an attribute.
 *  @param policy The policy associated with the type.
 *  @param datum The type to check.
 *  @param isattr Pointer to be set to 1 (true) if the type is an
 *  attribute and 0 (false) otherwise.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and *isattr will be 0 (false).
 */
	extern int qpol_type_get_isattr(const qpol_policy_t * policy, const qpol_type_t * datum, unsigned char *isattr);

/**
 *  Determine whether a given type has been marked as enforcing
 *  (default) or as permissive.  If the policy does not support
 *  permissive types, then all types are enforcing.  Attributes are
 *  always enforcing.
 *
 *  @param policy The policy associated with the type.
 *  @param datum The type to check.
 *  @param ispermissive Pointer to be set to 1 (true) if the type is
 *  permissive and 0 (false) otherwise.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and *ispermissive will be 0 (false).
 */
	extern int qpol_type_get_ispermissive(const qpol_policy_t * policy, const qpol_type_t * datum, unsigned char *ispermissive);

/**
 *  Get an iterator for the list of types in an attribute.
 *  @param policy The policy associated with the attribute.
 *  @param datum The attribute from which to get the types.
 *  @param types Iterator of type qpol_type_t* returned;
 *  the caller is responsible for calling qpol_iterator_destroy to
 *  free memory used; it is important to note that the iterator is
 *  valid only as long as the policy is unchanged.
 *  @return Returns 0 on success, > 0 if the type is not an attribute
 *  and < 0 on failure; if the call fails, errno will be set and
 *  *types will be NULL. If the type is not an attribute *types will
 *  be NULL.
 */
	extern int qpol_type_get_type_iter(const qpol_policy_t * policy, const qpol_type_t * datum, qpol_iterator_t ** types);

/**
 *  Get an iterator for the list of attributes given to a type.
 *  @param policy The policy associated with the type.
 *  @param datum The type for which to get the attributes.
 *  @param attrs Iterator of type qpol_type_t* returned;
 *  the caller is responsible for calling qpol_iterator_destroy to
 *  free memory used; it is important to note that the iterator is
 *  valid only as long as the policy is unchanged.
 *  @return Returns 0 on success, > 0 if the type is an attribute
 *  and < 0 on failure; if the call fails, errno will be set and
 *  *types will be NULL. If the type is an attribute *types will
 *  be NULL.
 */
	extern int qpol_type_get_attr_iter(const qpol_policy_t * policy, const qpol_type_t * datum, qpol_iterator_t ** attrs);

/**
 *  Get the name by which a type is identified from its datum.
 *  @param policy The policy associated with the type.
 *  @param datum The type for which to get the name.
 *  @param name Pointer in which to store the name; the caller
 *  should not free the string. If the type is an alias then the
 *  primary name will be returned.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and *name will be NULL.
 */
	extern int qpol_type_get_name(const qpol_policy_t * policy, const qpol_type_t * datum, const char **name);

/**
 *  Get an iterator for the list of aliases for a type.  If the given
 *  type is an alias, this returns an iterator of its primary type's
 *  aliases.
 *  @param policy The policy associated with the type.
 *  @param datum The type for which to get aliases.
 *  @param aliases Iterator of type char* returned; the caller is
 *  responsible for calling qpol_iterator_destroy to free
 *  memory used; it is important to note that the iterator is valid
 *  only as long as the policy is unchanged. If a type has no aliases,
 *  the iterator will be at end and have size 0.
 *  @return Returns 0 on success and < 0 on failure; if the call fails,
 *  errno will be set and *aliases will be NULL.
 */
	extern int qpol_type_get_alias_iter(const qpol_policy_t * policy, const qpol_type_t * datum, qpol_iterator_t ** aliases);

#ifdef	__cplusplus
}
#endif

#endif				       /* QPOL_TYPE_QUERY_H */