Problemas de acentos no Active Directory – adicionar usuário active directory

Recentemente necessitei criar várias contas de usuários no Active Directory (AD) importando os dados de uma base de dados Mysql.
Ao importar o nome do usuário, os que possuíam acentos , eram criados no AD incompletos:
Exemplo :
Usuário : José Thomé de Araújo
era criado no Ad : Jos Thom de Ara jo
Este problema solucionei da seguite forma :

$nome_usuario=utf8_encode($nome_usuario);

Codificar a string em UTF 8

Exemplo de script em linguagem de programação PHP para criar automaticamente usuários no AD

/*
Script: cria_CN_professores.php
Desenvolvedora: Gisele Rodrigues Brugger – giselebrugger@gmail.com
Data: 17/05/2009
Descricao: script irá primeiramente fazer uma busca no banco de dados mysql (tabela professores) e localizar todas os professores e verificar a existência dos mesmos no Active Directory, e caso os mesmos não existam , eles serão criados.
*/

include(“includes/info_mysql.php”); // arquivo contendo informaçoes de conexao a base de dados myqsl
include(“includes/info_ad.php”); // arquivo contendo informcaoes de conexao com o AD
include(“includes/funcoes.php”); // arquivo contendo funcoes de manipulacao de strings

//conecta ao AD
$ds=ldap_connect($ip_ad ,$port_ad) or die(ldap_error()).”Nâo foi possível conectar ao AD”;

if ($ds){
//seta algumas variáveis
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
$r=ldap_bind($ds,$user_ad,$pass_ad);

$query1=mysql_query(“SELECT matricula_professor, nome_professor from professores “)or die (mysql_error());

echo “Cria CNS – CRIA CNs professores dentro da OU=Professores “;
$conta_novos_professores=0; // contador de nr de novos professores
$total_usuarios_encontrados=0; // contador de nr de professores verificados

while($row=mysql_fetch_array($query1)){

$matricula_professor=trim($row[“matricula_professor”]); // campo contendo o nr de matricula do professor na tabela professores
$nome_professor=trim($row[“nome_professor”]); // campo contendo o nome completo do professor na tabela professores

echo “antes->” . $nome_professor;
$nome_professor=FisrtToUpper($nome_professor);
$nome_professor=utf8_encode($nome_professor); // codifica a string em UTF8
echo “depois->” . $nome_professor;

//fazer busca no AD para verificar se existe a CN do professor selecionado
$justthese = array(“cn”);
$filter = “cn=”.$matricula_professor;
$sr=ldap_search($ds,$dn, $filter, $justthese,0,0,0);
$total_cn_encontrada=ldap_count_entries($ds,$sr);

if( $total_cn_encontrada == 0){
//não existe ainda a CN no AD e irá ser criada
//ps: a senha do usuario deverá ser trocada no primeiro login
//objectClass : top;person;organizationalPerson;user

$add[“cn”][0]=$matricula_professor;
$add[“sn”][0]=$matricula_professor;
$add[“userPrincipalName”][0]=$matricula_professor.$dominio;
$add[“DisplayName”][0]=$nome_professor;
$add[‘description’] =$nome_professor;
$add[‘sAMAccountName’] =$matricula_professor;
$add[“name”][0]=$matricula_professor;
// conta do usuario será criada já habilitada e sem senha(cod 544 = 512+32)
//explicacao: consulte ->
// Como usar os sinalizadores UserAccountControl para manipular as propriedades da conta de usuário http://support.microsoft.com/?id=305144

$add[“UserAccountControl”] = “544”;

//forcar usuario a trocar senha no primeiro acesso
$add[“pwdLastSet”]=”0″;

//Ps : você conseguira setar a senha do usuario apenas se o AD estiver rodando em conexao segura, ou seja , porta 636
//detalhes em : http://support.microsoft.com/?scid=kb%3Bpt-br%3B321051&x=15&y=12
//http://adldap.sourceforge.net/wiki/doku.php?id=ldap_over_ssl

//$add[‘userPassword’] =$senha_padrao_aluno;

$add[“objectclass”][0]=”top”;
$add[“objectclass”][1]=”person”;
$add[“objectclass”][2]=”organizationalPerson”;
$add[“objectclass”][3]=”user”;
// print_r($add); // exibe o vetor de objetos do usuario
/* Sintaxe no AD
dsadd user [-samid ] [-upn ] [-fn ] [-mi ] [-ln ] [-display ] [-empid ] [-pwd { | *}] [-desc ] [-memberof …] [-office ] [-tel ] [-email ] [-hometel ] [-pager ] [-mobile ] [-fax ] [-iptel ] [-webpg ] [-title ] [-company ] [-mgr ] [-hmdir ] [-hmdrv :][-profile ] [-loscr ] [-mustchpwd {yes | no}] [-canchpwd {yes | no}] [-reversiblepwd {yes | no}] [-pwdneverexpires {yes | no}] [-acctexpires ] [-disabled {yes | no}] [{-s | -d }] [-u ] [-p { | *}] [-q] [{-uc | -uco | -uci}]

Sintaxe no PHP
ldap_add ( resource $link_identifier , string $dn , array $entry )
*/
$nome_OU_pai=”cn=”.$matricula_professor.”,ou=Professores,”.$dn;

echo $nome_OU_pai;

$r= ldap_add($ds,$nome_OU_pai,$add); //adiciona novo usuario no AD
if(!$r){
echo “ERRO !!! CN -> ” . $matricula_professor . ” -> não foi adicionada.“;

}
else{
echo “CN -> “. $matricula_professor . “-> adicionado com SUCESSO “;
$conta_novos_professores ++;
}

}//fi do if

$total_usuarios_encontrados ++;

}//fim do while

echo “Total de professores verificados= ” .$total_usuarios_encontrados;
echo “Total de novos professores adicionados= ” . $conta_novos_professores;
ldap_close($ds);
mysql_close();
}
?>

