[903] | 1 | #!/usr/bin/php |
---|
| 2 | |
---|
| 3 | |
---|
| 4 | <?php |
---|
| 5 | |
---|
| 6 | |
---|
| 7 | |
---|
| 8 | #/**************************************************************************\ |
---|
| 9 | #* * |
---|
| 10 | #* Este script tem duas funcoes, criaListas() e limpaListas(). * |
---|
| 11 | #* * |
---|
| 12 | #* -> criaListas() - le informacoes das listas e seus participantes do * |
---|
| 13 | #* LDAP/RHDS e atualiza as listas do MailMan. Caso a lista exista * |
---|
| 14 | #* apenas no LDAP/RHDS, ela sera criada no MailMan. * |
---|
| 15 | #* * |
---|
| 16 | #* -> limpaListas() - verifica se a lista existe no LDAP/RHDS, caso tenha * |
---|
| 17 | #* sido removida, a mesma tambem sera removida do MailMan. * |
---|
| 18 | #* * |
---|
| 19 | #* -> criaLog() - gera o arquivo de log /var/log/sincListasMailManRHDS.log * |
---|
| 20 | #* * |
---|
| 21 | #\**************************************************************************/ |
---|
| 22 | |
---|
| 23 | |
---|
| 24 | require('functions.php'); |
---|
| 25 | require('config.php'); |
---|
| 26 | |
---|
| 27 | |
---|
| 28 | # Funcao que le o Ldap e alimenta o Mailman com as listas, adicionando e/ou removendo os seus participantes. |
---|
| 29 | # As listas sao criadas com opcoes de configuracao padronizadas definidas em arquivo de configuracao |
---|
| 30 | function criaListas($server, $port, $rootdn, $pass, $basedn, $moderador, $senha) { |
---|
| 31 | echo "\nGerando Listas!!!\nAguarde!\n"; |
---|
| 32 | $contaListas = 0; |
---|
| 33 | $connect=ldap_connect($server,$port); |
---|
| 34 | |
---|
| 35 | ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); |
---|
| 36 | |
---|
| 37 | ldap_bind($connect, $rootdn, $pass); |
---|
| 38 | |
---|
| 39 | $filter="(uid=lista*)"; //define filtro de busca (aqui, so o que comeca com "lista"); |
---|
| 40 | |
---|
| 41 | $justthese = array("uid","mailforwardingaddress","listpass","admlista","defaultmembermoderation","naomoderado"); |
---|
| 42 | |
---|
| 43 | $sr=ldap_search($connect, $basedn, $filter, $justthese); |
---|
| 44 | $info = ldap_get_entries($connect, $sr); |
---|
| 45 | $cont = $info['count']; |
---|
| 46 | $i = 0; |
---|
| 47 | |
---|
| 48 | # print_r($info); |
---|
| 49 | |
---|
| 50 | # Le Ldap e cria arquivos com lista e usuarios |
---|
| 51 | while($i <= ($cont-1)) { |
---|
| 52 | $infoUid = $info[$i]['uid'][0]; |
---|
| 53 | $arquivo = $infoUid; |
---|
| 54 | $senhaLista = $info[$i]['listpass'][0]; |
---|
| 55 | if ($senhaLista == ""){ |
---|
| 56 | $senhaLista = "senha"; |
---|
| 57 | } |
---|
| 58 | // echo "Senha original -> $senhaLista\n"; |
---|
| 59 | $senhaLista = desencriptar($senhaLista); |
---|
| 60 | // echo "Senha desencriptada -> $senhaLista\n"; |
---|
| 61 | $defaultmembermoderation = $info[$i]['defaultmembermoderation'][0]; |
---|
| 62 | $archiveprivate = $info[$i]['archiveprivate'][0]; |
---|
| 63 | |
---|
| 64 | if ($defaultmembermoderation == ""){ |
---|
| 65 | $defaultmembermoderation = 0; |
---|
| 66 | } |
---|
| 67 | if ($archiveprivate == ""){ |
---|
| 68 | $archiveprivate = 0; |
---|
| 69 | } |
---|
| 70 | |
---|
| 71 | |
---|
| 72 | // echo "Moderacao -> $defaultmembermoderation\n"; |
---|
| 73 | |
---|
| 74 | $handle = fopen($arquivo,"w"); |
---|
| 75 | |
---|
| 76 | // echo "\n"; |
---|
| 77 | // echo $info[$i]['uid'][0]."\n"; |
---|
| 78 | $j = 0; |
---|
| 79 | while($info[$i]['mailforwardingaddress'][$j] != "") { |
---|
| 80 | $infoMail = $info[$i]['mailforwardingaddress'][$j]; |
---|
| 81 | fwrite($handle, $infoMail."\n"); |
---|
| 82 | // echo "\n"; |
---|
| 83 | // echo $info[$i]['mailforwardingaddress'][$j]."\n"; |
---|
| 84 | $j++; |
---|
| 85 | }// fim do while interno, dentro da lista, para recuperar os participantes da mesma |
---|
| 86 | |
---|
| 87 | $w = 0; |
---|
| 88 | |
---|
| 89 | $infoAdmLista = ""; |
---|
| 90 | |
---|
| 91 | while($info[$i]['admlista'][$w] != "") { |
---|
| 92 | $infoAdmLista[] = $info[$i]['admlista'][$w]; |
---|
| 93 | // $teste = $info[$i]['admlista'][$w]; |
---|
| 94 | $w++; |
---|
| 95 | }// fim do while interno, dentro da lista, para recuperar os administradores da mesma |
---|
| 96 | |
---|
| 97 | $z = 0; |
---|
| 98 | |
---|
| 99 | $infonaomoderado = ""; |
---|
| 100 | |
---|
| 101 | |
---|
| 102 | while($info[$i]['naomoderado'][$z] != "") { |
---|
| 103 | $testeNaoModerado = $info[$i]['naomoderado'][$z]; |
---|
| 104 | // echo "Usuario nao moderado --------->$testeNaoModerado\n"; |
---|
| 105 | $infonaomoderado[] = $info[$i]['naomoderado'][$z]; |
---|
| 106 | $z++; |
---|
| 107 | }// fim do while interno, dentro da lista, para recuperar os usuarios nao moderados |
---|
| 108 | |
---|
| 109 | $contanaoModerado = count($infonaomoderado);// numero de usuarios nao moderados |
---|
| 110 | |
---|
| 111 | // echo "Contagem de nao moderados...->$contanaoModerado\n"; |
---|
| 112 | |
---|
| 113 | // Testa se lista exite no Mailman |
---|
| 114 | $testaLista = "list_admins $infoUid"; |
---|
| 115 | $errotestaLista = `$testaLista`; |
---|
| 116 | $errotestaLista = trim($errotestaLista); |
---|
| 117 | |
---|
| 118 | // Se nao existir cria a lista |
---|
| 119 | |
---|
| 120 | if(($errotestaLista == "Lista inexistente: $infoUid") || ($errotestaLista == "No such list: $infoUid")) { |
---|
| 121 | |
---|
| 122 | //Gera arquivo de definicoes do mailman na funcao geraArquivoDefault no functions.php |
---|
| 123 | |
---|
| 124 | geraArquivoDefault($infoUid,$defaultmembermoderation,$infoAdmLista, $archiveprivate); |
---|
| 125 | |
---|
| 126 | $pesquisa = strtolower($infoUid); |
---|
| 127 | $cmd="list_admins $pesquisa"; |
---|
| 128 | exec("$cmd", $retorno); |
---|
| 129 | $chave = "Lista inexistente: $pesquisa"; |
---|
| 130 | $chave2 = "No such list: $pesquisa"; |
---|
| 131 | $criaLista = "newlist -q $infoUid $moderador $senhaLista"; |
---|
| 132 | if ((in_array("$chave", $retorno)) || (in_array("$chave2", $retorno))){ |
---|
| 133 | $erroCrialista = `$criaLista`; |
---|
| 134 | $msg1="Gerando lista $infoUid"; |
---|
| 135 | echo "$msg1\n"; |
---|
| 136 | criaLog($msg1,"sinc"); |
---|
| 137 | $contaListas = $contaListas + 1; |
---|
| 138 | }else{ |
---|
| 139 | $msg2="Lista $infoUid existe!!!"; |
---|
| 140 | echo "$msg2\n"; |
---|
| 141 | criaLog($msg2,"sinc"); |
---|
| 142 | } |
---|
| 143 | |
---|
| 144 | $definePadrao = "config_list -i $infoUid.def $infoUid"; |
---|
| 145 | $msg3="Aplicando politica a lista $infoUid"; |
---|
| 146 | echo "$msg3\n"; |
---|
| 147 | criaLog($msg3,"sinc"); |
---|
| 148 | $erroDefinePadrao = `$definePadrao`; |
---|
| 149 | $cmd2="clear"; |
---|
| 150 | exec($cmd2); |
---|
| 151 | } |
---|
| 152 | |
---|
| 153 | # Sincroniza usarios e listas |
---|
| 154 | $msg2 = "LDAP e Mailman sincronizados ->lista $infoUid"; |
---|
| 155 | echo "."; |
---|
| 156 | $cmd = "sync_members -f $arquivo $infoUid"; |
---|
| 157 | exec($cmd, $resultado); |
---|
| 158 | # echo "$msg2\n\n"; |
---|
| 159 | criaLog("$msg","sinc"); |
---|
| 160 | // $erro = `$cmd`; |
---|
| 161 | # echo $erro; |
---|
| 162 | // echo "\n"; |
---|
| 163 | |
---|
| 164 | # Atualiza usuarios nao moderados |
---|
| 165 | |
---|
| 166 | $listaNaoModerado = strtolower($infoUid); |
---|
| 167 | // echo "Nome da lista -------->$listaNaoModerado\n"; |
---|
| 168 | |
---|
| 169 | if (($contanaoModerado > 1)&&($defaultmembermoderation == 1)) { |
---|
| 170 | atualizaModeracao($listaNaoModerado,$infonaomoderado); |
---|
| 171 | $contanaoModerado = 0; |
---|
| 172 | } |
---|
| 173 | $i++; |
---|
| 174 | |
---|
| 175 | }// fim do while externo, por usuario |
---|
| 176 | |
---|
| 177 | if($erroCriaLista != "") { |
---|
| 178 | criaLog("Erro criando lista -> $erroCriaLista\n","sinc"); |
---|
| 179 | } |
---|
| 180 | |
---|
| 181 | |
---|
| 182 | }// fim da funcao criaLista() |
---|
| 183 | |
---|
| 184 | |
---|
| 185 | # Funcao que atualiza o Mailman, caso uma lista seja removida do Ldap, sera removida do Mailman |
---|
| 186 | function limpaListas($server, $port, $rootdn, $pass, $basedn){ |
---|
| 187 | |
---|
| 188 | $connect=ldap_connect($server,$port); |
---|
| 189 | ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); |
---|
| 190 | |
---|
| 191 | ldap_bind($connect, $rootdn, $pass); |
---|
| 192 | |
---|
| 193 | $listaListas = "list_lists -b"; |
---|
| 194 | $listaTotal = `$listaListas`; |
---|
| 195 | $lista = explode("\n", $listaTotal); |
---|
| 196 | $contaLista = count($lista); |
---|
| 197 | # echo "lista (vem do Mailman)$contaLista\n"; |
---|
| 198 | # print_r($lista); |
---|
| 199 | |
---|
| 200 | $filter="(uid=lista*)"; |
---|
| 201 | $justthese = array("uid"); |
---|
| 202 | $sr=ldap_search($connect, $basedn, $filter, $justthese); |
---|
| 203 | $info = ldap_get_entries($connect, $sr); |
---|
| 204 | $contaLdap = $info['count']; |
---|
| 205 | $i = 0; |
---|
| 206 | |
---|
| 207 | # print_r($info); |
---|
| 208 | |
---|
| 209 | while ($i <= ($contaLdap-1)) { |
---|
| 210 | $novoInfo[] = strtolower($info[$i]["uid"][0]); |
---|
| 211 | $i++; |
---|
| 212 | } |
---|
| 213 | sort($novoInfo); |
---|
| 214 | reset($novoInfo); |
---|
| 215 | # echo "novoInfo (vem do LDAP)$contaLdap\n"; |
---|
| 216 | # print_r($novoInfo); |
---|
| 217 | |
---|
| 218 | # Compara as listas existentes no LDAP/RHDS e MailMan; se uma nao existe mais no LDAP/RHDS, eh excluida do MailMan. |
---|
| 219 | for ($i=0; $i <= ($contaLista - 2); $i++) { |
---|
| 220 | |
---|
| 221 | if($novoInfo != "") { |
---|
| 222 | if (!(in_array($lista[$i], $novoInfo))) { |
---|
| 223 | if ($lista[$i] <> "mailman"){ |
---|
| 224 | echo "\n lista ok -> $lista[$i]\n"; |
---|
| 225 | $removeLista = "rmlist -a $lista[$i]"; |
---|
| 226 | exec($removeLista , $resultado); |
---|
| 227 | // echo "Resultado -> $resultado\n"; |
---|
| 228 | |
---|
| 229 | // $erroRemoveLista = `$removeLista`; |
---|
| 230 | //Chama funcao de remocao de lista |
---|
| 231 | apagaListaMailman($lista[$i]); |
---|
| 232 | criaLog("Lista removida -> $lista[$i]\n","sinc"); |
---|
| 233 | // echo "Msg -> $erroRemoveLista"; |
---|
| 234 | } |
---|
| 235 | } |
---|
| 236 | }else { |
---|
| 237 | |
---|
| 238 | if ($lista[$i] <> "mailman"){ |
---|
| 239 | $removeLista = "rmlist -a $lista[$i]"; |
---|
| 240 | exec($removeLista , $resultado); |
---|
| 241 | // $erroRemoveLista = `$removeLista`; |
---|
| 242 | // echo "Resultado -> $resultado\n"; |
---|
| 243 | apagaListaMailman($lista[$i]); |
---|
| 244 | } |
---|
| 245 | } |
---|
| 246 | |
---|
| 247 | } |
---|
| 248 | |
---|
| 249 | if($erroRemoveLista != "") { |
---|
| 250 | criaLog("Erro removendo lista -> $erroRemoveLista\n","sinc"); |
---|
| 251 | } |
---|
| 252 | |
---|
| 253 | } |
---|
| 254 | |
---|
| 255 | # Chamada da funcao para inclusao no Mailman |
---|
| 256 | criaListas($server, $port, $rootdn, $pass, $basedn, $moderador, $senha); |
---|
| 257 | |
---|
| 258 | $listaListas = "list_lists -b"; |
---|
| 259 | exec($listaListas, $resultado); |
---|
| 260 | |
---|
| 261 | // $resultado = `$listaListas`; |
---|
| 262 | # echo $resultado; |
---|
| 263 | |
---|
| 264 | |
---|
| 265 | # Chamada da funcao de exclusao de listas do Mailman |
---|
| 266 | limpaListas($server, $port, $rootdn, $pass, $basedn); |
---|
| 267 | |
---|
| 268 | # Limpa arquivos temporarios |
---|
| 269 | $limpaArquivos = "rm -rf listafunc-*"; |
---|
| 270 | // $limpa = `$limpaArquivos`; |
---|
| 271 | exec($limpaArquivos, $resultado); |
---|
| 272 | |
---|
| 273 | $limpaArquivos = "rm -rf listacorp-*"; |
---|
| 274 | exec($limpaArquivos, $resultado); |
---|
| 275 | // $limpa = `$limpaArquivos`; |
---|
| 276 | |
---|
| 277 | $limpaArquivos = "rm -rf lista*"; |
---|
| 278 | exec($limpaArquivos, $resultado); |
---|
| 279 | // $limpa = `$limpaArquivos`; |
---|
| 280 | |
---|
| 281 | echo "\nListas Geradas!!!\n"; |
---|
| 282 | |
---|
| 283 | ?> |
---|