Index: trunk/configure.ac
===================================================================
--- trunk/configure.ac	(revision 225)
+++ trunk/configure.ac	(revision 226)
@@ -12,5 +12,5 @@
 dnl start
 dnl
-AM_INIT_AUTOMAKE(samhain, 2.5.4)
+AM_INIT_AUTOMAKE(samhain, 2.5.5)
 AC_DEFINE([SAMHAIN], 1, [Application is samhain])
 AC_CANONICAL_HOST
Index: trunk/docs/Changelog
===================================================================
--- trunk/docs/Changelog	(revision 225)
+++ trunk/docs/Changelog	(revision 226)
@@ -1,3 +1,7 @@
-2.5.4:
+2.5.5:
+	* fix for incorrect handling of hostnames in database insertion
+	  (reported by byron)
+	
+2.5.4 (04-03-2009):
 	* fix for incorrect input check in SRP implementation (discovered
 	  by Thomas Ptacek)
Index: trunk/src/sh_database.c
===================================================================
--- trunk/src/sh_database.c	(revision 225)
+++ trunk/src/sh_database.c	(revision 226)
@@ -1766,8 +1766,7 @@
 /* recursively enter linked list of messages into database, last first
  */
-long sh_database_insert_rec (dbins * curr, int depth)
+long sh_database_insert_rec (dbins * curr, int depth, char * host)
 {
   unsigned long    id = 0;
-  dbins * prev;
 
   SL_ENTER(_("sh_database_insert_rec"));
@@ -1775,8 +1774,15 @@
   if (curr->next)
     {
+      /*
       prev = curr->next;
       sl_strlcpy(prev->host, curr->host, 64);
       id = sh_database_insert_rec (curr->next, (depth + 1));
-    }
+      */
+      ++depth;
+      id = sh_database_insert_rec (curr->next, depth, curr->host);
+    }
+
+  if (host) 
+    sl_strlcpy(curr->host, host, 64);
 
   if (id != 0)                       /* this is a server wrapper          */
@@ -1818,5 +1824,5 @@
   /* recursively enter the linked list into the database
    */
-  (void) sh_database_insert_rec (db_entry, 0);
+  (void) sh_database_insert_rec (db_entry, 0, NULL);
 
   SL_RETURN(0, _("sh_database_insert"));
Index: trunk/src/sh_utils.c
===================================================================
--- trunk/src/sh_utils.c	(revision 225)
+++ trunk/src/sh_utils.c	(revision 226)
@@ -2107,5 +2107,6 @@
 
   
-size_t sh_util_base64_enc (unsigned char * out, const unsigned char * instr, 
+size_t sh_util_base64_enc (unsigned char * out, 
+			   const unsigned char * instr, 
 			   size_t lin)
 {
@@ -2171,5 +2172,6 @@
 }
 
-size_t sh_util_base64_dec (unsigned char *out, const unsigned char *in, 
+size_t sh_util_base64_dec (unsigned char *out, 
+			   const unsigned char *in, 
 			   size_t lin)
 {
Index: trunk/test/testrun_2a.sh
===================================================================
--- trunk/test/testrun_2a.sh	(revision 225)
+++ trunk/test/testrun_2a.sh	(revision 226)
@@ -229,4 +229,6 @@
 	chmod 644 ./rc.${ALTHOST}
 	chmod 644 ./file.${ALTHOST}
+
+	echo $SHPW > ./testpw
 }
 
Index: trunk/test/testrun_2c.sh
===================================================================
--- trunk/test/testrun_2c.sh	(revision 225)
+++ trunk/test/testrun_2c.sh	(revision 226)
@@ -19,4 +19,7 @@
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 #
+LOGFILE="$PW_DIR/.samhain_log"; export LOGFILE
+RCFILE="$PW_DIR/testrc_2";  export RCFILE
+HTML="$PW_DIR/yule.html";  export HTML
 
 SERVER_BUILDOPTS="--quiet  $TRUST --enable-xml-log --enable-debug --enable-network=server --prefix=$PW_DIR --localstatedir=$PW_DIR --with-config-file=REQ_FROM_SERVER$PW_DIR/testrc_2 --with-data-file=REQ_FROM_SERVER$PW_DIR/.samhain_file --with-logserver=${SH_LOCALHOST}  --with-log-file=$PW_DIR/.samhain_log --with-pid-file=$PW_DIR/.samhain_lock --with-database=mysql"; export SERVER_BUILDOPTS
@@ -24,5 +27,113 @@
 CLIENT_BUILDOPTS="--quiet  $TRUST --prefix=$PW_DIR --with-tmp-dir=$PW_DIR --localstatedir=$PW_DIR --enable-network=client --disable-mail --disable-external-scripts --enable-login-watch --enable-xml-log --enable-db-reload --with-logserver=localhost --with-config-file=REQ_FROM_SERVER$PW_DIR/testrc_2 --with-data-file=REQ_FROM_SERVER$PW_DIR/.samhain_file --with-log-file=$PW_DIR/.samhain_log --with-pid-file=$PW_DIR/.samhain_lock"; export CLIENT_BUILDOPTS
 
-MAXTEST=3; export MAXTEST
+MAXTEST=4; export MAXTEST
+
+do_test_1_c () {
+
+	[ -z "$verbose" ] || { 
+	    echo; 
+	    echo "${S}Start Server${E}: ./yule -l info -p none &"; 
+	    echo; 
+	}
+
+	rm -f test_log_valgrind
+
+	${VALGRIND} ./yule.2 -q -l info -p none >/dev/null 2>>test_log_valgrind &
+	PROC_Y2=$!
+	five_sec_sleep
+
+	[ -z "$verbose" ] || { 
+	    echo; 
+	    echo "${S}Start Server #2${E}: ./yule.2 -l info -p none &"; 
+	    echo; 
+	}
+
+	${VALGRIND} ./yule -l info -p none -e info --bind-address=127.0.0.1 \
+	    --server-port=49778 >/dev/null 2>>test_log_valgrind &
+	PROC_Y=$!
+	five_sec_sleep
+
+	[ -z "$verbose" ] || { 
+	    echo; 
+	    echo "${S}Start Client${E}: ./samhain.new -l none -p none -e info -t check"; 
+	    echo; 
+	}
+
+	${VALGRIND} ./samhain.new -t check -p none -l none -e info --bind-address=127.0.0.1 >/dev/null 2>>test_log_valgrind
+	if test x$? = x0; then
+	    [ -z "$verbose" ] || log_msg_ok    "samhain.new -t check";
+	else
+	    [ -z "$quiet" ]   && log_msg_fail  "samhain.new -t check";
+	    kill $PROC_Y
+	    kill $PROC_Y2
+	    return 1
+	fi
+
+	kill $PROC_Y
+	kill $PROC_Y2
+	five_sec_sleep
+
+	# cp ${LOGFILE}  triple_test
+	# cp ${LOGFILE}2 triple_test_2
+
+	egrep "START(>|\").*Yule(>|\")" ${LOGFILE}2 >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Server #2 start";
+	    return 1
+	fi
+	egrep "remote_host.*Checking.*/bin" ${LOGFILE}2 >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Client file check (relayed)";
+	    return 1
+	fi
+	egrep "remote_host.*EXIT.*Samhain" ${LOGFILE}2 >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Client exit (relayed)";
+	    return 1
+	fi
+	egrep "EXIT.*Yule.*SIGTERM" ${LOGFILE}2 >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Server #2 exit";
+	    return 1
+	fi
+
+
+	egrep "START(>|\").*Yule(>|\")" $LOGFILE >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Server start";
+	    return 1
+	fi
+	egrep "NEW CLIENT" $LOGFILE >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Client connect";
+	    return 1
+	fi
+	egrep "remote_host.*Checking.*/bin" $LOGFILE >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Client file check";
+	    return 1
+	fi
+	egrep "remote_host.*EXIT.*Samhain" $LOGFILE >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Client exit";
+	    return 1
+	fi
+	egrep "EXIT.*Yule.*SIGTERM" $LOGFILE >/dev/null 2>&1
+	if [ $? -ne 0 ]; then
+	    [ -z "$verbose" ] || log_msg_fail "Server exit";
+	    return 1
+	fi
+
+	[ -z "$VALGRIND" ] || {
+	    tmp=`cat test_log_valgrind 2>/dev/null | wc -l`;
+	    if [ $tmp -ne 0 ]; then
+		[ -z "$verbose" ] || log_msg_fail "valgrind reports errors";
+		cat test_log_valgrind
+		return 1;
+	    fi;
+	}
+
+	return 0
+}
 
 testrun_threesockets () {
@@ -152,4 +263,51 @@
     testrun2a_internal
     #
+    # BUILD Server 2
+    #
+    cp ./yule ./yule.orig
+
+	${TOP_SRCDIR}/configure --quiet  $TRUST --enable-debug --enable-network=server  --enable-xml-log --enable-login-watch --prefix=$PW_DIR --localstatedir=$PW_DIR --with-config-file=${RCFILE}2  --with-log-file=${LOGFILE}2 --with-pid-file=$PW_DIR/.samhain_lock2 --with-html-file=${HTML}2 --with-state-dir=$PW_DIR --with-port=49778 --with-database=mysql
+	#
+	if test x$? = x0; then
+		[ -z "$verbose" ] ||     log_msg_ok "configure..."; 
+		$MAKE  > /dev/null 2>>test_log
+		if test x$? = x0; then
+		    [ -z "$verbose" ] || log_msg_ok "make..."; 
+		else
+		    [ -z "$quiet" ] &&   log_msg_fail "make..."; 
+		    return 1
+		fi
+
+	else
+		[ -z "$quiet" ] &&       log_msg_fail "configure...";
+		return 1
+	fi
+
+	cp yule yule.2 || return 1
+	#
+    cp ./yule.orig ./yule
+        #
+	SHPW=`cat ./testpw`
+
+	if test x"$SHPW" = x; then
+	    [ -z "$quiet" ]   && log_msg_fail  "password not generated -- aborting"
+	    return 1
+	fi
+
+	rm -f ./testpw
+
+	./samhain_setpwd yule new $SHPW >/dev/null
+
+	if test x$? = x0; then
+	    [ -z "$verbose" ] || log_msg_ok    "./samhain_setpwd yule new $SHPW";
+	else
+	    [ -z "$quiet" ]   && log_msg_fail  "./samhain_setpwd yule new $SHPW";
+	    return 1
+	fi
+
+
+        $MAKE clean >/dev/null || return 1
+    mv yule.new yule || return 1
+    #
     ORIGINAL="DatabaseSeverity=none"
     REPLACEMENT="DatabaseSeverity=info"
@@ -160,4 +318,5 @@
     #
     do_test_1_a
+    #
     if [ $? -ne 0 ]; then
 	[ -z "$quiet" ] && log_fail 1 ${MAXTEST} "Client/server w/mysql";
@@ -171,4 +330,27 @@
 	fi
     fi
+    #
+    cp testrc_2 testrc_22
+    ORIGINAL="DatabaseSeverity=none"
+    REPLACEMENT="DatabaseSeverity=info"
+    ex -s $RCFILE <<EOF
+%s/$REPLACEMENT/$ORIGINAL/g
+wq
+EOF
+    #
+    do_test_1_c
+    #
+    if [ $? -ne 0 ]; then
+	[ -z "$quiet" ] && log_fail 2 ${MAXTEST} "Client/server (relay) w/mysql";
+    else
+    #
+	check_mysql_log "${DATE}"
+	if [ $? -ne 0 ]; then
+	    [ -z "$quiet" ] && log_fail 2 ${MAXTEST} "Client/server (relay) w/mysql";
+	else
+	    [ -z "$quiet" ] && log_ok   2 ${MAXTEST} "Client/server (relay) w/mysql";
+	fi
+    fi
+    #
     #
     if [ -f ./yule ]; then
@@ -177,12 +359,12 @@
 	netstat -pant 2>/dev/null | grep 49777 | grep yule >/dev/null 2>&1
 	if [ $? -ne 0 ]; then
-	    [ -z "$quiet" ] && log_fail 2 ${MAXTEST} "Client/server w/mysql";
+	    [ -z "$quiet" ] && log_fail 3 ${MAXTEST} "Client/server w/mysql";
 	else
 	    NSOCK=`netstat -pand 2>/dev/null | grep STREAM | grep yule | wc -l`
 	    if [ $NSOCK -ne 2 ]; then
-		[ -z "$quiet" ] && log_fail 2 ${MAXTEST} "Three sockets open";
+		[ -z "$quiet" ] && log_fail 3 ${MAXTEST} "Three sockets open";
 		netstat -pand 2>/dev/null | grep yule 
 	    else
-		[ -z "$quiet" ] && log_ok   2 ${MAXTEST} "Three sockets open";
+		[ -z "$quiet" ] && log_ok   3 ${MAXTEST} "Three sockets open";
 	    fi
 	fi
@@ -190,14 +372,14 @@
 	kill $PID
     else
-	log_fail 2 ${MAXTEST} "Three sockets open";
+	log_fail 3 ${MAXTEST} "Three sockets open";
     fi
     #
     GPG=`find_path gpg`
     if [ -z "$GPG" ]; then
-        log_skip 3 $MAXTEST 'gpg not found in $PATH'
+        log_skip 4 $MAXTEST 'gpg not found in $PATH'
     else
         eval "$GPG" --list-keys 0F571F6C >/dev/null 2>/dev/null
         if [ $? -ne 0 ]; then
-            log_skip 3 $MAXTEST 'public PGP key 0x0F571F6C not present'
+            log_skip 4 $MAXTEST 'public PGP key 0x0F571F6C not present'
         else
 	    testrun_threesockets "$GPG"
@@ -208,12 +390,12 @@
 		netstat -pant 2>/dev/null | grep 49777 | grep yule >/dev/null 2>&1
 		if [ $? -ne 0 ]; then
-		    [ -z "$quiet" ] && log_fail 3 ${MAXTEST} "Three sockets open (gpg)";
+		    [ -z "$quiet" ] && log_fail 4 ${MAXTEST} "Three sockets open (gpg)";
 		else
 		    NSOCK=`netstat -pand 2>/dev/null | grep STREAM | grep yule | wc -l`
 		    if [ $NSOCK -ne 2 ]; then
-			[ -z "$quiet" ] && log_fail 3 ${MAXTEST} "Three sockets open (gpg)";
+			[ -z "$quiet" ] && log_fail 4 ${MAXTEST} "Three sockets open (gpg)";
 			netstat -pand 2>/dev/null | grep yule 
 		    else
-			[ -z "$quiet" ] && log_ok   3 ${MAXTEST} "Three sockets open (gpg)";
+			[ -z "$quiet" ] && log_ok   4 ${MAXTEST} "Three sockets open (gpg)";
 		    fi
 		fi
@@ -221,5 +403,5 @@
 		kill $PID
 	    else
-		log_fail 3 ${MAXTEST} "Three sockets open (gpg)";
+		log_fail 4 ${MAXTEST} "Three sockets open (gpg)";
 	    fi
 	fi
