wood burning stoves 2.0*
The moose likes Java in General and the fly likes LDAP and NamingEnumeration Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "LDAP and NamingEnumeration" Watch "LDAP and NamingEnumeration" New topic
Author

LDAP and NamingEnumeration

tejal bilan
Greenhorn

Joined: Dec 05, 2003
Posts: 5
Hi All
I have connected to LDAP and have abit of trouble getting certain data out.
for example: In the LDAP browsing tool..a groupA has certain attributes and their values for example:
cn groupA
sAMAccountName aaa
member CN=Cilliers\, Maggie, OU=Users ...
member CN=James\, Kai, OU=Users ...
member CN=Henin\, Sven, OU=Users ...
How do I get all the members in groupA? Please give me example code to do this.
A bit of my code:
//***************************************************
DirContext ctx = new InitialDirContext(env);
// Ask for all attributes of the object
Attributes attrs = ctx.getAttributes("CN=groupA,OU=GroupsA,OU=Groups,OU=Core,DC=xx,DC=com");
//getting the attributes value
System.out.println("member: " + attrs.get("member").get());
//******************************************************
I have tried to use NaminEnumeration..but was not very successful.
NamingEnumeration xx = attrs.get("member").getAll();
while(xx.hasMore()){
System.out.println(xx.??); //It has no method to get a value
}
Need urgent help
thanx in advance
Scarlet
Philip Shanks
Ranch Hand

Joined: Oct 15, 2002
Posts: 189
It actually looks as though you are querying MS ActiveDirectory, so I don't know if this will help, but you may be able to adapt some of it. Where I am using the attributes "cn" and "mail" you would substitute "member". And of course, you would replace some/all of the code where I am building the StringBuffer "sb".
Not sure what your base should be... perhaps "OU=Core,DC=xx,DC=com".
Hope this helps!


Philip Shanks, SCJP - Castro Valley, CA
My boss never outsources or has lay-offs, and He's always hiring. I work for Jesus! Prepare your resume!
tejal bilan
Greenhorn

Joined: Dec 05, 2003
Posts: 5
Hi Philip
Thank you for your response.
I have tried your suggested code, but got myself abit stuck with this line:
String base = "DC=sasol,DC=com";
String filter = "CN=SAPPortal-Sec-Prod-Admin,OU=SAPPortal
Groups,OU=Groups,OU=Core,DC=sasol,DC=com";

NamingEnumeration results = dctx.search(base, filter, ctls);
I can not continue with the while loop because results is null.
The search method takes a (name, string, searchControl)
I know that the base value is right, and my string value points to the group that has the attributes "member" which I want.
Please can you help further.
I have played around with it for some time and was very unsuccessful. The error I get :

javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=sasol,DC=com'
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.searchAux(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_search(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown source)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source)
at javax.naming.directory.InitialDirContext.search(Unknown Source)
at com.sasol.iview.LDAPLookup.main(LDAPLookup.java:34)

source code:
public static void main(String[] args) {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://ldapSasol.sasol.com:389");
env.put(Context.SECURITY_PRINCIPAL,("uid"));
env.put(Context.SECURITY_CREDENTIALS, "password");
String base = "DC=sasol,DC=com";
String filter = "CN=SAPPortal-Sec-Prod-Admin,OU=SAPPortal Groups,OU=Groups,OU=Core,DC=sasol,DC=com";
try {
DirContext dctx = new InitialDirContext(env);
//String[] attrIDs = {"member"};
String[] attrIDs = {"member"};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results = dctx.search(base, filter, ctls);
//Attributes attrs1 = dctx.getAttributes("CN=SAPPortal-Sec-Prod-Admin,OU=SAPPortal Groups,OU=Groups,OU=Core,DC=sasol,DC=com");
//System.out.println("val:" + attrs1.get("cn").get());
dctx.close();
StringBuffer sb = new StringBuffer();
while (results.hasMore()) {
SearchResult res = (SearchResult) results.next();
Attributes attrs = res.getAttributes();
if (results.hasMore())
sb.append(attrs.get("member").toString().substring(4) + ",");
else
sb.append(attrs.get("member").toString().substring(4));
}

System.out.println(sb.toString());
} catch (NamingException e) {
e.printStackTrace();
}
} //end main
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: LDAP and NamingEnumeration