#! /bin/bash

# IPA-Replica install
#

# kernel cmdline check
read KCMDLINE < /proc/cmdline
grep -vq 'ipv6.disable=0' <<< $KCMDLINE && echo "В строке параметров ядра не найдено ipv6.disable=0" && exit 1
grep -vq 'selinux=0' <<< $KCMDLINE && echo "В строке параметров ядра не найдено selinux=0" && exit 1

DEFSCRIPT="/usr/sbin/ipa-install-defaults"
. shell-error

[[ $# -ne 1 ]] && fatal "Отсутствует файл параметров"
. $DEFSCRIPT
[[ ! -f $1 ]] && fatal "Не найден файл параметров $1"
. $1

# Directory check
[ ! -d "$CERTDIR" ] && fatal "Не найден каталог $CERTDIR"
[ -f "$CERTDIR/CA.key" ] &&  [ -f "$CERTDIR/CA.pem" ] || fatal "CA.key или CA.pem не найдены в $CERTDIR"

# Key/cert pair check and create
HNAME=${HOSTNAME%%.*}
if [[ ! -f "$CERTDIR/$HNAME.replica.p12" ]]; then
    echo "Не найден файл $HNAME.replica.p12, создание нового набора ключ-сертификат для хоста $HNAME" >>$LOGFILE 2>&1

    SUBJECT="/C=$COUNTRY/ST=$SERVER_PROV/L=$SERVER_CITY/O=$SERVER_O/CN=$SERVER_CN"

    openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout "$CERTDIR/replica.key" -subj "$SUBJECT" \
    -out "$CERTDIR/replica.csr" >>$LOGFILE 2>&1

cat > "$CERTDIR/v32.ext" << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = $HOSTNAME
EOF

    openssl x509 -req -in "$CERTDIR/replica.csr" -CA "/$CERTDIR/CA.pem" \
    -CAkey "$CERTDIR/CA.key" -CAcreateserial \
    -CAserial "$CERTDIR/ipa.srl" -out "$CERTDIR/replica.crt" -days $SERV_DAYS -sha256 \
    -extfile "$CERTDIR/v32.ext" -passin "file:$CERTDIR/pwdfile.txt"
    echo "" >>$LOGFILE

    openssl pkcs12 -export -out "$CERTDIR/$HNAME.replica.p12" -inkey "$CERTDIR/replica.key" \
    -in "$CERTDIR/replica.crt" -certfile "$CERTDIR/CA.pem" -passout "file:$CERTDIR/pwdfile.txt"
else
    echo "Будет использован существующий файл $HNAME.replica.p12" >>$LOGFILE 2>&1
fi

# /etc/resolv.conf check amd modify
# Get Master's IP from ipa-config and set it into resolv.conf
SSS="/etc/ipa/default.conf"
[[ ! -f "$SSS" ]] && fatal "Не найдены параметры IPA, видимо не был осуществлен ввод в домен"
IPA=$(cat $SSS | grep '^server =')
IPA=${IPA##* }
IP=$(host "$IPA")
IP=${IP##* }

# Start creation
export PWORD
ipa-replica-install --http-cert-file "$CERTDIR/$HNAME.replica.p12" --dirsrv-cert-file \
"$CERTDIR/$HNAME.replica.p12" --http-pin "$PWORD" --dirsrv-pin "$PWORD" --no-pkinit \
--skip-conncheck --setup-dns \
--auto-reverse --auto-forwarders
