Index: trunk/configure.ac
===================================================================
--- trunk/configure.ac	(revision 538)
+++ trunk/configure.ac	(revision 539)
@@ -12,5 +12,5 @@
 dnl start
 dnl
-AM_INIT_AUTOMAKE(samhain, 4.3.1)
+AM_INIT_AUTOMAKE(samhain, 4.3.2)
 AC_DEFINE([SAMHAIN], 1, [Application is samhain])
 AC_CANONICAL_HOST
Index: trunk/docs/Changelog
===================================================================
--- trunk/docs/Changelog	(revision 538)
+++ trunk/docs/Changelog	(revision 539)
@@ -1,2 +1,4 @@
+4.3.2:
+	* fix compile failure on OpenBSD (reported by Mithrond)
 
 4.3.1:
Index: trunk/src/cutest_sh_unix.c
===================================================================
--- trunk/src/cutest_sh_unix.c	(revision 538)
+++ trunk/src/cutest_sh_unix.c	(revision 539)
@@ -21,4 +21,5 @@
   char * area[256];
 
+#if !defined(USE_SYSTEM_MALLOC) && !defined(__clang__)
   /* test reuse of last freed chunk */
   buf = malloc(1024);
@@ -28,5 +29,6 @@
   CuAssertTrue(tc, buf == area[0]);
   free(area[0]);
-
+#endif
+  
   /* test realloc */
   buf = malloc(16);
Index: trunk/src/cutest_zAVLTree.c
===================================================================
--- trunk/src/cutest_zAVLTree.c	(revision 538)
+++ trunk/src/cutest_zAVLTree.c	(revision 539)
@@ -513,4 +513,5 @@
 
   zAVL_string_reset(ztest_tree);
+  ztest_tree = NULL;
   str = zAVL_string_get(ztest_tree, "foo");
   CuAssertTrue(tc, str == NULL);
Index: trunk/src/samhain.c
===================================================================
--- trunk/src/samhain.c	(revision 538)
+++ trunk/src/samhain.c	(revision 539)
@@ -348,5 +348,9 @@
   sh_global_check_silent = 0;
   sh_load_delta_flag     = 0;
-  strcpy ( sh_sig_msg, _("None"));
+  sh_sig_msg[4] = '\0';
+  sh_sig_msg[3] = 'e';
+  sh_sig_msg[2] = 'n';
+  sh_sig_msg[1] = 'o';
+  sh_sig_msg[0] = 'N';
 
 #ifdef MKB_01
@@ -877,4 +881,5 @@
   if (NULL == (dp = opendir(_("/proc"))))
     {
+      /* cppcheck-suppress resourceLeak */
       return NULL;
     }
