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

Revision 903, 11.5 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
6require('config.php');
7require('functions.php');
8
9#/*******************************************************************************\
10#*                                                                              *
11#* Este script tem uma funcao: criaLista(). Ele existe para tratar da criacao   *
12#* de listas de Brasilia - Regional e Sede. Pode ser adaptado para algum outro  *
13#* caso semelhante.                                                             *
14#*                                                                              *
15#* -> criaLista() - recebe um parametro que sera utilizado como valor para a    *
16#*    variavel $basedn. Esse sera o caminho onde serao procurados os usuarios   *
17#*    para a geracao das listas da regional bsa e sede.                         *
18#*                                                                              *
19#*    Tambem verifica se o usuario foi recadastrado em outro setor e caso       *
20#*    isto aconteca, remove-o da lista antiga e o adiciona na lista nova.       *
21#*                                                                              *
22#*    Todas estas acoes sao feitas no LDAP/RHDS, depois serao replicadas        *
23#*    para o servidor de listas pelo script sincListasMailManRHDS.php           *
24#*                                                                              *
25#\*******************************************************************************/
26
27
28
29
30# Recebe o argumento passado na linha de comando.
31#       $regional = $argv[1];
32
33$retorno=encriptar($pass);
34$senhaCript=$retorno;
35
36
37
38function criaLista($server, $port, $rootdn, $pass, $basedn, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript) {
39
40        criaLog("Inicio de rotina de criacao de listas Corporativas --> $regional","corp");
41        $connect=ldap_connect($server,$port);
42
43        ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
44        ldap_bind($connect, $rootdn, $pass);
45
46        $filter = "(&(ou=*)(phpgwaccounttype=u)(!(nsaccountlock=true))(accountstatus=active))";
47        $justthese = array("uid","ou","mail","cn");
48
49        $baseBusca = $basedn;
50
51//      echo "Base busca -> $baseBusca\n";
52//      exit;
53
54        $sr = @ldap_search($connect, $baseBusca, $filter, $justthese); //Busca as informacoes na base RHDS de acordo com o filtro acima;
55
56        $info = ldap_get_entries($connect, $sr); //Gera um vetor com o resultado do ldap_search;
57
58        $cont = $info['count']; //Conta a quantidade de entradas no vetor de resultado;
59
60
61        $a = explode(",", $baseBusca); //separa $baseBusca pela virgula ",";
62        $b = $a[0]; //pega primeiro item de $a;
63        $c = $a[1]; //pega segundo item de $a;
64
65        $d = explode("=", $b); //separa o primeiro item de $a ($b) pelo igual "=";
66        $e = $d[1]; //pega o segundo item de $d (entra no nome da lista);
67
68        $f = substr("$c", 6); //pega os caracteres de $c, a partir do sexto ate o final (entra no nome da lista);
69
70
71/* O bloco delimitado abaixo serve para verificar se determinada lista ja existe; em caso negativo, ela sera criada, em caso afirmativo nao sera feito nada;*/
72#####################################################################
73
74
75        $listaRegTmp = "listaregional-".$f."-".$e; //Monta o nome da lista para verificar se a mesma ja existe;
76
77        $filterTmp = "(uid=$listaRegTmp)"; //Determina o filtro da busca;
78        $justtheseTmp = array("uid"); //Determina que informacao(oes) sera(ao) selecionada(s) pela busca;
79
80        $lRegTmp = @ldap_search($connect, $baseGravacao, $filterTmp, $justtheseTmp); //Busca as informacoes na base RHDS de acordo com o filtro acima;
81
82        $infoTmp = ldap_get_entries($connect, $lRegTmp); //Gera um vetor com o resultado do ldap_search;
83
84        $contTmp = $infoTmp['count']; //Conta a quantidade de entradas no vetor de resultado;
85
86        echo "listaRegTmp -> $listaRegTmp\n";
87        echo "ContTmp -> $contTmp\n";
88        echo "Fora do if -> " . $infoTmp[0]['uid'][0] . "\n";
89
90        if($contTmp == 0) { //Se a contagem da resposta do ldap_search for igual a 0, entao nao existe uma ocorrencia com o objeto buscado;
91
92
93                $infoAddListaRegTmp["objectclass"][0] = "person";
94                $infoAddListaRegTmp["objectclass"][1] = "posixAccount";
95                $infoAddListaRegTmp["objectclass"][2] = "phpgwaccount";
96                $infoAddListaRegTmp["objectclass"][3] = "mailman";
97                $infoAddListaRegTmp["objectclass"][4] = "inetorgperson";
98                $infoAddListaRegTmp["uid"] = "$listaRegTmp";
99                $infoAddListaRegTmp["mail"] = "$listaRegTmp"."$dominioLista";
100                $infoAddListaRegTmp["phpgwAccountExpires"] = '-1';
101                $infoAddListaRegTmp["phpgwAccountStatus"] = 'A';
102                $infoAddListaRegTmp["phpgwAccountType"] = "l";
103                $infoAddListaRegTmp["accountStatus"] = "active";
104                $infoAddListaRegTmp["sn"] = "$listaRegTmp";
105                $infoAddListaRegTmp["cn"] = "$listaRegTmp";
106                $infoAddListaRegTmp["homeDirectory"] = "/dev/null";
107                $infoAddListaRegTmp["gidNumber"] = "777";
108                $infoAddListaRegTmp["uidNumber"] = "-".Contador();
109                $infoAddListaRegTmp["admLista"] = "$administrador";
110                $infoAddListaRegTmp["listpass"] = "$senhaCript";
111                $infoAddListaRegTmp["defaultmembermoderation"] = "1";
112                $dnGravaLista = "uid=$listaRegTmp".","."$baseGravacao";
113
114                $addLdapListaRegTmp = ldap_add($connect, $dnGravaLista, $infoAddListaRegTmp);
115
116                echo "Lista nao existe -> " . $listaRegTmp . "\n";
117        }else {
118                echo "Lista ja existe -> " . $infoTmp[0]['uid'][0] . "\n";
119        }
120//      exit;
121
122#####################################################################
123
124# Le Ldap, por usuario e cria arquivos com listas e participantes
125        $i = 0;
126        $msg = "Lendo Base Ldap.\n";
127        echo $msg;
128
129
130        $arq = "inconsistencias.php"; //arquivo com registros inconsistentes;
131        $handler = fopen($arq,"a"); //abre o arquivo p/ gravacao;
132
133        $nomeReg = "\n\n**************************************************\n**" . strtoupper($f) . " - " . strtoupper($e) . "**\n**************************************************\n";
134
135        $salva = fwrite($handler, $nomeReg);
136
137        while($i <= ($cont-1)) {
138        echo ".";
139
140                $userID = $info[$i]['uid'][0];
141                $userCN = $info[$i]['cn'][0];
142#               echo "\n";
143#               echo "UID usuario - ".$info[$i]['uid'][0]."\n";
144                $j = 0;
145                while($info[$i]['mail'][$j] != "") { //Enquanto houver informacao no campo mail, faz o que segue abaixo...
146
147                        $ou = limpaString(strtolower($info[$i]['ou'][$j])); //Pega o setor cadastrado no RHDS de cada funcionario;
148//                      $ou = limpaString($ou); //Retira os espacos em branco do setor
149//                      $ouTemporario = strtolower($info[$i]['ou'][$j]);
150                        $ouTemp[] = limpaString(strtolower($info[$i]['ou'][$j])); //Pega o setor cadastrado no RHDS de cada funcionario. Sera usado na inclusao de listas em outras listas;
151                       
152                        if (preg_match("[^/]", $ou)){
153                                $msg = "ERRO CADASTRO SETOR - USUARIO - ";
154                                $teste = 1;
155                                criaLog($msg.$info[$i]['uid'][0]." !!!","corp");
156                        }
157                       
158                        if (preg_match("[/$]", $ou)){
159                                $msg = "ERRO CADASTRO SETOR - USUARIO - ";
160                                $teste = 1;
161                                criaLog($msg.$info[$i]['uid'][0]." !!!","corp");
162                        }
163
164
165                       
166                        $setor = explode("/", $ou); //separa $ou pela barra "/"
167                        $xTmp = strtolower($setor[0]); //pega o primeiro item do vetor gerado apos a separacao de $ou
168
169
170                        require('ugs.php');
171                        if(in_array("$xTmp", $ugs_bsa)) { //inicio do if que teste a UG
172                                echo "UG -> $xTmp\n";
173
174                                if($teste == 0) { //inicio do if que cria a lista
175
176
177                                        $listaFinal = "listaregional-".$f."-".$e."-".$xTmp; // Monta o nome da lista;
178
179                                        echo "Nome da lista -> $listaFinal\n";
180//                                      exit;
181
182                                        $filterGrava = "(uid=$listaFinal)";
183                                        $srGrava = @ldap_search($connect, $baseGravacao, $filterGrava);// Verifica se a lista ja esta criada no RHDS;
184                                        $contLdap = ldap_count_entries($connect, $srGrava);
185
186
187                #Cria Lista na base Ldap
188
189                                        if(($contLdap == 0) && ($listaFinal != "listaregional-")) { // Se a lista nao existir no RHDS, sera criada;
190
191
192                                                $infoAdicaoLista["objectclass"][0] = "person";
193                                                $infoAdicaoLista["objectclass"][1] = "posixAccount";
194                                                $infoAdicaoLista["objectclass"][2] = "phpgwaccount";
195                                                $infoAdicaoLista["objectclass"][3] = "mailman";
196                                                $infoAdicaoLista["objectclass"][4] = "inetorgperson";
197                                                $infoAdicaoLista["uid"] = "$listaFinal";
198                                                $infoAdicaoLista["mail"] = "$listaFinal"."$dominioLista";
199                                                $infoAdicaoLista["phpgwAccountExpires"] = '-1';
200                                                $infoAdicaoLista["phpgwAccountStatus"] = 'A';
201                                                $infoAdicaoLista["phpgwAccountType"] = "l";
202                                                $infoAdicaoLista["accountStatus"] = "active";
203                                                $infoAdicaoLista["sn"] = "$listaFinal";
204                                                $infoAdicaoLista["cn"] = "$listaFinal";
205                                                $infoAdicaoLista["homeDirectory"] = "/dev/null";
206                                                $infoAdicaoLista["gidNumber"] = "777";
207                                                $infoAdicaoLista["uidNumber"] = "-".Contador();
208                                                $infoAdicaoLista["admLista"] = "$administrador";
209                                                $infoAdicaoLista["listpass"] = "$senhaCript";
210                                                $infoAdicaoLista["defaultmembermoderation"] = "1";
211                                                $dnGravaLista = "uid=$listaFinal".","."$baseGravacao";
212
213                                                $adicaoLdap = ldap_add($connect, $dnGravaLista, $infoAdicaoLista);
214
215
216                                        }
217
218                                //exit;
219                                } //fim do if que cria a lista
220
221                        }else { //fim do if que teste a UG
222
223                               
224                                $erro = "\nRegistro inconsistente. Usuario -> " . $userID . " - " . $userCN . "\nSetor nao confere. Setor cadastrado -> " . $xTmp . "\n\n";
225
226                                $salva = fwrite($handler, $erro);
227
228                        }
229//                      exit;
230
231                        $dnGravaUsuario = "uid=$listaFinal".","."$baseGravacao";
232                        $dnGravaListaRegTmp = "uid=$listaRegTmp".","."$baseGravacao";
233
234                        $mailUsuario = $info[$i]['mail'][$j];
235                       
236                        // Filtro para pegar somente as listas "regional"
237
238                        $filtro = "(&(mailforwardingaddress=$mailUsuario)(uid=listaregional*))";
239                        //$filtro = "(mailforwardingaddress=$mailUsuario)";
240
241                        $soIsso = array("uid");
242                        $srCompara = ldap_search($connect, $baseGravacao, $filtro, $soIsso);
243                        $contsrCompara = ldap_count_entries($connect, $srCompara);
244                        $comparaUid = ldap_get_entries($connect, $srCompara);
245
246                        $listaTr = $comparaUid[0]['uid'][0];
247                        $testeTr = strtr($listaTr , '-', '/');
248                        $testeTr = substr($testeTr , 6);
249
250                        $infoDelUsuario["mailforwardingaddress"] = "$mailUsuario";
251
252# Aqui ocorre a verificao se um usuario ja pertence a alguma lista criada
253                        if ($testeTr == $ou) {
254                                if(($testeTr == "") || ($ou == "")) {
255                                        $comentario = "Usuario sem Setor cadastrado - ".$info[$i]['uid'][0]."\n";
256                                        criaLog($comentario,"corp");
257                                }else {
258                                        $comentario = "Usuario ja pertence a uma lista - ".$info[$i]['uid'][0]."\n";
259                                        criaLog($comentario,"corp");
260                                }
261                                $teste = 1;
262                        }elseif(($testeTr != $ou) && ($testeTr != "")) {
263                                $dnModUsuario = "uid=$listaTr".","."$baseGravacao";
264                                echo "\nUsuario removido -> $dnModUsuario";
265                                $removeUsuLista = ldap_mod_del($connect, $dnModUsuario, $infoDelUsuario);
266                                $nomeUsu = $info[$i]['cn'][0];
267                       
268                                criaLog("Verifica troca de setor -> Usuario ".$info[$i]['uid'][0]. " Lista $listaTr","corp");
269                        }
270
271                        $infoAdicaoUsuario["mailforwardingaddress"] = "$mailUsuario";
272
273#Insere usuarios na lista criada
274                        if($teste == 0) {
275                                $addUsuLista = @ldap_mod_add($connect, $dnGravaUsuario, $infoAdicaoUsuario);
276                                $addLdapTmp = ldap_mod_add($connect, $dnGravaListaRegTmp, $infoAdicaoUsuario);
277                                criaLog("Usuario ".$info[$i]['uid'][0]." cadastrado na lista $listaFinal.\n","corp");
278                        }else {
279                                criaLog("Usuario ".$info[$i]['uid'][0]." nao adicionado. $comentario.\n","corp");
280                        }
281
282                        $listaTmp = "";
283                        $listaTmp2 = "";
284
285
286                        $j++;
287
288                } //fim do while dentro do usuario
289
290
291                $arqINS = "/var/www/mailman/pool/ins_$listaFinal";
292                $handle = fopen($arqINS, "w");
293                $listaINS = $listaFinal;
294                $salvaINS = fwrite($handle, $listaINS);
295                fclose($handle);
296
297
298
299                $i++;
300
301        } //fim do while externo (usuario por usuario)
302
303        fclose($handler);
304
305}
306
307$testeValor = 0;
308
309# Chamada da funcao para inclusao no Mailman
310if ($argv[1] == ""){
311        echo "Favor informar a base de busca.\n\n";
312        echo "Ex.: ou=reg,ou=regbsa,dc=serpro,dc=gov,dc=br\n\n";
313}else{
314        $basedn = $argv[1];
315        criaLista($server, $port, $rootdn, $pass, $basedn, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript);
316        $testeValor = 1;
317}
318
319if($testeValor == 1){
320        $msg2 = "\n\nListas geradas na base LDAP!!!";
321        echo "$msg2\n";
322        criaLog($msg2,"corp");
323}
324
325?>
Note: See TracBrowser for help on using the repository browser.