clamd not changing user in freebsd

After some upgrade of clamav it no longer started as the proper user. They try to start as the default clamav user which does not work for me.
This is the error:

Starting clamav_freshclam.
ERROR: Can't open /var/log/clamav/freshclam.log in append mode (check permissions!).
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).
/usr/local/etc/rc.d/clamav-freshclam: WARNING: failed to start clamav_freshclam

and

# /usr/local/etc/rc.d/clamav-clamd start    
Starting clamav_clamd.
ERROR: LOCAL: Socket file /var/run/clamav/clamd could not be bound: Permission denied

I figured out what went wrong. the FreeBSD rc script starts clamd as clamav so then clamd itself does not have the power to change users. If you add this to your /etc/rc.conf, it may fix your problem as it did mine:

clamav_clamd_user="vscan"
clamav_freshclam_user="vscan"

Obviously vscan should be whatever user you need to start the services as. Note that if you put “root” in there, then that makes it so clamd and freshclam have the power to change users (so if it is in the config they can do that now).

SMB/samba uptime monitoring

I wanted to be able get a notification when a SMB/samba server went down so I set up a script on a FreeBSD server. This script will connect to a SMB share and check for the existence of a file/folder on that share.
If it does not exist then it will E-mail you. I put this in /home/username/bin
and it needs a tmp directory in /home/username/bin/tmp (or modify the script to use some other directory).
Configure the variables at the beginning for your use.

I named this file check_fileserver_smb.sh

#!/bin/sh

PATH=$PATH:/usr/local/bin:/usr/bin

SMBUSERNAME='myusername'
SMBPW='mypassword'
SERVERTOCHECK='fileserver'
SERVICETOCHECK='archive'
#Note that this needs to be only the first word of the folder name (spaces not supported)
FOLDERTOCHECK='Photos'
NOTIFYEMAIL='youremail@maildomain.comm'

cd ~/bin

FOLDERCHECK=$( smbclient --user=$SMBUSERNAME -c "ls" \\\\$SERVERTOCHECK\\$SERVICETOCHECK $SMBPW 2>/dev/null | grep $FOLDERTOCHECK | cut -f 2 -w )

if [ "$FOLDERCHECK" == "$FOLDERTOCHECK" ]; then
	#echo "Yep, $SERVERTOCHECK samba is up."

	if [ -e tmp/uptime-$SERVERTOCHECK-$SERVICETOCHECK-down ]; then
		rm tmp/uptime-$SERVERTOCHECK-$SERVICETOCHECK-down
		#echo "Back up!"
		date | mail -s "Service Up: $SERVERTOCHECK-$SERVICETOCHECK samba" $NOTIFYEMAIL
	fi
else
	#echo "No, $SERVERTOCHECK samba is down!"
	if [ -e tmp/uptime-$SERVERTOCHECK-$SERVICETOCHECK-down ]; then
		#echo "still down..."
	else
		touch tmp/uptime-$SERVERTOCHECK-$SERVICETOCHECK-down
		date | mail -s "Service Down: $SERVERTOCHECK-$SERVICETOCHECK samba" $NOTIFYEMAIL
	fi
fi

In /etc/crontab I have this to check every 5 minutes:

*/5 * * * * username /home/username/bin/check_fileserver_smb.sh

PS The script would need to be modified to support spaces in any server names, etc.

FreeBSD src via subversion

I always forget the exact command and URL to get a copy of the FreeBSD source using subversion. So here it is, for my convenience and yours!

To get Release 11.1 (includes bugfix and security patches; keeps you at 11.1):

cd /usr
svnlite co svn://svn.freebsd.org/base/releng/11.1 src

To get Stable 11 (includes general updates; updates you to the latest 11.x):

cd /usr
svnlite co svn://svn.freebsd.org/base/stable/11 src

To get ports:

cd /usr
rm -r /usr/ports
svnlite co svn://svn.freebsd.org/ports/head ports

Older versions of FreeBSD might not have svnlite in base. In that case install svn and use that instead.