#!/bin/bash ##### Enregistrement ldap des cn=machine ##### # ce script s'utilise en lieu et place du script connexion.pl qu'il remplace # licence GPL # auteur : denis bonnenfant 6/02/2008 ## # $Id: ip-internet.sh 6115 2011-01-28 18:34:52Z dbo $ ## if [ "$1" == "--help" -o "$1" == "-h" ] then echo "Script de cr�ant l'enregistrement ldap cn=machine " echo "afin de permettre le controle internet et la gestin des parcs" echo "Usage : connexion-internet.sh utilisateur machine IP action" echo "action peut �tre : add - ajoute l'ip (choix par defaut)" echo " del - supprime l'ip" echo "--help cette aide" exit fi [[ "$#" -lt "3" ]] && exit 1 user=$1 machine=$2 adresse=$3 case $4 in del) action="del" ;; *) action="add" ;; esac # recup parametres ldap . /etc/se3/config_l.cache.sh . /usr/share/se3/shares/shares.avail/connexion.sh $user $machine $adresse # On cherche la machine res=$(ldapsearch -xLLL -D $adminRdn,$ldap_base_dn -w $adminPw -b $computersRdn,$ldap_base_dn "(&(objectClass=ipHost)(cn=$machine))" | grep "ipHostNumber:\|destinationIndicator:\|manager:\|macAddress:") # On cherche l'utilisateur resu=$(ldapsearch -xLLL -D $adminRdn,$ldap_base_dn -w $adminPw -b $peopleRdn,$ldap_base_dn "(uid=$user)" | grep "destinationIndicator:" | cut -d " " -f2) droit_u_p=$(echo $resu |cut -d ":" -f1) droit_u_t=$(echo $resu |cut -d ":" -f2) plage_u=$(echo $resu |cut -d ":" -f3) # on cherche le(s) parc(s) pour savoir si c'est un portable resp=$(ldapsearch -xLLL -D $adminRdn,$ldap_base_dn -w $adminPw -b $parcsRdn,$ldap_base_dn "(member=cn=$machine,$computersRdn,$ldap_base_dn)" cn | grep "cn: portables_*" | cut -d " " -f2) ldif="dn: cn=$machine,$computersRdn,$ldap_base_dn" if [ -z "$res" ]; then # impossible : exit 1 else ldif="${ldif}\nchangetype: modify" ip=$(echo "$res" | grep ipHostNumber: | cut -d " " -f2) if [ -z "$(echo $ip | grep $adresse)" ] ; then ldif="${ldif}\nadd: ipHostNumber" ldif="${ldif}\nipHostNumber: $adresse" ldif="${ldif}\n-" modif="1" fi if [[ "$action" == "del" ]]; then if [ ! -z "$(echo $ip | sed s/$adresse//)" ] ; then ldif="${ldif}\ndelete: ipHostNumber" ldif="${ldif}\nipHostNumber: $adresse" ldif="${ldif}\n-" modif="1" fi fi userdn=$(echo "$res" | grep manager: | cut -d " " -f2) if [ -z "$userdn" ]; then ldif="${ldif}\nadd: manager" ldif="${ldif}\nmanager: uid=$user,$peopleRdn,$ldap_base_dn" ldif="${ldif}\n-" modif="1" elif [ "$userdn" != "uid=$user,$peopleRdn,$ldap_base_dn" -a -z "$resp" ]; then ldif="${ldif}\nreplace: manager" ldif="${ldif}\nmanager: uid=$user,$peopleRdn,$ldap_base_dn" ldif="${ldif}\n-" modif="1" fi droit_m=$(echo "$res" | grep -i 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 a jour des droits pour le controle d'acces 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 (utilises par squidGuard) # - cours[1-9]|tous if [ -z "$droit_u_p" ]; then droit_u_p="eleve"; fi if [ -z "$droit_u_t" ]; then droit_u_t="aucun"; fi if [ -z "$droit_m_p" ]; then droit_m_p="intranet"; fi if [ -z "$droit_m_t" ]; then droit_m_t="intranet"; fi if [ -z "$plage_u" ]; then plage_u="tous"; fi if [ -z "$plage_m" ]; then plage_m="tous"; fi case $droit_u_p in eleve) # eleve case $droit_u_t in aucun) # pas d'acces (puni ou charte non signee) droit_m_t="aucun" plage_m="tous" ;; intranet) # acces par defaut (droits de la machine) droit_m_t=$droit_m_p plage_m="tous" ;; internet-cours|internet-pause|internet-soir|internet) # acces force par profs pour une duree donnee 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 filtre et prioritaire) droit_m_t="total" plage_m="tous" ;; # pas de limites esac droit="$droit_m_p:$droit_m_t:$plage_m" if [ "$droit_m" != "$droit" ]; then ldif="${ldif}\nreplace: destinationIndicator" ldif="${ldif}\ndestinationIndicator: $droit" ldif="${ldif}\n-" modif="1" fi fi echo -e "$ldif" if [ -n "$modif" ]; then echo -e "$ldif" | ldapmodify -x -D $adminRdn,$ldap_base_dn -w $adminPw fi