[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, ¶m))
+ 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, ¶m))
+ 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, ¶m_name, ¶m))
{
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, ¶m))
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, ¶m))
{
+ 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