[Openvas-commits] r2794 - in trunk/openvas-client: . nessus/prefs_dialog src/gui src/util

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Mon Mar 16 09:51:56 CET 2009


Author: felix
Date: 2009-03-16 09:51:52 +0100 (Mon, 16 Mar 2009)
New Revision: 2794

Modified:
   trunk/openvas-client/ChangeLog
   trunk/openvas-client/nessus/prefs_dialog/prefs_dialog.c
   trunk/openvas-client/src/gui/severity_override_form.c
   trunk/openvas-client/src/gui/severityfiltermngr_dlg.c
   trunk/openvas-client/src/util/severity_filter.c
   trunk/openvas-client/src/util/severity_filter.h
Log:
Added filename field to severity_filter struct. Made severity_to_xml
static and access it only from the add and remove methods to ensure
persistent state between filter in memory and on disk.
Therefore made the add and remove methods returning gboolean.
Removed all code that involved filter_to_xml from outside the
severity_filter module, minor reformatting and doc improvements.
Changed file name for global severity filter from priofilter.xml
to severity_overrides.xml.

* src/util/severity_filter.c, src/util/severity_filter.h
(severity_filter_to_xml): Made
severity_filter_to_xml static.

* src/util/severity_filter.c, src/util/severity_filter.h
(severity_filter, severity_filter_new): Added filename parameter to
struct and severity_filter_new.

* src/util/severity_filter.c (severity_filter_free): Free filename,
reformatted.

* src/util/severity_filter.c (severity_filter_contains_conflicting):
Collapsed conditional with same consequence.

* src/util/severity_filter.c (severity_filter_add): Saves to xml file.

* src/util/severity_filter.c, src/util/severity_filter.h
(severity_filter_remove): Changed return type to gboolean, saves to xml.

* src/util/severity_filter.c, src/util/severity_filter.h
(severity_filter_to_xml): Removed filename parameter, now stored in
severity_filter struct.

* src/util/severity_filter.c (severity_filter_xml_elem,
severity_override_xml_elem, severity_filter_xml_start_element,
severity_override_xml_reason_text): Changed logic of user_data for
xml element callbacks: where it was an double pointer before, always
pass a pre-initialized severity_filter.

* src/gui/severityfiltermngr_dlg.c (severityfiltermanager_dialog),
src/gui/severity_override_form.c (add_override_to_global_filter),
nessus/prefs_dialog/prefs_dialog.c (switch_severity_filtering):
No need for explicit saving anymore, use new file name
severity_overrides.xml. Display message if saving failed.


Modified: trunk/openvas-client/ChangeLog
===================================================================
--- trunk/openvas-client/ChangeLog	2009-03-16 05:39:39 UTC (rev 2793)
+++ trunk/openvas-client/ChangeLog	2009-03-16 08:51:52 UTC (rev 2794)
@@ -1,3 +1,49 @@
+2009-03-16  Felix Wolfsteller <felix.wolfsteller at intevation.de>
+
+	Added filename field to severity_filter struct. Made severity_to_xml
+	static and access it only from the add and remove methods to ensure
+	persistent state between filter in memory and on disk.
+	Therefore made the add and remove methods returning gboolean.
+	Removed all code that involved filter_to_xml from outside the
+	severity_filter module, minor reformatting and doc improvements.
+	Changed file name for global severity filter from priofilter.xml
+	to severity_overrides.xml.
+	
+	* src/util/severity_filter.c, src/util/severity_filter.h
+	(severity_filter_to_xml): Made
+	severity_filter_to_xml static.
+	
+	* src/util/severity_filter.c, src/util/severity_filter.h
+	(severity_filter, severity_filter_new): Added filename parameter to
+	struct and severity_filter_new.
+	
+	* src/util/severity_filter.c (severity_filter_free): Free filename,
+	reformatted.
+	
+	* src/util/severity_filter.c (severity_filter_contains_conflicting):
+	Collapsed conditional with same consequence.
+	
+	* src/util/severity_filter.c (severity_filter_add): Saves to xml file.
+	
+	* src/util/severity_filter.c, src/util/severity_filter.h
+	(severity_filter_remove): Changed return type to gboolean, saves to xml.
+	
+	* src/util/severity_filter.c, src/util/severity_filter.h
+	(severity_filter_to_xml): Removed filename parameter, now stored in
+	severity_filter struct.
+	
+	* src/util/severity_filter.c (severity_filter_xml_elem,
+	severity_override_xml_elem, severity_filter_xml_start_element,
+	severity_override_xml_reason_text): Changed logic of user_data for
+	xml element callbacks: where it was an double pointer before, always
+	pass a pre-initialized severity_filter.
+	
+	* src/gui/severityfiltermngr_dlg.c (severityfiltermanager_dialog),
+	src/gui/severity_override_form.c (add_override_to_global_filter),
+	nessus/prefs_dialog/prefs_dialog.c (switch_severity_filtering):
+	No need for explicit saving anymore, use new file name
+	severity_overrides.xml. Display message if saving failed.
+
 2009-03-15  Tim Brown <timb at nth-dimension.org.uk>
 
 	* Fixed memory leak as reported by cppcheck.

