[Openvas-commits] r3084 - in trunk/openvas-manager: . src

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Apr 9 15:29:54 CEST 2009


Author: mattm
Date: 2009-04-09 15:29:40 +0200 (Thu, 09 Apr 2009)
New Revision: 3084

Modified:
   trunk/openvas-manager/ChangeLog
   trunk/openvas-manager/src/manage.c
   trunk/openvas-manager/src/manage.h
   trunk/openvas-manager/src/otp.c
Log:
	Write OTP report messages directly to the report on disk, instead of
	buffering the messages in memory.

	* src/manage.h (task_t): Correct run_status type.  Add current_report.
	Remove message arrays.
	(make_task): Adjust annotation.
	(make_report_id): Include in exportlocal annotation.

	* src/manage.c (free_message): Remove.
	(free_task, make_task): Handle current report.  Remove message array
	handling.
	(create_report_file): New function.  Body from src/otp.c save_report.
	(start_task): Create report stream before starting

	* src/otp.c (free_message): Enable.  Take only one arg.
	(write_message): Take stream and type args directly.
	(write_timestamp): Take host arg.
	(save_report): Just close the report stream.
	(append_timestamp): New function.
	(append_debug_message, append_hole_message, append_info_message)
	(append_log_message, append_note_message): Write the message to the report
	stream.
	(process_otp_server_input): Free current_message after appending it.
	Append timestamps in time cases.  In SERVER_DEBUG_OID and SERVER_HOLE_OID
	also check that the current_server_task exists.  Move report saving from
	HOST_END to SCAN_END.


Modified: trunk/openvas-manager/ChangeLog
===================================================================
--- trunk/openvas-manager/ChangeLog	2009-04-09 13:26:33 UTC (rev 3083)
+++ trunk/openvas-manager/ChangeLog	2009-04-09 13:29:40 UTC (rev 3084)
@@ -1,3 +1,32 @@
+2009-04-09  Matthew Mundell <matt at mundell.ukfsn.org>
+
+	Write OTP report messages directly to the report on disk, instead of
+	buffering the messages in memory.
+
+	* src/manage.h (task_t): Correct run_status type.  Add current_report.
+	Remove message arrays.
+	(make_task): Adjust annotation.
+	(make_report_id): Include in exportlocal annotation.
+
+	* src/manage.c (free_message): Remove.
+	(free_task, make_task): Handle current report.  Remove message array
+	handling.
+	(create_report_file): New function.  Body from src/otp.c save_report.
+	(start_task): Create report stream before starting
+
+	* src/otp.c (free_message): Enable.  Take only one arg.
+	(write_message): Take stream and type args directly.
+	(write_timestamp): Take host arg.
+	(save_report): Just close the report stream.
+	(append_timestamp): New function.
+	(append_debug_message, append_hole_message, append_info_message)
+	(append_log_message, append_note_message): Write the message to the report
+	stream.
+	(process_otp_server_input): Free current_message after appending it.
+	Append timestamps in time cases.  In SERVER_DEBUG_OID and SERVER_HOLE_OID
+	also check that the current_server_task exists.  Move report saving from
+	HOST_END to SCAN_END.
+
 2009-04-09  Michael Wiegand <michael.wiegand at intevation.de>
 
 	* src/tests/common.c: Added connect_to_manager_host_port, a modification
@@ -5,7 +34,7 @@
 	ports. Made connect_to_manager a wrapper around
 	connect_to_manager_host_port using OPENVASMD_ADDRESS and OPENVASMD_PORT.
 
-2009-04-01  Matthew Mundell <matt at mundell.ukfsn.org>
+2009-04-08  Matthew Mundell <matt at mundell.ukfsn.org>
 
 	Cleanup and annotate more, from Splint.
 

Modified: trunk/openvas-manager/src/manage.c
===================================================================
--- trunk/openvas-manager/src/manage.c	2009-04-09 13:26:33 UTC (rev 3083)
+++ trunk/openvas-manager/src/manage.c	2009-04-09 13:29:40 UTC (rev 3084)
@@ -538,24 +538,7 @@
   return TRUE;
 }
 
