Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.97 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3.  
  4. if [ "$(whoami)" != "zimbra" ]; then
  5.         echo "Script must be run as user: zimbra"
  6.         exit -1
  7. fi
  8.  
  9.  
  10. WORKDIR=/tmp/migration
  11. DETAILSDIR=$WORKDIR/details
  12. PWDSDIR=$WORKDIR/passwords
  13. LISTSDIR=$WORKDIR/lists
  14. ALIASESDIR=$WORKDIR/aliases
  15. DATADIR=$WORKDIR/data
  16.  
  17. DOMAIN=$2
  18. DESTINATION=$3
  19.  
  20.  
  21.  
  22.  
  23. if ! (([ "$1" == "export" ] && [ ! "$#" -lt 3 ]) || [ "$1" == "import" ]); then
  24.         echo "Usage: $0 export domain destination"
  25.         echo "       $0 import"
  26.         exit -1
  27. fi
  28.  
  29.  
  30. timestamp() {
  31.   date +"%T"
  32. }
  33.  
  34. prepare () {
  35.  
  36. if [ -d "$WORKDIR" ]; then
  37.   rm -rf $WORKDIR
  38.   echo "Cleaned up $WORKDIR"
  39. fi
  40.  
  41. mkdir -p $DETAILSDIR $PWDSDIR $LISTSDIR $ALIASESDIR $DATADIR
  42.  
  43. }
  44.  
  45. _export () {
  46.  
  47. zmprov -l gaa | grep $DOMAIN | tee -a $WORKDIR/users.txt
  48.  
  49. for user in `cat $WORKDIR/users.txt`; do zmprov ga $user | grep -i Name: | tee -a $DETAILSDIR/$user.txt; done
  50.  
  51. for user in `cat $WORKDIR/users.txt`; do zmprov -l ga $user userPassword | grep userPassword: | awk '{print $2}' | tee -a $PWDSDIR/$user.shadow; done
  52.  
  53. zmprov gadl | grep $DOMAIN | tee -a $WORKDIR/lists.txt
  54. for list in `cat $WORKDIR/lists.txt`; do zmprov gdlm $list > $LISTSDIR/$list.txt; echo "$list"; done
  55.  
  56. for user in `cat $WORKDIR/users.txt`; do zmprov ga $user | grep zimbraMailAlias | awk '{print $2}' | tee -a $ALIASESDIR/$user.txt; echo $i; done
  57. find $ALIASESDIR -type f -empty | xargs -n1 rm -v
  58.  
  59. for user in `cat $WORKDIR/users.txt`; do echo "Exporting mailbox $user"; zmmailbox -z -m $user getRestURL '/?fmt=tgz' > $DATADIR/$user.tgz; done
  60.  
  61. }
  62.  
  63. import () {
  64.  
  65. export LC_ALL="en_US.UTF-8"
  66.  
  67. for i in `cat $WORKDIR/users.txt`
  68.   do
  69.   givenName=$(grep givenName: $DETAILSDIR/$i.txt | cut -d ":" -f2)
  70.   displayName=$(grep displayName: $DETAILSDIR/$i.txt | cut -d ":" -f2)
  71.   shadowpass=$(cat $PWDSDIR/$i.shadow)
  72.  
  73.   zmprov ca $i "TeMpPa55^()" cn "$givenName" displayName "$displayName" givenName "$givenName"
  74.   zmprov ma $i userPassword "$shadowpass"
  75. done
  76.  
  77. for list in `cat $WORKDIR/lists.txt`; do zmprov cdl $LISTSDIR/$list ; echo "$list -- done "; done
  78. for list in `cat $WORKDIR/lists.txt`
  79. do
  80.   for mbmr in `grep -v '#' $LISTSDIR/$list.txt | grep '@'`
  81.   do
  82.     zmprov adlm $list $mbmr
  83.     echo " $mbmr has been added to $list"
  84.   done
  85. done
  86.  
  87. for user in `cat $WORKDIR/users.txt`
  88. do
  89.   echo $user
  90.   if [ -f "$ALIASESDIR/$user.txt" ]; then
  91.   for alias in `grep '@' $ALIASESDIR/$user.txt`
  92.   do
  93.     zmprov aaa $user $alias
  94.     echo "$user ALIAS $alias - Restored"
  95.   done
  96.   fi
  97. done
  98.  
  99. for mailbox in `cat $WORKDIR/users.txt`; do zmmailbox -z -m $mailbox postRestURL "/?fmt=tgz&resolve=skip" $DATADIR/$mailbox.tgz; echo "$mailbox - done "; done
  100.  
  101. }
  102.  
  103.  
  104. case "$1" in
  105.  
  106. export)
  107.   #prepare
  108.   echo "Export started $(timestamp)"
  109.   _export
  110.   echo "Export finished $(timestamp)"
  111.   echo "Please type root password of $DESTINATION"
  112.   rsync -avz $WORKDIR/ root@$DESTINATION:$WORKDIR/
  113.   ;;
  114.  
  115. import)
  116.   echo "Import started $(timestamp)"
  117.   import
  118.   echo "Import finished $(timestamp)"
  119.   ;;
  120.  
  121. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement