Bjoern Schmidt wrote:
[EMAIL PROTECTED] wrote:
Wie bei mir. Zwischen unseren configs bestehen keine interessanten
Unterschiede. Echt seltsam der Fehler. Ich gehe mal davon aus dass
es ein Konfigurationsproblem ist und mache keinen Bugreport auf.
F�rs Archiv h�nge ich den patch an. Vielleicht Liegt es ja doch am
Modul...
Der patch ist gegen libpam-ldap-169-2 aus sarge
[...]
Da ist mit diff irgendwas falsch gelaufen. Hier nochmal der richtige Patch
(Frank, Deiner ist auch kaputt). Sorry an alle die den patch nicht brauchen
und jetzt unn�tig 10kB. mehr herunterladen m�ssen ;)
--
Mit freundlichen Gruessen
Bjoern Schmidt
--- libpam-ldap-169/pam_ldap.c 2004-12-01 14:48:49.000000000 +0100
+++ /data/build/libpam-ldap-169/pam_ldap.c 2004-12-01 10:07:40.000000000
+0100
@@ -2604,9 +2604,10 @@
#ifdef LDAP_EXOP_MODIFY_PASSWD
/* for OpenLDAP password change extended operation */
BerElement *ber;
- struct berval *bv;
- char *retoid;
- struct berval *retdata;
+ struct berval bv = {0, NULL};
+ int id, code = LDAP_OTHER;
+ int rc_pr = 0;
+ LDAPMessage *res;
#endif /* LDAP_EXOP_MODIFY_PASSWD */
if (session->info == NULL)
@@ -2783,35 +2784,43 @@
ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_ID,
session->info->userdn);
/* this doesn't appear to be necessary anymore */
- ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_OLD, old_password);
+// ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_OLD, old_password);
ber_printf (ber, "ts", LDAP_TAG_EXOP_MODIFY_PASSWD_NEW, new_password);
ber_printf (ber, "N}");
- rc = ber_flatten (ber, &bv);
+ rc = ber_flatten2(ber, &bv, 0 );
if (rc < 0)
{
ber_free (ber, 1);
return PAM_BUF_ERR;
}
- ber_free (ber, 1);
+ if (ldap_bind_s( session->ld, session->info->userdn,
+ session->info->userpw, LDAP_AUTH_SIMPLE ) != LDAP_SUCCESS )
+ {
+ ldap_perror(session->ld, "ldap_bind" );
+ }
- rc =
- ldap_extended_operation_s (session->ld, LDAP_EXOP_MODIFY_PASSWD, bv,
- NULL, NULL, &retoid, &retdata);
- ber_bvfree (bv);
+ rc = ldap_extended_operation (session->ld, LDAP_EXOP_MODIFY_PASSWD,
+ &bv, NULL, NULL, &id);
- if (rc != LDAP_SUCCESS)
+ rc_pr = ldap_result(session->ld, LDAP_RES_ANY, LDAP_MSG_ALL, NULL, &res
);
+ if ( rc_pr < 0 )
+ {
+ ldap_perror( session->ld, "ldap_result error" );
+ }
+
+ rc_pr = ldap_parse_result(session->ld, res, &code, NULL, NULL, NULL,
NULL, 1 );
+ rc = code;
+
+ if( rc_pr != LDAP_SUCCESS )
{
- syslog (LOG_ERR, "pam_ldap: ldap_extended_operation_s %s",
- ldap_err2string (rc));
- rc = PAM_PERM_DENIED;
+ ldap_perror(session->ld, "ldap_parse_result error");
}
- else
+
+ if( code != LDAP_SUCCESS )
{
- ber_bvfree (retdata);
- ber_memfree (retoid);
- rc = PAM_SUCCESS;
+ printf( "Result: %s (%d)\n", ldap_err2string( code ), code );
}
#else
rc = PAM_SERVICE_ERR;
@@ -3414,6 +3423,8 @@
else
{
int errcode;
+ errcode = ldap_bind_s( session->ld, session->conf->binddn,
+ session->conf->bindpw, LDAP_AUTH_SIMPLE );
/* update shadowLastChange; may fail if not shadowAccount */
snprintf (buf, sizeof buf, "%ld", time (NULL) / (60 * 60 * 24));