struct oval_message *oval_message_clone(struct oval_message *old_message) { struct oval_message *new_message = oval_message_new(); oval_message_level_t level = oval_message_get_level(old_message); oval_message_set_level(new_message, level); char *text = oval_message_get_text(old_message); oval_message_set_text(new_message, oscap_strdup(text)); return new_message; }
int oval_message_parse_tag(xmlTextReaderPtr reader, struct oval_parser_context *context, oscap_consumer_func consumer, void *client) { int return_code = 0; struct oval_message *message = oval_message_new(); /* message->level */ oval_message_set_level(message, oval_message_level_parse(reader, "level", OVAL_MESSAGE_LEVEL_INFO)); /* message->text */ return_code = oval_parser_text_value(reader, context, &oval_message_parse_tag_consumer, message); if (return_code == 0) (*consumer) (message, client); return return_code; }
static struct oval_message *oval_sexp_to_msg(const SEXP_t *msg) { struct oval_message *message; SEXP_t *r0; oval_message_level_t lvl; char *str; message = oval_message_new(); r0 = SEXP_list_first(msg); lvl = SEXP_number_getu(r0); SEXP_free(r0); oval_message_set_level(message, lvl); r0 = SEXP_list_nth(msg, 2); str = SEXP_string_cstr(r0); SEXP_free(r0); oval_message_set_text(message, str); free(str); return message; }
static struct oval_sysent *oval_sexp_to_sysent(struct oval_syschar_model *model, struct oval_sysitem *item, SEXP_t * sexp, struct oval_string_map *mask_map) { char *key; oval_syschar_status_t status; oval_datatype_t dt; struct oval_sysent *ent; key = probe_ent_getname(sexp); if (!key) return NULL; if (strcmp("message", key) == 0 && item != NULL) { struct oval_message *msg; oval_message_level_t lvl; SEXP_t *lvl_sexp, *txt_sexp; char txt[1024]; lvl_sexp = probe_obj_getattrval(sexp, "level"); lvl = SEXP_number_getu_32(lvl_sexp); txt_sexp = probe_ent_getval(sexp); SEXP_string_cstr_r(txt_sexp, txt, sizeof txt); SEXP_vfree(lvl_sexp, txt_sexp); /* TODO: sanity checks */ msg = oval_message_new(); oval_message_set_level(msg, lvl); oval_message_set_text(msg, txt); oval_sysitem_add_message(item, msg); return (NULL); } status = probe_ent_getstatus(sexp); dt = probe_ent_getdatatype(sexp); ent = oval_sysent_new(model); oval_sysent_set_name(ent, key); oval_sysent_set_status(ent, status); oval_sysent_set_datatype(ent, dt); if (mask_map == NULL || oval_string_map_get_value(mask_map, key) == NULL) oval_sysent_set_mask(ent, 0); else oval_sysent_set_mask(ent, 1); if (status != SYSCHAR_STATUS_EXISTS) return ent; if (dt == OVAL_DATATYPE_RECORD) { SEXP_t *srf, *srfs; probe_ent_getvals(sexp, &srfs); SEXP_list_foreach(srf, srfs) { struct oval_record_field *rf; rf = oval_record_field_ITEM_from_sexp(srf); oval_sysent_add_record_field(ent, rf); } SEXP_free(srfs); } else {