-// FIX should be in otp.c
 /**
- * @brief Free a message for g_ptr_array_foreach.
- *
- * @param[in]  message       Pointer to the message.
- * @param[in]  dummy         Dummy parameter.
- */
-static void
-free_message (/*@only@*/ gpointer message,
-              /*@unused@*/ gpointer dummy)
-{
-  message_t* msg = (message_t*) message;
-  if (msg->description) free (msg->description);
-  if (msg->oid) free (msg->oid);
-  free (msg);
-}
-
-/**
  * @brief Free a task.
  *
  * Free all the members of a task.
@@ -565,8 +548,7 @@
 static void
 free_task (/*@special@*/ /*@dependent@*/ task_t* task)
   /*@ensures isnull task->name@*/
-  /*@releases task->comment, task->open_ports, task->debugs, task->holes,
-              task->infos, task->logs, task->notes@*/
+  /*@releases task->comment, task->open_ports@*/
 {
   tracef ("   Freeing task %u: \"%s\" %s (%i) %.*s[...]\n\n",
           task->id,
@@ -581,32 +563,12 @@
   if (task->description) free (task->description);
   if (task->start_time) free (task->start_time);
   if (task->end_time) free (task->end_time);
-  if (task->open_ports) (void) g_array_free (task->open_ports, TRUE);
-  if (task->debugs)
+  if (task->current_report)
     {
-      g_ptr_array_foreach (task->debugs, free_message, NULL);
-      (void) g_ptr_array_free (task->debugs, TRUE);
+      (void) fclose (task->current_report); // FIX check for error
+      task->current_report = NULL;
     }
-  if (task->holes)
-    {
-      g_ptr_array_foreach (task->holes, free_message, NULL);
-      (void) g_ptr_array_free (task->holes, TRUE);
-    }
-  if (task->infos)
-    {
-      g_ptr_array_foreach (task->infos, free_message, NULL);
-      (void) g_ptr_array_free (task->infos, TRUE);
-    }
-  if (task->logs)
-    {
-      g_ptr_array_foreach (task->logs, free_message, NULL);
-      (void) g_ptr_array_free (task->logs, TRUE);
-    }
-  if (task->notes)
-    {
-      g_ptr_array_foreach (task->notes, free_message, NULL);
-      (void) g_ptr_array_free (task->notes, TRUE);
-    }
+  if (task->open_ports) (void) g_array_free (task->open_ports, TRUE);
 }
 
 /**
@@ -679,17 +641,8 @@
               index->description_size = 0;
               index->run_status = TASK_STATUS_NEW;
               index->report_count = 0;
+              index->current_report = NULL;
               index->open_ports = NULL;
-              index->debugs = g_ptr_array_new ();
-              index->debugs_size = 0;
-              index->holes = g_ptr_array_new ();
-              index->holes_size = 0;
-              index->infos = g_ptr_array_new ();
-              index->infos_size = 0;
-              index->logs = g_ptr_array_new ();
-              index->logs_size = 0;
-              index->notes = g_ptr_array_new ();
-              index->notes_size = 0;
               /*@=mustfreeonly@*/
               tracef ("   Made task %u at %p\n", index->id, index);
               num_tasks++;
@@ -1180,6 +1133,125 @@
 }
 
 /**
+ * @brief Create the current report file for a task.
+ *
+ * @param[in]  task   The task.
+ *
+ * @return 0 success, -1 failed to open file, -2 ID or credentials error,
+ *         -3 failed to symlink file to task dir, -4 failed to create dir,
+ *         -5 failed to generate ID, -6 report file already exists.
+ */
+static int
+create_report_file (task_t* task)
+{
+  const char* id;
+  char* report_id;
+  gchar* user_dir_name;
+  gchar* dir_name;
+  gchar* name;
+  gchar* symlink_name;
+  FILE* file;
+
+  if (current_credentials.username == NULL) return -2;
+
+  assert (task->current_report == NULL);
+  if (task->current_report) return -6;
+
+  tracef ("   Saving report (%s) on task %u\n", task->start_time, task->id);
+
+  if (task_id_string (task, &id)) return -2;
+
+  user_dir_name = g_build_filename (PREFIX
+                                    "/var/lib/openvas/mgr/users/",
+                                    current_credentials.username,
+                                    "reports",
+                                    NULL);
+
+  /* Ensure user reports directory exists. */
+
+  if (g_mkdir_with_parents (user_dir_name, 33216 /* -rwx------ */) == -1)
+    {
+      fprintf (stderr, "Failed to create report dir %s: %s\n",
+               user_dir_name,
+               strerror (errno));
+      g_free (user_dir_name);
+      return -4;
+    }
+
+  /* Generate report directory name. */
+
+  report_id = make_report_id ();
+  if (report_id == NULL)
+    {
+      g_free (user_dir_name);
+      return -5;
+    }
+
+  dir_name = g_build_filename (PREFIX
+                               "/var/lib/openvas/mgr/users/",
+                               current_credentials.username,
+                               "tasks",
+                               id,
+                               "reports",
+                               report_id,
+                               NULL);
+
+  symlink_name = g_build_filename (user_dir_name, report_id, NULL);
+  free (report_id);
+  g_free (user_dir_name);
+
+  /* Ensure task report directory exists. */
+
+  if (g_mkdir_with_parents (dir_name, 33216 /* -rwx------ */) == -1)
+    {
+      fprintf (stderr, "Failed to create report dir %s: %s\n",
+               dir_name,
+               strerror (errno));
+      g_free (dir_name);
+      g_free (symlink_name);
+      return -4;
+    }
+
+  /* Link report directory into task directory. */
+
+  if (symlink (dir_name, symlink_name))
+    {
+      (void) rmdir (dir_name);
+      fprintf (stderr, "Failed to symlink %s to %s\n",
+               dir_name,
+               symlink_name);
+      g_free (dir_name);
+      g_free (symlink_name);
+      return -3;
+    }
+
+  /* Save report stream. */
+
+  name = g_build_filename (dir_name, "report.nbe", NULL);
+
+  file = fopen (name, "w");
+  if (file == NULL)
+    {
+      (void) rmdir (dir_name);
+      fprintf (stderr, "Failed to open report file %s: %s\n",
+               name,
+               strerror (errno));
+      g_free (dir_name);
+      g_free (name);
+      g_free (symlink_name);
+      return -1;
+    }
+
+  task->current_report = file;
+  task->report_count++;
+
+  g_free (dir_name);
+  g_free (name);
+  g_free (symlink_name);
+  return 0;
+}
+
+/**
  * @brief Start a task.
  *
  * Use \ref send_to_server to queue the task start sequence in \ref to_server.
@@ -1193,14 +1265,23 @@
 {
   tracef ("   start task %u\n", task->id);
 
+  // FIX atomic
+
   if (task->run_status == TASK_STATUS_REQUESTED
       || task->run_status == TASK_STATUS_RUNNING)
     return 0;
 
+  /* Create the report file. */
+
+  if (create_report_file (task)) return -2;
+
+  /* Start the task. */
+
   if (send_to_server ("CLIENT <|> PREFERENCES <|>\n")) return -1;
 
   if (send_to_server ("ntp_keep_communication_alive <|> yes\n")) return -1;
   if (send_to_server ("ntp_client_accepts_notes <|> yes\n")) return -1;
