#!/bin/bash ##### met à jour les droits des machines et des utilisateurs lors de leur modif via l'interface web ##### # usage : update-internet.sh user|machine droit plage # licence GPL # auteur : denis bonnenfant 6/02/2008 - Et Moi alors ? (Génaël) ## # $Id: update-internet.sh 3280 2008-10-12 20:40:29Z dbo $ ## if [ "$1" == "--help" -o "$1" == "-h" ]; then echo "Script de mise à jour de l'enregistrement ldap cn=machine " echo "qui configure les droits lors de leur modification dans l'interface web" echo "Usage : update-internet.sh nom droit plage" echo "nom peut être un utilisateur ou une machine" echo "si plage = tous , on fixe les droits permanents" echo "sinon, les droits temporaires" echo "--help cette aide" exit fi [[ "$#" != "3" ]] && exit 1 user=$1 droit=$2 plage_u=$3 if [ -e /var/www/se3/includes/config.inc.php ]; then dbhost=`cat /var/www/se3/includes/config.inc.php | grep "dbhost=" | cut -d = -f 2 |cut -d \" -f 2` dbname=`cat /var/www/se3/includes/config.inc.php | grep "dbname=" | cut -d = -f 2 |cut -d \" -f 2` dbuser=`cat /var/www/se3/includes/config.inc.php | grep "dbuser=" | cut -d = -f 2 |cut -d \" -f 2` dbpass=`cat /var/www/se3/includes/config.inc.php | grep "dbpass=" | cut -d = -f 2 |cut -d \" -f 2` else echo "Fichier de conf inaccessible" >> $SE3LOG exit 1 fi # # Recuperation des params LDAP # BASEDN=`echo "SELECT value FROM params WHERE name='ldap_base_dn'" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` if [ -z "$BASEDN" ]; then echo "Impossible d'accéder au paramètre BASEDN" exit 1 fi COMPUTERSRDN=`echo "SELECT value FROM params WHERE name='computersRdn'" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` if [ -z "$COMPUTERSRDN" ]; then echo "Impossible d'accéder au paramètre COMPUTERSRDN" exit 1 fi PEOPLERDN=`echo "SELECT value FROM params WHERE name='peopleRdn'" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` if [ -z "$PEOPLERDN" ]; then echo "Impossible d'accéder au paramètre PEOPLERDN" exit 1 fi ADMINRDN=`echo "SELECT value FROM params WHERE name='adminRdn'" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` if [ -z "$ADMINRDN" ]; then echo "Impossible d'accéder au paramètre ADMINRDN" exit 1 fi ADMINPW=`echo "SELECT value FROM params WHERE name='adminPw'" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` if [ -z "$ADMINPW" ]; then echo "Impossible d'accéder au paramètre ADMINPW" exit 1 fi resu=$(ldapsearch -xLLL -D $ADMINRDN,$BASEDN -w $ADMINPW -b $PEOPLERDN,$BASEDN "(uid=$user)" uid | grep "uid:" | cut -d " " -f2) if [ -z "$resu" ]; then # On cherche les machines res=$(ldapsearch -xLLL -D $ADMINRDN,$BASEDN -w $ADMINPW -b $COMPUTERSRDN,$BASEDN "(cn=$user)" cn | grep "cn:" | cut -d " " -f2) case $plage_u in tous) droit_u_p="machine" ;; cours*) droit_u_t=$droit droit_u_p="eleve" ;; esac else # On cherche les machines correspondant au manager resu=$(ldapsearch -xLLL -D $ADMINRDN,$BASEDN -w $ADMINPW -b $PEOPLERDN,$BASEDN "(uid=$user)" destinationIndicator | grep "destinationIndicator:" | cut -d " " -f2) res=$(ldapsearch -xLLL -D $ADMINRDN,$BASEDN -w $ADMINPW -b $COMPUTERSRDN,$BASEDN "(manager=uid=$user,$PEOPLERDN,$BASEDN)" cn | grep "cn:" | cut -d " " -f2) droit_u_p=$(echo $resu |cut -d ":" -f1) droit_u_t=$(echo $resu |cut -d ":" -f2) if [ -z "$droit_u_p" ]; then droit_u_p="eleve"; fi if [ -z "$droit_u_t" ]; then droit_u_t="aucun"; fi if [ -z "$plage_u" ]; then plage_u="tous"; fi case $droit_u_p in eleve|prof|administratif|admin) ;; *) droit_u_p="eleve" ;; esac case $droit_u_t in aucun|intranet|internet-cours|internet-pause|internet-soir|internet) ;; *) droit_u_t="aucun" ;; esac case $droit in eleve) # fixe droit permanent droit_u_p=$droit ;; prof|administratif|admin) # fixe droit permanent droit_u_p=$droit droit_u_t="internet" ;; aucun|intranet|internet-cours|internet-pause|internet-soir|internet) # fixe droit temporaires case $droit_u_t in aucun) case $plage_u in tous) droit_u_t=$droit ;; cours*) ;; esac ;; *) droit_u_t=$droit ;; esac ;; esac ( echo "dn: uid=$user,$PEOPLERDN,$BASEDN" echo "changetype: modify" echo "replace: destinationIndicator" echo "destinationIndicator: $droit_u_p:$droit_u_t:$plage_u" )| ldapmodify -x -D $ADMINRDN,$BASEDN -w $ADMINPW fi for machine in $res ; do droit_m=$(ldapsearch -xLLL -D $ADMINRDN,$BASEDN -w $ADMINPW -b $COMPUTERSRDN,$BASEDN "(&(objectClass=ipHost)(cn=$machine))" destinationIndicator | grep "destinationIndicator:" | cut -d " " -f2) droit_m_p=$(echo "$droit_m" |cut -d ":" -f1) droit_m_t=$(echo "$droit_m" |cut -d ":" -f2) plage_m=$(echo "$droit_m" |cut -d ":" -f3) # mise à jour des droits pour le contrôle d'accès internet # les droits sont : pour les utilisateurs : # - eleve|prof|administratif|admin : droits permanents # - aucun|intranet|internet-cours|internet-pause|internet-soir|internet : droits temporaires # - cours[1-9]|tous # les droits sont : pour les machines : # - intranet|internet-cours|internet-pause|internet-soir|internet|total : droits permanents # - aucun|intranet|internet-cours|internet-pause|internet-soir|internet|total : droits temporaires (lus par squidGuard) # - cours[1-9]|tous if [ -z "$droit_m_p" ]; then droit_m_p="intranet"; fi if [ -z "$droit_m_t" ]; then droit_m_t="intranet"; fi case $droit_u_p in eleve) # eleve case $droit_u_t in aucun) # pas d'accès (puni ou charte non signée) droit_m_t="aucun" plage_m="tous" ;; intranet) # accès par défaut (droits de la machine) droit_m_t=$droit_m_p plage_m="tous" ;; internet-cours|internet-pause|internet-soir|internet) # accès forcé par profs pour une durée donnée droit_m_t=$droit_u_t plage_m=$plage_u ;; esac ;; prof|administratif) # prof droit_m_t="internet" plage_m="tous" ;; # pas de limites admin) # administrateur (non filtré et prioritaire) droit_m_t="total" plage_m="tous" ;; # pas de limites machine) droit_m_p=$droit droit_m_t=$droit plage_m="tous" ;; esac ( echo "dn: cn=$machine,$COMPUTERSRDN,$BASEDN" echo "changetype: modify" echo "replace: destinationIndicator" echo "destinationIndicator: $droit_m_p:$droit_m_t:$plage_m" )| ldapmodify -x -D $ADMINRDN,$BASEDN -w $ADMINPW done