#!/usr/bin/php criaListas() - le informacoes das listas e seus participantes do * #* LDAP/RHDS e atualiza as listas do MailMan. Caso a lista exista * #* apenas no LDAP/RHDS, ela sera criada no MailMan. * #* * #* -> limpaListas() - verifica se a lista existe no LDAP/RHDS, caso tenha * #* sido removida, a mesma tambem sera removida do MailMan. * #* * #* -> criaLog() - gera o arquivo de log /var/log/sincListasMailManRHDS.log * #* * #\**************************************************************************/ require('functions.php'); require('config.php'); # Funcao que le o Ldap e alimenta o Mailman com as listas, adicionando e/ou removendo os seus participantes. # As listas sao criadas com opcoes de configuracao padronizadas definidas em arquivo de configuracao function criaListas($server, $port, $rootdn, $pass, $basedn, $moderador, $senha) { echo "\nGerando Listas!!!\nAguarde!\n"; $contaListas = 0; $connect=ldap_connect($server,$port); ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_bind($connect, $rootdn, $pass); $filter="(uid=lista*)"; //define filtro de busca (aqui, so o que comeca com "lista"); $justthese = array("uid","mailforwardingaddress","listpass","admlista","defaultmembermoderation","naomoderado"); $sr=ldap_search($connect, $basedn, $filter, $justthese); $info = ldap_get_entries($connect, $sr); $cont = $info['count']; $i = 0; # print_r($info); # Le Ldap e cria arquivos com lista e usuarios while($i <= ($cont-1)) { $infoUid = $info[$i]['uid'][0]; $arquivo = $infoUid; $senhaLista = $info[$i]['listpass'][0]; if ($senhaLista == ""){ $senhaLista = "senha"; } // echo "Senha original -> $senhaLista\n"; $senhaLista = desencriptar($senhaLista); // echo "Senha desencriptada -> $senhaLista\n"; $defaultmembermoderation = $info[$i]['defaultmembermoderation'][0]; $archiveprivate = $info[$i]['archiveprivate'][0]; if ($defaultmembermoderation == ""){ $defaultmembermoderation = 0; } if ($archiveprivate == ""){ $archiveprivate = 0; } // echo "Moderacao -> $defaultmembermoderation\n"; $handle = fopen($arquivo,"w"); // echo "\n"; // echo $info[$i]['uid'][0]."\n"; $j = 0; while($info[$i]['mailforwardingaddress'][$j] != "") { $infoMail = $info[$i]['mailforwardingaddress'][$j]; fwrite($handle, $infoMail."\n"); // echo "\n"; // echo $info[$i]['mailforwardingaddress'][$j]."\n"; $j++; }// fim do while interno, dentro da lista, para recuperar os participantes da mesma $w = 0; $infoAdmLista = ""; while($info[$i]['admlista'][$w] != "") { $infoAdmLista[] = $info[$i]['admlista'][$w]; // $teste = $info[$i]['admlista'][$w]; $w++; }// fim do while interno, dentro da lista, para recuperar os administradores da mesma $z = 0; $infonaomoderado = ""; while($info[$i]['naomoderado'][$z] != "") { $testeNaoModerado = $info[$i]['naomoderado'][$z]; // echo "Usuario nao moderado --------->$testeNaoModerado\n"; $infonaomoderado[] = $info[$i]['naomoderado'][$z]; $z++; }// fim do while interno, dentro da lista, para recuperar os usuarios nao moderados $contanaoModerado = count($infonaomoderado);// numero de usuarios nao moderados // echo "Contagem de nao moderados...->$contanaoModerado\n"; // Testa se lista exite no Mailman $testaLista = "list_admins $infoUid"; $errotestaLista = `$testaLista`; $errotestaLista = trim($errotestaLista); // Se nao existir cria a lista if(($errotestaLista == "Lista inexistente: $infoUid") || ($errotestaLista == "No such list: $infoUid")) { //Gera arquivo de definicoes do mailman na funcao geraArquivoDefault no functions.php geraArquivoDefault($infoUid,$defaultmembermoderation,$infoAdmLista, $archiveprivate); $pesquisa = strtolower($infoUid); $cmd="list_admins $pesquisa"; exec("$cmd", $retorno); $chave = "Lista inexistente: $pesquisa"; $chave2 = "No such list: $pesquisa"; $criaLista = "newlist -q $infoUid $moderador $senhaLista"; if ((in_array("$chave", $retorno)) || (in_array("$chave2", $retorno))){ $erroCrialista = `$criaLista`; $msg1="Gerando lista $infoUid"; echo "$msg1\n"; criaLog($msg1,"sinc"); $contaListas = $contaListas + 1; }else{ $msg2="Lista $infoUid existe!!!"; echo "$msg2\n"; criaLog($msg2,"sinc"); } $definePadrao = "config_list -i $infoUid.def $infoUid"; $msg3="Aplicando politica a lista $infoUid"; echo "$msg3\n"; criaLog($msg3,"sinc"); $erroDefinePadrao = `$definePadrao`; $cmd2="clear"; exec($cmd2); } # Sincroniza usarios e listas $msg2 = "LDAP e Mailman sincronizados ->lista $infoUid"; echo "."; $cmd = "sync_members -f $arquivo $infoUid"; exec($cmd, $resultado); # echo "$msg2\n\n"; criaLog("$msg","sinc"); // $erro = `$cmd`; # echo $erro; // echo "\n"; # Atualiza usuarios nao moderados $listaNaoModerado = strtolower($infoUid); // echo "Nome da lista -------->$listaNaoModerado\n"; if (($contanaoModerado > 1)&&($defaultmembermoderation == 1)) { atualizaModeracao($listaNaoModerado,$infonaomoderado); $contanaoModerado = 0; } $i++; }// fim do while externo, por usuario if($erroCriaLista != "") { criaLog("Erro criando lista -> $erroCriaLista\n","sinc"); } }// fim da funcao criaLista() # Funcao que atualiza o Mailman, caso uma lista seja removida do Ldap, sera removida do Mailman function limpaListas($server, $port, $rootdn, $pass, $basedn){ $connect=ldap_connect($server,$port); ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_bind($connect, $rootdn, $pass); $listaListas = "list_lists -b"; $listaTotal = `$listaListas`; $lista = explode("\n", $listaTotal); $contaLista = count($lista); # echo "lista (vem do Mailman)$contaLista\n"; # print_r($lista); $filter="(uid=lista*)"; $justthese = array("uid"); $sr=ldap_search($connect, $basedn, $filter, $justthese); $info = ldap_get_entries($connect, $sr); $contaLdap = $info['count']; $i = 0; # print_r($info); while ($i <= ($contaLdap-1)) { $novoInfo[] = strtolower($info[$i]["uid"][0]); $i++; } sort($novoInfo); reset($novoInfo); # echo "novoInfo (vem do LDAP)$contaLdap\n"; # print_r($novoInfo); # Compara as listas existentes no LDAP/RHDS e MailMan; se uma nao existe mais no LDAP/RHDS, eh excluida do MailMan. for ($i=0; $i <= ($contaLista - 2); $i++) { if($novoInfo != "") { if (!(in_array($lista[$i], $novoInfo))) { if ($lista[$i] <> "mailman"){ echo "\n lista ok -> $lista[$i]\n"; $removeLista = "rmlist -a $lista[$i]"; exec($removeLista , $resultado); // echo "Resultado -> $resultado\n"; // $erroRemoveLista = `$removeLista`; //Chama funcao de remocao de lista apagaListaMailman($lista[$i]); criaLog("Lista removida -> $lista[$i]\n","sinc"); // echo "Msg -> $erroRemoveLista"; } } }else { if ($lista[$i] <> "mailman"){ $removeLista = "rmlist -a $lista[$i]"; exec($removeLista , $resultado); // $erroRemoveLista = `$removeLista`; // echo "Resultado -> $resultado\n"; apagaListaMailman($lista[$i]); } } } if($erroRemoveLista != "") { criaLog("Erro removendo lista -> $erroRemoveLista\n","sinc"); } } # Chamada da funcao para inclusao no Mailman criaListas($server, $port, $rootdn, $pass, $basedn, $moderador, $senha); $listaListas = "list_lists -b"; exec($listaListas, $resultado); // $resultado = `$listaListas`; # echo $resultado; # Chamada da funcao de exclusao de listas do Mailman limpaListas($server, $port, $rootdn, $pass, $basedn); # Limpa arquivos temporarios $limpaArquivos = "rm -rf listafunc-*"; // $limpa = `$limpaArquivos`; exec($limpaArquivos, $resultado); $limpaArquivos = "rm -rf listacorp-*"; exec($limpaArquivos, $resultado); // $limpa = `$limpaArquivos`; $limpaArquivos = "rm -rf lista*"; exec($limpaArquivos, $resultado); // $limpa = `$limpaArquivos`; echo "\nListas Geradas!!!\n"; ?>