[Openvas-commits] r6499 - in trunk/gsa: . src

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Mon Jan 25 11:46:59 CET 2010


Author: mattm
Date: 2010-01-25 11:46:58 +0100 (Mon, 25 Jan 2010)
New Revision: 6499

Modified:
   trunk/gsa/ChangeLog
   trunk/gsa/src/gsad_omp.c
Log:
	* src/gsad_omp.c (get_report_omp): If the format is XML send the plain
	XML, and if the format is NULL send the XSL transformed XML (that is,
	send the HTML page).

Modified: trunk/gsa/ChangeLog
===================================================================
--- trunk/gsa/ChangeLog	2010-01-25 10:12:07 UTC (rev 6498)
+++ trunk/gsa/ChangeLog	2010-01-25 10:46:58 UTC (rev 6499)
@@ -1,3 +1,9 @@
+2010-01-25  Matthew Mundell <matthew.mundell at intevation.de>
+
+	* src/gsad_omp.c (get_report_omp): If the format is XML send the plain
+	XML, and if the format is NULL send the XSL transformed XML (that is,
+	send the HTML page).
+
 2010-01-25  Felix Wolfsteller <felix.wolfsteller at intevation.de>
 
 	Updated help.

Modified: trunk/gsa/src/gsad_omp.c
===================================================================
--- trunk/gsa/src/gsad_omp.c	2010-01-25 10:12:07 UTC (rev 6498)
+++ trunk/gsa/src/gsad_omp.c	2010-01-25 10:46:58 UTC (rev 6499)
@@ -3645,7 +3645,7 @@
  * @param[in]  levels         Threat levels to include in report.
  * @param[in]  search_phrase  Phrase which included results must contain.
  *
