source: companies/serpro/scripts-listas/sincListasMailManRHDS.php @ 903

Revision 903, 8.4 KB checked in by niltonneto, 15 years ago (diff)

Importacao inicial do Expresso do Serpro

Line 
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
24require('functions.php');
25require('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
30function 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
186function 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
256criaListas($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
266limpaListas($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?>
Note: See TracBrowser for help on using the repository browser.