Open SCAP Library
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
XCCDF/elements.h
1 /*
2  * Copyright 2009 Red Hat Inc., Durham, North Carolina.
3  * All Rights Reserved.
4  *
5  * This 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  * This 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 this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Authors:
20  * Lukas Kuklinek <lkuklinek@redhat.com>
21  */
22 
23 #ifndef XCCDF_ELEMENTS_H_
24 #define XCCDF_ELEMENTS_H_
25 
26 #include <stdbool.h>
27 #include <time.h>
28 
29 #include "common/util.h"
30 #include "common/elements.h"
31 #include "common/_error.h"
32 
33 #include <libxml/xmlreader.h>
34 
35 OSCAP_HIDDEN_START;
36 
42 const struct xccdf_version_info* xccdf_detect_version_parser(xmlTextReaderPtr reader);
43 
49 char *xccdf_detect_version_priv(xmlTextReader *reader);
50 
54 bool xccdf_is_supported_namespace(xmlNs *ns);
55 int xccdf_version_cmp(const struct xccdf_version_info *actual, const char *desired);
56 
57 typedef enum {
58  XCCDFE_ERROR = -1,
59  XCCDFE_UNMATCHED = 0,
60 
61  // XCCDF 1.1+ elements
62  XCCDFE_BENCHMARK,
63  XCCDFE_GROUP,
64  XCCDFE_RULE,
65  XCCDFE_VALUE,
66  XCCDFE_PROFILE,
67  XCCDFE_TESTRESULT,
68  XCCDFE_RESULT_BENCHMARK,
69  XCCDFE_CHECK,
70  XCCDFE_CHECK_IMPORT,
71  XCCDFE_CHECK_EXPORT,
72  XCCDFE_CHECK_CONTENT,
73  XCCDFE_CHECK_CONTENT_REF,
74  XCCDFE_CHOICES,
75  XCCDFE_CHOICE,
76  XCCDFE_COMPLEX_CHECK,
77  XCCDFE_CONFLICTS,
78  XCCDFE_CPE_LIST,
79  XCCDFE_DC_STATUS,
80  XCCDFE_DEFAULT,
81  XCCDFE_DESCRIPTION,
82  XCCDFE_FACT,
83  XCCDFE_FIX,
84  XCCDFE_FIXTEXT,
85  XCCDFE_FRONT_MATTER,
86  XCCDFE_IDENT,
87  XCCDFE_IDENTITY,
88  XCCDFE_IMPACT_METRIC,
89  XCCDFE_INSTANCE,
90  XCCDFE_LOWER_BOUND,
91  XCCDFE_MATCH,
92  XCCDFE_MESSAGE,
93  XCCDFE_METADATA,
94  XCCDFE_MODEL,
95  XCCDFE_NEW_RESULT,
96  XCCDFE_NOTICE,
97  XCCDFE_OLD_RESULT,
98  XCCDFE_ORGANIZATION,
99  XCCDFE_OVERRIDE,
100  XCCDFE_PARAM,
101  XCCDFE_PLAIN_TEXT,
102  XCCDFE_PLATFORM,
103  XCCDFE_CPE2_PLATFORMSPEC,
104  XCCDFE_RESULT_PROFILE,
105  XCCDFE_PROFILE_NOTE,
106  XCCDFE_QUESTION,
107  XCCDFE_RATIONALE,
108  XCCDFE_REAR_MATTER,
109  XCCDFE_REFERENCE,
110  XCCDFE_REFINE_RULE,
111  XCCDFE_REFINE_VALUE,
112  XCCDFE_REMARK,
113  XCCDFE_REQUIRES,
114  XCCDFE_RESULT,
115  XCCDFE_RULE_RESULT,
116  XCCDFE_SCORE,
117  XCCDFE_SELECT,
118  XCCDFE_SET_VALUE,
119  XCCDFE_SIGNATURE,
120  XCCDFE_SOURCE,
121  XCCDFE_STATUS,
122  XCCDFE_SUB,
123  XCCDFE_TAILORING,
124  XCCDFE_TARGET,
125  XCCDFE_TARGET_ADDRESS,
126  XCCDFE_TARGET_FACTS,
127  XCCDFE_TARGET_IDENTIFIER,
128  XCCDFE_TITLE,
129  XCCDFE_UPPER_BOUND,
130  XCCDFE_VALUE_VAL,
131  XCCDFE_VERSION,
132  XCCDFE_WARNING,
134  XCCDFE_BENCHMARK_REF = XCCDFE_RESULT_BENCHMARK,
135 
136  XCCDFE_END_
137 } xccdf_element_t;
138 
139 const char *xccdf_element_to_str(xccdf_element_t element);
140 xccdf_element_t xccdf_element_get(xmlTextReaderPtr reader);
141 
142 #define XCCDF_ASSERT_ELEMENT(reader, element) \
143  do { \
144  if (xccdf_element_get(reader) != element) { \
145  const char *found, *expected; \
146  \
147  found = xccdf_element_to_str((xccdf_element_get(reader))); \
148  expected = xccdf_element_to_str(element); \
149  oscap_seterr( \
150  OSCAP_EFAMILY_XCCDF, \
151  "Find element '%s' while expecting element: '%s'", \
152  found != NULL ? found : "(null)", \
153  expected != NULL ? expected : "(null)"); \
154  return false; \
155  } \
156  } while (false)
157 
158 typedef enum {
159  XCCDFA_NONE,
160  XCCDFA_ABSTRACT,
161  XCCDFA_AUTHENTICATED,
162  XCCDFA_AUTHORITY,
163  XCCDFA_CATEGORY,
164  XCCDFA_CLUSTER_ID,
165  XCCDFA_COMPLEXITY,
166  XCCDFA_CONTEXT,
167  XCCDFA_DATE,
168  XCCDFA_DISRUPTION,
169  XCCDFA_END_TIME,
170  XCCDFA_EXPORT_NAME,
171  XCCDFA_EXTENDS,
172  XCCDFA_FIXREF,
173  XCCDFA_HIDDEN,
174  XCCDFA_HREF,
175  XCCDFA_ID,
176  XCCDFA_IDREF,
177  XCCDFA_IID,
178  XCCDFA_IMPORT_NAME,
179  XCCDFA_IMPORT_XPATH,
180  XCCDFA_INTERACTIVE,
181  XCCDFA_INTERFACEHINT,
182  XCCDFA_MAXIMUM,
183  XCCDFA_MULTICHECK,
184  XCCDFA_MULTIPLE,
185  XCCDFA_MUSTMATCH,
186  XCCDFA_NAME,
187  XCCDFA_NEGATE,
188  XCCDFA_NOTE_TAG,
189  XCCDFA_OPERATOR,
190  XCCDFA_OVERRIDE,
191  XCCDFA_PARENTCONTEXT,
192  XCCDFA_PLATFORM,
193  XCCDFA_PRIVILEDGED,
194  XCCDFA_PROHIBITCHANGES,
195  XCCDFA_REBOOT,
196  XCCDFA_RESOLVED,
197  XCCDFA_ROLE,
198  XCCDFA_SELECTED,
199  XCCDFA_SELECTOR,
200  XCCDFA_SEVERITY,
201  XCCDFA_START_TIME,
202  XCCDFA_STRATEGY,
203  XCCDFA_STYLE,
204  XCCDFA_STYLE_HREF,
205  XCCDFA_SYSTEM,
206  XCCDFA_TAG,
207  XCCDFA_TEST_SYSTEM,
208  XCCDFA_TIME,
209  XCCDFA_TYPE,
210  XCCDFA_UPDATE,
211  XCCDFA_URI,
212  XCCDFA_VALUE_ID,
213  XCCDFA_VERSION,
214  XCCDFA_WEIGHT,
215  XCCDFA_END_
216 } xccdf_attribute_t;
217 
218 bool xccdf_attribute_has(xmlTextReaderPtr reader, xccdf_attribute_t attr);
219 const char *xccdf_attribute_get(xmlTextReaderPtr reader, xccdf_attribute_t attr);
220 char *xccdf_attribute_copy(xmlTextReaderPtr reader, xccdf_attribute_t attr);
221 bool xccdf_attribute_get_bool(xmlTextReaderPtr reader, xccdf_attribute_t attr);
222 int xccdf_attribute_get_int(xmlTextReaderPtr reader, xccdf_attribute_t attr);
223 float xccdf_attribute_get_float(xmlTextReaderPtr reader, xccdf_attribute_t attr);
224 
225 extern const struct oscap_string_map XCCDF_BOOL_MAP[];
226 
227 void xccdf_print_depth(int depth);
228 void xccdf_print_max(const char *str, int max, const char *ellipsis);
229 void xccdf_print_max_text(const struct oscap_text *txt, int max, const char *ellipsis);
230 void xccdf_print_textlist(struct oscap_text_iterator *txt, int depth, int max, const char *ellipsis);
231 
232 xmlNs *lookup_xccdf_ns(xmlDoc *doc, xmlNode *parent, const struct xccdf_version_info *version_info);
233 
234 const struct xccdf_version_info *xccdf_version_info_find(const char *version);
235 
236 OSCAP_HIDDEN_END;
237 
238 #endif
Define mapping between symbolic constant and its string representation.
Definition: util.h:310
Definition: XCCDF/elements.c:43
Internationalized string iterator.
const char * version
MAJOR.MINOR, for example &quot;1.1&quot; or &quot;1.2&quot;.
Definition: XCCDF/elements.c:44
Representation of internationalizable character strings.
Definition: text_priv.h:47