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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 <seap.h>
62 #include <stdarg.h>
63 #include <stdint.h>
64 #include <stdbool.h>
65 #include <pthread.h>
66 #include <oval_definitions.h>
67 #include <oval_system_characteristics.h>
68 #include <oval_results.h>
69 #include <oval_types.h>
70
71 /*
72 * items
73 */
74
79 SEXP_t *probe_item_build(const char *fmt, ...);
80
81 /* SEXP_t *probe_item_creat (const char *name, SEXP_t *attrs, ...); */
93 SEXP_t *probe_item_creat(const char *name, SEXP_t * attrs, ...);
94
100 SEXP_t *probe_item_new(const char *name, SEXP_t * attrs);
101
109 SEXP_t *probe_item_attr_add(SEXP_t * item, const char *name, SEXP_t * val);
110
119 SEXP_t *probe_item_ent_add(SEXP_t * item, const char *name, SEXP_t * attrs, SEXP_t * val);
120
126 int probe_item_setstatus(SEXP_t * obj, oval_syschar_status_t status);
127
135 int probe_itement_setstatus(SEXP_t * obj, const char *name, uint32_t n, oval_syschar_status_t status);
136
140 struct id_desc_t;
141
147 SEXP_t *probe_item_newid(struct id_desc_t *id_desc);
148
153 void probe_item_resetidctr(struct id_desc_t *id_desc);
154
155 #define probe_item_getent(item, name, n) probe_obj_getent (item, name, n)
156
157 /*
158 * attributes
159 */
160
168 SEXP_t *probe_attr_creat(const char *name, const SEXP_t * val, ...);
169
170 /*
171 * objects
172 */
173
178 SEXP_t *probe_obj_build(const char *fmt, ...);
179
191 SEXP_t *probe_obj_creat(const char *name, SEXP_t * attrs, ...);
192
199 SEXP_t *probe_obj_new(const char *name, SEXP_t * attrs);
200
207 SEXP_t *probe_obj_getent(const SEXP_t * obj, const char *name, uint32_t n);
208
216 SEXP_t *probe_obj_getentval(const SEXP_t * obj, const char *name, uint32_t n);
217
227 int probe_obj_getentvals(const SEXP_t * obj, const char *name, uint32_t n, SEXP_t ** res);
228
234 SEXP_t *probe_obj_getattrval(const SEXP_t * obj, const char *name);
235
241 bool probe_obj_attrexists(const SEXP_t * obj, const char *name);
242
248 int probe_obj_setstatus(SEXP_t * obj, oval_syschar_status_t status);
249
257 int probe_objent_setstatus(SEXP_t * obj, const char *name, uint32_t n, oval_syschar_status_t status);
258
263 char *probe_obj_getname(const SEXP_t * obj);
264
272 size_t probe_obj_getname_r(const SEXP_t * obj, char *buffer, size_t buflen);
273
274 /*
275 * collected objects
276 */
277
278 SEXP_t *probe_cobj_new(oval_syschar_collection_flag_t flag, SEXP_t *msg_list, SEXP_t *item_list, SEXP_t *mask_list);
279 int probe_cobj_add_msg(SEXP_t *cobj, const SEXP_t *msg);
280 SEXP_t *probe_cobj_get_msgs(const SEXP_t *cobj);
281 SEXP_t *probe_cobj_get_mask(const SEXP_t *cobj);
282 int probe_cobj_add_item(SEXP_t *cobj, const SEXP_t *item);
283 SEXP_t *probe_cobj_get_items(const SEXP_t *cobj);
284 void probe_cobj_set_flag(SEXP_t *cobj, oval_syschar_collection_flag_t flag);
285 oval_syschar_collection_flag_t probe_cobj_get_flag(const SEXP_t *cobj);
286 oval_syschar_collection_flag_t probe_cobj_combine_flags(oval_syschar_collection_flag_t f1,
287 oval_syschar_collection_flag_t f2,
288 oval_setobject_operation_t op);
289 oval_syschar_collection_flag_t probe_cobj_compute_flag(SEXP_t *cobj);
290
291 /*
292 * messages
293 */
294
300 SEXP_t *probe_msg_creat(oval_message_level_t level, char *message);
301
308 SEXP_t *probe_msg_creatf(oval_message_level_t level, const char *fmt, ...) __attribute__((format(printf, 2, 3), nonnull(2)));
309
310 /*
311 * entities
312 */
313
322 SEXP_t *probe_ent_creat(const char *name, SEXP_t * attrs, SEXP_t * val, ...);
323
331 SEXP_t *probe_ent_creat1(const char *name, SEXP_t * attrs, SEXP_t * val);
332
340 SEXP_t *probe_ent_attr_add(SEXP_t * ent, const char *name, SEXP_t * val);
341
347 SEXP_t *probe_ent_getval(const SEXP_t * ent);
348
356 int probe_ent_getvals(const SEXP_t * ent, SEXP_t ** res);
357
363 SEXP_t *probe_ent_getattrval(const SEXP_t * ent, const char *name);
364
370 bool probe_ent_attrexists(const SEXP_t * ent, const char *name);
371
377 int probe_ent_setdatatype(SEXP_t * ent, oval_datatype_t type);
378
383 oval_datatype_t probe_ent_getdatatype(const SEXP_t * ent);
384
390 int probe_ent_setmask(SEXP_t * ent, bool mask);
391
396 bool probe_ent_getmask(const SEXP_t * ent);
397
403 int probe_ent_setstatus(SEXP_t * ent, oval_syschar_status_t status);
404
409 oval_syschar_status_t probe_ent_getstatus(const SEXP_t * ent);
410
415 char *probe_ent_getname(const SEXP_t * ent);
416
424 size_t probe_ent_getname_r(const SEXP_t * ent, char *buffer, size_t buflen);
425
430 void probe_free(SEXP_t * obj);
431
438 void probe_filebehaviors_canonicalize(SEXP_t **behaviors);
439
446 void probe_tfc54behaviors_canonicalize(SEXP_t **behaviors);
447
448 #define PROBE_EINVAL 1
449 #define PROBE_ENOELM 2
450 #define PROBE_ENOVAL 3
451 #define PROBE_ENOATTR 4
452 #define PROBE_EINIT 5
453 #define PROBE_ENOMEM 6
454 #define PROBE_EOPNOTSUPP 7
455 #define PROBE_ERANGE 8
456 #define PROBE_EDOM 9
457 #define PROBE_EFAULT 10
458 #define PROBE_EACCESS 11
459 #define PROBE_ESETEVAL 12
460 #define PROBE_ENOENT 13
461 #define PROBE_ENOOBJ 14
462 #define PROBE_ECONNABORTED 15
463 #define PROBE_ESYSTEM 253
464 #define PROBE_EFATAL 254
465 #define PROBE_EUNKNOWN 255
467 #define PROBECMD_STE_FETCH 1
468 #define PROBECMD_OBJ_EVAL 2
469 #define PROBECMD_RESET 3
472 int probe_offline_mode_supported(void);
473 void probe_preload(void);
474 void *probe_init(void) __attribute__ ((unused));
475 void probe_fini(void *) __attribute__ ((unused));
476
477 typedef struct probe_ctx probe_ctx;
478
479 int probe_main(probe_ctx *, void *) __attribute__ ((nonnull(1)));
480
481 bool probe_item_filtered(const SEXP_t *item, const SEXP_t *filters);
482
483 int probe_result_additem(SEXP_t *result, SEXP_t *item);
484
492 int probe_item_collect(probe_ctx *ctx, SEXP_t *item);
493
500 SEXP_t *probe_ctx_getobject(probe_ctx *ctx);
501
507 SEXP_t *probe_ctx_getresult(probe_ctx *ctx);
508
509 typedef struct {
510 oval_datatype_t type;
511 void *value;
512 } probe_elmatr_t;
513
514 SEXP_t *probe_item_create(oval_subtype_t item_subtype, probe_elmatr_t *item_attributes[], ...);
515
516 #define PROBE_ENT_AREF(ent, dst, attr_name, invalid_exp) \
517 do { \
518 if (((dst) = probe_ent_getattrval(ent, attr_name)) == NULL) { \
519 dE("Attribute `%s' is missing!", attr_name); \
520 invalid_exp \
521 } \
522 } while(0)
523
524 #define PROBE_ENT_STRVAL(ent, dst, dstlen, invalid_exp, zerolen_exp) \
525 do { \
526 SEXP_t *___r; \
527 \
528 if ((___r = probe_ent_getval(ent)) == NULL) { \
529 dW("Entity has no value!"); \
530 invalid_exp \
531 } else { \
532 if (!SEXP_stringp(___r)) { \
533 dE("Invalid type"); \
534 SEXP_free(___r); \
535 invalid_exp \
536 } \
537 else if (SEXP_string_length(___r) == 0) { \
538 SEXP_free(___r); \
539 zerolen_exp \
540 } else { \
541 SEXP_string_cstr_r(___r, dst, dstlen); \
542 SEXP_free(___r); \
543 } \
544 } \
545 } while (0)
546
547 #define PROBE_ENT_I32VAL(ent, dst, invalid_exp, nil_exp) \
548 do { \
549 SEXP_t *___r; \
550 \
551 if ((___r = probe_ent_getval(ent)) == NULL) { \
552 dW("Entity has no value!"); \
553 nil_exp; \
554 } else { \
555 if (!SEXP_numberp(___r)) { \
556 dE("Invalid type"); \
557 SEXP_free(___r); \
558 invalid_exp; \
559 } else { \
560 dst = SEXP_number_geti_32(___r); \
561 SEXP_free(___r); \
562 } \
563 } \
564 } while (0)
565
566 #endif /* PROBE_API_H */
567
568 oval_operation_t probe_ent_getoperation(SEXP_t *entity, oval_operation_t op);
569
570 int probe_item_add_msg(SEXP_t *item, oval_message_level_t msglvl, char *msgfmt, ...);
571
572 SEXP_t *probe_entval_from_cstr(oval_datatype_t type, const char *value, size_t vallen);
573 SEXP_t *probe_ent_from_cstr(const char *name, oval_datatype_t type, const char *value, size_t vallen);
574
575 OSCAP_DEPRECATED(oval_version_t probe_obj_get_schema_version(const SEXP_t *obj));
576 oval_schema_version_t probe_obj_get_platform_schema_version(const SEXP_t *obj);
577
582 SEXP_t *probe_obj_getmask(SEXP_t *obj);
583
probe_msg_creat
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:921
probe_ent_getdatatype
oval_datatype_t probe_ent_getdatatype(const SEXP_t *ent)
Get the OVAL data type of an entity.
Definition: probe-api.c:1157
probe_item_attr_add
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:129
oval_operation_t
oval_operation_t
Operations.
Definition: oval_definitions.h:84
probe_obj_getentvals
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&#39;s entity.
Definition: probe-api.c:460
oval_subtype_t
oval_subtype_t
Unknown subtypes.
Definition: oval_types.h:120
probe_init
void * probe_init(void) __attribute__((unused))
Dummy probe_fini function.
Definition: filehash.c:192
probe_obj_build
SEXP_t * probe_obj_build(const char *fmt,...)
Build a new object according to the specified format.
probe_ent_getstatus
oval_syschar_status_t probe_ent_getstatus(const SEXP_t *ent)
Get entity status.
Definition: probe-api.c:1205
oval_types.h
probe_itement_setstatus
int probe_itement_setstatus(SEXP_t *obj, const char *name, uint32_t n, oval_syschar_status_t status)
Set status of an item&#39;s entity.
Definition: probe-api.c:201
OSCAP_DEPRECATED
#define OSCAP_DEPRECATED(func)
This macro will warn, when a deprecated function is used.
Definition: oscap.h:50
probe_ent_attr_add
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:1012
probe_item_creat
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:60
oval_syschar_status_t
oval_syschar_status_t
System characteristics status.
Definition: oval_system_characteristics.h:60
probe_obj_creat
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:338
probe_obj_attrexists
bool probe_obj_attrexists(const SEXP_t *obj, const char *name)
Check whether the specified attribute exists.
Definition: probe-api.c:552
probe_ent_creat1
SEXP_t * probe_ent_creat1(const char *name, SEXP_t *attrs, SEXP_t *val)
Create a new entity.
Definition: probe-api.c:984
probe_item_new
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:104
probe_ent_setstatus
int probe_ent_setstatus(SEXP_t *ent, oval_syschar_status_t status)
Set entity&#39;s status.
Definition: probe-api.c:1195
probe_ctx_getobject
SEXP_t * probe_ctx_getobject(probe_ctx *ctx)
Return reference to the input object.
Definition: probe.c:31
probe_ctx::filters
SEXP_t * filters
object filters (OVAL 5.8 and higher)
Definition: probe.h:73
__attribute__
Definition: _sexp-value.h:42
oval_datatype_t
oval_datatype_t
Datatypes.
Definition: oval_definitions.h:149
probe_obj_getent
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:405
probe_ctx
Definition: probe.h:70
probe_filebehaviors_canonicalize
void probe_filebehaviors_canonicalize(SEXP_t **behaviors)
Set all of the missing attributes of the &#39;behaviors&#39; entity to default values.
Definition: probe-api.c:1315
probe_ent_getname_r
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:1266
probe_fini
void probe_fini(void *) __attribute__((unused))
Dummy probe_fini function.
Definition: filehash.c:214
probe_obj_getname_r
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:614
probe_obj_getname
char * probe_obj_getname(const SEXP_t *obj)
Get the name of an object.
Definition: probe-api.c:609
probe_obj_getmask
SEXP_t * probe_obj_getmask(SEXP_t *obj)
Get object entity mask.
Definition: probe-api.c:1752
probe_objent_setstatus
int probe_objent_setstatus(SEXP_t *obj, const char *name, uint32_t n, oval_syschar_status_t status)
Set status of an object&#39;s entity.
probe_item_resetidctr
void probe_item_resetidctr(struct id_desc_t *id_desc)
Reset the item id generator.
Definition: probe-api.c:217
probe_tfc54behaviors_canonicalize
void probe_tfc54behaviors_canonicalize(SEXP_t **behaviors)
Set all of the missing attributes of the &#39;behaviors&#39; entity to default values.
Definition: probe-api.c:1351
probe_ent_setdatatype
int probe_ent_setdatatype(SEXP_t *ent, oval_datatype_t type)
Set the OVAL data type of an entity.
Definition: probe-api.c:1111
probe_ent_getattrval
SEXP_t * probe_ent_getattrval(const SEXP_t *ent, const char *name)
Get the value of an entity&#39;s attribute.
Definition: probe-api.c:1061
probe_item_setstatus
int probe_item_setstatus(SEXP_t *obj, oval_syschar_status_t status)
Set item&#39;s status.
Definition: probe-api.c:189
probe_msg_creatf
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:934
probe_attr_creat
SEXP_t * probe_attr_creat(const char *name, const SEXP_t *val,...)
Create a new list of attributes.
Definition: probe-api.c:305
probe_ctx_getresult
SEXP_t * probe_ctx_getresult(probe_ctx *ctx)
Return reference to the output object (aka collected object).
Definition: probe.c:36
probe_obj_new
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:381
probe_obj_getattrval
SEXP_t * probe_obj_getattrval(const SEXP_t *obj, const char *name)
Get the value of an object&#39;s attribute.
Definition: probe-api.c:506
probe_item_collect
int probe_item_collect(probe_ctx *ctx, SEXP_t *item)
Collect generated item (i.e.
Definition: icache.c:516
probe_ent_getval
SEXP_t * probe_ent_getval(const SEXP_t *ent)
Get the value of an entity.
Definition: probe-api.c:1036
probe_item_newid
SEXP_t * probe_item_newid(struct id_desc_t *id_desc)
Get a new unique id (within a probe) for an item.
oval_setobject_operation_t
oval_setobject_operation_t
Set operations.
Definition: oval_definitions.h:184
probe_obj_getentval
SEXP_t * probe_obj_getentval(const SEXP_t *obj, const char *name, uint32_t n)
Get the value of an object&#39;s entity.
Definition: probe-api.c:448
probe_preload
void probe_preload(void)
Dummy probe_preload function.
Definition: preload.c:38
probe_item_build
SEXP_t * probe_item_build(const char *fmt,...)
Build a new item according to the specified format.
probe_ent_getname
char * probe_ent_getname(const SEXP_t *ent)
Get the name of an entity.
Definition: probe-api.c:1222
probe_ent_attrexists
bool probe_ent_attrexists(const SEXP_t *ent, const char *name)
Check whether the specified attribute exists.
Definition: probe-api.c:1106
probe_ent_getmask
bool probe_ent_getmask(const SEXP_t *ent)
Get entity&#39;s mask.
Definition: probe-api.c:1189
probe_ent_getvals
int probe_ent_getvals(const SEXP_t *ent, SEXP_t **res)
Get the list of values of an entity.
Definition: probe-api.c:1017
oval_system_characteristics.h
oval_syschar_collection_flag_t
oval_syschar_collection_flag_t
System characteristics result flag.
Definition: oval_system_characteristics.h:49
SEXP
Definition: sexp-types.h:82
oval_schema_version_t
Definition: oval_schema_version.h:39
oval_message_level_t
oval_message_level_t
Message level.
Definition: oval_system_characteristics.h:69
oval_definitions.h
id_desc_t
Holds information for item ids generation.
Definition: _probe-api.h:44
probe_elmatr_t
Definition: probe-api.h:509
probe_obj_setstatus
int probe_obj_setstatus(SEXP_t *obj, oval_syschar_status_t status)
Set objects&#39;s status.
Definition: probe-api.c:599
probe_ent_setmask
int probe_ent_setmask(SEXP_t *ent, bool mask)
Set entity&#39;s mask.
Definition: probe-api.c:1183
oval_results.h
probe_free
void probe_free(SEXP_t *obj)
Free the memory allocated by the probe_* functions.
Definition: probe-api.c:1310
probe_ent_creat
SEXP_t * probe_ent_creat(const char *name, SEXP_t *attrs, SEXP_t *val,...)
Create a new list of entities.
Definition: probe-api.c:960
probe_item_ent_add
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:178