- * @return Result of XSL transformation.
+ * @return Report.
  */
 char *
 get_report_omp (credentials_t * credentials, const char *report_id,
@@ -3673,8 +3673,6 @@
 
   if (levels == NULL || strlen (levels) == 0) levels = "hm";
 
-  if (format == NULL || strlen (format) == 0) format = "xml";
-
   if (manager_connect (credentials, &socket, &session))
     return gsad_message ("Internal error", __FUNCTION__, __LINE__,
                          "An internal error occurred while getting a report. "
@@ -3682,8 +3680,6 @@
                          "Diagnostics: Failure to connect to manager daemon.",
                          "/omp?cmd=get_status");
 
-  xml = g_string_new ("<commands_response>");
-
   if (openvas_server_sendf (&session,
                             "<get_report"
                             " report_id=\"%s\""
@@ -3695,7 +3691,7 @@
                             " levels=\"%s\""
                             " search_phrase=\"%s\"/>",
                             report_id,
-                            format,
+                            format ? format : "xml",
                             first_result,
                             max_results,
                             sort_field ? sort_field : "type",
@@ -3709,7 +3705,6 @@
                             search_phrase)
       == -1)
     {
-      g_string_free (xml, TRUE);
       openvas_server_close (socket, session);
       return gsad_message ("Internal error", __FUNCTION__, __LINE__,
                            "An internal error occurred while getting a report. "
@@ -3718,60 +3713,91 @@
                            "/omp?cmd=get_status");
     }
 
-  if (strcmp (format, "nbe") == 0
-      || strcmp (format, "pdf") == 0
-      || strcmp (format, "html") == 0
-      || strcmp (format, "html-pdf") == 0)
+  if (format)
     {
-      entity = NULL;
-      if (read_entity (&session, &entity))
+      if (strcmp (format, "nbe") == 0
+          || strcmp (format, "pdf") == 0
+          || strcmp (format, "html") == 0
+          || strcmp (format, "html-pdf") == 0)
         {
-          g_string_free (xml, TRUE);
-          openvas_server_close (socket, session);
-          return gsad_message ("Internal error", __FUNCTION__, __LINE__,
-                               "An internal error occurred while getting a report. "
-                               "The report could not be delivered. "
-                               "Diagnostics: Failure to receive response from manager daemon.",
-                               "/omp?cmd=get_status");
+          xml = g_string_new ("<commands_response>");
+
+          entity = NULL;
+          if (read_entity (&session, &entity))
+            {
+              g_string_free (xml, TRUE);
+              openvas_server_close (socket, session);
+              return gsad_message ("Internal error", __FUNCTION__, __LINE__,
+                                   "An internal error occurred while getting a report. "
+                                   "The report could not be delivered. "
+                                   "Diagnostics: Failure to receive response from manager daemon.",
+                                   "/omp?cmd=get_status");
+            }
+
+          report_entity = entity_child (entity, "report");
+          if (report_entity != NULL)
+            {
+              report_encoded = entity_text (report_entity);
+              report_decoded =
+                (gchar *) g_base64_decode (report_encoded, report_len);
+              /* g_base64_decode can return NULL (Glib 2.12.4-2), at least
+               * when *report_len is zero. */
+              if (report_decoded == NULL)
+                {
+                  report_decoded = (gchar *) g_strdup ("");
+                  *report_len = 0;
+                }
+              free_entity (entity);
+              g_string_free (xml, TRUE);
+              openvas_server_close (socket, session);
+              return report_decoded;
+            }
+          else
+            {
+              free_entity (entity);
+              g_string_free (xml, TRUE);
+              openvas_server_close (socket, session);
+              return gsad_message ("Internal error", __FUNCTION__, __LINE__,
+                                   "An internal error occurred while getting a report. "
+                                   "The report could not be delivered. "
+                                   "Diagnostics: Failure to receive report from manager daemon.",
+                                   "/omp?cmd=get_status");
+            }
         }
-
-      report_entity = entity_child (entity, "report");
-      if (report_entity != NULL)
+      else if (strcmp (format, "xml") == 0)
         {
-          report_encoded = entity_text (report_entity);
-          report_decoded =
-            (gchar *) g_base64_decode (report_encoded, report_len);
-          /* g_base64_decode can return NULL (Glib 2.12.4-2), at least
-           * when *report_len is zero. */
-          if (report_decoded == NULL)
+          /* Manager sends XML report as plain XML. */
+          xml = g_string_new ("");
+          if (read_entity_and_string (&session, &entity, &xml))
             {
-              report_decoded = (gchar *) g_strdup ("");
-              *report_len = 0;
+              g_string_free (xml, TRUE);
+              openvas_server_close (socket, session);
+              return gsad_message ("Internal error", __FUNCTION__, __LINE__,
+                                   "An internal error occurred while getting a report. "
+                                   "The report could not be delivered. "
+                                   "Diagnostics: Failure to receive response from manager daemon.",
+                                   "/omp?cmd=get_status");
             }
           free_entity (entity);
-          g_string_free (xml, TRUE);
           openvas_server_close (socket, session);
-          return report_decoded;
+          return g_string_free (xml, FALSE);
         }
       else
         {
-          free_entity (entity);
+          openvas_server_close (socket, session);
           g_string_free (xml, TRUE);
-          openvas_server_close (socket, session);
-          return gsad_message ("Internal error", __FUNCTION__, __LINE__,
-                               "An internal error occurred while getting a report. "
-                               "The report could not be delivered. "
-                               "Diagnostics: Failure to receive report from manager daemon.",
-                               "/omp?cmd=get_status");
+          xml = g_string_new (GSAD_MESSAGE_INVALID_PARAM ("Get Report"));
+          return xsl_transform_omp (credentials, g_string_free (xml, FALSE));
         }
     }
   else
     {
-      /* Presume format XML. */
+      /* Format is NULL, send XSL transformed XML. */
 
+      xml = g_string_new ("<commands_response>");
+
       if (read_entity_and_string (&session, &entity, &xml))
         {
-          g_string_free (xml, TRUE);
           openvas_server_close (socket, session);
           return gsad_message ("Internal error", __FUNCTION__, __LINE__,
                                "An internal error occurred while getting a report. "



More information about the Openvas-commits mailing list