From 16a4c18b4c101e8e3dc7b8be756de1807970065f Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Thu, 19 Jul 2007 16:12:32 +0000
Subject: [PATCH] Update the server to provide more complete support for the password policy control as described in draft-behera-ldap-password-policy.  In particular, improved support has been provided for all operations for the case in which a user must change his/her password before performing any other types of operations.  These changes also provide enhanced support for add and modify operations that are rejected because a password change is not acceptable for some reason.

---
 opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java |   96 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 88 insertions(+), 8 deletions(-)

diff --git a/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java b/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
index 6226046..4cf5799 100644
--- a/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
+++ b/opends/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
@@ -1898,8 +1898,18 @@
            new AddResponseProtocolOp(de.getResultCode().getIntValue(),
                                      de.getErrorMessage(), de.getMatchedDN(),
                                      de.getReferralURLs());
+
+      List<Control> responseControls = addOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
     }
 
 
@@ -2014,8 +2024,18 @@
            new BindResponseProtocolOp(de.getResultCode().getIntValue(),
                                       de.getErrorMessage(), de.getMatchedDN(),
                                       de.getReferralURLs());
+
+      List<Control> responseControls = bindOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
 
       // If it was a protocol error, then terminate the connection.
       if (de.getResultCode() == ResultCode.PROTOCOL_ERROR)
@@ -2086,8 +2106,18 @@
                                          de.getErrorMessage(),
                                          de.getMatchedDN(),
                                          de.getReferralURLs());
+
+      List<Control> responseControls = compareOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
     }
 
 
@@ -2147,8 +2177,18 @@
            new DeleteResponseProtocolOp(de.getResultCode().getIntValue(),
                                         de.getErrorMessage(), de.getMatchedDN(),
                                         de.getReferralURLs());
+
+      List<Control> responseControls = deleteOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
     }
 
 
@@ -2217,8 +2257,18 @@
                                           de.getErrorMessage(),
                                           de.getMatchedDN(),
                                           de.getReferralURLs());
+
+      List<Control> responseControls = extendedOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
     }
 
 
@@ -2278,8 +2328,18 @@
            new ModifyResponseProtocolOp(de.getResultCode().getIntValue(),
                                         de.getErrorMessage(), de.getMatchedDN(),
                                         de.getReferralURLs());
+
+      List<Control> responseControls = modifyOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
     }
 
 
@@ -2343,8 +2403,18 @@
                                           de.getErrorMessage(),
                                           de.getMatchedDN(),
                                           de.getReferralURLs());
+
+      List<Control> responseControls = modifyDNOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
     }
 
 
@@ -2410,8 +2480,18 @@
                                           de.getErrorMessage(),
                                           de.getMatchedDN(),
                                           de.getReferralURLs());
+
+      List<Control> responseControls = searchOp.getResponseControls();
+      ArrayList<LDAPControl> responseLDAPControls =
+           new ArrayList<LDAPControl>(responseControls.size());
+      for (Control c : responseControls)
+      {
+        responseLDAPControls.add(new LDAPControl(c));
+      }
+
       sendLDAPMessage(securityProvider,
-                      new LDAPMessage(message.getMessageID(), responseOp));
+                      new LDAPMessage(message.getMessageID(), responseOp,
+                                      responseLDAPControls));
     }
 
 

--
Gitblit v1.10.0