[Openvas-commits] r11488 - in trunk/gsa: . src

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Tue Aug 23 16:15:57 CEST 2011


Author: mattm
Date: 2011-08-23 16:15:56 +0200 (Tue, 23 Aug 2011)
New Revision: 11488

Modified:
   trunk/gsa/ChangeLog
   trunk/gsa/src/gsad.c
   trunk/gsa/src/gsad_base.c
   trunk/gsa/src/gsad_omp.c
   trunk/gsa/src/gsad_omp.h
Log:
	Convert save_config to new param mechanism.

	* src/gsad.c (init_validator): Add config rules.
	(params_append_mhd): Catch the collection params explicitly instead of
	searching for a colon.
	(params_mhd_validate_values): New function.
	(params_mhd_validate): Validate values too.
	(exec_omp_get): Pass single param instead of many.

	* src/gsad_base.c (params_add): Set value manually to use allocated
	memory.

	* src/gsad_omp.c (member): Search in params instead of array.
	(member1): New function.
	(save_config_omp): Replace multiple args with one.

	* src/gsad_omp.h: Update header accordingly.

Modified: trunk/gsa/ChangeLog
===================================================================
--- trunk/gsa/ChangeLog	2011-08-23 13:25:10 UTC (rev 11487)
+++ trunk/gsa/ChangeLog	2011-08-23 14:15:56 UTC (rev 11488)
@@ -1,3 +1,23 @@
+2011-08-23  Matthew Mundell <matthew.mundell at greenbone.net>
+
+	Convert save_config to new param mechanism.
+
+	* src/gsad.c (init_validator): Add config rules.
+	(params_append_mhd): Catch the collection params explicitly instead of
+	searching for a colon.
+	(params_mhd_validate_values): New function.
+	(params_mhd_validate): Validate values too.
+	(exec_omp_get): Pass single param instead of many.
+
+	* src/gsad_base.c (params_add): Set value manually to use allocated
+	memory.
+
+	* src/gsad_omp.c (member): Search in params instead of array.
+	(member1): New function.
+	(save_config_omp): Replace multiple args with one.
+
+	* src/gsad_omp.h: Update header accordingly.
+
 2011-08-22  Jan-Oliver Wagner <jan-oliver.wagner at greenbone.net>
 
 	* src/html/gsad.xsl (html-gsa-navigation): Consistently mark
@@ -26,7 +46,7 @@
 	* src/gsad_oap.h: Update header accordingly.
 
 	* src/gsad_omp.c (create_agent_omp, empty_trashcan_omp)
-	(import_config_omp):: Replace multiple args with one.
+	(import_config_omp): Replace multiple args with one.
 
 	* src/gsad_omp.h: Update headers accordingly.
 

Modified: trunk/gsa/src/gsad.c
===================================================================
--- trunk/gsa/src/gsad.c	2011-08-23 13:25:10 UTC (rev 11487)
+++ trunk/gsa/src/gsad.c	2011-08-23 14:15:56 UTC (rev 11488)
@@ -590,17 +590,24 @@
   openvas_validator_add (validator, "port_range", "^((default)|([-0-9, ]{1,400}))$");
   /** @todo Better regex. */
   openvas_validator_add (validator, "preference_name", "^(.*){0,400}$");
+  openvas_validator_add (validator, "preference:",      "^$");
+  openvas_validator_add (validator, "preference:name",  "^([^[]*\\[[^]]*\\]:.*){0,400}$");
+  openvas_validator_add (validator, "preference:value", "^(.*){0,400}$");
   openvas_validator_add (validator, "pw",         "^[[:alnum:]]{1,10}$");
   openvas_validator_add (validator, "xml_file",   "^.*$");
   openvas_validator_add (validator, "report_id",  "^[a-z0-9\\-]+$");
   openvas_validator_add (validator, "report_format_id", "^[a-z0-9\\-]+$");
   openvas_validator_add (validator, "result_id",  "^[a-z0-9\\-]+$");
   openvas_validator_add (validator, "role",       "^[[:alnum:] ]{1,40}$");
+  openvas_validator_add (validator, "select:",      "^$");
+  openvas_validator_add (validator, "select:value", "^(.*){0,400}$");
   openvas_validator_add (validator, "slave_id",   "^[a-z0-9\\-]+$");
   openvas_validator_add (validator, "target_id",  "^[a-z0-9\\-]+$");
   openvas_validator_add (validator, "task_id",    "^[a-z0-9\\-]+$");
   openvas_validator_add (validator, "text",       "^.{0,1000}");
   openvas_validator_add (validator, "threat",     "^(High|Medium|Low|Log|False Positive|)$");
