[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/usr/share/se3/sbin/ -> se3_change_uid.sh (source)

   1  #!/bin/bash
   2  
   3  # $Id: se3_change_uid.sh 7744 2013-03-31 23:47:51Z keyser $
   4  # Script de changement d'uid
   5  # Auteur: Stephane Boireau
   6  
   7  if [ -z "$2" -o "$1" = "-h" -o "$1" = "--help" ]; then
   8      echo "USAGE: Script de changement d'uid."
   9      echo "       Passer en parametres l'ancien uid et le nouveau."
  10      echo "       Exemple:"
  11      echo "                $0 ancien_uid nouvel_uid"
  12      echo ""
  13      echo "       Pour modifier aussi l'uid dans le profil Thunderbird:"
  14      echo "                $0 ancien_uid nouvel_uid y"
  15      echo "       Attention: Si Thunderbird contient des comptes autres que celui du SE3,"
  16      echo "                  il se peut qu'il ne faille pas modifier le profil Thunderbird."
  17      exit
  18  fi
  19  
  20  # Caracteres autorises
  21  caracteres_autorises="a-z0-9\.-"
  22  
  23  ladate=$(date +%Y%m%d%H%M%S)
  24  tmp=/var/se3/save/modification_ldap/$ladate
  25  mkdir -p $tmp
  26  
  27  ancien_uid=$1
  28  nouvel_uid=$2
  29  modif_thund_prefjs=$3
  30  
  31  WWWPATH="/var/www"
  32  
  33  # recup parametres ldap
  34  . /etc/se3/config_l.cache.sh
  35  # recup parametres caches :
  36  . /etc/se3/config_m.cache.sh
  37  . /etc/se3/config_d.cache.sh
  38  
  39  # Tester si l'ancien uid existe
  40  t=$(ldapsearch -xLLL -b $peopleRdn,$ldap_base_dn uid=$ancien_uid)
  41  if [ -z "$t" ]; then
  42      echo "ABANDON: L'uid $ancien_uid n'existe pas dans la branche People."
  43      exit
  44  fi
  45  
  46  # Tester si le nouvel uid existe déja
  47  t=$(ldapsearch -xLLL -b $peopleRdn,$ldap_base_dn uid=$nouvel_uid)
  48  if [ -n "$t" ]; then
  49      echo "ABANDON: Le nouvel uid $nouvel_uid existe deja dans la branche People."
  50      exit
  51  fi
  52  
  53  t2=$(ldapsearch -xLLL -b $trashRdn,$ldap_base_dn uid=$nouvel_uid)
  54  if [ -n "$t2" ]; then
  55      echo "ABANDON: Le nouvel uid $nouvel_uid existe deja dans la branche Trash."
  56      exit
  57  fi
  58  
  59  # Tester si le nouvel uid est correctement formate
  60  t=$(echo "$nouvel_uid"|tr "[A-Z]" "[a-z]"|sed -e "s|[$caracteres_autorises]*||g")
  61  if [ -n "$t" ]; then
  62      echo "ABANDON: Le nouvel uid $nouvel_uid contient des caracteres non autorises: $t"
  63      exit
  64  fi
  65  
  66  # Modif dans l'annuaire
  67  # Extraction du dn: uid=$ancien_uid,...
  68  echo "Sauvegarde de l'entree $ancien_uid}"
  69  ldapsearch -xLLL -D $adminRdn,$ldap_base_dn -w $adminPw -b $peopleRdn,$ldap_base_dn uid=$ancien_uid > $tmp/svg_$ancien_uid}.ldif
  70  if [ "$?" != "0" ]; then
  71      echo "ABANDON: Il s'est produit une erreur lors de la sauvegarde."
  72      echo "         On ne modifie pas l'uid."
  73      exit
  74  fi
  75  
  76  # Modification du LDIF
  77  cat $tmp/svg_$ancien_uid}.ldif|sed -e "s|^dn: uid=$ancien_uid,|dn: uid=$nouvel_uid,|;s|^uid: $ancien_uid$|uid: $nouvel_uid|;s|^mail: $ancien_uid@|mail: $nouvel_uid@|;s|^homeDirectory: /home/$ancien_uid$|homeDirectory: /home/$nouvel_uid|;" > $tmp/modif_uid_$ancien_uid}_vers_$nouvel_uid}.ldif
  78  if [ "$?" != "0" ]; then
  79      echo "ABANDON: Il s'est produit une erreur lors de l'operation de modification"
  80      echo "         sur la sauvegarde."
  81      echo "         On ne modifie pas l'uid."
  82      exit
  83  fi
  84  
  85  # Suppression de l'ancienne entree
  86  echo "Suppression de l'ancienne entree $ancien_uid"
  87  ldapdelete -x -D $adminRdn,$ldap_base_dn -w $adminPw uid=$ancien_uid,$peopleRdn,$ldap_base_dn
  88  if [ "$?" != "0" ]; then
  89      echo "ABANDON: Il s'est produit une erreur lors de la suppression de l'ancienne entree."
  90      echo "         On ne poursuit pas."
  91      exit
  92  fi
  93  
  94  # Import de la nouvelle entree
  95  echo "Import de la nouvelle entree $nouvel_uid"
  96  ldapadd -x -D $adminRdn,$ldap_base_dn -w $adminPw -f $tmp/modif_uid_$ancien_uid}_vers_$nouvel_uid}.ldif
  97  if [ "$?" != "0" ]; then
  98      echo "ABANDON: Il s'est produit une erreur lors de l'ajout de la nouvelle entree."
  99      echo "         On ne poursuit pas."
 100      exit
 101  fi
 102  
 103  if [ -e "/home/$ancien_uid" ]; then
 104      mv /home/$ancien_uid /home/$nouvel_uid
 105  fi
 106  
 107  # Faut-il corriger les
 108  # /home/$ancien_uid/profil/appdata/Mozilla/Firefox/Profiles/default/prefs.js
 109  # /home/$ancien_uid/profil/appdata/Thunderbird/Profiles/default/prefs.js
 110  # /home/$ancien_uid/Docs/desktop.ini
 111  # ?
 112  
 113  
 114  if [ "$modif_thund_prefjs" = "y" -a -e /home/$nouvel_uid/profil/appdata/Thunderbird/Profiles/default/prefs.js ]; then
 115      cp /home/$nouvel_uid/profil/appdata/Thunderbird/Profiles/default/prefs.js /home/$nouvel_uid/profil/appdata/Thunderbird/Profiles/default/prefs.js.$ladate
 116      echo "Correction du /home/$nouvel_uid/profil/appdata/Thunderbird/Profiles/default/prefs.js"
 117      sed -i "s|/$ancien_uid@|/$nouvel_uid@|;s|\"$ancien_uid@|\"$nouvel_uid@|;s|\"$ancien_uid\");|\"$nouvel_uid\");|" /home/$nouvel_uid/profil/appdata/Thunderbird/Profiles/default/prefs.js
 118  fi
 119  
 120  # Modification des member
 121  echo "Correction des appartenances member"
 122  cpt=0
 123  ldapsearch -xLLL member=uid=$ancien_uid,$peopleRdn,$ldap_base_dn | grep "^dn: " | cut -d"," -f1,2 | while read A
 124  do
 125      echo "$A,$ldap_base_dn
 126  changetype: modify
 127  add: member
 128  member: uid=$nouvel_uid,$peopleRdn,$ldap_base_dn
 129  -
 130  delete: member
 131  member: uid=$ancien_uid,$peopleRdn,$ldap_base_dn
 132  " >> $tmp/modif_member_$cpt.ldif
 133  
 134      #cat $tmp/modif_memberUid_$cpt.ldif
 135      ldapmodify -x -D $adminRdn,$ldap_base_dn -w $adminPw -f $tmp/modif_member_$cpt.ldif
 136      #sleep 1
 137  
 138      cpt=$(($cpt+1))
 139  done
 140  
 141  # Modification des memberUid
 142  echo "Correction des appartenances memberUid"
 143  cpt=0
 144  ldapsearch -xLLL memberUid=$ancien_uid | grep "^dn: " | cut -d"," -f1,2 | while read A
 145  do
 146      echo "$A,$ldap_base_dn
 147  changetype: modify
 148  add: memberUid
 149  memberUid: $nouvel_uid
 150  -
 151  delete: memberUid
 152  memberUid: $ancien_uid
 153  " >> $tmp/modif_memberUid_$cpt.ldif
 154  
 155      #cat $tmp/modif_memberUid_$cpt.ldif
 156      ldapmodify -x -D $adminRdn,$ldap_base_dn -w $adminPw -f $tmp/modif_memberUid_$cpt.ldif
 157      #sleep 1
 158  
 159      cpt=$(($cpt+1))
 160  done
 161  
 162  # Y a-t-il des enregistrements ailleurs? dans mysql?
 163  
 164  # Parcours des ACL?
 165  # Non... Apparemment, en modifiant dans le ldap, c'est OK.
 166  # Les acl doivent donc reposer sur les uidNumber
 167  
 168  echo "Termine."
 169  
 170  if [ "$modif_thund_prefjs" != "y" ]; then
 171      echo "Il se peut qu'il faille corriger le fichier:
 172  /home/$nouvel_uid/profil/appdata/Thunderbird/Profiles/default/prefs.js
 173  s'il existe."
 174  fi


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