+  // FIX still getting FINISHED msgs
   if (send_to_server ("ntp_opt_show_end <|> no\n")) return -1;
   //if (send_to_server ("ntp_short_status <|> yes\n")) return -1;
   if (send_to_server ("plugin_set <|> \n")) return -1;
@@ -1238,7 +1319,6 @@
   if (task->open_ports) (void) g_array_free (task->open_ports, TRUE);
   task->open_ports = g_array_new (FALSE, FALSE, (guint) sizeof (port_t));
   task->open_ports_size = 0;
-  // FIX holes,...  reset_task_data (task);
 
   current_server_task = task;
 

Modified: trunk/openvas-manager/src/manage.h
===================================================================
--- trunk/openvas-manager/src/manage.h	2009-04-09 13:26:33 UTC (rev 3083)
+++ trunk/openvas-manager/src/manage.h	2009-04-09 13:29:40 UTC (rev 3084)
@@ -26,6 +26,7 @@
 #ifndef OPENVAS_MANAGER_MANAGE_H
 #define OPENVAS_MANAGER_MANAGE_H
 
+#include <stdio.h>
 #include <glib.h>
 #include <ossp/uuid.h>
 
@@ -111,26 +112,23 @@
   char* description;          ///< Description.
   gsize description_length;   ///< Length of description.
   gsize description_size;     ///< Actual size allocated for description.