+  openvas_validator_add (validator, "trend:",      "^(0|1)$");
+  openvas_validator_add (validator, "trend:value", "^(0|1)$");
   openvas_validator_add (validator, "type",       "^assets$");
   openvas_validator_add (validator, "search_phrase", "^[[:alnum:][:punct:] äöüÄÖÜß]{0,400}$");
   openvas_validator_add (validator, "sort_field", "^[_[:alnum:] ]{1,20}$");
@@ -642,6 +649,8 @@
   openvas_validator_alias (validator, "result_hosts_only", "boolean");
   openvas_validator_alias (validator, "period",       "optional_number");
   openvas_validator_alias (validator, "period_unit",  "calendar_unit");
+  openvas_validator_alias (validator, "select:name",  "family");
+  openvas_validator_alias (validator, "trend:name",   "family");
 }
 
 /**
@@ -1219,30 +1228,35 @@
                    int chunk_size,
                    int chunk_offset)
 {
-  param_t *param;
-  const char *colon;
-
-  colon = strchr (name, ':');
-
-  if (colon)
+  if ((strncmp (name, "parameter:", strlen ("parameter:")) == 0)
+      || (strncmp (name, "select:", strlen ("select:")) == 0)
+      || (strncmp (name, "trend:", strlen ("trend:")) == 0))
     {
+      param_t *param;
+      const char *colon;
       gchar *prefix;
 
+      colon = strchr (name, ':');
+
       /* Hashtable param, like for radios. */
 
-      if (colon[1] == '\0')
-        return MHD_NO;
+      if ((colon - name) == (strlen (name) - 1))
+        {
+          params_append_bin (params, name, chunk_data, chunk_size, chunk_offset);
 
+          return MHD_YES;
+        }
+
       prefix = g_strndup (name, 1 + colon - name);
       param = params_get (params, prefix);
 
-      tracef ("=== prefix: %s", prefix);
-
       if (param == NULL)
         {
           param = params_add (params, prefix, "");
           param->values = params_new ();
         }
+      else if (param->values == NULL)
+        param->values = params_new ();
 
       g_free (prefix);
 
@@ -2078,8 +2092,51 @@
 }
 
 /**
- * @brief Add a param.
+ * @brief Validate param values.
  *
+ * @param[in]  params  Values.
+ */
+void
+params_mhd_validate_values (const char *parent_name, void *params)
+{
+  GHashTableIter iter;
+  gpointer name, value;
+  gchar *name_name, *value_name;
+
+  name_name = g_strdup_printf ("%sname", parent_name);
+  value_name = g_strdup_printf ("%svalue", parent_name);
+
+  g_hash_table_iter_init (&iter, params);
+  while (g_hash_table_iter_next (&iter, &name, &value))
+    {
+      param_t *param;
+      param = (param_t*) value;
+
+      if (openvas_validate (validator, name_name, name))
+        {
+          param->original_value = param->value;
+          param->value = NULL;
+          param->value_size = 0;
+          param->valid = 0;
+        }
+      else if (openvas_validate (validator, value_name, param->value))
+        {
+          param->original_value = param->value;
+          param->value = NULL;
+          param->value_size = 0;
+          param->valid = 0;
+        }
+      else
+        param->valid = 1;
+    }
+
+  g_free (name_name);
+  g_free (value_name);
+}
+
+/**
+ * @brief Validate params.
+ *
  * @param[in]  params  Params.
  */
 static void
@@ -2101,6 +2158,9 @@
         }
       else
         param->valid = 1;
+
+      if (param->values)
+        params_mhd_validate_values (name, param->values);
     }
 }
 
@@ -3815,23 +3875,7 @@
                                   : 0,
                                  con_info->req_parms.next);
     }
