view common/selftest.c @ 1075:7e1fd6d96714

(issue109) Feedback improved. Shell translation updated.
author Bernhard Reiter <bernhard@intevation.de>
date Thu, 11 Sep 2014 10:18:46 +0200
parents fa3f4e2370d3
children edbf5e5e88f4
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);
  return true;
#else
  if (!verify_binary ("/proc/self/exe", 14) != VerifyValid)
    {
      syslog_error_printf ("Integrity check failed.");
      return false;
    }
#endif
}

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