-  short run_status;           ///< Run status of task.
+  task_status_t run_status;   ///< Run status of task.
   char* start_time;           ///< Time the task last started.
   char* end_time;             ///< Time the task last ended.
   unsigned int report_count;  ///< The number of existing reports on the task.
   /* The rest are for the current scan. */
+  /*@null@*/
+  FILE* current_report;       ///< Report stream during the task.
   char* attack_state;         ///< Attack status.
   unsigned int current_port;  ///< Port currently under test.
   unsigned int max_port;      ///< Last port to test.
   /*@null@*/
   GArray *open_ports;         ///< Open ports that the server has found.
   int open_ports_size;        ///< Number of open ports.
-  GPtrArray *debugs;          ///< Identified messages of class "debug".
   int debugs_size;            ///< Number of debugs.
-  GPtrArray *holes;           ///< Identified messages of class "hole".
   int holes_size;             ///< Number of holes.
-  GPtrArray *infos;           ///< Identified messages of class "info".
   int infos_size;             ///< Number of infos.
-  GPtrArray *logs;            ///< Identified messages of class "log".
   int logs_size;              ///< Number of logs.
-  GPtrArray *notes;           ///< Identified messages of class "note".
   int notes_size;             ///< Number of notes.
 } task_t;
 
@@ -157,7 +155,7 @@
 /*@null@*/ /*@dependent@*/ /*@special@*/
 task_t*
 make_task (/*@only@*/ char*, unsigned int, /*@only@*/ char*)
-  /*@defines result->debugs, result->open_ports@*/
+  /*@defines result->open_ports@*/
   /*@ensures isnull result->description@*/;
 
 int
@@ -205,11 +203,11 @@
 // FIX how is this doc'd?
 #define OVAS_MANAGE_REPORT_ID_LENGTH UUID_LEN_STR
 
+/*@-exportlocal@*/
 /*@only@*/ /*@null@*/
 char*
 make_report_id ();
 
-/*@-exportlocal@*/
 gchar*
 report_path_task_name (gchar*);
 

Modified: trunk/openvas-manager/src/otp.c
===================================================================
--- trunk/openvas-manager/src/otp.c	2009-04-09 13:26:33 UTC (rev 3083)
+++ trunk/openvas-manager/src/otp.c	2009-04-09 13:29:40 UTC (rev 3084)
@@ -193,23 +193,19 @@
   return message;
 }
 
-#if 0
-// FIX currently in manage.c
 /**
  * @brief Free a message for g_ptr_array_foreach.
  *
  * @param[in]  message       Pointer to the message.
  * @param[in]  dummy         Dummy parameter.
  */
-void
-free_message (gpointer message, gpointer dummy)
+static void
+free_message (/*@out@*/ /*@only@*/ message_t* message)
 {
-  message_t* msg = (message_t*) message;
-  if (msg->description) free (msg->description);
-  if (msg->oid) free (msg->oid);
-  free (msg);
+  if (message->description) free (message->description);
+  if (message->oid) free (message->oid);
+  free (message);
 }
-#endif
 
 /**
  * @brief Set the description of a message.
@@ -255,31 +251,14 @@
  * @param[in]  message_data  The stream and message type.
  */
 static void
-write_message (gpointer message, gpointer message_data)
+write_message (message_t* message, FILE* stream, char* type)
 {
-  message_t* msg = (message_t*) message;
-  message_data_t* data = (message_data_t*) message_data;
-  fprintf (data->stream, "results|%s|%s|", "dik", "dik"); // FIX
-  print_port (data->stream, &msg->port);
-  fprintf (data->stream, "|%s|%s|%s|\n",
-           msg->oid, data->type, msg->description);
+  fprintf (stream, "results|%s|%s|", "dik", "dik"); // FIX
+  print_port (stream, &message->port);
+  fprintf (stream, "|%s|%s|%s|\n", message->oid, type, message->description);
 }
 
 /**
- * @brief Write an array of messages to a stream.
- *
- * @param[in]  file       The stream.
- * @param[in]  messages   Array of messages.
- * @param[in]  type       Type of message.
- */
-static void
-write_messages (FILE* file, GPtrArray* messages, char* type)
-{
-  message_data_t data = { file, type };
-  g_ptr_array_foreach (messages, write_message, &data);
-}
-
-/**
  * @brief Write a timestamp to a stream.
  *
  * @param[in]  file       The stream.
@@ -287,220 +266,142 @@
  * @param[in]  time       The time.
  */
 static void