Modified: trunk/openvas-client/nessus/prefs_dialog/prefs_dialog.c
===================================================================
--- trunk/openvas-client/nessus/prefs_dialog/prefs_dialog.c	2009-03-16 05:39:39 UTC (rev 2793)
+++ trunk/openvas-client/nessus/prefs_dialog/prefs_dialog.c	2009-03-16 08:51:52 UTC (rev 2794)
@@ -361,14 +361,13 @@
   if (global_filter == NULL)
     {
       gchar * filter_file = g_build_filename (prefs_get_nessushome(),
-                                            ".openvas", "priofilter.xml", NULL);
+                                            ".openvas", "severity_overrides.xml", NULL);
       global_filter = severity_filter_from_xml (filter_file);
 
       // Still NULL? Built one, and save it to disk.
       if (global_filter == NULL)
         {
-          global_filter = severity_filter_new (_("Global Severity Filter"));
-          severity_filter_to_xml (global_filter, filter_file);
+          global_filter = severity_filter_new (_("Global Severity Filter"), filter_file);
         }
       g_free(filter_file);
     }

Modified: trunk/openvas-client/src/gui/severity_override_form.c
===================================================================
--- trunk/openvas-client/src/gui/severity_override_form.c	2009-03-16 05:39:39 UTC (rev 2793)
+++ trunk/openvas-client/src/gui/severity_override_form.c	2009-03-16 08:51:52 UTC (rev 2794)
@@ -72,14 +72,13 @@
   if (global_filter == NULL)
     {
       gchar * filter_file = g_build_filename (prefs_get_nessushome(),
-                                            ".openvas", "priofilter.xml", NULL);
+                                            ".openvas", "severity_overrides.xml", NULL);
       global_filter = severity_filter_from_xml (filter_file);
 
       // Still NULL? Built one, and save it to disk.
       if (global_filter == NULL)
         {
-          global_filter = severity_filter_new (_("Global Severity Filter"));
-          severity_filter_to_xml (global_filter, filter_file);
+          global_filter = severity_filter_new (_("Global Severity Filter"), filter_file);
         }
       g_free(filter_file);
     }
@@ -102,13 +101,10 @@
               severity_override_free (override);
               return;
             }
-          severity_filter_add (global_filter, override);
-          // Save it
-          gchar * filter_file = g_build_filename (prefs_get_nessushome(),
-                                            ".openvas", "priofilter.xml", NULL);
-          severity_filter_to_xml (global_filter, filter_file);
-          g_free (filter_file);
-          show_info (_("Severity Override %s has been added to the global filter."), override->name);
+          if (severity_filter_add (global_filter, override) == TRUE)
+            show_info (_("Severity Override %s has been added to the global filter."), override->name);
+          else
+            show_error (_("An error occurred when adding the Override %s to the global filter."), override->name);
         }
     }
 }

Modified: trunk/openvas-client/src/gui/severityfiltermngr_dlg.c
===================================================================
--- trunk/openvas-client/src/gui/severityfiltermngr_dlg.c	2009-03-16 05:39:39 UTC (rev 2793)
+++ trunk/openvas-client/src/gui/severityfiltermngr_dlg.c	2009-03-16 08:51:52 UTC (rev 2794)
@@ -104,14 +104,13 @@
   if (global_filter == NULL)
     {
       gchar * filter_file = g_build_filename (prefs_get_nessushome(),
-                                            ".openvas", "priofilter.xml", NULL);
+                                            ".openvas", "severity_overrides.xml", NULL);
       global_filter = severity_filter_from_xml (filter_file);
 
       // Still NULL? Built one, and save it to disk.
       if (global_filter == NULL)
         {
-          global_filter = severity_filter_new (_("Global Severity Filter"));
-          severity_filter_to_xml (global_filter, filter_file);
+          global_filter = severity_filter_new (_("Global Severity Filter"), filter_file);
         }
       g_free(filter_file);
     }
