Commit 34b40c7e authored by Brian Major's avatar Brian Major
Browse files

ac2 - Password change now binds as user making the change.

parent 80bdb479
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -248,7 +248,7 @@ class LdapConnections
            }
            if (autoConfigUnboundReadOnlyConn != null)
            {
                log.debug("Releasing read only auto config connection.");
                log.debug("Releasing unbound read only auto config connection.");
                persistence.releaseConnection(LdapPersistence.POOL_UNBOUNDREADONLY, autoConfigUnboundReadOnlyConn);
                profiler.checkpoint("Release read only connection");
            }
@@ -267,7 +267,7 @@ class LdapConnections
            }
            if (manualConfigUnboundReadOnlyConn != null)
            {
                log.debug("Releasing read only manual config connection.");
                log.debug("Releasing unbound read only manual config connection.");
                unboundReadOnlyPool.releaseConnection(manualConfigUnboundReadOnlyConn);
            }
        }
+12 −9
Original line number Diff line number Diff line
@@ -808,18 +808,21 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO
                throw new AccessControlException("Given user and authenticating user do not match");
            }

            ProxiedAuthorizationV2RequestControl control =
                new ProxiedAuthorizationV2RequestControl("dn:" + getSubjectDN().toNormalizedString());
            Control[] controls = new Control[] {control};
            String username = null;
            for (Principal p : user.getIdentities())
            {
                if (p instanceof HttpPrincipal)
                    username = p.getName();
            }

            BindRequest bindRequest = new SimpleBindRequest(
                    getUserDN(username, config.getUsersDN()), oldPassword);
            LDAPConnection conn = this.getUnboundReadConnection();
            conn.bind(bindRequest);

            PasswordModifyExtendedRequest passwordModifyRequest =
                new PasswordModifyExtendedRequest(
                    userDN.toNormalizedString(), oldPassword, newPassword, controls);

            LdapConfig ldapConfig = LdapConfig.getLdapConfig();
            String server = ldapConfig.getReadWritePool().getServers().get(0);
            int port = ldapConfig.getPort();
            LDAPConnection conn = new LDAPConnection(LdapDAO.getSocketFactory(ldapConfig), server, port);
                    userDN.toNormalizedString(), oldPassword, newPassword);

            PasswordModifyExtendedResult passwordModifyResult = (PasswordModifyExtendedResult)
                    conn.processExtendedOperation(passwordModifyRequest);