#!/bin/sh

#Copyright (c) 2014, 2022 NetIQ Corporation, a Micro Focus company. All Rights Reserved.

##########################################################################
# eDirectory systemd templates creation script for Linux
##########################################################################

config_file=""
config_dir=""
bin_dir=""
sbin_dir=""
edir_dir=""
novell_dir=""
opt_dir=""
home_dir=""
var_dir=""
ret=0
if [ -f /etc/novell-release ]; then
	first_instance=1
fi

exitOnError()
{
	if [ $ret -ne 0 ]; then
		exit $ret
	fi
}

validateConfigurationFile()
{
	ret=0
	if [ "$1" != "" ]; then
		if [ -f "$1" ]; then
			config_file="$1"
			config_dir=`dirname "$config_file"`
		fi
	fi

	if [ "$config_file" = "" ]; then
		echo "ERROR: Invalid configuration file specified"
		ret=1
		exitOnError
	fi

	grep -i "n4u.server.vardir" "$config_file" > /dev/null 2>&1
	if [ $? -eq 0 ]; then
		var_dir=`grep -i "n4u.server.vardir" "$config_file" | awk -F"=" '{print $2}'`
	else
		echo "ERROR: No vardir in the configuration file"
		ret=1
		exitOnError
	fi

	exitOnError
}

isFirstInstance()
{
	if [ -f /etc/novell-release ]
	then
		first_instance=1
	else
		etc_file="/etc/opt/novell/eDirectory/conf/.edir/instances.$EUID"
		if [ -f "$etc_file" ]
		then
			if [ -s ${etc_file} ]
			then
				first_instance=0
			else
				first_instance=1
			fi
		else
			first_instance=1
		fi
	fi
}

createSystemdTemplateForNDSD()
{
        if [ -f /etc/novell-release ]; then
		isFirstInstance
		if [ $first_instance -eq 1 ]; then
			templateFileAttach="ndsd"
			templateFileName="$config_dir/$templateFileAttach.service"
		else
			templateFileAttach=`echo $config_file | sed "s|/|-|g"`
			templateFileName="$config_dir/ndsdtmpl$templateFileAttach@.service"
		fi
        else
                templateFileAttach=`echo $config_file | sed "s|/|-|g"`
                templateFileName="$config_dir/ndsdtmpl$templateFileAttach@.service"
        fi

	sed "s|ExecStart=.*|ExecStart=$sbin_dir/ndsdwrapper|" "$bin_dir"/../../../../etc/opt/novell/eDirectory/conf/ndsdtmpl.template > /tmp/ndsdtmpl.service
	sed "s|ExecStartPre=-/|ExecStartPre=-$home_dir/|" /tmp/ndsdtmpl.service > /tmp/ndsdtmpl.service1
	sed "s|ExecStartPost=-/|ExecStartPost=-$home_dir/|" /tmp/ndsdtmpl.service1 > /tmp/ndsdtmpl.service
	sed "s|ExecStopPost=-/|ExecStopPost=-$home_dir/|" /tmp/ndsdtmpl.service > /tmp/ndsdtmpl.service1
	sed "s|EnvironmentFile=-/|EnvironmentFile=-$home_dir/|" /tmp/ndsdtmpl.service1 > /tmp/ndsdtmpl.service
	#replcaing %I for all instances (ALM 314445) 
	sed "s|EnvironmentFile=%I|EnvironmentFile=-$config_dir/env|" /tmp/ndsdtmpl.service > /tmp/ndsdtmpl.service1
	sed "s|%I|$config_file.|" /tmp/ndsdtmpl.service1 > /tmp/ndsdtmpl.service

	sed "s|PIDFile.*|PIDFile=$var_dir/ndsd.pid|" /tmp/ndsdtmpl.service > "$templateFileName"
	rm /tmp/ndsdtmpl.service
	rm /tmp/ndsdtmpl.service1
}

createSystemdFactoryEnvFileForNDSD()
{
	sed "s|NDS_CONF.*|NDS_CONF=\"$config_file\"|" "$bin_dir"/../../../../etc/opt/novell/eDirectory/conf/env.template > /tmp/env.temp
	if [ -f /etc/novell-release ]
	then
		sed -i "/LD_LIBRARY_PATH/d" /tmp/env.temp
		echo "LD_LIBRARY_PATH=NDSHOME/opt/novell/eDirectory/eDir-exclusive/lib64:NDSHOME/opt/novell/eDirectory/lib64:NDSHOME/opt/novell/eDirectory/lib64/nds-modules:NDSHOME/opt/novell/eDirectory/lib64/apr:NDSHOME/opt/novell/lib64:/opt/novell/lib64:/opt/novell/xad/lib64/nds-modules:/opt/novell/xad/lib64:\$LD_LIBRARY_PATH" >> /tmp/env.temp
	fi
	sed "s|NDSHOME|$home_dir|g" /tmp/env.temp > "$config_dir/env"
	rm /tmp/env.temp
}

backupEnvFile()
{
	if [ -f "$config_dir/env" ]
	then
		env_bkp=`gettext nds "Current env file will be backed-up in format env.current_date, any customizations done to env file need to be copied back to new env file from backed-up file."`
		echo $env_bkp
		cp "$config_dir/env" "$config_dir/env.`date +"%Y%m%d%H%M"`"
	fi	
}

main()
{
	ret=0
	bin_dir=`dirname $0`
	#Below `cd` is done to handle relative path scenarios and get the absolute path of the bin_dir
	cd $bin_dir
	bin_dir=`pwd`
	cd -
	edir_dir=`dirname $bin_dir`
	novell_dir=`dirname $edir_dir`
	opt_dir=`dirname $novell_dir`
	home_dir=`dirname $opt_dir`
	sbin_dir="$edir_dir/sbin"
	validateConfigurationFile "$@"
	backupEnvFile
	createSystemdTemplateForNDSD
	createSystemdFactoryEnvFileForNDSD
	exitOnError
}

main "$@"
