00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef CPELANG_H_
00037 #define CPELANG_H_
00038
00039 #include <stdlib.h>
00040
00041 #include "cpe_name.h"
00042 #include "oscap.h"
00043 #include "oscap_text.h"
00044 #include "oscap_source.h"
00045
00049 typedef enum {
00050 CPE_LANG_OPER_INVALID = 0x00,
00051 CPE_LANG_OPER_AND = 0x01,
00052 CPE_LANG_OPER_OR = 0x02,
00053 CPE_LANG_OPER_MATCH = 0x04,
00054 CPE_LANG_OPER_CHECK = 0x08,
00055
00056 CPE_LANG_OPER_MASK = 0xFF,
00057 CPE_LANG_OPER_NOT = 0x100,
00058
00059 CPE_LANG_OPER_NAND = CPE_LANG_OPER_AND | CPE_LANG_OPER_NOT,
00060 CPE_LANG_OPER_NOR = CPE_LANG_OPER_OR | CPE_LANG_OPER_NOT,
00061 } cpe_lang_oper_t;
00062
00067 struct cpe_lang_model;
00068
00073 struct cpe_platform;
00074
00079 struct cpe_testexpr;
00080
00081
00082
00093 struct cpe_platform_iterator;
00094
00096 struct cpe_platform *cpe_platform_iterator_next(struct cpe_platform_iterator *it);
00098 bool cpe_platform_iterator_has_more(struct cpe_platform_iterator *it);
00100 void cpe_platform_iterator_free(struct cpe_platform_iterator *it);
00101
00107 struct cpe_testexpr_iterator;
00109 struct cpe_testexpr *cpe_testexpr_iterator_next(struct cpe_testexpr_iterator *it);
00111 bool cpe_testexpr_iterator_has_more(struct cpe_testexpr_iterator *it);
00113 void cpe_testexpr_iterator_free(struct cpe_testexpr_iterator *it);
00114
00115
00118
00130 cpe_lang_oper_t cpe_testexpr_get_oper(const struct cpe_testexpr *item);
00131
00137 struct cpe_testexpr_iterator *cpe_testexpr_get_meta_expr(const struct cpe_testexpr *item);
00138
00144 const struct cpe_name *cpe_testexpr_get_meta_cpe(const struct cpe_testexpr *item);
00145
00151 const char* cpe_testexpr_get_meta_check_system(const struct cpe_testexpr *item);
00152
00158 const char* cpe_testexpr_get_meta_check_href(const struct cpe_testexpr *item);
00159
00165 const char* cpe_testexpr_get_meta_check_id(const struct cpe_testexpr *item);
00166
00172 const struct cpe_testexpr *cpe_testexpr_get_next(const struct cpe_testexpr *expr);
00173
00178 struct cpe_platform_iterator *cpe_lang_model_get_platforms(const struct cpe_lang_model *item);
00179
00184 struct cpe_platform *cpe_lang_model_get_item(const struct cpe_lang_model *item, const char *key);
00185
00194 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);
00195
00200 const char *cpe_platform_get_id(const struct cpe_platform *item);
00205 const char *cpe_platform_get_remark(const struct cpe_platform *item);
00210 struct oscap_text_iterator *cpe_platform_get_titles(const struct cpe_platform *item);
00215 const struct cpe_testexpr *cpe_platform_get_expr(const struct cpe_platform *item);
00216
00217
00220
00232 bool cpe_lang_model_add_platform(struct cpe_lang_model *lang, struct cpe_platform *platform);
00237 bool cpe_platform_add_title(struct cpe_platform *platform, struct oscap_text *title);
00238
00243
00244
00251 bool cpe_testexpr_add_subexpression(struct cpe_testexpr *expr, struct cpe_testexpr *sub);
00252
00257 bool cpe_platform_set_id(struct cpe_platform *platform, const char *new_id);
00262 bool cpe_platform_set_remark(struct cpe_platform *platform, const char *new_remark);
00269 bool cpe_platform_set_expr(struct cpe_platform *platform, struct cpe_testexpr *expr);
00276 bool cpe_testexpr_set_oper(struct cpe_testexpr *expr, cpe_lang_oper_t oper);
00277
00285 bool cpe_testexpr_set_name(struct cpe_testexpr *expr, struct cpe_name *name);
00286
00287
00290
00291 void cpe_platform_iterator_remove(struct cpe_platform_iterator *it, struct cpe_lang_model *parent);
00293 void cpe_platform_iterator_reset(struct cpe_platform_iterator *it);
00294
00299 struct cpe_lang_model *cpe_lang_model_new(void);
00300
00305 struct cpe_testexpr *cpe_testexpr_new(void);
00306
00311 struct cpe_platform *cpe_platform_new(void);
00312
00318 struct cpe_testexpr * cpe_testexpr_clone(struct cpe_testexpr * old_expr);
00319
00324 void cpe_testexpr_free(struct cpe_testexpr *expr);
00325
00330 void cpe_testexpr_iterator_reset(struct cpe_testexpr_iterator *it);
00331
00336 void cpe_lang_model_free(struct cpe_lang_model *platformspec);
00337
00342 void cpe_platform_free(struct cpe_platform *platform);
00343
00344
00355 const char * cpe_lang_model_supported(void);
00356
00363 OSCAP_DEPRECATED(char * cpe_lang_model_detect_version(const char* file));
00364
00372 bool cpe_platform_match_cpe(struct cpe_name **cpe, size_t n, const struct cpe_platform *platform);
00373
00374
00383 OSCAP_DEPRECATED(struct cpe_lang_model *cpe_lang_model_import(const char *file));
00384
00389 struct cpe_lang_model *cpe_lang_model_import_source(struct oscap_source *source);
00390
00396 bool cpe_lang_model_set_origin_file(struct cpe_lang_model* lang_model, const char* origin_file);
00397
00405 const char* cpe_lang_model_get_origin_file(const struct cpe_lang_model* lang_model);
00406
00413 void cpe_lang_model_export(const struct cpe_lang_model *spec, const char *file);
00414
00419 #endif