-write_timestamp (FILE* file, char* type, char* time)
+write_timestamp (FILE* file, const char* host, const char* type,
+                 const char* time)
 {
-  fprintf (file, "timestamps|%s|%s|%s|%s|\n", "dik", "dik", type, time); // FIX
+  fprintf (file, "timestamps||%s|%s|%s|\n", host, type, time);
 }
 
 /**
- * @brief Save a report to a file.
+ * @brief Close the current report.
  *
- * @param[in]  task       The task.
+ * @param[in]  task  The task.
  *
- * @return 0 success, -1 failed to open file, -2 failed to close file,
- *         -3 failed to symlink file to task dir, -4 failed to create dir,
- *         -5 failed to generate ID.
+ * @return 0 success, -1 current_report NULL, -2 failed to close file.
  */
 static int
 save_report (task_t* task)
 {
-  const char* id;
-  char* report_id;
-  gchar* user_dir_name;
-  gchar* dir_name;
-  gchar* name;
-  gchar* symlink_name;
-  FILE* file;
+  assert (task->current_report != NULL);
+  if (task->current_report == NULL) return -1;
 
-  if (current_credentials.username == NULL) return -1;
-
   tracef ("   Saving report (%s) on task %u\n", task->start_time, task->id);
 
-  if (task_id_string (task, &id)) return -1;
-
-  user_dir_name = g_build_filename (PREFIX
-                                    "/var/lib/openvas/mgr/users/",
-                                    current_credentials.username,
-                                    "reports",
-                                    NULL);
-
-  /* Ensure user reports directory exists. */
-
-  if (g_mkdir_with_parents (user_dir_name, 33216 /* -rwx------ */) == -1)
+  if (fclose (task->current_report))
     {
-      fprintf (stderr, "Failed to create report dir %s: %s\n",
-               user_dir_name,
-               strerror (errno));
-      g_free (user_dir_name);
-      return -4;
-    }
-
-  /* Generate report directory name. */
-
-  report_id = make_report_id ();
-  if (report_id == NULL)
-    {
-      g_free (user_dir_name);
-      return -5;
-    }
-
-  dir_name = g_build_filename (PREFIX
-                               "/var/lib/openvas/mgr/users/",
-                               current_credentials.username,
-                               "tasks",
-                               id,
-                               "reports",
-                               report_id,
-                               NULL);
-
-  symlink_name = g_build_filename (user_dir_name, report_id, NULL);
-  free (report_id);
-  g_free (user_dir_name);
-
-  /* Ensure task report directory exists. */
-
-  if (g_mkdir_with_parents (dir_name, 33216 /* -rwx------ */) == -1)
-    {
-      fprintf (stderr, "Failed to create report dir %s: %s\n",
-               dir_name,
-               strerror (errno));
-      g_free (dir_name);
-      g_free (symlink_name);
-      return -4;
-    }
-
-  /* Link report directory into task directory. */
-
-  if (symlink (dir_name, symlink_name))
-    {
-      (void) rmdir (dir_name);
-      fprintf (stderr, "Failed to symlink %s to %s\n",
-               dir_name,
-               symlink_name);
-      g_free (dir_name);
-      g_free (symlink_name);
-      return -3;
-    }
-
-  /* Write report. */
-
-  name = g_build_filename (dir_name, "report.nbe", NULL);
-
-  file = fopen (name, "w");
-  if (file == NULL)
-    {
-      (void) rmdir (dir_name);
-      fprintf (stderr, "Failed to open report file %s: %s\n",
-               name,
-               strerror (errno));
-      g_free (dir_name);
-      g_free (name);
-      g_free (symlink_name);
-      return -1;
-    }
-
-  write_timestamp (file, "scan_start", task->start_time); // FIX
-  write_timestamp (file, "host_start", task->start_time);
-
-  //write_messages (file, task->open_ports, task->open_ports_size); FIX
-  write_messages (file, task->debugs, "Debug Message");
-  write_messages (file, task->holes, "Security Hole");
-  write_messages (file, task->infos, "Security Warning");
-  write_messages (file, task->logs, "Log Message");
-  write_messages (file, task->notes, "Security Note");
-
-  write_timestamp (file, "host_end", task->end_time);
-  write_timestamp (file, "scan_end", task->end_time); // FIX
-
-  if (fclose (file))
-    {
-      (void) unlink (name);
-      (void) rmdir (dir_name);
-      fprintf (stderr, "Failed to close report file %s: %s\n",
-               name,
-               strerror (errno));
-      g_free (dir_name);
-      g_free (name);
-      g_free (symlink_name);
+      perror ("Failed to close report stream");
       return -2;
     }
+  task->current_report = NULL;
 
-  task->report_count++;
+  // FIX save report.nbe.cnt or equiv (task->*_size)
 
-  g_free (dir_name);
-  g_free (name);
-  g_free (symlink_name);
   return 0;
 }
 
 
