Methods Summary |
---|
private void | addGroupToUser(java.lang.String userName)
String[] attrIDs = {membersAttr};
Hashtable env = new Hashtable();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(javax.naming.Context.PROVIDER_URL, rootURL);
DirContext rootCtx = null;
try {
rootCtx = new InitialDirContext(env);
String[] returnAttrs = {groupAttr};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
StringBuffer filterBuffer =
new StringBuffer(128)
.append(mailAddressAttr)
.append("=")
.append(userName)
.append("@")
.append(usersDomain);
String filter = filterBuffer.toString();
NamingEnumeration enumeration = rootCtx.search("", filter, ctls);
if (enumeration.hasMore()) { // ie User is in Directory
SearchResult newSr = (SearchResult)enumeration.next();
String userDN = newSr.getName();
Attribute servers = rootCtx.getAttributes(userDN, returnAttrs).get(groupAttr);
if (servers != null && servers.contains(baseNodeDN)) {//server already registered for user
getLogger().info(baseNodeDN + " already in user's Groups. " );
//System.out.println(baseNodeDN + " already in user's Groups. ");
} else {
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, authType);
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_PRINCIPAL, principal);
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_CREDENTIALS, password);
rootCtx.modifyAttributes(userDN, DirContext.ADD_ATTRIBUTE, new BasicAttributes(groupAttr, baseNodeDN, true));
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, "none");
getLogger().info(baseNodeDN + " added to user's groups ");
//System.out.println(baseNodeDN + " added to users' groups ");
}
} else {
StringBuffer infoBuffer =
new StringBuffer(64)
.append("User ")
.append(userName)
.append(" not in directory.");
getLogger().info(infoBuffer.toString());
// System.out.println(infoBuffer.toString());
}
} catch (NamingException e) {
getLogger().error("Problem adding group to user " + userName);
//System.out.println("Problem adding group to user " + userName);
//System.out.println(e.getMessage());
//e.printStackTrace();
} finally {
closeDirContext(rootCtx);
}
|
public synchronized void | addUser(java.lang.String userName, java.lang.Object attributes)Adds userName to the MemberAttribute (specified in conf.xml) of this
node.
If ManageGroupAttribute (conf.xml) is TRUE then calls addGroupToUser.
String[] attrIDs = {membersAttr};
// First, add username to mailGroup at baseNode
try {
Attribute members = ctx.getAttributes("", attrIDs).get(membersAttr);
if (members != null && members.contains(userName)) {//user already here
StringBuffer infoBuffer =
new StringBuffer(64)
.append("Found ")
.append(userName)
.append(" already in mailGroup. ");
getLogger().info(infoBuffer.toString());
//System.out.println(infoBuffer.toString());
} else {
ctx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, authType);
ctx.addToEnvironment(javax.naming.Context.SECURITY_PRINCIPAL, principal);
ctx.addToEnvironment(javax.naming.Context.SECURITY_CREDENTIALS, password);
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute(membersAttr, userName));
ctx.modifyAttributes("", mods);
ctx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, "none");
StringBuffer infoBuffer =
new StringBuffer(128)
.append(userName)
.append(" added to mailGroup ")
.append(baseNodeDN);
getLogger().info(infoBuffer.toString());
//System.out.println(infoBuffer.toString());
}
} catch (NamingException e) {
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Problem adding user ")
.append(userName)
.append(" to: ")
.append(baseNodeDN)
.append(e);
getLogger().error(exceptionBuffer.toString());
}
// Add attributes to user objects, if necessary
if (manageGroupAttr) {
addGroupToUser(userName);
}
// if (managePasswordAttr) {
// String userPassword = (String) attributes; // Not yet implemented
// }
|
public boolean | addUser(java.lang.String username, java.lang.String password)
if (!contains(username)) {
addUser(username, password);
return contains(username);
} else {
return false;
}
|
public boolean | addUser(org.apache.james.services.User user)Update the repository with the specified user object. Unsupported for
this user repository type.
return false;
|
private void | closeDirContext(javax.naming.directory.DirContext ctx)
try {
if (ctx != null) {
ctx.close();
}
} catch (NamingException ne) {
getLogger().warn("UsersLDAPRepository: Unexpected exception encountered while closing directory context: " + ne);
}
|
public void | configure(org.apache.avalon.framework.configuration.Configuration conf)
LDAPHost = conf.getChild("LDAPServer").getValue();
rootNodeDN = conf.getChild("LDAPRoot").getValue();
serverRDN = conf.getChild("ThisServerRDN").getValue();
mailAddressAttr
= conf.getChild("MailAddressAttribute").getValue();
identAttr = conf.getChild("IdentityAttribute").getValue();
authType = conf.getChild("AuthenticationType").getValue();
principal = conf.getChild("Principal").getValue();
password = conf.getChild("Password").getValue();
membersAttr = conf.getChild("MembersAttribute").getValue();
manageGroupAttr
= conf.getChild("ManageGroupAttribute").getValueAsBoolean( false );
groupAttr = conf.getChild("GroupAttribute").getValue();
managePasswordAttr = conf.getChild("ManagePasswordAttribute").getValueAsBoolean( false );
passwordAttr = conf.getChild("PasswordAttribute").getValue();
|
public boolean | contains(java.lang.String name)
boolean found = false;
String[] attrIDs = {membersAttr};
try {
Attribute members = ctx.getAttributes("", attrIDs).get(membersAttr);
if (members != null && members.contains(name)) {
found = true;
StringBuffer infoBuffer =
new StringBuffer(64)
.append("Found ")
.append(name)
.append(" in mailGroup. ");
getLogger().info(infoBuffer.toString());
//System.out.println(infoBuffer.toString());
}
} catch (NamingException e) {
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Problem finding user ")
.append(name)
.append(" : ")
.append(e);
getLogger().error(exceptionBuffer.toString());
//System.out.println(exceptionBuffer.toString());
}
return found;
|
public boolean | containsCaseInsensitive(java.lang.String name)
return contains(name);
|
public void | contextualize(org.apache.avalon.framework.context.Context context)
usersDomain = (String)context.get(Constants.DEFAULT_DOMAIN);
|
public int | countUsers()
String[] attrIDs = {membersAttr};
int result = -1;
try {
Attribute members = ctx.getAttributes("", attrIDs).get(membersAttr);
if (members != null) {
result = members.size();
} else {
result = 0;
}
} catch (NamingException e) {
getLogger().error("Problem counting users: " + e);
//System.out.println("Problem counting users. ");
}
return result;
|
public void | dispose()Disposes of all open directory contexts
closeDirContext(ctx);
ctx = null;
|
public java.lang.String | getChildDestination(java.lang.String childName)
String destination = null;
String filter = "cn=" + childName;
SearchControls ctls = new SearchControls();
try {
NamingEnumeration result = ctx.search("", filter, ctls);
if (result.hasMore()) {
StringBuffer destinationBuffer =
new StringBuffer(128)
.append("cn=")
.append(childName)
.append(", ")
.append(baseNodeDN);
destination = destinationBuffer.toString();
getLogger().info("Pre-exisisting LDAP node: " + destination);
} else {
Attributes attrs = new BasicAttributes(true);
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("rfc822MailGroup");
attrs.put(objclass);
Attribute cname = new BasicAttribute("cn");
cname.add(childName);
attrs.put(cname);
Attribute owner = new BasicAttribute("owner");
owner.add("JAMES-unassigned");
attrs.put(owner);
ctx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, authType);
ctx.addToEnvironment(javax.naming.Context.SECURITY_PRINCIPAL, principal);
ctx.addToEnvironment(javax.naming.Context.SECURITY_CREDENTIALS, password);
ctx.createSubcontext("cn=" + childName, attrs);
ctx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, "none");
StringBuffer destinationBuffer =
new StringBuffer(128)
.append("cn=")
.append(childName)
.append(", ")
.append(baseNodeDN);
destination = destinationBuffer.toString();
getLogger().info("Created new LDAP node: " + destination);
}
} catch (NamingException e) {
getLogger().error("Problem with child nodes " + e.getMessage(), e);
}
return destination;
|
public java.lang.String | getDomains()
return usersDomain;
|
public java.lang.String | getRealName(java.lang.String name)
return null;
|
public org.apache.james.services.User | getUserByName(java.lang.String name)
return new DefaultUser("dummy", "dummy");
|
public org.apache.james.services.User | getUserByNameCaseInsensitive(java.lang.String name)
return getUserByName(name);
|
public void | initialize()
//setServerRoot();
StringBuffer urlBuffer =
new StringBuffer(128)
.append(LDAPHost)
.append("/");
rootURL = urlBuffer.toString() + rootNodeDN;
baseURL = urlBuffer.toString() + baseNodeDN;
getLogger().info("Creating initial context from " + baseURL);
//System.out.println("Creating initial context from " + baseURL);
Hashtable env = new Hashtable();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(javax.naming.Context.PROVIDER_URL, baseURL);
try {
ctx = new InitialDirContext(env); // Could throw a NamingExcpetion
} catch (Exception e) {
getLogger().error("Exception creating InitialDirContext: ", e);
}
getLogger().info("Initial context initialized from " + baseURL);
|
public java.util.Iterator | list()List users in repository.
List result = new ArrayList();
// String filter = mailAddressAttr + "=*";
String[] attrIDs = {membersAttr};
try {
Attribute members
= ctx.getAttributes("", attrIDs).get(membersAttr);
if (members != null) {
NamingEnumeration enumeration = members.getAll();
while (enumeration.hasMore()) {
result.add(enumeration.next());
}
}
} catch (NamingException e) {
getLogger().error("Problem listing mailboxes. " + e );
}
return result.iterator();
|
public void | removeGroupFromUser(java.lang.String userName)
Hashtable env = new Hashtable();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(javax.naming.Context.PROVIDER_URL, rootURL);
DirContext rootCtx = null;
try {
rootCtx = new InitialDirContext(env);
// Find directory entry
String[] returnAttrs = {groupAttr};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(returnAttrs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
StringBuffer filterBuffer =
new StringBuffer(128)
.append(mailAddressAttr)
.append("=")
.append(userName)
.append("@")
.append(usersDomain);
String filter = filterBuffer.toString();
NamingEnumeration enumeration = rootCtx.search("", filter, ctls);
if (enumeration.hasMore()) { // ie User is in Directory
SearchResult newSr = (SearchResult)enumeration.next();
String userDN = newSr.getName();
System.out.println("Found user entry: " + userDN);
Attribute servers = rootCtx.getAttributes(userDN, returnAttrs).get(groupAttr);
if (servers == null) { //should not happen
getLogger().info("GroupAttribute missing from user: " + userName);
// System.out.println("GroupAttribute missing from user: " + userName );
} else if (!servers.contains(baseNodeDN)) {//server not registered for user
getLogger().info(baseNodeDN + " missing from users' Groups. " );
//System.out.println(baseNodeDN + " missing from users' Groups. ");
} else {
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, authType);
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_PRINCIPAL, principal);
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_CREDENTIALS, password);
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute(groupAttr, baseNodeDN));
rootCtx.modifyAttributes(userDN, mods);
//rootCtx.modifyAttributes(userDN, DirContext.REPLACE_ATTRIBUTE, changes);
rootCtx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, "none");
getLogger().info(baseNodeDN + " removed from users' groups " );
//System.out.println(baseNodeDN + " removed from users' groups ");
}
} else {
StringBuffer infoBuffer =
new StringBuffer(64)
.append("User ")
.append(userName)
.append(" not in directory.");
getLogger().info(infoBuffer.toString());
//System.out.println(infoBuffer.toString());
}
} catch (NamingException e) {
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Problem removing user ")
.append(userName)
.append(e);
getLogger().error(exceptionBuffer.toString());
//System.out.println("Problem removing user " + userName);
//System.out.println(e.getMessage());
//e.printStackTrace();
} finally {
closeDirContext(rootCtx);
rootCtx = null;
}
|
public synchronized void | removeUser(java.lang.String userName)
String[] attrIDs = {membersAttr};
try {
Attribute members = ctx.getAttributes("", attrIDs).get(membersAttr);
if (members == null) {
System.out.println("UsersLDAPRepository - Null list attribute.");
} else if (!members.contains(userName)) {//user not here
getLogger().info(userName + " missing from mailGroup. ");
//System.out.println(userName + " missing from mailGroup. ");
} else {
// First, remove username from mailGroup at baseNode
ctx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, authType);
ctx.addToEnvironment(javax.naming.Context.SECURITY_PRINCIPAL, principal);
ctx.addToEnvironment(javax.naming.Context.SECURITY_CREDENTIALS, password);
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute(membersAttr, userName));
ctx.modifyAttributes("", mods);
ctx.addToEnvironment(javax.naming.Context.SECURITY_AUTHENTICATION, "none");
getLogger().info(userName + " removed from mailGroup. ");
//System.out.println(userName + " removed from mailGroup. ");
}
} catch (NamingException e) {
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Problem removing user ")
.append(userName)
.append(": ")
.append(e);
getLogger().error(exceptionBuffer.toString());
//System.out.println("Problem removing user " + userName);
//System.out.println(e.getMessage());
//e.printStackTrace();
}
if (manageGroupAttr) {
removeGroupFromUser(userName);
}
if (managePasswordAttr) {
// not yet implemented
}
|
public void | service(org.apache.avalon.framework.service.ServiceManager compMgr)
// this.comp = compMgr;
|
public void | setBase(java.lang.String base)
baseNodeDN = base;
|
public void | setServerRoot()
StringBuffer serverRootBuffer =
new StringBuffer(128)
.append(serverRDN)
.append(", ")
.append(rootNodeDN);
this.setBase(serverRootBuffer.toString());
|
public boolean | test(java.lang.String name, java.lang.String testPassword)
boolean result = false;
boolean foundFlag = false;
String userDN = null;
try {
String[] returnAttrs = {identAttr, passwordAttr};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(returnAttrs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
StringBuffer filterBuffer =
new StringBuffer(128)
.append(mailAddressAttr)
.append("=")
.append(name)
.append("@")
.append(usersDomain);
String filter = filterBuffer.toString();
Hashtable env = new Hashtable();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(javax.naming.Context.PROVIDER_URL, rootURL);
DirContext rootCtx = null;
try {
rootCtx = new InitialDirContext(env);
NamingEnumeration enumeration = rootCtx.search("", filter, ctls);
if (enumeration.hasMore()) { // ie User is in Directory
SearchResult sr = (SearchResult)enumeration.next();
String userRDN = sr.getName();
StringBuffer userDNBuffer =
new StringBuffer(128)
.append(userRDN)
.append(", ")
.append(rootNodeDN);
userDN = userDNBuffer.toString();
foundFlag = true;
//System.out.println("UserDN is : " + userDN);
}
} finally {
closeDirContext(rootCtx);
}
} catch (Exception e) {
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Problem finding user ")
.append(name)
.append(" for password test.")
.append(e);
getLogger().error(exceptionBuffer.toString());
//e.getMessage();
//e.printStackTrace();
}
if (foundFlag) { // ie User is in Directory
Hashtable env2 = new Hashtable();
env2.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env2.put(javax.naming.Context.PROVIDER_URL, rootURL);
env2.put(javax.naming.Context.SECURITY_AUTHENTICATION, "simple");
env2.put(javax.naming.Context.SECURITY_PRINCIPAL, userDN);
env2.put(javax.naming.Context.SECURITY_CREDENTIALS, testPassword);
//System.out.println("Creating initial context from " + baseURL);
DirContext testCtx = null;
try {
testCtx = new InitialDirContext(env2);
result = true;
} catch (AuthenticationException ae) {
result = false;
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Attempt to authenticate with incorrect password for ")
.append(name)
.append(" : ")
.append(ae);
getLogger().error(exceptionBuffer.toString());
//System.out.println(exceptionBuffer.toString());
//System.out.println(ae.getMessage());
//ae.printStackTrace();
} catch (Exception e) {
StringBuffer exceptionBuffer =
new StringBuffer(256)
.append("Problem checking password for ")
.append(name)
.append(" : ")
.append(e);
getLogger().error(exceptionBuffer.toString());
//System.out.println(exceptionBuffer.toString());
//System.out.println(e.getMessage());
//e.printStackTrace();
} finally {
closeDirContext(testCtx);
}
}
return result;
|
public boolean | updateUser(org.apache.james.services.User user)
return false;
|