[Openvas-commits] r13220 - in trunk/openvas-manager: . src
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Wed Apr 11 18:16:18 CEST 2012
Author: mattm
Date: 2012-04-11 18:16:18 +0200 (Wed, 11 Apr 2012)
New Revision: 13220
Modified:
trunk/openvas-manager/ChangeLog
trunk/openvas-manager/src/manage.h
trunk/openvas-manager/src/manage_sql.c
trunk/openvas-manager/src/omp.c
Log:
Add OMP MODIFY_TARGET.
* src/manage_sql.c (modify_target): New function.
* src/manage.h: Add header accordingly.
* src/omp.c (help_text, command_data_t, client_state_t): Add
modify_target.
(modify_target_data_t): New structure.
(modify_target_data_reset): New function.
(modify_target_data): New variable.
(omp_xml_handle_start_element, omp_xml_handle_end_element)
(omp_xml_handle_text): Add MODIFY_TARGET handling.
Modified: trunk/openvas-manager/ChangeLog
===================================================================
--- trunk/openvas-manager/ChangeLog 2012-04-11 15:04:23 UTC (rev 13219)
+++ trunk/openvas-manager/ChangeLog 2012-04-11 16:16:18 UTC (rev 13220)
@@ -1,3 +1,19 @@
+2012-04-11 Matthew Mundell <matthew.mundell at greenbone.net>
+
+ Add OMP MODIFY_TARGET.
+
+ * src/manage_sql.c (modify_target): New function.
+
+ * src/manage.h: Add header accordingly.
+
+ * src/omp.c (help_text, command_data_t, client_state_t): Add
+ modify_target.
+ (modify_target_data_t): New structure.
+ (modify_target_data_reset): New function.
+ (modify_target_data): New variable.
+ (omp_xml_handle_start_element, omp_xml_handle_end_element)
+ (omp_xml_handle_text): Add MODIFY_TARGET handling.
+
2012-04-09 Matthew Mundell <matthew.mundell at greenbone.net>
* src/manage_sql.c (manage_set_setting): Add uuid arg. Set Rows Per Page
Modified: trunk/openvas-manager/src/manage.h
===================================================================
--- trunk/openvas-manager/src/manage.h 2012-04-11 15:04:23 UTC (rev 13219)
+++ trunk/openvas-manager/src/manage.h 2012-04-11 16:16:18 UTC (rev 13220)
@@ -900,6 +900,11 @@
const char*, const char*, target_t*);
int
+modify_target (const char*, const char*, const char*, const char*, const char*,
+ const char*, const char*, const char*, const char*,
+ const char*, const char*);
+
+int
delete_target (const char*, int);
int
Modified: trunk/openvas-manager/src/manage_sql.c
===================================================================
--- trunk/openvas-manager/src/manage_sql.c 2012-04-11 15:04:23 UTC (rev 13219)
+++ trunk/openvas-manager/src/manage_sql.c 2012-04-11 16:16:18 UTC (rev 13220)
@@ -22603,6 +22603,225 @@
}
/**
+ * @brief Modify a target.
+ *
+ * The \param hosts and \param target_locator parameters are mutually
+ * exclusive, if target_locator is not NULL, always try to import from source.
+ *
+ * @param[in] target_id UUID of target.
+ * @param[in] name Name of target.
+ * @param[in] hosts Host list of target.
+ * @param[in] comment Comment on target.
+ * @param[in] port_list_id Port list of target (overrides \p port_range).
+ * @param[in] ssh_lsc_credential_id SSH LSC credential.
+ * @param[in] ssh_port Port for SSH LSC login.
+ * @param[in] smb_lsc_credential_id SMB LSC credential.
+ * @param[in] target_locator Name of target_locator to import target(s)
+ * from.
+ * @param[in] username Username to authenticate with against source.
+ * @param[in] password Password for user \p username.
+ *
+ * @return 0 success, 1 target exists already, 2 error in host specification,
+ * 3 too many hosts, 4 error in port range, 5 error in SSH port,
+ * 6 failed to find port list, 7 failed to find SSH cred, 8 failed to
+ * find SMB cred, 9 failed to find target, -1 if import from target
+ * locator failed or response was empty FIX or internal error.
+ */
+int
+modify_target (const char *target_id, const char *name, const char *hosts,
+ const char *comment, const char *port_list_id,
+ const char *ssh_lsc_credential_id, const char *ssh_port,
+ const char *smb_lsc_credential_id,
+ const char *target_locator, const char *username,
+ const char *password)
+{
+ gchar *quoted_name, *quoted_hosts, *quoted_comment, *quoted_ssh_port;
+ port_list_t port_list;
+ target_t target;
+ lsc_credential_t ssh_lsc_credential, smb_lsc_credential;
+
+ if (ssh_port && validate_port (ssh_port))
+ return 5;
+
+ sql ("BEGIN IMMEDIATE;");
+
+ assert (current_credentials.uuid);
+
+ target = 0;
+ port_list = 0;
+ if (find_target (target_id, &target)
+ || find_port_list (port_list_id, &port_list))
+ {
+ sql ("ROLLBACK;");
+ return -1;
+ }
+
+ if (target == 0)
+ {
+ sql ("ROLLBACK;");
+ return 9;
+ }
+
+ if (port_list == 0)
+ {
+ sql ("ROLLBACK;");
+ return 6;
+ }
+
+ ssh_lsc_credential = 0;
+ if (ssh_lsc_credential_id
+ && find_lsc_credential (ssh_lsc_credential_id, &ssh_lsc_credential))
+ {
+ sql ("ROLLBACK;");
+ return -1;
+ }
+
+ if (ssh_lsc_credential_id && ssh_lsc_credential == 0)
+ {
+ sql ("ROLLBACK;");
+ return 7;
+ }
+
+ smb_lsc_credential = 0;
+ if (smb_lsc_credential_id
+ && find_lsc_credential (smb_lsc_credential_id, &smb_lsc_credential))
+ {
+ sql ("ROLLBACK;");
+ return -1;
+ }
+
+ if (smb_lsc_credential_id && smb_lsc_credential == 0)
+ {
+ sql ("ROLLBACK;");
+ return 8;
+ }
+
+ /* Check whether a target with the same name exists already. */
+ quoted_name = sql_quote (name);
+ if (sql_int (0, 0,
+ "SELECT COUNT(*) FROM targets"
+ " WHERE name = '%s'"
+ " AND ROWID != %llu"
+ " AND ((owner IS NULL) OR (owner ="
+ " (SELECT users.ROWID FROM users WHERE users.uuid = '%s')));",
+ quoted_name,
+ target,
+ current_credentials.uuid))
+ {
+ g_free (quoted_name);
+ sql ("ROLLBACK;");
+ return 1;
+ }
+
+ /* Import targets from target locator. */
+ if (target_locator != NULL)
+ {
+ int max;
+ gchar *clean;
+ GSList* hosts_list = resource_request_resource (target_locator,
+ RESOURCE_TYPE_TARGET,
+ username ? username : "",
+ password ? password : "");
+
+ if (hosts_list == NULL)
+ {
+ g_free (quoted_name);
+ sql ("ROLLBACK;");
+ return -1;
+ }
+
+ gchar* import_hosts = openvas_string_flatten_string_list (hosts_list,
+ ", ");
+
+ openvas_string_list_free (hosts_list);
+ max = manage_max_hosts (import_hosts);
+ if (max <= 0)
+ {
+ g_free (import_hosts);
+ g_free (quoted_name);
+ sql ("ROLLBACK;");
+ return 2;
+ }
+ clean = clean_hosts (import_hosts, &max);
+ if (max > MANAGE_MAX_HOSTS)
+ {
+ g_free (import_hosts);
+ g_free (quoted_name);
+ sql ("ROLLBACK;");
+ return 3;
+ }
+ g_free (import_hosts);
+ quoted_hosts = sql_quote (clean);
+ g_free (clean);
+ }
+ else
+ {
+ int max;
+ gchar *clean;
+
+ /* User provided hosts. */
+
+ max = manage_max_hosts (hosts);
+ if (max <= 0)
+ {
+ g_free (quoted_name);
+ sql ("ROLLBACK;");
+ return 2;
+ }
+ clean = clean_hosts (hosts, &max);
+ if (max > MANAGE_MAX_HOSTS)
+ {
+ g_free (quoted_name);
+ sql ("ROLLBACK;");
+ return 3;
+ }
+ quoted_hosts = sql_quote (clean);
+ g_free (clean);
+ }
+
+ if (ssh_lsc_credential)
+ quoted_ssh_port = sql_insert (ssh_port ? ssh_port : "22");
+ else
+ quoted_ssh_port = g_strdup ("NULL");
+
+ if (comment)
+ {
+ quoted_comment = sql_quote (comment);
+ sql ("UPDATE targets SET"
+ " name = '%s',"
+ " hosts = '%s',"
+ " comment = '%s',"
+ " lsc_credential = %llu,"
+ " ssh_port = %s,"
+ " smb_lsc_credential = %llu,"
+ " port_range = %llu"
+ " WHERE ROWID = %llu;",
+ quoted_name, quoted_hosts, quoted_comment, ssh_lsc_credential,
+ quoted_ssh_port, smb_lsc_credential, port_list, target);
+ g_free (quoted_comment);
+ }
+ else
+ sql ("UPDATE targets SET"
+ " name = '%s',"
+ " hosts = '%s',"
+ " lsc_credential = %llu,"
+ " ssh_port = %s,"
+ " smb_lsc_credential = %llu,"
+ " port_range = %llu"
+ " WHERE ROWID = %llu;",
+ quoted_name, quoted_hosts, ssh_lsc_credential, quoted_ssh_port,
+ smb_lsc_credential, port_list, target);
+
+ g_free (quoted_name);
+ g_free (quoted_hosts);
+ g_free (quoted_ssh_port);
+
+ sql ("COMMIT;");
+
+ return 0;
+}
+
+/**
* @brief Term.
*/
struct term
Modified: trunk/openvas-manager/src/omp.c
===================================================================
--- trunk/openvas-manager/src/omp.c 2012-04-11 15:04:23 UTC (rev 13219)
+++ trunk/openvas-manager/src/omp.c 2012-04-11 16:16:18 UTC (rev 13220)
@@ -399,6 +399,7 @@
" MODIFY_REPORT Modify an existing report.\n"
" MODIFY_REPORT_FORMAT Modify an existing report format.\n"
" MODIFY_SETTING Modify an existing setting.\n"
+" MODIFY_TARGET Modify an existing target.\n"
" MODIFY_TASK Update an existing task.\n"
" PAUSE_TASK Pause a running task.\n"
" RESTORE Restore a resource.\n"
@@ -2410,6 +2411,47 @@
}
/**
+ * @brief Command data for the modify_target command.
+ */
+typedef struct
+{
+ char *comment; ///< Comment.
+ char *hosts; ///< Hosts for target.
+ char *name; ///< Name of target.
+ char *port_list_id; ///< Port list for target.
+ char *ssh_lsc_credential_id; ///< SSH LSC credential for target.
+ char *ssh_port; ///< Port for SSH LSC.
+ char *smb_lsc_credential_id; ///< SMB LSC credential for target.
+ char *target_id; ///< Target UUID.
+ char *target_locator; ///< Target locator (source name).
+ char *target_locator_password; ///< Target locator credentials: password.
+ char *target_locator_username; ///< Target locator credentials: username.
+} modify_target_data_t;
+
+/**
+ * @brief Reset command data.
+ *
+ * @param[in] data Command data.
+ */
+static void
+modify_target_data_reset (modify_target_data_t *data)
+{
+ free (data->comment);
+ free (data->hosts);
+ free (data->name);
+ free (data->port_list_id);
+ free (data->ssh_lsc_credential_id);
+ free (data->ssh_port);
+ free (data->smb_lsc_credential_id);
+ free (data->target_id);
+ free (data->target_locator);
+ free (data->target_locator_password);
+ free (data->target_locator_username);
+
+ memset (data, 0, sizeof (modify_target_data_t));
+}
+
+/**
* @brief Command data for the modify_task command.
*/
typedef struct
@@ -2817,6 +2859,7 @@
modify_report_data_t modify_report; ///< modify_report
modify_report_format_data_t modify_report_format; ///< modify_report_format
modify_setting_data_t modify_setting; ///< modify_setting
+ modify_target_data_t modify_target; ///< modify_target
modify_task_data_t modify_task; ///< modify_task
pause_task_data_t pause_task; ///< pause_task
restore_data_t restore; ///< restore
@@ -3202,6 +3245,12 @@
= &(command_data.modify_setting);
/**
+ * @brief Parser callback data for MODIFY_TARGET.
+ */
+modify_target_data_t *modify_target_data
+ = &(command_data.modify_target);
+
+/**
* @brief Parser callback data for MODIFY_TASK.
*/
modify_task_data_t *modify_task_data
@@ -3618,6 +3667,18 @@
CLIENT_MODIFY_SETTING,
CLIENT_MODIFY_SETTING_NAME,
CLIENT_MODIFY_SETTING_VALUE,
+ CLIENT_MODIFY_TARGET,
+ CLIENT_MODIFY_TARGET_COMMENT,
+ CLIENT_MODIFY_TARGET_HOSTS,
+ CLIENT_MODIFY_TARGET_SSH_LSC_CREDENTIAL,
+ CLIENT_MODIFY_TARGET_SSH_LSC_CREDENTIAL_PORT,
+ CLIENT_MODIFY_TARGET_SMB_LSC_CREDENTIAL,
+ CLIENT_MODIFY_TARGET_NAME,
+ CLIENT_MODIFY_TARGET_PORT_RANGE,
+ CLIENT_MODIFY_TARGET_PORT_LIST,
+ CLIENT_MODIFY_TARGET_TARGET_LOCATOR,
+ CLIENT_MODIFY_TARGET_TARGET_LOCATOR_PASSWORD,
+ CLIENT_MODIFY_TARGET_TARGET_LOCATOR_USERNAME,
CLIENT_MODIFY_TASK,
CLIENT_MODIFY_TASK_COMMENT,
CLIENT_MODIFY_TASK_ALERT,
@@ -5112,6 +5173,12 @@
&modify_setting_data->setting_id);
set_client_state (CLIENT_MODIFY_SETTING);
}
+ else if (strcasecmp ("MODIFY_TARGET", element_name) == 0)
+ {
+ append_attribute (attribute_names, attribute_values, "target_id",
+ &modify_target_data->target_id);
+ set_client_state (CLIENT_MODIFY_TARGET);
+ }
else if (strcasecmp ("MODIFY_TASK", element_name) == 0)
{
append_attribute (attribute_names, attribute_values, "task_id",
@@ -5374,6 +5441,47 @@
}
ELSE_ERROR ("modify_setting");
+ case CLIENT_MODIFY_TARGET:
+ if (strcasecmp ("COMMENT", element_name) == 0)
+ set_client_state (CLIENT_MODIFY_TARGET_COMMENT);
+ else if (strcasecmp ("HOSTS", element_name) == 0)
+ set_client_state (CLIENT_MODIFY_TARGET_HOSTS);
+ else if (strcasecmp ("PORT_LIST", element_name) == 0)
+ {
+ append_attribute (attribute_names, attribute_values, "id",
+ &modify_target_data->port_list_id);
+ set_client_state (CLIENT_MODIFY_TARGET_PORT_LIST);
+ }
+ else if (strcasecmp ("SSH_LSC_CREDENTIAL", element_name) == 0)
+ {
+ append_attribute (attribute_names, attribute_values, "id",
+ &modify_target_data->ssh_lsc_credential_id);
+ set_client_state (CLIENT_MODIFY_TARGET_SSH_LSC_CREDENTIAL);
+ }
+ else if (strcasecmp ("SMB_LSC_CREDENTIAL", element_name) == 0)
+ {
+ append_attribute (attribute_names, attribute_values, "id",
+ &modify_target_data->smb_lsc_credential_id);
+ set_client_state (CLIENT_MODIFY_TARGET_SMB_LSC_CREDENTIAL);
+ }
+ else if (strcasecmp ("NAME", element_name) == 0)
+ set_client_state (CLIENT_MODIFY_TARGET_NAME);
+ else if (strcasecmp ("TARGET_LOCATOR", element_name) == 0)
+ set_client_state (CLIENT_MODIFY_TARGET_TARGET_LOCATOR);
+ ELSE_ERROR ("modify_target");
+
+ case CLIENT_MODIFY_TARGET_SSH_LSC_CREDENTIAL:
+ if (strcasecmp ("PORT", element_name) == 0)
+ set_client_state (CLIENT_MODIFY_TARGET_SSH_LSC_CREDENTIAL_PORT);
+ ELSE_ERROR ("modify_target");
+
+ case CLIENT_MODIFY_TARGET_TARGET_LOCATOR:
+ if (strcasecmp ("PASSWORD", element_name) == 0)
+ set_client_state (CLIENT_MODIFY_TARGET_TARGET_LOCATOR_PASSWORD);
+ else if (strcasecmp ("USERNAME", element_name) == 0)
+ set_client_state (CLIENT_MODIFY_TARGET_TARGET_LOCATOR_USERNAME);
+ ELSE_ERROR ("modify_target");
+
case CLIENT_MODIFY_TASK:
if (strcasecmp ("COMMENT", element_name) == 0)
{
@@ -13383,6 +13491,165 @@
CLOSE (CLIENT_MODIFY_OVERRIDE, TEXT);
CLOSE (CLIENT_MODIFY_OVERRIDE, THREAT);
+ case CLIENT_MODIFY_TARGET:
+ {
+ assert (strcasecmp ("MODIFY_TARGET", element_name) == 0);
+ assert (modify_target_data->name != NULL);
+ assert (modify_target_data->target_locator
+ || modify_target_data->hosts != NULL);
+
+ if (openvas_is_user_observer (current_credentials.username))
+ {
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "MODIFY is forbidden for observer users"));
+ }
+ else if (strlen (modify_target_data->name) == 0)
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "MODIFY_TARGET name must be at"
+ " least one character long"));
+ else if (strlen (modify_target_data->hosts) == 0
+ && modify_target_data->target_locator == NULL)
+ /** @todo Legitimate to pass an empty hosts element? */
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "MODIFY_TARGET hosts must both be at least one"
+ " character long, or TARGET_LOCATOR must"
+ " be set"));
+ else if (strlen (modify_target_data->hosts) != 0
+ && modify_target_data->target_locator != NULL)
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ " MODIFY_TARGET requires either a"
+ " TARGET_LOCATOR or a host"));
+ /* Modify target from host string. */
+ else switch (modify_target
+ (modify_target_data->target_id,
+ modify_target_data->name,
+ modify_target_data->hosts,
+ modify_target_data->comment,
+ modify_target_data->port_list_id,
+ modify_target_data->ssh_lsc_credential_id,
+ modify_target_data->ssh_port,
+ modify_target_data->smb_lsc_credential_id,
+ modify_target_data->target_locator,
+ modify_target_data->target_locator_username,
+ modify_target_data->target_locator_password))
+ {
+ case 1:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "Target exists already"));
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ break;
+ case 2:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "Error in host specification"));
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ break;
+ case 3:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "Host specification exceeds"
+ " " G_STRINGIFY (MANAGE_MAX_HOSTS)
+ " hosts"));
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ break;
+ case 4:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "Error in port range"));
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ break;
+ case 5:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_ERROR_SYNTAX ("modify_target",
+ "Error in SSH port"));
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ break;
+ case 6:
+ // FIX 6 missing in CREATE_TARGET?
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ if (send_find_error_to_client
+ ("modify_target",
+ "port_list",
+ modify_target_data->port_list_id,
+ write_to_client,
+ write_to_client_data))
+ {
+ error_send_to_client (error);
+ return;
+ }
+ break;
+ case 7:
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ if (send_find_error_to_client
+ ("modify_target",
+ "LSC credential",
+ modify_target_data->ssh_lsc_credential_id,
+ write_to_client,
+ write_to_client_data))
+ {
+ error_send_to_client (error);
+ return;
+ }
+ break;
+ case 8:
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ if (send_find_error_to_client
+ ("modify_target",
+ "LSC credential",
+ modify_target_data->smb_lsc_credential_id,
+ write_to_client,
+ write_to_client_data))
+ {
+ error_send_to_client (error);
+ return;
+ }
+ break;
+ case -1:
+ SEND_TO_CLIENT_OR_FAIL
+ (XML_INTERNAL_ERROR ("modify_target"));
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target could not be modified");
+ break;
+ default:
+ {
+ SENDF_TO_CLIENT_OR_FAIL (XML_OK ("modify_target"));
+ g_log ("event target", G_LOG_LEVEL_MESSAGE,
+ "Target %s has been modified",
+ modify_target_data->target_id);
+ break;
+ }
+ }
+
+ modify_target_data_reset (modify_target_data);
+ set_client_state (CLIENT_AUTHENTIC);
+ break;
+ }
+ CLOSE (CLIENT_MODIFY_TARGET, COMMENT);
+ CLOSE (CLIENT_MODIFY_TARGET, HOSTS);
+ CLOSE (CLIENT_MODIFY_TARGET, NAME);
+ CLOSE (CLIENT_MODIFY_TARGET, PORT_LIST);
+ CLOSE (CLIENT_MODIFY_TARGET, PORT_RANGE);
+ CLOSE (CLIENT_MODIFY_TARGET, SSH_LSC_CREDENTIAL);
+ CLOSE (CLIENT_MODIFY_TARGET, SMB_LSC_CREDENTIAL);
+ CLOSE (CLIENT_MODIFY_TARGET_TARGET_LOCATOR, PASSWORD);
+ CLOSE (CLIENT_MODIFY_TARGET, TARGET_LOCATOR);
+ CLOSE (CLIENT_MODIFY_TARGET_TARGET_LOCATOR, USERNAME);
+
+ CLOSE (CLIENT_MODIFY_TARGET_SSH_LSC_CREDENTIAL, PORT);
+
case CLIENT_TEST_ALERT:
if (test_alert_data->alert_id)
{
@@ -16882,6 +17149,28 @@
&modify_override_data->threat);
+ APPEND (CLIENT_MODIFY_TARGET_COMMENT,
+ &modify_target_data->comment);
+
+ APPEND (CLIENT_MODIFY_TARGET_HOSTS,
+ &modify_target_data->hosts);
+
+ APPEND (CLIENT_MODIFY_TARGET_NAME,
+ &modify_target_data->name);
+
+ APPEND (CLIENT_MODIFY_TARGET_TARGET_LOCATOR,
+ &modify_target_data->target_locator);
+
+ APPEND (CLIENT_MODIFY_TARGET_TARGET_LOCATOR_PASSWORD,
+ &modify_target_data->target_locator_password);
+
+ APPEND (CLIENT_MODIFY_TARGET_TARGET_LOCATOR_USERNAME,
+ &modify_target_data->target_locator_username);
+
+ APPEND (CLIENT_MODIFY_TARGET_SSH_LSC_CREDENTIAL_PORT,
+ &modify_target_data->ssh_port);
+
+
default:
/* Just pass over the text. */
break;
More information about the Openvas-commits
mailing list