[Openvas-commits] r9167 - in trunk/openvas-manager: . report_formats/simple_bar_chart report_formats/simple_pie_chart src
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Wed Oct 6 17:55:52 CEST 2010
Author: mattm
Date: 2010-10-06 17:55:50 +0200 (Wed, 06 Oct 2010)
New Revision: 9167
Modified:
trunk/openvas-manager/ChangeLog
trunk/openvas-manager/report_formats/simple_bar_chart/create_report_import
trunk/openvas-manager/report_formats/simple_pie_chart/create_report_import
trunk/openvas-manager/src/manage.h
trunk/openvas-manager/src/manage_sql.c
trunk/openvas-manager/src/omp.c
Log:
Include params in report format verification.
* src/manage_sql.c (create_report_format): Get param type and value the
right way round for verification. Add type min, type max and fallback to
verification. Require params to have a type. Use range ends to indicate
when type min and max were left out. Require params to have a fallback.
(verify_report_format): Add param type qualifiers.
(init_report_format_param_iterator): Add type_regex.
(report_format_param_iterator_type_regex)
(report_format_param_iterator_fallback): New functions.
* src/manage.h: Add header accordingly.
* src/omp.c (omp_xml_handle_start_element)
(omp_xml_handle_end_element): In CREATE_REPORT_FORMAT PARAM require TYPE,
require DEFAULT and use range ends to indicate when TYPE MIN and MAX are
left out.
* report_formats/simple_bar_chart/create_report_import,
report_formats/simple_pie_chart/create_report_import: Add params to
signature.
Modified: trunk/openvas-manager/ChangeLog
===================================================================
--- trunk/openvas-manager/ChangeLog 2010-10-06 13:56:35 UTC (rev 9166)
+++ trunk/openvas-manager/ChangeLog 2010-10-06 15:55:50 UTC (rev 9167)
@@ -1,3 +1,27 @@
+2010-10-06 Matthew Mundell <matthew.mundell at greenbone.net>
+
+ Include params in report format verification.
+
+ * src/manage_sql.c (create_report_format): Get param type and value the
+ right way round for verification. Add type min, type max and fallback to
+ verification. Require params to have a type. Use range ends to indicate
+ when type min and max were left out. Require params to have a fallback.
+ (verify_report_format): Add param type qualifiers.
+ (init_report_format_param_iterator): Add type_regex.
+ (report_format_param_iterator_type_regex)
+ (report_format_param_iterator_fallback): New functions.
+
+ * src/manage.h: Add header accordingly.
+
+ * src/omp.c (omp_xml_handle_start_element)
+ (omp_xml_handle_end_element): In CREATE_REPORT_FORMAT PARAM require TYPE,
+ require DEFAULT and use range ends to indicate when TYPE MIN and MAX are
+ left out.
+
+ * report_formats/simple_bar_chart/create_report_import,
+ report_formats/simple_pie_chart/create_report_import: Add params to
+ signature.
+
2010-10-05 Matthew Mundell <matthew.mundell at greenbone.net>
* doc/db_postgres.sql (report_format_params): Add type, type_min,
Modified: trunk/openvas-manager/report_formats/simple_bar_chart/create_report_import
===================================================================
--- trunk/openvas-manager/report_formats/simple_bar_chart/create_report_import 2010-10-06 13:56:35 UTC (rev 9166)
+++ trunk/openvas-manager/report_formats/simple_bar_chart/create_report_import 2010-10-06 15:55:50 UTC (rev 9167)
@@ -11,11 +11,52 @@
FILE2=`base64 -w 0 plot-plt.xsl`
FNAME3=plot.xsl
FILE3=`base64 -w 0 plot.xsl`
+#
+# PARAMS
+#
+PARAM1_NAME="Title"
+PARAM1_VALUE="Threat counts"
+PARAM1_TYPE=string
+PARAM1_TYPE_MIN=0
+PARAM1_TYPE_MAX=60
+#
+PARAM2_NAME="Key"
+PARAM2_VALUE="0"
+PARAM2_TYPE=boolean
+#
+PARAM3_NAME="Fill Style"
+PARAM3_VALUE="pattern"
+PARAM3_TYPE=selection
+PARAM3_OPTION1="pattern"
+PARAM3_OPTION2="solid"
+PARAM3_OPTION3="empty"
+PARAM3_DEFAULT="solid"
+#
+PARAM4_NAME="Width"
+PARAM4_VALUE="640"
+PARAM4_TYPE=integer
+PARAM4_TYPE_MIN=200
+PARAM4_TYPE_MAX=800
+#
+PARAM5_NAME="Height"
+PARAM5_VALUE="480"
+PARAM5_TYPE=integer
+PARAM5_TYPE_MAX=600
+#
+PARAM6_NAME="Blurb"
+PARAM6_VALUE=""
+PARAM6_TYPE=text
+# Minimum min.
+#PARAM6_TYPE_MIN=-9223372036854775807
+PARAM6_TYPE_MIN=0
+# Maximum max.
+#PARAM6_TYPE_MAX=+9223372036854775806
+PARAM6_TYPE_MAX=50
-echo ${UUID}${NAME}${EXTENSION}${CONTENT_TYPE}${SUMMARY}${DESCRIPTION}0${FNAME1}${FILE1}${FNAME2}${FILE2}${FNAME3}${FILE3} > ${UUID}
+echo ${UUID}${NAME}${EXTENSION}${CONTENT_TYPE}${SUMMARY}${DESCRIPTION}0${FNAME1}${FILE1}${FNAME2}${FILE2}${FNAME3}${FILE3}${PARAM1_NAME}${PARAM1_VALUE}${PARAM1_TYPE}${PARAM1_TYPE_MIN}${PARAM1_TYPE_MAX}${PARAM1_VALUE}${PARAM2_NAME}${PARAM2_VALUE}${PARAM2_TYPE}${PARAM2_VALUE}${PARAM3_NAME}${PARAM3_VALUE}${PARAM3_TYPE}${PARAM3_DEFAULT}${PARAM3_OPTION1}${PARAM3_OPTION2}${PARAM3_OPTION3}${PARAM4_NAME}${PARAM4_VALUE}${PARAM4_TYPE}${PARAM4_TYPE_MIN}${PARAM4_TYPE_MAX}${PARAM4_VALUE}${PARAM5_NAME}${PARAM5_VALUE}${PARAM5_TYPE}${PARAM5_TYPE_MAX}${PARAM5_VALUE}${PARAM6_NAME}${PARAM6_VALUE}${PARAM6_TYPE}${PARAM6_TYPE_MIN}${PARAM6_TYPE_MAX}${PARAM6_VALUE} > ${UUID}
gpg --detach-sign --armor ${UUID}
rm ${UUID}
echo -n '<get_report_formats_response status="200" status_text="OK"><report_format id="'$UUID'"><name>'$NAME'</name><extension>'$EXTENSION'</extension><content_type>'$CONTENT_TYPE'</content_type><summary>'$SUMMARY'</summary><description>'$DESCRIPTION'</description><global>0</global><file name="'$FNAME1'">'$FILE1'</file><file name="'$FNAME2'">'$FILE2'</file><file name="'$FNAME3'">'$FILE3'</file><signature>' > simple_bar_chart.xml
cat ${UUID}.asc >> simple_bar_chart.xml
-echo '</signature><param><name>Title</name><value>Threat counts</value><type>string<min>0</min><max>60</max></type></param><param><name>Key</name><value>0</value><type>boolean</type></param><param><name>Fill Style</name><value>pattern</value><type>selection</type><options><option>pattern</option><option>solid</option><option>empty</option></options><default>solid</default></param><param><name>Width</name><value>640</value><type>integer<min>200</min><max>800</max></type></param><param><name>Height</name><value>480</value><type>integer<max>600</max></type></param><param><name>Blurb</name><value></value><type>text<min>0</min><max>50</max></type></param></report_format></get_report_formats_response>' >> simple_bar_chart.xml
+echo '</signature><param><name>'$PARAM1_NAME'</name><value>'$PARAM1_VALUE'</value><type>'$PARAM1_TYPE'<min>'$PARAM1_TYPE_MIN'</min><max>'$PARAM1_TYPE_MAX'</max></type><default>'$PARAM1_VALUE'</default></param><param><name>'$PARAM2_NAME'</name><value>'$PARAM2_VALUE'</value><type>'$PARAM2_TYPE'</type><default>'$PARAM2_VALUE'</default></param><param><name>'$PARAM3_NAME'</name><value>'$PARAM3_VALUE'</value><type>'$PARAM3_TYPE'</type><options><option>'$PARAM3_OPTION1'</option><option>'$PARAM3_OPTION2'</option><option>'$PARAM3_OPTION3'</option></options><default>'$PARAM3_DEFAULT'</default></param><param><name>'$PARAM4_NAME'</name><value>'$PARAM4_VALUE'</value><type>'$PARAM4_TYPE'<min>'$PARAM4_TYPE_MIN'</min><max>'$PARAM4_TYPE_MAX'</max></type><default>'$PARAM4_VALUE'</default></param><param><name>'$PARAM5_NAME'</name><value>'$PARAM5_VALUE'</value><type>'$PARAM5_TYPE'<max>'$PARAM5_TYPE_MAX'</max></type><default>'$PARAM5_VALUE'</default></param><param><name>'$PARAM6_NAME'</name><value>'$PARAM6_VALUE'</value><type>'$PARAM6_TYPE'<min>'$PARAM6_TYPE_MIN'</min><max>'$PARAM6_TYPE_MAX'</max></type><default>'$PARAM6_VALUE'</default></param></report_format></get_report_formats_response>' >> simple_bar_chart.xml
Modified: trunk/openvas-manager/report_formats/simple_pie_chart/create_report_import
===================================================================
--- trunk/openvas-manager/report_formats/simple_pie_chart/create_report_import 2010-10-06 13:56:35 UTC (rev 9166)
+++ trunk/openvas-manager/report_formats/simple_pie_chart/create_report_import 2010-10-06 15:55:50 UTC (rev 9167)
@@ -9,11 +9,17 @@
FILE1=`base64 -w 0 generate`
FNAME2=pieplot.xsl
FILE2=`base64 -w 0 pieplot.xsl`
+#
+# PARAMS
+#
+PARAM1_NAME="Width"
+PARAM1_VALUE="600"
+PARAM1_TYPE=string
-echo ${UUID}${NAME}${EXTENSION}${CONTENT_TYPE}${SUMMARY}${DESCRIPTION}0${FNAME1}${FILE1}${FNAME2}${FILE2} > ${UUID}
+echo ${UUID}${NAME}${EXTENSION}${CONTENT_TYPE}${SUMMARY}${DESCRIPTION}0${FNAME1}${FILE1}${FNAME2}${FILE2}${PARAM1_NAME}${PARAM1_VALUE}${PARAM1_TYPE}${PARAM1_VALUE} > ${UUID}
gpg --detach-sign --armor ${UUID}
rm ${UUID}
echo -n '<get_report_formats_response status="200" status_text="OK"><report_format id="'$UUID'"><name>'$NAME'</name><extension>'$EXTENSION'</extension><content_type>'$CONTENT_TYPE'</content_type><summary>'$SUMMARY'</summary><description>'$DESCRIPTION'</description><global>0</global><file name="'$FNAME1'">'$FILE1'</file><file name="'$FNAME2'">'$FILE2'</file><signature>' > simple_pie_chart.xml
cat ${UUID}.asc >> simple_pie_chart.xml
-echo '</signature><param><name>Width</name><value>600</value></param></report_format></get_report_formats_response>' >> simple_pie_chart.xml
+echo '</signature><param><name>'$PARAM1_NAME'</name><value>'$PARAM1_VALUE'</value><type>'$PARAM1_TYPE'</type><default>'$PARAM1_VALUE'</default></param></report_format></get_report_formats_response>' >> simple_pie_chart.xml
Modified: trunk/openvas-manager/src/manage.h
===================================================================
--- trunk/openvas-manager/src/manage.h 2010-10-06 13:56:35 UTC (rev 9166)
+++ trunk/openvas-manager/src/manage.h 2010-10-06 15:55:50 UTC (rev 9167)
@@ -1626,6 +1626,9 @@
const char*
report_format_param_iterator_fallback (iterator_t *);
+const char*
+report_format_param_iterator_type_regex (iterator_t *);
+
void
init_param_option_iterator (iterator_t*, report_format_param_t, int,
const char *);
Modified: trunk/openvas-manager/src/manage_sql.c
===================================================================
--- trunk/openvas-manager/src/manage_sql.c 2010-10-06 13:56:35 UTC (rev 9166)
+++ trunk/openvas-manager/src/manage_sql.c 2010-10-06 15:55:50 UTC (rev 9167)
@@ -18783,7 +18783,9 @@
* @param[out] report_format Created report format.
*
* @return 0 success, 1 report format exists, 2 empty file name, 3 param value
- * validation failed, 4 param value validation failed, -1 error.
+ * validation failed, 4 param value validation failed, 5 param default
+ * missing, 6 param min or max out of range, 7 param type missing,
+ * -1 error.
*/
int
create_report_format (const char *uuid, const char *name,
@@ -18837,9 +18839,31 @@
g_string_append_printf (format,
"%s%s%s",
param->name,
- param->type,
- param->value);
+ param->value,
+ param->type);
+ if (param->type_min)
+ {
+ long long int min;
+ min = strtoll (param->type_min, NULL, 0);
+ if (min == LLONG_MIN)
+ return 6;
+ g_string_append_printf (format, "%lli", min);
+ }
+
+ if (param->type_max)
+ {
+ long long int max;
+ max = strtoll (param->type_max, NULL, 0);
+ if (max == LLONG_MAX)
+ return 6;
+ g_string_append_printf (format, "%lli", max);
+ }
+
+ g_string_append_printf (format,
+ "%s",
+ param->fallback);
+
{
array_t *options;
int option_index;
@@ -19048,12 +19072,48 @@
option_string = g_string_new ("");
- /* Simply truncate out of range values. */
- min = strtoll (param->type_min, NULL, 0);
- max = strtoll (param->type_max, NULL, 0);
+ if (param->type == NULL)
+ {
+ sql ("ROLLBACK;");
+ return 7;
+ }
+ /* Param min and max are optional. LLONG_MIN and LLONG_MAX mark in the db
+ * that they were missing, so if the user gives LLONG_MIN or LLONG_MAX it
+ * is an error. This ensures that GPG verification works, because the
+ * verification knows when to leave out min and max. */
+
+ if (param->type_min)
+ {
+ min = strtoll (param->type_min, NULL, 0);
+ if (min == LLONG_MIN)
+ {
+ sql ("ROLLBACK;");
+ return 6;
+ }
+ }
+ else
+ min = LLONG_MIN;
+
+ if (param->type_max)
+ {
+ max = strtoll (param->type_max, NULL, 0);
+ if (max == LLONG_MAX)
+ {
+ sql ("ROLLBACK;");
+ return 6;
+ }
+ }
+ else
+ max = LLONG_MAX;
+
quoted_param_name = sql_quote (param->name);
quoted_param_value = sql_quote (param->value);
+ if (param->fallback == NULL)
+ {
+ sql ("ROLLBACK;");
+ return 5;
+ }
quoted_param_fallback = sql_quote (param->fallback);
sql ("INSERT INTO report_format_params"
@@ -19247,11 +19307,47 @@
1,
NULL);
while (next (¶ms))
- g_string_append_printf
- (format,
- "%s%s",
- report_format_param_iterator_name (¶ms),
- report_format_param_iterator_value (¶ms));
+ {
+ g_string_append_printf
+ (format,
+ "%s%s%s",
+ report_format_param_iterator_name (¶ms),
+ report_format_param_iterator_value (¶ms),
+ report_format_param_iterator_type_name (¶ms));
+
+ if (report_format_param_iterator_type_min (¶ms) > LLONG_MIN)
+ g_string_append_printf
+ (format,
+ "%lli",
+ report_format_param_iterator_type_min (¶ms));
+
+ if (report_format_param_iterator_type_max (¶ms) < LLONG_MAX)
+ g_string_append_printf
+ (format,
+ "%lli",
+ report_format_param_iterator_type_max (¶ms));
+
+ g_string_append_printf
+ (format,
+ "%s%s",
+ report_format_param_iterator_type_regex (¶ms),
+ report_format_param_iterator_fallback (¶ms));
+
+ {
+ iterator_t options;
+ init_param_option_iterator
+ (&options,
+ report_format_param_iterator_param (¶ms),
+ 1,
+ NULL);
+ while (next (&options))
+ if (param_option_iterator_value (&options))
+ g_string_append_printf
+ (format,
+ "%s",
+ param_option_iterator_value (&options));
+ }
+ }
cleanup_iterator (¶ms);
g_string_append_printf (format, "\n");
@@ -19872,7 +19968,7 @@
if (report_format)
init_iterator (iterator,
"SELECT ROWID, name, value, type, type_min, type_max,"
- " fallback"
+ " type_regex, fallback"
" FROM report_format_params"
" WHERE report_format = %llu"
" ORDER BY %s %s;",
@@ -19882,7 +19978,7 @@
else
init_iterator (iterator,
"SELECT ROWID, name, value, type, type_min, type_max,"
- " fallback"
+ " type_regex, fallback"
" FROM report_format_params"
" ORDER BY %s %s;",
sort_field ? sort_field : "ROWID",
@@ -19980,6 +20076,16 @@
}
/**
+ * @brief Get the type regex from a report format param iterator.
+ *
+ * @param[in] iterator Iterator.
+ *
+ * @return Type regex, or NULL if iteration is complete. Freed by
+ * cleanup_iterator.
+ */
+DEF_ACCESS (report_format_param_iterator_type_regex, 6);
+
+/**
* @brief Get the default from a report format param iterator.
*
* @param[in] iterator Iterator.
@@ -19987,7 +20093,7 @@
* @return Default, or NULL if iteration is complete. Freed by
* cleanup_iterator.
*/
-DEF_ACCESS (report_format_param_iterator_fallback, 6);
+DEF_ACCESS (report_format_param_iterator_fallback, 7);
/**
* @brief Initialise a report format param option iterator.
Modified: trunk/openvas-manager/src/omp.c
===================================================================
--- trunk/openvas-manager/src/omp.c 2010-10-06 13:56:35 UTC (rev 9166)
+++ trunk/openvas-manager/src/omp.c 2010-10-06 15:55:50 UTC (rev 9167)
@@ -5864,7 +5864,6 @@
assert (create_report_format_data->param_type == NULL);
assert (create_report_format_data->param_value == NULL);
openvas_append_string (&create_report_format_data->param_name, "");
- openvas_append_string (&create_report_format_data->param_type, "");
openvas_append_string (&create_report_format_data->param_value, "");
create_report_format_data->param_options = make_array ();
set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM);
@@ -5991,13 +5990,20 @@
case CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM:
if (strcasecmp ("DEFAULT", element_name) == 0)
- set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM_DEFAULT);
+ {
+ openvas_append_string (&create_report_format_data->param_default,
+ "");
+ set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM_DEFAULT);
+ }
else if (strcasecmp ("NAME", element_name) == 0)
set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM_NAME);
else if (strcasecmp ("OPTIONS", element_name) == 0)
set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM_OPTIONS);
else if (strcasecmp ("TYPE", element_name) == 0)
- set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM_TYPE);
+ {
+ openvas_append_string (&create_report_format_data->param_type, "");
+ set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM_TYPE);
+ }
else if (strcasecmp ("VALUE", element_name) == 0)
set_client_state (CLIENT_CRF_GRFR_REPORT_FORMAT_PARAM_VALUE);
else
@@ -11088,6 +11094,30 @@
g_log ("event report_format", G_LOG_LEVEL_MESSAGE,
"Report format could not be created");
break;
+ case 5:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("create_report_format",
+ "CREATE_REPORT_FORMAT PARAM requires a"
+ " DEFAULT element"));
+ g_log ("event report_format", G_LOG_LEVEL_MESSAGE,
+ "Report format could not be created");
+ break;
+ case 6:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("create_report_format",
+ "CREATE_REPORT_FORMAT PARAM MIN or MAX"
+ " out of range"));
+ g_log ("event report_format", G_LOG_LEVEL_MESSAGE,
+ "Report format could not be created");
+ break;
+ case 7:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("create_report_format",
+ "CREATE_REPORT_FORMAT PARAM requires a"
+ " TYPE element"));
+ g_log ("event report_format", G_LOG_LEVEL_MESSAGE,
+ "Report format could not be created");
+ break;
default:
{
char *uuid = report_format_uuid (new_report_format);
@@ -11166,24 +11196,26 @@
assert (strcasecmp ("PARAM", element_name) == 0);
assert (create_report_format_data->params);
assert (create_report_format_data->param_name);
- assert (create_report_format_data->param_type);
assert (create_report_format_data->param_value);
param = g_malloc (sizeof (*param));
param->fallback
= create_report_format_data->param_default
? g_strdup (create_report_format_data->param_default)
- : g_strdup (create_report_format_data->param_value);
+ : NULL;
param->name = g_strdup (create_report_format_data->param_name);
- param->type = g_strdup (create_report_format_data->param_type);
+ param->type
+ = create_report_format_data->param_type
+ ? g_strdup (create_report_format_data->param_type)
+ : NULL;
param->type_max
= create_report_format_data->param_type_max
? g_strdup (create_report_format_data->param_type_max)
- : g_strdup_printf ("%lli", LLONG_MAX);
+ : NULL;
param->type_min
= create_report_format_data->param_type_min
? g_strdup (create_report_format_data->param_type_min)
- : g_strdup_printf ("%lli", LLONG_MIN);
+ : NULL;
param->value = g_strdup (create_report_format_data->param_value);
array_add (create_report_format_data->params, param);
More information about the Openvas-commits
mailing list