@@ -129,8 +128,8 @@
   // Create the notebook showing overrides
   overrides_notebook = listnotebook_new(TRUE, TRUE);
   // For each override, add a notebookpage
-  if(global_filter)
-    g_slist_foreach (global_filter->overrides, 
+  if (global_filter)
+    g_slist_foreach (global_filter->overrides,
                      (GFunc) severityfiltermngr_dlg_add_override,
                      overrides_notebook);
 
@@ -152,15 +151,12 @@
           severity_override_t* override = walk->data;
           if (!strcmp(override->name, selected_override_name))
             {
-              severity_filter_remove (global_filter, override);
+              if (severity_filter_remove (global_filter, override) == FALSE)
+                show_error (_("Error while removing override %s from global filter."), override->name);
               listnotebook_remove_page (overrides_notebook, selected_override_name);
             }
           walk = g_slist_next (walk);
         }
-      gchar * filter_file = g_build_filename (prefs_get_nessushome(),
-                                              ".openvas", "priofilter.xml", NULL);
-      severity_filter_to_xml (global_filter, filter_file);
-      g_free (filter_file);
       response = gtk_dialog_run (GTK_DIALOG (dialog));
     }
     

Modified: trunk/openvas-client/src/util/severity_filter.c
===================================================================
--- trunk/openvas-client/src/util/severity_filter.c	2009-03-16 05:39:39 UTC (rev 2793)
+++ trunk/openvas-client/src/util/severity_filter.c	2009-03-16 08:51:52 UTC (rev 2794)
@@ -69,7 +69,10 @@
   </severity_override>
 </severity_filter>
 @endverbatim
-*/
+ *
+ * The file is tried to be in sync with the filter, every call to
+ * severity_filter_add or severity_filter_remove will also save the file.
+ */
 
 #include "severity_filter.h"
 #include "nessus_i18n.h"
@@ -96,6 +99,8 @@
 severity_filter_t * global_filter = NULL;
 gboolean global_filter_active = FALSE;
 
+static gboolean severity_filter_to_xml (const severity_filter_t * filter);
+
 /**
  * @brief Creates a new severity override.
  * 
@@ -167,16 +172,24 @@
 /**
  * @brief Creates a new empty severity_filter with a name.
  * 
- * @param name User-defined name for the severity_filter.
+ * Note that if a file with the filename parameter already exists, the file will
+ * be overwritten.
  * 
+ * @param name    User-defined name for the severity_filter.
+ * @param filname Storage location for the severity_filter (no checks performed).
+ * 
  * @return Fresh, named severity_filter.
  */
 const severity_filter_t *
-severity_filter_new (const gchar* name)
+severity_filter_new (const gchar* name, const gchar* filename)
 {
+  if (name == NULL || filename == NULL)
+    return NULL;
+
   severity_filter_t* filter = g_malloc (sizeof(severity_filter_t));
   filter->overrides = NULL;
   filter->name = g_strdup (name);
+  filter->filename = g_strdup (filename);
 
   return(filter);
 }
@@ -189,9 +202,12 @@
  */
 void severity_filter_free (severity_filter_t* filter)
 {
-  g_free(filter->name);
-  g_slist_foreach(filter->overrides, (GFunc)severity_override_free, NULL);
-  g_free(filter);
+  g_free (filter->name);
+  g_free (filter->filename);
+
+  g_slist_foreach (filter->overrides, (GFunc)severity_override_free, NULL);
+
+  g_free (filter);
 }
 
 
@@ -276,18 +292,19 @@
 severity_filter_contains_conflicting (const severity_filter_t* filter,
                                       const severity_override_t* override)
 {
-  if (filter == NULL || override == NULL)
-    return FALSE;
-  else
-    if (g_slist_find_custom (filter->overrides, override, (GCompareFunc) severity_override_similarity_predicate)
-        == NULL) return FALSE;
-  
+  // No filter, override or conflict?
+  if (filter == NULL || override == NULL
+      || (g_slist_find_custom (filter->overrides, override, (GCompareFunc) severity_override_similarity_predicate)
+                             == NULL))
+      return FALSE;
+
   return TRUE;
 }
 
 
 /**
- * @brief Adds a severity_override to a severity_filter.
+ * @brief Adds a severity_override to a severity_filter and saves its
+ * @brief representation to disk.
  * 
  * It is assumed that an override is added only once to a filter
  * - severity_filter_remove might otherwise create a mess.
@@ -298,7 +315,8 @@
  *                 Upon free'ing the filter, the override will be
  *                 free'd as well.
  * 
- * @return FALSE in case the add operation failed, else TRUE.
+ * @return FALSE in case the add operation failed (e.g. file not found), else
+ * @return TRUE.
  */
 gboolean
 severity_filter_add (severity_filter_t * filter,
@@ -309,24 +327,30 @@
 
   filter->overrides = g_slist_prepend (filter->overrides, (void*) override);
 
-  return TRUE;
+  return severity_filter_to_xml (filter);
 }
 
 
