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

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Sep 9 14:32:10 CEST 2010


Author: mattm
Date: 2010-09-09 14:32:05 +0200 (Thu, 09 Sep 2010)
New Revision: 9002

Modified:
   trunk/openvas-manager/ChangeLog
   trunk/openvas-manager/src/manage.c
   trunk/openvas-manager/src/manage.h
   trunk/openvas-manager/src/manage_sql.c
Log:
	Add HTTP GET escalator.

	* src/manage.c (escalator_method_t): Add ESCALATOR_METHOD_HTTP_GET.

	* src/manage.c (escalator_method_name, escalator_method_from_name): Add
	HTTP GET escalator.

	* src/manage_sql.c (http_get): New function.
	(escalate_1): Add ESCALATOR_METHOD_HTTP_GET case.

Modified: trunk/openvas-manager/ChangeLog
===================================================================
--- trunk/openvas-manager/ChangeLog	2010-09-08 21:20:00 UTC (rev 9001)
+++ trunk/openvas-manager/ChangeLog	2010-09-09 12:32:05 UTC (rev 9002)
@@ -1,3 +1,15 @@
+2010-09-09  Matthew Mundell <matthew.mundell at greenbone.net>
+
+	Add HTTP GET escalator.
+
+	* src/manage.c (escalator_method_t): Add ESCALATOR_METHOD_HTTP_GET.
+
+	* src/manage.c (escalator_method_name, escalator_method_from_name): Add
+	HTTP GET escalator.
+
+	* src/manage_sql.c (http_get): New function.
+	(escalate_1): Add ESCALATOR_METHOD_HTTP_GET case.
+
 2010-09-08  Matthew Mundell <matthew.mundell at greenbone.net>
 
 	* src/report_formats/HTML/HTML.xsl (wrap): Replace with line-tokenizing

Modified: trunk/openvas-manager/src/manage.c
===================================================================
--- trunk/openvas-manager/src/manage.c	2010-09-08 21:20:00 UTC (rev 9001)
+++ trunk/openvas-manager/src/manage.c	2010-09-09 12:32:05 UTC (rev 9002)
@@ -300,9 +300,10 @@
 {
   switch (method)
     {
-      case ESCALATOR_METHOD_EMAIL:  return "Email";
-      case ESCALATOR_METHOD_SYSLOG: return "Syslog";
-      default:                      return "Internal Error";
+      case ESCALATOR_METHOD_EMAIL:    return "Email";
+      case ESCALATOR_METHOD_HTTP_GET: return "HTTP Get";
+      case ESCALATOR_METHOD_SYSLOG:   return "Syslog";
+      default:                        return "Internal Error";
     }
 }
 
