Shell Script / Perl para sincronizar base de usuários do AD com o Zimbra
Publicado por Daniel Santos 28/03/2009
[ Hits: 11.181 ]
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) ########################
Recriando /dev/null facilmente
Ispeed - Medidor de velocidade de download
Administração do Samba + LDAP - ainda para terminar
NetScan - o seu scanner de rede!
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Instalar Linux em notebook Sony Vaio VPCEG13EB (10)
Vou destruir sua infância:) (6)
Quando vocês pararam de testar distros? (24)