Index: trunk/src/sh_database.c
===================================================================
--- trunk/src/sh_database.c	(revision 538)
+++ trunk/src/sh_database.c	(revision 539)
@@ -1411,5 +1411,5 @@
 	  /*@-type@*//* byte* versus char[..] */
 	  if (attr_tab[i].inHash == 1 && 
-	      ((char *)(db_entry)+attr_tab[i].off) != '\0')
+	      *((char *)(db_entry)+attr_tab[i].off) != '\0')
 	    {
 	      (void)md5Update(&crc, 
Index: trunk/src/sh_files.c
===================================================================
--- trunk/src/sh_files.c	(revision 538)
+++ trunk/src/sh_files.c	(revision 539)
@@ -2046,4 +2046,12 @@
 #endif
 
+/* This is the LCG from Numerical Recipies. Deterministic. 
+ */
+static unsigned int simple_rand(unsigned int * state)
+{
+  *state = 1664525 * (*state) + 1013904223;
+  return *state;
+}
+
 void * sh_dummy_dirlist;
 void * sh_dummy_tmpcat;
@@ -2290,9 +2298,5 @@
     BREAKEXIT(sh_derr);
 
-#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_RAND_R)
-    if (0 == (rand_r(&state) % 5)) (void) sh_derr();
-#else
-    if (0 == state * (rand() % 5)) (void) sh_derr();
-#endif
+    if (0 == (simple_rand(&state) % 5)) (void) sh_derr();
     
     /* ---- Check the file. ---- 
@@ -2637,9 +2641,5 @@
   BREAKEXIT(sh_derr);
 
-#if defined(HAVE_PTHREAD) && defined (_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_RAND_R)
-  if (0 == (rand_r(&state) % 2)) (void) sh_derr();
-#else
-  if (0 == state * (rand() % 2)) (void) sh_derr();
-#endif
+  if (0 == (simple_rand(&state) % 2)) (void) sh_derr();
 
   if (dirName && infileName && (dirName[0] == '/') && (dirName[1] == '\0')
Index: trunk/src/sh_filetype.c
===================================================================
--- trunk/src/sh_filetype.c	(revision 538)
+++ trunk/src/sh_filetype.c	(revision 539)
@@ -597,4 +597,6 @@
       fprintf(stdout, "%s: %s\n", argv[1], filetype);
 
+      fclose(fh);
+      
       return 0;
     }
Index: trunk/src/sh_getopt.c
===================================================================
--- trunk/src/sh_getopt.c	(revision 538)
+++ trunk/src/sh_getopt.c	(revision 539)
@@ -418,6 +418,6 @@
 
 #ifdef HAVE_LIBPRELUDE
-  if (num > 0) fputc ('\n', stdout); ++num;
-  fputs (_(" prelude (0.9.6+)"), stdout);
+  if (num > 0) fputc ('\n', stdout);
+  fputs (_(" prelude (0.9.6+)"), stdout); ++num;
 #endif
 
@@ -635,5 +635,5 @@
 {
   fprintf (stdout, "%s",
-	   _("Copyright (C) 1999-2008 Rainer Wichmann"\
+	   _("Copyright (C) 1999-2019 Rainer Wichmann"\
 	     " (http://la-samhna.de).\n\n"));
 
Index: trunk/src/sh_ipvx.c
===================================================================
--- trunk/src/sh_ipvx.c	(revision 538)
+++ trunk/src/sh_ipvx.c	(revision 539)
@@ -355,4 +355,6 @@
   char hostbuf[SH_BUFSIZE];
 
+  SL_ENTER(_("sh_ipvx_canonical"));
+  
   numeric[0] = '\0';
 
@@ -424,4 +426,6 @@
   struct sockaddr_in *sin;
 
+  SL_ENTER(_("sh_ipvx_canonical"));
+
   numeric[0] = '\0';
 
@@ -459,6 +463,7 @@
 #endif
 
-  if (flag)
-    return out;
+  if (flag) {
+    SL_RETURN(out, _("sh_ipvx_canonical"));
+  }
   
   if (out)
@@ -466,5 +471,5 @@
   if (numeric[0] == '\0')
     sl_strlcpy (numeric, _("0.0.0.0"), nlen);
-  return NULL;
+  SL_RETURN(NULL, _("sh_ipvx_canonical"));
 }
 
@@ -505,4 +510,6 @@
   struct addrinfo *p;
 
+  SL_ENTER(_("sh_ipvx_reverse_check_ok"));
+
   sl_snprintf(sport, sizeof(sport), "%d", port);
 
@@ -513,5 +520,5 @@
   if (getaddrinfo(peer, sport, &hints, &res) != 0)
     {
-      return 0;
+      SL_RETURN((0), _("sh_ipvx_reverse_check_ok")); 
     }
   
@@ -533,5 +540,5 @@
 	  if (0 == sl_strcmp(dst1, dst2))
 	    {
-	      return 1;
+	      SL_RETURN((1), _("sh_ipvx_reverse_check_ok")); 
 	    }
 	}
@@ -546,4 +553,6 @@
   (void) port;
 
+  SL_ENTER(_("sh_ipvx_reverse_check_ok"));
+
   he = sh_gethostbyname(peer);
   if (he != NULL)
@@ -551,10 +560,10 @@
       for (p = he->h_addr_list; *p; ++p)
 	{
-	  if (0 == memcmp (*p, &(sin->sin_addr), sizeof(in_addr_t)) )
-	    return 1;
+	  if (0 == memcmp (*p, &(sin->sin_addr), sizeof(in_addr_t)) ) {
+	    SL_RETURN((1), _("sh_ipvx_reverse_check_ok")); }
 	}
     }
 #endif
-  return 0;
+  SL_RETURN((0), _("sh_ipvx_reverse_check_ok"));
 }
 
Index: trunk/src/sh_log_evalrule.c
===================================================================
--- trunk/src/sh_log_evalrule.c	(revision 538)
+++ trunk/src/sh_log_evalrule.c	(revision 539)
@@ -458,5 +458,5 @@
     {
       *seconds = strtoul(splits[0], &endptr, 10);
-      if ((endptr == '\0' || endptr != splits[0]) && (*seconds != ULONG_MAX))
+      if ((*endptr == '\0') && (endptr != splits[0]) && (*seconds != ULONG_MAX))
 	{
 	  res = sh_util_strdup(splits[1]);
@@ -495,4 +495,7 @@
   volatile char pflag = '-';
 
+  if (s == NULL)
+    return -1;
+  /* cppcheck-suppress uninitdata */
   while ( *s && isspace((int)*s) ) ++s;
   if (0 == strncmp(s, _("KEEP"), 4)      || 
Index: trunk/src/sh_portcheck.c
===================================================================
--- trunk/src/sh_portcheck.c	(revision 538)
+++ trunk/src/sh_portcheck.c	(revision 539)
@@ -430,4 +430,5 @@
       sl_fclose(FIL__, __LINE__, fp);
     }
+  /* cppcheck-suppress resourceLeak */
   return NULL;
 }
@@ -480,4 +481,5 @@
       sl_fclose(FIL__, __LINE__, fp);
     }
