#!/bin/sh

##########################################
# Create the nagios user and group
##########################################

. ./init.sh

dscl_set_key_if_not_set() {
	path=$1
	key=$2
	value=$3

	( dscl . -read $path $key 2>&1) | grep "No such key: " > /dev/null 2> /dev/null
	if [ $? -eq 0 ] ; then
		dscl . -append $path $key $value
	fi
}

case $os in
	AIX)
		# Create `nagios' group on the system
		lsgroup $group > /dev/null 2> /dev/null
		if [ $? -eq 2 ] ; then
			mkgroup $group
			if [ $? -ne 0 ] ; then
				echo Unexpected error adding group "$group". Aborting install process.
				exit 1
			fi
		fi

		# Create `nagios' user on the system
		lsuser $user > /dev/null 2> /dev/null
		if [ $? -eq 2 ] ; then
			useradd -d $userhome -c "$user" -g $group $user
			if [ $? -ne 0 ] ; then
				echo Unexpected error adding user "$user". Aborting install process.
				exit 1
			fi
		fi
		;;
	Darwin)
		if [[ "$(/usr/bin/whoami)" != "root" ]]; then 
			printf '\nMust be run as root!\n\n'
			exit 1
		fi

		# Default blank password
		passwd1=""

		# Determine the GID to use if the group does not exist
		newgid=`dscl . -readall /Groups PrimaryGroupID | grep PrimaryGroupID | awk '{print $2}' | sort -n | tail -n 1`
		newgid=$[newgid+1]

		# Determine whether the group exists
		checkgid $group > /dev/null 2> /dev/null
		if [ $? -eq 255 ] ; then
			# If not, create the new group
			dscl . -create Groups/$group
		fi

		# Set the various group attributes
		dscl_set_key_if_not_set "/Groups/$group" PrimaryGroupID $newgid
		dscl_set_key_if_not_set "/Groups/$group", Password "\"*\""
		dscl_set_key_if_not_set "/Groups/$group", Comment "Group created by $0"
		dscl_set_key_if_not_set "/Groups/$group", RealName "Nagios Group"

		# Get the group's GID (it may not have been set above)
		gid=`dscl . -read /Groups/$group PrimaryGroupID | awk '{print $2}'`

		# Determine the UID to use if the user does not exist
		newuid=`dscl . -readall /Users UniqueID | grep UniqueID | awk '{print $2}' | sort -n | tail -n 1`
		newuid=$[newuid+1]

		# Determine whether the user exists
		id $user > /dev/null 2> /dev/null
		if [ $? -eq 1 ] ; then
			# if not, create the user
			dscl . -create Users/$user
		fi

		# Set the various user attributes
		dscl_set_key_if_not_set "/Users/$user" UniqueID $newuid
		dscl_set_key_if_not_set "/Users/$user" PrimaryGroupID $gid
		dscl_set_key_if_not_set "/Users/$user" RealName "Nagios User"
		dscl_set_key_if_not_set "/Users/$user" NFSHomeDirectory "/Users/$user"
		dscl_set_key_if_not_set "/Users/$user" UserShell /bin/bash   
		# dscl_set_key_if_not_set "/Users/$user" AuthenticationHint "" 
		# AuthenticationHint formerly known as hint (version??)
		# dscl_set_key_if_not_set "/Users/$user" comment "User account created by $0"
		dscl_set_key_if_not_set "/Users/$user" Picture "/Library/User Pictures/Animals/Butterfly.tif"
		# dscl_set_key_if_not_set "/Users/$user" sharedDir Public
		dscl . -passwd "/Users/$user" "$passwd1"

		# add some other properties that are usually set (Mac OS X 10.4)
		# dscl_set_key_if_not_set "/Users/$user" _shadow_passwd ""
		# dscl_set_key_if_not_set "/Users/$user" _writers_hint "$user"
		# dscl_set_key_if_not_set "/Users/$user" _writers_real_name "$user"

		dscl_set_key_if_not_set "/Groups/$group" GroupMembership "$user"
		dscl . -merge /Groups/staff GroupMembership "$user"

		# Create the new user's home directory
		if [ ! -d /Users/$user ] ; then
			/usr/sbin/createhomedir -c -u "$user" > /dev/null 2> /dev/null
		fi
		;;
	Linux)
		getent group $group > /dev/null 2> /dev/null
		result=$?
		if [ $result -eq 2 ] ; then
			echo "Group $group does not exist. Creating..."
			if [ $gid -ne -1 ] ; then
				groupadd -g $gid $group
			else
				groupadd $group
			fi
		else
			echo "$group group already exists."
		fi

		getent passwd $user > /dev/null 2> /dev/null
		result=$?
		if [ $result -eq 2 ] ; then
			echo "User $user does not exist. Creating..."
			if [ $uid -ne -1 ] ; then
				useradd -u $uid -g $group $user
			else
				useradd -g $group $user
			fi
		elif [ $result -eq 0 ] ; then
			echo "$user user already exists."
		else
			echo "An error occurred determining the existence of the user $user. Terminating."
			exit 1;
		fi
		;;
	SunOS)
		getent group $group > /dev/null 2> /dev/null
		result=$?
		if [ $result -eq 2 ] ; then
			echo "Group $group does not exist. Creating..."
			if [ $gid -ne -1 ] ; then
				groupadd -g $gid $group
			else
				groupadd $group
			fi
		elif [ $result -ne 0 ] ; then
			echo "An error occurred determining the existence of the groug $group. Terminating."
			exit 1;
		fi

		getent passwd $user > /dev/null 2> /dev/null
		result=$?
		if [ $result -eq 2 ] ; then
			echo "User $user does not exist. Creating..."
			if [ $uid -ne -1 ] ; then
				useradd -u $uid -g $group -d $userhome $user
				usermod -K defaultpriv=basic,proc_owner $user
			else
				useradd -g $group -d $userhome $user
				usermod -K defaultpriv=basic,proc_owner $user
			fi
		elif [ $result -eq 0 ] ; then
			grep $user /etc/user_attr | grep proc_owner > /dev/null 2> /dev/null
			result2=$?
			if [ $result2 -eq 1 ] ; then
				usermod -K defaultpriv=basic,proc_owner $user
			fi
		else
			echo "An error occurred determining the existence of the user $user. Terminating."
			exit 1;
		fi
		;;
esac
