Comment faire pour modifier le mot de passe d'un utilisateur Windows 2000 par le biais de LDAP

Traductions disponibles Traductions disponibles
Numéro d'article: 269190 - Voir les produits auxquels s'applique cet article
Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
Agrandir tout | Réduire tout

Résumé

Vous pouvez définir un mot de passe d'utilisateur Windows 2000 par l'intermédiaire du protocole LDAP (Lightweight Directory Access Protocol), compte tenu de certaines restrictions. Cet article décrit comment définir ou modifier l'attribut de mot de passe.

Plus d'informations

Le mot de passe est stocké dans l'annuaire Active Directory sur un objet utilisateur dans l'attribut unicodePwd. Cet attribut peut être écrit dans certaines conditions, mais il ne peut pas être lu. L'attribut peut être modifié seulement, il ne peut pas être ajouté lors de la création d'un objet ou demandé lors d'une recherche. Pour modifier cet attribut, le client doit disposer d'une connexion Secure Socket Layer (SSL) 128 bits au serveur. Pour que cette connexion soit possible, le serveur doit posséder un certificat de serveur pour la connexion RSA 128 bits ; le client doit approuver l'autorité de certification qui a généré le certificat du serveur ; et le client et le serveur doivent tous deux prendre en charge le chiffrement 128 bits.

La syntaxe de l'attribut unicodePwd est une chaîne octet-string ; toutefois, le service d'annuaire s'attend à ce que la chaîne octet-string contienne une chaîne UNICODE (comme l'indique le nom de l'attribut). Ceci signifie que toutes les valeurs de cet attribut passées dans le protocole LDAP doivent être des chaînes UNICODE codées suivant les règles BER (Basic Encoding Rules) en tant que chaînes octet-string. En outre, la chaîne UNICODE doit être entourée de guillemets qui ne font pas partie du mot de passe souhaité.

Il existe deux méthodes possibles pour modifier l'attribut unicodePwd. La première est semblable à une opération normale de "modification du mot de passe par l'utilisateur". Dans ce cas, la requête de modification doit contenir à la fois une opération de suppression et d'ajout. L'opération de suppression doit contenir le mot de passe actuel entouré de guillemets. L'opération d'ajout doit contenir le nouveau mot de passe entouré de guillemets.

La deuxième méthode possible pour modifier cet attribut est similaire à la réinitialisation d'un mot de passe d'utilisateur par un administrateur. Pour cela, le client doit être connecté en tant qu'utilisateur disposant d'autorisations suffisantes pour modifier le mot de passe d'un autre utilisateur. Cette requête de modification doit contenir une opération unique de remplacement, avec le nouveau mot de passe souhaité entouré par des guillemets. Si le client dispose des autorisations suffisantes, ce mot de passe devient le nouveau mot de passe, indépendamment de la valeur du mot de passe d'origine.

Les deux exemples de fonctions suivantes illustrent ces opérations :
<![CDATA[
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];

	// Crée un tableau de LDAPMod.

	// Pour le paramètre unicodePwd, ceci DOIT être un op. double
	modEntry[0] = &modOldPassword;
	modEntry[1] = &modNewPassword;
	modEntry[2] = NULL;

	// Crée le struct mod pour l'attribut unicodePwd Add.
	modNewPassword.mod_op = LDAP_MOD_ADD | LDAP_MOD_BVALUES;
	modNewPassword.mod_type =	L"unicodePwd";
	modNewPassword.mod_vals.modv_bvals = newPwd_attr;

	// Crée le struct mod pour l'attribut unicodePwd Delete.
	modOldPassword.mod_op = LDAP_MOD_DELETE | LDAP_MOD_BVALUES;
	modOldPassword.mod_type =	L"unicodePwd";
	modOldPassword.mod_vals.modv_bvals = oldPwd_attr;


	// Le mot de passe aura une valeur unique, donc nous avons un seul élément.
	newPwd_attr[0] = &newPwdBerVal;
	newPwd_attr[1]= NULL;
	oldPwd_attr[0] = &oldPwdBerVal;
	oldPwd_attr[1]= NULL;


	// Place les mots de passe entre guillemets.
	wsprintf(pszNewPasswordWithQuotes,L"\"%s\"",pszNewPassword);
	wsprintf(pszOldPasswordWithQuotes,L"\"%s\"",pszOldPassword);

	// Crée les structures BER avec les mots de passe UNICODE 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;


	// Exécute une modification individuelle.
	err = ldap_modify_s(ldapConnection,
				pszUserDN,
				modEntry
				);

	if (err == LDAP_SUCCESS )
		wprintf(L"\nMot de passe modifié correctement !\n");
	else
		wprintf(L"\nÉchec lors de la modification du mot de passe !\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];

	// Crée un tableau de LDAPMod.
	// Pour le paramètre unicodePwd, ceci DOIT être un op. simple
	modEntry[0] = &modPassword;
	modEntry[1] = NULL;

	// Crée le struct mod pour l'attribut unicodePwd. 
	modPassword.mod_op = LDAP_MOD_REPLACE | LDAP_MOD_BVALUES;
	modPassword.mod_type =	L"unicodePwd";
	modPassword.mod_vals.modv_bvals = pwd_attr;

	// Le mot de passe aura une valeur unique, donc nous avons un seul élément.
	pwd_attr[0] = &pwdBerVal;
	pwd_attr[1]= NULL;

	// Place le mot de passe entre guillemets.
	wsprintf(pszPasswordWithQuotes,L"\"%s\"",pszPassword);

	// Crée la structure BER avec le mot de passe UNICODE.
	pwdBerVal.bv_len = wcslen(pszPasswordWithQuotes) * sizeof(WCHAR);
	pwdBerVal.bv_val = (char*)pszPasswordWithQuotes;


	// Exécute une modification individuelle.
	err = ldap_modify_s(ldapConnection,
				pszUserDN,
				modEntry
				);

	if (err == LDAP_SUCCESS )
		wprintf(L"\nMot de passe défini correctement !\n");
	else
		wprintf(L"\nÉchec lors de la définition du mot de passe !\n");

	return err;
}
				]]>

Propriétés

Numéro d'article: 269190 - Dernière mise à jour: jeudi 22 décembre 2005 - Version: 3.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professionel
  • Microsoft Windows 2000 Datacenter Server
Mots-clés : 
kbhowto kbmsg KB269190
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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