-/* Appending messages to tasks. */  // FIX ... to reports.
+/* Appending messages to reports. */
 
 /**
- * @brief Append a debug message to a task.
+ * @brief Append a timestamp to a report.
  *
  * @param[in]  task         Task.
  * @param[in]  message      Message.
  */
 static void
-append_debug_message (task_t* task, /*@keep@*/ message_t* message)
+append_timestamp (task_t* task, const char* host, const char* type,
+                  const char* time)
 {
-  g_ptr_array_add (task->debugs, (gpointer) message);
-  task->debugs_size++;
+  assert (task->current_report != NULL);
+  if (task->current_report)
+    write_timestamp (task->current_report, host, type, time);
 }
 
 /**
- * @brief Append a hole message to a task.
+ * @brief Append a debug message to a report.
  *
  * @param[in]  task         Task.
  * @param[in]  message      Message.
  */
 static void
-append_hole_message (task_t* task, /*@keep@*/ message_t* message)
+append_debug_message (task_t* task, message_t* message)
 {
-  g_ptr_array_add (task->holes, (gpointer) message);
-  task->holes_size++;
+  assert (task->current_report != NULL);
+  if (task->current_report)
+    {
+      write_message (message, task->current_report, "Debug Message");
+      task->debugs_size++;
+    }
 }
 
 /**
- * @brief Append an info message to a task.
+ * @brief Append a hole message to a report.
  *
  * @param[in]  task         Task.
  * @param[in]  message      Message.
  */
 static void
-append_info_message (task_t* task, /*@keep@*/ message_t* message)
+append_hole_message (task_t* task, message_t* message)
 {
-  g_ptr_array_add (task->infos, (gpointer) message);
-  task->infos_size++;
+  assert (task->current_report != NULL);
+  if (task->current_report)
+    {
+      write_message (message, task->current_report, "Security Hole");
+      task->holes_size++;
+    }
 }
 
 /**
- * @brief Append a log message to a task.
+ * @brief Append an info message to a report.
  *
  * @param[in]  task         Task.
  * @param[in]  message      Message.
  */
 static void
-append_log_message (task_t* task, /*@keep@*/ message_t* message)
+append_info_message (task_t* task, message_t* message)
 {
-  g_ptr_array_add (task->logs, (gpointer) message);
-  task->logs_size++;
+  assert (task->current_report != NULL);
+  if (task->current_report)
+    {
+      write_message (message, task->current_report, "Security Warning");
+      task->infos_size++;
+    }
 }
 
 /**
- * @brief Append a note message to a task.
+ * @brief Append a log message to a report.
  *
  * @param[in]  task         Task.
  * @param[in]  message      Message.
  */
 static void
-append_note_message (task_t* task, /*@keep@*/ message_t* message)
+append_log_message (task_t* task, message_t* message)
 {
-  g_ptr_array_add (task->notes, (gpointer) message);
-  task->notes_size++;
+  assert (task->current_report != NULL);
+  if (task->current_report)
+    {
+      write_message (message, task->current_report, "Log Message");
+      task->logs_size++;
+    }
 }
 
+/**
+ * @brief Append a note message to a report.
+ *
+ * @param[in]  task         Task.
+ * @param[in]  message      Message.
+ */
+static void
+append_note_message (task_t* task, message_t* message)
+{
+  assert (task->current_report != NULL);
+  if (task->current_report)
+    {
+      write_message (message, task->current_report, "Security Note");
+      task->notes_size++;
+    }
+}
+
 
 /* Server preferences. */
 
