Improve Directory framework.
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / util / directory / ldap / DefaultLdapEntry.java
index 7166710f61191e594dd776714d6b7bd56f73d459..14a7eb87cc2f5b78dc931ab0e5dd2eb47750550b 100644 (file)
@@ -119,7 +119,7 @@ public class DefaultLdapEntry implements LdapEntry {
 
        public Dictionary<String, Object> getCredentials() {
                if (credentials == null)
-                       credentials = new AttributeDictionary(false);
+                       credentials = new AttributeDictionary(true);
                return credentials;
        }
 
@@ -374,29 +374,43 @@ public class DefaultLdapEntry implements LdapEntry {
 
                @Override
                public Object put(String key, Object value) {
-                       if (key == null) {
-                               // TODO persist to other sources (like PKCS12)
-                               char[] password = DirectoryDigestUtils.bytesToChars(value);
-                               byte[] hashedPassword = sha1hash(password);
-                               return put(LdapAttrs.userPassword.name(), hashedPassword);
-                       }
-                       if (key.startsWith("X-")) {
-                               return put(LdapAttrs.authPassword.name(), value);
-                       }
+                       try {
+                               if (key == null) {
+                                       // TODO persist to other sources (like PKCS12)
+                                       char[] password = DirectoryDigestUtils.bytesToChars(value);
+                                       byte[] hashedPassword = sha1hash(password);
+                                       return put(LdapAttrs.userPassword.name(), hashedPassword);
+                               }
+                               if (key.startsWith("X-")) {
+                                       return put(LdapAttrs.authPassword.name(), value);
+                               }
+                               if (key.equals(LdapAttrs.objectClasses.name())) {
+                                       Attribute attribute = new BasicAttribute(LdapAttrs.objectClass.name());
+                                       String[] objectClasses = value.toString().split("\n");
+                                       for (String objectClass : objectClasses) {
+                                               if (objectClass.trim().equals(""))
+                                                       continue;
+                                               attribute.add(objectClass);
+                                       }
+                                       Attribute previousAttribute = getModifiedAttributes().put(attribute);
+                                       if (previousAttribute != null)
+                                               return previousAttribute.get();
+                                       else
+                                               return null;
+                               }
 
-                       getDirectory().checkEdit();
-                       if (!isEditing())
-                               startEditing();
+                               getDirectory().checkEdit();
+                               if (!isEditing())
+                                       startEditing();
 
-                       if (!(value instanceof String || value instanceof byte[]))
-                               throw new IllegalArgumentException("Value must be String or byte[]");
+                               if (!(value instanceof String || value instanceof byte[]))
+                                       throw new IllegalArgumentException("Value must be String or byte[]");
 
-                       if (includeFilter && !attrFilter.contains(key))
-                               throw new IllegalArgumentException("Key " + key + " not included");
-                       else if (!includeFilter && attrFilter.contains(key))
-                               throw new IllegalArgumentException("Key " + key + " excluded");
+                               if (includeFilter && !attrFilter.contains(key))
+                                       throw new IllegalArgumentException("Key " + key + " not included");
+                               else if (!includeFilter && attrFilter.contains(key))
+                                       throw new IllegalArgumentException("Key " + key + " excluded");
 
-                       try {
                                Attribute attribute = getModifiedAttributes().get(key.toString());
                                // if (attribute == null) // block unit tests
                                attribute = new BasicAttribute(key.toString());