Common subdirectories: a/src/OVAL/api and b/src/OVAL/api diff -u a/src/OVAL/oval_collection.c b/src/OVAL/oval_collection.c --- a/src/OVAL/oval_collection.c 2009-07-28 12:29:18 -0400 +++ b/src/OVAL/oval_collection.c 2009-07-28 14:19:33 -0400 @@ -169,7 +169,7 @@ //TEST FREEFUNC void oval_collection_main_freefunc(void *item) { - printf("FREEFUNC: item = %s\n", item); + printf("FREEFUNC: item = %s\n", (char*)item); } //TEST MAIN diff -u a/src/OVAL/oval_component.c b/src/OVAL/oval_component.c --- a/src/OVAL/oval_component.c 2009-07-28 17:14:59 -0400 +++ b/src/OVAL/oval_component.c 2009-07-30 08:09:45 -0400 @@ -431,12 +431,12 @@ free(split->delimiter); }; break; - case OVAL_FUNCTION_CONCAT: /* TODO */ break; - case OVAL_FUNCTION_SUBSTRING: /* TODO */ break; - case OVAL_FUNCTION_TIMEDIF: /* TODO */ break; - case OVAL_FUNCTION_ESCAPE_REGEX: /* TODO */ break; - case OVAL_FUNCTION_REGEX_CAPTURE: /* TODO */ break; - case OVAL_FUNCTION_ARITHMETIC: /* TODO */ break; + case OVAL_FUNCTION_CONCAT: + case OVAL_FUNCTION_SUBSTRING: + case OVAL_FUNCTION_TIMEDIF: + case OVAL_FUNCTION_ESCAPE_REGEX: + case OVAL_FUNCTION_REGEX_CAPTURE: + case OVAL_FUNCTION_ARITHMETIC: case OVAL_COMPONENT_UNKNOWN: case OVAL_COMPONENT_LITERAL: case OVAL_COMPONENT_OBJECTREF: diff -u a/src/OVAL/oval_criteriaNode.c b/src/OVAL/oval_criteriaNode.c --- a/src/OVAL/oval_criteriaNode.c 2009-07-28 17:15:27 -0400 +++ b/src/OVAL/oval_criteriaNode.c 2009-07-29 10:00:28 -0400 @@ -151,9 +151,9 @@ malloc(sizeof(oval_criteria_node_EXTENDDEF_t)); ((struct oval_criteria_node_EXTENDDEF *)node)-> definition = NULL; - } - default: - return NULL; + }break; + case NODETYPE_UNKNOWN: + default: return NULL; } node->type = type; node->negate = 0; diff -u a/src/OVAL/oval_definitions_impl.h b/src/OVAL/oval_definitions_impl.h --- a/src/OVAL/oval_definitions_impl.h 2009-07-28 14:42:43 -0400 +++ b/src/OVAL/oval_definitions_impl.h 2009-07-29 16:25:16 -0400 @@ -34,6 +34,7 @@ #include #include "api/oval_definitions.h" #include "oval_parser_impl.h" +#include "oval_agent_api_impl.h" oval_family_enum oval_family_parse(xmlTextReaderPtr); oval_subtype_enum oval_subtype_parse(xmlTextReaderPtr); @@ -189,6 +190,9 @@ struct oval_parser_context *context); void oval_variable_to_print(struct oval_variable *variable, char *indent, int idx); +void set_oval_variable_binding_variable(struct oval_variable_binding *, struct oval_variable *); +void set_oval_variable_binding_value (struct oval_variable_binding *, char *); + struct oval_variable_binding *oval_variable_binding_new(); void oval_variable_binding_free(struct oval_variable_binding *); @@ -199,7 +203,12 @@ struct oval_object_content *oval_object_content_new(oval_object_content_type_enum type); void oval_object_content_free(struct oval_object_content *); +typedef void (*oval_variable_binding_consumer) (struct oval_variable_binding *, + void *); +int oval_variable_binding_parse_tag(xmlTextReaderPtr, + struct oval_parser_context *, oval_variable_binding_consumer, void *); +void set_oval_object_content_type(struct oval_object_content *, oval_object_content_type_enum); void set_oval_object_content_field_name(struct oval_object_content *, char *); void set_oval_object_content_entity(struct oval_object_content *, struct oval_entity *); //type == OVAL_OBJECTCONTENT_ENTITY void set_oval_object_content_varCheck(struct oval_object_content *, oval_check_enum); //type == OVAL_OBJECTCONTENT_ENTITY diff -u a/src/OVAL/oval_entity.c b/src/OVAL/oval_entity.c --- a/src/OVAL/oval_entity.c 2009-07-28 17:16:32 -0400 +++ b/src/OVAL/oval_entity.c 2009-07-29 13:57:05 -0400 @@ -193,7 +193,8 @@ oval_operator_enum operation = oval_operation_parse(reader, "operation", OPERATION_EQUALS); int mask = oval_parser_boolean_attribute(reader, "mask", 1); - oval_entity_type_enum type = OVAL_ENTITY_TYPE_UNKNOWN; //TODO + oval_entity_type_enum type = OVAL_ENTITY_TYPE_UNKNOWN; + //The value of the type field vs. the complexity of extracting type is arguable char *varref = (char*) xmlTextReaderGetAttribute(reader, BAD_CAST "var_ref"); struct oval_value *value; struct oval_variable *variable; diff -u a/src/OVAL/oval_enumerations.c b/src/OVAL/oval_enumerations.c --- a/src/OVAL/oval_enumerations.c 2009-07-28 12:30:37 -0400 +++ b/src/OVAL/oval_enumerations.c 2009-07-30 08:05:30 -0400 @@ -49,7 +49,7 @@ struct oval_string_map *map) { - char *attval = (char *) (char *) xmlTextReaderGetAttribute(reader, BAD_CAST BAD_CAST attname); + char *attval = (char *) xmlTextReaderGetAttribute(reader, BAD_CAST attname); _oval_enumeration_object_t *starval = NULL; if (attval != NULL) { starval = @@ -507,8 +507,7 @@ oval_string_map_put(_oval_family_map, "hpux", _oval_enumeration_object(FAMILY_HPUX)); oval_string_map_put(_oval_family_map, "independent", - _oval_enumeration_object - (FAMILY_INDEPENDENT)); + _oval_enumeration_object(FAMILY_INDEPENDENT)); oval_string_map_put(_oval_family_map, "ios", _oval_enumeration_object(FAMILY_IOS)); oval_string_map_put(_oval_family_map, "linux", @@ -547,7 +546,15 @@ { if (_oval_subtype_aix_map == NULL) { _oval_subtype_aix_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_aix_map, "fileset", + _oval_enumeration_object + (AIX_FILESET)); + oval_string_map_put(_oval_subtype_aix_map, "fix", + _oval_enumeration_object + (AIX_FIX)); + oval_string_map_put(_oval_subtype_aix_map, "oslevel", + _oval_enumeration_object + (AIX_OSLEVEL)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -560,7 +567,12 @@ { if (_oval_subtype_apache_map == NULL) { _oval_subtype_apache_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_apache_map, "httpd", + _oval_enumeration_object + (APACHE_HTTPD)); + oval_string_map_put(_oval_subtype_apache_map, "version", + _oval_enumeration_object + (APACHE_VERSION)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -573,7 +585,18 @@ { if (_oval_subtype_catos_map == NULL) { _oval_subtype_catos_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_catos_map, "line", + _oval_enumeration_object + (CATOS_LINE)); + oval_string_map_put(_oval_subtype_catos_map, "module", + _oval_enumeration_object + (CATOS_MODULE)); + oval_string_map_put(_oval_subtype_catos_map, "version", + _oval_enumeration_object + (CATOS_VERSION)); + oval_string_map_put(_oval_subtype_catos_map, "version55", + _oval_enumeration_object + (CATOS_VERSION_55)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -586,7 +609,12 @@ { if (_oval_subtype_esx_map == NULL) { _oval_subtype_esx_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_esx_map, "patch", + _oval_enumeration_object + (ESX_PATCH)); + oval_string_map_put(_oval_subtype_esx_map, "version", + _oval_enumeration_object + (ESX_VERSION)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -599,7 +627,9 @@ { if (_oval_subtype_freebsd_map == NULL) { _oval_subtype_freebsd_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_freebsd_map, "portinfo", + _oval_enumeration_object + (FREEBSD_PORT_INFO)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -612,7 +642,21 @@ { if (_oval_subtype_hpux_map == NULL) { _oval_subtype_hpux_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_hpux_map, "getconf", + _oval_enumeration_object + (HPUX_GETCONF)); + oval_string_map_put(_oval_subtype_hpux_map, "patch", + _oval_enumeration_object + (HPUX_PATCH)); + oval_string_map_put(_oval_subtype_hpux_map, "patch53", + _oval_enumeration_object + (HPUX_PATCH_53)); + oval_string_map_put(_oval_subtype_hpux_map, "softwarelist", + _oval_enumeration_object + (HPUX_SOFTWARE_LIST)); + oval_string_map_put(_oval_subtype_hpux_map, "trustedaccounts", + _oval_enumeration_object + (HPUX_TRUSTED_ACCOUNTS)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -670,7 +714,24 @@ { if (_oval_subtype_ios_map == NULL) { _oval_subtype_ios_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_ios_map, "global", + _oval_enumeration_object + (IOS_GLOBAL)); + oval_string_map_put(_oval_subtype_ios_map, "interface", + _oval_enumeration_object + (IOS_INTERFACE)); + oval_string_map_put(_oval_subtype_ios_map, "line", + _oval_enumeration_object + (IOS_LINE)); + oval_string_map_put(_oval_subtype_ios_map, "snmp", + _oval_enumeration_object + (IOS_SNMP)); + oval_string_map_put(_oval_subtype_ios_map, "tclsh", + _oval_enumeration_object + (IOS_TCLSH)); + oval_string_map_put(_oval_subtype_ios_map, "version55", + _oval_enumeration_object + (IOS_VERSION_55)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -706,7 +767,18 @@ { if (_oval_subtype_macos_map == NULL) { _oval_subtype_macos_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_macos_map, "accountinfo", + _oval_enumeration_object + (MACOS_ACCOUNT_INFO)); + oval_string_map_put(_oval_subtype_macos_map, "inetlisteningservers", + _oval_enumeration_object + (MACOS_INET_LISTENING_SERVERS)); + oval_string_map_put(_oval_subtype_macos_map, "nvraminfo", + _oval_enumeration_object + (MACOS_NVRAM_INFO)); + oval_string_map_put(_oval_subtype_macos_map, "pwpolicy", + _oval_enumeration_object + (MACOS_PWPOLICY)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -719,7 +791,12 @@ { if (_oval_subtype_pixos_map == NULL) { _oval_subtype_pixos_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_pixos_map, "line", + _oval_enumeration_object + (PIXOS_LINE)); + oval_string_map_put(_oval_subtype_pixos_map, "version", + _oval_enumeration_object + (PIXOS_VERSION)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) @@ -732,7 +809,18 @@ { if (_oval_subtype_solaris_map == NULL) { _oval_subtype_solaris_map = oval_string_map_new(); - //TODO + oval_string_map_put(_oval_subtype_solaris_map, "isainfo", + _oval_enumeration_object + (SOLARIS_ISAINFO)); + oval_string_map_put(_oval_subtype_solaris_map, "package", + _oval_enumeration_object + (SOLARIS_PACKAGE)); + oval_string_map_put(_oval_subtype_solaris_map, "patch", + _oval_enumeration_object + (SOLARIS_PATCH)); + oval_string_map_put(_oval_subtype_solaris_map, "smf", + _oval_enumeration_object + (SOLARIS_SMF)); } _oval_enumeration_object_t *vstar = (_oval_enumeration_object_t *) diff -u a/src/OVAL/oval_objectContent.c b/src/OVAL/oval_objectContent.c --- a/src/OVAL/oval_objectContent.c 2009-07-28 17:17:33 -0400 +++ b/src/OVAL/oval_objectContent.c 2009-07-29 13:49:37 -0400 @@ -32,6 +32,7 @@ #include #include "oval_definitions_impl.h" #include "oval_collection_impl.h" +#include "oval_agent_api_impl.h" typedef struct oval_object_content { char *fieldName; @@ -164,12 +165,35 @@ } free(content); } - -void set_oval_object_content_field_name(struct oval_object_content *, char *); //TODO -void set_oval_object_content_type(struct oval_object_content *, oval_object_content_type_enum); //TODO -void set_oval_object_content_entity(struct oval_object_content *, struct oval_entity *); //TODO//type == OVAL_OBJECTCONTENT_ENTITY -void set_oval_object_content_varCheck(struct oval_object_content *, oval_check_enum); //TODO//type == OVAL_OBJECTCONTENT_ENTITY -void set_oval_object_content_set(struct oval_object_content *, struct oval_set *); //TODO //type == OVAL_OBJECTCONTENT_SET +void set_oval_object_content_type(struct oval_object_content *content, oval_object_content_type_enum type) +{ + content->type = type; +} +void set_oval_object_content_field_name(struct oval_object_content *content, char *name) +{ + content->fieldName = malloc_string(name); +} +void set_oval_object_content_entity(struct oval_object_content *content, struct oval_entity *entity)//type == OVAL_OBJECTCONTENT_ENTITY +{ + if(content->type == OVAL_OBJECTCONTENT_ENTITY){ + oval_object_content_ENTITY_t *content_ENTITY = (oval_object_content_ENTITY_t *)content; + content_ENTITY->entity = entity; + } +} +void set_oval_object_content_varCheck(struct oval_object_content *content, oval_check_enum check)//type == OVAL_OBJECTCONTENT_ENTITY +{ + if(content->type == OVAL_OBJECTCONTENT_ENTITY){ + oval_object_content_ENTITY_t *content_ENTITY = (oval_object_content_ENTITY_t *)content; + content_ENTITY->varCheck = check; + } +} +void set_oval_object_content_set(struct oval_object_content *content, struct oval_set *set)//type == OVAL_OBJECTCONTENT_SET +{ + if(content->type == OVAL_OBJECTCONTENT_SET){ + oval_object_content_SET_t *content_SET = (oval_object_content_SET_t *)content; + content_SET->set = set; + } +} //typedef void (*oval_object_content_consumer)(struct oval_object_content*,void*); void oval_consume_entity(struct oval_entity *entity, diff -u a/src/OVAL/oval_syschar.c b/src/OVAL/oval_syschar.c --- a/src/OVAL/oval_syschar.c 2009-07-28 17:21:41 -0400 +++ b/src/OVAL/oval_syschar.c 2009-07-30 08:10:18 -0400 @@ -131,6 +131,12 @@ oval_collection_add(syschar->messages, message); } +void add_oval_syschar_variable_binding + (struct oval_syschar *syschar, struct oval_variable_binding *binding) +{ + oval_collection_add(syschar->variable_bindings, binding); +} + struct oval_syschar *oval_syschar_new(struct oval_object *object){ oval_syschar_t *syschar = (oval_syschar_t*)malloc(sizeof(oval_syschar_t)); syschar->flag = SYSCHAR_FLAG_UNKNOWN; @@ -150,8 +156,11 @@ } extern const char* NAMESPACE_OVALSYS; -void _oval_syschar_parse_subtag_consume(struct oval_message *message, void* syschar){ - add_oval_syschar_message(syschar, message); +void _oval_syschar_parse_subtag_consume_message(struct oval_message *message, void* syschar){ + add_oval_syschar_message((struct oval_syschar *)syschar, message); +} +void _oval_syschar_parse_subtag_consume_variable_binding(struct oval_variable_binding *binding, void* syschar){ + add_oval_syschar_variable_binding((struct oval_syschar *)syschar, binding); } int _oval_syschar_parse_subtag( xmlTextReaderPtr reader, @@ -162,9 +171,10 @@ char *namespace = (char*) xmlTextReaderNamespaceUri(reader); int return_code; if(strcmp("message",tagname)==0){ - return_code = oval_message_parse_tag(reader, context, &_oval_syschar_parse_subtag_consume, syschar); - }else if(strcmp("variable_value",tagname)==0){//TODO - return_code = oval_parser_skip_tag(reader, context); + return_code = oval_message_parse_tag(reader, context, &_oval_syschar_parse_subtag_consume_message, syschar); + }else if(strcmp("variable_value",tagname)==0){ + return_code = oval_variable_binding_parse_tag + (reader, context, &_oval_syschar_parse_subtag_consume_variable_binding, syschar); }else if(strcmp("reference",tagname)==0){ char* itemid = (char*) xmlTextReaderGetAttribute(reader, BAD_CAST "item_ref"); struct oval_sysdata *sysdata = get_oval_sysdata_new(context->syschar_model, itemid); diff -u a/src/OVAL/oval_variableBinding.c b/src/OVAL/oval_variableBinding.c --- a/src/OVAL/oval_variableBinding.c 2009-04-17 10:12:21 -0400 +++ b/src/OVAL/oval_variableBinding.c 2009-07-29 16:21:32 -0400 @@ -32,6 +32,9 @@ #include "oval_definitions_impl.h" #include "oval_collection_impl.h" +int DEBUG_OVAL_VARIABLE_BINDING = 0; + + typedef struct oval_variable_binding { struct oval_variable *variable; char *value; @@ -66,6 +69,15 @@ return ((struct oval_variable_binding *)binding)->value; } +void set_oval_variable_binding_variable(struct oval_variable_binding *binding, struct oval_variable *variable) +{ + binding->variable = variable; +} +void set_oval_variable_binding_value (struct oval_variable_binding *binding, char *value) +{ + binding->value = value; +} + struct oval_variable_binding *oval_variable_binding_new(struct oval_variable *variable, char *value) { oval_variable_binding_t *binding = (oval_variable_binding_t*)malloc(sizeof(oval_variable_binding_t)); @@ -74,8 +86,55 @@ return binding; } +struct oval_variable_binding *_oval_variable_binding_new() +{ + oval_variable_binding_t *binding = (oval_variable_binding_t*)malloc(sizeof(oval_variable_binding_t)); + binding->variable = NULL; + binding->value = NULL; + return binding; +} + void oval_variable_binding_free(struct oval_variable_binding *binding) { if(binding->value!=NULL)free(binding->value); free(binding); } + +void _oval_variable_binding_value_consumer(char * value, void * user) +{ + set_oval_variable_binding_value((struct oval_variable_binding *)user, value); +} + +int oval_variable_binding_parse_tag(xmlTextReaderPtr reader, + struct oval_parser_context *context, oval_variable_binding_consumer consumer, void* client) +{ + int return_code = 1; + struct oval_variable_binding *binding = _oval_variable_binding_new(); + {//variable + char* variableId = xmlTextReaderGetAttribute(reader, BAD_CAST "variable_id"); + struct oval_variable *variable = get_oval_variable_new(context->model, variableId); + set_oval_variable_binding_variable(binding, variable); + free(variableId); + } + {//bound value + return_code = oval_parser_text_value(reader, context, &_oval_variable_binding_value_consumer, binding); + } + if(return_code!=1){ + char warning[200]; *warning = 0; + sprintf(warning, "oval_warning_parse_tag:: return code is not 1::(%d)",return_code); + oval_parser_log_warn(context, warning); + }else{ + if(DEBUG_OVAL_VARIABLE_BINDING){ + int numchars = 0; + char debug[2000];debug[numchars]='\0'; + numchars = numchars + sprintf(debug+numchars,"oval_variable_binding_parse_tag::"); + numchars = numchars + sprintf(debug+numchars,"\n binding->variable = %s",oval_variable_id(oval_variable_binding_variable(binding))); + numchars = numchars + sprintf(debug+numchars,"\n binding->value = %s",oval_variable_binding_value(binding)); + oval_parser_log_debug(context, debug); + } + (*consumer)(binding, client); + } + return return_code; +} + + diff -u a/src/OVAL/test_driver.c b/src/OVAL/test_driver.c --- a/src/OVAL/test_driver.c 2009-07-20 17:17:04 -0400 +++ b/src/OVAL/test_driver.c 2009-07-27 13:22:16 -0400 @@ -7,6 +7,7 @@ #include #include "api/oval_agent_api.h" +#include "oval_system_characteristics_impl.h" @@ -28,6 +29,7 @@ } } printf("test_error_handler:%s: %s\n %s(%d)\n",label,error->message, error->system_id, error->line_number); + return 1; } @@ -54,5 +56,6 @@ printf("THERE ARE %d SYSCHARS\n",numSyschars); } }else printf("USAGE:Test []"); + return 0; }