00001
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 #pragma once
00058 #ifndef PROBE_API_H
00059 #define PROBE_API_H
00060
00061 #include <seap.h>
00062 #include <stdarg.h>
00063 #include <stdint.h>
00064 #include <stdbool.h>
00065 #include <pthread.h>
00066 #include <oval_definitions.h>
00067 #include <oval_system_characteristics.h>
00068 #include <oval_results.h>
00069 #include <oval_types.h>
00070
00071
00072
00073
00074
00079 SEXP_t *probe_item_build(const char *fmt, ...);
00080
00081
00093 SEXP_t *probe_item_creat(const char *name, SEXP_t * attrs, ...);
00094
00100 SEXP_t *probe_item_new(const char *name, SEXP_t * attrs);
00101
00109 SEXP_t *probe_item_attr_add(SEXP_t * item, const char *name, SEXP_t * val);
00110
00119 SEXP_t *probe_item_ent_add(SEXP_t * item, const char *name, SEXP_t * attrs, SEXP_t * val);
00120
00126 int probe_item_setstatus(SEXP_t * obj, oval_syschar_status_t status);
00127
00135 int probe_itement_setstatus(SEXP_t * obj, const char *name, uint32_t n, oval_syschar_status_t status);
00136
00140 struct id_desc_t;
00141
00147 SEXP_t *probe_item_newid(struct id_desc_t *id_desc);
00148
00153 void probe_item_resetidctr(struct id_desc_t *id_desc);
00154
00155 #define probe_item_getent(item, name, n) probe_obj_getent (item, name, n)
00156
00157
00158
00159
00160
00168 SEXP_t *probe_attr_creat(const char *name, const SEXP_t * val, ...);
00169
00170
00171
00172
00173
00178 SEXP_t *probe_obj_build(const char *fmt, ...);
00179
00191 SEXP_t *probe_obj_creat(const char *name, SEXP_t * attrs, ...);
00192
00199 SEXP_t *probe_obj_new(const char *name, SEXP_t * attrs);
00200
00207 SEXP_t *probe_obj_getent(const SEXP_t * obj, const char *name, uint32_t n);
00208
00216 SEXP_t *probe_obj_getentval(const SEXP_t * obj, const char *name, uint32_t n);
00217
00227 int probe_obj_getentvals(const SEXP_t * obj, const char *name, uint32_t n, SEXP_t ** res);
00228
00234 SEXP_t *probe_obj_getattrval(const SEXP_t * obj, const char *name);
00235
00241 bool probe_obj_attrexists(const SEXP_t * obj, const char *name);
00242
00248 int probe_obj_setstatus(SEXP_t * obj, oval_syschar_status_t status);
00249
00257 int probe_objent_setstatus(SEXP_t * obj, const char *name, uint32_t n, oval_syschar_status_t status);
00258
00263 char *probe_obj_getname(const SEXP_t * obj);
00264
00272 size_t probe_obj_getname_r(const SEXP_t * obj, char *buffer, size_t buflen);
00273
00274
00275
00276
00277
00278 SEXP_t *probe_cobj_new(oval_syschar_collection_flag_t flag, SEXP_t *msg_list, SEXP_t *item_list, SEXP_t *mask_list);
00279 int probe_cobj_add_msg(SEXP_t *cobj, const SEXP_t *msg);
00280 SEXP_t *probe_cobj_get_msgs(const SEXP_t *cobj);
00281 SEXP_t *probe_cobj_get_mask(const SEXP_t *cobj);
00282 int probe_cobj_add_item(SEXP_t *cobj, const SEXP_t *item);
00283 SEXP_t *probe_cobj_get_items(const SEXP_t *cobj);
00284 void probe_cobj_set_flag(SEXP_t *cobj, oval_syschar_collection_flag_t flag);
00285 oval_syschar_collection_flag_t probe_cobj_get_flag(const SEXP_t *cobj);
00286 oval_syschar_collection_flag_t probe_cobj_combine_flags(oval_syschar_collection_flag_t f1,
00287 oval_syschar_collection_flag_t f2,
00288 oval_setobject_operation_t op);
00289 oval_syschar_collection_flag_t probe_cobj_compute_flag(SEXP_t *cobj);
00290
00291
00292
00293
00294
00300 SEXP_t *probe_msg_creat(oval_message_level_t level, char *message);
00301
00308 SEXP_t *probe_msg_creatf(oval_message_level_t level, const char *fmt, ...) __attribute__((format(printf, 2, 3), nonnull(2)));
00309
00310
00311
00312
00313
00322 SEXP_t *probe_ent_creat(const char *name, SEXP_t * attrs, SEXP_t * val, ...);
00323
00331 SEXP_t *probe_ent_creat1(const char *name, SEXP_t * attrs, SEXP_t * val);
00332
00340 SEXP_t *probe_ent_attr_add(SEXP_t * ent, const char *name, SEXP_t * val);
00341
00347 SEXP_t *probe_ent_getval(const SEXP_t * ent);
00348
00356 int probe_ent_getvals(const SEXP_t * ent, SEXP_t ** res);
00357
00363 SEXP_t *probe_ent_getattrval(const SEXP_t * ent, const char *name);
00364
00370 bool probe_ent_attrexists(const SEXP_t * ent, const char *name);
00371
00377 int probe_ent_setdatatype(SEXP_t * ent, oval_datatype_t type);
00378
00383 oval_datatype_t probe_ent_getdatatype(const SEXP_t * ent);
00384
00390 int probe_ent_setmask(SEXP_t * ent, bool mask);
00391
00396 bool probe_ent_getmask(const SEXP_t * ent);
00397
00403 int probe_ent_setstatus(SEXP_t * ent, oval_syschar_status_t status);
00404
00409 oval_syschar_status_t probe_ent_getstatus(const SEXP_t * ent);
00410
00415 char *probe_ent_getname(const SEXP_t * ent);
00416
00424 size_t probe_ent_getname_r(const SEXP_t * ent, char *buffer, size_t buflen);
00425
00430 void probe_free(SEXP_t * obj);
00431
00438 void probe_filebehaviors_canonicalize(SEXP_t **behaviors);
00439
00446 void probe_tfc54behaviors_canonicalize(SEXP_t **behaviors);
00447
00448 #define PROBE_EINVAL 1
00449 #define PROBE_ENOELM 2
00450 #define PROBE_ENOVAL 3
00451 #define PROBE_ENOATTR 4
00452 #define PROBE_EINIT 5
00453 #define PROBE_ENOMEM 6
00454 #define PROBE_EOPNOTSUPP 7
00455 #define PROBE_ERANGE 8
00456 #define PROBE_EDOM 9
00457 #define PROBE_EFAULT 10
00458 #define PROBE_EACCESS 11
00459 #define PROBE_ESETEVAL 12
00460 #define PROBE_ENOENT 13
00461 #define PROBE_ENOOBJ 14
00462 #define PROBE_ECONNABORTED 15
00463 #define PROBE_ESYSTEM 253
00464 #define PROBE_EFATAL 254
00465 #define PROBE_EUNKNOWN 255
00467 #define PROBECMD_STE_FETCH 1
00468 #define PROBECMD_OBJ_EVAL 2
00469 #define PROBECMD_RESET 3
00471 void *probe_init(void) __attribute__ ((unused));
00472 void probe_fini(void *) __attribute__ ((unused));
00473
00474 typedef struct probe_ctx probe_ctx;
00475
00476 int probe_main(probe_ctx *, void *) __attribute__ ((nonnull(1)));
00477
00478 bool probe_item_filtered(const SEXP_t *item, const SEXP_t *filters);
00479
00480 int probe_result_additem(SEXP_t *result, SEXP_t *item);
00481
00489 int probe_item_collect(probe_ctx *ctx, SEXP_t *item);
00490
00497 SEXP_t *probe_ctx_getobject(probe_ctx *ctx);
00498
00504 SEXP_t *probe_ctx_getresult(probe_ctx *ctx);
00505
00506 typedef struct {
00507 oval_datatype_t type;
00508 void *value;
00509 } probe_elmatr_t;
00510
00511 SEXP_t *probe_item_create(oval_subtype_t item_subtype, probe_elmatr_t *item_attributes[], ...);
00512
00513 #define PROBE_ENT_AREF(ent, dst, attr_name, invalid_exp) \
00514 do { \
00515 if (((dst) = probe_ent_getattrval(ent, attr_name)) == NULL) { \
00516 dE("Attribute `%s' is missing!\n", attr_name); \
00517 invalid_exp \
00518 } \
00519 } while(0)
00520
00521 #define PROBE_ENT_STRVAL(ent, dst, dstlen, invalid_exp, zerolen_exp) \
00522 do { \
00523 SEXP_t *___r; \
00524 \
00525 if ((___r = probe_ent_getval(ent)) == NULL) { \
00526 dW("Entity has no value!\n"); \
00527 invalid_exp \
00528 } else { \
00529 if (!SEXP_stringp(___r)) { \
00530 dE("Invalid type\n"); \
00531 SEXP_free(___r); \
00532 invalid_exp \
00533 } \
00534 else if (SEXP_string_length(___r) == 0) { \
00535 SEXP_free(___r); \
00536 zerolen_exp \
00537 } else { \
00538 SEXP_string_cstr_r(___r, dst, dstlen); \
00539 SEXP_free(___r); \
00540 } \
00541 } \
00542 } while (0)
00543
00544 #define PROBE_ENT_I32VAL(ent, dst, invalid_exp, nil_exp) \
00545 do { \
00546 SEXP_t *___r; \
00547 \
00548 if ((___r = probe_ent_getval(ent)) == NULL) { \
00549 dW("Entity has no value!\n"); \
00550 nil_exp; \
00551 } else { \
00552 if (!SEXP_numberp(___r)) { \
00553 dE("Invalid type\n"); \
00554 SEXP_free(___r); \
00555 invalid_exp; \
00556 } else { \
00557 dst = SEXP_number_geti_32(___r); \
00558 SEXP_free(___r); \
00559 } \
00560 } \
00561 } while (0)
00562
00563 #endif
00564
00565 oval_operation_t probe_ent_getoperation(SEXP_t *entity, oval_operation_t op);
00566
00567 int probe_item_add_msg(SEXP_t *item, oval_message_level_t msglvl, char *msgfmt, ...);
00568
00569 SEXP_t *probe_entval_from_cstr(oval_datatype_t type, const char *value, size_t vallen);
00570 SEXP_t *probe_ent_from_cstr(const char *name, oval_datatype_t type, const char *value, size_t vallen);
00571
00572 oval_version_t probe_obj_get_schema_version(const SEXP_t *obj);
00573
00578 SEXP_t *probe_obj_getmask(SEXP_t *obj);
00579