#!/bin/sh -e

. alterator-openldap-functions

# Read default configuration
set_ldap_config

[ -n "$DN_CONF" ] || fatal "DN_CONF not set"

args="$1"

# Parse arguments
case "$args" in
    --version)
	get_ldap_version
	exit
	;;
    -h|--help)
	cat <<EOF
Usage:

    $0

Arguments:

    -h, --help  show this help
    --version   show version

EOF
	exit
	;;
esac

TMPFILE="$(mktemp -t "ldap-db-init.XXXXXXXXXX")" || fatal "can't create tempfile"

set_cleanup_handler cleanup_function

cleanup_function()
{
    [ -z "$TMPFILE" ] || rm -f -- "$TMPFILE"
}

require_backend()
{
    local module="$1"

    case "$module" in
    bdb|hdb)
	local r1="moduleload\s+back_${module}\.la"
	local r2="moduleload	back_${module}.la"

	sed -i -r "s,^#($r1)\s*$,\1," "$SLAPD_CONF" ||:
	grep -qE "^$r1\s*$" "$SLAPD_CONF" || echo "$r2" >> "$SLAPD_CONF"
	cp "/var/lib/ldap/bases/DB_CONFIG" "$db_dir/"
	chmod 640 "$db_dir/DB_CONFIG"
	;;
    esac
}


db_dir="$(read_config "$DN_CONF" directory)"

cat >"$TMPFILE" <<EOF
dn: $base
objectclass: organization
objectclass: dcObject
$(printf %s\\n "$base" | sed -r 's/^dc=([^[:blank:],]*).*$/dc: \1/')
$(printf %s\\n "$base" | sed -r 's/^.*dc=([^[:blank:],]*)/o: \1/')

dn: $rootdn
objectclass: organizationalRole
$(printf %s\\n "$rootdn" | sed -r 's/^cn=([^[:blank:],]*).*$/cn: \1/')

dn: ou=People,$base
objectClass: organizationalUnit
ou: People

dn: ou=Group,$base
objectClass: organizationalUnit
ou: Group

dn: ou=kdcroot,$base
objectClass: organizationalUnit
ou: kdcroot
EOF

#adding changed ldif
mkdir -p "$db_dir"
chmod 750 "$db_dir"

# copy default berkeley db config into $db_dir
# and check backend module before initial slapadd
require_backend "$(read_config "$DN_CONF" database)"

# initial slapadd
slapadd -b "$base" -l "$TMPFILE"
chown -R ldap:ldap "$db_dir"
chown root:ldap "$db_dir/DB_CONFIG" &>/dev/null ||:

