#!/usr/bin/php criaListaRegional() - le o LDAP/RHDS, usuario por usuario, em cada * #* cada regional. A partir dai, gera os nomes das listas, baseados nas * #* regionais e depois adiciona os usuarios nas respectivas listas. * #* * #* Tambem verifica se o usuario foi recadastrado em outra regional 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('regbhe','regblm','regbsa','regcta','regfla','regpae','regrce','regrjo','regsdr','regspo'); # Recebe o argumento passado na linha de comando. # $regional = $argv[1]; $retorno=encriptar($pass); $senhaCript=$retorno; # . # . function criaListaRegional($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 = "ou=".$regional.",".$basedn; $sr = @ldap_search($connect, $baseBusca, $filter, $justthese); $info = ldap_get_entries($connect, $sr); $cont = $info['count']; //Faz uma procura inicial pela lista da regional, caso ela ja exista, nao sera feito nada, caso contrario, ela sera criada; $regtmp = substr("$regional", 3);//separa o parametro $regional e pega a parte final p/ formar o nome da lista //(ex.: regpae, pega o final 'pae'); $listaFinal = "listaregional-".$regtmp; // 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); if(($contLdap == 0) && ($listaFinal != "listaregional-")) { // Se a lista nao existir no RHDS, sera criada; $msg = "\nLendo Base Ldap - Regional $regional.\n"; echo $msg; $infoAddListaReg["objectclass"][0] = "person"; $infoAddListaReg["objectclass"][1] = "posixAccount"; $infoAddListaReg["objectclass"][2] = "phpgwaccount"; $infoAddListaReg["objectclass"][3] = "mailman"; $infoAddListaReg["objectclass"][4] = "inetorgperson"; $infoAddListaReg["uid"] = "$listaFinal"; $infoAddListaReg["mail"] = "$listaFinal"."$dominioLista"; $infoAddListaReg["phpgwAccountExpires"] = '-1'; $infoAddListaReg["phpgwAccountStatus"] = 'A'; $infoAddListaReg["phpgwAccountType"] = "l"; $infoAddListaReg["accountStatus"] = "active"; $infoAddListaReg["sn"] = "$listaFinal"; $infoAddListaReg["cn"] = "$listaFinal"; $infoAddListaReg["homeDirectory"] = "/dev/null"; $infoAddListaReg["gidNumber"] = "777"; $infoAddListaReg["uidNumber"] = "-".Contador(); $infoAddListaReg["admLista"] = "$administrador"; $infoAddListaReg["listpass"] = "$senhaCript"; $infoAddListaReg["defaultmembermoderation"] = "1"; $dnGravaLista = "uid=$listaFinal".","."$baseGravacao"; $adicaoLdap = ldap_add($connect, $dnGravaLista, $infoAddListaReg); $dnGravaUsuario = "uid=$listaFinal".","."$baseGravacao"; $i = 0; while($i <= ($cont - 1)) { echo "."; $j = 0; while($info[$i]['mail'][$j] != "") { $mailUsuario = $info[$i]['mail'][$j]; $infoAdicaoUsuario["mailforwardingaddress"] = "$mailUsuario"; $addUsuLista = @ldap_mod_add($connect, $dnGravaUsuario, $infoAdicaoUsuario); $j++; } $i++; } }else { //se exister, os usuarios serao adicionados e/ou remanejados entre as listas; # Le Ldap, por usuario e cria arquivos com listas e participantes $i = 0; $msg = "\nLendo Base Ldap - Regional $regional.\n"; echo $msg; while($i <= ($cont-1)) { echo "."; $teste = 0; $j = 0; while($info[$i]['mail'][$j] != "") { $dnGravaUsuario = "uid=$listaFinal".","."$baseGravacao"; $mailUsuario = $info[$i]['mail'][$j]; // Filtro para pegar somente as listas corp $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]; $testeTrtmp = explode('-', $listaTr); $testeTr = $testeTrtmp[1]; $infoDelUsuario["mailforwardingaddress"] = "$mailUsuario"; # Aqui ocorre a verificao se um usuario ja pertence a alguma lista criada if ($testeTr == $regtmp) { 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 != $regtmp) && ($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"); } $j++; } //fim do while dentro do usuario $i++; } //fim do while externo (usuario por usuario) }//fim do if(($contLdap == 0) && ($listaFinal != "listaregional-")); } $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 = "\n\nGerando Lista -> Regional $valor"; $regional = $valor; criaLog($msg3,"corp"); echo "$msg3\n"; criaListaRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript); } $testeValor = 1; }else{ $regional = $argv[1]; criaListaRegional($server, $port, $rootdn, $pass, $basedn, $regional, $baseGravacao, $dominioLista, $maxOU, $administrador, $senhaCript); $testeValor = 1; } if($testeValor == 1){ $msg2 = "\n\nListas regionais geradas na base LDAP!!!"; echo "$msg2\n"; criaLog($msg2,"corp"); } ?>