#!/bin/bash # Descricao: Script para migracao de mensagens, agenda, contatos de um servidor # MS Exchange 2000 para Expresso # Author: Gabriel Gomes Malheiros # Versao: 0.99 # # Instalação: # O script necessita que haja no sistema os seguintes pacotes instalados e scripts: # -> nd, expect, lynx, openldap-client, imapcreate.pl, imapsync. # # É preciso que o script crie fisicamente as caixas dos usuarios, # ele deve ser executado da maquina do Expresso mail, # # O servico IMAP do MS Exchange tambem deve estar ativo. # # Deve ser gerado um arquivo de configuração com as variáveis do script # Observacao: O script necessita ler os usuarios a serem migrados no arquivo # $USRFILE, que está no arquivo de configuração . Este arquivo deve conter um usuario por linha, # sendo que em cada linha deve ter 5 colunas: LOGIN{exchannge} CPF/LOGIN{expresso} PERFIL{em Megabytes} Email CPF{cpf do responsável} # Ex: # Mjackson 15152323120 300M michael.jackson@hollywood.com 15152323120 # aspworldt asp.world 500M asp.world@surf.org 55566633321 # # Execução: # # sh migra_exchange_expresso.sh 1 -c arquivo_com_as_variaveis.conf # neste exemplo o arquivo usuarios1.txt e arquivo_com_as_variaveis.conf deve estar na mesma pasta do script. ########################################## # Início de Tratamento de parametros ########## # Força o usuário passar o parametro -c nomedoarquivoconf.conf if [ -z $2 ] ; then echo -e "Sintaxe1: migracao.sh {numero} -c ARQUIVO.conf\n {numero}: numero para execução em paralelo" exit 1 elif [ $2 != "-c" ] ; then # Se paramentro nao for -c echo -e "Sintaxe2: migracao.sh {numero} -c ARQUIVO.conf\n {numero}: numero para execução em paralelo" exit 1 elif [ -z $3 ] ; then #Se vazio o argumento echo -e "Sintaxe3: migracao.sh {numero} -c ARQUIVO.conf\n {numero}: numero para execução em paralelo" exit 1 fi if [ $( echo "$3" | awk -F "." '{print $NF}') != "conf" ] ; then # deve existir um .conf no final echo -e "Sintaxe4: migracao.sh {numero} -c ARQUIVO.conf\n {numero}: numero para execução em paralelo" exit 1 fi # Fim de Tratamento de parametros ############# for line in `cat $3 | grep -v '^#' | cut -f1 -d= `; do dados=$(cat $3 | grep -v '^#' | grep ${line}= | cut -f2-14 -d= | sed 's/"//g' ) novo_dado=$(echo $dados | sed 's/ //g') export ${line}="$novo_dado" done USRFILE="usuarios$1.txt" TMPTEMP=`mktemp` TMPLDIF="${TMPTEMP}.ldif" LOCAL_INICIAL=`pwd` ARQUIVO="${TMPTEMP}.cont" exparqsql="${TMPTEMP}.sql" #################################################### ############# Lendo o arquivo dos usuarios ######### #################################################### usuarios () { cd $LOCAL_INICIAL if [ -f "${USRFILE}" ];then USRCOUNT=`cat ${USRFILE} | wc -l` for i in `seq 1 ${USRCOUNT}`; do cd ${LOCAL_INICIAL} USRFULL=`cat ${USRFILE} | sed -n ${i}p` export LOGINUSR=`echo ${USRFULL} | awk -F' ' '{print $1}'` export LOGCONT=`echo ${USRFULL} | awk -F' ' '{print $1}'` export VARCPF=`echo ${USRFULL} | awk -F' ' '{print $2}'` export PER=$(echo ${USRFULL} | awk -F' ' '{print $3}') export mail=$(echo ${USRFULL} | awk -F' ' '{print $4}') export responsavel=$(echo ${USRFULL} | awk -F' ' '{print $5}') export SENHAPADRAO=$(echo $responsavel | cut -c1-8) monta_compartilhamento done fi echo -e "\n\n \t Usuario $LOGINUSR migrado para $VARCPF \n\n\n\n" } #################################################### ########## Montando compartilhamento ############### #################################################### monta_compartilhamento() { busca_usuarios } #################################################### ############### funcao para colocar dados no banco # #################################################### put_agenda() { hostbanco="-@$EXP_HOST" echo -e " INSERT INTO phpgw_cal ( cal_id, uid, owner, datetime, mdatetime, edatetime, priority,cal_type,is_public, title, location, description, reference ) VALUES ( DEFAULT,'$hostbanco','$UID_NUMBER','$ds_start','$mdatetime' ,'$ds_end', 2,'$tipop',1,E'$titulo',E'$cidade',E'$Coment', 0);" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass echo -e " select max(cal_id) from phpgw_cal where owner='$UID_NUMBER';" > $exparqsql ID_ATUAL_CALL=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CALI=`echo $ID_ATUAL_CALL | cut -f3 -d" "` ID_ATUAL_CAL=$ID_ATUAL_CALI echo -e "INSERT INTO phpgw_cal_repeats ( cal_id, recur_type, recur_use_end, recur_enddate, recur_interval,recur_data, recur_exception) VALUES ( '$ID_ATUAL_CAL','$recurtype', 0,'$ds_endS','$intervalo', '$recurdata ', DEFAULT); INSERT INTO phpgw_cal_user ( cal_id, cal_login, cal_status, cal_type) VALUES ( '$ID_ATUAL_CAL','$UID_NUMBER', 'A','u');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass } function adicionar_banco() { echo -e "INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'phpgw_group', '777771001','$UID_NUMBER', 1); INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'preferences', 'changepassword', '$UID_NUMBER', 1); INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'preferences', 'run','$UID_NUMBER', 1); INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'calendar','run', '$UID_NUMBER', 1); INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'contactcenter','run', '$UID_NUMBER', 1); INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'expressoMail1_2','run', '$UID_NUMBER', 1); INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'jabberit_messenger','run', '$UID_NUMBER', 1); INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'help','run', '$UID_NUMBER', 1); " > $exparqsql #INSERT INTO phpgw_acl ( acl_appname, acl_location, acl_account, acl_rights) values ( 'workflow','run', '$UID_NUMBER', 1); psql -h$EXP_PG_HOST $EXP_PG_DB $EXP_PG_USER -f $exparqsql < ${TMPTEMP}.db.pass } function adicionar_imap() { su cyrus -c "$imap_cria -u $EXP_ADMIN -p $EXP_ADMIN_PASSWD -s -m $UID_OX -q $PER $EXP_IMAP_HOST" # su cyrus -c "$imap_cria -u $EXP_ADMIN -p $EXP_ADMIN_PASSWD -s -m $UID_OX/Lixeira,$UID_OX/Enviados,$UID_OX/Rascunho $EXP_IMAP_HOST" su cyrus -c "$squatter -C $conf_cyrus -s -r user/$UID_OX" #sleep 10 } #################################################### ################# Agenda ########################### #################################################### migrar_agenda() { echo "Migrando agenda do usuario $LOGINUSR" export calal="Calendar" UID_OX=$(echo $UID_OX | sed 's/\./\^/g') if [ $(echo $UID_OX | grep "^[0-9]" ) ] then rm -f "${IMAP_PATH}"/q/user/$UID_OX/$calal/cyrus* ls --time-style=+%H -l ${IMAP_PATH}/q/user/$UID_OX/$calal/ | grep ^- | awk -F' ' '{print $7}' > ${TMPTEMP}.cont.tmp else rm -f ${IMAP_PATH}/${UID_OX:0:1}/user/$UID_OX/$calal/cyrus* ls --time-style=+%H -l ${IMAP_PATH}/${UID_OX:0:1}/user/$UID_OX/$calal/ | grep ^- | awk -F' ' '{print $7}' > ${TMPTEMP}.cont.tmp fi #VER_UID=${UID_OX:0:1} #if [ $UID_OX == ] #rm -f ${IMAP_PATH}/q/user/$UID_OX/$calal/cyrus* #ls ${IMAP_PATH}/q/user/$UID_OX/$calal/ > ${TMPTEMP}.cont.tmp LINHAS=`cat ${TMPTEMP}.cont.tmp | wc -l`; # abrindo cada arquivo .eml da pasta Calendario no for i in `seq 1 $LINHAS`;do # compartilhamento do drive M na pasta do usuario arqtrabalho1=`sed -n ${i}p ${TMPTEMP}.cont.tmp` if [ $(echo $UID_OX | grep "^[0-9]" ) ] then arqtrabalho="${IMAP_PATH}/q/user/$UID_OX/$calal/$arqtrabalho1" else arqtrabalho="${IMAP_PATH}/${UID_OX:0:1}/user/$UID_OX/$calal/$arqtrabalho1" fi echo "----AGENDAMENTO $i----"; inicio_agenda=$(cat $arqtrabalho | grep -n -m1 "BEGIN:VEVENT" | cut -f1 -d:) if [ -z $inicio_agenda ];then echo -e "erro arquivo sem agendamento" continue; fi fim_agenda=$(cat $arqtrabalho | grep -n -m1 "END:VEVENT" | cut -f1 -d:) difrenca_agenda=$(($fim_agenda-$inicio_agenda)) iconv -f UTF-8 -t LATIN1//TRANSLIT $arqtrabalho > ${TMPTEMP}.tst1 if [ $? == 0 ];then mv ${TMPTEMP}.tst1 $arqtrabalho fi titulo_truck=`cat $arqtrabalho | grep -m1 SUMMARY | cut -f2-8 -d: | tr -d [=\'=] | sed -e 's/\\\//g' | tr -d '\r' | tr -d '\n' ` export titulo=${titulo_truck:0:79} export cidade=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^LOCATION | cut -f2 -d: | tr -d [=\'=]` datainia=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^DTSTART | cut -f2 -d: | sed 's/\\r//g'` explinn=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -n -m1 ^DTSTART | cut -d: -f1) let explinn=$explinn+1 datainib=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | sed -n ${explinn}p | grep -e "^ " | sed -e 's/^ //g') dataini="${datainia}${datainib}" diaini=`echo $dataini | cut -c7-8` mesini=`echo $dataini | cut -c5-6` anoini=`echo $dataini | cut -c1-4` horaini=`echo $dataini | cut -c10-11` minini=`echo $dataini | cut -c12-13` segini=`echo $dataini | cut -c14-15` if [ ! -z $horaini ];then export timestampfield01="$anoini-$mesini-$diaini $horaini:$minini:$segini" else export timestampfield01="$anoini-$mesini-$diaini" fi date -d "$timestampfield01" +%s &> /dev/null if [ $? == 1 ];then export timestampfield01="$anoini-$mesini-$diaini 01:$minini:$segini" fi export ds_start=`date -d "$timestampfield01" +%s` datafima=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^DTEND | cut -f2 -d: | sed 's/\\r//g'` explinn=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -n -m1 ^DTEND | cut -d: -f1) let explinn=$explinn+1 datafimb=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | sed -n ${explinn}p | grep -e "^ " | sed -e 's/^ //g') datafim="${datafima}${datafimb}" #datafim=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^DTEND | cut -f2 -d:` diafim=`echo $datafim | cut -c7-8` mesfim=`echo $datafim | cut -c5-6` anofim=`echo $datafim | cut -c1-4` horafim=`echo $datafim | cut -c10-11` minfim=`echo $datafim | cut -c12-13` segfim=`echo $datafim | cut -c14-15` if [ ! -z $horafim ];then export timestampfield02="$anofim-$mesfim-$diafim $horafim:$minfim:$segfim" else export timestampfield02="$anofim-$mesfim-$diafim" fi date -d "$timestampfield02" +%s &> /dev/null if [ $? == 1 ];then export timestampfield02="$anoini-$mesini-$diaini 01:$minini:$segini" fi export ds_end=`date -d "$timestampfield02" +%s` coment_init=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -n -m1 ^DESCRIPTION | cut -f1 -d:) coment_SEQUE=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -n -m1 ^SEQUENCE | cut -f1 -d:) if [ ! -z $coment_init ];then if [ ! -z $coment_SEQUE ];then coment_fim=$((${coment_SEQUE}-1)) interval=$((${coment_fim}-${coment_init})) echo $interval | grep "-" > /dev/null if [ $? -eq 0 ];then interval=0; fi else interval=0; fi else interval=0; fi export Coment=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -A ${interval} -m1 ^DESCRIPTION | sed 's/DESCRIPTION://g' | sed -e 's/\\\//g' | tr -d [=\'=]` criadoa=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^CREATED | cut -f2 -d: | sed 's/\\r//g'` explinn=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -n -m1 ^CREATED | cut -d: -f1) let explinn=$explinn+1 criadob=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | sed -n ${explinn}p | grep -e "^ " | sed -e 's/^ //g') criado="${datafima}${datafimb}" #criado=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^CREATED | cut -f2 -d:` diacria=`echo $criado | cut -c7-8` mescria=`echo $criado | cut -c5-6` anocria=`echo $criado | cut -c1-4` horacria=`echo $criado | cut -c10-11` mincria=`echo $criado | cut -c12-13` segcria=`echo $criado | cut -c14-15` if [ ! -z $horacria ];then export datacria="$anocria-$mescria-$diacria $horacria:$mincria:$segcria" else export datacria="$anocria-$mescria-$diacria" fi date -d "$datacria" +%s &> /dev/null if [ $? == 1 ];then export datacria="$anoini-$mesini-$diaini 01:$minini:$segini" fi export mdatetime=$(date -d "$datacria" +%s) #modificado=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^LAST-MODIFIED | cut -f2 -d:` #diamod=`echo $modificado | cut -c7-8` #mesmod=`echo $modificado | cut -c5-6` #anomod=`echo $modificado | cut -c1-4` #horacr=`echo $modificado | cut -c10-11` #let horamod=$horacr-3 #minmod=`echo $modificado | cut -c12-13` #segmod=`echo $modificado | cut -c14-15` #export datamodifica="$anomod-$mesmod-$diamod $horamod:$minmod:$segmod" cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE if [ $? -eq 0 ];then # extrai todas as informaÃcoes e verifica o tipo do agendamento tipo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f2 -d= | cut -f1 -d\;` if [ $tipo = "DAILY" ];then #################### Diario ############################## cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep UNTIL if [ $? -eq 0 ];then final=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\;` cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` else export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` fi anofin=`echo $final | cut -c1-4` mesfin=`echo $final | cut -c5-6` diafin=`echo $final | cut -c7-8` horafin=`echo $final | cut -c10-11` minfin=`echo $final | cut -c12-13` segfin=`echo $final | cut -c14-15` tipo1=`echo $tipo | tr 'A-Z' 'a-z'` export timestampfield02="$anofin-$mesfin-$diafin $horafim:$minfim:$segfim" ############# pode ter problema aqui com o edatetime export ds_endS=`date -d "$timestampfield02" +%s` export recurdata=0 export tipop=M export recurtype=1 put_agenda else cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep COUNT if [ $? -eq 0 ];then contagem=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\; ) cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` else intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` fi else contagem=1500; cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep ^RRULE | cut -f3 -d= | grep INTERVAL if [ $? -eq 0 ];then intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` else intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\;` fi fi tipo1=`echo $tipo | tr 'A-Z' 'a-z'` #let anofim1=$anofim+4 export tipop=M export recurtype=1 export recurdata=0 #export timestampfield02="$anofim1-$mesfim-$diafim $horafim:$minfim:$segfim" #ds_endS=`date -d "$timestampfield02" +%s` somar_dias=$((86400*$contagem)) export ds_endS=$(($ds_start+$somar_dias)) put_agenda fi elif [ $tipo = "WEEKLY" ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep UNTIL if [ $? -eq 0 ];then ######################## Semanal ################################### t=3 final=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then let t=$t+2 export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` else let t=$t+1 export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` fi let t=$t+1 diasem=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` anofin=`echo $final | cut -c1-4` mesfin=`echo $final | cut -c5-6` diafin=`echo $final | cut -c7-8` horafin=`echo $final | cut -c10-11` minfin=`echo $final | cut -c12-13` segfin=`echo $final | cut -c14-15` tipo1=`echo $tipo | tr 'A-Z' 'a-z'` export timestampfield02="$anofin-$mesfin-$diafin $horafim:$minfim:$segfim" export ds_endS=`date -d "$timestampfield02" +%s` rpt=`echo $diasem | awk -F',' '{print NF}'` export tipop=M export recurtype=2 recurdata=0; for h in `seq 1 $rpt`;do dia=`echo $diasem | cut -f$h -d\, | sed 's/ //g' | sed 's/\\r//g'` if [ $dia = "SU" ];then conta=0 elif [ $dia = "MO" ];then conta=1 elif [ $dia = "TU" ];then conta=2 elif [ $dia = "WE" ];then conta=3 elif [ $dia = "TH" ];then conta=4 elif [ $dia = "FR" ];then conta=5 elif [ $dia = "SA" ];then conta=6 fi export recurdata=$(($recurdata+2**$conta)) done put_agenda else cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep COUNT if [ $? -eq 0 ];then contagem=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\; ) cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` diasem=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d=` else export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` diasem=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` fi else contagem=214 cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep ^RRULE | cut -f3 -d= | grep INTERVAL if [ $? -eq 0 ];then export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` diasem=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d=` else export intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\;` diasem=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` fi fi #let anofim1=$anofim+4 #export timestampfield02="$anofim1-$mesfim-$diafim $horafim:$minfim:$segfim" #export ds_endS=`date -d "$timestampfield02" +%s` somar_semanas=$((604800*$contagem)) export ds_endS=$(($ds_start+$somar_semanas)) rpt=`echo $diasem | awk -F',' '{print NF}'` tipo1=`echo $tipo | tr 'A-Z' 'a-z'` export tipop=M export recurtype=2 recurdata=0; for h in `seq 1 $rpt`;do dia=`echo $diasem | cut -f$h -d, | sed 's/\\r//g'` if [ $dia = "SU" ];then conta=0 elif [ $dia = "MO" ];then conta=1 elif [ $dia = "TU" ];then conta=2 elif [ $dia = "WE" ];then conta=3 elif [ $dia = "TH" ];then conta=4 elif [ $dia = "FR" ];then conta=5 elif [ $dia = "SA" ];then conta=6 fi export recurdata=$(($recurdata+2**$conta)) done put_agenda fi elif [ $tipo = "MONTHLY" ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep UNTIL if [ $? -eq 0 ];then ############################# Mensal ################################### t=3 final=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then let t=$t+2 intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` else let t=$t+1 intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` fi let t=$t+1 diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | cut -f1 -d\;` anofin=`echo $final | cut -c1-4` mesfin=`echo $final | cut -c5-6` diafin=`echo $final | cut -c7-8` horafin=`echo $final | cut -c10-11` minfin=`echo $final | cut -c12-13` segfin=`echo $final | cut -c14-15` tipoum=`echo $tipo | tr 'A-Z' 'a-z'` export timestampfield02="$anofin-$mesfin-$diafin $horafim:$minfim:$segfim" export ds_endS=`date -d "$timestampfield02" +%s` echo $diames | grep [A-Z] if [ $? -eq 0 ];then tipop=M recurtype=4 export recurdata=0 else tipop=M recurtype=3 recurdata=0 fi put_agenda else cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep COUNT if [ $? -eq 0 ];then contagem=$(cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\; ) cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d=` else intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` fi else contagem=50; cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | grep INTERVAL if [ $? -eq 0 ];then intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d=` else intervalo=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` fi fi #let anofim1=$anofim+4 tipoum=`echo $tipo | tr 'A-Z' 'a-z'` #export timestampfield02="$anofim1-$mesfim-$diafim $horafim:$minfim:$segfim" #export ds_endS=`date -d "$timestampfield02" +%s` somar_meses=$((2678400*$contagem)) export ds_endS=$(($ds_start+$somar_meses)) echo $diames | grep [A-Z] if [ $? -eq 0 ];then tipop=M recurtype=4 recurdata=0; else tipop=M recurtype=3 recurdata=0 fi put_agenda fi elif [ $tipo = "YEARLY" ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep UNTIL if [ $? -eq 0 ];then ################################# Anual ################################# final=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | cut -f1 -d\;` anofin=`echo $final | cut -c1-4` mesfin=`echo $final | cut -c5-6` diafin=`echo $final | cut -c7-8` horafin=`echo $final | cut -c10-11` minfin=`echo $final | cut -c12-13` segfin=`echo $final | cut -c14-15` tipoum=`echo $tipo | tr 'A-Z' 'a-z'` export timestampfield02="$anofin-$mesfin-$diafin $horafim:$minfim:$segfim" export ds_endS=`date -d "$timestampfield02" +%s` cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then t=5 else t=4 fi cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | grep BYMONTH if [ $? -ne 0 ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep BYSETPOS if [ $? -eq 0 ];then diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f8 -d= | cut -f1 -d\;` mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d=` ordem=-1 else diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d= | cut -f1 -d\;` mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f7 -d= | cut -f1 -d\;` fi else diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d= | cut -f1 -d\;` fi fi tipop=M recurtype=5 intervalo=1 export recurdata=0 put_agenda else let anofim1=$anofim+4 tipoum=`echo $tipo | tr 'A-Z' 'a-z'` export timestampfield02="$anofim1-$mesfim-$diafim $horafim:$minfim:$segfim" export ds_endS=`date -d "$timestampfield02" +%s` cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | grep COUNT if [ $? -eq 0 ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then t=5 else t=4 fi cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | grep BYMONTH if [ $? -eq 0 ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f7 -d=` else mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d= | cut -f1 -d\;` fi else cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | grep INTERVAL if [ $? -eq 0 ];then diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d= | cut -f1 -d\;` mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f7 -d=` else diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d= | cut -f1 -d\;` fi fi else cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | grep INTERVAL if [ $? -eq 0 ];then t=4 else t=3 fi cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f$t -d= | grep BYMONTH if [ $? -eq 0 ];then cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | grep INTERVAL if [ $? -eq 0 ];then mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d=` else mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` fi else cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f3 -d= | grep INTERVAL if [ $? -eq 0 ];then diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f6 -d=` else diames=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f4 -d= | cut -f1 -d\;` mes=`cat $arqtrabalho | grep -A $difrenca_agenda BEGIN:VEVENT | grep -m1 ^RRULE | cut -f5 -d= | cut -f1 -d\;` fi fi fi tipop=M recurtype=5 intervalo=1 export recurdata=0 put_agenda fi fi else ################## sem recorrencia ########################################## export tipop=E hostbanco="-@$EXP_HOST" echo -e " INSERT INTO phpgw_cal ( cal_id, uid, owner, datetime, mdatetime, edatetime, priority,cal_type,is_public,title, location, description, reference ) VALUES ( DEFAULT,'$hostbanco','$UID_NUMBER','$ds_start','$mdatetime','$ds_end', 2,'$tipop',1,E'$titulo',E'$cidade',E'$Coment', 0);" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass echo -e " select max(cal_id) from phpgw_cal where owner='$UID_NUMBER';" > $exparqsql ID_ATUAL_CALL=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CALD=`echo $ID_ATUAL_CALL | cut -f3 -d" "` ID_ATUAL_CAL=$ID_ATUAL_CALD echo -e "INSERT INTO phpgw_cal_user ( cal_id, cal_login, cal_status, cal_type) VALUES ( '$ID_ATUAL_CAL','$UID_NUMBER','A','u');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass fi done su cyrus -c "$reconstruct -C $conf_cyrus -f -r user/$UID_OX/Calendar" su cyrus -c "$squatter -C $conf_cyrus -s -r user/$UID_OX/Calendar" su cyrus -c "$imap_cria -u $EXP_ADMIN -p $EXP_ADMIN_PASSWD -d -s -m $UID_OX/Calendar $EXP_IMAP_HOST" #rm -Rdf ${IMAP_PATH}/q/user/$UID_OX/$calal rm -f ${TMPTEMP}.cont.tmp } ################################################################ ############## buscando usuario e extraindo dados ############## ################################################################ busca_usuarios() { #Pesquisa do usuario no diretorio #ldapsearch -x -D "${MS_ATTR}=${MSADMUSR},${MS_LDAPADM_SUF}" -w "${MSADMPASS}" -b "${MS_LDAP_SUF}" -H "ldap://${MSHOSTLDAP}" mailNickname="${LOGINUSR}" cn sn cl l name st department extensionAttribute2 extensionAttribute4 homeMDB title description postalCode physicalDeliveryOfficeName telephoneNumber mail -LLL > ${TMPLDIF}; if [ $? -ne 0 ]; then echo -e "ERRO: O usuario $1 nao foi encontrado na base AD do MS Exchange!"; #exit 1; else #Extracao dos atributos necessarios # VARORGAO=`sed -e '/^physicalDeliveryOfficeName:/!d;s/physicalDeliveryOfficeName://g' $TMPLDIF`; # if [ -z "$VARORGAO" ];then # VARORGAO=vazio # fi # VARCARGO=`sed -e '/^title:/!d;s/title://g' $TMPLDIF`; # if [ -z "$VARCARGO" ];then # VARCARGO=vazio # fi # VARMAT=`sed -e '/^extensionAttribute2:/!d;s/extensionAttribute2://g' $TMPLDIF`; # if [ -z "$VARMAT" ];then # VARMAT=vazio # fi #VARSN=`sed -e '/^sn:/!d;s/sn:\ //g' $TMPLDIF`; #if [ -z "$VARSN" ];then # VARSN=vazio #fi #VARSN=`echo ${VARSN:-vazio}`; #NOME=`sed -e '/^cn:/!d;s/cn:\ //g' -e "s/$VARSN$//g" $TMPLDIF`; #if [ -z "$NOME" ];then # NOME=vazio #fi #NOME=`echo ${NOME:-vazio}`; #VARST=`sed -e '/^st:/!d;s/st:\ //g' $TMPLDIF`; #if [ -z "$VARST" ];then # VARST=vazio #fi #VARST=`echo ${VARST:-vazio}`; #VARDESCRIPTION=`sed -e '/^description:/!d;s/description://g' $TMPLDIF`; #if [ -z "$VARDESCRIPTION" ];then # VARDESCRIPTION=vazio #fi #VARDESCRIPTION=`echo ${VARDESCRIPTION:-vazio}`; #VARL=`sed -e '/^l:/!d;s/l:\ //g' $TMPLDIF`; #if [ -z "$VARL" ];then # VARL=vazio #fi #VARL=`echo ${VARL:-vazio}`; #VARTELNUMBER=`sed -e '/^telephoneNumber:/!d;s/telephoneNumber://g' $TMPLDIF`; #if [ -z "$VARTELNUMBER" ];then # VARTELNUMBER=vazio #fi #VARRAMAL=`echo $VARTELNUMBER | cut -f2 -d"-"`; #if [ -z "$VARRAMAL" ];then # VARRAMAL=vazio #fi #VARTELNUMBER=`echo ${VARTELNUMBER:-vazio}`; #VARTITLE=`sed -e '/^title:/!d;s/title:\ //g' $TMPLDIF`; #if [ -z "$VARTITLE" ];then # VARTITLE=vazio #fi #VARTITLE=`echo ${VARTITLE:-vazio}`; #VARDEPARTAMENTO=`sed -e '/^department:/!d;s/department:\ //g' $TMPLDIF`; #if [ -z "$VARDEPARTAMENTO" ];then # VARDEPARTAMENTO=vazio #fi #VARDEPARTAMENTO=`echo ${VARDEPARTAMENTO:-vazio}`; #VARMAIL=`sed -e '/^mail:\ [a-zA-Z]/!d;s/mail:\ //g' $TMPLDIF`; #if [ -z "$VARMAIL" ];then # VARMAIL=vazio #fi #VARMAIL=`echo ${VARMAIL:-vazio}`; #VARFULLNAME=`sed -e '/^displayName:\ [a-zA-Z]/!d;s/displayName:\ //g' $TMPLDIF`; #if [ -z "$VARFULLNAME" ];then # VARFULLNAME=vazio #fi export UID_OX=$VARCPF echo -e "\n\n===>Migrando o usuario ${VARCPF}\n\n"; #paralelo #ldapsearch -x -D "$EXP_LDAP_ADM" -w "$EXP_LDAP_ADM_PASS" -b "$EXP_LDAP_SUF" -h $EXP_LDAP_HOST uid=$VARCPF gidNumber uidNumber userPassword description -LLL d=$VARCPF > /tmp/UID.txt UIDTEMP="${TMPTEMP}.uid" ldapsearch -x -D "$EXP_LDAP_ADM" -w $EXP_LDAP_ADM_PASS -b "$EXP_LDAP_SUF" -h $EXP_LDAP_HOST uid=$VARCPF gidNumber uidNumber userPassword description -LLL > $UIDTEMP if [ $? -eq 1 ];then echo -e "ERRO: O usuario $1 nao foi encontrado na base RHDS do Expresso!"; exit 1; else export DESCRIPTION=$(sed -e '/^description:/!d;s/description:\ //g' $UIDTEMP) export UID_NUMBER=$(sed -e '/^uidNumber:/!d;s/uidNumber:\ //g' $UIDTEMP) export GID_NUMBER=$(sed -e '/^gidNumber:/!d;s/gidNumber:\ //g' $UIDTEMP) DNN=$(sed -e '/^dn:/!d;s/dn:\ //g' $UIDTEMP) explinn=$(cat $UIDTEMP | grep -n -e "^dn" | cut -d: -f1) let explinn=$explinn+1 DNB=$(sed -n ${explinn}p $UIDTEMP | grep -e "^ " | sed -e 's/^ //g') export DN="${DNN}${DNB}" SENHAA=$(sed -e '/^userPassword:/!d;s/userPassword::\ //g' $UIDTEMP) explin=$(cat $UIDTEMP | grep -n -e "^userPassword" | cut -d: -f1) let explin=$explin+1 SENHAB=$(sed -n ${explin}p $UIDTEMP | grep -e "^ " | sed -e 's/^ //g') SENHA="${SENHAA}${SENHAB}" SENHAEXP=`echo $SENHA | openssl enc -base64 -d` echo $SENHA rm -f $UIDTEMP fi adicionar_usuario if [ $? -eq 0 ]; then echo " ==>Enviando mensagem de migracao para o usuario"; #echo -e "Sua conta do MS Exchange foi migrada para o OpenXchange!!!" | mail $LOGINUSR@$MSDOMAIN; #if [ $? -ne 0 ]; then # echo -e " Falha no envio da mensagem\n"; #else SENHAP=`slappasswd -h {SSHA} -s $SENHAPADRAO` echo -e "dn: $DN\nchangetype: modify\nreplace: userPassword\nuserPassword: $SENHAP\n" | ldapmodify -x -D "$EXP_LDAP_ADM" -w $EXP_LDAP_ADM_PASS -h $EXP_LDAP_HOST; sleep 5; #ALTERAR a variavel SENHAPADRAO_UM para SENHAPADRAO no imapsync -> alterado para testes de migracao susep #SENHAPADRAO_UM=teste imapsync --host1 $MSHOST --user1 $LOGINUSR --authmech1 LOGIN --password1 $SENHAPADRAO --host2 $EXP_IMAP_HOST --user2 $UID_OX --authmech2 LOGIN --password2 $SENHAPADRAO --regextrans2 's/\)/-/' --regextrans2 's/^INBOX\/Deleted\ Items/INBOX\/Trash/' --regextrans2 's/^INBOX\/Mensagens\ exclu&AO0-das/INBOX\/Trash/' --regextrans2 's/^INBOX\/Calend&AOE-rio/INBOX\/Calendar/' --regextrans2 's/^INBOX\/INBOX/INBOX/' --regextrans2 's/^INBOX\/Sent\ Items/INBOX\/Sent/' --regextrans2 's/^INBOX\/Rascunhos/INBOX\/Drafts/' --regextrans2 's/^INBOX\/Mensagens\ enviadas/INBOX\/Sent/' --exclude 'Contacts' --exclude 'Contatos' --exclude 'Di&AOE-rio' --exclude 'Journal' --exclude 'Notes' --exclude 'Anota&AOcA9Q-es' --exclude 'Outbox' --exclude 'Caixa\ de\ sa&AO0-da' --exclude 'Spam\ Mail' --exclude 'Tarefas' --exclude 'Tasks' --exclude 'Public\ Folders' --exclude 'Pastas\ P&APo-blicas' --exclude 'Lixo\ eletr&APQ-nico' --exclude 'Problemas\ de\ Sincroniza&AOcA4w-o' --subscribe #imapsync --host1 $MSHOST --user1 $LOGINUSR --authmech1 LOGIN --password1 $SENHAPADRAO --host2 $EXP_IMAP_HOST --user2 $UID_OX --authmech2 LOGIN --password2 $SENHAPADRAO --regextrans2 's/^INBOX\/Mensagens\ excluídas/INBOX\/Trash/' --regextrans2 's/^INBOX\/Mensagens\ enviadas/INBOX\/Sent/' --regextrans2 's/^INBOX\/Rascunhos/INBOX\/Drafts/' --regextrans2 's/^INBOX\/INBOX/INBOX/' --exclude 'Contacts' --exclude 'Journal' --exclude 'Notes' --exclude 'Outbox' --exclude 'Spam\ Mail' --exclude 'Tasks' --exclude 'Public\ Folders' --exclude 'Lixo\ eletr&APQ-nico' --exclude 'Problemas\ de\ Sincroniza&AOcA4w-o' --subscribe #sleep 2; #Retorno da senha do Rhds para o valor antigo #echo -e "dn: $DN\nchangetype: modify\nreplace: userPassword\nuserPassword: $SENHAEXP\n" | ldapmodify -x -D "$EXP_LDAP_ADM" -w $EXP_LDAP_ADM_PASS -h $EXP_LDAP_HOST; migrar_agenda if [ $? -eq 0 ]; then echo -e " \n\n ##### agendamentos do usuario $NOME migrados com sucesso ######## \n\n"; else echo -e " \n\n ##### ERRO ao migrar agendamentos do $NOME ####### \n\n"; fi migrar_contatos if [ $? -eq 0 ]; then echo -e " \n\n ##### Contatos do usuario $NOME migrados com sucesso ######## \n\n"; else echo -e " \n\n ##### ERRO ao migrar contatos ####### \n\n"; fi su cyrus -c "$reconstruct -C $conf_cyrus -f -r user/$UID_OX" su cyrus -c "$squatter -C $conf_cyrus -s -r user/$UID_OX" #FIRSTCHAR=$(echo $UID_OX | grep -o "^." ) #if [ $(echo $UID_OX | grep "^[0-9]" ) ]; then # rm -f /usr/lib/imap/quota/q/user.$UID_OX #else # rm -f /usr/lib/imap/quota/${UID_OX:0:1}/user.$UID_OX #fi su cyrus -c "$imap_cria -u $EXP_ADMIN -p $EXP_ADMIN_PASSWD -s -m $UID_OX -q $PER $EXP_IMAP_HOST" su cyrus -c "$quota -C $conf_cyrus -f user/$UID_OX" su cyrus -c "$reconstruct -C $conf_cyrus -r user/$UID_OX" su cyrus -c "$squatter -C $conf_cyrus -s -r user/$UID_OX" else echo "********************************************************************************" echo "ERRO: Nao foi possivel adicionar o usuario ${LOGINUSR} no Expresso!" | tee -a $ARQUIVODELOG; echo "********************************************************************************" fi fi; } ################################################################################ ################### Adicionando Usuario ######################################## ################################################################################ function adicionar_usuario() { #Adicao do usuario no EXP #${ADDLOGINUSR_CMD} --username="${VARCPF}" --passwd="${PASS}" --name="${NOME}" --sname="${VARSN}" --maildomain="${EXP_DOMINIO}" --EXP_timezone='America/Sao_Paulo' --email="${VARMAIL}" --estado="${VARST}" --cidade="${VARL}" --ramal="${VARRAMAL}" --telefone="${VARTELNUMBER}" --perfil="${VARPERFIL}" --cargo="${VARCARGO}" --observacoes="${VARDESCRIPTION}" --orgao="${VARORGAO}" --matricula="${VARMAT}" --lotacao="${VARDEPARTAMENTO}" sleep 1; #$ADDLOGINUSRTOGROUP_CMD --user="$VARCPF" --group=users; mail1=`echo $mail | cut -f1 -d@` mail2="$LOGINUSR@$EXP_DOMINIO" mail3="$mail1@$EXP_DOMINIO" ldapsearch -x -D "$EXP_LDAP_ADM" uid=${VARCPF} -b "$EXP_LDAP_SUF" uid -LLL -w $EXP_LDAP_ADM_PASS -h $EXP_LDAP_HOST if [ $? -eq 0 ]; then echo -e "dn: $DN\nchangetype: modify\nadd: mailAlternateAddress\nmailAlternateAddress: $mail3\n-\nadd: phpgwAccountExpires\nphpgwAccountExpires: -1\n-\nadd: phpgwAccountStatus\nphpgwAccountStatus: A\n-\nadd: phpgwAccountType\nphpgwAccountType: u\n-\nadd: accountStatus\naccountStatus: active\n-\nadd: objectclass\nobjectclass: phpgwaccount\n" | ldapmodify -x -D "$EXP_LDAP_ADM" -w $EXP_LDAP_ADM_PASS -h $EXP_LDAP_HOST echo -e "dn: $grupo\nchangetype: modify\nadd: memberUid\nmemberUid: ${VARCPF}" | ldapmodify -x -D "$EXP_LDAP_ADM" -w $EXP_LDAP_ADM_PASS -h $EXP_LDAP_HOST ## colocar no ldapmodify de cima ' -\nadd: objectclass\nobjectclass: phpgwaccount\n ' echo $EXP_PG_PASS > ${TMPTEMP}.db.pass; adicionar_banco adicionar_imap else false; fi; } #################################################### ################# Contatos ######################### #################################################### migrar_contatos() { #Busca o caminho de acesso ao WebAccess PREFIXO="${MSPROT}://${MSHOST}/exchange/${LOGCONT}" # Checa se a interface do WebAccess esta em Pt ou En lynx --accept_all_cookies -dump -auth=${USRROOT}:"${USRROOTPASS}" -nolist "$PREFIXO?Cmd=navbar" | grep -i contatos > /dev/null if [ $? -eq 0 ]; then strContact="Contatos" else strContact="Contacts" fi # Arquivo base de armazenamento temporario das informacoes do contato do usuario CAMPOS="Job_title#oxuserposition # Company#o Department#ou Business_Phone#TelephoneNumber Home_Phone#HomePhone Mobile_Phone#Mobile E-mail#mail # Business_Address# Assistant_Phone#OXUserTeleAssistant Business_Fax#FacsimileTelephoneNumber # Callback_Phone#oxusertelecallback Company_Phone#OXUserTeleCompany Home_Phone_2#OXUserTeleHome2 # Home_Fax#OtherFacsimiletelephoneNumber ISDN#internationaliSDNNumber Other_Phone#OXUserTeleOther # Other_fax#OXUserTeleFax2 Car_Phone#pager E-mail_2#OXUserEmail2 E-mail_3#OXUserEmail3 Home_Address# Other_Address# # Web_Page#url" CAMPOS=" Business_Phone#TelephoneNumber Home_Phone#HomePhone Mobile_Phone#Mobile E-mail#mail Business_Fax#FacsimileTelephoneNumber E-mail_2#OXUserEmail2" cont=0; BirthDate=null ALIAS=null Notes=null #for k in $( seq 1 `lynx --accept_all_cookies -dump -auth=${USRROOT}:"${USRROOTPASS}" -nolist "${PREFIXO}/${strContact}/?Cmd=contents&Page=1&View=Detailed%20Address%20Cards" | sed '/Next Page/!d' | sed 's/.*\([0-9]\)/\1/g;s/\([0-9]*\).*/\1/g'` ); do #for k in $( seq 1 `lynx --accept_all_cookies -dump -auth=${USRROOT}:"${USRROOTPASS}" -nolist "${PREFIXO}/${strContact}/?Cmd=contents&Page=1&View=Detailed%20Address%20Cards" | sed '/Next Page/!d' | awk -F ' ' '{print $5}'`); do for k in $( seq 1 `lynx --accept_all_cookies -dump -auth=${USRROOT}:"${USRROOTPASS}" -nolist "${PREFIXO}/${strContact}/?Cmd=contents&Page=1&View=Detailed%20Address%20Cards" | sed '/Next Page/!d' | tr -d [:alpha:],[:blank:],[=_=],[=:=],[=-=] | iconv -f LATIN1 -t UTF-8 | sed 's/çã//g'`); do lynx --accept_all_cookies -dump -auth=${USRROOT}:"${USRROOTPASS}" -nolist "${PREFIXO}/${strContact}/?Cmd=contents&Page=$k&View=Detailed%20Address%20Cards" > ${ARQUIVO} iconv -f LATIN1 -t LATIN1 $ARQUIVO > ${TMPTEMP}.tst1 mv ${TMPTEMP}.tst1 $ARQUIVO echo $EXP_PG_PASS > /tmp/EXPsenhadb.txt; for i in $(seq 1 `cat ${ARQUIVO} | grep '\[_\]' | wc -l`); do let cont=${cont}+1 echo "----CONTATO $cont----"; echo "Migrando Contato" cat ${ARQUIVO} | grep -n '\[_\]' | cut -f1 -d: > ${TMPTEMP}.linhas.tmp cat ${ARQUIVO} | wc -l >> ${TMPTEMP}.linhas.tmp Lent=`sed -n ${i}p ${TMPTEMP}.linhas.tmp` let i=${i}+1 Lfim=`sed -n ${i}p ${TMPTEMP}.linhas.tmp` let i=${i}-1 let j=${Lfim}-${Lent} more +$Lent ${ARQUIVO} | grep -m 1 '\[_\]' | sed -e 's/\[_\]//g' | grep -e "(" > /dev/null if [ $? == 0 ];then NameOrdered=$(more +$Lent ${ARQUIVO} | grep -m 1 '\[_\]' | sed -e 's/\[_\]//g' | sed -e 's/ //g' | tr -d [=\'=]) GivenName="" FamilyName="" else nome=`more +$Lent ${ARQUIVO} | grep -m 1 '\[_\]' | sed -e 's/\[_\]//g' | awk -F',' '{print $2}' | sed -e 's/ //g' | tr -d [=\'=] ` if [ -z "$nome" ];then nome="" fi Nultimo=`more +$Lent ${ARQUIVO} | grep -m 1 '\[_\]' | sed -e 's/\[_\]//g' | awk -F',' '{print $1}' | sed -e 's/ //g' | tr -d [=\'=] ` if [ -z "$Nultimo" ];then Nultimo="" fi GivenName=$nome FamilyName=$Nultimo if [ ! -z "$nome" ];then NameOrdered="$nome $Nultimo" else NameOrdered="$Nultimo" fi fi echo -e " select max(id_contact) from phpgw_cc_contact;" > $exparqsql ID_ATUAL_COT=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_COTT=`echo $ID_ATUAL_COT | cut -f3 -d" "` let PROX_ID=$ID_ATUAL_COTT+1; echo -e " INSERT INTO phpgw_cc_contact ( id_contact, id_owner, id_status, alias, given_names,family_names,names_ordered, birthdate, notes, is_global ) VALUES ( '$PROX_ID', '$UID_NUMBER', 1,E'$ALIAS',E'$GivenName',E'$FamilyName',E'$NameOrdered', $BirthDate,E'$Notes', 'FALSE' );" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass for v in $CAMPOS;do CAMPOMS=`echo ${v} | cut -f1 -d#` CAMPOOX=`echo ${v} | cut -f2 -d#` CAMPOMS2=`echo $CAMPOMS | tr -s '_' ' '` valor=$(more +${Lent} ${ARQUIVO} | grep -A $j -m 1 '\[_\]' | grep -m 1 "$CAMPOMS2" | sed -e 's/ //g' | awk -F "$CAMPOMS2" '{print $2}' | sed 's/^ //g' | tr -d [=\'=]) if [ ! -z "$valor" ];then if [ $CAMPOOX = "TelephoneNumber" ];then echo $valor | grep "[a-zA-Z]" > /dev/null if [ $? == 1 ];then Comercial=$valor else comercial=""; fi elif [ $CAMPOOX = "HomePhone" ];then echo $valor | grep "[a-zA-Z]" > /dev/null if [ $? == 1 ];then Residencial=$valor else Residencial=""; fi elif [ $CAMPOOX = "Mobile" ];then echo $valor | grep "[a-zA-Z]" > /dev/null if [ $? == 1 ];then Celular=$valor else Celular=""; fi elif [ $CAMPOOX = "mail" ];then echo $valor | grep "[a-zA-Z]" > /dev/null if [ $? == 0 ];then Principal=$valor else Principal="" fi elif [ $CAMPOOX = "FacsimileTelephoneNumber" ];then echo $valor | grep "[a-zA-Z]" > /dev/null if [ $? == 1 ];then Fax=$valor else Fax=""; fi elif [ $CAMPOOX = "OXUserEmail2" ];then echo $valor | grep "[a-zA-Z]" > /dev/null if [ $? == 0 ];then Alternativo=$valor else Alternativo=""; fi fi else if [ $CAMPOOX = "TelephoneNumber" ];then Comercial="" elif [ $CAMPOOX = "HomePhone" ];then Residencial="" elif [ $CAMPOOX = "Mobile" ];then Celular="" elif [ $CAMPOOX = "mail" ];then Principal="" elif [ $CAMPOOX = "FacsimileTelephoneNumber" ];then Fax="" elif [ $CAMPOOX = "OXUserEmail2" ];then Alternativo="" fi fi done tipo1=0 tipo2=0 Principal=$Principal if [ -z "$Principal" ];then Principal="" else echo -e " select max(id_connection) from phpgw_cc_connections;" > $exparqsql ID_ATUAL_CON=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CONN=`echo $ID_ATUAL_CON | cut -f3 -d" "` let PROXC_ID=$ID_ATUAL_CONN+1; echo -e " INSERT INTO phpgw_cc_connections ( id_connection, connection_name, connection_value, connection_is_default ) VALUES ( '$PROXC_ID', 'Principal', '$Principal', 'FALSE');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass echo -e " INSERT INTO phpgw_cc_contact_conns ( id_contact, id_connection, id_typeof_contact_connection) VALUES ( '$PROX_ID', '$PROXC_ID', 1);" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass let tipo1=$tipo1+1 fi Alternativo=$Alternativo if [ -z "$Alternativo" ];then Alternativo="" else echo -e " select max(id_connection) from phpgw_cc_connections;" > $exparqsql ID_ATUAL_CON=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CONN=`echo $ID_ATUAL_CON | cut -f3 -d" "` let PROXC_ID=$ID_ATUAL_CONN+1; echo -e " INSERT INTO phpgw_cc_connections ( id_connection, connection_name , connection_value,connection_is_default ) VALUES ( '$PROXC_ID', 'Alternativo', '$Alternativo', 'FALSE');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass echo -e " INSERT INTO phpgw_cc_contact_conns ( id_contact, id_connection, id_typeof_contact_connection ) VALUES ( '$PROX_ID', '$PROXC_ID', 1);" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass let tipo1=$tipo1+2 fi Comercial=$Comercial if [ -z "$Comercial" ];then Comercial="" else echo -e " select max(id_connection) from phpgw_cc_connections;" > $exparqsql ID_ATUAL_CON=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CONN=`echo $ID_ATUAL_CON | cut -f3 -d" "` let PROXC_ID=$ID_ATUAL_CONN+1; echo -e " INSERT INTO phpgw_cc_connections ( id_connection, connection_name, connection_value,connection_is_default ) VALUES ( '$PROXC_ID', 'Comercial', '$Comercial', 'FALSE');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass echo -e " INSERT INTO phpgw_cc_contact_conns ( id_contact, id_connection, id_typeof_contact_connection) VALUES ( '$PROX_ID', '$PROXC_ID', 2);" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass let tipo2=$tipo2+2 fi Residencial=$Residencial if [ -z "$Residencial" ];then Residencial="" else echo -e " select max(id_connection) from phpgw_cc_connections;" > $exparqsql ID_ATUAL_CON=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CONN=`echo $ID_ATUAL_CON | cut -f3 -d" "` let PROXC_ID=$ID_ATUAL_CONN+1; echo -e " INSERT INTO phpgw_cc_connections ( id_connection, connection_name, connection_value, connection_is_default ) VALUES ( '$PROXC_ID', 'Residencial', '$Residencial', 'FALSE');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass echo -e " INSERT INTO phpgw_cc_contact_conns ( id_contact, id_connection, id_typeof_contact_connection) VALUES ( '$PROX_ID', '$PROXC_ID', 2);" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass let tipo2=$tipo2+4 fi Celular=$Celular if [ -z "$Celular" ];then Celular="" else echo -e " select max(id_connection) from phpgw_cc_connections;" > $exparqsql ID_ATUAL_CON=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CONN=`echo $ID_ATUAL_CON | cut -f3 -d" "` let PROXC_ID=$ID_ATUAL_CONN+1; echo -e " INSERT INTO phpgw_cc_connections ( id_connection, connection_name, connection_value,connection_is_default ) VALUES ( '$PROXC_ID', 'Celular', '$Celular', 'FALSE');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass echo -e " INSERT INTO phpgw_cc_contact_conns ( id_contact, id_connection, id_typeof_contact_connection) VALUES ( '$PROX_ID', '$PROXC_ID', 2);" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass let tipo2=$tipo2+8 fi Fax=$Fax if [ -z "$Fax" ];then Fax="" else echo -e " select max(id_connection) from phpgw_cc_connections;" > $exparqsql ID_ATUAL_CON=`psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass` ID_ATUAL_CONN=`echo $ID_ATUAL_CON | cut -f3 -d" "` let PROXC_ID=$ID_ATUAL_CONN+1; echo -e " INSERT INTO phpgw_cc_connections ( id_connection, connection_name, connection_value,connection_is_default ) VALUES ( '$PROXC_ID', 'Fax', '$Fax', 'FALSE');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass let tipo2=$tipo2+16 fi tipo=`expr 1 \& $tipo1` if [ $tipo -eq 1 ];then echo -e " UPDATE phpgw_cc_connections set connection_is_default='TRUE' where connection_name='Principal' and id_connection=(select min(id_connection) from phpgw_cc_contact_conns where id_contact='$PROX_ID' and id_typeof_contact_connection='1');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass else tipo=`expr 2 \& $tipo1` if [ $tipo -eq 2 ];then echo -e " UPDATE phpgw_cc_connections set connection_is_default='TRUE' where connection_name='Alternativo' and id_connection=(select min(id_connection) from phpgw_cc_contact_conns where id_contact='$PROX_ID' and id_typeof_contact_connection='2');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass fi fi tipoDois=`expr 2 \& $tipo2` if [ $tipoDois -eq 2 ];then echo -e " UPDATE phpgw_cc_connections set connection_is_default='TRUE' where connection_name='Comercial' and id_connection=(select min(id_connection) from phpgw_cc_contact_conns where id_contact='$PROX_ID' and id_typeof_contact_connection='2' );" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass else tipoDois=`expr 4 \& $tipo2` if [ $tipoDois -eq 4 ];then echo -e " UPDATE phpgw_cc_connections set connection_is_default='TRUE' where connection_name='Residencial' and id_connection=(select min(id_connection) from phpgw_cc_contact_conns where id_contact='$PROX_ID' and id_typeof_contact_connection='2');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass else tipoDois=`expr 8 \& $tipo2` if [ $tipoDois -eq 8 ];then echo -e " UPDATE phpgw_cc_connections set connection_is_default='TRUE' where connection_name='Celular' and id_connection=(select min(id_connection) from phpgw_cc_contact_conns where id_contact='$PROX_ID' and id_typeof_contact_connection='2');" > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass else tipoDois=`expr 16 \& $tipo2` if [ $tipoDois -eq 16 ];then echo -e "UPDATE phpgw_cc_connections set connection_is_default='TRUE' where connection_name='Fax'and id_connection=(select min(id_connection) from phpgw_cc_contact_conns where id_contact='$PROX_ID' and id_typeof_contact_connection='2'); " > $exparqsql psql -U $EXP_PG_USER $EXP_PG_DB -h $EXP_PG_HOST -f $exparqsql < ${TMPTEMP}.db.pass fi fi fi fi done; done; for i in /tmp/contatos*; do rm -f $i; done if [ $(echo $UID_OX | grep "^[0-9]" ) ]; then rm -Rdf ${IMAP_PATH}/q/user/$UID_OX/.$strContact else rm -Rdf ${IMAP_PATH}/${UID_OX:0:1}/user/$UID_OX/.$strContact fi rm -f ${ARQUIVO}-${cont}.ldif rm -f $exparqsql ${TMPTEMP}.db.pass } ################################################################# ################## Limpeza ###################################### ################################################################# usuarios