Shell Script / Perl para sincronizar base de usuários do AD com o Zimbra
Publicado por Daniel Santos 28/03/2009
[ Hits: 10.782 ]
Homepage: mypenguim.wordpress.com
Este script faz a sincronia dos usuários do Active Directory (AD) com a base de dados de usuários do Zimbra.
Basta configurar os arquivos .pl e .sh para atender as credenciais e variáveis de seu ambiente.
#!/bin/bash # # (c) Copyright by Daniel Santos (danlsgiga@yahoo.com.br) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # ( http://www.fsf.org/licenses/gpl.txt ) ##################################################################### # Replication of AD accounts to Zimbra-Postfix v2.0 cd /opt/zimbra/ReplicaAD diffUsersFile=diffUsers diffGroupsFile=diffGroups ADUsersFile=ADUsersFile ADGroupsFile=ADGroupsFile ADGroupsFile_old=ADGroupsFile_old ADUsersFile_old=ADUsersFile_old LogReplicaAD=LogReplica.log UsersDefaultPasswd="coloqueumasenhacomplicadaaqui" # Update user data ./ReplicaUsersAD.pl 2> /dev/null diff $ADUsersFile_old $ADUsersFile > $diffUsersFile cp -f $ADUsersFile $ADUsersFile_old # Update distribution groups data ./ReplicaGroupsAD.pl 2> /dev/null diff $ADGroupsFile_old $ADGroupsFile > $diffGroupsFile cp -f $ADGroupsFile $ADGroupsFile_old # Create, Modify and Remove Accounts Functions _createAccount() { date +%d"."%m"."%Y" - "%H":"%M":"%S >> $LogReplicaAD echo "-------------------------- Replica AD - Criando conta $2 -------------------------" >> $LogReplicaAD if [[ -z $3 ]]; then zmprov ca "$2" "$UsersDefaultPasswd" displayName "$1" 2>&1>> $LogReplicaAD else quotaBytes=$(($3*1024*1024)) zmprov ca "$2" "$UsersDefaultPasswd" displayName "$1" zimbraMailQuota "$quotaBytes" 2>&1>> $LogReplicaAD fi; aliasExemplo=`echo $2 | awk -F'@' '{ print $1 }'`"@exemplo.com.br" zmprov aaa "$2" "$aliasExemplo" 2>&1>> $LogReplicaAD echo "$1" >> $LogReplicaAD echo "$2" >> $LogReplicaAD echo "$aliasExemplo" >> $LogReplicaAD echo "$3""MB" >> $LogReplicaAD echo "---------------------------- Replica AD - Conta $2 criada -------------------------" >> $LogReplicaAD return } _modifyAccount() { date +%d"."%m"."%Y" - "%H":"%M":"%S >> $LogReplicaAD echo "-------------------------- Replica AD - Modificando conta $2 ----------------------" >> $LogReplicaAD if [ "$1" != "$4" ]; then zmprov ma "$2" displayName "$4" 2>&1>> $LogReplicaAD fi; if [ "$3" != "$6" ]; then quotaBytes=$(($6*1024*1024)) zmprov ma "$2" zimbraMailQuota "$quotaBytes" 2>&1>> $LogReplicaAD fi; if [ "$2" != "$5" ]; then aliasExemplo=`echo $2 | awk -F'@' '{ print $1 }'`"@exemplo.com.br" aliasExemploNovo=`echo $5 | awk -F'@' '{ print $1 }'`"@exemplo.com.br" zmprov ra "$2" "$5" 2>&1>> $LogReplicaAD zmprov raa "$5" "$aliasExemplo" 2>&1>> $LogReplicaAD zmprov aaa "$5" "$aliasExemploNovo" 2>&1>> $LogReplicaAD fi; echo "$1" >> $LogReplicaAD echo "$2" >> $LogReplicaAD echo "$aliasExemplo" >> $LogReplicaAD echo "$3""MB" >> $LogReplicaAD echo "$4" >> $LogReplicaAD echo "$5" >> $LogReplicaAD echo "$aliasExemploNovo" >> $LogReplicaAD echo "$6""MB" >> $LogReplicaAD echo "---------------------------- Replica AD - Conta $2 modificada ---------------------" >> $LogReplicaAD return } _removeAccount() { date +%d"."%m"."%Y" - "%H":"%M":"%S >> $LogReplicaAD echo "-------------------------- Replica AD - Removendo conta $1 -------------------------" >> $LogReplicaAD zmprov da "$1" 2>&1>> $LogReplicaAD echo "$1" >> $LogReplicaAD echo "---------------------------- Replica AD - Conta $1 removida ------------------------" >> $LogReplicaAD return } _removeDistributionList() { date +%d"."%m"."%Y" - "%H":"%M":"%S >> $LogReplicaAD echo "-------------------------- Replica AD - Removendo Distribution List $1 -------------------------" >> $LogReplicaAD aliasExemplo=`echo $1 | awk -F'@' '{ print $1 }'`"@exemplo.com.br" zmprov ddl "$1" 2>&1>> $LogReplicaAD zmprov ddl "$aliasExemplo" 2>&1>> $LogReplicaAD echo "$1" >> $LogReplicaAD echo "$aliasExemplo" >> $LogReplicaAD echo "---------------------------- Replica AD - Distribution List $1 removida ------------------------" >> $LogReplicaAD return } _removeDistributionListMember() { date +%d"."%m"."%Y" - "%H":"%M":"%S >> $LogReplicaAD echo "-------------------------- Replica AD - Removendo Membro da Distribution List $1 -------------------------" >> $LogReplicaAD aliasExemplo=`echo $1 | awk -F'@' '{ print $1 }'`"@exemplo.com.br" zmprov rdlm "$1" "$2" 2>&1>> $LogReplicaAD zmprov rdlm "$aliasExemplo" "$2" 2>&1>> $LogReplicaAD echo "$1" >> $LogReplicaAD echo "$aliasExemplo" >> $LogReplicaAD echo "$2" >> $LogReplicaAD echo "---------------------------- Replica AD - Membro da Distribution List $1 removido ------------------------" >> $LogReplicaAD return } _addDistributionList() { date +%d"."%m"."%Y" - "%H":"%M":"%S >> $LogReplicaAD echo "-------------------------- Replica AD - Criando a Distribution List $1 -------------------------" >> $LogReplicaAD aliasExemplo=`echo $1 | awk -F'@' '{ print $1 }'`"@exemplo.com.br" zmprov cdl "$1" 2>&1>> $LogReplicaAD zmprov cdl "$aliasExemplo" 2>&1>> $LogReplicaAD echo "$1" >> $LogReplicaAD echo "$aliasExemplo" >> $LogReplicaAD echo "---------------------------- Replica AD - Distribution List $1 criada ------------------------" >> $LogReplicaAD return } _addDistributionListMember() { date +%d"."%m"."%Y" - "%H":"%M":"%S >> $LogReplicaAD echo "-------------------------- Replica AD - Adicionando Membro na Distribution List $1 -------------------------" >> $LogReplicaAD aliasExemplo=`echo $1 | awk -F'@' '{ print $1 }'`"@exemplo.com.br" zmprov adlm "$1" "$2" 2>&1>> $LogReplicaAD zmprov adlm "$aliasExemplo" "$2" 2>&1>> $LogReplicaAD echo "$1" >> $LogReplicaAD echo "$aliasExemplo" >> $LogReplicaAD echo "$2" >> $LogReplicaAD echo "---------------------------- Replica AD - Membro adicionado na Distribution List $1 ------------------------" >> $LogReplicaAD return } ################################ Users AD Replication (BEGIN) #################################### if [ -e $diffUsersFile ]; then while read LINHA; do if [ "${LINHA:0:1}" = "<" ]; then nomeUsuario=`echo $LINHA | sed 's/< //g' | awk -F',' '{ print $1 }'` emailUsuario=`echo $LINHA | sed 's/< //g' | awk -F',' '{ print $2 }'` quotaUsuario=`echo $LINHA | sed 's/< //g' | awk -F',' '{ print $3 }'` if [ `egrep "$nomeUsuario|$emailUsuario" $diffUsersFile | grep -c "^>"` = "1" ]; then nomeUsuarioAlterado=`egrep "$nomeUsuario|$emailUsuario" $diffUsersFile | grep "^>" | sed 's/> //g' | awk -F',' '{ print $1 }'` emailUsuarioAlterado=`egrep "$nomeUsuario|$emailUsuario" $diffUsersFile | grep "^>" | sed 's/> //g' | awk -F',' '{ print $2 }'` quotaUsuarioAlterado=`egrep "$nomeUsuario|$emailUsuario" $diffUsersFile | grep "^>" | sed 's/> //g' | awk -F',' '{ print $3 }'` _modifyAccount "$nomeUsuario" "$emailUsuario" "$quotaUsuario" "$nomeUsuarioAlterado" "$emailUsuarioAlterado" "$quotaUsuarioAlterado" else _removeAccount "$emailUsuario" fi; elif [ "${LINHA:0:1}" = ">" ]; then nomeUsuario=`echo $LINHA | sed 's/> //g' | awk -F',' '{ print $1 }'` emailUsuario=`echo $LINHA | sed 's/> //g' | awk -F',' '{ print $2 }'` quotaUsuario=`echo $LINHA | sed 's/> //g' | awk -F',' '{ print $3 }'` if [ `egrep "$nomeUsuario|$emailUsuario" $diffUsersFile | grep -c "^<"` = "0" ]; then _createAccount "$nomeUsuario" "$emailUsuario" "$quotaUsuario" fi; fi; done < $diffUsersFile fi; ################################ Users AD Replication (END) #################################### ########################## Distribution Groups AD Replication (BEGIN) ########################## if [ -e $diffGroupsFile ]; then while read LINHA; do if [ "${LINHA:0:1}" = "<" ]; then emailGrupo=`echo $LINHA | sed 's/< //g' | awk -F'#' '{ print $1 }'` emailUsuariosAD=`echo $LINHA | sed 's/< //g' | awk -F'#' '{ print $2 }'` if [ `grep "$emailGrupo" $diffGroupsFile | grep -c "^>"` = "1" ]; then emailUsuariosAlterado=`grep "$emailGrupo" $diffGroupsFile | grep "^>" | sed 's/> //g' | awk -F'#' '{ print $2 }'` emailsZimbra=`zmprov gdl $emailGrupo | grep zimbraMailForwardingAddress: | sed 's/zimbraMailForwardingAddress: //g'` arrayEmail=`echo $emailUsuariosAlterado | awk '{ split($0,a,","); for (i in a) print a[i] }'` for i in $emailsZimbra; do if [ "`echo $emailUsuariosAlterado | grep -c $i`" != "1" ]; then _removeDistributionListMember "$emailGrupo" "$i" fi; done for i in $arrayEmail; do if [ "`echo $emailsZimbra | grep -c $i`" != "1" ]; then _addDistributionListMember "$emailGrupo" "$i" fi; done else _removeDistributionList "$emailGrupo" fi; elif [ "${LINHA:0:1}" = ">" ]; then emailGrupo=`echo $LINHA | sed 's/> //g' | awk -F'#' '{ print $1 }'` if [ `grep "$emailGrupo" $diffGroupsFile | grep -c "^<"` = "0" ]; then emailUsuariosAD=`echo $LINHA | sed 's/> //g' | awk -F'#' '{ print $2 }'` _addDistributionList "$emailGrupo" arrayEmail=`echo $emailUsuariosAD | awk '{ split($0,a,","); for (i in a) print a[i] }'` for i in $arrayEmail; do _addDistributionListMember "$emailGrupo" "$i" done fi; fi; done < $diffGroupsFile fi; ########################## Distribution Groups AD Replication (END) ########################
Verificar conexão com Internet
CBQU - Utilitário para controle de banda de forma fácil e interativa
Software backup, restore, leitura de logs, com dialog
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Pedagogia no brasil não passa de alfabetização por m4sturbação mental (1)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)