From 69b0235b045f21d8f839c2ea7f9e4a917064014d Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Fri, 28 Jan 2011 13:39:24 +0000
Subject: [PATCH] Fix for OPENDJ-21, make sure password reset or changes with the Password Modify Extended Operation are triggering Account Status Notifications.

---
 opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java |   42 +++++++++++++++++++++++++++++++++++++++---
 1 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
index 0449fa0..169a050 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
@@ -23,12 +23,12 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2011 ForgeRock AS
  */
 package org.opends.server.extensions;
+
+
 import org.opends.messages.Message;
-
-
-
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -63,6 +63,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.ErrorLogger;
 import static org.opends.messages.ExtensionMessages.*;
+import static org.opends.messages.CoreMessages.*;
 
 import org.opends.messages.MessageBuilder;
 import static org.opends.server.util.ServerConstants.*;
@@ -1132,6 +1133,41 @@
                                                  pwPolicyWarningValue,
                                                  pwPolicyErrorType));
         }
+
+        // Handle Account Status Notifications that may be needed.
+        // They are not handled by the backend for internal operations.
+        List<AttributeValue> currentPasswords = null;
+        if (oldPassword != null)
+        {
+          currentPasswords = new ArrayList<AttributeValue>(1);
+          currentPasswords.add(AttributeValues
+                              .create(oldPassword, oldPassword));
+        }
+        List<AttributeValue> newPasswords = null;
+        if (newPassword != null)
+        {
+          newPasswords = new ArrayList<AttributeValue>(1);
+          newPasswords.add(AttributeValues
+                           .create(newPassword, newPassword));
+        }
+        if (selfChange)
+        {
+          Message message = INFO_MODIFY_PASSWORD_CHANGED.get();
+          pwPolicyState.generateAccountStatusNotification(
+            AccountStatusNotificationType.PASSWORD_CHANGED,
+            userEntry, message,
+            AccountStatusNotification.createProperties(pwPolicyState, false,
+                  -1, currentPasswords, newPasswords));
+        }
+        else
+        {
+          Message message = INFO_MODIFY_PASSWORD_RESET.get();
+          pwPolicyState.generateAccountStatusNotification(
+            AccountStatusNotificationType.PASSWORD_RESET,
+            userEntry, message,
+            AccountStatusNotification.createProperties(pwPolicyState, false,
+                  -1, currentPasswords, newPasswords));
+        }
       }
     }
     finally

--
Gitblit v1.10.0