+
+
 /**
- * @brief Removes and frees a override from a filter.
+ * @brief Removes and frees a override from a filter and saves the filter to
+ * @brief disk.
  * 
  * Note that is assumed that the same override has not been added twice to
  * a severity_filter.
  * 
  * @param filter   The filter from wich to remove the override.
  * @param override The override to remove from the filter.
+ * 
+ * @return TRUE if file-writing was successfull, FALSE otherwise.
  */
-void
+gboolean
 severity_filter_remove (severity_filter_t* filter, severity_override_t* override)
 {
   filter->overrides = g_slist_remove (filter->overrides, override);
   severity_override_free (override);
+  return severity_filter_to_xml (filter);
 }
 
 /**
@@ -372,28 +396,26 @@
  * An examplary file is included in the documentation for this file.
  * 
  * @param severity_filter The severity_fiter to export.
- * @param filename    Filename to which to export to.
  * 
  * @return TRUE in case the filte was successfully created, else FALSE.
  */
-gboolean
-severity_filter_to_xml (const severity_filter_t * filter,
-                        const gchar * filename)
+static gboolean
+severity_filter_to_xml (const severity_filter_t * filter)
 {
   FILE* fd;
 
   if (filter == NULL) return FALSE;
 
-  fd = fopen (filename, "w");
+  fd = fopen (filter->filename, "w");
   if (fd <= 0) return FALSE;
 
   gchar* filter_start_elem = g_markup_printf_escaped ("<severity_filter name=\"%s\">\n", filter->name);
   fprintf (fd, filter_start_elem);
   g_slist_foreach (filter->overrides, (GFunc) write_override_xml_elem , fd);
   fprintf (fd, "</severity_filter>");
-  fclose (fd);
   g_free (filter_start_elem);
 
+  fclose (fd);
   return TRUE;
 }
 
@@ -412,18 +434,16 @@
  * @return A fresh severity_filter_t the name attributes and value were found
  *         in the parameter lists.
  */
-static const severity_filter_t*
-severity_filter_xml_elem (const gchar** attr_names, const gchar** attr_values)
+static const void
+severity_filter_xml_elem (const gchar** attr_names, const gchar** attr_values,
+                          severity_filter_t* filter)
 {
-  const severity_filter_t* filter = NULL;
   while (*attr_names != NULL) {
     if (!strcmp (*attr_names, XML_ATTR_NAME) && *attr_values != NULL)
-      filter = severity_filter_new (*attr_values);
+      filter->name = g_strdup(*attr_values);
     ++attr_values;
     ++attr_names;
   }
-
-  return filter;
 }
 
 
