#!/bin/sh

set -u
umask 0077

if [ x"`echo -n`" = x"-n" ]; then
    ## SysV?
    echo_n=''
    echo_c='\c'
else
    ## BSD, Linux and so on
    echo_n='-n'
    echo_c=''
fi

echo_n()
{
    echo $echo_n ${1:+"$@""$echo_c"}
}

uid2rid()
{
    expr "$1" '*' 2 + $rid_base
}

gid2rid()
{
    expr "$1" '*' 2 + $rid_base + 1
}

tmp_dir="/tmp/`basename -- "$0"`.$$.tmp"
tmp_file="$tmp_dir/tmp"
rid_base="1000"

config_file="$1"; shift

trap 'rm -rf -- "$tmp_dir"' 0 HUP INT QUIT TERM PIPE
mkdir -m 0700 "$tmp_dir" || exit 1

set -e
. "$config_file"
set +e

LDAP_MASTER_NAME="`expr x"$LDAP_MASTER_URI" : x"[^/]*//\([^/:]*\)"`"
LDAP_MASTER_PORT="`expr x"$LDAP_MASTER_URI" : x"[^/]*//[^/:]*:\([0-9]*\)"`"
: ${LDAP_MASTER_PORT:="389"}
LDAP_SLAVE_NAME="`expr x"$LDAP_SLAVE_URI" : x"[^/]*//\([^/:]*\)"`"
LDAP_SLAVE_PORT="`expr x"$LDAP_SLAVE_URI" : x"[^/]*//[^/:]*:\([0-9]*\)"`"
: ${LDAP_SLAVE_PORT:="389"}

LDAP_ADMIN_DN="cn=$LDAP_ADMIN_NAME,$LDAP_DIT_SUFFIX"
echo_n "$LDAP_ADMIN_PASSWORD" >"$tmp_file"
LDAP_ADMIN_PASSWORD_HASH="`slappasswd -T "$tmp_file"`"
LDAP_REPLICA_DN="cn=$LDAP_REPLICA_NAME,$LDAP_DIT_SUFFIX"
echo_n "$LDAP_REPLICA_PASSWORD" >"$tmp_file"
LDAP_REPLICA_PASSWORD_HASH="`slappasswd -T "$tmp_file"`"

LDAP_DIT_SUFFIX_DC="`echo "$LDAP_DIT_SUFFIX" |sed 's/,.*$//;s/^.*=//'`"

SAMBA_ADMIN_DN="uid=$SAMBA_ADMIN_NAME,ou=$LDAP_DIT_USER_OU,$LDAP_DIT_SUFFIX"
: ${SAMBA_ADMIN_RID:="`uid2rid "$SAMBA_ADMIN_UID"`"}
: ${SAMBA_GUEST_RID:="`uid2rid "$SAMBA_GUEST_UID"`"}

cp /dev/null "$tmp_file"

{
    sed -n 's/^\([A-Z_]*\)=.*/\1/p' "$config_file"
    echo LDAP_MASTER_NAME
    echo LDAP_MASTER_PORT
    echo LDAP_SLAVE_NAME
    echo LDAP_SLAVE_PORT
    echo LDAP_ADMIN_DN
    echo LDAP_ADMIN_PASSWORD_HASH
    echo LDAP_REPLICA_DN
    echo LDAP_REPLICA_PASSWORD_HASH
    echo LDAP_DIT_SUFFIX_NODE
    echo SAMBA_ADMIN_DN
    echo SAMBA_ADMIN_RID
    echo SAMBA_GUEST_RID
} \
|while read var; do
    eval 'val="$'$var'"'
    echo "s|##$var##|$val|g;" >>"$tmp_file"
done

mkdir -p dest
for tmpl in "$@"; do
    sed -f "$tmp_file" \
        <"$tmpl" \
        >"dest/`basename "$tmpl"`"
done

exit 0

