#!/bin/bash

if [ "$EUID" -ne 0 ]
  then echo "Запускать с учетной записью root!"
  exit 255
fi

. /etc/sudo-samba-schema/setup-vars

function showerror {
msg=$1
echo "${msg}"
exit 255
}


readarray -t DC 2>/dev/null  <<< "$(net ads info | grep -P '^(Realm|Bind Path)' | awk -F ': ' '{print $2}')" 
ou=$(samba-tool ou list | grep -io '^ou=Sudoers$')


tempfile=`(tempfile) 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 $SIG_NONE $SIG_HUP $SIG_INT $SIG_QUIT $SIG_TERM

dialog --backtitle "Создание правила sudo" --title "sudoRole" \
--form "\nНужно указать название создаваемого правила и его аттрибуты.\n
Совет: не увлекаться с фантазированием в именовании.\n\n
Хорошие примеры: apt_rule, sudoUsers, ...\n
Плохие примеры : правило123, 'для Админа', ...\n" 25 65 16 \
"OU         :" 1 1 "${ou},${DC[1]}" 1 25 30 30 \
"Имя правила:" 2 1 "123" 2 25 30 30 \
"sudoHost   :" 3 1 "ALL" 3 25 30 30 \
"sudoCommand:" 4 1 "/usr/bin/anything" 4 25 30 30 \
"sudoUser   :" 5 1 "username" 5 25 30 30 \
2>$tempfile

retval=$?


case "${retval:-0}" in
  $DIALOG_OK)
	readarray -t RULE 2>/dev/null  <<< "$(cat $tempfile)"
	;;
#echo "Result: `cat "$tempfile"`";;
  $DIALOG_CANCEL)
    echo "Отмена."
    exit 
    ;;
  $DIALOG_ESC)
    echo "Отмена."
    exit
    ;;
esac

cat <<SLDIF > /tmp/sldif.ldif 
dn: CN=${RULE[1]},${ou},${DC[1]}
changetype: add
objectClass: top
objectClass: sudoRole
cn: ${RULE[1]}
name: ${RULE[1]}
sudoUser: ${RULE[4]}
sudoHost: ${RULE[2]}
sudoCommand: ${RULE[3]}
SLDIF

# apply
/usr/bin/ldbadd -H /var/lib/samba/private/sam.ldb /tmp/sldif.ldif
if [ $? -ne 0 ]; then
        showerror 'Ошибка изменения схемы (add)'
fi

# set permissions
echo -e "dn: CN=${RULE[1]},${ou},${DC[1]}\nchangetype: modify\nreplace: nTSecurityDescriptor" > /tmp/ntSec.ldif 

/usr/bin/ldbsearch  -H /var/lib/samba/private/sam.ldb -s base -b "CN=${RULE[1]},${ou},${DC[1]}" 'nTSecurityDescriptor' | sed -n '/^#/d;s/O:DAG:DAD:AI/O:DAG:DAD:AI\(A\;\;RPLCRC\;\;\;AU\)\(A\;\;RPWPCRCCDCLCLORCWOWDSDDTSW\;\;\;SY\)/;3,$p' | sed ':a;N;$!ba;s/\n\s//g' | sed -e 's/.\{78\}/&\n /g' >> /tmp/ntSec.ldif

/usr/bin/ldbmodify -v -H /var/lib/samba/private/sam.ldb /tmp/ntSec.ldif
if [ $? -ne 0 ]; then
	showerror 'Ошибка изменения схемы (modify, ntsec)'
else
	echo "Операция прошла успешно"
fi

