#!/usr/bin/bash

if [ -f /etc/sysconfig/ng-kickstart ]; then
source /etc/sysconfig/ng-kickstart
(
	# Wait for lock on /var/lock/.ng-makedb.lck (fd 200) for 5 seconds
	flock -x -w 5 200 || exit 1
	if ! mountpoint $glustermount >/dev/null 2>&1; then
		echo "'$glustermount' is not mounted." >&2
		exit 1
	fi

	augtool --noload --noautoload --autosave <<-EOD
		set /augeas/load/nsswitch/lens "nsswitch.lns"
		set /augeas/load/nsswitch/incl "/etc/nsswitch.conf"
		load

		set etc/nsswitch.conf/database[. = 'shadow']/service[1] files
		set etc/nsswitch.conf/database[. = 'shadow']/service[2] db
		set etc/nsswitch.conf/database[. = 'shadow']/service[3] sss
		set etc/nsswitch.conf/database[. = 'passwd']/service[1] files
		set etc/nsswitch.conf/database[. = 'passwd']/service[2] db
		set etc/nsswitch.conf/database[. = 'passwd']/service[3] sss
		set etc/nsswitch.conf/database[. = 'group']/service[1] files
		set etc/nsswitch.conf/database[. = 'group']/service[2] db
		set etc/nsswitch.conf/database[. = 'group']/service[3] sss
	EOD

	if [ ! -e $glustermount/db/Makefile ]; then
		[ -d $glustermount/db ] || mkdir -p $glustermount/db
		# Install the Makefile, but amend it to merge instead of clobber,
		# we use a heredoc to avoid backslash hell in '$MAKEDB'
		read -r -d '' MAKEDB <<-'EOD'
			# Merge, don't clobber when (re)building - inserted by ng-makedb-init
			MAKEDB = /bin/bash -c 'sort -u -k1,1 "$$3" <(makedb --undo "$$2" 2>/dev/null) | makedb "$$@" ' --
		EOD
		env MAKEDB="${MAKEDB}" awk '{print}; /^MAKEDB\s*=/{print ENVIRON["MAKEDB"]};' \
			</var/db/Makefile >$glustermount/db/Makefile
		touch $glustermount/db/.vardb-on-gluster
	fi

	if [ ! -e /usr/lib/systemd/system/var-db.mount ]; then
		mkdir -p "/usr/lib/systemd/system"
		mount=${glustermount//\//-}
		cat <<-EOD > /usr/lib/systemd/system/var-db.mount
			[Unit]
			Description=VarDb
			After=network-online.target ng-waitfor-glusterd.service
			Requires=network-online.target ng-waitfor-glusterd.service
			Before=httpd.service
			Before=php-fpm-pool.service
			ConditionPathIsDirectory=$glustermount/db
			ConditionPathIsMountPoint=$glustermount

			[Mount]
			What=$glustermount/db
			Where=/var/db
			Options=bind

			[Install]
			WantedBy=multi-user.target
		EOD
		systemctl daemon-reload
		systemctl enable var-db.mount
	fi

	if [ -e /var/db/.vardb-on-gluster ]; then
		cd /var/db
		make 2>&1 >/dev/null /var/db/passwd.db || true
		make 2>&1 >/dev/null /var/db/shadow.db || true
		make 2>&1 >/dev/null /var/db/gshadow.db || true
		make 2>&1 >/dev/null /var/db/group.db || true

		systemctl enable ng-makedb.path
	fi

) 200>/var/lock/.ng-makedb.lck
fi
