#!/bin/bash
### MODUL-NR. 006 ###
# (c) August 2008 Stefan Schäfer / FSP Computer & Netzwerke
# (c) 2009-2019 Stefan Schäfer / invis-server.org / stefan@invis-server.org
# (c) 2013,2014 Dimitri Asarowski / invis-server.org / dimitri@invis-server.org
# (c) 2013-2017 Ingo Göppert / invis-server.org / ingo@invis-server.org

# License: GPLv3
# Questions: info@invis-server.org

# Hier Kurzbeschreibung des Moduls einfügen

# Insert short description of this module here

# Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 
# GNU General Public License, wie von der Free Software Foundation veröffentlicht,
# weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder
# (nach Ihrer Option) jeder späteren Version.

# Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen
# von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite 
# Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 
# Details finden Sie in der GNU General Public License.

# Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem 
# Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. 

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# include functions
source $SINEINCLUDEDIR/functions

modulename=`basename $0`

clear
windowtitle="Join Domain"
pgsubtitle="Filialserver der Domäne der Zentrale hinzufügen"

# Domaenennamen aus Konfiguration lesen und in unterschiedliche Schreibweisen uebersetzen
workgroup=`getconfdata "Workgroup" "2"`
domain=`getconfdata "Domain" "2"`

dnsdomain=${domain,,}
krbrealm=${domain^^}

# get invis-Server hostname
invisserver=`dig SRV _ldap._tcp.$dnsdomain +short |cut -d " " -f4`
if [[ -z $invisserver ]]; then
    exit 5
fi
invisip=`dig $invisserver +short`

# hosts anpassen
#echo $invisserver
echo -e "$invisip\t$invisserver" >> /etc/hosts

# Punkte zaehlen
#dotcount=`echo -n "$dnsdomain" | sed -e 's/[^.]//g' | wc -m`

# create NetBIOS-Domain and kerberos realm
#if (( $dotcount == 1 )); then
#    netbiosdomain=`echo $krbrealm | cut -d "." -f1`
#else
#    netbiosdomain=`echo $krbrealm | cut -d "." -f1-$dotcount`
#fi

# Dateien sichern und neue aus Templatedir kopieren
mv /etc/samba/smb.conf /etc/samba/smb.conf.setupsafe 2>&1| tee -a $LOGFILE | pgbox
if [[ -f /etc/sssd/sssd.conf ]]; then
    old /etc/sssd/sssd.conf 2>&1| tee -a $LOGFILE | pgbox
fi
old /etc/krb5.conf 2>&1| tee -a $LOGFILE | pgbox
old /etc/nsswitch.conf 2>&1| tee -a $LOGFILE | pgbox

# Neue Konfigurationsdateien kopieren und anpassen
cp $TEMPLATEDIR/joindomain/krb5.conf /etc 2>&1| tee -a $LOGFILE | pgbox
cp $TEMPLATEDIR/joindomain/nsswitch.conf /etc 2>&1| tee -a $LOGFILE | pgbox
cp $TEMPLATEDIR/joindomain/sssd.conf /etc/sssd 2>&1| tee -a $LOGFILE | pgbox
cp $TEMPLATEDIR/joindomain/smb.conf /etc/samba 2>&1| tee -a $LOGFILE | pgbox

# Samba
path="/etc/samba"
modfile="smb.conf"

changestrings="INVIS-NET.LOC%$krbrealm"
changevalues $path $modfile "$changestrings"

changestrings="INVIS-NET%$workgroup"
changevalues $path $modfile "$changestrings"

echo $invisserver
echo $krbrealm

#sleep 5

# Kerberos
path="/etc"
modfile="krb5.conf"

changestrings="zentrale.invis-net.loc%$invisserver"
changevalues $path $modfile "$changestrings"

changestrings="INVIS-NET.LOC%$krbrealm"
changevalues $path $modfile "$changestrings"

# prepare sssd
path="/etc/sssd/"
modfile="sssd.conf"

changestrings="invis-net.loc%$dnsdomain"
changevalues $path $modfile "$changestrings"

chown root.root "$path/$modfile"
chmod 0600 "$path/$modfile"

# prepare domain join
# Bugfix, das folgende Verzeichnis fehlt
if [[ ! -d "/run/user/0/krb5cc" ]]; then
    mkdir -p "/run/user/0/krb5cc" 2>&1| tee -a $LOGFILE | pgbox
fi

# inform about next steps question
echo -e "Sie benötigen jetzt das Passwort des Domänenadministrators.\n" 2>&1| tee -a $LOGFILE | pgbox

# test kerberos and andmin password
clear
kinit Administrator@$krbrealm

#sleep 5

if [[ $? != 0 ]]; then
    echo "Sie haben ein falsches Passwort eingegeben, das Script wird abgebrochen." 2>&1| tee -a $LOGFILE | pgbox
    exit 5
fi

# join domain
net join -k

# remove old sss-cache
delssscache 2>&1| tee -a $LOGFILE | pgbox

# SSSD in Autostart integrieren.
systemctl enable sssd.service 2>&1| tee -a $LOGFILE | pgbox

# PAM Konfigurieren -> SSSD Modul aktivieren
pam-config --add --sss 2>&1| tee -a $LOGFILE | pgbox

cat $TEMPLATEDIR/joindomain/smb-server-extension >> /etc/samba/smb.conf
path="/etc/samba"
modfile="smb.conf"

changestrings="LOCALDOMAIN%$workgroup"
changevalues $path $modfile "$changestrings"

changestrings="PDCIP%$invisip"
changevalues $path $modfile "$changestrings"

sleep 10