view common/selftest.c @ 1049:52c68a773194

Ubuntu Installer, short instruction with explicit mention that this example is for one user only.
author Bernhard Reiter <bernhard@intevation.de>
date Fri, 05 Sep 2014 12:30:47 +0200
parents f89b41fa7048
children fa3f4e2370d3
line wrap: on
line source
#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/