Open SCAP Library
probe-api.h
Go to the documentation of this file.
1 
35 /*
36  * Copyright 2009 Red Hat Inc., Durham, North Carolina.
37  * All Rights Reserved.
38  *
39  * This library is free software; you can redistribute it and/or
40  * modify it under the terms of the GNU Lesser General Public
41  * License as published by the Free Software Foundation; either
42  * version 2.1 of the License, or (at your option) any later version.
43  *
44  * This library is distributed in the hope that it will be useful,
45  * but WITHOUT ANY WARRANTY; without even the implied warranty of
46  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
47  * Lesser General Public License for more details.
48  *
49  * You should have received a copy of the GNU Lesser General Public
50  * License along with this library; if not, write to the Free Software
51  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
52  *
53  * Authors:
54  * Daniel Kopecek <dkopecek@redhat.com>
55  */
56 
57 #pragma once
58 #ifndef PROBE_API_H
59 #define PROBE_API_H
60 
61 #include <stdarg.h>
62 #include <stdint.h>
63 #include <stdbool.h>
64 #include <pthread.h>
65 #include <oval_definitions.h>
67 #include <oval_results.h>
68 #include <oval_types.h>
69 #include "sexp-types.h"
70 #include "oscap_export.h"
71 #include "list.h"
72 
73 /*
74  * items
75  */
76 
88 OSCAP_API SEXP_t *probe_item_creat(const char *name, SEXP_t * attrs, ...);
89 
95 OSCAP_API SEXP_t *probe_item_new(const char *name, SEXP_t * attrs);
96 
104 OSCAP_API SEXP_t *probe_item_attr_add(SEXP_t * item, const char *name, SEXP_t * val);
105 
114 OSCAP_API SEXP_t *probe_item_ent_add(SEXP_t * item, const char *name, SEXP_t * attrs, SEXP_t * val);
115 
121 OSCAP_API int probe_item_setstatus(SEXP_t * obj, oval_syschar_status_t status);
122 
130 OSCAP_API int probe_itement_setstatus(SEXP_t * obj, const char *name, uint32_t n, oval_syschar_status_t status);
131 
135 struct id_desc_t;
136 
141 OSCAP_API void probe_item_resetidctr(struct id_desc_t *id_desc);
142 
143 #define probe_item_getent(item, name, n) probe_obj_getent (item, name, n)
144 
145 /*
146  * attributes
147  */
148 
156 OSCAP_API SEXP_t *probe_attr_creat(const char *name, const SEXP_t * val, ...);
157 
158 /*
159  * objects
160  */
161 
173 OSCAP_API SEXP_t *probe_obj_creat(const char *name, SEXP_t * attrs, ...);
174 
181 OSCAP_API SEXP_t *probe_obj_new(const char *name, SEXP_t * attrs);
182 
189 OSCAP_API SEXP_t *probe_obj_getent(const SEXP_t * obj, const char *name, uint32_t n);
190 
198 OSCAP_API SEXP_t *probe_obj_getentval(const SEXP_t * obj, const char *name, uint32_t n);
199 
209 OSCAP_API int probe_obj_getentvals(const SEXP_t * obj, const char *name, uint32_t n, SEXP_t ** res);
210 
216 OSCAP_API SEXP_t *probe_obj_getattrval(const SEXP_t * obj, const char *name);
217 
223 OSCAP_API bool probe_obj_attrexists(const SEXP_t * obj, const char *name);
224 
230 OSCAP_API int probe_obj_setstatus(SEXP_t * obj, oval_syschar_status_t status);
231 
236 OSCAP_API char *probe_obj_getname(const SEXP_t * obj);
237 
245 OSCAP_API size_t probe_obj_getname_r(const SEXP_t * obj, char *buffer, size_t buflen);
246 
247 /*
248  * collected objects
249  */
250 
251 OSCAP_API SEXP_t *probe_cobj_new(oval_syschar_collection_flag_t flag, SEXP_t *msg_list, SEXP_t *item_list, SEXP_t *mask_list);
252 OSCAP_API int probe_cobj_add_msg(SEXP_t *cobj, const SEXP_t *msg);
253 OSCAP_API SEXP_t *probe_cobj_get_msgs(const SEXP_t *cobj);
254 OSCAP_API SEXP_t *probe_cobj_get_mask(const SEXP_t *cobj);
255 OSCAP_API int probe_cobj_add_item(SEXP_t *cobj, const SEXP_t *item);
256 OSCAP_API SEXP_t *probe_cobj_get_items(const SEXP_t *cobj);
257 OSCAP_API void probe_cobj_set_flag(SEXP_t *cobj, oval_syschar_collection_flag_t flag);
258 OSCAP_API oval_syschar_collection_flag_t probe_cobj_get_flag(const SEXP_t *cobj);
262 OSCAP_API oval_syschar_collection_flag_t probe_cobj_compute_flag(SEXP_t *cobj);
263 
264 /*
265  * messages
266  */
267 
273 OSCAP_API SEXP_t *probe_msg_creat(oval_message_level_t level, char *message);
274 
281 OSCAP_API SEXP_t *probe_msg_creatf(oval_message_level_t level, const char *fmt, ...) __attribute__((format(printf, 2, 3), nonnull(2)));
282 
283 /*
284  * entities
285  */
286 
295 OSCAP_API SEXP_t *probe_ent_creat(const char *name, SEXP_t * attrs, SEXP_t * val, ...);
296 
304 OSCAP_API SEXP_t *probe_ent_creat1(const char *name, SEXP_t * attrs, SEXP_t * val);
305 
313 OSCAP_API SEXP_t *probe_ent_attr_add(SEXP_t * ent, const char *name, SEXP_t * val);
314 
320 OSCAP_API SEXP_t *probe_ent_getval(const SEXP_t * ent);
321 
329 OSCAP_API int probe_ent_getvals(const SEXP_t * ent, SEXP_t ** res);
330 
336 OSCAP_API SEXP_t *probe_ent_getattrval(const SEXP_t * ent, const char *name);
337 
343 OSCAP_API bool probe_ent_attrexists(const SEXP_t * ent, const char *name);
344 
350 OSCAP_API int probe_ent_setdatatype(SEXP_t * ent, oval_datatype_t type);
351 
356 OSCAP_API oval_datatype_t probe_ent_getdatatype(const SEXP_t * ent);
357 
363 OSCAP_API int probe_ent_setmask(SEXP_t * ent, bool mask);
364 
369 OSCAP_API bool probe_ent_getmask(const SEXP_t * ent);
370 
376 OSCAP_API int probe_ent_setstatus(SEXP_t * ent, oval_syschar_status_t status);
377 
382 OSCAP_API oval_syschar_status_t probe_ent_getstatus(const SEXP_t * ent);
383 
388 OSCAP_API char *probe_ent_getname(const SEXP_t * ent);
389 
397 OSCAP_API size_t probe_ent_getname_r(const SEXP_t * ent, char *buffer, size_t buflen);
398 
403 OSCAP_API void probe_free(SEXP_t * obj);
404 
411 OSCAP_API void probe_filebehaviors_canonicalize(SEXP_t **behaviors);
412 
419 OSCAP_API void probe_tfc54behaviors_canonicalize(SEXP_t **behaviors);
420 
421 #define PROBE_EINVAL 1
422 #define PROBE_ENOELM 2
423 #define PROBE_ENOVAL 3
424 #define PROBE_ENOATTR 4
425 #define PROBE_EINIT 5
426 #define PROBE_ENOMEM 6
427 #define PROBE_EOPNOTSUPP 7
428 #define PROBE_ERANGE 8
429 #define PROBE_EDOM 9
430 #define PROBE_EFAULT 10
431 #define PROBE_EACCESS 11
432 #define PROBE_ESETEVAL 12
433 #define PROBE_ENOENT 13
434 #define PROBE_ENOOBJ 14
435 #define PROBE_ECONNABORTED 15
436 #define PROBE_ESYSTEM 253
437 #define PROBE_EFATAL 254
438 #define PROBE_EUNKNOWN 255
440 #define PROBECMD_STE_FETCH 1
441 #define PROBECMD_OBJ_EVAL 2
442 #define PROBECMD_RESET 3
444 typedef struct probe_ctx probe_ctx;
445 
446 OSCAP_API bool probe_item_filtered(const SEXP_t *item, const SEXP_t *filters);
447 
455 OSCAP_API int probe_item_collect(probe_ctx *ctx, SEXP_t *item);
456 
463 OSCAP_API SEXP_t *probe_ctx_getobject(probe_ctx *ctx);
464 
470 OSCAP_API SEXP_t *probe_ctx_getresult(probe_ctx *ctx);
471 
472 typedef struct {
473  oval_datatype_t type;
474  void *value;
476 
477 OSCAP_API SEXP_t *probe_item_create(oval_subtype_t item_subtype, probe_elmatr_t *item_attributes[], ...);
478 
479 #define PROBE_ENT_AREF(ent, dst, attr_name, invalid_exp) \
480  do { \
481  if (((dst) = probe_ent_getattrval(ent, attr_name)) == NULL) { \
482  dE("Attribute `%s' is missing!", attr_name); \
483  invalid_exp \
484  } \
485  } while(0)
486 
487 #define PROBE_ENT_STRVAL(ent, dst, dstlen, invalid_exp, zerolen_exp) \
488  do { \
489  SEXP_t *___r; \
490  \
491  if ((___r = probe_ent_getval(ent)) == NULL) { \
492  invalid_exp \
493  } else { \
494  if (!SEXP_stringp(___r)) { \
495  SEXP_free(___r); \
496  invalid_exp \
497  } \
498  else if (SEXP_string_length(___r) == 0) { \
499  SEXP_free(___r); \
500  zerolen_exp \
501  } else { \
502  SEXP_string_cstr_r(___r, dst, dstlen); \
503  SEXP_free(___r); \
504  } \
505  } \
506  } while (0)
507 
508 #define PROBE_ENT_I32VAL(ent, dst, invalid_exp, nil_exp) \
509  do { \
510  SEXP_t *___r; \
511  \
512  if ((___r = probe_ent_getval(ent)) == NULL) { \
513  nil_exp; \
514  } else { \
515  if (!SEXP_numberp(___r)) { \
516  SEXP_free(___r); \
517  invalid_exp; \
518  } else { \
519  dst = SEXP_number_geti_32(___r); \
520  SEXP_free(___r); \
521  } \
522  } \
523  } while (0)
524 
525 #endif /* PROBE_API_H */
526 
527 OSCAP_API oval_operation_t probe_ent_getoperation(SEXP_t *entity, oval_operation_t op);
528 
529 OSCAP_API int probe_item_add_msg(SEXP_t *item, oval_message_level_t msglvl, char *msgfmt, ...);
530 
531 OSCAP_API SEXP_t *probe_entval_from_cstr(oval_datatype_t type, const char *value, size_t vallen);
532 OSCAP_API SEXP_t *probe_ent_from_cstr(const char *name, oval_datatype_t type, const char *value, size_t vallen);
533 
534 OSCAP_API oval_schema_version_t probe_obj_get_platform_schema_version(const SEXP_t *obj);
535 
540 OSCAP_API SEXP_t *probe_obj_getmask(SEXP_t *obj);
541 
547 OSCAP_API bool probe_path_is_blocked(const char *path, struct oscap_list *blocked_paths);
548 
oval_operation_t
Operations.
Definition: oval_definitions.h:84
oval_setobject_operation_t
Set operations.
Definition: oval_definitions.h:184
oval_datatype_t
Datatypes.
Definition: oval_definitions.h:149
oval_syschar_collection_flag_t
System characteristics result flag.
Definition: oval_system_characteristics.h:50
oval_message_level_t
Message level.
Definition: oval_system_characteristics.h:70
oval_syschar_status_t
System characteristics status.
Definition: oval_system_characteristics.h:61
oval_subtype_t
Unknown subtypes.
Definition: oval_types.h:127
int probe_ent_setdatatype(SEXP_t *ent, oval_datatype_t type)
Set the OVAL data type of an entity.
Definition: probe-api.c:1124
SEXP_t * probe_obj_getentval(const SEXP_t *obj, const char *name, uint32_t n)
Get the value of an object's entity.
Definition: probe-api.c:454
int probe_itement_setstatus(SEXP_t *obj, const char *name, uint32_t n, oval_syschar_status_t status)
Set status of an item's entity.
Definition: probe-api.c:206
SEXP_t * probe_ent_attr_add(SEXP_t *ent, const char *name, SEXP_t *val)
Add a new attribute to an entity.
Definition: probe-api.c:1025
SEXP_t * probe_ent_creat1(const char *name, SEXP_t *attrs, SEXP_t *val)
Create a new entity.
Definition: probe-api.c:997
SEXP_t * probe_ent_creat(const char *name, SEXP_t *attrs, SEXP_t *val,...)
Create a new list of entities.
Definition: probe-api.c:973
int probe_ent_setmask(SEXP_t *ent, bool mask)
Set entity's mask.
Definition: probe-api.c:1196
SEXP_t * probe_attr_creat(const char *name, const SEXP_t *val,...)
Create a new list of attributes.
Definition: probe-api.c:311
oval_datatype_t probe_ent_getdatatype(const SEXP_t *ent)
Get the OVAL data type of an entity.
Definition: probe-api.c:1170
SEXP_t * probe_obj_getattrval(const SEXP_t *obj, const char *name)
Get the value of an object's attribute.
Definition: probe-api.c:501
OSCAP_API SEXP_t * probe_ctx_getobject(probe_ctx *ctx)
Return reference to the input object.
Definition: probe.c:31
char * probe_obj_getname(const SEXP_t *obj)
Get the name of an object.
Definition: probe-api.c:604
SEXP_t * probe_item_creat(const char *name, SEXP_t *attrs,...)
Create a new item consisting of a name, optional attributes argument and an arbitrary number of entit...
Definition: probe-api.c:67
int probe_ent_getvals(const SEXP_t *ent, SEXP_t **res)
Get the list of values of an entity.
Definition: probe-api.c:1030
void probe_tfc54behaviors_canonicalize(SEXP_t **behaviors)
Set all of the missing attributes of the 'behaviors' entity to default values.
Definition: probe-api.c:1364
char * probe_ent_getname(const SEXP_t *ent)
Get the name of an entity.
Definition: probe-api.c:1235
oval_syschar_status_t probe_ent_getstatus(const SEXP_t *ent)
Get entity status.
Definition: probe-api.c:1218
SEXP_t * probe_item_new(const char *name, SEXP_t *attrs)
Create a new item with just a name and optional attributes argument.
Definition: probe-api.c:111
size_t probe_obj_getname_r(const SEXP_t *obj, char *buffer, size_t buflen)
Get the name of an object.
Definition: probe-api.c:609
OSCAP_API SEXP_t * probe_ctx_getresult(probe_ctx *ctx)
Return reference to the output object (aka collected object).
Definition: probe.c:36
void probe_item_resetidctr(struct id_desc_t *id_desc)
Reset the item id generator.
Definition: probe-api.c:222
SEXP_t * probe_ent_getval(const SEXP_t *ent)
Get the value of an entity.
Definition: probe-api.c:1049
size_t probe_ent_getname_r(const SEXP_t *ent, char *buffer, size_t buflen)
Get the name of an entity.
Definition: probe-api.c:1279
OSCAP_API int probe_item_collect(probe_ctx *ctx, SEXP_t *item)
Collect generated item (i.e.
Definition: icache.c:571
bool probe_ent_attrexists(const SEXP_t *ent, const char *name)
Check whether the specified attribute exists.
Definition: probe-api.c:1119
void probe_free(SEXP_t *obj)
Free the memory allocated by the probe_* functions.
Definition: probe-api.c:1323
int probe_ent_setstatus(SEXP_t *ent, oval_syschar_status_t status)
Set entity's status.
Definition: probe-api.c:1208
int probe_obj_getentvals(const SEXP_t *obj, const char *name, uint32_t n, SEXP_t **res)
Get the list of values of an object's entity.
Definition: probe-api.c:466
SEXP_t * probe_item_create(oval_subtype_t item_subtype, probe_elmatr_t *item_attributes[],...)
The order of (value_name, value_type, *value) argument tuples passed as e.g.
Definition: probe-api.c:1411
SEXP_t * probe_item_attr_add(SEXP_t *item, const char *name, SEXP_t *val)
Add a new attribute to an item.
Definition: probe-api.c:137
bool probe_path_is_blocked(const char *path, struct oscap_list *blocked_paths)
Check if the given path matches any of the paths in the blocked paths list.
Definition: probe-api.c:1798
int probe_item_setstatus(SEXP_t *obj, oval_syschar_status_t status)
Set item's status.
Definition: probe-api.c:194
int probe_obj_setstatus(SEXP_t *obj, oval_syschar_status_t status)
Set objects's status.
Definition: probe-api.c:594
SEXP_t * probe_obj_creat(const char *name, SEXP_t *attrs,...)
Create a new object consisting of a name, optional attributes argument and an arbitrary number of ent...
Definition: probe-api.c:344
SEXP_t * probe_msg_creat(oval_message_level_t level, char *message)
Create a new message that can be added to a collected object.
Definition: probe-api.c:918
SEXP_t * probe_obj_getmask(SEXP_t *obj)
Get object entity mask.
Definition: probe-api.c:1765
SEXP_t * probe_obj_new(const char *name, SEXP_t *attrs)
Create a new object with just a name and optional attributes argument.
Definition: probe-api.c:387
SEXP_t * probe_item_ent_add(SEXP_t *item, const char *name, SEXP_t *attrs, SEXP_t *val)
Add a new entity to an item.
Definition: probe-api.c:183
void probe_filebehaviors_canonicalize(SEXP_t **behaviors)
Set all of the missing attributes of the 'behaviors' entity to default values.
Definition: probe-api.c:1328
SEXP_t * probe_msg_creatf(oval_message_level_t level, const char *fmt,...)
Create a new message that can be added to a collected object.
Definition: probe-api.c:932
bool probe_ent_getmask(const SEXP_t *ent)
Get entity's mask.
Definition: probe-api.c:1202
SEXP_t * probe_ent_getattrval(const SEXP_t *ent, const char *name)
Get the value of an entity's attribute.
Definition: probe-api.c:1074
SEXP_t * probe_obj_getent(const SEXP_t *obj, const char *name, uint32_t n)
Get an entity from an object.
Definition: probe-api.c:411
bool probe_obj_attrexists(const SEXP_t *obj, const char *name)
Check whether the specified attribute exists.
Definition: probe-api.c:547
Definition: sexp-types.h:82
Holds information for item ids generation.
Definition: _probe-api.h:44
Definition: list.h:53
Definition: oval_schema_version.h:41
Definition: probe.h:89
SEXP_t * filters
object filters (OVAL 5.8 and higher)
Definition: probe.h:92
Definition: probe-api.h:472