@@ -352,6 +353,8 @@
 {
   if (strcasecmp (name, "Email") == 0)
     return ESCALATOR_METHOD_EMAIL;
+  if (strcasecmp (name, "HTTP Get") == 0)
+    return ESCALATOR_METHOD_HTTP_GET;
   if (strcasecmp (name, "Syslog") == 0)
     return ESCALATOR_METHOD_SYSLOG;
   return ESCALATOR_METHOD_ERROR;

Modified: trunk/openvas-manager/src/manage.h
===================================================================
--- trunk/openvas-manager/src/manage.h	2010-09-08 21:20:00 UTC (rev 9001)
+++ trunk/openvas-manager/src/manage.h	2010-09-09 12:32:05 UTC (rev 9002)
@@ -199,6 +199,7 @@
 {
   ESCALATOR_METHOD_ERROR,
   ESCALATOR_METHOD_EMAIL,
+  ESCALATOR_METHOD_HTTP_GET,
   ESCALATOR_METHOD_SYSLOG
 } escalator_method_t;
 

Modified: trunk/openvas-manager/src/manage_sql.c
===================================================================
--- trunk/openvas-manager/src/manage_sql.c	2010-09-08 21:20:00 UTC (rev 9001)
+++ trunk/openvas-manager/src/manage_sql.c	2010-09-09 12:32:05 UTC (rev 9002)
@@ -4394,6 +4394,74 @@
 }
 
 /**
+ * @brief GET an HTTP resource.
+ *
+ * @param[in]  url  URL.
+ *
+ * @return 0 success, -1 error.
+ */
+static int
+http_get (const char *url)
+{
+  int ret;
+  gchar *standard_out = NULL;
+  gchar *standard_err = NULL;
+  gint exit_status;
+  gchar **cmd;
+
+  tracef ("   HTTP_GET %s", url);
+
+  cmd = (gchar **) g_malloc (5 * sizeof (gchar *));
+  cmd[0] = g_strdup ("/usr/bin/wget");
+  cmd[1] = g_strdup ("-O");
+  cmd[2] = g_strdup ("-");
+  cmd[3] = g_strdup (url);
+  cmd[4] = NULL;
+  g_debug ("%s: Spawning in /tmp/: %s %s %s %s\n",
+           __FUNCTION__, cmd[0], cmd[1], cmd[2], cmd[3]);
+  if ((g_spawn_sync ("/tmp/",
+                     cmd,
+                     NULL,                  /* Environment. */
+                     G_SPAWN_SEARCH_PATH,
+                     NULL,                  /* Setup function. */
+                     NULL,
+                     &standard_out,
+                     &standard_err,
+                     &exit_status,
+                     NULL)
+       == FALSE)
+      || (WIFEXITED (exit_status) == 0)
+      || WEXITSTATUS (exit_status))
+    {
+      g_debug ("%s: wget failed: %d (WIF %i, WEX %i)",
+               __FUNCTION__,
+               exit_status,
+               WIFEXITED (exit_status),
+               WEXITSTATUS (exit_status));
+      g_debug ("%s: stdout: %s\n", __FUNCTION__, standard_out);
+      g_debug ("%s: stderr: %s\n", __FUNCTION__, standard_err);
+      ret = -1;
+    }
+  else
+    {
+      if (strlen (standard_out) > 80)
+        standard_out[80] = '\0';
+      g_message ("   HTTP_GET %s: %s", url, standard_out);
+      ret = 0;
+    }
+
+  g_free (cmd[0]);
+  g_free (cmd[1]);
+  g_free (cmd[2]);
+  g_free (cmd[3]);
+  g_free (cmd[4]);
+  g_free (cmd);
+  g_free (standard_out);
+  g_free (standard_err);
+  return ret;
+}
+
+/**
  * @brief Format string for simple notice escalator email.
  */
 #define SIMPLE_NOTICE_FORMAT                                                  \
@@ -4506,6 +4574,74 @@
           return -1;
           break;
         }
+      case ESCALATOR_METHOD_HTTP_GET:
+        {
+          char *url;
+
+          url = escalator_data (escalator, "method", "URL");
+
+          if (url)
+            {
+              int ret, formatting;
+              gchar *point, *end;
+              GString *new_url;
+
+              new_url = g_string_new ("");
+              for (formatting = 0, point = url, end = (url + strlen (url));
+                   point < end;
+                   point++)
+                if (formatting)
+                  {
+                    switch (*point)
+                      {
+                        case '$':
+                          g_string_append_c (new_url, '$');
+                          break;
+                        case 'c':
+                          {
+                            gchar *condition_desc;
+                            condition_desc = escalator_condition_description
+                                              (condition, escalator);
+                            g_string_append (new_url, condition_desc);
+                            g_free (condition_desc);
+                            break;
+                          }
+                        case 'e':
+                          {
+                            gchar *event_desc;
+                            event_desc = event_description (event, event_data,
+                                                            NULL);
+                            g_string_append (new_url, event_desc);
+                            g_free (event_desc);
+                            break;
+                          }
+                        case 'n':
+                          {
+                            char *name = task_name (task);
+                            g_string_append (new_url, name);
+                            free (name);
+                            break;
+                          }
+                        default:
+                          g_string_append_c (new_url, '$');
+                          g_string_append_c (new_url, *point);
+                          break;
+                      }
+                    formatting = 0;
+                  }
+                else if (*point == '$')
+                  formatting = 1;
+                else
+                  g_string_append_c (new_url, *point);
+
+              ret = http_get (new_url->str);
+              g_string_free (new_url, TRUE);
+              g_free (url);
+              return ret;
+            }
+          return -1;
+          break;
+        }
       case ESCALATOR_METHOD_SYSLOG:
         {
           char *submethod;



More information about the Openvas-commits mailing list