[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/scripts/ -> warn_quota.sh (source)

   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  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1