+  /* cppcheck-suppress resourceLeak */
   return NULL;
 }
Index: trunk/src/sh_processcheck.c
===================================================================
--- trunk/src/sh_processcheck.c	(revision 538)
+++ trunk/src/sh_processcheck.c	(revision 539)
@@ -787,5 +787,5 @@
   /* sched_getparam() is broken on solaris 10, may segfault in librt
    */
-#if !defined(sun) && !defined(__sun) && !defined(__sun__)
+#if !defined(sun) && !defined(__sun) && !defined(__sun__) && !defined(__OpenBSD__)
 #ifdef _POSIX_PRIORITY_SCHEDULING
   if (0 == sched_getparam (pid, &p))
Index: trunk/src/sh_registry.c
===================================================================
--- trunk/src/sh_registry.c	(revision 538)
+++ trunk/src/sh_registry.c	(revision 539)
@@ -841,4 +841,7 @@
   size_t len;
   int    retval = -1;
+
+  if (!subkey)
+    return 0;
   
   len = strlen(path) + 1 + strlen(subkey) + 1;
@@ -934,5 +937,5 @@
 {
   HKEY topKey;
-  char * subkey;
+  char * subkey = NULL;
   char path[20] = "";
   int pos = 0;
@@ -974,5 +977,5 @@
   else
     {
-
+      /* We bail out here if the topKey is undefined */
       char * tmp = sh_util_safe_name_keepspace(key);
       size_t tlen = sl_strlen(tmp);
@@ -1003,4 +1006,6 @@
   *************************/
 
+  /* Returns 0 if !subkey */
+  /* cppcheck-suppress uninitvar */
   return CheckThisSubkey (topKey, subkey, path, isSingle, 0);
 }
Index: trunk/src/sh_static.c
===================================================================
--- trunk/src/sh_static.c	(revision 538)
+++ trunk/src/sh_static.c	(revision 539)
@@ -1474,4 +1474,5 @@
 		*fp = fopen("/etc/config/hosts", "r");
 	}
+	/* cppcheck-suppress resourceLeak */
 	return;
 }
@@ -1549,4 +1550,7 @@
 
 	*h_errnop=HOST_NOT_FOUND;
