[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 #!/bin/bash 2 # Auteurs: Olivier Lacroix 3 # 4 ## $Id: warn_quota.sh 6655 2011-11-27 16:39:55Z dbo $ ## 5 # 6 ##### script permettant de creer un message d avertissement a un user en depassement de quota ##### 7 # 8 #Couleurs 9 COLTITRE="\033[1;35m" # Rose 10 COLPARTIE="\033[1;34m" # Bleu 11 COLTXT="\033[0;37m" # Gris 12 COLCHOIX="\033[1;33m" # Jaune 13 COLDEFAUT="\033[0;33m" # Brun-jaune 14 COLSAISIE="\033[1;32m" # Vert 15 COLCMD="\033[1;37m" # Blanc 16 COLERREUR="\033[1;31m" # Rouge 17 COLINFO="\033[0;36m" # Cyan 18 19 ERREUR() 20 { 21 echo -e "$COLERREUR" 22 echo "ERREUR!" 23 echo -e "$0 n a pas besoin d argument pour fonctionner" 24 echo -e "$COLINFO\c" 25 echo "Exemples :" 26 echo -e "$COLTXT" 27 echo "warn_quota.sh avertit les utilisateurs qui depassent leur quota sur /home et /var/se3 en les mettant dans le groupe overfill" 28 echo "(le template overfill possede une clef permettant l affichage d un message d avertissement au login)" 29 echo 30 echo "warn_quota.sh \"L:\ro\lynx\lynx.exe\" avertit les utilisateurs depassant leur quota. L affichage se fait a l'aide du navigateur L:\ro\lynx\lynx.exe" 31 # echo -e "$COLTXT" 32 exit 1 33 } 34 35 FICHIERLOCK=/tmp/warnquota.lock 36 FICHIEROVERFILL=/tmp/warnquota.overfill 37 38 grep xfs /etc/fstab >/dev/null 39 if [ "$?" == "0" ] 40 then 41 REP_QUOTA="/usr/sbin/repquota -F xfs" 42 else 43 REP_QUOTA="/usr/sbin/repquota" 44 fi 45 46 47 COMPL_OVERFILL() 48 { 49 [ $1 == "/home" ] && disque=K 50 [ $1 == "/var/se3" ] && disque=H 51 52 # patch 1/2 pour affichage dans la page quota_visu des users en depassement 53 rm /tmp/tmp_quota_$disque > /dev/null 2>&1 54 55 # deux choses a faire : 56 # 1. regarder si les personnes qui depassent leur quota sont dans overfill 57 # 2. regarder si les personnes dans overfill ne devraient pas en sortir 58 59 # 1. 60 61 #filtre les lignes inutiles de repquota (debut), filtre le quota de root et de www-se3 non interessants pour se3 et trie par ordre alpha 62 $REP_QUOTA -v $1|grep '+-'|grep -v root|grep -v www-se3|sort -t \t -k 1 | while read ligne 63 do 64 #filtre les espaces superflus de chaque ligne, isole les champs et les arrondit 65 nom=$(echo $ligne|tr -s " "|cut -d " " -f1) 66 utilise=$(($(echo $ligne|tr -s " "|cut -d " " -f3)/1000)) 67 softquota=$(($(echo $ligne|tr -s " "|cut -d " " -f4)/1000)) 68 hardquota=$(($(echo $ligne|tr -s " "|cut -d " " -f5)/1000)) 69 grace=$(echo $ligne|tr -s " "|cut -d " " -f6) 70 71 #on sait que grace est non vide d'apres le grep +- 72 #filtrage du cas delai < 48:00 73 if [ "$grace" == "none" -o "$grace" == "aucun" ] ; then 74 grace="Expire" 75 else 76 if [ -n "$(echo $grace|grep ":")" ] ; then 77 #il faut filtrer car la grace est au format H:min 78 nbreh=$(echo $grace|cut -d ":" -f1|sed -e "s/ //g") 79 grace="1" 80 [ "$nbreh" -lt 24 ] && grace="0" 81 else 82 grace=$(echo $grace | sed "s/days//" ) 83 fi 84 fi 85 #~ echo "$nom $utilise $softquota $grace" 86 87 #patch 2/2 pour affichage dans la page quota_visu des users en depassement 88 echo "$nom $utilise $softquota $hardquota $grace"| sed -e "s/ /\t/g" >> /tmp/tmp_quota_$disque 89 90 ismember_test=$(ldapsearch -xLLL "cn=overfill" | grep "^memberUid: $nom$" ) 91 # si l utilisateur n est pas encore dans overfill, on le rajoute, sinon, rien 92 if [ -z "$ismember_test" ]; then 93 /usr/share/se3/sbin/groupAddUser.pl $nom overfill 94 echo "$nom vient d'etre ajoute dans overfill" 95 fi 96 # on enleve $nom de la liste $FICHIEROVERFILL a traiter pour le 2: resteront dans le fichier ceux a supprimer d'overfill 97 sed -i $FICHIEROVERFILL -e "s/^$nom$//g" 98 done #fin de la boucle 1. 99 100 } 101 102 #teste si 0 argument ou 1 egal au navigateur a utiliser pour les avertissements de depassement de quota 103 if [ $# -gt 1 -o "$1" = "--help" -o "$1" = "-h" ] ; then 104 ERREUR 105 exit 1 106 fi 107 108 WWWPATH="/var/www" 109 ## recuperation des variables necessaires pour interroger mysql ### 110 if [ -e $WWWPATH/se3/includes/config.inc.php ]; then 111 dbhost=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbhost=" | cut -d = -f2 | cut -d \" -f2` 112 dbname=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbname=" | cut -d = -f 2 |cut -d \" -f 2` 113 dbuser=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbuser=" | cut -d = -f 2 | cut -d \" -f 2` 114 dbpass=`cat $WWWPATH/se3/includes/config.inc.php | grep "dbpass=" | cut -d = -f 2 | cut -d \" -f 2` 115 else 116 echo -e "$COLERREUR" 117 echo "Fichier de configuration mysql inaccessible, le script ne peut se poursuivre." 118 exit 1 119 fi 120 121 # debut du script proprement dit 122 123 # la partition /home peut ne pas exister sur un backuppc ou slave 124 PASDEHOME=`cat /etc/fstab | grep /home` 125 126 if [ $# -eq 0 ] ; then 127 128 if [ -e $FICHIERLOCK ]; then 129 echo "Script deja en cours d execution" 130 exit 1 131 fi 132 touch $FICHIERLOCK 133 134 # creation si besoin d'overfill 135 if [ "$(ldapsearch -xLLL "cn=overfill")" == "" ]; then 136 /usr/share/se3/sbin/groupAdd.pl 1 overfill "Personnes depassant leur quota d espace disque sur /home ou /var/se3." 137 echo "Creation d'overfill (absent dans l'annuaire)." 138 fi 139 140 echo "Mise a jour du groupe overfill et du template correspondant..." 141 142 # recuperation des partitions sur lesquelles il y a avertissement 143 AVERT_HOME=`echo "select value from params where name='quota_warn_home'" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 144 AVERT_VARSE3=`echo "select value from params where name='quota_warn_varse3'" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 145 146 # si les parametres n'existent pas , on les cree (une fois pour toutes) 147 [ "$AVERT_HOME" == "" ] && echo "INSERT INTO params VALUES ('', 'quota_warn_home', '0', '0', 'Avertissement pour depassement de quota sur /home', '6')" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N 148 [ "$AVERT_VARSE3" == "" ] && echo "INSERT INTO params VALUES ('', 'quota_warn_varse3', '0', '0', 'Avertissement pour depassement de quota sur /var/se3', '6')" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N 149 150 # on remplit $FICHIEROVERFILL avec les utilisateurs d overfill a traiter : il faudra les enlever s'ils n'ont plus raison d'y etre (etape 2) 151 ldapsearch -xLLL "cn=overfill" | grep ^memberUid | sed "s/memberUid: //g" > $FICHIEROVERFILL 152 153 # 1. on remplit overfill avec ceux qui doivent y etre 154 ### on remplit overfill pour les partitions sur lesquelles c'est parametre #### 155 if [ "$AVERT_HOME" == "1" -a "$PASDEHOME" != "" ]; then 156 COMPL_OVERFILL /home 157 else 158 echo "Les quotas sont inactifs pour la partition /home (ou elle n existe pas)... Aucune modification effectuee." 159 fi 160 if [ "$AVERT_VARSE3" == "1" ]; then 161 COMPL_OVERFILL /var/se3 162 else 163 echo "Les quotas sont inactifs pour la partition /var/se3... Aucune modification effectuee." 164 fi 165 166 # 2. ceux qui etaient dans overfill et qui ne depassent plus le quota doivent sortir 167 cat $FICHIEROVERFILL | grep "^[a-z]" | while read nom 168 do 169 /usr/share/se3/sbin/groupDelUser.pl $nom overfill 170 echo "$nom ne depasse plus son quota : il vient d'etre enleve d'overfill" 171 done # fin de la boucle 2. 172 173 echo "Fin." 174 rm $FICHIEROVERFILL 175 # suppression fichier lock 176 rm $FICHIERLOCK 177 fi 178 179 # a tous les lancements, on met a jour le template overfill : $URLINTERFACE pourrait changer (la crontab va actualiser) 180 if [ "$PASDEHOME" != "" ]; then 181 # si /home existe alors 182 echo "Mise a jour du navigateur pour les avertissements de depassement..." 183 184 BROWSERARG=$(echo $1 | sed 's!\\!/!g') 185 URLINTERFACE=`echo "SELECT value FROM params WHERE name=\"urlse3\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 186 BROWSERSQL=`echo "SELECT value FROM params WHERE name=\"quota_browser\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N` 187 188 # le navigateur impose est dans l ordre (si existe) celui donne en argument, dans mysql, sinon iexplore 189 if [ -z "$BROWSERARG" ]; then 190 if [ -z "$BROWSERSQL" ]; then 191 BROWSER="iexplore" 192 else 193 BROWSER="$BROWSERSQL" 194 fi 195 else 196 BROWSER="$BROWSERARG" 197 fi 198 199 #si un nouveau navigateur est impose dans $1 : on le met a jour ou on le rajoute dans mysql 200 if [ $# -eq 1 ]; then 201 if [ -n "$BROWSERSQL" ] ; then 202 #~ echo "quota_browser EXISTE DANS LA BASE DE QUOTAS: MISE A JOUR EFFECTUEE" 203 echo "UPDATE params SET value=\"$BROWSER\" WHERE name=\"quota_browser\"" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N 204 else 205 #~ echo "quota_browser INEXISTANT DANS LA BASE DE QUOTAS: AJOUT DE CELUI CI" 206 echo "INSERT INTO params VALUES ('','quota_browser','$BROWSER', '0','Navigateur affichant depassements de quotas','6')" | mysql -h $dbhost $dbname -u $dbuser -p$dbpass -N 207 fi 208 fi 209 210 ##### creation et parametrage du template overfill #### 211 mkdir -p /home/templates/overfill 212 #nettoyage du template (utile en cas de chgt de l'adresse urlse3) 213 if [ -e /home/templates/overfill/registre.zrn ]; then 214 sed -i /home/templates/overfill/registre.zrn -e "s!WarnQuota @@@!####delete me####!" 215 sed -i /home/templates/overfill/registre.zrn -e "/####delete me####/d" 216 else 217 echo "#overfill (ajout automatique par warnquota.sh)" > /home/templates/overfill/registre.zrn 218 fi 219 chown -R "www-se3" /home/templates/overfill #pour pouvoir rajouter des clefs sur overfill via l'interface 220 221 # dans mysql, le chemin est stocke avec des / (L:/ro/lynx/lynx.exe), pour windows il faut des \ 222 #transforme les / stockes ds mysql en \ pour le chemin windows + correction bug \r, \f, \n, \t et \e mals pris en compte 223 BROWSERWIN=$(echo $BROWSER | sed 's!/r!\\\\r!g' | sed 's!/n!\\\\n!g' | sed 's!/f!\\\\f!g' | sed 's!/t!\\\\t!g' | sed 's!/e!\\\\e!g' | sed 's!/!\\!g' ) 224 225 # la cle n existe pas puisqu on l a supprime avant 226 #~ CLEEXIST="$(grep "WarnQuota @@@" /home/templates/overfill/registre.zrn)" 227 #~ if [ -z "$CLEEXIST" ] ; then 228 echo -e "TOUS @@@ ADD @@@ HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\WarnQuota @@@ $BROWSERWIN $URLINTERFACE @@@ REG_SZ \r" >> /home/templates/overfill/registre.zrn 229 #~ chown "www-se3" /home/templates/overfill/registre.zrn 230 #~ fi 231 232 # il faut supprimer la cle du ntuser.dat si elle a ete rajoutee et que l utilisateur a quitte overfill 233 # si la cle n est pas supprimee dans base, on rajoute cette suppression 234 mkdir -p /home/templates/base 235 if [ ! -e /home/templates/base/registre.zrn ]; then 236 echo "#base (ajout automatique par warnquota.sh)" > /home/templates/base/registre.zrn 237 fi 238 chown -R "www-se3" /home/templates/base #pour pouvoir rajouter des clefs sur base via l'interface 239 240 CLEEXIST="$(grep "WarnQuota " /home/templates/base/registre.zrn)" 241 if [ -z "$CLEEXIST" ] ; then 242 echo -e "TOUS @@@ DEL @@@ HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\WarnQuota \r" >> /home/templates/base/registre.zrn 243 #~ chown "www-se3" /home/templates/base/registre.zrn 244 fi 245 echo "Effectuee." 246 else 247 echo "Pas de partition /home sur ce serveur : pas d avertissement possible via les templates." 248 fi 249
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 |