#!/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 nos setores e depois adiciona os usuarios nas * #* respectivas listas. * #* 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 * #* * #* -> criaLog() - gera o arquivo de log /var/log/criaListasCorpRHDS.log * #* * #\**************************************************************************/ $regionais = array('regspo','regrce','regblm','regfla','regsdr','regcta','regbhe','regrjo','regpae','regbsa'); # Recebe o argumento passado na linha de comando. # $regional = $argv[1]; $retorno=encriptar($pass); $senhaCript=$retorno; # . # . function lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $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 = $regional.",".$basedn; $sr = @ldap_search($connect, $baseBusca, $filter, $justthese); $info = ldap_get_entries($connect, $sr); $cont = $info['count']; # Le Ldap, por usuario e cria arquivos com listas e participantes $i = 0; $msg = "Lendo Base Ldap.\n"; echo $msg; while($i <= ($cont-1)) { echo "."; # echo "\n"; # echo "UID usuario - ".$info[$i]['uid'][0]."\n"; $j = 0; while($info[$i]['mail'][$j] != "") { $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 o setor pelo sinal de barra ("/"); $contSetor = count($setor); //Conta a quantidade de itens gerados pelo explode acima; $yTmp1 = substr("$setor[0]", 0, 3); //Pega os três primeiros caracteres do primeiro item do vetor $setor; if($yTmp1 != "pse") { //Verifica de o setor do usuario NAO comeca com PSE; $teste = 0; if(($contSetor > $maxOU) || ($ou == "")) { // Verifica se cadastro do setor esta fora do padrao; $contSetor = $maxOU; $teste = 1; criaLog("ERRO CADASTRO SETOR - USUARIO - ".$info[$i]['uid'][0]." !!!","corp"); } $w = 0; while(($w <= ($contSetor - 1)) && ($teste == 0)) { // Enquanto nao chegar ao fim do (tamanho do) setor e setor // estiver cadastrado dentro do padrao $listaTmp = $listaTmp."-".strtolower($setor[$w]); $listaFinal = "listacorp".$listaTmp; // Monta o nome da lista; $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 != "listacorp-")) { // 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); } $w++; //exit; } //fim do while que cria a lista $dnGravaUsuario = "uid=$listaFinal".","."$baseGravacao"; $mailUsuario = $info[$i]['mail'][$j]; $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"; $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); 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 = ""; }else { //Senao, de o setor COMECAR com PSE... $mailUsuario = $info[$i]['mail'][$j]; $listaRegPse = "listaregional-" . $setor[0]; //Monta o nome da lista regional PSE; $listaNacPse = "listanacional-pse"; //Monta o nome da lista nacional PSE; $filterRegPse = "(uid=$listaRegPse)"; $srRegPse = @ldap_search($connect, $baseGravacao, $filterRegPse);// Verifica se a lista ja esta criada no RHDS; $contLdapRegPse = ldap_count_entries($connect, $srRegPse); if($contLdapRegPse == 0) { $infoAddRegPse["objectclass"][0] = "person"; $infoAddRegPse["objectclass"][1] = "posixAccount"; $infoAddRegPse["objectclass"][2] = "phpgwaccount"; $infoAddRegPse["objectclass"][3] = "mailman"; $infoAddRegPse["objectclass"][4] = "inetorgperson"; $infoAddRegPse["uid"] = "$listaRegPse"; $infoAddRegPse["mail"] = "$listaRegPse"."$dominioLista"; $infoAddRegPse["phpgwAccountExpires"] = '-1'; $infoAddRegPse["phpgwAccountStatus"] = 'A'; $infoAddRegPse["phpgwAccountType"] = "l"; $infoAddRegPse["accountStatus"] = "active"; $infoAddRegPse["sn"] = "$listaRegPse"; $infoAddRegPse["cn"] = "$listaRegPse"; $infoAddRegPse["homeDirectory"] = "/dev/null"; $infoAddRegPse["gidNumber"] = "777"; $infoAddRegPse["uidNumber"] = "-".Contador(); $infoAddRegPse["admLista"] = "$administrador"; $infoAddRegPse["listpass"] = "$senhaCript"; $infoAddRegPse["defaultmembermoderation"] = "1"; $dnGravaListaRegPse = "uid=$listaRegPse".","."$baseGravacao"; $addLdapRegPse = ldap_add($connect, $dnGravaListaRegPse, $infoAddRegPse); //exit; }else { $dnGravaListaRegPse = "uid=$listaRegPse".","."$baseGravacao"; $infoAddUsuRegPse["mailforwardingaddress"] = "$mailUsuario"; $addUsuRegPse = ldap_mod_add($connect, $dnGravaListaRegPse, $infoAddUsuRegPse); } $filterNacPse = "(uid=$listaNacPse)"; $srNacPse = @ldap_search($connect, $baseGravacao, $filterNacPse);// Verifica se a lista ja esta criada no RHDS; $contLdapNacPse = ldap_count_entries($connect, $srNacPse); if($contLdapNacPse == 0) { $infoAddNacPse["objectclass"][0] = "person"; $infoAddNacPse["objectclass"][1] = "posixAccount"; $infoAddNacPse["objectclass"][2] = "phpgwaccount"; $infoAddNacPse["objectclass"][3] = "mailman"; $infoAddNacPse["objectclass"][4] = "inetorgperson"; $infoAddNacPse["uid"] = "$listaNacPse"; $infoAddNacPse["mail"] = "$listaNacPse"."$dominioLista"; $infoAddNacPse["phpgwAccountExpires"] = '-1'; $infoAddNacPse["phpgwAccountStatus"] = 'A'; $infoAddNacPse["phpgwAccountType"] = "l"; $infoAddNacPse["accountStatus"] = "active"; $infoAddNacPse["sn"] = "$listaNacPse"; $infoAddNacPse["cn"] = "$listaNacPse"; $infoAddNacPse["homeDirectory"] = "/dev/null"; $infoAddNacPse["gidNumber"] = "777"; $infoAddNacPse["uidNumber"] = "-".Contador(); $infoAddNacPse["admLista"] = "$administrador"; $infoAddNacPse["listpass"] = "$senhaCript"; $infoAddNacPse["defaultmembermoderation"] = "1"; $dnGravaListaNacPse = "uid=$listaNacPse".","."$baseGravacao"; $addLdapNacPse = ldap_add($connect, $dnGravaListaNacPse, $infoAddNacPse); //exit; }else { $dnGravaListaNacPse = "uid=$listaNacPse".","."$baseGravacao"; $infoAddUsuNacPse["mailforwardingaddress"] = "$listaRegPse"."$dominioLista"; $addUsuNacPse = ldap_mod_add($connect, $dnGravaListaNacPse, $infoAddUsuNacPse); } } $j++; } //fim do while dentro do usuario $i++; } //fim do while externo (usuario por usuario) # Verifica se ja existe uma listacorp-serpro no RHDS; $listaSerpro = "listacorp-serpro"; $filterGrava = "(uid=$listaSerpro)"; // $justthese = array("uid");//linha nova $srGrava = ldap_search($connect, $baseGravacao, $filterGrava);// Verifica se a lista ja esta criada no RHDS; $contListaSerpro = ldap_count_entries($connect, $srGrava); // $infoSerpro = ldap_get_entries($connect, $srGrava); if($contListaSerpro == 0) { $tmp["objectclass"][0] = "person"; $tmp["objectclass"][1] = "posixAccount"; $tmp["objectclass"][2] = "phpgwaccount"; $tmp["objectclass"][3] = "mailman"; $tmp["objectclass"][4] = "inetorgperson"; $tmp["uid"] = "$listaSerpro"; $tmp["mail"] = "$listaSerpro"."$dominioLista"; $tmp["phpgwAccountExpires"] = '-1'; $tmp["phpgwAccountStatus"] = 'A'; $tmp["phpgwAccountType"] = "l"; $tmp["accountStatus"] = "active"; $tmp["sn"] = "$listaSerpro"; $tmp["cn"] = "$listaSerpro"; $tmp["homeDirectory"] = "/dev/null"; $tmp["gidNumber"] = "777"; $tmp["uidNumber"] = "-".Contador(); $tmp["admLista"] = "$administrador"; $tmp["listpass"] = "$senhaCript"; $tmp["defaultmembermoderation"] = "1"; $dnListaSerpro = "uid=$listaSerpro".","."$baseGravacao"; $adicaoListaSerpro = ldap_add($connect, $dnListaSerpro, $tmp); } // Insere listas dentro de listas, de acordo com a hierarquia no cadastramento do setor do usuario; $result = array_unique($ouTemp); foreach ($result as $value){ $setorNovo = explode("/",$value); $posicoes = count($setorNovo); //corrigir o caso de tres posicoes quando nao houver usuario na segunda!! if ($posicoes == 3){ // Trata os setores cadastrados com tres niveis (Ex.: SUPTI/TIPAE/TIGTE) $mailLista = "listacorp-$setorNovo[0]-$setorNovo[1]-$setorNovo[2]$dominioLista"; $msg3 = "Lista gerada"; criaLog("$msg3 -> $mailLista","corp"); $listaPai = "listacorp-$setorNovo[0]-$setorNovo[1]"; $dnGravaLista = "uid=$listaPai".","."$baseGravacao"; $infoGravaLista["mailforwardingaddress"] = "$mailLista"; $addListaEmListaPai = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);//Insere o ultimo nivel do vetor $setorNovo no nivel anterior $mailLista = "listacorp-$setorNovo[0]-$setorNovo[1]$dominioLista"; criaLog("$msg3 -> $mailLista","corp"); $listaPai = "listacorp-$setorNovo[0]"; $dnGravaLista = "uid=$listaPai".","."$baseGravacao"; $infoGravaLista["mailforwardingaddress"] = "$mailLista"; $addListaEmListaPai = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);//Insere o ultimo nivel do vetor $setorNovo no nivel anterior $mailLista = "listacorp-$setorNovo[0]$dominioLista"; criaLog("$msg3 -> $mailLista","corp"); $listaPai = "listacorp-serpro"; $dnGravaLista = "uid=$listaPai".","."$baseGravacao"; $infoGravaLista["mailforwardingaddress"] = "$mailLista"; $addListaEmListaSerpro = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);// Insere o nivel 0 do vetor $setorNovo na lista-serpro }elseif($posicoes == 2){ // Trata os setores cadastrados com dois niveis (Ex.: SUPTI/TIPAE) $mailLista = "listacorp-$setorNovo[0]-$setorNovo[1]$dominioLista"; $listaPai = "listacorp-$setorNovo[0]"; $dnGravaLista = "uid=$listaPai".","."$baseGravacao"; $infoGravaLista["mailforwardingaddress"] = "$mailLista"; $addListaEmListaPai = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);//Insere o ultimo nivel do vetor $setorNovo no nivel anterior $mailLista = "listacorp-$setorNovo[0]$dominioLista"; $listaPai = "listacorp-serpro"; $dnGravaLista = "uid=$listaPai".","."$baseGravacao"; $infoGravaLista["mailforwardingaddress"] = "$mailLista"; $addListaEmListaSerpro = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);// Insere o nivel 0 do vetor $setorNovo na lista-serpro }else{ // Trata os setores cadastrados com um nivel (Ex.: SUPTI) if($setorNovo[0] != "") { $mailLista = "listacorp-$setorNovo[0]$dominioLista"; $listaPai = "listacorp-serpro"; $dnGravaLista = "uid=$listaPai".","."$baseGravacao"; $infoGravaLista["mailforwardingaddress"] = "$mailLista"; $addListaEmListaSerpro = @ldap_mod_add($connect, $dnGravaLista, $infoGravaLista);// Insere o indice $setorNovo[0] na lista-serpro } } } } $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\n"; }elseif($argv[1] == "todas"){ foreach($regionais as $valor){ $msg3 = "\nGerando Lista regional -> $valor"; $regional = "ou=".$valor; criaLog($msg3,"corp"); echo "$msg3\n"; lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript); } $testeValor = 1; }else{ $regional = "ou=".$argv[1]; lerRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript); $testeValor = 1; } if($testeValor == 1){ $msg2 = "\nListas geradas na base LDAP!!!"; echo "$msg2\n"; criaLog($msg2,"corp"); } ?>