#!/bin/bash

# need perl-ldap perl-Convert-ASN1 to import samba passwords

echo "Before continuing, please check that your local LDAP server is running"

PASSWD_MIN=${PASSWD_MIN=500}
PASSWD_MAX=${PASSWD_MAX=65000}
GROUP_MIN=${GROUP_MIN=500}
GROUP_MAX=${GROUP_MAX=65000}

LDAP_MIGRATION=/usr/share/openldap/migration

BASE_CONFIRMED=0
while [ $BASE_CONFIRMED -eq 0 ]
do
read -p "Enter your LDAP BaseDN [$LDAP_BASEDN] :" ANSWER
[ -n "$ANSWER" ] && export LDAP_BASEDN="$ANSWER"
read -p "Enter your default mail domain [$LDAP_DEFAULT_MAIL_DOMAIN]: " ANSWER
[ -n "$ANSWER" ] && export LDAP_DEFAULT_MAIL_DOMAIN="$ANSWER"
read -p "Enter your default mail host [$LDAP_DEFAULT_MAIL_HOST]: " ANSWER
[ -n "$ANSWER" ] && export LDAP_DEFAULT_MAIL_HOST="$ANSWER"
read -p "Enter your LDAP Root DN: [$LDAP_ROOTDN]: " ANSWER
[ -n "$ANSWER" ] && export LDAP_ROOTDN="$ANSWER"
read -p "Did you enter the correct values? [(y)/n] :" ANSWER
[ "$ANSWER" = "n" ] || BASE_CONFIRMED=1
done

export LDAP_EXTENDED_SCHEMA=1

#export LDAP_BASEDN="dc=home,dc=control,dc=co,dc=za"
#export LDAP_DEFAULT_MAIL_DOMAIN="control.co.za"
#export LDAP_DEFAULT_MAIL_HOST="mail.home.control.co.za"
#export LDAP_ROOTDN="cn=root,dc=home,dc=control,dc=co,dc=za"


read -s -p "Enter LDAP Root DN Password: " LDAP_BINDPW

LDAP_ADD="ldapadd -x -H ldap://localhost -D $LDAP_ROOTDN -w $LDAP_BINDPW -c"


# These scripts need to be run from inside LDAP_MIGRATION to "use" the
# config file
pushd $LDAP_MIGRATION >&-
echo -e "\n\nImporting base entries:\n"
$LDAP_MIGRATION/migrate_base.pl | $LDAP_ADD

echo -e "\nEntering user import section\n"
PASSWD_CONFIRMED=0
while [ $PASSWD_CONFIRMED -eq 0 ];do
read -p "Enter the lowest UID you would like to import [$PASSWD_MIN]: " PASSWD_MIN1
read -p "Enter the higehst UID you would like to import [$PASSWD_MAX]:" PASSWD_MAX1
[ -n "$PASSWD_MIN1" ] && PASSWD_MIN=$PASSWD_MIN1
[ -n "$PASSWD_MAX1" ] && PASSWD_MAX=$PASSWD_MAX1
echo "The range you entered was $PASSWD_MIN - $PASSWD_MAX"
read -p "Is this correct [(y)/n]: " ANSWER
[ "$ANSWER" = "n" ] || PASSWD_CONFIRMED=1
done

awk -F: "/\\$/ {next}; { if (\$3>=$PASSWD_MIN && \$3<$PASSWD_MAX) print \$0}" /etc/passwd > /etc/passwd.ldap
#awk -F: '/\$/ {next}; { if ($3>=500) print $0}' /etc/passwd > /etc/passwd.ldap
echo "Importing users:"
ETC_SHADOW=/etc/shadow $LDAP_MIGRATION/migrate_passwd.pl /etc/passwd.ldap |$LDAP_ADD
rm -f /etc/passwd.ldap

echo -e "\nEntering group import section\n"
GROUP_CONFIRMED=0
while [ $GROUP_CONFIRMED -eq 0 ];do
read -p "Enter the lowest GID you would like to import [$GROUP_MIN]: " GROUP_MIN1
read -p "Enter the higehst GID you would like to import [$GROUP_MAX]:" GROUP_MAX1
[ -n "$GROUP_MIN1" ] && GROUP_MIN=$GROUP_MIN1
[ -n "$GROUP_MAX1" ] && GROUP_MAX=$GROUP_MAX1
echo "The range you entered was $GROUP_MIN - $GROUP_MAX"
read -p "Is this correct [(y)/n]: " ANSWER
[ "$ANSWER" = "n" ] || GROUP_CONFIRMED=1
done

awk -F: "/\\$/ {next}; { if (\$3>=$GROUP_MIN && \$3<$GROUP_MAX) print \$0}" /etc/group > /etc/group.ldap
echo "Importing groups:"
$LDAP_MIGRATION/migrate_group.pl /etc/group.ldap |$LDAP_ADD
rm -f /etc/group.ldap
popd >&-

if [ -e /etc/samba/smbpasswd ]
then
	echo "Importing existing samba users requires preparation, by editing"
	echo "/usr/share/samba/scripts/import_smbpasswd.pl"
	read -p "Do you want to try and import Samba users [(y)/n]: " IMPORT_SAMBA
	[ "$IMPORT_SAMBA" = "n" ] ||  /usr/share/samba/scripts/import_smbpasswd.pl < /etc/samba/smbpasswd
fi