-  else if (!strcmp (con_info->req_parms.cmd, "save_config"))
-    {
-      validate (validator, "config_id", &con_info->req_parms.config_id);
-      validate (validator, "name", &con_info->req_parms.name);
-      validate (validator, "family_page", &con_info->req_parms.submit);
-
-      con_info->response =
-        save_config_omp (credentials,
-                         con_info->req_parms.config_id,
-                         con_info->req_parms.name,
-                         con_info->req_parms.sort_field,
-                         con_info->req_parms.sort_order,
-                         con_info->req_parms.selects,
-                         con_info->req_parms.trends,
-                         con_info->req_parms.preferences,
-                         con_info->req_parms.submit);
-    }
+  ELSE (save_config)
   else if (!strcmp (con_info->req_parms.cmd, "save_config_family"))
     {
       validate (validator, "config_id", &con_info->req_parms.config_id);

Modified: trunk/gsa/src/gsad_base.c
===================================================================
--- trunk/gsa/src/gsad_base.c	2011-08-23 13:25:10 UTC (rev 11487)
+++ trunk/gsa/src/gsad_base.c	2011-08-23 14:15:56 UTC (rev 11488)
@@ -461,7 +461,7 @@
  *
  * @param[in]  params  Params.
  * @param[in]  name    Name.
- * @param[in]  value   Value.
+ * @param[in]  value   Value.  Must be a string.
  */
 param_t *
 params_add (params_t *params, const char *name, const char *value)
@@ -509,7 +509,11 @@
               chunk_size);
       value[chunk_offset + chunk_size] = '\0';
 
-      return params_add (params, name, value);
+      param = params_add (params, name, "");
+      g_free (param->value);
+      param->value = value;
+      param->value_size = chunk_size;
+      return param;
     }
 
   new_value = realloc (param->value,

Modified: trunk/gsa/src/gsad_omp.c
===================================================================
--- trunk/gsa/src/gsad_omp.c	2011-08-23 13:25:10 UTC (rev 11487)
+++ trunk/gsa/src/gsad_omp.c	2011-08-23 14:15:56 UTC (rev 11488)
@@ -180,24 +180,51 @@
 }
 
 /**
- * @brief Test whether a string equal to a given string exists in an array.
+ * @brief Look for a param with name equal to a given string.
  *
- * @param[in]  array   Array of gchar* pointers.
+ * @param[in]  params  Params.
  * @param[in]  string  String.
  *
- * @return 1 if a string equal to \arg string exists in \arg array, else 0.
+ * @return 1 if param with name \arg string exists in \arg params, else 0.
  */
 static int
-member (GArray *array, const char *string)
+member (params_t *params, const char *string)
 {
-  const gchar *item;
-  int index = 0;
-  while ((item = g_array_index (array, gchar*, index++)))
-    if (strcmp (item, string) == 0) return 1;
+  params_iterator_t iter;
+  param_t *param;
+  char *name;
+
+  params_iterator_init (&iter, params);
+  while (params_iterator_next (&iter, &name, &param))
+    if (strcmp (name, string) == 0) return 1;
   return 0;
 }
 
 /**
+ * @brief Look for param with value 1 and name equal to given string.
+ *
+ * @param[in]  params  Params.
+ * @param[in]  string  String.
+ *
+ * @return 1 if param with name \arg string exists in \arg params, else 0.
+ */
+int
+member1 (params_t *params, const char *string)
+{
+  params_iterator_t iter;
+  param_t *param;
+  char *name;
+
+  params_iterator_init (&iter, params);
+  while (params_iterator_next (&iter, &name, &param))
+    if (param->value_size
+        && param->value[0] == '1'
+        && strcmp (name, string) == 0)
+      return 1;
+  return 0;
+}
+
+/**
  * @brief Check a modify_config response.
  *
  * @param[in]  credentials  Credentials of user issuing the action.
@@ -5555,32 +5582,19 @@
  * @brief Save details of an NVT for a config and return the next page.
  *
  * @param[in]  credentials  Username and password for authentication.
- * @param[in]  config_id    UUID of config.
- * @param[in]  name         Name of config.
- * @param[in]  sort_field   Field to sort on, or NULL.
- * @param[in]  sort_order   "ascending", "descending", or NULL.
- * @param[in]  selects      Selected families.
- * @param[in]  trends       Trend values.
- * @param[in]  preferences  Scanner preferences.
- * @param[in]  next         Name of following page.
+ * @param[in]  params       Request parameters.
  *
  * @return Following page.
  */
 char *
