#!/usr/bin/php criaLista() - recebe um parametro que sera utilizado como valor para a * #* variavel $basedn. Esse sera o caminho onde serao procurados os usuarios * #* para a geracao das listas da regional bsa e sede. * #* * #* Tambem verifica se o usuario foi recadastrado em outro setor e caso * #* isto aconteca, remove-o da lista antiga e o adiciona na lista nova. * #* * #* Todas estas acoes sao feitas no LDAP/RHDS, depois serao replicadas * #* para o servidor de listas pelo script sincListasMailManRHDS.php * #* * #\*******************************************************************************/ # Recebe o argumento passado na linha de comando. # $regional = $argv[1]; $retorno=encriptar($pass); $senhaCript=$retorno; function criaLista($server, $port, $rootdn, $pass, $basedn, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript) { criaLog("Inicio de rotina de criacao de listas Corporativas --> $regional","corp"); $connect=ldap_connect($server,$port); ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_bind($connect, $rootdn, $pass); $filter = "(&(ou=*)(phpgwaccounttype=u)(!(nsaccountlock=true))(accountstatus=active))"; $justthese = array("uid","ou","mail","cn"); $baseBusca = $basedn; // echo "Base busca -> $baseBusca\n"; // exit; $sr = @ldap_search($connect, $baseBusca, $filter, $justthese); //Busca as informacoes na base RHDS de acordo com o filtro acima; $info = ldap_get_entries($connect, $sr); //Gera um vetor com o resultado do ldap_search; $cont = $info['count']; //Conta a quantidade de entradas no vetor de resultado; $a = explode(",", $baseBusca); //separa $baseBusca pela virgula ","; $b = $a[0]; //pega primeiro item de $a; $c = $a[1]; //pega segundo item de $a; $d = explode("=", $b); //separa o primeiro item de $a ($b) pelo igual "="; $e = $d[1]; //pega o segundo item de $d (entra no nome da lista); $f = substr("$c", 6); //pega os caracteres de $c, a partir do sexto ate o final (entra no nome da lista); /* 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;*/ ##################################################################### $listaRegTmp = "listaregional-".$f."-".$e; //Monta o nome da lista para verificar se a mesma ja existe; $filterTmp = "(uid=$listaRegTmp)"; //Determina o filtro da busca; $justtheseTmp = array("uid"); //Determina que informacao(oes) sera(ao) selecionada(s) pela busca; $lRegTmp = @ldap_search($connect, $baseGravacao, $filterTmp, $justtheseTmp); //Busca as informacoes na base RHDS de acordo com o filtro acima; $infoTmp = ldap_get_entries($connect, $lRegTmp); //Gera um vetor com o resultado do ldap_search; $contTmp = $infoTmp['count']; //Conta a quantidade de entradas no vetor de resultado; echo "listaRegTmp -> $listaRegTmp\n"; echo "ContTmp -> $contTmp\n"; echo "Fora do if -> " . $infoTmp[0]['uid'][0] . "\n"; if($contTmp == 0) { //Se a contagem da resposta do ldap_search for igual a 0, entao nao existe uma ocorrencia com o objeto buscado; $infoAddListaRegTmp["objectclass"][0] = "person"; $infoAddListaRegTmp["objectclass"][1] = "posixAccount"; $infoAddListaRegTmp["objectclass"][2] = "phpgwaccount"; $infoAddListaRegTmp["objectclass"][3] = "mailman"; $infoAddListaRegTmp["objectclass"][4] = "inetorgperson"; $infoAddListaRegTmp["uid"] = "$listaRegTmp"; $infoAddListaRegTmp["mail"] = "$listaRegTmp"."$dominioLista"; $infoAddListaRegTmp["phpgwAccountExpires"] = '-1'; $infoAddListaRegTmp["phpgwAccountStatus"] = 'A'; $infoAddListaRegTmp["phpgwAccountType"] = "l"; $infoAddListaRegTmp["accountStatus"] = "active"; $infoAddListaRegTmp["sn"] = "$listaRegTmp"; $infoAddListaRegTmp["cn"] = "$listaRegTmp"; $infoAddListaRegTmp["homeDirectory"] = "/dev/null"; $infoAddListaRegTmp["gidNumber"] = "777"; $infoAddListaRegTmp["uidNumber"] = "-".Contador(); $infoAddListaRegTmp["admLista"] = "$administrador"; $infoAddListaRegTmp["listpass"] = "$senhaCript"; $infoAddListaRegTmp["defaultmembermoderation"] = "1"; $dnGravaLista = "uid=$listaRegTmp".","."$baseGravacao"; $addLdapListaRegTmp = ldap_add($connect, $dnGravaLista, $infoAddListaRegTmp); echo "Lista nao existe -> " . $listaRegTmp . "\n"; }else { echo "Lista ja existe -> " . $infoTmp[0]['uid'][0] . "\n"; } // exit; ##################################################################### # Le Ldap, por usuario e cria arquivos com listas e participantes $i = 0; $msg = "Lendo Base Ldap.\n"; echo $msg; $arq = "inconsistencias.php"; //arquivo com registros inconsistentes; $handler = fopen($arq,"a"); //abre o arquivo p/ gravacao; $nomeReg = "\n\n**************************************************\n**" . strtoupper($f) . " - " . strtoupper($e) . "**\n**************************************************\n"; $salva = fwrite($handler, $nomeReg); while($i <= ($cont-1)) { echo "."; $userID = $info[$i]['uid'][0]; $userCN = $info[$i]['cn'][0]; # echo "\n"; # echo "UID usuario - ".$info[$i]['uid'][0]."\n"; $j = 0; while($info[$i]['mail'][$j] != "") { //Enquanto houver informacao no campo mail, faz o que segue abaixo... $ou = limpaString(strtolower($info[$i]['ou'][$j])); //Pega o setor cadastrado no RHDS de cada funcionario; // $ou = limpaString($ou); //Retira os espacos em branco do setor // $ouTemporario = strtolower($info[$i]['ou'][$j]); $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; if (preg_match("[^/]", $ou)){ $msg = "ERRO CADASTRO SETOR - USUARIO - "; $teste = 1; criaLog($msg.$info[$i]['uid'][0]." !!!","corp"); } if (preg_match("[/$]", $ou)){ $msg = "ERRO CADASTRO SETOR - USUARIO - "; $teste = 1; criaLog($msg.$info[$i]['uid'][0]." !!!","corp"); } $setor = explode("/", $ou); //separa $ou pela barra "/" $xTmp = strtolower($setor[0]); //pega o primeiro item do vetor gerado apos a separacao de $ou require('ugs.php'); if(in_array("$xTmp", $ugs_bsa)) { //inicio do if que teste a UG echo "UG -> $xTmp\n"; if($teste == 0) { //inicio do if que cria a lista $listaFinal = "listaregional-".$f."-".$e."-".$xTmp; // Monta o nome da lista; echo "Nome da lista -> $listaFinal\n"; // exit; $filterGrava = "(uid=$listaFinal)"; $srGrava = @ldap_search($connect, $baseGravacao, $filterGrava);// Verifica se a lista ja esta criada no RHDS; $contLdap = ldap_count_entries($connect, $srGrava); #Cria Lista na base Ldap if(($contLdap == 0) && ($listaFinal != "listaregional-")) { // Se a lista nao existir no RHDS, sera criada; $infoAdicaoLista["objectclass"][0] = "person"; $infoAdicaoLista["objectclass"][1] = "posixAccount"; $infoAdicaoLista["objectclass"][2] = "phpgwaccount"; $infoAdicaoLista["objectclass"][3] = "mailman"; $infoAdicaoLista["objectclass"][4] = "inetorgperson"; $infoAdicaoLista["uid"] = "$listaFinal"; $infoAdicaoLista["mail"] = "$listaFinal"."$dominioLista"; $infoAdicaoLista["phpgwAccountExpires"] = '-1'; $infoAdicaoLista["phpgwAccountStatus"] = 'A'; $infoAdicaoLista["phpgwAccountType"] = "l"; $infoAdicaoLista["accountStatus"] = "active"; $infoAdicaoLista["sn"] = "$listaFinal"; $infoAdicaoLista["cn"] = "$listaFinal"; $infoAdicaoLista["homeDirectory"] = "/dev/null"; $infoAdicaoLista["gidNumber"] = "777"; $infoAdicaoLista["uidNumber"] = "-".Contador(); $infoAdicaoLista["admLista"] = "$administrador"; $infoAdicaoLista["listpass"] = "$senhaCript"; $infoAdicaoLista["defaultmembermoderation"] = "1"; $dnGravaLista = "uid=$listaFinal".","."$baseGravacao"; $adicaoLdap = ldap_add($connect, $dnGravaLista, $infoAdicaoLista); } //exit; } //fim do if que cria a lista }else { //fim do if que teste a UG $erro = "\nRegistro inconsistente. Usuario -> " . $userID . " - " . $userCN . "\nSetor nao confere. Setor cadastrado -> " . $xTmp . "\n\n"; $salva = fwrite($handler, $erro); } // exit; $dnGravaUsuario = "uid=$listaFinal".","."$baseGravacao"; $dnGravaListaRegTmp = "uid=$listaRegTmp".","."$baseGravacao"; $mailUsuario = $info[$i]['mail'][$j]; // Filtro para pegar somente as listas "regional" $filtro = "(&(mailforwardingaddress=$mailUsuario)(uid=listaregional*))"; //$filtro = "(mailforwardingaddress=$mailUsuario)"; $soIsso = array("uid"); $srCompara = ldap_search($connect, $baseGravacao, $filtro, $soIsso); $contsrCompara = ldap_count_entries($connect, $srCompara); $comparaUid = ldap_get_entries($connect, $srCompara); $listaTr = $comparaUid[0]['uid'][0]; $testeTr = strtr($listaTr , '-', '/'); $testeTr = substr($testeTr , 6); $infoDelUsuario["mailforwardingaddress"] = "$mailUsuario"; # Aqui ocorre a verificao se um usuario ja pertence a alguma lista criada if ($testeTr == $ou) { if(($testeTr == "") || ($ou == "")) { $comentario = "Usuario sem Setor cadastrado - ".$info[$i]['uid'][0]."\n"; criaLog($comentario,"corp"); }else { $comentario = "Usuario ja pertence a uma lista - ".$info[$i]['uid'][0]."\n"; criaLog($comentario,"corp"); } $teste = 1; }elseif(($testeTr != $ou) && ($testeTr != "")) { $dnModUsuario = "uid=$listaTr".","."$baseGravacao"; echo "\nUsuario removido -> $dnModUsuario"; $removeUsuLista = ldap_mod_del($connect, $dnModUsuario, $infoDelUsuario); $nomeUsu = $info[$i]['cn'][0]; criaLog("Verifica troca de setor -> Usuario ".$info[$i]['uid'][0]. " Lista $listaTr","corp"); } $infoAdicaoUsuario["mailforwardingaddress"] = "$mailUsuario"; #Insere usuarios na lista criada if($teste == 0) { $addUsuLista = @ldap_mod_add($connect, $dnGravaUsuario, $infoAdicaoUsuario); $addLdapTmp = ldap_mod_add($connect, $dnGravaListaRegTmp, $infoAdicaoUsuario); criaLog("Usuario ".$info[$i]['uid'][0]." cadastrado na lista $listaFinal.\n","corp"); }else { criaLog("Usuario ".$info[$i]['uid'][0]." nao adicionado. $comentario.\n","corp"); } $listaTmp = ""; $listaTmp2 = ""; $j++; } //fim do while dentro do usuario $arqINS = "/var/www/mailman/pool/ins_$listaFinal"; $handle = fopen($arqINS, "w"); $listaINS = $listaFinal; $salvaINS = fwrite($handle, $listaINS); fclose($handle); $i++; } //fim do while externo (usuario por usuario) fclose($handler); } $testeValor = 0; # Chamada da funcao para inclusao no Mailman if ($argv[1] == ""){ echo "Favor informar a base de busca.\n\n"; echo "Ex.: ou=reg,ou=regbsa,dc=serpro,dc=gov,dc=br\n\n"; }else{ $basedn = $argv[1]; criaLista($server, $port, $rootdn, $pass, $basedn, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript); $testeValor = 1; } if($testeValor == 1){ $msg2 = "\n\nListas geradas na base LDAP!!!"; echo "$msg2\n"; criaLog($msg2,"corp"); } ?>