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

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Wed Feb 17 20:32:39 CET 2010


Author: mattm
Date: 2010-02-17 20:32:38 +0100 (Wed, 17 Feb 2010)
New Revision: 6763

Modified:
   trunk/openvas-manager/ChangeLog
   trunk/openvas-manager/src/manage.h
   trunk/openvas-manager/src/omp.c
   trunk/openvas-manager/src/tasks_sql.h
Log:
	Add NVT to OMP GET_NOTES.

	* src/tasks_sql.h (init_note_iterator): Add nvt arg.

	* src/manage.h: Update header accordingly.

	* src/omp.c: Update init_note_iterator callers.
	(get_results_data_t): Add nvt_oid.
	(get_notes_data_reset): Free nvt_oid.
	(client_state_t): Add CLIENT_GET_NOTES_NVT.
	(omp_xml_handle_start_element, omp_xml_handle_end_element): Add NVT to
	GET_NOTES.

Modified: trunk/openvas-manager/ChangeLog
===================================================================
--- trunk/openvas-manager/ChangeLog	2010-02-17 19:26:30 UTC (rev 6762)
+++ trunk/openvas-manager/ChangeLog	2010-02-17 19:32:38 UTC (rev 6763)
@@ -1,5 +1,20 @@
 2010-02-17  Matthew Mundell <matthew.mundell at intevation.de>
 
+	Add NVT to OMP GET_NOTES.
+
+	* src/tasks_sql.h (init_note_iterator): Add nvt arg.
+
+	* src/manage.h: Update header accordingly.
+
+	* src/omp.c: Update init_note_iterator callers.
+	(get_results_data_t): Add nvt_oid.
+	(get_notes_data_reset): Free nvt_oid.
+	(client_state_t): Add CLIENT_GET_NOTES_NVT.
+	(omp_xml_handle_start_element, omp_xml_handle_end_element): Add NVT to
+	GET_NOTES.
+
+2010-02-17  Matthew Mundell <matthew.mundell at intevation.de>
+
 	* src/omp.c (omp_xml_handle_end_element): In CLIENT_GET_NOTES also send
 	the note text.
 

Modified: trunk/openvas-manager/src/manage.h
===================================================================
--- trunk/openvas-manager/src/manage.h	2010-02-17 19:26:30 UTC (rev 6762)
+++ trunk/openvas-manager/src/manage.h	2010-02-17 19:32:38 UTC (rev 6763)
@@ -1100,7 +1100,8 @@
 delete_note (note_t);
 
 void
-init_note_iterator (iterator_t*, note_t, result_t, task_t, int, const char*);
+init_note_iterator (iterator_t*, note_t, nvt_t, result_t, task_t, int,
+                    const char*);
 
 const char*
 note_iterator_uuid (iterator_t*);

Modified: trunk/openvas-manager/src/omp.c
===================================================================
--- trunk/openvas-manager/src/omp.c	2010-02-17 19:26:30 UTC (rev 6762)
+++ trunk/openvas-manager/src/omp.c	2010-02-17 19:32:38 UTC (rev 6763)
@@ -573,6 +573,7 @@
 typedef struct
 {
   char *note_id;
+  char *nvt_oid;
   char *sort_field;
   int sort_order;
 } get_notes_data_t;
@@ -581,6 +582,7 @@
 get_notes_data_reset (get_notes_data_t *data)
 {
   free (data->note_id);
+  free (data->nvt_oid);
   memset (data, 0, sizeof (get_notes_data_t));
 }
 
@@ -956,6 +958,7 @@
   CLIENT_GET_ESCALATORS,
   CLIENT_GET_LSC_CREDENTIALS,
   CLIENT_GET_NOTES,
+  CLIENT_GET_NOTES_NVT,
   CLIENT_GET_NVT_ALL,
   CLIENT_GET_NVT_DETAILS,
   CLIENT_GET_NVT_FAMILIES,
@@ -2177,6 +2180,29 @@
         break;
 
       case CLIENT_GET_NOTES:
