#!/usr/bin/php lerRegional() - le o LDAP/RHDS, usuario por usuario, em busca do * #* setor cadastrado (atributo OU). A partir dai, gera os nomes das * #* listas baseados nas funcoes de cada setor e depois adiciona os * #* usuarios nas respectivas listas. * #* Tambem verifica se o usuario foi recadastrado com outra funcao 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 * #* * #* -> criaLog() - gera o arquivo de log /var/log/criaListasFuncRHDS.log * #* * #\**************************************************************************/ $retorno = encriptar($pass); $senhaCript = $retorno; $regionais = array('regspo','regrce','regblm','regfla','regsdr','regcta','regbhe','regrjo','regpae','regbsa'); # Recebe o argumento passado na linha de comando. # $regional = $argv[1]; # . # . function lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $senhaCript,$listas, $administrador) { criaLog("Inicio de rotina de criacao de listas Funcionais --> $regional","func"); echo "\nLendo Base de usuarios -> $regional\n"; $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","usrfuncao"); $baseBusca = $regional.",".$basedn; $sr = ldap_search($connect, $baseBusca, $filter, $justthese); $info = ldap_get_entries($connect, $sr); $cont = $info['count']; # include('funcoes.php'); /* $diretores = "DIRETOR"; if($listas[$diretores]){ // echo $listas[$diretores]."\n"; }else { // echo "Nao deu\n"; } */ # Le Ldap, por usuario e cria arquivos com listas e participantes $i = 0; while($i <= ($cont-1)) { $mailUsu = $info[$i]['mail'][0]; $funcUsu = strtolower($info[$i]['usrfuncao'][0]);//Setor cadastrado no RHDS $nomeUsu = $info[$i]['cn'][0]; if($funcUsu != "") { //Se funcao do usuario esta cadastrada // if($funcUsu != "empregado"){ // Se a funcao e direfente de "empregado" $temp = $funcUsu; $funcao = utf8_decode($temp); $funcListaPai = $funcao; $funcao = strtr($funcao, " ηγαινσ", "-caaeio"); // echo "Funcao cadastrada -> $funcao\n"; $funcao = preg_replace('/\(|\)|\{|\}|\[|\]|/','', $funcao); // echo "Funcao cadastrada -> $funcao\n"; $ou = strtolower($info[$i]['ou'][0]);// Pega o setor cadastrado no RHDS de cada funcionario // echo "OU -> $ou\n"; $setorHifen = strtr($ou, '/', '-');//Substitui a "/" pelo "-" no setor $setor = explode("-", $setorHifen); $contSetor = count($setor); $listaFinal = "listafunc-$setorHifen-$funcao";//Gera uma lista com o setor e a funcao do usuario cadastrada no RHDS(ex: listafunc-supti-tipae-tigte-chefe-de-setor) for($x = 0; $x < $contSetor; $x++) { $listaPaiTmp = $listaPaiTmp.$setor[$x-1]."-"; //Seleciona o setor pai p/ gerar a listaFinalPai } $listaPaiFunc = "listafunc$listaPaiTmp"; //Comeca a montagem da listaFinalPai $listaFinalPai = "$listaPaiFunc$listas[$funcListaPai]";//Lista do setor "pai" com a funcao "generica" (ex: listafunc-supti-tipae-chefes) if ($listas[$funcListaPai] == ""){ //$listaFinalPai = $listaPaiFunc.$funcao; $listaFinalPai = ""; } $listaPaiTmp = ""; // Informacoes que serao utilizadas para buscar a lista em que o usuario esta cadastrado e depois comparar // com a lista gerada pelo setor + funcao (acima) @ldap_bind($connect, $rootdn, $pass); $filtroX = "(&(objectClass=mailman)(mailforwardingaddress=$mailUsu)(uid=listafunc*))"; $justtheseX = array("uid"); $dnX = "$baseGravacao"; $result = @ldap_search($connect, $dnX, $filtroX, $justtheseX);//Busca por listas que contenham o usuario especificado em $mailUsu $infoX = @ldap_get_entries($connect, $result); //print_r($infoX); $contX = $infoX['count']; echo "."; // echo "Numero de listas com o usuario --> $contX\n"; $y = 0; while($y < $contX){ $resultListas[] = $infoX[$y]['uid'][0]; $y++; } $maiorLista = ""; $menorLista = ""; if($contX != 0) { foreach($resultListas as $value) { // $msg = "ResultListas --> $value\n"; // criaLog("$msg","func"); if(strlen($value) > strlen($maiorLista)) { $menorLista = $maiorLista; $maiorLista = $value; }else { $menorLista = $value; } } } // echo "Usuario --> $nomeUsu\n"; // echo "Lista Final --> $listaFinal\n"; // echo "Maior Lista --> $maiorLista\n"; // echo "Menor Lista --> $menorLista\n"; //$uidLista = $infoX[0]['uid'][0];//UID da lista que contem o usuario especificado if($funcUsu != "empregado"){ // Se a funcao e direfente de "empregado" if(($maiorLista != $listaFinal) && ($maiorLista != "")) {//Se a lista retornada for diferente da lista gerada pelo setor e funcao atuais do usuario e diferente de vazio, significa que o setor cadastrado no RHDS mudou // echo "Entrou na lista != vazio!!!!!!!!!!"; $dnListaAntiga = "uid=$maiorLista".","."$baseGravacao"; $delListaAntiga = @ldap_delete($connect, $dnListaAntiga); $infoDelUsu["mailforwardingaddress"] = "$mailUsu"; // echo "email -> $mailUsu\n"; $dnListaPaiAntiga = "uid=$menorLista".","."$baseGravacao"; $delListaPaiAntiga = @ldap_mod_del($connect, $dnListaPaiAntiga, $infoDelUsu); // echo "TUDO DIFERENTE!!!!!!!!!!!!!! $mailUsu\n"; $addListaFinal["objectclass"][0] = "person"; $addListaFinal["objectclass"][1] = "posixAccount"; $addListaFinal["objectclass"][2] = "phpgwaccount"; $addListaFinal["objectclass"][3] = "mailman"; $addListaFinal["objectclass"][4] = "inetorgperson"; $addListaFinal["uid"] = "$listaFinal"; $addListaFinal["mail"] = "$listaFinal"."$dominioLista"; $addListaFinal["phpgwAccountExpires"] = '-1'; $addListaFinal["phpgwAccountStatus"] = "A"; $addListaFinal["phpgwAccountType"] = "l"; $addListaFinal["accountStatus"] = "active"; $addListaFinal["sn"] = "$listaFinal"; $addListaFinal["cn"] = "$listaFinal"; $addListaFinal["homeDirectory"] = "/dev/null"; $addListaFinal["gidNumber"] = "777"; $addListaFinal["uidNumber"] = "-".Contador(); $addListaFinal["admLista"] = "$administrador"; $addListaFinal["listPass"] = "$senhaCript"; $addListaFinal["defaultmembermoderation"] = "1"; $addMemberListaFinal["mailforwardingaddress"] = "$mailUsu"; $dnGravaListaFinal = "uid=$listaFinal".","."$baseGravacao"; $adicaoListaFinal = @ldap_add($connect, $dnGravaListaFinal, $addListaFinal); $adicaoMemberListaFinal = @ldap_mod_add($connect, $dnGravaListaFinal, $addMemberListaFinal); criaLog("Lista $listaFinal gerada usuario $mailUsu incluido", "func"); $addListaFinalPai["objectclass"][0] = "person"; $addListaFinalPai["objectclass"][1] = "posixAccount"; $addListaFinalPai["objectclass"][2] = "phpgwaccount"; $addListaFinalPai["objectclass"][3] = "mailman"; $addListaFinalPai["objectclass"][4] = "inetorgperson"; $addListaFinalPai["uid"] = "$listaFinalPai"; $addListaFinalPai["mail"] = "$listaFinalPai"."$dominioLista"; $addListaFinalPai["phpgwAccountExpires"] = '-1'; $addListaFinalPai["phpgwAccountStatus"] = "A"; $addListaFinalPai["phpgwAccountType"] = "l"; $addListaFinalPai["accountStatus"] = "active"; $addListaFinalPai["sn"] = "$listaFinalPai"; $addListaFinalPai["cn"] = "$listaFinalPai"; $addListaFinalPai["homeDirectory"] = "/dev/null"; $addListaFinalPai["gidNumber"] = "777"; $addListaFinalPai["uidNumber"] = "-".Contador(); $addListaFinalPai["admLista"] = "$administrador"; $addListaFinalPai["listPass"] = "$senhaCript"; $addListaFinalPai["defaultmembermoderation"] = "1"; $addMemberListaFinalPai["mailforwardingaddress"] = "$mailUsu"; $dnGravaListaFinalPai = "uid=$listaFinalPai".","."$baseGravacao"; $adicaoListaFinalPai = @ldap_add($connect, $dnGravaListaFinalPai, $addListaFinalPai); $adicaoMemberListaFinalPai = @ldap_mod_add($connect, $dnGravaListaFinalPai, $addMemberListaFinalPai); criaLog("Lista $listaFinalPai gerada usuario $mailUsu incluido", "func"); }elseif(($maiorLista == "") && ($menorLista =="")) {//Se o retorno da busca for vazio para as listas, significa que o usuario ainda nao foi inserido em nenhuma lista, entao elas serao geradas e o(s) participante(s) adicionado(s) $addListaFinal["objectclass"][0] = "person"; $addListaFinal["objectclass"][1] = "posixAccount"; $addListaFinal["objectclass"][2] = "phpgwaccount"; $addListaFinal["objectclass"][3] = "mailman"; $addListaFinal["objectclass"][4] = "inetorgperson"; $addListaFinal["uid"] = "$listaFinal"; $addListaFinal["mail"] = "$listaFinal"."$dominioLista"; $addListaFinal["phpgwAccountExpires"] = '-1'; $addListaFinal["phpgwAccountStatus"] = "A"; $addListaFinal["phpgwAccountType"] = "l"; $addListaFinal["accountStatus"] = "active"; $addListaFinal["sn"] = "$listaFinal"; $addListaFinal["cn"] = "$listaFinal"; $addListaFinal["homeDirectory"] = "/dev/null"; $addListaFinal["gidNumber"] = "777"; $addListaFinal["uidNumber"] = "-".Contador(); $addListaFinal["admLista"] = "$administrador"; $addListaFinal["listPass"] = "$senhaCript"; $addListaFinal["defaultmembermoderation"] = "1"; $addMemberListaFinal["mailforwardingaddress"] = "$mailUsu"; $dnGravaListaFinal = "uid=$listaFinal".","."$baseGravacao"; $adicaoListaFinal = @ldap_add($connect, $dnGravaListaFinal, $addListaFinal); $adicaoMemberListaFinal = @ldap_mod_add($connect, $dnGravaListaFinal, $addMemberListaFinal); criaLog("Lista $listaFinal gerada usuario $mailUsu incluido", "func"); $addListaFinalPai["objectclass"][0] = "person"; $addListaFinalPai["objectclass"][1] = "posixAccount"; $addListaFinalPai["objectclass"][2] = "phpgwaccount"; $addListaFinalPai["objectclass"][3] = "mailman"; $addListaFinalPai["objectclass"][4] = "inetorgperson"; $addListaFinalPai["uid"] = "$listaFinalPai"; $addListaFinalPai["mail"] = "$listaFinalPai"."$dominioLista"; $addListaFinalPai["phpgwAccountExpires"] = '-1'; $addListaFinalPai["phpgwAccountStatus"] = "A"; $addListaFinalPai["phpgwAccountType"] = "l"; $addListaFinalPai["accountStatus"] = "active"; $addListaFinalPai["sn"] = "$listaFinalPai"; $addListaFinalPai["cn"] = "$listaFinalPai"; $addListaFinalPai["homeDirectory"] = "/dev/null"; $addListaFinalPai["gidNumber"] = "777"; $addListaFinalPai["uidNumber"] = "-".Contador(); $addListaFinalPai["admLista"] = "$administrador"; $addListaFinalPai["listPass"] = "$senhaCript"; $addListaFinalPai["defaultmembermoderation"] = "1"; $addMemberListaFinalPai["mailforwardingaddress"] = "$mailUsu"; $dnGravaListaFinalPai = "uid=$listaFinalPai".","."$baseGravacao"; $adicaoListaFinalPai = @ldap_add($connect, $dnGravaListaFinalPai, $addListaFinalPai); $adicaoMemberListaFinalPai = @ldap_mod_add($connect, $dnGravaListaFinalPai, $addMemberListaFinalPai); criaLog("Lista $listaFinalPai gerada usuario $mailUsu incluido", "func"); } $teste = 0; }else { //fim do if de " funcUsu != empregado ", agora "funcUsu == empregado" -- Usuario tinha uma funcao e agora //voltou a ser simplesmente "Empregado" // echo "Funcionario eh --> $funcUsu\n"; // echo "Lista do funcionario --> $maiorLista\n"; // echo "Ou lista do funcionario --> $menorLista\n"; $infoDelUsu["mailforwardingaddress"] = "$mailUsu"; //Usuario a ser excluido das listas // echo "Entrou na lista != vazio!!!!!!!!!!"; //Exclui da lista funcional "especifica", ex.: listafunc-supti-tipae-tigte-supervisor $dnListaAntiga = "uid=$maiorLista".","."$baseGravacao"; // $delListaAntiga = ldap_delete($connect, $dnListaAntiga, $infoDelUsu); $delListaAntiga = @ldap_delete($connect, $dnListaAntiga); // echo "email -> $mailUsu\n"; //Exclui da lista funcional "generica", ex.: listafunc-supti-tipae-supervisores $dnListaPaiAntiga = "uid=$menorLista".","."$baseGravacao"; //$delListaPaiAntiga = ldap_delete($connect, $dnListaPaiAntiga, $infoDelUsu); $delListaPaiAntiga = @ldap_mod_del($connect, $dnListaPaiAntiga, $infoDelUsu); // echo "TUDO DIFERENTE!!!!!!!!!!!!!! $mailUsu\n"; } $resultListas = ""; //limpa o vetor com o resultado da busca $maiorLista = ""; //limpa a variavel para o proximo loop $menorLista = ""; //limpa a variavel para o proximo loop // $mailUsuario = $info[$i]['mail'][$j]; /* $filtro = "(mailforwardingaddress=$mailUsu)"; $soIsso = array("uid"); $srCompara = @ldap_search($connect, $baseGravacao, $filtro, $soIsso); $erro = ldap_errno($connect); if($erro == "87"){ $msg = "ERRO no campo mail do usuario ->".$info[$i]['uid'][0]; criaLog($msg,"func"); echo "\n$msg\n"; } $contsrCompara = @ldap_count_entries($connect, $srCompara); $comparaUid = @ldap_get_entries($connect, $srCompara); $listaTr = $comparaUid[0]['uid'][0]; $testeTr = strtr($listaTr , '-', '/'); $testeTr = substr($testeTr , 6); $infoAdicaoUsuario["mailforwardingaddress"] = "$mailUsuario"; $listaTmp = ""; $listaTmp2 = ""; */ //$j++; } //fim do if de " funcUsu != "" " $i++; } //fim do while externo (usuario por usuario) } $testeValor = 0; # Chamada da funcao para inclusao no Mailman if ($argv[1] == ""){ echo "Favor passar sigla da regional\n\n"; echo "todas regspo regrce regblb regfla regsdr regcta regbhe regrjo regpae regbsa\n"; }elseif($argv[1] == "todas"){ foreach($regionais as $valor){ $msg3 = "Gerando Lista regional -> $valor"; $regional = "ou=".$valor; criaLog($msg3,"func"); // echo "$msg3\n"; lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $senhaCript, $listas, $administrador); } $testeValor = 1; }else{ $msg3 = "Gerando Lista regional -> $valor"; $regional = "ou=".$argv[1]; lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $senhaCript, $listas, $administrador); $testeValor = 1; criaLog($msg3,"func"); // echo "$msg3\n"; } if($testeValor == 1){ $msg2 = "\nProcesso geracao de listas funcionais terminado!!!"; echo "$msg2\n"; criaLog($msg2,"corp"); } ?>