void oval_sysent_to_dom(struct oval_sysent *sysent, xmlDoc * doc, xmlNode * parent) { struct oval_record_field_iterator *rf_itr; xmlNsPtr ent_ns = parent->ns; xmlNodePtr root_node = xmlDocGetRootElement(doc); xmlNode *sysent_tag = NULL; char *tagname = oval_sysent_get_name(sysent); char *content = oval_sysent_get_value(sysent); bool mask = oval_sysent_get_mask(sysent); /* omit the value in oval_results if mask=true */ if (mask && !xmlStrcmp(root_node->name, BAD_CAST OVAL_ROOT_ELM_RESULTS)) { sysent_tag = xmlNewTextChild(parent, ent_ns, BAD_CAST tagname, BAD_CAST ""); } else { sysent_tag = xmlNewTextChild(parent, ent_ns, BAD_CAST tagname, BAD_CAST content); } if (mask) { xmlNewProp(sysent_tag, BAD_CAST "mask", BAD_CAST "true"); } oval_datatype_t datatype_index = oval_sysent_get_datatype(sysent); if (datatype_index != OVAL_DATATYPE_STRING) { xmlNewProp(sysent_tag, BAD_CAST "datatype", BAD_CAST oval_datatype_get_text(datatype_index)); } oval_syschar_status_t status_index = oval_sysent_get_status(sysent); if (status_index != SYSCHAR_STATUS_EXISTS) { xmlNewProp(sysent_tag, BAD_CAST "status", BAD_CAST oval_syschar_status_get_text(status_index)); } rf_itr = oval_sysent_get_record_fields(sysent); if (oval_record_field_iterator_has_more(rf_itr)) { xmlNsPtr field_ns = xmlSearchNsByHref(doc, xmlDocGetRootElement(doc), OVAL_SYSCHAR_NAMESPACE); if (field_ns == NULL) { field_ns = xmlNewNs(xmlDocGetRootElement(doc), OVAL_SYSCHAR_NAMESPACE, NULL); } while (oval_record_field_iterator_has_more(rf_itr)) { struct oval_record_field *rf; rf = oval_record_field_iterator_next(rf_itr); oval_record_field_to_dom(rf, mask, doc, sysent_tag, field_ns); } } oval_record_field_iterator_free(rf_itr); }
struct oval_sysent *oval_sysent_clone(struct oval_syschar_model *new_model, struct oval_sysent *old_item) { struct oval_sysent *new_item = oval_sysent_new(new_model); char *old_value = oval_sysent_get_value(old_item); if (old_value) { oval_sysent_set_value(new_item, oscap_strdup(old_value)); } char *old_name = oval_sysent_get_name(old_item); if (old_name) { oval_sysent_set_name(new_item, oscap_strdup(old_name)); } oval_sysent_set_datatype(new_item, oval_sysent_get_datatype(old_item)); oval_sysent_set_mask(new_item, oval_sysent_get_mask(old_item)); oval_sysent_set_status(new_item, oval_sysent_get_status(old_item)); return new_item; }
static struct oval_record_field *oval_record_field_ITEM_from_sexp(SEXP_t *sexp) { struct oval_sysent *sysent; struct oval_record_field *rf; sysent = oval_sexp_to_sysent(NULL, NULL, sexp, NULL); if (sysent == NULL) return NULL; rf = oval_record_field_new(OVAL_RECORD_FIELD_ITEM); oval_record_field_set_name(rf, oval_sysent_get_name(sysent)); oval_record_field_set_value(rf, oval_sysent_get_value(sysent)); oval_record_field_set_datatype(rf, oval_sysent_get_datatype(sysent)); oval_record_field_set_mask(rf, oval_sysent_get_mask(sysent)); oval_record_field_set_status(rf, oval_sysent_get_status(sysent)); oval_sysent_free(sysent); return rf; }