+        if (strcasecmp ("NVT", element_name) == 0)
+          {
+            const gchar* attribute;
+            if (find_attribute (attribute_names, attribute_values,
+                                "id", &attribute))
+              openvas_append_string (&get_notes_data->nvt_oid, attribute);
+            set_client_state (CLIENT_GET_NOTES_NVT);
+          }
+        else
+          {
+            if (send_element_error_to_client ("get_notes", element_name))
+              {
+                error_send_to_client (error);
+                return;
+              }
+            set_client_state (CLIENT_AUTHENTIC);
+            g_set_error (error,
+                         G_MARKUP_ERROR,
+                         G_MARKUP_ERROR_UNKNOWN_ELEMENT,
+                         "Error");
+          }
+        break;
+      case CLIENT_GET_NOTES_NVT:
         if (send_element_error_to_client ("get_notes", element_name))
           {
             error_send_to_client (error);
@@ -4459,6 +4485,7 @@
 
       init_note_iterator (&notes,
                           0,
+                          0,
                           result_iterator_result (results),
                           task,
                           1,
@@ -4773,10 +4800,15 @@
       case CLIENT_GET_NOTES:
         {
           note_t note = 0;
+          nvt_t nvt = 0;
 
           assert (strcasecmp ("GET_NOTES", element_name) == 0);
 
-          if (get_notes_data->note_id
+          if (get_notes_data->note_id && get_notes_data->nvt_oid)
+            SEND_TO_CLIENT_OR_FAIL
+             (XML_ERROR_SYNTAX ("get_notes",
+                                "Only one of NVT and the note attribute may be given"));
+          else if (get_notes_data->note_id
               && find_note (get_notes_data->note_id, &note))
             SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_notes"));
           else if (get_notes_data->note_id && note == 0)
@@ -4789,6 +4821,19 @@
                   return;
                 }
             }
+          else if (get_notes_data->nvt_oid
+                   && find_nvt (get_notes_data->nvt_oid, &nvt))
+            SEND_TO_CLIENT_OR_FAIL (XML_INTERNAL_ERROR ("get_notes"));
+          else if (get_notes_data->nvt_oid && nvt == 0)
+            {
+              if (send_find_error_to_client ("get_notes",
+                                             "NVT",
+                                             get_notes_data->nvt_oid))
+                {
+                  error_send_to_client (error);
+                  return;
+                }
+            }
           else
             {
               iterator_t notes;
@@ -4799,6 +4844,7 @@
 
               init_note_iterator (&notes,
                                   note,
+                                  nvt,
                                   0,
                                   0,
                                   get_notes_data->sort_order,
@@ -4829,6 +4875,10 @@
           set_client_state (CLIENT_AUTHENTIC);
           break;
         }
+      case CLIENT_GET_NOTES_NVT:
+        assert (strcasecmp ("NVT", element_name) == 0);
+        set_client_state (CLIENT_GET_NOTES);
+        break;
 
       case CLIENT_GET_NVT_FEED_CHECKSUM:
         {

Modified: trunk/openvas-manager/src/tasks_sql.h
===================================================================
--- trunk/openvas-manager/src/tasks_sql.h	2010-02-17 19:26:30 UTC (rev 6762)
+++ trunk/openvas-manager/src/tasks_sql.h	2010-02-17 19:32:38 UTC (rev 6763)
@@ -11584,16 +11584,19 @@
  * @param[in]  note        Single note to iterate, 0 for all.
  * @param[in]  result      Result to limit notes to, 0 for all.
  * @param[in]  task        Task to limit notes to, 0 for all.
+ * @param[in]  nvt         NVT to limit notes to, 0 for all.
  * @param[in]  ascending   Whether to sort ascending or descending.
  * @param[in]  sort_field  Field to sort on, or NULL for "ROWID".
  */
 void
-init_note_iterator (iterator_t* iterator, note_t note, result_t result,
-                    task_t task, int ascending, const char* sort_field)
+init_note_iterator (iterator_t* iterator, note_t note, nvt_t nvt,
+                    result_t result, task_t task, int ascending,
+                    const char* sort_field)
 {
   gchar *result_clause;
 
   assert (current_credentials.uuid);
+  assert ((nvt && note) == 0);
 
   if (result)
     result_clause = g_strdup_printf (" AND"
@@ -11641,6 +11644,21 @@
                    result_clause ? result_clause : "",
                    sort_field ? sort_field : "ROWID",
                    ascending ? "ASC" : "DESC");
+  else if (nvt)
+    init_iterator (iterator,
+                   "SELECT ROWID, uuid, nvt, creation_time, modification_time,"
+                   " text, hosts, port, threat, task, result"
+                   " FROM notes"
+                   " WHERE (nvt = (SELECT oid FROM nvts WHERE ROWID = %llu))"
+                   " AND ((owner IS NULL) OR (owner ="
+                   " (SELECT ROWID FROM users WHERE users.uuid = '%s')))"
+                   "%s"
+                   " ORDER BY %s %s;",
+                   nvt,
+                   current_credentials.uuid,
+                   result_clause ? result_clause : "",
+                   sort_field ? sort_field : "ROWID",
+                   ascending ? "ASC" : "DESC");
   else
     init_iterator (iterator,
                    "SELECT ROWID, uuid, nvt, creation_time, modification_time,"



More information about the Openvas-commits mailing list