Cómo cambiar la contraseña de un usuario de Windows 2000 through LDAP

Seleccione idioma Seleccione idioma
Id. de artículo: 269190 - Ver los productos a los que se aplica este artículo
Aviso
Este artículo se aplica a Windows 2000. Soporte técnico para Windows 2000 finaliza el 13 de julio de 2010. El Windows 2000 End-of-Support Solution Center es un punto de partida para planear su estrategia de migración desde Windows 2000. Para obtener más información consulte la Microsoft Support Lifecycle Policy.
Expandir todo | Contraer todo

Resumen

Puede establecer la contraseña del usuario de Windows 2000 mediante el acceso protocolo (LIGHTWEIGHT Directory) dada ciertas restricciones. En este artículo se describe cómo establecer o cambiar el atributo de contraseña.

Más información

La contraseña se almacena en Active Directory en un objeto de usuario en el atributo unicodePwd. Este atributo se puede escribir en condiciones restringidas, pero no se puede leer. Sólo se puede modificar el atributo; no puede agregarse en la creación de objetos o consultado por una búsqueda. Para modificar este atributo, el cliente debe tener una conexión de Secure Socket Layer (SSL) de 128 bits para el servidor. Para esta conexión que sea posible, el servidor debe poseer un certificado de servidor para una conexión de RSA de 128 bits, el cliente debe confiar en la entidad emisora de certificados (CA) que generó el certificado de servidor y cliente y servidor deben ser capaces de cifrado de 128 bits.

La sintaxis del atributo unicodePwd es la cadena de octeto; sin embargo, el servicio de directorio de espera que la cadena de octeto contendrá una cadena UNICODE (tal como indica el nombre del atributo). Esto significa que todos los valores para este atributo se pasan en LDAP debe ser cadenas UNICODE que están codificada en BER (Basic Encoding Rules) como una cadena de octeto. Además, la cadena UNICODE debe comienzan y terminan en ofertas que no forman parte de la contraseña que desee.

Hay dos formas posibles de modificar el atributo unicodePwd. Es similar a normal "contraseña de cambio de usuario" la primera operación. En este caso, la solicitud de modificación debe contener una eliminación y una operación de agregar. La operación de eliminación debe contener la contraseña actual con comillas alrededor de ella. La operación de agregar debe contener la nueva contraseña que desee con comillas alrededor de ella.

La segunda forma de modificar este atributo es análoga a un administrador restablece una contraseña para un usuario. Para ello, debe enlazar en el cliente como usuario con permisos suficientes para modificar la contraseña de otro usuario. Esta solicitud de modificación debe contener una operación de reemplazo único con la nueva contraseña que desee entre comillas. Si el cliente tiene permisos suficientes, esta contraseña se convierten en la nueva contraseña, independientemente de cuál era la contraseña antigua.

Las dos funciones siguientes proporcionan ejemplos de estas operaciones:
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;
}
				

Propiedades

Id. de artículo: 269190 - Última revisión: martes, 29 de junio de 2004 - Versión: 3.7
La información de este artículo se refiere a:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
Palabras clave: 
kbmt kbhowto kbmsg KB269190 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 269190

Enviar comentarios

 

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