-save_config_omp (credentials_t * credentials,
-                 const char * config_id,
-                 const char * name,
-                 const char * sort_field,
-                 const char * sort_order,
-                 GArray * selects,
-                 GArray * trends,
-                 GArray *preferences,
-                 const char * next)
+save_config_omp (credentials_t * credentials, params_t *params)
 {
   gnutls_session_t session;
   int socket;
   char *ret;
   gchar *html;
+  const char *next;
+  params_t *preferences, *selects, *trends;
 
   switch (manager_connect (credentials, &socket, &session, &html))
     {
@@ -5601,20 +5615,21 @@
 
   /* Save preferences. */
 
+  preferences = params_values (params, "preference:");
   if (preferences)
     {
-      preference_t *preference;
-      int index = 0;
+      params_iterator_t iter;
+      char *param_name;
+      param_t *param;
 
-      while ((preference = g_array_index (preferences,
-                                          preference_t*,
-                                          index++)))
+      params_iterator_init (&iter, preferences);
+      while (params_iterator_next (&iter, &param_name, &param))
         {
           gchar *value;
 
-          value = preference->value_size
-                  ? g_base64_encode ((guchar *) preference->value,
-                                     preference->value_size)
+          value = param->value_size
+                  ? g_base64_encode ((guchar *) param->value,
+                                     param->value_size)
                   : g_strdup ("");
 
           if (openvas_server_sendf (&session,
@@ -5624,8 +5639,8 @@
                                     "<value>%s</value>"
                                     "</preference>"
                                     "</modify_config>",
-                                    config_id,
-                                    preference->name,
+                                    params_value (params, "config_id"),
+                                    param_name,
                                     value)
               == -1)
             {
@@ -5640,7 +5655,6 @@
             }
           g_free (value);
 
-
           ret = check_modify_config (credentials, &session, __FUNCTION__,
                                      __LINE__);
           if (ret)
@@ -5653,12 +5667,16 @@
 
   /* Update the config. */
 
+  trends = params_values (params, "trend:");
+
   if (openvas_server_sendf (&session,
                             "<modify_config config_id=\"%s\">"
                             "<family_selection>"
                             "<growing>%i</growing>",
-                            config_id,
-                            trends && member (trends, ""))
+                            params_value (params, "config_id"),
+                            trends
+                            && params_value (params, "trend:")
+                            && strcmp (params_value (params, "trend:"), "0"))
       == -1)
     {
       openvas_server_close (socket, session);
@@ -5670,12 +5688,16 @@
                            "/omp?cmd=get_configs");
     }
 
+  selects = params_values (params, "select:");
+
   if (selects)
     {
       gchar *family;
-      int index = 0;
+      params_iterator_t iter;
+      param_t *param;
 
-      while ((family = g_array_index (selects, gchar*, index++)))
+      params_iterator_init (&iter, selects);
+      while (params_iterator_next (&iter, &family, &param))
         if (openvas_server_sendf (&session,
                                   "<family>"
                                   "<name>%s</name>"
@@ -5683,7 +5705,7 @@
                                   "<growing>%i</growing>"
                                   "</family>",
                                   family,
-                                  trends && member (trends, family))
+                                  trends && member1 (trends, family))
             == -1)
           {
             openvas_server_close (socket, session);
@@ -5699,10 +5721,14 @@
   if (trends)
     {
       gchar *family;
-      int index = 0;
+      params_iterator_t iter;
+      param_t *param;
 
-      while ((family = g_array_index (trends, gchar*, index++)))
+      params_iterator_init (&iter, trends);
+      while (params_iterator_next (&iter, &family, &param))
         {
+          if (param->value_size == 0) continue;
+          if (param->value[0] == '0') continue;
           if (selects && member (selects, family)) continue;
           if (openvas_server_sendf (&session,
                                     "<family>"
@@ -5749,9 +5775,11 @@
 
   /* Return the next page. */
 
+  next = params_value (params, "next:");
   if (next == NULL || strcmp (next, "Save Config") == 0)
-    return get_config_omp (credentials, config_id, 1);
-  return get_config_family_omp (credentials, config_id, name, next, NULL, NULL,
+    return get_config_omp (credentials, params_value (params, "config_id"), 1);
+  return get_config_family_omp (credentials, params_value (params, "config_id"),
+                                params_value (params, "name"), next, NULL, NULL,
                                 1);
 }
 

Modified: trunk/gsa/src/gsad_omp.h
===================================================================
--- trunk/gsa/src/gsad_omp.h	2011-08-23 13:25:10 UTC (rev 11487)
+++ trunk/gsa/src/gsad_omp.h	2011-08-23 14:15:56 UTC (rev 11488)
@@ -136,9 +136,7 @@
 
 char * get_config_omp (credentials_t *, const char *, int);
 char * get_configs_omp (credentials_t *, const char *, const char *);
-char * save_config_omp (credentials_t *, const char *, const char *,
-                        const char *, const char *, GArray *, GArray *,
-                        GArray *, const char *);
+char * save_config_omp (credentials_t *, params_t *);
 char * get_config_family_omp (credentials_t *, const char *, const char *,
                               const char *, const char *, const char *, int);
 char * save_config_family_omp (credentials_t *, const char *, const char *,



More information about the Openvas-commits mailing list