00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef XCCDF_ELEMENTS_H_
00024 #define XCCDF_ELEMENTS_H_
00025
00026 #include <stdbool.h>
00027 #include <time.h>
00028
00029 #include "common/util.h"
00030 #include "common/elements.h"
00031 #include "common/_error.h"
00032
00033 #include <libxml/xmlreader.h>
00034
00035 OSCAP_HIDDEN_START;
00036
00042 const struct xccdf_version_info* xccdf_detect_version_parser(xmlTextReaderPtr reader);
00043
00049 char *xccdf_detect_version_priv(xmlTextReader *reader);
00050
00054 bool xccdf_is_supported_namespace(xmlNs *ns);
00055 int xccdf_version_cmp(const struct xccdf_version_info *actual, const char *desired);
00056
00057 typedef enum {
00058 XCCDFE_ERROR = -1,
00059 XCCDFE_UNMATCHED = 0,
00060
00061
00062 XCCDFE_BENCHMARK,
00063 XCCDFE_GROUP,
00064 XCCDFE_RULE,
00065 XCCDFE_VALUE,
00066 XCCDFE_PROFILE,
00067 XCCDFE_TESTRESULT,
00068 XCCDFE_RESULT_BENCHMARK,
00069 XCCDFE_CHECK,
00070 XCCDFE_CHECK_IMPORT,
00071 XCCDFE_CHECK_EXPORT,
00072 XCCDFE_CHECK_CONTENT,
00073 XCCDFE_CHECK_CONTENT_REF,
00074 XCCDFE_CHOICES,
00075 XCCDFE_CHOICE,
00076 XCCDFE_COMPLEX_CHECK,
00077 XCCDFE_CONFLICTS,
00078 XCCDFE_CPE_LIST,
00079 XCCDFE_DC_STATUS,
00080 XCCDFE_DEFAULT,
00081 XCCDFE_DESCRIPTION,
00082 XCCDFE_FACT,
00083 XCCDFE_FIX,
00084 XCCDFE_FIXTEXT,
00085 XCCDFE_FRONT_MATTER,
00086 XCCDFE_IDENT,
00087 XCCDFE_IDENTITY,
00088 XCCDFE_IMPACT_METRIC,
00089 XCCDFE_INSTANCE,
00090 XCCDFE_LOWER_BOUND,
00091 XCCDFE_MATCH,
00092 XCCDFE_MESSAGE,
00093 XCCDFE_METADATA,
00094 XCCDFE_MODEL,
00095 XCCDFE_NEW_RESULT,
00096 XCCDFE_NOTICE,
00097 XCCDFE_OLD_RESULT,
00098 XCCDFE_ORGANIZATION,
00099 XCCDFE_OVERRIDE,
00100 XCCDFE_PARAM,
00101 XCCDFE_PLAIN_TEXT,
00102 XCCDFE_PLATFORM,
00103 XCCDFE_CPE2_PLATFORMSPEC,
00104 XCCDFE_RESULT_PROFILE,
00105 XCCDFE_PROFILE_NOTE,
00106 XCCDFE_QUESTION,
00107 XCCDFE_RATIONALE,
00108 XCCDFE_REAR_MATTER,
00109 XCCDFE_REFERENCE,
00110 XCCDFE_REFINE_RULE,
00111 XCCDFE_REFINE_VALUE,
00112 XCCDFE_REMARK,
00113 XCCDFE_REQUIRES,
00114 XCCDFE_RESULT,
00115 XCCDFE_RULE_RESULT,
00116 XCCDFE_SCORE,
00117 XCCDFE_SELECT,
00118 XCCDFE_SET_VALUE,
00119 XCCDFE_SIGNATURE,
00120 XCCDFE_SOURCE,
00121 XCCDFE_STATUS,
00122 XCCDFE_SUB,
00123 XCCDFE_TAILORING,
00124 XCCDFE_TARGET,
00125 XCCDFE_TARGET_ADDRESS,
00126 XCCDFE_TARGET_FACTS,
00127 XCCDFE_TARGET_IDENTIFIER,
00128 XCCDFE_TITLE,
00129 XCCDFE_UPPER_BOUND,
00130 XCCDFE_VALUE_VAL,
00131 XCCDFE_VERSION,
00132 XCCDFE_WARNING,
00134 XCCDFE_BENCHMARK_REF = XCCDFE_RESULT_BENCHMARK,
00135
00136 XCCDFE_END_
00137 } xccdf_element_t;
00138
00139 const char *xccdf_element_to_str(xccdf_element_t element);
00140 xccdf_element_t xccdf_element_get(xmlTextReaderPtr reader);
00141
00142 #define XCCDF_ASSERT_ELEMENT(reader, element) do { if (xccdf_element_get(reader) != element) { oscap_seterr(OSCAP_EFAMILY_XCCDF, "Find element '%s' while expecting element: '%s'", xccdf_element_to_str((xccdf_element_get(reader))), xccdf_element_to_str(element)); return false; } } while(false)
00143
00144 typedef enum {
00145 XCCDFA_NONE,
00146 XCCDFA_ABSTRACT,
00147 XCCDFA_AUTHENTICATED,
00148 XCCDFA_AUTHORITY,
00149 XCCDFA_CATEGORY,
00150 XCCDFA_CLUSTER_ID,
00151 XCCDFA_COMPLEXITY,
00152 XCCDFA_CONTEXT,
00153 XCCDFA_DATE,
00154 XCCDFA_DISRUPTION,
00155 XCCDFA_END_TIME,
00156 XCCDFA_EXPORT_NAME,
00157 XCCDFA_EXTENDS,
00158 XCCDFA_FIXREF,
00159 XCCDFA_HIDDEN,
00160 XCCDFA_HREF,
00161 XCCDFA_ID,
00162 XCCDFA_IDREF,
00163 XCCDFA_IID,
00164 XCCDFA_IMPORT_NAME,
00165 XCCDFA_IMPORT_XPATH,
00166 XCCDFA_INTERACTIVE,
00167 XCCDFA_INTERFACEHINT,
00168 XCCDFA_MAXIMUM,
00169 XCCDFA_MULTICHECK,
00170 XCCDFA_MULTIPLE,
00171 XCCDFA_MUSTMATCH,
00172 XCCDFA_NAME,
00173 XCCDFA_NEGATE,
00174 XCCDFA_NOTE_TAG,
00175 XCCDFA_OPERATOR,
00176 XCCDFA_OVERRIDE,
00177 XCCDFA_PARENTCONTEXT,
00178 XCCDFA_PLATFORM,
00179 XCCDFA_PRIVILEDGED,
00180 XCCDFA_PROHIBITCHANGES,
00181 XCCDFA_REBOOT,
00182 XCCDFA_RESOLVED,
00183 XCCDFA_ROLE,
00184 XCCDFA_SELECTED,
00185 XCCDFA_SELECTOR,
00186 XCCDFA_SEVERITY,
00187 XCCDFA_START_TIME,
00188 XCCDFA_STRATEGY,
00189 XCCDFA_STYLE,
00190 XCCDFA_STYLE_HREF,
00191 XCCDFA_SYSTEM,
00192 XCCDFA_TAG,
00193 XCCDFA_TEST_SYSTEM,
00194 XCCDFA_TIME,
00195 XCCDFA_TYPE,
00196 XCCDFA_UPDATE,
00197 XCCDFA_URI,
00198 XCCDFA_VALUE_ID,
00199 XCCDFA_VERSION,
00200 XCCDFA_WEIGHT,
00201 XCCDFA_END_
00202 } xccdf_attribute_t;
00203
00204 bool xccdf_attribute_has(xmlTextReaderPtr reader, xccdf_attribute_t attr);
00205 const char *xccdf_attribute_get(xmlTextReaderPtr reader, xccdf_attribute_t attr);
00206 char *xccdf_attribute_copy(xmlTextReaderPtr reader, xccdf_attribute_t attr);
00207 bool xccdf_attribute_get_bool(xmlTextReaderPtr reader, xccdf_attribute_t attr);
00208 int xccdf_attribute_get_int(xmlTextReaderPtr reader, xccdf_attribute_t attr);
00209 float xccdf_attribute_get_float(xmlTextReaderPtr reader, xccdf_attribute_t attr);
00210
00211 extern const struct oscap_string_map XCCDF_BOOL_MAP[];
00212
00213 void xccdf_print_depth(int depth);
00214 void xccdf_print_max(const char *str, int max, const char *ellipsis);
00215 void xccdf_print_max_text(const struct oscap_text *txt, int max, const char *ellipsis);
00216 void xccdf_print_textlist(struct oscap_text_iterator *txt, int depth, int max, const char *ellipsis);
00217
00218 xmlNs *lookup_xccdf_ns(xmlDoc *doc, xmlNode *parent, const struct xccdf_version_info *version_info);
00219
00220 const struct xccdf_version_info *xccdf_version_info_find(const char *version);
00221
00222 OSCAP_HIDDEN_END;
00223
00224 #endif