Skip to content

Commit

Permalink
version_time of xccdf_item stored as a string
Browse files Browse the repository at this point in the history
time_t was too error prone
  • Loading branch information
pvrabec committed Dec 4, 2012
1 parent 1064115 commit d8e5ebe
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 41 deletions.
56 changes: 30 additions & 26 deletions src/XCCDF/item.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,11 +166,13 @@ void xccdf_item_base_clone(struct xccdf_item_base *new_base, const struct xccdf_
{
new_base->id = oscap_strdup(old_base->id);
new_base->cluster_id = oscap_strdup(old_base->cluster_id);
new_base->extends = oscap_strdup(old_base->extends);

new_base->version = oscap_strdup(old_base->version);
new_base->version_update = oscap_strdup(old_base->version_update);
new_base->extends = oscap_strdup(old_base->extends);
new_base->version_time = oscap_strdup(old_base->version_time);


new_base->version_time = old_base->version_time;
new_base->weight = old_base->weight;
new_base->parent = NULL;

Expand Down Expand Up @@ -226,6 +228,7 @@ void xccdf_item_release(struct xccdf_item *item)
if (item->type != XCCDF_BENCHMARK) xccdf_benchmark_unregister_item(item);
oscap_free(item->item.id);
oscap_free(item->item.cluster_id);
oscap_free(item->item.version_time);
oscap_free(item->item.version_update);
oscap_free(item->item.version);
oscap_free(item->item.extends);
Expand Down Expand Up @@ -376,20 +379,19 @@ xmlNode *xccdf_item_to_dom(struct xccdf_item *item, xmlDoc *doc, xmlNode *parent
}
oscap_reference_iterator_free(dc_statuses);

time_t vt = xccdf_item_get_version_time(item);
/* version and attributes */
const char *version = xccdf_item_get_version(item);
if (xccdf_item_get_type(item) != XCCDF_BENCHMARK && (version || vt || xccdf_item_get_version_update(item))) {
if ((xccdf_item_get_type(item) != XCCDF_BENCHMARK) && version) {
xmlNode* version_node = xmlNewTextChild(item_node, ns_xccdf, BAD_CAST "version", BAD_CAST version);
if (xccdf_item_get_version_update(item))
xmlNewProp(version_node, BAD_CAST "update", BAD_CAST xccdf_item_get_version_update(item));
if (vt) {
struct tm *lt = localtime(&vt);
char timestamp[] = "yyyy-mm-ddThh:mm:ss";
snprintf(timestamp, sizeof(timestamp), "%4d-%02d-%02dT%02d:%02d:%02d",
1900 + lt->tm_year, 1 + lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);
xmlNewProp(version_node, BAD_CAST "time", BAD_CAST timestamp);
}
}

const char *version_update = xccdf_item_get_version_update(item);
if (version_update)
xmlNewProp(version_node, BAD_CAST "update", BAD_CAST version_update);

const char *version_time = xccdf_item_get_version_time(item);
if (version_time)
xmlNewProp(version_node, BAD_CAST "time", BAD_CAST version_time);
}

/* Handle generic item child nodes */
xccdf_texts_to_dom(xccdf_item_get_title(item), item_node, "title");
Expand Down Expand Up @@ -757,16 +759,16 @@ bool xccdf_item_process_element(struct xccdf_item * item, xmlTextReaderPtr reade
oscap_list_add(item->item.dc_statuses, oscap_reference_new_parse(reader));
return true;
case XCCDFE_VERSION: {
xmlNode *ver = xmlTextReaderExpand(reader);
char *vt = (char*) xmlGetProp(ver, BAD_CAST "time");
if (vt) item->item.version_time = oscap_get_datetime(vt);
oscap_free(vt);
item->item.version_update = (char*) xmlGetProp(ver, BAD_CAST "update");
item->item.version = (char *) xmlNodeGetContent(ver);
if (oscap_streq(item->item.version, "")) {
oscap_free(item->item.version);
item->item.version = NULL;
}
xmlNode *ver = xmlTextReaderExpand(reader);
/* optional attributes */
item->item.version_time = (char*) xmlGetProp(ver, BAD_CAST "time");
item->item.version_update = (char*) xmlGetProp(ver, BAD_CAST "update");
/* content */
item->item.version = (char *) xmlNodeGetContent(ver);
if (oscap_streq(item->item.version, "")) {
oscap_free(item->item.version);
item->item.version = NULL;
}
return true;
}
case XCCDFE_RATIONALE:
Expand Down Expand Up @@ -847,7 +849,9 @@ XCCDF_ITEM_ADDER(struct oscap_text *, rationale, rationale)

XCCDF_ITEM_GETTER(const char *, version)
XCCDF_ITEM_GETTER(const char *, cluster_id)
XCCDF_ITEM_GETTER(const char *, version_update) XCCDF_ITEM_GETTER(time_t, version_time) XCCDF_ITEM_GETTER(float, weight)
XCCDF_ITEM_GETTER(const char *, version_update)
XCCDF_ITEM_GETTER(const char *, version_time)
XCCDF_ITEM_GETTER(float, weight)
XCCDF_ITEM_GETTER(struct xccdf_item *, parent)
XCCDF_ITEM_GETTER(const char *, extends)
XCCDF_FLAG_GETTER(resolved)
Expand Down Expand Up @@ -878,7 +882,7 @@ OSCAP_ITERATOR_GEN(xccdf_warning)
OSCAP_ITERATOR_REMOVE_F(xccdf_warning)

XCCDF_ITEM_SETTER_SIMPLE(xccdf_numeric, weight)
XCCDF_ITEM_SETTER_SIMPLE(time_t, version_time)
XCCDF_ITEM_SETTER_STRING(version_time)
XCCDF_ITEM_SETTER_STRING(version)
XCCDF_ITEM_SETTER_STRING(version_update)
XCCDF_ITEM_SETTER_STRING(extends)
Expand Down
2 changes: 1 addition & 1 deletion src/XCCDF/item.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ struct xccdf_item_base {

char *version;
char *version_update;
time_t version_time;
char *version_time;

struct xccdf_item *parent;
char *extends;
Expand Down
24 changes: 12 additions & 12 deletions src/XCCDF/public/xccdf_benchmark.h
Original file line number Diff line number Diff line change
Expand Up @@ -2387,7 +2387,7 @@ struct xccdf_warning_iterator *xccdf_value_get_warnings(const struct xccdf_value
/// @memberof xccdf_value
const char *xccdf_value_get_version_update(const struct xccdf_value *value);
/// @memberof xccdf_value
time_t xccdf_value_get_version_time(const struct xccdf_value *value);
const char *xccdf_value_get_version_time(const struct xccdf_value *value);
/// @memberof xccdf_value
struct xccdf_benchmark *xccdf_value_get_benchmark(const struct xccdf_value *value);
/// @memberof xccdf_value
Expand All @@ -2406,7 +2406,7 @@ const char *xccdf_item_get_cluster_id(const struct xccdf_item *item);
/// @memberof xccdf_item
const char *xccdf_item_get_version_update(const struct xccdf_item *item);
/// @memberof xccdf_item
time_t xccdf_item_get_version_time(const struct xccdf_item *item);
const char *xccdf_item_get_version_time(const struct xccdf_item *item);
/// @memberof xccdf_item
float xccdf_item_get_weight(const struct xccdf_item *item);
/// @memberof xccdf_item
Expand All @@ -2419,24 +2419,24 @@ struct xccdf_warning_iterator *xccdf_benchmark_get_warnings(const struct xccdf_b
/// @memberof xccdf_benchmark
const char *xccdf_benchmark_get_version_update(const struct xccdf_benchmark *benchmark);
/// @memberof xccdf_benchmark
time_t xccdf_benchmark_get_version_time(const struct xccdf_benchmark *benchmark);
const char *xccdf_benchmark_get_version_time(const struct xccdf_benchmark *benchmark);

/// @memberof xccdf_profile
const char *xccdf_profile_get_version_update(const struct xccdf_profile *profile);
/// @memberof xccdf_profile
time_t xccdf_profile_get_version_time(const struct xccdf_profile *profile);
const char *xccdf_profile_get_version_time(const struct xccdf_profile *profile);
/// @memberof xccdf_profile
const char *xccdf_profile_get_note_tag(const struct xccdf_profile *profile);

/// @memberof xccdf_rule
const char *xccdf_rule_get_version_update(const struct xccdf_rule *rule);
/// @memberof xccdf_rule
time_t xccdf_rule_get_version_time(const struct xccdf_rule *rule);
const char *xccdf_rule_get_version_time(const struct xccdf_rule *rule);
/// @memberof xccdf_rule
struct xccdf_benchmark *xccdf_rule_get_benchmark(const struct xccdf_rule *rule);

/// @memberof xccdf_group
time_t xccdf_group_get_version_time(const struct xccdf_group *group);
const char *xccdf_group_get_version_time(const struct xccdf_group *group);
/// @memberof xccdf_group
const char *xccdf_group_get_version_update(const struct xccdf_group *group);
/// @memberof xccdf_group
Expand Down Expand Up @@ -2633,7 +2633,7 @@ bool xccdf_item_set_extends(struct xccdf_item *item, const char *newval);
/// @memberof xccdf_item
bool xccdf_item_set_version(struct xccdf_item *item, const char *newval);
/// @memberof xccdf_item
bool xccdf_item_set_version_time(struct xccdf_item *item, time_t newval);
bool xccdf_item_set_version_time(struct xccdf_item *item, const char *newval);
/// @memberof xccdf_item
bool xccdf_item_set_version_update(struct xccdf_item *item, const char *newval);
/// @memberof xccdf_item
Expand All @@ -2660,7 +2660,7 @@ bool xccdf_benchmark_set_id(struct xccdf_benchmark *item, const char *newval);
/// @memberof xccdf_benchmark
bool xccdf_benchmark_set_version(struct xccdf_benchmark *item, const char *newval);
/// @memberof xccdf_benchmark
bool xccdf_benchmark_set_version_time(struct xccdf_benchmark *item, time_t newval);
bool xccdf_benchmark_set_version_time(struct xccdf_benchmark *item, const char *newval);
/// @memberof xccdf_benchmark
bool xccdf_benchmark_set_version_update(struct xccdf_benchmark *item, const char *newval);
/// @memberof xccdf_benchmark
Expand All @@ -2684,7 +2684,7 @@ bool xccdf_profile_set_extends(struct xccdf_profile *item, const char *newval);
/// @memberof xccdf_profile
bool xccdf_profile_set_version(struct xccdf_profile *item, const char *newval);
/// @memberof xccdf_profile
bool xccdf_profile_set_version_time(struct xccdf_profile *item, time_t newval);
bool xccdf_profile_set_version_time(struct xccdf_profile *item, const char *newval);
/// @memberof xccdf_profile
bool xccdf_profile_set_version_update(struct xccdf_profile *item, const char *newval);
/// @memberof xccdf_profile
Expand All @@ -2699,7 +2699,7 @@ bool xccdf_rule_set_extends(struct xccdf_rule *item, const char *newval);
/// @memberof xccdf_rule
bool xccdf_rule_set_version(struct xccdf_rule *item, const char *newval);
/// @memberof xccdf_rule
bool xccdf_rule_set_version_time(struct xccdf_rule *item, time_t newval);
bool xccdf_rule_set_version_time(struct xccdf_rule *item, const char *newval);
/// @memberof xccdf_rule
bool xccdf_rule_set_version_update(struct xccdf_rule *item, const char *newval);
/// @memberof xccdf_rule
Expand Down Expand Up @@ -2732,7 +2732,7 @@ bool xccdf_group_set_extends(struct xccdf_group *item, const char *newval);
/// @memberof xccdf_group
bool xccdf_group_set_version(struct xccdf_group *item, const char *newval);
/// @memberof xccdf_group
bool xccdf_group_set_version_time(struct xccdf_group *item, time_t newval);
bool xccdf_group_set_version_time(struct xccdf_group *item, const char *newval);
/// @memberof xccdf_group
bool xccdf_group_set_version_update(struct xccdf_group *item, const char *newval);
/// @memberof xccdf_group
Expand All @@ -2755,7 +2755,7 @@ bool xccdf_value_set_extends(struct xccdf_value *item, const char *newval);
/// @memberof xccdf_value
bool xccdf_value_set_version(struct xccdf_value *item, const char *newval);
/// @memberof xccdf_value
bool xccdf_value_set_version_time(struct xccdf_value *item, time_t newval);
bool xccdf_value_set_version_time(struct xccdf_value *item, const char *newval);
/// @memberof xccdf_value
bool xccdf_value_set_version_update(struct xccdf_value *item, const char *newval);
/// @memberof xccdf_value
Expand Down
4 changes: 2 additions & 2 deletions src/XCCDF/unused.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ struct oscap_reference_iterator *xccdf_result_get_references(const struct xccdf_
struct xccdf_warning_iterator *xccdf_result_get_warnings(const struct xccdf_result *item);
const char *xccdf_result_get_cluster_id(const struct xccdf_result *item);
const char *xccdf_result_get_version_update(const struct xccdf_result *item);
time_t xccdf_result_get_version_time(const struct xccdf_result *item);
const char *xccdf_result_get_version_time(const struct xccdf_result *item);
float xccdf_result_get_weight(const struct xccdf_result *item);
struct xccdf_item *xccdf_result_get_parent(const struct xccdf_result *item);
const char *xccdf_result_get_extends(const struct xccdf_result *item);
Expand Down Expand Up @@ -111,7 +111,7 @@ bool xccdf_value_set_weight(struct xccdf_value *item, xccdf_numeric newval);
bool xccdf_result_set_weight(struct xccdf_result *item, xccdf_numeric newval);
bool xccdf_result_set_cluster_id(struct xccdf_result *item, const char *newval);
bool xccdf_result_set_extends(struct xccdf_result *item, const char *newval);
bool xccdf_result_set_version_time(struct xccdf_result *item, time_t newval);
bool xccdf_result_set_version_time(struct xccdf_result *item, const char *newval);
bool xccdf_result_set_version_update(struct xccdf_result *item, const char *newval);
bool xccdf_profile_set_cluster_id(struct xccdf_profile *item, const char *newval);
bool xccdf_benchmark_set_cluster_id(struct xccdf_benchmark *item, const char *newval);
Expand Down

0 comments on commit d8e5ebe

Please sign in to comment.