arquivos dos includes



funcoes.php

function loCase($string){
$string = strtolower($string);
$string = str_replace(“”,”â”,$string);
$string = str_replace(“Á”,”á”,$string);
$string = str_replace(“Ô,”ã”,$string);
$string = str_replace(“A”,”à”,$string);
$string = str_replace(“Ê”,”ê”,$string);
$string = str_replace(“É”,”é”,$string);
$string = str_replace(“I”,”Δ,$string);
$string = str_replace(“Í”,”í”,$string);
$string = str_replace(“Ó”,”ó”,$string);
$string = str_replace(“Õ”,”õ”,$string);
$string = str_replace(“Ô”,”ô”,$string);
$string = str_replace(“Ú”,”ú”,$string);
$string = str_replace(“U”,”û”,$string);
$string = str_replace(“Ç”,”ç”,$string);
return ($string);
}
//funcao retira acentos
function SemAcentos($string){

$string = str_replace(“”,”a”,$string);
$string = str_replace(“â”,”a”,$string);
$string = str_replace(“Á”,”a”,$string);
$string = str_replace(“á”,”a”,$string);
$string = str_replace(“Ô,”a”,$string);
$string = str_replace(“á”,”a”,$string);
$string = str_replace(“ã”,”a”,$string);

$string = str_replace(“Ê”,”e”,$string);
$string = str_replace(“ê”,”e”,$string);
$string = str_replace(“É”,”e”,$string);
$string = str_replace(“é”,”e”,$string);

$string = str_replace(“I”,”i”,$string);
$string = str_replace(“í”,”i”,$string);
$string = str_replace(“Í”,”i”,$string);

$string = str_replace(“Ó”,”o”,$string);
$string = str_replace(“ó”,”o”,$string);
$string = str_replace(“Õ”,”o”,$string);
$string = str_replace(“ô”,”o”,$string);
$string = str_replace(“Ô”,”o”,$string);

$string = str_replace(“Ú”,”u”,$string);
$string = str_replace(“ú”,”u”,$string);

$string = str_replace(“Ç”,”c”,$string);
$string = str_replace(“ç”,”c”,$string);

$string = str_replace(“º”,””,$string);
$string = str_replace(“ª”,””,$string);

return ($string);

}

function FisrtToUpper($string){
//converte tudo para minusculo
$string=strtolower($string);
//converte para maiusculo o primeiro caracter de cada palavra
$string=ucwords($string);
return ($string);
}

function Concantena_string($string){
//concatena a string retirando espacos em branco
$string=str_replace(” “,””,$string );
return ($string);
}
?>

/*
Script: info_ad.php
Desenvolvedora: Gisele Rodrigues Brugger – giselebrugger@gmail.com
Data: 19/03/2009
Informa os dados para conexão com o Active Directory (AD)
*/

$ip_ad = “nome_do_servidor_do_Active_Directory”;
$user_ad=”nome_do_usuario_do_AD_com_permissao_alterar_esquema@dominio”;
$pass_ad = “senha_do_usuario”;
$port_ad=”389″;
$dn=”dc=nome_do_dominio”;
$dominio=”@nome_dominio”;
$senha_padrao_aluno=”123456″ ;
?>

/*
Script: info_mysql.php
Desenvolvedora: Gisele Rodrigues Brugger – giselebrugger@gmail.com
Data: 19/03/2009
Informa os dados para conexão com a base de dados MYSQL
*/
$host_mysql = “nome_do_servidor_mysql”; //ou IP
$base_mysql = “nome_base_de_dados_mysql”;
$user_mysql = “nome_usuario_mysql”;
$pass_mysql = “senha_usuario_mysql”;
$conecta=mysql_connect($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db($base_mysql);
?>