#!/bin/bash
# Kleines Script welches potentielle Probleme nach einem Update behebt.
# (C) 2009,2011,2012,2014,2016 Stefan Schaefer -- invis-server.org
# Questions: stefan@invis-server.org
# V 1.2

# License: GPLv3
# 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/>. 

#Konfigurationsdaten
conffile="/etc/invis/invis.conf"

# Werte aus Konfigurationsdatendatei extrahieren
# $1 = Konfigurationsdatei, $2 = Parameter, $3 Wert (Feld)
getconfdata() {
    cat $1 |grep "$2" | cut -d ":" -f $3
}

# Konfigurationsparameter tauschen
changevalues() {
    # Arg1 = Pfad, Arg2 = Datei, Arg3 = sed String
    cat $1/$2|sed "s%$3%g" > $1/$2.new
    mv $1/$2.new $1/$2
}

# Testen, ob es sich um ein 64Bit-System handelt.
if [[ -d /usr/lib64 ]]; then
    libdir="/usr/lib64"
else
    libdir="/usr/lib"
fi

# Links fuer sssd anlegen, startet ansonsten nicht mit den Sernet-Samba Paketen
# Geaendert fuer neue sernet-Pakete
#libtevent=`find $libdir/samba/ -type f -name "libtevent.so*"`
#libtevent=`basename $libtevent`

cd $libdir
libtevent=`find $libdir/samba/ -type f -name "libtevent.so*"`
libtevent=`basename $libtevent`
if [[ ! -L samba/$libtevent ]]; then
    ln -s samba/$libtevent libtevent.so.0 2>/dev/null
fi

libndr=`find $libdir/samba/ -type f -name "libndr.so*"`
libndr=`basename $libndr`
if [[ ! -L samba/$libndr ]]; then
    ln -s samba/$libndr libndr.so.0 2>/dev/null
fi
#libndrnbt=`find $libdir/samba/ -type f -name "libndr-nbt.so*"`
#libndrnbt=`basename $libndrnbt`
#ln -s samba/$libndrnbt libndr-nbt.so.0 2>/dev/null

libtalloc=`find $libdir/samba/ -type f -name "libtalloc.so*"`
libtalloc=`basename $libtalloc`
if [[ ! -L samba/$libtalloc ]]; then
    ln -s samba/$libtalloc libtalloc.so.2 2>/dev/null
fi
libldb=`find $libdir/samba/ -type f -name "libldb.so*"`
libldb=`basename $libldb`
if [[ ! -L samba/$libldb ]]; then
    ln -s samba/$libldb libldb.so.1 2>/dev/null
fi

libkrb5pac=`find $libdir/samba/ -type f -name "libndr-krb5pac.so*"`
libkrb5pac=`basename $libkrb5pac`
ln -s samba/$libkrb5pac libndr-krb5pac.so.0 2>/dev/null

systemctl restart sssd.service

sleep 3

# Samba Updates verändern die Rechte an Verzeichnissen unter /var/lib/samba
profiledir="/srv/shares/profiles"
chown -R ."Domain Admins" /var/lib/samba/drivers
chmod go+rx /var/lib/samba/private

chown -R ."Domain Users" $profiledir
chmod 1777 $profiledir

if [[ -f /sbin/mount.cifs ]]; then
    chmod u+s /sbin/mount.cifs
fi

#Anpassen der Besitzrechte der Freigaben
chown -R root:"Domain Users" /srv/shares/aktuell
chown -R root:"Archiv" /srv/shares/archiv
chown -R root:"Domain Users" /srv/shares/gruppen
chown -R root:"Domain Users" /srv/shares/projekte
chown root:"Domain Users" /srv/shares/profiles
chown -R root:"Domain Users" /srv/shares/media
chown -R root:"Domain Admins" /srv/shares/service
chown -R root:"Domain Guests" /srv/shares/transfer
chown -R root:"Verwaltung" /srv/shares/verwaltung
chown root:"Domain Users" /srv/shares/portal/uploads
chown root:"Domain Users" /srv/shares/portal/downloads

groupware=`getconfdata "$conffile" "usedGroupware" "2"`

if [[ $groupware == "zarafa" ]]; then
    #Anpassen der Besitzrechte des Zarafa Attachementverzeichnisses
    chown -R zarafa.zarafa /srv/zarafa
    #Anpassen der Zugriffsrechte der Zarafa-Konfiguration
    chmod go+r /etc/zarafa/*.cfg
fi

# Zugriffsrechte auf Private-Key Verzeichnis bereinigen
privatekeydir="/etc/invis/private"
chown -R .pkeys $privatekeydir
chmod g+rx $privatekeydir
chmod g+r $privatekeydir/mail-key.pem
chmod 0600 $privatekeydir/ldap-key.pem

systemctl restart named.service

# Wenn vorhanden Rechte auf nagios check_icmp bereinigen
plugindir="/usr/lib/nagios/plugins/"
if [[ -f $plugindir/check-icmp ]]; then
    chmod u+s $plugindir/check-icmp
fi

# Den Benutzer "wwwrun" in die Gruppe "pkeys" aufnehmen, wenn noch nicht geschehen.
if [[ ! `getent group |grep pkeys|grep wwwrun` ]]; then
    usermod -a -G pkeys wwwrun
fi