@@ -496,16 +516,16 @@
                                    const gchar **attribute_values,
                                    gpointer user_data, GError **error)
 {
-  severity_filter_t** filter = user_data;
+  severity_filter_t* filter = user_data;
 
   /* Its a: <severity_filter name="My severity Filter"> */
   if (!strcmp (element_name, XML_ELEM_SEVERITY_FILTER)) {
-    if (*filter != NULL)
+    if (filter != NULL)
       printf (_("XML parser error: second filter specified in file\n"));
 
-    *filter = severity_filter_xml_elem (attribute_names, attribute_values);
+    severity_filter_xml_elem (attribute_names, attribute_values, filter);
 
-    if (*filter == NULL)
+    if (filter == NULL)
       printf (_("XML parser error: error parsing filter element\n"));
   }
   /* Its a: <severity_override name="SeverityOverride2" host="192.168.11.35"
@@ -513,11 +533,11 @@
                   severity_from="NOTE" severity_to="FALSE" active="true"> ...  */
   else if (!strcmp (element_name, XML_ELEM_SEVERITY_OVERRIDE))
   {
-    if (*filter != NULL) {
+    if (filter != NULL) {
       const severity_override_t* override =
         severity_override_xml_elem (attribute_names, attribute_values);
       if (override != NULL)
-        severity_filter_add (*filter, override);
+        filter->overrides = g_slist_prepend (filter->overrides, (void*) override);
       else printf (_("XML Parser Error: override parsing error\n"));
     } else
       printf (_("XML Parser Error: override without filter\n"));
@@ -541,13 +561,13 @@
                                    gsize text_len, gpointer user_data,
                                    GError **error)
 {
-  severity_filter_t** filter = user_data;
+  severity_filter_t* filter = user_data;
   if (!strcmp (g_markup_parse_context_get_element (context), XML_ELEM_REASON)
-      && filter != NULL && *filter != NULL
-      && (*filter)->overrides != NULL
-      && (*filter)->overrides->data != NULL)
+      && filter != NULL 
+      && filter->overrides != NULL
+      && filter->overrides->data != NULL)
   {
-    severity_override_t* override = (*filter)->overrides->data;
+    severity_override_t* override = filter->overrides->data;
     g_free (override->reason);
     override->reason = g_strstrip (g_strdup (text));
   }
@@ -574,8 +594,10 @@
   GMarkupParseContext *context = NULL;
   gchar *filebuffer = NULL;
   gsize length = 0;
-  severity_filter_t** filter = malloc (sizeof (void*));
-  *filter = NULL;
+  severity_filter_t* filter = malloc (sizeof (severity_filter_t));
+  filter->filename = g_strdup(filename);
+  filter->overrides = NULL;
+  filter->name = NULL;
 
   if (!g_file_get_contents (filename, &filebuffer, &length, NULL))
     return NULL;
@@ -592,10 +614,10 @@
   if (g_markup_parse_context_parse (context, filebuffer, length, NULL) == TRUE)
   {
 #ifdef DEBUG
-    if (*filter) {
-      printf ("Parsing of severity- XML (%s) done.\n", (*filter)->name);
-      if ((*filter)->overrides) {
-        severity_override_t* override = (*filter)->overrides->data;
+    if (filter) {
+      printf ("Parsing of severity- XML (%s) done.\n", filter->name);
+      if (filter->overrides) {
+        severity_override_t* override = filter->overrides->data;
         printf ("\tFirst override: %s\n", override->name);
         printf ("\treason %s\n", override->reason);
       }
@@ -606,5 +628,5 @@
 
   g_free (filebuffer);
   g_markup_parse_context_free (context);
-  return *filter;
+  return filter;
 }

Modified: trunk/openvas-client/src/util/severity_filter.h
===================================================================
--- trunk/openvas-client/src/util/severity_filter.h	2009-03-16 05:39:39 UTC (rev 2793)
+++ trunk/openvas-client/src/util/severity_filter.h	2009-03-16 08:51:52 UTC (rev 2794)
@@ -43,6 +43,7 @@
  */
 typedef struct severity_filter {
   gchar * name;       /**< Name for this filter. */
+  gchar * filename;   /**< Path to file with which this filter is going to be synced. */
   GSList * overrides; /**< List of overrides. */
 } severity_filter_t;
 
@@ -76,14 +77,14 @@
 } severity_override_t;
 
 
-const severity_filter_t* severity_filter_new (const gchar*);
+const severity_filter_t* severity_filter_new (const gchar*, const gchar*);
 void severity_filter_free (severity_filter_t*);
 gboolean severity_filter_contains_conflicting (const severity_filter_t* filter,
                                            const severity_override_t* override);
 gboolean severity_filter_add(severity_filter_t *, const severity_override_t *);
 const gchar * severity_filter_apply(const gchar *, const gchar *, const gchar *,
                                     const gchar *);
-void severity_filter_remove (severity_filter_t* filter, severity_override_t* override);
+gboolean severity_filter_remove (severity_filter_t* filter, severity_override_t* override);
 
 const severity_override_t * severity_override_new (const gchar *, const gchar *,
                     const gchar *, const gchar *, const gchar *, const gchar *,
@@ -91,7 +92,6 @@
 const severity_override_t * severity_override_duplicate (const severity_override_t*);
 void severity_override_free(severity_override_t * );
 
-gboolean severity_filter_to_xml(const severity_filter_t *, const gchar *);
 const severity_filter_t * severity_filter_from_xml(const gchar *);
 
 #endif /* _UTIL_SEVERITYFILTER_H */



More information about the Openvas-commits mailing list