[EMAIL PROTECTED] wrote:
Das stimmt, ich kann als root unbeachtet der cracklib die passw�rter
�ndern.
Der meckert zwar beim erstellen rum wenn er seine w�rterbuchdateien
durchforstet, macht es aber dann trotzdem. ich habe Dir mal die
geschehnisse mit strace verfolgt und den relevanten Teil angehangen.

Bei mir gehts auch nur als root. Das kann ich tolerieren.

versionsnummer vom slapd = 2.1.30-3

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

--
Mit freundlichen Gruessen
Bjoern Schmidt

--- /tmp/libpam-ldap-169/pam_ldap.c     2004-12-01 08:52:08.000000000 +0100
+++ 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,41 +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" );
+       }
 
-      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;
@@ -3420,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));

Antwort per Email an