[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 (&params))
-            g_string_append_printf
-             (format,
-              "%s%s",
-              report_format_param_iterator_name (&params),
-              report_format_param_iterator_value (&params));
+            {
+              g_string_append_printf
+               (format,
+                "%s%s%s",
+                report_format_param_iterator_name (&params),
+                report_format_param_iterator_value (&params),
+                report_format_param_iterator_type_name (&params));
+
+              if (report_format_param_iterator_type_min (&params) > LLONG_MIN)
+                g_string_append_printf
+                 (format,
+                  "%lli",
+                  report_format_param_iterator_type_min (&params));
+
+              if (report_format_param_iterator_type_max (&params) < LLONG_MAX)
+                g_string_append_printf
+                 (format,
+                  "%lli",
+                  report_format_param_iterator_type_max (&params));
+
+              g_string_append_printf
+               (format,
+                "%s%s",
+                report_format_param_iterator_type_regex (&params),
+                report_format_param_iterator_fallback (&params));
+
+              {
+                iterator_t options;
+                init_param_option_iterator
+                 (&options,
+                  report_format_param_iterator_param (&params),
+                  1,
+                  NULL);
+                while (next (&options))
+                  if (param_option_iterator_value (&options))
+                    g_string_append_printf
+                     (format,
+                      "%s",
+                      param_option_iterator_value (&options));
+              }
+            }
           cleanup_iterator (&params);
 
           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