From f366be65057ee0421f91058d846b734a37d37f65 Mon Sep 17 00:00:00 2001 From: Juan Jose Nicola Date: Tue, 23 Jun 2020 15:37:23 +0200 Subject: [PATCH] Set the task as interrupted. Ospd sends INTERRUPTED the scanner was unexpectedly interrupted. --- CHANGELOG.md | 1 + src/manage.c | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36543fdef..aaaa7a2ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -123,6 +123,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix and simplify parse_iso_time and add tests [#1129](https://github.com/greenbone/gvmd/pull/1129) - Fix gvm-manage-certs. [#1140](https://github.com/greenbone/gvmd/pull/1140) - Fix CVE scanner and results handling [#1141](https://github.com/greenbone/gvmd/pull/1141) +- Handle INTERRUPTED scans [#1146](https://github.com/greenbone/gvmd/pull/1146) ### Removed - Remove support for "All SecInfo": removal of "allinfo" for type in get_info [#790](https://github.com/greenbone/gvmd/pull/790) diff --git a/src/manage.c b/src/manage.c index 48f2d7853..e39e02767 100644 --- a/src/manage.c +++ b/src/manage.c @@ -600,7 +600,7 @@ truncate_text (gchar *string, size_t max_len, gboolean xml, const char *suffix) // move the offset to the start of that entity. ssize_t entity_start_offset = offset; - while (entity_start_offset >= 0 + while (entity_start_offset >= 0 && string[entity_start_offset] != '&') { entity_start_offset --; @@ -3545,7 +3545,8 @@ get_osp_scan_status (const char *scan_id, const char *host, int port, * @param[in] report The report. * @param[in] scan_id The UUID of the scan on the scanner. * - * @return 0 if success, -1 if error, -2 if scan was stopped. + * @return 0 if success, -1 if error, -2 if scan was stopped, + * -3 if the scan was interrupted. */ static int handle_osp_scan (task_t task, report_t report, const char *scan_id) @@ -3628,6 +3629,19 @@ handle_osp_scan (task_t task, report_t report, const char *scan_id) queued_status_updated = TRUE; } } + else if (osp_scan_status == OSP_SCAN_STATUS_INTERRUPTED) + { + result_t result = make_osp_result + (task, "", "", "", + threat_message_type ("Error"), + "Task interrupted unexpectedly", "", "", + QOD_DEFAULT); + report_add_result (report, result); + delete_osp_scan (scan_id, host, port, ca_pub, key_pub, + key_priv); + rc = -3; + break; + } else if (progress >= 0 && progress < 100 && osp_scan_status == OSP_SCAN_STATUS_STOPPED) { @@ -4560,6 +4574,11 @@ fork_osp_scan_handler (task_t task, target_t target, int from, set_task_run_status (task, TASK_STATUS_STOPPED); set_report_scan_run_status (global_current_report, TASK_STATUS_STOPPED); } + else if (rc == -3) + { + set_task_run_status (task, TASK_STATUS_INTERRUPTED); + set_report_scan_run_status (global_current_report, TASK_STATUS_INTERRUPTED); + } set_task_end_time_epoch (task, time (NULL)); set_scan_end_time_epoch (global_current_report, time (NULL));