[PATCH 3 of 3] Add self test as first opertation on start
Wald Commits
scm-commit at wald.intevation.org
Mon Jun 23 13:05:13 CEST 2014
# HG changeset patch
# User Andre Heinecke <andre.heinecke at intevation.de>
# Date 1403521508 -7200
# Node ID edf269b6e499500ba6c34811e4d9e0cfb6ff73fc
# Parent aa48ea7ead1fe1b7be9fcd9c1d3e2995bf519181
Add self test as first opertation on start
diff -r aa48ea7ead1f -r edf269b6e499 ui/main.cpp
--- a/ui/main.cpp Mon Jun 23 13:04:50 2014 +0200
+++ b/ui/main.cpp Mon Jun 23 13:05:08 2014 +0200
@@ -7,6 +7,9 @@
*/
#include "mainwindow.h"
#include "processhelp.h"
+#include "binverify.h"
+#include "logging.h"
+#include "strhelp.h"
#include <QApplication>
#include <QSystemTrayIcon>
@@ -36,6 +39,54 @@
int main(int argc, char **argv)
{
+ /* First verify integrity even before calling QApplication*/
+#ifdef Q_OS_WIN
+ DWORD sizeNeeded = GetModuleFileNameW (NULL, NULL, 0);
+ wchar_t wPath[sizeNeeded + 1];
+ char *utf8path = NULL;
+
+ if (sizeNeeded == 0) {
+ PRINTLASTERROR ("Failed to obtain module file name");
+ syslog_error_printf ("Integrity check failed.");
+ return -1;
+ }
+
+ DWORD realSize = GetModuleFileNameW (NULL, wPath, sizeNeeded + 1);
+
+ if (realSize != sizeNeeded) {
+ ERRORPRINTF ("Module name changed");
+ syslog_error_printf ("Integrity check failed.");
+ return -1;
+ }
+
+ utf8path = wchar_to_utf8 (wPath, sizeNeeded + 1);
+
+ if (utf8path == NULL) {
+ ERRORPRINTF ("Failed to convert module path to utf-8");
+ syslog_error_printf ("Integrity check failed.");
+ return -1;
+ }
+
+ if (!verify_binary (utf8path, strlen(utf8path)) != VerifyValid)
+ {
+ syslog_error_printf ("Integrity check failed.");
+ xfree(utf8path);
+#ifdef RELEASE_BUILD
+ return -1;
+#endif
+ }
+
+ xfree(utf8path);
+#else
+ if (!verify_binary ("/proc/self/exe", 14) != VerifyValid)
+ {
+ syslog_error_printf ("Integrity check failed.");
+#ifdef RELEASE_BUILD
+ return -1;
+#endif
+ }
+#endif
+
QApplication app (argc, argv);
QApplication::setQuitOnLastWindowClosed(false);
More information about the Trustbridge-commits
mailing list