+	if (fp == NULL) {
+	        return ret;
+	}
 	while (fgets(buf, buflen, fp)) {
 		if ((cp = strchr(buf, '#')))
Index: trunk/src/sh_tiger0.c
===================================================================
--- trunk/src/sh_tiger0.c	(revision 538)
+++ trunk/src/sh_tiger0.c	(revision 539)
@@ -1021,6 +1021,6 @@
   /*@-bufferoverflowhigh -usedef@*/
   for (cnt = 0; cnt < 16; ++cnt)
-    sprintf (&outbuf[cnt*2], _("%02X"),                 /* known to fit  */
-	     (unsigned int) md5buffer[cnt]);
+    sl_snprintf (&outbuf[cnt*2], 3, _("%02X"),                 /* known to fit  */
+	      (unsigned int) md5buffer[cnt]);
   /*@+bufferoverflowhigh +usedef@*/
   for (cnt = 32; cnt < KEY_LEN; ++cnt)
@@ -1585,5 +1585,5 @@
   /*@-bufferoverflowhigh -usedef@*/
   for (cnt = 0; cnt < 20; ++cnt)
-    sprintf (&outbuf[cnt*2], _("%02X"),              /* known to fit  */
+    sl_snprintf (&outbuf[cnt*2], 3, _("%02X"),              /* known to fit  */
 	     (unsigned int) sha1buffer[cnt]);
   /*@+bufferoverflowhigh +usedef@*/
Index: trunk/src/sh_tools.c
===================================================================
--- trunk/src/sh_tools.c	(revision 538)
+++ trunk/src/sh_tools.c	(revision 539)
@@ -188,4 +188,5 @@
       if (-1 == (sd = socket(AF_INET, SOCK_STREAM, 0)))
 	{
+	  /* cppcheck-suppress resourceLeak */
 	  return 0;
 	}
@@ -864,4 +865,5 @@
       if (tools_debug)
 	fputs(_("-03- cached\n"), stderr); 
+      /* cppcheck-suppress uninitStructMember */
       fd = socket(ss.ss_family, SOCK_STREAM, 0);
       if (fd < 0) 
@@ -879,6 +881,7 @@
       if (fail != (-1)) 
 	{
+	  /* cppcheck-suppress uninitStructMember */
 	  int addrlen = SH_SS_LEN(ss);
-	
+
 	  if ( retry_connect(FIL__, __LINE__, fd, 
 			     sh_ipvx_sockaddr_cast(&ss), addrlen) < 0) 
Index: trunk/src/sh_unix.c
===================================================================
--- trunk/src/sh_unix.c	(revision 538)
+++ trunk/src/sh_unix.c	(revision 539)
@@ -2341,9 +2341,9 @@
       hh = diff / 60;
       mm = diff - (hh * 60);
-      sprintf (tz, _("%+03d%02d"), hh, mm);                /* known to fit  */
+      sl_snprintf (tz, sizeof(tz), _("%+03d%02d"), hh, mm);                /* known to fit  */
     }
   else
     {
-      sprintf (tz, _("%+03d%02d"), 0, 0);
+      sl_snprintf (tz, sizeof(tz), _("%+03d%02d"), 0, 0);
     }
   SL_RETURN(tz, _("t_zone"));
@@ -2483,4 +2483,5 @@
 			       MSG_E_NET, errmsg, error_call,
 			       _("time"), sh.srvtime.name);
+	      errflag = error_num;
 	      fail = 1;
 	    }
@@ -4602,5 +4603,5 @@
   SL_ENTER(_("sh_unix_lock"));
 
-  sprintf (myPid, "%ld\n", (long) sh.pid);             /* known to fit  */
+  sl_snprintf (myPid, sizeof(myPid), "%ld\n", (long) sh.pid);             /* known to fit  */
 
   if (flag == NULL) /* PID file, check for directory */
Index: trunk/src/sh_xfer_server.c
===================================================================
--- trunk/src/sh_xfer_server.c	(revision 538)
+++ trunk/src/sh_xfer_server.c	(revision 539)
@@ -1068,4 +1068,5 @@
       memcpy(&peer_addr, &(conn->addr_peer), sizeof(struct sh_sockaddr));
       sh_ipvx_ntoa (peer_ip, sizeof(peer_ip), &peer_addr);
+      peer_name[0] = '\0';
 
       /* get canonical name of socket peer
Index: trunk/src/slib.c
===================================================================
--- trunk/src/slib.c	(revision 538)
+++ trunk/src/slib.c	(revision 539)
@@ -1777,4 +1777,5 @@
       free (ofiles[fd]);
       ofiles[fd] = NULL;
+      /* cppcheck-suppress memleak */
       SL_IRETURN(SL_EMEM, _("sl_make_ticket"));
     }
@@ -1789,4 +1790,5 @@
       (void) free (ofiles[fd]);
       ofiles[fd] = NULL;
+      /* cppcheck-suppress memleak */
       SL_IRETURN(ticket, _("sl_make_ticket"));
     }
@@ -1802,4 +1804,5 @@
   ofiles[fd]->oline = oline;
 
+  /* cppcheck-suppress memleak */
   SL_IRETURN(ticket, _("sl_make_ticket"));
 }
Index: trunk/test/testcompile.sh
===================================================================
--- trunk/test/testcompile.sh	(revision 538)
+++ trunk/test/testcompile.sh	(revision 539)
@@ -25,4 +25,11 @@
 run_dnmalloc ()
 {
+    uname -a | grep -i openbsd >/dev/null
+
+    if test x$? = x0; then
+	log_skip $num ${MAXTEST} 'test dnmalloc'
+	return 0
+    fi
+
     fail=0
     if test x$1 = x0; then
Index: trunk/test/testrun_1b.sh
===================================================================
--- trunk/test/testrun_1b.sh	(revision 538)
+++ trunk/test/testrun_1b.sh	(revision 539)
@@ -68,6 +68,5 @@
 	#
 	#
-	${TOP_SRCDIR}/configure ${BUILDOPTS} 2>/dev/null | \
-	    egrep 'use existing [./[:alnum:]]+ for gpg checksum' >/dev/null
+	${TOP_SRCDIR}/configure ${BUILDOPTS} 2>/dev/null
 	#
 	#
