diff common/selftest.c @ 634:80d1a80b3e8d

Factor out selftest for better test and reviewability
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 23 Jun 2014 16:43:07 +0200
parents
children f89b41fa7048
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/selftest.c	Mon Jun 23 16:43:07 2014 +0200
@@ -0,0 +1,46 @@
+#include "selftest.h"
+#include "binverify.h"
+#include "strhelp.h"
+#include "logging.h"
+
+bool
+selftest()
+{
+#ifdef WIN32
+  wchar_t wPath[MAX_PATH];
+  char *utf8path = NULL;
+
+  if (!GetModuleFileNameW (NULL, wPath, MAX_PATH - 1)) 
+    {
+      PRINTLASTERROR ("Failed to obtain module file name. Path too long?");
+      return false;
+    }
+
+  /* wPath might not be 0 terminated */
+  wPath[MAX_PATH - 1] = '\0';
+
+  utf8path = wchar_to_utf8 (wPath, wcsnlen(wPath, MAX_PATH));
+
+  if (utf8path == NULL)
+    {
+      ERRORPRINTF ("Failed to convert module path to utf-8");
+      return false;
+    }
+
+  if (!verify_binary (utf8path, strlen(utf8path)) != VerifyValid)
+    {
+      ERRORPRINTF ("Verification of the binary failed");
+      syslog_error_printf ("Integrity check failed.");
+      xfree(utf8path);
+      return false;
+    }
+
+  xfree(utf8path);
+#else
+  if (!verify_binary ("/proc/self/exe", 14) != VerifyValid)
+    {
+      syslog_error_printf ("Integrity check failed.");
+      return false;
+    }
+#endif
+}

http://wald.intevation.org/projects/trustbridge/