Como alterar a senha do usuário do Windows 2000 através do LDAP

Traduções deste artigo Traduções deste artigo
ID do artigo: 269190 - Exibir os produtos aos quais esse artigo se aplica.
Aviso
Este artigo se aplica ao Windows 2000. Suporte 2000 termina em 13 de julho de 2010.Windows 2000 End-of-Support Solution Center é um ponto de partida para planejar uma estratégia de migração do Windows 2000. Para obter mais informações, consulte a Microsoft Support Lifecycle Policy.
Expandir tudo | Recolher tudo

Sumário

Você pode definir senha do usuário do Windows 2000 através do protocolo (LDAP) fornecido determinadas restrições. Este artigo descreve como definir ou alterar o atributo de senha.

Mais Informações

A senha é armazenada no Active Directory em um objeto de usuário no atributo unicodePwd. Esse atributo pode ser escrito em condições restritas, mas não pode ser lido. O atributo só pode ser modificado; ele não pode ser adicionado na criação do objeto ou consultado por uma pesquisa. Para modificar esse atributo, o cliente deve ter uma conexão (Secure Socket LAYER) de 128 bits para o servidor. Para esta conexão ser possível, o servidor deve possuir um certificado de servidor para uma conexão de RSA de 128 bits, o cliente deve confiar na autoridade de certificação () que gerou o certificado de servidor e cliente e servidor devem ser capazes de criptografia de 128 bits.

A sintaxe do atributo unicodePwd é a seqüência de octeto; no entanto, o serviço de diretório espera que a seqüência de octeto conterá uma seqüência de caracteres UNICODE (como o nome do atributo indica). Isso significa que quaisquer valores para este atributo passados no LDAP deve ser cadeias de caracteres UNICODE que são codificados BER (Basic regras de codificação) como uma seqüência de octeto. Além disso, a seqüência UNICODE deve começar e finalizar cotações que não fazem parte da senha desejada.

Há duas maneiras possíveis para modificar o atributo unicodePwd. O primeiro é semelhante a um "usuário alterar senha" normal operação. Nesse caso, a solicitação de modificação deve conter uma exclusão e uma operação de adicionar. A operação de exclusão deve conter a senha atual com aspas ao redor dele. A operação de adicionar deve conter a nova senha desejada com aspas ao redor dele.

A segunda forma de modificar esse atributo é análoga ao administrador redefinir uma senha para um usuário. Para fazer isso, o cliente deve ligar como usuário com permissões suficientes para modificar a senha do usuário. Esta solicitação de modificação deve conter uma operação única substituição com a nova senha desejada entre aspas. Se o cliente tem permissões suficientes, essa senha se tornar a nova senha, independentemente de qual foi a senha antiga.

As duas funções a seguir fornecem exemplos dessas operações:
ULONG ChangeUserPassword(WCHAR* pszUserDN, WCHAR* pszOldPassword,WCHAR* pszNewPassword)
{
	ULONG err = 1;
	LDAPMod modNewPassword;
	LDAPMod modOldPassword;
	LDAPMod *modEntry[3];
	BERVAL newPwdBerVal;
	BERVAL oldPwdBerVal;
	BERVAL *newPwd_attr[2];
	BERVAL *oldPwd_attr[2];
	WCHAR pszNewPasswordWithQuotes[1024];
	WCHAR pszOldPasswordWithQuotes[1024];

	// Build an array of LDAPMod.

	// For setting unicodePwd, this MUST be a double op.
	modEntry[0] = &modOldPassword;
	modEntry[1] = &modNewPassword;
	modEntry[2] = NULL;

	// Build mod struct for unicodePwd Add.
	modNewPassword.mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES;
	modNewPassword.mod_type =	L"unicodePwd";
	modNewPassword.mod_vals.modv_bvals = newPwd_attr;

	// Build mod struct for unicodePwd Delete.
	modOldPassword.mod_op = LDAP_MOD_DELETE | LDAP_MOD_BVALUES;
	modOldPassword.mod_type =	L"unicodePwd";
	modOldPassword.mod_vals.modv_bvals = oldPwd_attr;


	// Password will be single valued, so we only have one element.
	newPwd_attr[0] = &newPwdBerVal;
	newPwd_attr[1]= NULL;
	oldPwd_attr[0] = &oldPwdBerVal;
	oldPwd_attr[1]= NULL;


	// Surround the passwords in quotes.
	wsprintf(pszNewPasswordWithQuotes,L"\"%s\"",pszNewPassword);
	wsprintf(pszOldPasswordWithQuotes,L"\"%s\"",pszOldPassword);

	// Build the BER structures with the UNICODE passwords w/quotes.
	newPwdBerVal.bv_len = wcslen(pszNewPasswordWithQuotes) * sizeof(WCHAR);
	newPwdBerVal.bv_val = (char*)pszNewPasswordWithQuotes;
	oldPwdBerVal.bv_len = wcslen(pszOldPasswordWithQuotes) * sizeof(WCHAR);
	oldPwdBerVal.bv_val = (char*)pszOldPasswordWithQuotes;


	// Perform single modify.
	err = ldap_modify_s(ldapConnection,
				pszUserDN,
				modEntry
				);

	if (err == LDAP_SUCCESS )
		wprintf(L"\nPassword succesfully changed!\n");
	else
		wprintf(L"\nPassword change failed!\n");

	return err;
}

ULONG SetUserPassword(WCHAR* pszUserDN, WCHAR* pszPassword)
{
	ULONG err = 1;
	LDAPMod modPassword;
	LDAPMod *modEntry[2];
	BERVAL pwdBerVal;
	BERVAL *pwd_attr[2];
	WCHAR pszPasswordWithQuotes[1024];

	// Build an array of LDAPMod.
	// For setting unicodePwd, this MUST be a single op.
	modEntry[0] = &modPassword;
	modEntry[1] = NULL;

	// Build mod struct for unicodePwd. 
	modPassword.mod_op = LDAP_MOD_REPLACE | LDAP_MOD_BVALUES;
	modPassword.mod_type =	L"unicodePwd";
	modPassword.mod_vals.modv_bvals = pwd_attr;

	// Password will be single valued, so we only have one element.
	pwd_attr[0] = &pwdBerVal;
	pwd_attr[1]= NULL;

	// Surround the password in quotes.
	wsprintf(pszPasswordWithQuotes,L"\"%s\"",pszPassword);

	// Build the BER structure with the UNICODE password.
	pwdBerVal.bv_len = wcslen(pszPasswordWithQuotes) * sizeof(WCHAR);
	pwdBerVal.bv_val = (char*)pszPasswordWithQuotes;


	// Perform single modify.
	err = ldap_modify_s(ldapConnection,
				pszUserDN,
				modEntry
				);

	if (err == LDAP_SUCCESS )
		wprintf(L"\nPassword succesfully set!\n");
	else
		wprintf(L"\nPassword set failed!\n");

	return err;
}
				

Propriedades

ID do artigo: 269190 - Última revisão: terça-feira, 29 de junho de 2004 - Revisão: 3.7
A informação contida neste artigo aplica-se a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
Palavras-chave: 
kbmt kbhowto kbmsg KB269190 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 269190

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com