/usr/include/openscap/cpe_lang.h is in libopenscap-dev 1.0.9-1+b2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 | /**
* @addtogroup CPE
* @{
* @addtogroup cpelang CPE Language
* @{
*
* @image html cpe_language.png "Class diagram"
* @file cpe_lang.h
*
* @brief Interface to Common Platform Enumeration (CPE) Language
*/
/*
* Copyright 2009 Red Hat Inc., Durham, North Carolina.
* All Rights Reserved.
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Authors:
* Lukas Kuklinek <lkuklinek@redhat.com>
* Maros Barabas <mbarabas@redhat.com>
*/
#ifndef CPELANG_H_
#define CPELANG_H_
#include <stdlib.h>
#include "cpe_name.h"
#include "oscap_text.h"
/**
* CPE language operators
*/
typedef enum {
CPE_LANG_OPER_INVALID = 0x00, ///< invalid or unknown operation
CPE_LANG_OPER_AND = 0x01, ///< logical AND
CPE_LANG_OPER_OR = 0x02, ///< logical OR
CPE_LANG_OPER_MATCH = 0x04, ///< fact-ref = match given CPE name against available dictionaries
CPE_LANG_OPER_CHECK = 0x08, ///< check-ref = evaluate given check
CPE_LANG_OPER_MASK = 0xFF, ///< mask to extract the operator w/o possible negation
CPE_LANG_OPER_NOT = 0x100, ///< negate
CPE_LANG_OPER_NAND = CPE_LANG_OPER_AND | CPE_LANG_OPER_NOT,
CPE_LANG_OPER_NOR = CPE_LANG_OPER_OR | CPE_LANG_OPER_NOT,
} cpe_lang_oper_t;
/**
* @struct cpe_lang_model
* CPE platform specification
*/
struct cpe_lang_model;
/**
* @struct cpe_platform
* Single platform representation in CPE language
*/
struct cpe_platform;
/**
* @struct cpe_testexpr
* CPE language boolean expression
*/
struct cpe_testexpr;
/************************************************************/
/**
* @name Iterators
* @{
* */
/**
* @struct cpe_platform_iterator
* Iterator over CPE dictionary items.
* @see oscap_iterator
*/
struct cpe_platform_iterator;
/// @memberof cpe_platform_iterator
struct cpe_platform *cpe_platform_iterator_next(struct cpe_platform_iterator *it);
/// @memberof cpe_platform_iterator
bool cpe_platform_iterator_has_more(struct cpe_platform_iterator *it);
/// @memberof cpe_platform_iterator
void cpe_platform_iterator_free(struct cpe_platform_iterator *it);
/**
* @struct cpe_testexpr_iterator
* Iterator over CPE language expressions.
* @see oscap_iterator
*/
struct cpe_testexpr_iterator;
/// @memberof cpe_testexpr_iterator
struct cpe_testexpr *cpe_testexpr_iterator_next(struct cpe_testexpr_iterator *it);
/// @memberof cpe_testexpr_iterator
bool cpe_testexpr_iterator_has_more(struct cpe_testexpr_iterator *it);
/// @memberof cpe_testexpr_iterator
void cpe_testexpr_iterator_free(struct cpe_testexpr_iterator *it);
/************************************************************/
/** @} End of Iterators group */
/************************************************************/
/**
* @name Getters
* Return value is pointer to structure's member. Do not free unless you null the pointer in the structure.
* Use remove function otherwise.
* @{
* */
/**
* cpe_testexpr functions to get variable members
* @memberof cpe_testexpr
*/
cpe_lang_oper_t cpe_testexpr_get_oper(const struct cpe_testexpr *item);
/**
* Get CPE expression subexpression.
* Not valid for CPE_LANG_OPER_MATCH operation.
* @memberof cpe_testexpr
*/
struct cpe_testexpr_iterator *cpe_testexpr_get_meta_expr(const struct cpe_testexpr *item);
/**
* Get CPE name to match against.
* Only valid for CPE_LANG_OPER_MATCH.
* @memberof cpe_testexpr
*/
const struct cpe_name *cpe_testexpr_get_meta_cpe(const struct cpe_testexpr *item);
/**
* Get check system to evaluate
* Only valid for CPE_LANG_OPER_CHECK.
* @memberof cpe_testexpr
*/
const char* cpe_testexpr_get_meta_check_system(const struct cpe_testexpr *item);
/**
* Get check href to evaluate
* Only valid for CPE_LANG_OPER_CHECK.
* @memberof cpe_testexpr
*/
const char* cpe_testexpr_get_meta_check_href(const struct cpe_testexpr *item);
/**
* Get check idref to evaluate
* Only valid for CPE_LANG_OPER_CHECK.
* @memberof cpe_testexpr
*/
const char* cpe_testexpr_get_meta_check_id(const struct cpe_testexpr *item);
/**
* Function to get next expr from array
* @param expr CPE Test expression structure
* @memberof cpe_testexpr
*/
const struct cpe_testexpr *cpe_testexpr_get_next(const struct cpe_testexpr *expr);
/**
* cpe_lang_model function to get CPE platforms
* @memberof cpe_lang_model
*/
struct cpe_platform_iterator *cpe_lang_model_get_platforms(const struct cpe_lang_model *item);
/**
* cpe_lang_model function to get CPE platforms
* @memberof cpe_lang_model
*/
struct cpe_platform *cpe_lang_model_get_item(const struct cpe_lang_model *item, const char *key);
/**
* Verify whether given CPE platform idref is applicable by evaluating test expression associated with it
*
* @memberof cpe_lang_model
* @param platform idref to the platform to verify (do not pass with "#" prepended)
* @param lang_model used CPE language model
* @return true if lang model contains given platform and the platform is applicable
*/
bool cpe_platform_applicable_lang_model(const char* platform, struct cpe_lang_model *lang_model, cpe_check_fn check_cb, cpe_dict_fn dict_cb, void* usr);
/**
* cpe_platform functions to get id
* @memberof cpe_platform
*/
const char *cpe_platform_get_id(const struct cpe_platform *item);
/**
* cpe_platform functions to get remark
* @memberof cpe_platform
*/
const char *cpe_platform_get_remark(const struct cpe_platform *item);
/**
* cpe_platform functions to get titles
* @memberof cpe_platform
*/
struct oscap_text_iterator *cpe_platform_get_titles(const struct cpe_platform *item);
/**
* cpe_platform functions to get test expression
* @memberof cpe_platform
*/
const struct cpe_testexpr *cpe_platform_get_expr(const struct cpe_platform *item);
/************************************************************/
/** @} End of Getters group */
/************************************************************/
/**
* @name Setters
* For lists use add functions. Parameters of set functions are duplicated in memory and need to
* be freed by caller.
* @{
*/
/**
* Add platform to CPE lang model
* @memberof cpe_lang_model
*/
bool cpe_lang_model_add_platform(struct cpe_lang_model *lang, struct cpe_platform *platform);
/**
* Add title to platform
* @memberof cpe_platform
*/
bool cpe_platform_add_title(struct cpe_platform *platform, struct oscap_text *title);
/**
* Add XML namespace to CPE lang model
* @memberof cpe_lang_model
*/
/*bool cpe_lang_model_add_xmlns(struct cpe_lang_model * model, struct xml_metadata * xml);*/
/**
* Add an subexpression to a compound CPE language expression.
*
* Expression has to be of type CPE_LANG_OPER_AND or CPE_LANG_OPER_OR, possibly with negation.
* @memberof cpe_testexpr
*/
bool cpe_testexpr_add_subexpression(struct cpe_testexpr *expr, struct cpe_testexpr *sub);
/**
* Set ID of CPE platform
* @memberof cpe_platform
*/
bool cpe_platform_set_id(struct cpe_platform *platform, const char *new_id);
/**
* Set remark of CPE platform
* @memberof cpe_platform
*/
bool cpe_platform_set_remark(struct cpe_platform *platform, const char *new_remark);
/**
* Set evaluation expression for this CPE platform.
*
* Expression has to be a logical-test (i.e. its operation shall be AND or OR, possibly with negation)
* @memberof cpe_platform
*/
bool cpe_platform_set_expr(struct cpe_platform *platform, struct cpe_testexpr *expr);
/**
* Set CPE operation.
*
* Any subexpressions and CPE names associated with this expression will be removed.
* @memberof cpe_testexpr
*/
bool cpe_testexpr_set_oper(struct cpe_testexpr *expr, cpe_lang_oper_t oper);
/**
* Set CPE name.
*
* If the expression does not have type CPE_LANG_OPER_MATCH,
* this function has no effect and returns false.
* @memberof cpe_testexpr
*/
bool cpe_testexpr_set_name(struct cpe_testexpr *expr, struct cpe_name *name);
/************************************************************/
/** @} End of Setters group */
/// @memberof cpe_platform_iterator
void cpe_platform_iterator_remove(struct cpe_platform_iterator *it, struct cpe_lang_model *parent);
/// @memberof cpe_testexpr_iterator
void cpe_platform_iterator_reset(struct cpe_platform_iterator *it);
/**
* Constructor of CPE Language model
* @memberof cpe_lang_model
*/
struct cpe_lang_model *cpe_lang_model_new(void);
/**
* Constructor of CPE test expression
* @memberof cpe_testexpr
*/
struct cpe_testexpr *cpe_testexpr_new(void);
/**
* Constructor of CPE Platform
* @memberof cpe_platform
*/
struct cpe_platform *cpe_platform_new(void);
/**
* Clone CPE test expression
* @param old_expr CPE test expression
* @memberof cpe_testexpr
*/
struct cpe_testexpr * cpe_testexpr_clone(struct cpe_testexpr * old_expr);
/**
* Free function of CPE test expression
* @memberof cpe_testexpr
*/
void cpe_testexpr_free(struct cpe_testexpr *expr);
/**
* Reset function of CPE test expression
* @memberof cpe_testexpr
*/
void cpe_testexpr_iterator_reset(struct cpe_testexpr_iterator *it);
/**
* Free function of CPE test expression
* @memberof cpe_lang_model
*/
void cpe_lang_model_free(struct cpe_lang_model *platformspec);
/**
* Free function of CPE Platform
* @memberof cpe_platform
*/
void cpe_platform_free(struct cpe_platform *platform);
/************************************************************/
/**
* @name Evaluators
* @{
* */
/**
* Get supported version of CPE language XML
* @return version of XML file format
* @memberof cpe_lang_model
*/
const char * cpe_lang_model_supported(void);
/**
* Detect version of given CPE language XML
* @memberof cpe_lang_model
*/
char * cpe_lang_model_detect_version(const char* file);
/**
* Function to match cpe in platform
* @param cpe to be matched with
* @param n size
* @param platform CPE platform
* @memberof cpe_platform
*/
bool cpe_platform_match_cpe(struct cpe_name **cpe, size_t n, const struct cpe_platform *platform);
/************************************************************/
/** @} End of Evaluators group */
/**
* Load CPE language model from a XML document.
* @memberof cpe_lang_model
*/
struct cpe_lang_model *cpe_lang_model_import(const char *file);
/**
* Sets the origin file hint
* @note This is intended for internal use only!
* @see cpe_lang_model_get_origin_file
*/
bool cpe_lang_model_set_origin_file(struct cpe_lang_model* lang_model, const char* origin_file);
/**
* Gets the file the CPE dict model was loaded from
* @internal
* This is necessary to figure out the full OVAL file path for applicability
* testing. We can't do applicability here in the CPE module because that
* would create awful interdependencies.
*/
const char* cpe_lang_model_get_origin_file(const struct cpe_lang_model* lang_model);
/**
* Write the lang_model to a file.
* @memberof cpe_lang_model
* @param spec CPE lang model
* @param file filename
*/
void cpe_lang_model_export(const struct cpe_lang_model *spec, const char *file);
/**@}*/
/**@}*/
#endif /* _CPELANG_H_ */
|