@@ -1325,12 +1226,13 @@
                 }
               case SERVER_DEBUG_OID:
                 {
-                  if (current_message)
+                  if (current_message != NULL && current_server_task != NULL)
                     {
                       char* oid = g_strdup (field);
                       set_message_oid (current_message, oid);
 
                       append_debug_message (current_server_task, current_message);
+                      free_message (current_message);
                       current_message = NULL;
                     }
                   set_server_state (SERVER_DONE);
@@ -1391,12 +1293,13 @@
                 }
               case SERVER_HOLE_OID:
                 {
-                  if (current_message)
+                  if (current_message != NULL && current_server_task != NULL)
                     {
                       char* oid = g_strdup (field);
                       set_message_oid (current_message, oid);
 
                       append_hole_message (current_server_task, current_message);
+                      free_message (current_message);
                       current_message = NULL;
                     }
                   set_server_state (SERVER_DONE);
@@ -1463,6 +1366,7 @@
                       set_message_oid (current_message, oid);
 
                       append_info_message (current_server_task, current_message);
+                      free_message (current_message);
                       current_message = NULL;
                     }
                   set_server_state (SERVER_DONE);
@@ -1529,6 +1433,7 @@
                       set_message_oid (current_message, oid);
 
                       append_log_message (current_server_task, current_message);
+                      free_message (current_message);
                       current_message = NULL;
                     }
                   set_server_state (SERVER_DONE);
@@ -1595,6 +1500,7 @@
                       set_message_oid (current_message, oid);
 
                       append_note_message (current_server_task, current_message);
+                      free_message (current_message);
                       current_message = NULL;
                     }
                   set_server_state (SERVER_DONE);
@@ -1857,7 +1763,7 @@
                 }
               case SERVER_TIME_HOST_START_HOST:
                 {
-                  //if (strncasecmp ("chiles", field, 11) == 0) // FIX
+                  // FIX pass to append_timestamp
                   set_server_state (SERVER_TIME_HOST_START_TIME);
                   break;
                 }
@@ -1870,6 +1776,11 @@
                       if (current_server_task->start_time)
                         free (current_server_task->start_time);
                       current_server_task->start_time = time;
+
+                      append_timestamp (current_server_task,
+                                        "dik", // FIX
+                                        "host_start",
+                                        field);
                     }
                   set_server_state (SERVER_DONE);
                   switch (parse_server_done (&messages))
@@ -1884,7 +1795,7 @@
                 }
               case SERVER_TIME_HOST_END_HOST:
                 {
-                  //if (strncasecmp ("chiles", field, 11) == 0) // FIX
+                  // FIX pass to append_timestamp
                   set_server_state (SERVER_TIME_HOST_END_TIME);
                   break;
                 }
@@ -1893,12 +1804,17 @@
                   if (current_server_task)
                     {
                       char* time = g_strdup (field);
+
                       tracef ("   server got end time: %s\n", time);
+
                       if (current_server_task->end_time)
                         free (current_server_task->end_time);
                       current_server_task->end_time = time;
 
-                      if (save_report (current_server_task)) return -1;
+                      append_timestamp (current_server_task,
+                                        "dik", // FIX
+                                        "host_end",
+                                        field);
                     }
                   set_server_state (SERVER_DONE);
                   switch (parse_server_done (&messages))
@@ -1914,7 +1830,13 @@
               case SERVER_TIME_SCAN_START:
                 {
                   if (current_server_task)
-                    current_server_task->run_status = TASK_STATUS_RUNNING;
+                    {
+                      current_server_task->run_status = TASK_STATUS_RUNNING;
+                      append_timestamp (current_server_task,
+                                        "",
+                                        "scan_start",
+                                        field);
+                    }
                   set_server_state (SERVER_DONE);
                   switch (parse_server_done (&messages))
                     {
@@ -1929,7 +1851,14 @@
               case SERVER_TIME_SCAN_END:
                 {
                   if (current_server_task)
-                    current_server_task->run_status = TASK_STATUS_DONE;
+                    {
+                      current_server_task->run_status = TASK_STATUS_DONE;
+                      append_timestamp (current_server_task,
+                                        "",
+                                        "scan_end",
+                                        field);
+                    }
+                  if (save_report (current_server_task)) return -1;
                   current_server_task = NULL;
                   set_server_state (SERVER_DONE);
                   switch (parse_server_done (&messages))



More information about the Openvas-commits mailing list