#!/bin/bash # $Id:$ ## #shares_Win95: netlogon #shares_Win2K: homes #shares_WinXP: homes #shares_Vista: homes #shares_Seven: homes #action: start #level: 11 if [ "$1" == "--help" -o "$1" == "-h" ] then echo "Script " echo "afin de permettre le controle internet et la gestin des parcs" echo "Usage : connexion-internet.sh utilisateur machine" echo "--help cette aide" exit fi [[ "$#" -lt "1" ]] && exit 1 # Should be run once by machine [ -f /home/netlogon/$2.lck ] && exit 0 >/home/netlogon/$2.lck user=$1 # test pour les clients linux regex_ip='^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' machine=$(echo "$2" | grep -E "$regex_ip") if [ -z "$machine" ]; then machine=$(echo "$2" | tr 'A-Z' 'a-z') else machinetmp=`nmblookup -A $machine | sed -n '2p' | cut -d' ' -f1 | sed 's/^[ \t]*//;s/[ \t]*$//'` machine=$(echo "$machinetmp" | tr 'A-Z' 'a-z') fi # recup parametres ldap . /etc/se3/config_l.cache.sh # On cherche la machine res=$(ldapsearch -xLLL -D $adminRdn,$ldap_base_dn -w $adminPw -b $computersRdn,$ldap_base_dn "(&(objectClass=ipHost)(cn=$machine))" | grep "destinationIndicator:\|manager:") # 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" ldif="${ldif}\nchangetype: modify" 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 à 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 (utilisés 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'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 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 echo -e "$ldif" if [ -n "$modif" ]; then echo -e "$ldif" | ldapmodify -x -D $adminRdn,$ldap_base_dn -w $adminPw fi rm -f /home/netlogon/$2.lck