/usr/include/openscap/xccdf_policy.h is in libopenscap-dev 0.8.0-4build1.
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 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 | /*
* 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
*
*/
/**
* @addtogroup XCCDF_POLICY
* @{
* @file xccdf_policy.h
* Open-scap XCCDF Policy library interface.
* @author Maros Barabas <mbarabas@redhat.com>
* @author Dave Niemoller <david.niemoller@g2-inc.com>
*/
#ifndef XCCDF_POLICY_H_
#define XCCDF_POLICY_H_
#include <stdbool.h>
#include <time.h>
#include <oscap.h>
#include <xccdf.h>
#include <reporter.h>
/**
* @struct xccdf_policy_model
* Handle all policies for given XCCDF benchmark
*/
struct xccdf_policy_model;
/**
* @struct xccdf_policy
* Policy structure that abstract benchmark's profile
*/
struct xccdf_policy;
/**
* @struct xccdf_value_binding
* Value bindings of policy
*/
struct xccdf_value_binding;
struct xccdf_value_binding_iterator;
/**
* @struct xccdf_policy_iterator
* Iterate through policies
* @see xccdf_policy_model_get_policies
*/
struct xccdf_policy_iterator;
/************************************************************/
/**
* Constructor of Policy Model structure
* @param benchmark Struct xccdf_benchmark with benchmark model
* @return new xccdf_policy_model
* @memberof xccdf_policy_model
*/
struct xccdf_policy_model *xccdf_policy_model_new(struct xccdf_benchmark *benchmark);
/**
* Constructor of Policy structure
* @param model Policy model
* @param profile Profile from XCCDF Benchmark
* @memberof xccdf_policy
*/
struct xccdf_policy * xccdf_policy_new(struct xccdf_policy_model * model, struct xccdf_profile * profile);
/**
* Constructor of structure with profile bindings - refine_rules, refine_values and set_values
* @memberof xccdf_value_binding
* @return new structure of xccdf_value_binding
*/
struct xccdf_value_binding * xccdf_value_binding_new(void);
/**
* Destructor of Policy Model structure
* @memberof xccdf_policy_model
*/
void xccdf_policy_model_free(struct xccdf_policy_model *);
/**
* Destructor of Policy structure
* @memberof xccdf_policy
*/
void xccdf_policy_free(struct xccdf_policy *);
/**
* Destructor of Value binding structure
* @memberof xccdf_value_binding
*/
void xccdf_value_binding_free(struct xccdf_value_binding *);
/**
* Function to register callback for checking system
* @param model XCCDF Policy Model
* @param sys String representing given checking system
* @param func Callback - pointer to function called by XCCDF Policy system when rule parsed
* @param usr optional parameter for passing user data to callback
* @memberof xccdf_policy_model
* @return true if callback registered succesfully, false otherwise
*/
bool xccdf_policy_model_register_engine_callback(struct xccdf_policy_model * model, char * sys, void * func, void * usr);
/**
* Function to register output callback for checking system that will be called AFTER each rule evaluation.
* @param model XCCDF Policy Model
* @param func Callback - pointer to function called by XCCDF Policy system when rule parsed
* @param usr optional parameter for passing user data to callback
* @memberof xccdf_policy_model
* @return true if callback registered succesfully, false otherwise
* \par Example
* With the first function below (register output callback) user registers the callback that will be called after
* each rule evalution is done. Second callback is registered as callback for evaluation itself and will be called
* during the evaluation.
* \code
* xccdf_policy_model_register_output_callback(policy_model, callback, NULL);
* xccdf_policy_model_register_engine_callback(policy_model, "http://oval.mitre.org/XMLSchema/oval-definitions-5", oval_agent_eval_rule, (void *) sess);
* \endcode
* The example of callback:
* \code
* static int callback(const struct oscap_reporter_message *msg, void *arg)
* {
* xccdf_test_result_type_t result = oscap_reporter_message_get_user2num(msg);
* if (result == XCCDF_RESULT_NOT_SELECTED) return 0;
*
* printf("\n");
* printf("Rule ID:\r\t\t\033[1m%s\033[0;0m\n", oscap_reporter_message_get_user1str(msg));
* printf("Title:\r\t\t%s\n", oscap_reporter_message_get_user3str(msg));
* printf("Result:\r\t\t\033[%sm%s\033[0m\n", RESULT_COLORS[result], xccdf_test_result_type_get_text((xccdf_test_result_type_t) result));
* return 0;
* }
* \endcode
*/
bool xccdf_policy_model_register_output_callback(struct xccdf_policy_model * model, oscap_reporter func, void * usr);
/**
* Function to register start callback for checking system that will be called BEFORE each rule evaluation.
* @param model XCCDF Policy Model
* @param func Callback - pointer to function called by XCCDF Policy system when rule parsed
* @param usr optional parameter for passing user data to callback
* @memberof xccdf_policy_model
* @return true if callback registered succesfully, false otherwise
* \par Example
* With the first function below (register start callback) user registers the callback that will be called before
* each rule evalution is started. Second callback is registered as callback for evaluation itself and will be called
* during the evaluation. Last callback is registered output callback.
* \code
* xccdf_policy_model_register_start_callback(policy_model, callback_start, NULL);
* xccdf_policy_model_register_engine_callback(policy_model, "http://oval.mitre.org/XMLSchema/oval-definitions-5", oval_agent_eval_rule, (void *) sess);
* xccdf_policy_model_register_output_callback(policy_model, callback_end, NULL);
* \endcode
* The example of callback_start:
* \code
* static int callback(const struct oscap_reporter_message *msg, void *arg)
* {
* printf("Evaluating rule \"%s\". Please wait.". oscap_reporter_message_get_user1num(msg));
* return 0;
* }
* \endcode
*/
bool xccdf_policy_model_register_start_callback(struct xccdf_policy_model * model, oscap_reporter func, void * usr);
/************************************************************/
/**
* @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.
* @{
* */
/**
* Get model from Policy (parent structure of Policy to access the benchmark)
* @param policy XCCDF Policy
* @return Policy model
* @memberof xccdf_policy
*/
struct xccdf_policy_model * xccdf_policy_get_model(const struct xccdf_policy * policy);
/**
* Get Benchmark from Policy Model
* @param item Policy model structure
* @return XCCDF Benchmark for given policy model
* @memberof xccdf_policy_model
*/
struct xccdf_benchmark * xccdf_policy_model_get_benchmark(const struct xccdf_policy_model * item);
/**
* Get Value Bindings from XCCDF Policy
* @memberof xccdf_policy
*/
struct xccdf_value_binding_iterator * xccdf_policy_get_values(const struct xccdf_policy * item);
/**
* Get policies from Policy Model
* @param model Policy Model
* @return Iterator for list of policies
* @memberof xccdf_policy_model
*/
struct xccdf_policy_iterator * xccdf_policy_model_get_policies(const struct xccdf_policy_model *model);
/**
* Get selected rules from policy
* @memberof xccdf_policy
* @return Pointer to select iterator.
* @retval NULL on faliure
*/
struct xccdf_select_iterator * xccdf_policy_get_selected_rules(struct xccdf_policy *);
/**
* Get XCCDF Profile from Policy
* @memberof xccdf_policy
* @return XCCDF Profile
*/
struct xccdf_profile * xccdf_policy_get_profile(const struct xccdf_policy *);
/**
* Get rules from Policy
* @memberof xccdf_policy
* @return xccdf_select_iterator
*/
struct xccdf_select_iterator * xccdf_policy_get_selects(const struct xccdf_policy *);
/**
* Get variable name from value bindings
* @memberof xccdf_value_binding
* @return String
*/
char * xccdf_value_binding_get_name(const struct xccdf_value_binding *);
/**
* Get value from value bindings
* @memberof xccdf_value_binding
* @return String
*/
char * xccdf_value_binding_get_value(const struct xccdf_value_binding *);
/**
* get variable type from value bindings
* @memberof xccdf_value_binding
* @return xccdf_value_type_t
*/
xccdf_value_type_t xccdf_value_binding_get_type(const struct xccdf_value_binding *);
/**
* get Value operator from value bindings
* @memberof xccdf_value_binding
* @return xccdf_operator_t
*/
xccdf_operator_t xccdf_value_binding_get_operator(const struct xccdf_value_binding *);
/**
* get Set Value from value bindings
* @memberof xccdf_value_binding
* @return String
*/
char * xccdf_value_binding_get_setvalue(const struct xccdf_value_binding *);
/**
* Get results of all XCCDF Policy results
* @memberof xccdf_policy_model
*/
struct xccdf_result_iterator * xccdf_policy_get_results(const struct xccdf_policy * policy);
/**
* Get XCCDF Result structure by it's idetificator if there is one
* @memberof xccdf_policy_model
* @return structure xccdf_result if found, NULL otherwise
*/
struct xccdf_result * xccdf_policy_get_result_by_id(struct xccdf_policy * policy, const char * id);
/**
* Get ID of XCCDF Profile that is implemented by XCCDF Policy
* @param policy XCCDF Policy
* @memberof xccdf_policy
* @return ID of Policy's Profile
*/
const char * xccdf_policy_get_id(struct xccdf_policy * policy);
/**
* Get XCCDF Policy from Policy model by speciefied ID of Profile
* @param policy_model XCCDF Policy model
* @param id ID of Profile
* @memberof xccdf_policy_model
* @return XCCDF Policy
*/
struct xccdf_policy * xccdf_policy_model_get_policy_by_id(struct xccdf_policy_model * policy_model, const char * id);
/************************************************************/
/** @} 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 Policy to Policy Model
* @memberof xccdf_policy_model
* @return true if policy has been added succesfully
*/
bool xccdf_policy_model_add_policy(struct xccdf_policy_model *, struct xccdf_policy *);
/**
* Add rule to Policy
* @memberof xccdf_policy
* @return true if rule has been added succesfully
*/
bool xccdf_policy_add_select(struct xccdf_policy *, struct xccdf_select *);
/**
* Set a new selector to the Policy structure
* @memberof xccdf_policy
* @return true if rule has been added succesfully
*/
bool xccdf_policy_set_selected(struct xccdf_policy * policy, char * idref);
/**
* Add result to XCCDF Policy Model
* @memberof xccdf_policy_model
*/
bool xccdf_policy_add_result(struct xccdf_policy * policy, struct xccdf_result * item);
/**
* Add value binding to the Policy structure
* @memberof xccdf_policy
* @return true if rule has been added succesfully
*/
bool xccdf_policy_add_value(struct xccdf_policy *, struct xccdf_value_binding *);
/**
* Add check export to the Value Binding structure
* @memberof xccdf_value_binding
* @return true if rule has been added succesfully
*/
//bool xccdf_value_binding_add_check_export(struct xccdf_value_binding *, struct xccdf_check_export *);
/**
* Get select from policy by specified ID of XCCDF Item
* @memberof xccdf_policy
* @return XCCDF Select
*/
struct xccdf_select * xccdf_policy_get_select_by_id(struct xccdf_policy * policy, const char *item_id);
/************************************************************/
/** @} End of Setters group */
/************************************************************/
/**
* @name Evaluators
* @{
* */
/**
* Call the checking engine for each selected rule in given policy structure
* @param policy given Policy to evaluate
* @memberof xccdf_policy
* @return true if evaluation pass or false in case of error
* \par Example
* Before each policy evaluation user has to register callback that will be called for each check.
* Every checking engine must have registered callback or the particular check will be skipped.
* In the code below is used the predefined function \ref oval_agent_eval_rule for evaluation OVAL checks:
* \code
* xccdf_policy_model_register_engine_callback(policy_model, "http://oval.mitre.org/XMLSchema/oval-definitions-5", oval_agent_eval_rule, (void *) usr);
* \endcode
* \par
* If you use this predefined OVAL callback, user data structure (last parameter of register function) \b MUST be of type \ref\a oval_agent_session_t:
* \code
* struct oval_agent_session * sess = oval_agent_new_session((struct oval_definition_model *) model, "name-of-file");
* \endcode
* */
struct xccdf_result * xccdf_policy_evaluate(struct xccdf_policy * policy);
/**
* Resolve benchmark by applying all refine_rules and refine_values to rules / values
* of benchmark. All properties in benchmark will be irreversible changed and user has to
* load benchmark (from XML) again to discard these changes.
* @param policy XCCDF policy containing rules/values that will be applied to benchmark rules/values.
* @return true if process ends succesfuly or false in case of error
* @memberof xccdf_policy
*/
bool xccdf_policy_resolve(struct xccdf_policy * policy);
/**
* Clone the item and tailor it against given policy (profile)
* @param policy Policy with profile
* @param item XCCDF item to be tailored
* @return new item that has to be freed by user
*/
struct xccdf_item * xccdf_policy_tailor_item(struct xccdf_policy * policy, struct xccdf_item * item);
/**
* Return names of files that are used in checks of particular rules. Every check needs this file to be
* evaluated properly. If this file will not be imported and bind to the XCCDF Policy system the result
* of rule after evaluation will be "Not checked"
*/
struct oscap_stringlist * xccdf_policy_model_get_files(struct xccdf_policy_model * policy_model);
/**
* Return names of files that are used in checks of particular rules. Every check needs this file to be
* evaluated properly. If this file will not be imported and bind to the XCCDF Policy system the result
* of rule after evaluation will be "Not checked"
*/
struct oscap_stringlist * xccdf_item_get_files(struct xccdf_item * item);
/************************************************************/
/** @} End of Evaluators group */
/************************************************************/
/**
* @name Iterators
* @{
* */
/**
* Return true if the list is not empty, false otherwise
* @memberof xccdf_policy_iterator
*/
bool xccdf_policy_iterator_has_more(struct xccdf_policy_iterator *it);
/**
* Return the next xccdf_policy structure from the list and increment the iterator
* @memberof xccdf_policy_iterator
*/
struct xccdf_policy * xccdf_policy_iterator_next(struct xccdf_policy_iterator *it);
/**
* Free the iterator structure (it makes no changes to the list structure)
* @memberof xccdf_policy_iterator
*/
void xccdf_policy_iterator_free(struct xccdf_policy_iterator *it);
/**
* Reset the iterator structure (it will point to the first item in the list)
* @memberof xccdf_policy_iterator
*/
void xccdf_policy_iterator_reset(struct xccdf_policy_iterator *it);
/**
* Return true if the list is not empty, false otherwise
* @memberof xccdf_value_binding_iterator
*/
bool xccdf_value_binding_iterator_has_more(struct xccdf_value_binding_iterator *it);
/**
* Return the next xccdf_value_binding structure from the list and increment the iterator
* @memberof xccdf_value_binding_iterator
*/
struct xccdf_value_binding * xccdf_value_binding_iterator_next(struct xccdf_value_binding_iterator *it);
/**
* Free the iterator structure (it makes no changes to the list structure)
* @memberof xccdf_value_binding_iterator
*/
void xccdf_value_binding_iterator_free(struct xccdf_value_binding_iterator *it);
/**
* Reset the iterator structure (it will point to the first item in the list)
* @memberof xccdf_value_binding_iterator
*/
void xccdf_value_binding_iterator_reset(struct xccdf_value_binding_iterator *it);
/**
* Get score of the XCCDF Benchmark
* @param policy XCCDF Policy
* @param test_result Test Result model
* @param system Score system
* @return XCCDF Score
*/
struct xccdf_score * xccdf_policy_get_score(struct xccdf_policy * policy, struct xccdf_result * test_result, const char * system);
/**
* Perform textual substitution of cdf:sub elements with respect to given XCCDF policy.
* @param text text to be substituted
* @param policy policy to be used
*/
char* xccdf_policy_substitute(const char *text, struct xccdf_policy *policy);
/************************************************************/
/** @} End of Iterators group */
/*
* @}
*/
#endif
|