@@ -132,33 +132,53 @@ static struct oscap_iterator *_xccdf_policy_get_engines_by_sysname(struct xccdf_
132132 return oscap_iterator_new_filter (policy -> model -> engines , (oscap_filter_func ) xccdf_policy_engine_filter , (void * ) sysname );
133133}
134134
135+ static char * _xccdf_policy_get_readable_item_text (struct xccdf_policy * policy , struct xccdf_item * item , const char * preferred_lang , struct oscap_text_iterator * it )
136+ {
137+ struct oscap_text * unresolved_text = oscap_textlist_get_preferred_text (it , preferred_lang );
138+ if (!unresolved_text )
139+ return oscap_strdup ("" );
140+ const char * unresolved = oscap_text_get_text (unresolved_text );
141+ /* Resolve <xccdf:sub> elements */
142+ char * resolved = xccdf_policy_substitute (unresolved , policy );
143+ /* Get rid of xhtml elements */
144+ char * plaintext = _xhtml_to_plaintext (resolved );
145+ free (resolved );
146+ char * filtered_plaintext = oscap_remove_excess_whitespace (plaintext );
147+ free (plaintext );
148+ return filtered_plaintext ;
149+ }
150+
135151char * xccdf_policy_get_readable_item_title (struct xccdf_policy * policy , struct xccdf_item * item , const char * preferred_lang )
136152{
137153 struct oscap_text_iterator * title_it = xccdf_item_get_title (item );
138- char * unresolved = oscap_textlist_get_preferred_plaintext ( title_it , preferred_lang );
154+ char * readable_text = _xccdf_policy_get_readable_item_text ( policy , item , preferred_lang , title_it );
139155 oscap_text_iterator_free (title_it );
140- if (!unresolved )
141- return oscap_strdup ("" );
142- char * resolved = xccdf_policy_substitute (unresolved , policy );
143- free (unresolved );
144- return resolved ;
156+ return readable_text ;
157+ }
158+
159+ bool xccdf_policy_get_show_rule_details (struct xccdf_policy * policy )
160+ {
161+ if (policy == NULL )
162+ return false;
163+ return policy -> show_rule_details ;
145164}
146165
147166char * xccdf_policy_get_readable_item_description (struct xccdf_policy * policy , struct xccdf_item * item , const char * preferred_lang )
148167{
149- /* Get description in prefered language */
168+ /* Get description in preferred language */
150169 struct oscap_text_iterator * description_it = xccdf_item_get_description (item );
151- struct oscap_text * unresolved_text = oscap_textlist_get_preferred_text ( description_it , preferred_lang );
170+ char * readable_text = _xccdf_policy_get_readable_item_text ( policy , item , preferred_lang , description_it );
152171 oscap_text_iterator_free (description_it );
153- if (!unresolved_text )
154- return oscap_strdup ("" );
155- const char * unresolved = oscap_text_get_text (unresolved_text );
156- /* Resolve <xccdf:sub> elements */
157- char * resolved = xccdf_policy_substitute (unresolved , policy );
158- /* Get a rid of xhtml elements */
159- char * plaintext = _xhtml_to_plaintext (resolved );
160- free (resolved );
161- return plaintext ;
172+ return readable_text ;
173+ }
174+
175+ char * xccdf_policy_get_readable_item_rationale (struct xccdf_policy * policy , struct xccdf_item * item , const char * preferred_lang )
176+ {
177+ /* Get rationale in preferred language */
178+ struct oscap_text_iterator * rat_it = xccdf_item_get_rationale (item );
179+ char * readable_text = _xccdf_policy_get_readable_item_text (policy , item , preferred_lang , rat_it );
180+ oscap_text_iterator_free (rat_it );
181+ return readable_text ;
162182}
163183
164184/**
@@ -1934,6 +1954,7 @@ struct xccdf_policy * xccdf_policy_new(struct xccdf_policy_model * model, struct
19341954 xccdf_policy_resolve_item (policy , item , true);
19351955 }
19361956 xccdf_item_iterator_free (item_it );
1957+ policy -> show_rule_details = model -> show_rule_details ;
19371958 return policy ;
19381959}
19391960
@@ -2371,4 +2392,7 @@ void xccdf_value_binding_free(struct xccdf_value_binding * binding) {
23712392 free (binding );
23722393}
23732394
2374-
2395+ void xccdf_policy_model_set_show_rule_details (struct xccdf_policy_model * policy_model , bool show_rule_details )
2396+ {
2397+ policy_model -> show_rule_details = show_rule_details ;
2398+ }
0 commit comments