#!/bin/bash
# Script zur Aktivierung/Deaktivierung von invis Portaleintraegen
# (C) 2009,2013 invis-server.org
# Author: Stefan Schäfer <stefan@invis-server.org>

# 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"
passfile="/etc/invis/invis-pws.conf"

# Funktionen
# 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
}
# Aufrufparameter
if [[ -n $1 && -n $2 && $2 =~ [TRUE,FALSE] ]]; then
    search=$1
    active=$2
elif [[ $1 == "status" ]]; then
    statusabfrage=1
else
    echo -e "Usage: swpestat entryname active"
    echo -e "Für \"active\" werden nur die Werte TRUE oder FALSE akzeptiert"
    echo -e "Alternativ: Statusabfrage mit:"
    echo -e "Usage: swpestat status"
    exit
fi
# echo $uid $zsso

# Basis-Variablen
# Im AD befinden sich die invis-Server LDAP-Eintraege
# an einer anderen Stelle im LDAP als in OpenLDAP
basedn=`getconfdata $conffile "invisADNode" "2"`
binddn=`getconfdata $conffile "LDAPAdmin" "2"`

bindpw=`getconfdata $passfile "LDAPAdminPW" "2"`
ldaphost=`getconfdata $conffile "ldapHost" "2"`

function lds { 
    ldapsearch -LLL -x -Z -h $ldaphost -D $binddn -w $bindpw -b $1 $2
}
# IFS so aendern, dass die nachfolgende for-Schleife nur noch "newlines" als Listentrenner akzeptiert.
searchbase="cn=invis-Portal,cn=Informationen,$basedn"

if [[ $statusabfrage == 1 ]];then
    filter="(&(cn=*)(objectclass=iPortEntry))"
    allentries=(`lds $searchbase $filter |grep "cn:"| cut -d " " -f2`)
    for entry in ${allentries[*]}; do
	filter="(&(cn=$entry)(objectclass=iPortEntry))"
	isactive=`lds $searchbase $filter |grep "iPortEntryActive:"| cut -d " " -f2`
	echo -e "$entry: $isactive | \c"
    done
    echo
else
    filter="(&(cn=$search)(objectclass=iPortEntry))"

    # DN des zu aendernden iPortEntry Knotens 
    ipedn="cn=$search,$searchbase"

    # Status aendern
    line1="dn: $ipedn\n"
    line2="changetype: modify\n"
    line2="replace: iPortEntryActive\n"
    line3="iPortEntryActive: $active\n"
    line4="\n"
    echo -e $line1$line2$line3$line4 |ldapmodify -x -Z -h $ldaphost -D $binddn -w $bindpw 

    # aktuellen Status ermitteln
    isactive=`lds $searchbase $filter |grep "iPortEntryActive:"| cut -d " " -f2`
    echo "Der Eintrag \"$search\" ist jetzt auf \"$isactive\" gesetzt"

fi