[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/bin/bash 2 #shares_Win95: netlogon 3 #shares_Win2K: homes 4 #shares_WinXP: homes 5 #shares_Vista: homes 6 #shares_Seven: homes 7 #shares_CIFSFS: homes 8 #action: start 9 #level: 10 10 # $Id: connexion.sh 7555 2012-12-02 01:41:44Z flafont $ 11 # Script de connexion destine a creer/corriger si necessaire les entrees cn=COMPUTER 12 # Et a renseigner la table se3db.connexions 13 # Adapte par S.Boireau d'apres le connexion.pl historique et ameliore ensuite d'apres le script de C.Bellegarde. 14 # Utilisation de nmblookup pour l'adresse MAC (d'apres Franck Molle) 15 # 16 if [ -z "$3" ]; then 17 echo "Erreur d'argument." 18 echo "$*" 19 echo "Usage: connexion.sh utilisateur machine ip [mac]" 20 exit 21 fi 22 23 # Pour tester l'adresse MAC meme si l'ip et le nom n'ont pas change, passer a "y" la valeur ci-dessous: 24 corrige_mac_si_ip_et_nom_inchange="y" 25 # Pour tester si l'adresse MAC doit etre corrigee quand l'ip a change, passer a "y" la valeur ci-dessous: 26 corrige_mac_si_ip_change="y" 27 28 # Parametres du script 29 user=$1 30 31 # test pour les clients linux 32 regex_ip='^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' 33 machine=$(echo "$2" | grep -E "$regex_ip") 34 35 if [ -z "$machine" ]; then 36 machine=$(echo "$2" | tr 'A-Z' 'a-z') 37 else 38 machinetmp=`nmblookup -A $machine | sed -n '2p' | cut -d' ' -f1 | sed 's/^[ \t]*//;s/[ \t]*$//'` 39 machine=$(echo "$machinetmp" | tr 'A-Z' 'a-z') 40 fi 41 42 ip=$3 43 44 if [ "$machine" == "clone" ]; then 45 exit 0 46 fi 47 if echo "$4" | grep -q -E ":|-" ; then 48 newmac=$(echo "$4" | sed "s/-/:/g" | tr '[A-F]' '[a-f]') 49 fi 50 # Dossier/fichier de log si nécessaire 51 DOSS_SE3LOG=/var/log/se3 52 mkdir -p $DOSS_SE3LOG 53 SE3LOG=$DOSS_SE3LOG/connexions.log 54 55 # recup parametres mysql 56 . /etc/se3/config_o.cache.sh 57 58 # recup parametres ldap 59 . /etc/se3/config_l.cache.sh 60 61 GET_MAC_FROM_IP() 62 { 63 if [ -z "$newmac" ]; then 64 newmac=$(nmblookup -A $1 | awk '/MAC Address/ {print $4}' | sed -e "s/-/:/g") 65 if [ "$newmac" == "00:00:00:00:00:00" ]; then 66 newmac=$(arp -n $1 | awk '/ether/ { print $3 }') 67 fi 68 echo $newmac 69 70 else 71 echo $newmac 72 fi 73 } 74 75 VIRE_DN() 76 { 77 # on verifie l'existence de doublons et vire les enregistrements dn 78 # attention : il faut aussi faire le menage dans les parcs, wpkg, italc, les imprimantes.... 79 local attr=$1 80 local valeur=$2 81 local olddnlist=$(ldapsearch -xLLL -b $computersRdn},$ldap_base_dn} "($attr=$valeur)" dn | sed -e "s/^dn: //g;/^$/d") 82 if [ -n "$olddnlist" ]; then 83 echo -e "$olddnlist" | while read olddn 84 do 85 echo "dn: $olddn 86 changetype: delete 87 " 88 done 89 fi 90 } 91 VIRE_ATTR() 92 { 93 # on verifie l'existence d'attributs en double et on les vire 94 95 local attr=$1 96 local valeur=$2 97 local cn=$3 98 local res=$(ldapsearch -xLLL -b $computersRdn},$ldap_base_dn} "(&(!(cn=$cn))($attr=$valeur))" $attr | egrep "(^dn:|^$attr:)") 99 if [ -n "$res" ]; then 100 echo -e "$res" | sed -e "s/^$attr:/changetype: modify\ndelete: $attr\n$attr:/g" 101 fi 102 } 103 104 # Dossier dans lequel creer les fichiers LDIF temporaires de correction 105 tmp=/var/lib/se3/connexion_ldif 106 mkdir -p $tmp} 107 # Fichier des modifs LDAP 108 ldif_modif=$tmp/$machine}_$RANDOM.ldif 109 # La creation d'un fichier est source de lenteur... cela dit, on ne fait normalement pas la modif de l'annuaire frequemment. 110 111 # Recherche LDAP de la machine dans la branche ou=Computers 112 # --------------------------------------------------------- 113 114 #ldapsearch -xLLL -b ou=Computers,${ldap_base_dn} cn=$machine 115 OLDIFS=$IFS 116 IFS=" 117 " 118 tst=($(ldapsearch -xLLL -b $computersRdn},$ldap_base_dn} cn=$machine ipHostNumber macAddress | egrep "(ipHostNumber|macAddress)")) 119 IFS=$OLDIFS 120 if [ "${#tst[*]}" == "0" ]; then 121 # La machine n'est pas dans l'annuaire 122 123 mac=$(GET_MAC_FROM_IP $ip) 124 if [ -z "$mac" ]; then 125 mac="--" 126 else 127 # on verifie qu'elle n'a pas changé de nom : on cherche les cn correspondants à l'@ mac 128 VIRE_DN macAddress $mac > $ldif_modif} 129 fi 130 echo " 131 dn: cn=$machine,$computersRdn},$ldap_base_dn} 132 cn: $machine 133 objectClass: top 134 objectClass: ipHost 135 objectClass: ieee802Device 136 objectClass: organizationalRole 137 ipHostNumber: $ip 138 macAddress: $mac 139 " >> $ldif_modif} 140 141 # Decommenter la ligne pour debug et lancer /usr/share/se3/sbin/connexion.sh admin NOM_MACHINE IP: 142 # cat ${ldif_modif} 143 ldapadd -x -c -D $adminRdn},$ldap_base_dn} -w $adminPw} -f $ldif_modif} > /dev/null 2>&1 144 touch /tmp/csvtodo 145 else 146 # La machine est dans l'annuaire 147 cpt=0 148 # Normalement on a que deux lignes dans le tableau: 149 while [ $cpt -lt ${#tst[*]} ] 150 do 151 attribut=$tst[$cpt]} 152 #echo "attribut=$attribut" 153 if [ "$attribut:0:14}" == "ipHostNumber: " ]; then 154 ipHostNumber=$attribut:14} 155 else 156 if [ "$attribut:0:12}" == "macAddress: " ]; then 157 macAddress=$attribut:12} 158 fi 159 fi 160 161 cpt=$(($cpt+1)) 162 done 163 164 #echo "ipHostNumber=$ipHostNumber" 165 #echo "macAddress=$macAddress" 166 167 if [ -n "$ip" ]; then 168 if [ "$ip" == "$ipHostNumber" ]; then 169 if [ "$corrige_mac_si_ip_et_nom_inchange" == "y" ]; then 170 mac=$(GET_MAC_FROM_IP $ip) 171 172 # Controle de l'adresse MAC: 173 # Si l'adresse MAC differe sans etre vide, on met a jour 174 # (au cas ou on aurait change de machine ou de carte reseau 175 # ou si la machine ne repondrait plus au ping) 176 if [ "$mac" != "$macAddress" -a -n "$mac" ]; then 177 # on vire des enregistrements eventuels avec cette @mac 178 VIRE_ATTR macAddress $mac $machine > $ldif_modif} 179 echo " 180 dn: cn=$machine,$computersRdn},$ldap_base_dn} 181 changetype: modify 182 replace: macAddress 183 macAddress: $mac 184 -" >> $ldif_modif} 185 ldapmodify -x -c -D $adminRdn},$ldap_base_dn} -w $adminPw} -f $ldif_modif} > /dev/null 2>&1 186 touch /tmp/csvtodo 187 fi 188 fi 189 else 190 # L'adresse IP a change 191 # on nettoie les enregistrements avec l'ancienne 192 VIRE_ATTR ipHostNumber $ip $machine > $ldif_modif} 193 echo " 194 dn: cn=$machine,$computersRdn},$ldap_base_dn} 195 changetype: modify 196 replace: ipHostNumber 197 ipHostNumber: $ip 198 -" >> $ldif_modif} 199 200 if [ "$corrige_mac_si_ip_change" == "y" ]; then 201 mac=$(GET_MAC_FROM_IP $ip) 202 203 if [ -n "$mac" ]; then 204 echo "replace: macAddress 205 macAddress: $mac 206 -" >> $ldif_modif} 207 fi 208 fi 209 210 ldapmodify -x -c -D $adminRdn},$ldap_base_dn} -w $adminPw} -f $ldif_modif} > /dev/null 2>&1 211 touch /tmp/csvtodo 212 fi 213 else 214 # Ca ne devrait pas arriver... l'entree existe mais avec une adresse IP vide??? 215 # on fait le menage 216 VIRE_ATTR ipHostNumber $ip $machine > $ldif_modif} 217 echo >> $ldif_modif} 218 VIRE_ATTR macAddress $mac $machine >> $ldif_modif} 219 echo " 220 dn: cn=$machine,$computersRdn},$ldap_base_dn} 221 changetype: modify 222 replace: ipHostNumber 223 ipHostNumber: $ip 224 -" >> $ldif_modif} 225 226 mac=$(GET_MAC_FROM_IP $ip) 227 228 if [ -n "$mac" ]; then 229 echo "replace: macAddress 230 macAddress: $mac 231 -" >> $ldif_modif} 232 fi 233 234 ldapmodify -x -c -D $adminRdn},$ldap_base_dn} -w $adminPw} -f $ldif_modif} > /dev/null 2>&1 235 touch /tmp/csvtodo 236 fi 237 238 fi 239 240 if [ -e "$ldif_modif}" ]; then 241 # Pour executer a la main le script /usr/share/se3/sbin/connexion.sh toto xpbof 172.16.123.4 242 # et suivre les modifs, decommenter les lignes ci-dessous: 243 #echo "" 244 #cat ${ldif_modif} 245 #echo "" 246 if [ "$DEBUG" != "1" ]; then 247 rm -f $ldif_modif} 248 fi 249 # Pour conserver une trace des operations, on peut commenter la ligne de suppression du LDIF. 250 #echo "Correction $machine;$ip;$mac le $(date +%Y%m%d-%H%M%S)" >> $SE3LOG 251 fi 252 253 # Insertion dans la table MySQL de la connexion de l'utilisateur sur cette machine 254 echo "insert into connexions 255 set username='$user', 256 ip_address='$ip', 257 netbios_name = '$machine', 258 logintime=now();" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass 259 260 exit 0 261
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |