Jan Vcelak a431c66
#!/bin/sh
Jan Vcelak a431c66
# Author: Jan Vcelak <jvcelak@redhat.com>
Jan Vcelak a431c66
Jan Vcelak 934ba14
. /usr/libexec/openldap/functions
Jan Vcelak a431c66
Jan Vcelak a431c66
function help()
Jan Vcelak a431c66
{
Jan Vcelak a431c66
	error "usage: %s [-f config-file] [-F config-dir]\n" "`basename $0`"
Jan Vcelak a431c66
	exit 2
Jan Vcelak a431c66
}
Jan Vcelak a431c66
Jan Vcelak a431c66
load_sysconfig
Jan Vcelak a431c66
Jan Vcelak a431c66
while getopts :f:F: opt; do
Jan Vcelak a431c66
	case "$opt" in
Jan Vcelak a431c66
	f)
Jan Vcelak a431c66
		SLAPD_CONFIG_FILE="$OPTARG"
Jan Vcelak a431c66
		;;
Jan Vcelak a431c66
	F)
Jan Vcelak a431c66
		SLAPD_CONFIG_DIR="$OPTARG"
Jan Vcelak a431c66
		;;
Jan Vcelak a431c66
	*)
Jan Vcelak a431c66
		help
Jan Vcelak a431c66
		;;
Jan Vcelak a431c66
	esac
Jan Vcelak a431c66
done
Jan Vcelak a431c66
shift $((OPTIND-1))
Jan Vcelak a431c66
[ -n "$1" ] && help
Jan Vcelak a431c66
Jan Vcelak a431c66
# check source, target
Jan Vcelak a431c66
Jan Vcelak a431c66
if [ ! -f "$SLAPD_CONFIG_FILE" ]; then
Jan Vcelak a431c66
	error "Source configuration file '%s' not found." "$SLAPD_CONFIG_FILE"
Jan Vcelak a431c66
	exit 1
Jan Vcelak a431c66
fi
Jan Vcelak a431c66
Jan Vcelak 8bd3712
if grep -iq '^dn: cn=config$' "$SLAPD_CONFIG_FILE"; then
Jan Vcelak 8bd3712
	SLAPD_CONFIG_FILE_FORMAT=ldif
Jan Vcelak 8bd3712
else
Jan Vcelak 8bd3712
	SLAPD_CONFIG_FILE_FORMAT=conf
Jan Vcelak 8bd3712
fi
Jan Vcelak 8bd3712
Jan Vcelak a431c66
if [ -d "$SLAPD_CONFIG_DIR" ]; then
Jan Vcelak a431c66
	if [ `find "$SLAPD_CONFIG_DIR" -maxdepth 0 -empty | wc -l` -eq 0 ]; then
Jan Vcelak a431c66
		error "Target configuration directory '%s' is not empty." "$SLAPD_CONFIG_DIR"
Jan Vcelak a431c66
		exit 1
Jan Vcelak a431c66
	fi
Jan Vcelak a431c66
fi
Jan Vcelak a431c66
Jan Vcelak a431c66
# perform the conversion
Jan Vcelak a431c66
Jan Vcelak 8dc41a3
tmp_convert=`mktemp --tmpdir=/var/run/openldap`
Jan Vcelak a431c66
Jan Vcelak a431c66
if [ `id -u` -eq 0 ]; then
Jan Vcelak a431c66
	install -d --owner $SLAPD_USER --group `id -g $SLAPD_USER` --mode 0700 "$SLAPD_CONFIG_DIR" &>>$tmp_convert
Jan Vcelak 8bd3712
	if [ $SLAPD_CONFIG_FILE_FORMAT = ldif ]; then
Jan Vcelak 8bd3712
		run_as_ldap "/usr/sbin/slapadd -F \"$SLAPD_CONFIG_DIR\" -n 0 -l \"$SLAPD_CONFIG_FILE\"" &>>$tmp_convert
Jan Vcelak 8bd3712
	else
Jan Vcelak 8bd3712
		run_as_ldap "/usr/sbin/slaptest -f \"$SLAPD_CONFIG_FILE\" -F \"$SLAPD_CONFIG_DIR\"" &>>$tmp_convert
Jan Vcelak 8bd3712
	fi
Jan Vcelak a431c66
	retcode=$?
Jan Vcelak a431c66
else
Jan Vcelak a431c66
	error "You are not root! Permission will not be set."
Jan Vcelak a431c66
	install -d --mode 0700 "$SLAPD_CONFIG_DIR" &>>$tmp_convert
Jan Vcelak 8bd3712
	if [ $SLAPD_CONFIG_FILE_FORMAT = ldif ]; then
Jan Vcelak 8bd3712
		/usr/sbin/slapadd -F "$SLAPD_CONFIG_DIR" -n 0 -l "$SLAPD_CONFIG_FILE" &>>$tmp_convert
Jan Vcelak 8bd3712
	else
Jan Vcelak 8bd3712
		/usr/sbin/slaptest -f "$SLAPD_CONFIG_FILE" -F "$SLAPD_CONFIG_DIR" &>>$tmp_convert
Jan Vcelak 8bd3712
	fi
Jan Vcelak a431c66
	retcode=$?
Jan Vcelak a431c66
fi
Jan Vcelak a431c66
Jan Vcelak a431c66
if [ $retcode -ne 0 ]; then
Jan Vcelak a431c66
	error "Configuration conversion failed:"
Jan Vcelak a431c66
	cat $tmp_convert >&2
Jan Vcelak a431c66
fi
Jan Vcelak a431c66
Jan Vcelak a431c66
rm $tmp_convert
Jan Vcelak a431c66
exit $retcode