Help me for javax.naming.directory.InvalidAttributeValueException
i change the password by jndi , and administrator of the Active directory
had changed password of every user ,but the user is not administrator login int,cannot change himself password.why not?please help me!
Hashtable env = new Hashtable();
String userName = "CN=test,OU=test,DC=huadi,DC=com";
String oldPassword = "test";
String newPassword = "456P@ssw0rd";
//Access the keystore, this is where the Root CA public key cert was installed
//Could also do this via command line java -Djavax.net.ssl.trustStore....
String keystore = "D:/Program Files/Java/jdk1.5.0/jre/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore",keystore);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,userName);
env.put(Context.SECURITY_CREDENTIALS,oldPassword);
//specify use of ssl
env.put(Context.SECURITY_PROTOCOL,"ssl");
//connect to my domain controller
String ldapURL = "ldaps://173.16.80.208:636";
env.put(Context.PROVIDER_URL,ldapURL);
try {
// Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
//change password is a single ldap modify operation
//that deletes the old password and adds the new password
System.out.println("----auth------");
ModificationItem[] mods = new ModificationItem[2];
//Firstly delete the "unicdodePwd" attribute, using the old password
//Then add the new password,Passwords must be both Unicode and a quoted string
String oldQuotedPassword = "\"" + oldPassword + "\"";
byte[] oldUnicodePassword = oldQuotedPassword.getBytes("UTF-16LE");
String newQuotedPassword = "\"" + newPassword + "\"";
byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE,
new BasicAttribute("unicodePwd", oldUnicodePassword));
mods[1] = new ModificationItem(DirContext.ADD_ATTRIBUTE,
new BasicAttribute("unicodePwd", newUnicodePassword));
// Perform the update
ctx.modifyAttributes(userName, mods);
System.out.println("Changed Password for: " + userName);
ctx.close();
}catch (NamingException e) {
System.err.println("Problem changing password: " + e);
}catch (UnsupportedEncodingException e) {
System.err.println("Problem encoding password: " + e);
}
the exception is :
javax.naming.directory.InvalidAttributeValueException: [LDAP: error code 19 - 0000052D: AtrErr: DSID-03190F00, #1:
0: 0000052D: DSID-03190F00, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd)
thanks!
Similar Messages
-
I have collected the following code from "http://www.concentric.net/~adhawan/tutorial/"
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NameAlreadyBoundException;
import javax.naming.directory.*;
import java.util.*;
public class MakeRoot {
final static String ldapServerName = "localhost";
final static String rootdn = "cn=Manager, o=jndiTest";
final static String rootpass = "secret";
final static String rootContext = "o=jndiTest";
public static void main( String[] args ) {
// set up environment to access the server
Properties env = new Properties();
env.put( Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.PROVIDER_URL, "ldap://" + ldapServerName + "/" );
env.put( Context.SECURITY_PRINCIPAL, rootdn );
env.put( Context.SECURITY_CREDENTIALS, rootpass );
try {
// obtain initial directory context using the environment
DirContext ctx = new InitialDirContext( env );
// now, create the root context, which is just a subcontext
// of this initial directory context.
ctx.createSubcontext( rootContext );
} catch ( NameAlreadyBoundException nabe ) {
System.err.println( rootContext + " has already been bound!" );
} catch ( Exception e ) {
System.err.println( e );
}I am using the ldap server at here:
http://download.bergmans.us/openldap/openldap-2.2.29/openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe
My slap.conf is:database bdb
suffix "dc=jndiTest"
rootdn "cn=Manager,dc=jndiTest"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw secret
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory ./data
# Indices to maintain
index objectClass eqWhile running this code:
ldap://localhost:389/
javax.naming.directory.InvalidAttributeValueException: [LDAP: error code 21 - ob
jectClass: value #0 invalid per syntax]; remaining name 'dc=jndiTest'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentContext.p_createSubcontext(Unknown
Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.createSubcontext(Unk
nown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.createSubcontext(Unk
nown Source)
at javax.naming.InitialContext.createSubcontext(Unknown Source)
at MakeRoot.main(MakeRoot.java:35)It's obviously connecting with the given credentials and provider url. But then why is it not working?
Any help would highly appreciated. Thanks in advance.That is right I agree. And I guess that happened because I was trying to doing different permutation-combination with the naming scheme and I forgot to update slapd.conf. And even after made that change it was showing the same error. The poster forgot to mention to include java.schema. That change made it work finally.
Thanks for your reply. -
Help needed for javax.naming.Context and javax.naming.InitialContext
I need help on this two..
I am currently doing a project which required Connection Pooling. And this is the first time i'm exposed to all this.. I know nothing about these files.. But, i manage to get help from someone on DataSource. But i can't find any for naming.context and naming.InitialContext.. Can anyone help me? I need to know where i can get these 2 files or how to configure it.. Thanks! ;pThis'll help you:
http://java.sun.com/products/jndi/tutorial/ -
How to convert javax.naming.directory.Attributes to .String
hi,
i am getting values from ldap server.
but here i want to assin this values to string?
how?
Attributes det1 = ctx.getAttributes("cn="+t1+"", attrIDs3);
String str111=det1;
here i am getting error like this
Incompatible type for declaration. Can't convert javax.naming.directory.Attributes to java.lang.String
can any one help how to overcome and this values how to equal to string?
jpullareddynow i got answer,i solved
my self for solution
jpullareddy -
Design console and javax.naming.directory.basicattributes class
Hi all,
Is it possible to do the following in the design console?
BasicAttributes basicattributes = new BasicAttributes(true);
basicattributes.put(new BasicAttribute(contextName, "Weblink"));
basicattributes.put(new BasicAttribute(contextCode, "Web001"));
your help would be much appreciated..While Kodo cannot persist those elements out of the box, you can easily
use the externalization framework to persist the data in a format your
database and Kodo can understand.
http://solarmetric.com/Software/Documentation/3.1.3/docs/ref_guide_meta_ext.html#externalizer
ouhmmou wrote:
Hello,
I'd like to know if KODO implementation (or JDO spec) could manage java
objects such as javax.naming.directory.BasicAttribute and
javax.naming.directory.BasicAttributes !
because I am using those classes in my application but without succes.
thanks you for your help
smail
Steve Kim
[email protected]
SolarMetric Inc.
http://www.solarmetric.com -
Javax.naming.directory.SchemaViolationException on LDAP
I'm trying to update an attribute which contains different values, ex: objectclass, and it contains like top, person, inetOrgPerson, etc.. When I tried to updated, I got the following error
javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - Object Class Violation]; remaining name 'uid=skk27test1,ou=people,dc=georgetown,dc=edu'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3036)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2951)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2758)
at com.sun.jndi.ldap.LdapCtx.c_modifyAttributes(LdapCtx.java:1374)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_modifyAttributes(ComponentDirContext.java:235)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(PartialCompositeDirContext.java:147)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(PartialCompositeDirContext.java:136)
at javax.naming.directory.InitialDirContext.modifyAttributes(InitialDirContext.java:138)
at edu.georgetown.netid.test.SimpleAuthentication.main(SimpleAuthentication.java:61)and the code I'm using is
DirContext authContext = new InitialDirContext(authEnv);
results = authContext.search("dc=georgetown,dc=edu", "(uid=skk27test1)", controls);
while(results.hasMore()){
SearchResult result = (SearchResult)results.next();
name = result.getName();
String dn = "uid=skk27test1,ou=people,dc=georgetown,dc=edu";
//updating multiple attribute values for an attribute
Attributes container = new BasicAttributes(true);
Attribute objClasses = new BasicAttribute("objectclass");
objClasses.add("top");
objClasses.add("person");
objClasses.add("organizationalPerson");
objClasses.add("inetOrgPerson");
container.put(objClasses);
authContext.modifyAttributes(dn,DirContext.REPLACE_ATTRIBUTE, container);I can update a single attribute successfully, the following is the code
//updating single attribute value for an attribute
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
new BasicAttribute("gubuildingname", "Harris1"));
authContext.modifyAttributes(name+",dc=georgetown,dc=edu", mods);I don't know why I'm failing to get update the objectclass attribute.I got the solution..
Actually I missed one attribute which should be a mandatory. I compared the attributes in the LDAP request that fails to the schema.
I came to know there is most likely a must attribute missing, maybe from an inherited object class.
Attributes container = new BasicAttributes(true);
Attribute objClasses = new BasicAttribute("objectclass");
objClasses.add("top");
objClasses.add("person");
objClasses.add("organizationalPerson");
objClasses.add("inetOrgPerson");
objClasses.add("guPerson");
container.put(objClasses);
authContext.modifyAttributes(dn,DirContext.REPLACE_ATTRIBUTE, container); In the above code, earlier I missed to add " objClasses.add("guPerson");", the guPerson attribute value is mandatory.
Now I can modify the results. :) -
Can you guys help me with javax.naming.NameNotFoundException:
Using Oracle App Server 10.1.2, OC4J managed by OPMN
Which OC4J I am using
oracle@SUSE-E:~/OracleAS/j2ee/home> java -jar oc4j.jar -version
Oracle Application Server Containers for J2EE 10g (10.1.2.0.0) (build 041222.1873)
oracle@SUSE-E:~/OracleAS/j2ee/home>
/OracleAS/j2ee/home/config/server.xml
<application name="xPression" path="../applications/xPression.ear" auto-start="true" />
OracleAS/opmn/conf/opmn.xml
<opmn xmlns="http://www.oracle.com/ias-instance">
<notification-server>
<port local="6100" remote="6200" request="6003"/>
<log-file path="$ORACLE_HOME/opmn/logs/ons.log" level="4" rotation-size="1500000"/>
<ssl enabled="true" wallet-file="$ORACLE_HOME/opmn/conf/ssl.wlt/default"/>
</notification-server>
<ias-component id="OC4J">
<process-type id="home" module-id="OC4J" status="enabled">
</ias-component>
</opmn>
Parameters that I used to construct the InitialContext in my Java Code.
InitialContextFactory=com.evermind.server.rmi.RMIInitialContextFactory
ProviderURL=opmn:ormi://10.10.5.41:6003:home/xPression
SECURITY_PRINCIPAL=<user>
SECURITY_CREDENTIALS=<password>
Refered:
http://radio.weblogs.com/0135826/2005/10/06.html
Logfile extract: OracleAS/opmn/logs/OC4J~home~default_island~1
53 06/10/19 11:38:04 EL providerUrl: opmn:ormi://10.10.5.41:6003:home/xPression
54 06/10/19 11:38:04 EL namingFactory: com.evermind.server.rmi.RMIInitialContextFactory
56 06/10/19 11:38:04 EL Creating the Initial Context
57 06/10/19 11:38:04 EL jndi Name: com/dsc/uniarch/cr/ejb/CRContentSF
58 06/10/19 11:38:04 EL Inside Class.forName
59 06/10/19 11:38:04 EL Class.forName succeeded
60 06/10/19 11:38:04 PROVIDER_URL =opmn:ormi://10.10.5.41:6003:home/xPression
61 06/10/19 11:38:04 INITIAL_CONTEXT_FACTORY =com.evermind.server.rmi.RMIInitialContextFactory
62 06/10/19 11:38:04 SECURITY_PRINCIPAL =user
63 06/10/19 11:38:04 SECURITY_CREDENTIALS =password
64 06/10/19 11:38:04 JNDI NAME =com/dsc/uniarch/cr/ejb/CRContentSF
65 06/10/19 11:38:04 EL Exception Occurred while lookup
66 06/10/19 11:38:04 EL Exception occurred at PortableRemoteObject.narrow
67 06/10/19 11:38:04 javax.naming.NameNotFoundException: com/dsc/uniarch/cr/ejb/CRContentSF not found
68 06/10/19 11:38:04 at com.evermind.server.rmi.RMIContext.lookup(RMIContext.java:164)
69 06/10/19 11:38:04 at javax.naming.InitialContext.lookup(InitialContext.java:347)
70 06/10/19 11:38:04 at com.dsc.uniarch.com2ejb.COM2EJBBridge._processInitializeCommand(COM2EJBBridge.java:521)
71 06/10/19 11:38:04 at com.dsc.uniarch.com2ejb.COM2EJBBridge.processInitializeCommand(COM2EJBBridge.java:656)
72 06/10/19 11:38:04 at com.dsc.uniarch.op.cmpcalwrapper.csetCompose(Native Method)
73 06/10/19 11:38:04 at com.dsc.uniarch.op.cmpcalwrapper.csetOutput2PDL(cmpcalwrapper.java:96)
74 06/10/19 11:38:04 at com.dsc.uniarch.op.OutputProfileController.processDocument(OutputProfileController.java:
orion-ejb-jar.xml
<session-deployment name="CRContentSF"
location="com/dsc/uniarch/cr/ejb/CRContentSF">
</session-deployment>
ejb-jar.xml
<session id="CRContentSF">
<ejb-name>CRContentSF</ejb-name>
<home>com.dsc.uniarch.cr.ejb.CRContentSFHome</home>
<remote>com.dsc.uniarch.cr.ejb.CRContentSF</remote>
<ejb-class>com.dsc.uniarch.cr.ejb.CRContentSFBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
</session>
THANKS FOR YOUR TIME AND HELPSome more info on from where I am looking up.
It is a java class in the EAR and OC4J container same as the EJB (Home) class.
Just highlighting the exception.
Logfile extract: OracleAS/opmn/logs/OC4J~home~default_island~1
53 06/10/19 11:38:04 EL providerUrl: opmn:ormi://10.10.5.41:6003:home/xPression
54 06/10/19 11:38:04 EL namingFactory: com.evermind.server.rmi.RMIInitialContextFactory
56 06/10/19 11:38:04 EL Creating the Initial Context
57 06/10/19 11:38:04 EL jndi Name: com/dsc/uniarch/cr/ejb/CRContentSF
58 06/10/19 11:38:04 EL Inside Class.forName
59 06/10/19 11:38:04 EL Class.forName succeeded
60 06/10/19 11:38:04 PROVIDER_URL =opmn:ormi://10.10.5.41:6003:home/xPression
61 06/10/19 11:38:04 INITIAL_CONTEXT_FACTORY =com.evermind.server.rmi.RMIInitialContextFactory
62 06/10/19 11:38:04 SECURITY_PRINCIPAL =user
63 06/10/19 11:38:04 SECURITY_CREDENTIALS =password
64 06/10/19 11:38:04 JNDI NAME =com/dsc/uniarch/cr/ejb/CRContentSF
65 06/10/19 11:38:04 EL Exception Occurred while lookup
66 06/10/19 11:38:04 EL Exception occurred at PortableRemoteObject.narrow
67 06/10/19 11:38:04 javax.naming.NameNotFoundException: com/dsc/uniarch/cr/ejb/CRContentSF not found
68 06/10/19 11:38:04 at com.evermind.server.rmi.RMIContext.lookup(RMIContext.java:164)
69 06/10/19 11:38:04 at javax.naming.InitialContext.lookup(InitialContext.java:347)
70 06/10/19 11:38:04 at com.dsc.uniarch.com2ejb.COM2EJBBridge._processInitializeCommand(COM2EJBBridge.java:521)
71 06/10/19 11:38:04 at com.dsc.uniarch.com2ejb.COM2EJBBridge.processInitializeCommand(COM2EJBBridge.java:656)
72 06/10/19 11:38:04 at com.dsc.uniarch.op.cmpcalwrapper.csetCompose(Native Method)
73 06/10/19 11:38:04 at com.dsc.uniarch.op.cmpcalwrapper.csetOutput2PDL(cmpcalwrapper.java:96)
74 06/10/19 11:38:04 at com.dsc.uniarch.op.OutputProfileController.processDocument(OutputProfileController.java: -
Javax.naming.NameAlreadyBoundException [LDAP: error code 68
I am getting the below Error when I am trying to add the entry into the LPAD Server.
javax.naming.NameAlreadyBoundException: [LDAP: error code 68 - Entry Already Exists]; remaining name 'ou=People,dc=company,dc=co,dc=in'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_bind(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentContext.p_bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.bind(Unknown Source)
at javax.naming.InitialContext.bind(Unknown Source)
at com.test.CreateUser.main(CreateUser.java:54)
I am using the following sample program to test this.
public class CreateUser {
public static void main(String[] args) {
java.util.Hashtable env = new java.util.Hashtable();
env.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( javax.naming.Context.PROVIDER_URL, "ldap://c-4966:62260");
env.put( javax.naming.Context.SECURITY_AUTHENTICATION, "simple");
env.put( javax.naming.Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
env.put( javax.naming.Context.SECURITY_CREDENTIALS, "test");
String dn = "ou=People,dc=company,dc=co,dc=in";
try {
// create DirContext
DirContext ctx = new InitialDirContext(env);
// Attributes for new entry
Attributes attrs = new BasicAttributes();
Attribute attr = new BasicAttribute("objectclass");
attr.add( 0, "top" );
attr.add( 1, "person" );
attr.add( 2, "organizationalPerson" );
attr.add( 3, "inetorgperson" );
attrs.put(attr);
System.out.println("1...........");
attrs.put("cn", "Sai Krishna");
attrs.put("sn", "Potluri");
attrs.put("givenName","Sia Potluri");
attrs.put("uid","saipotluri");
attrs.put("userPassword", "balaji");
/*attr = new javax.naming.directory.BasicAttribute("mail");
attr.add( 0, "[email protected]" );
attr.add( 1, "[email protected]" );
attrs.put( attr );
attrs.put( "telephonenumber", "111-1111-3333" );*/
System.out.println("2...........");
ctx.bind(dn, attrs);
} catch ( javax.naming.NamingException ex ) {
System.err.println("Fail to Add Entry\n");
ex.printStackTrace();
Any help is highly appreciated.
Thanks in Advance
DARMAYou're adding the entry "ou=people,dc=company,dc=co,dc=in" and not an entry under "ou=people,dc=company,dc=co,dc=in".
The dn of the new entry should be something like "cn=Sai Krishna,ou=people,dc=company,dc=co,dc=in" when you call ctx.bind(dn,...) -
Hi All,
I getting the below OperationNotSupportedException while searching the LDAP container
"'ou=Subscriptions,ou=BMCMarimba,DC=marimba,DC=bmc-dns,DC=com'".
In our application during the initial search i'm able to search the above container and get the results.But during subsequent search getting the below mentioned error.
javax.naming.OperationNotSupportedException: [LDAP: error code 12 - 00000057: LdapErr: DSID-0C09068F, comment: Error processing control, data 0, vece]; remaining name 'ou=Subscriptions,ou=BMCMarimba,DC=marimba,DC=bmc-dns,DC=com'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3048)\
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2934)\
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2740)\
at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1811)\
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1734)\
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)\
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:328)\
at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:245)\
at com.marimba.tools.ldap.physical.LDAPConnectionImpl.getResult(LDAPConnectionImpl.java:901)\
at com.marimba.tools.ldap.physical.LDAPConnectionPoolImpl.searchWithConnection(LDAPConnectionPoolImpl.java:1369)\
at com.marimba.tools.ldap.physical.LDAPPagedSearchPR.getPage(LDAPPagedSearchPR.java:402)\
at com.marimba.tools.ldap.physical.LDAPPagedSearchPR.getPage(LDAPPagedSearchPR.java:238)\
at com.marimba.tools.ldapsync.util.PageResultEnumeration.getNextPage(PageResultEnumeration.java:159)\
at com.marimba.tools.ldapsync.policy.core.PolicySync.processNewPolicies(PolicySync.java:351)\
at com.marimba.tools.ldapsync.policy.core.PolicySync.syncPolicies(PolicySync.java:164)\
at com.marimba.tools.ldapsync.core.TargetSync.syncTargets(TargetSync.java:163)\
at com.marimba.tools.ldapsync.core.LDAPDBSync.run(LDAPDBSync.java:617)\
at java.lang.Thread.run(Thread.java:534)
Any idea why this exception is coming only in the subsequent search.
Any help would be greatly appriciated.
Thanks
VallinayagamHope this question raised long back and no suitable answers provided. I want to share my solution which worked for this problem to all the developers hitting their heads to thier PC :-)
You must use single LDAP connection to retrive all the results.
For example:
If your query returns around 10000 results, best way to get the results is using paging. Let us assume you set the page size to 500. Once you retrieve the first 500 results LDAP Connection will give you cookie which stores the information on last page. We need to set the cookie to future use i.e., for retrieving next page (next 500 results). If the connection to get next page is new/different (can be new instance or retrieved from pool) you will get "javax.naming.OperationNotSupportedException:[LDAP: error code 12-00000057".
So, to avoid this you need to use the same LDAP connection (conext) till you retieve all the results.
Regards,
Nageswara Rao.V -
Ldap Search getting a javax.naming.AuthenticationNotSupportedException
Hi,
Can anyone help me why i am getting Authentication Exception, is there anything wrong in the Code.(This Code i got from sun site)
I have passed the correct admin user id and password, The PROVIDER_URL is also ok.
If i comment the below two line it works fine. But Search doesnot go inside the if block
env.put(Context.SECURITY_CREDENTIALS,"<admin id given>");
env.put(Context.SECURITY_AUTHENTICATION, "<password given>");
Can any one help me.
Or can any help me with a sample code for userAuthentication in LDAP using JNDI for MS-ADS
My Code is as followes
=======================================================================
import javax.naming.directory.*;
import javax.naming.*;
import java.util.*;
import java.io.*;
public class LDAPConn
public java.lang.Object Conn;
public void startSearch() throws Exception
Hashtable env = new Hashtable(11);
DirContext ctx = null;
try
ctx = new InitialDirContext(env);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://ipaddress:389/dc=xyz,dc=com");
env.put(Context.SECURITY_CREDENTIALS,"<admin id given>");
env.put(Context.SECURITY_AUTHENTICATION, "<password given>");
ctx = new InitialDirContext(env);
String[] attrIDs = {"sn", "telephonenumber", "mail"};
Attributes matchAttrs = new BasicAttributes(true);
matchAttrs.put(new BasicAttribute("sn", "Anil"));
matchAttrs.put(new BasicAttribute("mail","[email protected]"));
NamingEnumeration answer = ctx.search("cn=Users",matchAttrs, attrIDs);
if (answer.hasMore())
System.out.println("Search Success");
ctx.close();
}catch(Exception e)
e.printStackTrace();
return ctx;
public static void main(String str[])
try
(new LDAPConn()).startSearch();
} catch(Exception e)
e.printStackTrace();
=======================================================================
Thanks
GopiHi kenty
Thanks for your help.
My Code is working now. I am able to connect to LDAP server.
for the following code i am getting the output like this
===================== Code ===================
String[] attrIDs = {"cn"};
Attributes matchAttrs = new BasicAttributes(true);
matchAttrs.put(new BasicAttribute("cn", "Souvik Mukherjee"));
NamingEnumeration results = ctx.search("cn=Users",matchAttrs, attrIDs);
while (results != null && results.hasMore())
SearchResult si = (SearchResult)results.next();
System.out.println("name: " + si.getName());
Attributes attrs = si.getAttributes();
if (attrs == null)
System.out.println("No attributes");
} else {
for (NamingEnumeration ae = attrs.getAll();
ae.hasMoreElements();) {
Attribute attr = (Attribute)ae.next();
String attrId = attr.getID();
for (Enumeration vals = attr.getAll();
vals.hasMoreElements();
System.out.println(attrId + ": " + vals.nextElement()));
==================Output==================
name: CN=Souvik Mukherjee
cn: Souvik Mukherjee
My Requirement is now By passing the userid and validating the password of "Souvik Mukherjee" Or listing all attributes of "Souvik Mukherjee".
How to do this?
Where will i see in MS-ADS attributes like 'cn' etc.. Because my SysAdmin told me he has used default settings while installing ADS.
Regards & Thanks
Gopi -
Hi,
I am getting the following error when I try to do a search on an ldap (AD LDS) database:
javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031522C9, problem 2001 (NO_OBJECT), data 0, best match of:
'DC=AppPartFE,DC=com'
]; remaining name 'cn=Users,dc=AppPartFE,dc=com'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
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 Test.<init>(Test.java:70)
at Test.main(Test.java:118)
I can bind successfully using either the userPrincipalName (UPN) or the Distinguished Name (DN), however my search is failing.
It is almost as if I am connected to the db tree at the wrong place. Do I need a different search scope?
I appreciate any assistance you can provide.
Here is my code:
import java.util.*;
import static java.lang.System.err;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class Test
public Test()
Properties prop = new Properties();
prop.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
prop.put("java.naming.provider.url", "ldap://MyHost.Mydomain.labs.CompanyX.com:50004");
String strProviderUrl = "ldap://MyHost.Mydomain.labs.CompanyX.com:50004";
// Can successfully bind with the userPrincipalName in AD LDS
//prop.put("java.naming.security.principal", "[email protected]");
// Can successfully bind with Distinguished Name
// Note: the string is case insensitive and embedded blank after a comma is not a problem
prop.put("java.naming.security.principal", "cn=tst0001,cn=Users,dc=AppPartFE,dc=com");
prop.put("java.naming.security.credentials", "password");
try {
LdapContext ctx = new InitialLdapContext(prop, null);
System.out.println("Bind successful");
//I am successful to this point....
//now try doing a search on another user
String strFilter = "(&(objectClass=userProxy)(sAMAccountName=tst0001))";
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); //works with object class=* to find top partition node
NamingEnumeration<SearchResult> results = ctx.search("cn=Users,dc=AppPartFE,dc=com", strFilter, searchControls);
SearchResult searchResult = null;
if(results.hasMoreElements()) {
searchResult = (SearchResult) results.nextElement();
//make sure there is not another item available, there should be only 1 match
if(results.hasMoreElements()) {
System.err.println("Matched multiple users for the accountName");
catch (NamingException ex) {
ex.printStackTrace();
public static void main(String[] args)
Test ldaptest = new Test();Because you are specifiying a base distinguished name in your ldap url, the ldap context will be rooted at that context and all subsequent objects will be relative to that base distinguished name.//connect to my domain controller
String ldapURL = "ldaps://rhein:636/dc=bodensee,dc=de";andString userName = "CN=verena bit,OU=Lehrer,OU=ASR,DC=bodensee,DC=de";results in an fully distinguished name of:CN=verena bit,OU=Lehrer,OU=ASR,DC=bodensee,DC=de,dc=bodensee,dc=deEither specify your ldap url asString ldapURL = "ldaps://rhein:636";and leave your username as is, or specify the user object relative to the base distinguished name in the ldapurlString userName = "CN=verena bit,OU=Lehrer,OU=ASR"; -
Sir/Madam,
i am working on Windows Platform and I am getting this error when i want ot configure the LDAP.
Please suggest
javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3005)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2951)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2753)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2667)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:287)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:175)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:193)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:136)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:66)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:82)
at TestClient.main(TestClient.java:33)
Thanks in advance.
Regards
Neelamadhabjavax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]LDAP is rejecting your credentials (username / password). Make sure your credentials are coorectly given, otherwise get help from LDAP admin.
regards,
Sekar -
I am running the following Java Code (in an agent in Lotus Notes, hence some of the odd bits). I've searched long and hard. I know I'm getting my error because I am searching the from the base DN in AD.
It also appears you can't get around this with referrals settings as AD doesn't support them. I having trouble with the whole global catalog thing too.
However, my code is working and returning the field I need. I would like to handle the error and get on with things.
Now I am not a java programmer. Is it possible to handle the error and return to the code that generated it, or am I finished with the 'try' stuff as soon as my first exception is thrown?
Sorry if this is a stupid question.
import lotus.domino.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.Vector;
public class JavaAgent extends AgentBase {
public void NotesMain() {
String userName="jmbramich";
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// Hashtable stores LDAP connection specifics.
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://hqdc01.prisons.ie:389");
// env.put(Context.PROVIDER_URL, "ldap://hqdc01.prisons.ie:3268");
env.put(Context.SECURITY_PRINCIPAL, "CN=L D. dapsearch,OU=LDAP,OU=Rescon,OU=Administrators,DC=PRISONS,DC=IE");
env.put(Context.SECURITY_CREDENTIALS, "gu1nne55");
DirContext ctx = new InitialDirContext(env);
// Specify the ids of the attributes to return
String[] attrIDs = {"postOfficeBox"};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// Specify the search filter to match
String filter = "(&(sAMAccountName=" + userName + ")(postOfficeBox=*))";
// Search the subtree for objects by using the filter
NamingEnumeration answer = ctx.search("DC=PRISONS,DC=IE", filter, ctls);
while (answer.hasMore()) {
SearchResult sr = (SearchResult)answer.next();
System.out.println(">>>" + sr.getName());
Attributes attrs = sr.getAttributes();
System.out.println(attrs.get("postOfficeBox").get());
answer.close();
ctx.close();
} catch(Exception e) {
e.printStackTrace();
Errors:
javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'DC=PRISONS,DC=IE'
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2528)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2502)
at com.sun.jndi.ldap.LdapNamingEnumeration.getNextBatch(LdapNamingEnumeration.java:145)
at com.sun.jndi.ldap.LdapNamingEnumeration.hasMore(LdapNamingEnumeration.java:181)
at JavaAgent.NotesMain(JavaAgent.java:38)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(NotesThread.java:208)
Error cleaning up agent threadsOk, managed to work this out. Needed a baby try/catch around a bit of my code so the error can be ignored - once this is done the notes agent doesn't have any problems taking out the garbage at the end.
Final code:
import lotus.domino.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
import java.util.Vector;
public class JavaAgent extends AgentBase {
public void NotesMain() {
String userName="jmbramich";
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// Hashtable stores LDAP connection specifics.
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://hqdc01.prisons.ie:389");
// env.put(Context.PROVIDER_URL, "ldap://hqdc01.prisons.ie:3268");
env.put(Context.SECURITY_PRINCIPAL, "CN=L D. dapsearch,OU=LDAP,OU=Rescon,OU=Administrators,DC=PRISONS,DC=IE");
env.put(Context.SECURITY_CREDENTIALS, "gu1nne55");
System.out.println("Creating Context.");
DirContext ctx = new InitialDirContext(env);
// Specify the ids of the attributes to return
String[] attrIDs = {"postOfficeBox"};
SearchControls ctls = new SearchControls();
ctls.setReturningAttributes(attrIDs);
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// Specify the search filter to match
String filter = "(&(sAMAccountName=" + userName + ")(postOfficeBox=*))";
// Search the subtree for objects by using the filter
System.out.println("Running Search...");
NamingEnumeration answer = ctx.search("DC=PRISONS,DC=IE", filter, ctls);
try {
while (answer.hasMore()) {
SearchResult sr = (SearchResult)answer.next();
System.out.println(">>>" + sr.getName());
Attributes attrs = sr.getAttributes();
System.out.println(attrs.get("postOfficeBox").get());
catch(PartialResultException e) {
//e.printStackTrace();
answer.close();
ctx.close();
catch(Exception e) {
e.printStackTrace();
} -
Javax.naming.NotContextException when trying to bind to a context
Hi all.
I am trying to use file system service provider.
This is how I create the context:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL, "file:/test");
DirContext ctx = new InitialDirContext(env);
When I try to invoke bind on ctx ;
ctx.bind(name, obj, attrs)
I get exception:
javax.naming.NotContextException: Not an instance of DirContext
at javax.naming.directory.InitialDirContext.getURLOrDefaultInitDirCtx(Unknown Source)
Can anyone help me get around this problem.
thanks.I don't think that
com.sun.jndi.fscontext.RefFSContextFactory
supports DirContext; just Context. -
Urgent Help Need for the beginner
When trying to bind a object to ldap i am getting the following exception.
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; rema
ining name 'cn=aString'
The source code is as follows,the same exception comes even when i try to do a search on the ldap.
Am i missing out anything?
package com.retail.ldap;
import java.util.*;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
public class GateWay {
public GateWay() {
super();
public static void main(java.lang.String[] args) {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389");
env.put(Context.SECURITY_AUTHENTICATION,"simple");
System.out.println("1");
try{
DirContext ctx = new InitialDirContext(env);
System.out.println(ctx);
System.out.println("2");
String s=new String();
ctx.bind("cn=aString", s);
System.out.println("3");
catch(Exception e){System.out.println(e);}Hi,
Try to specify the correct distinguished name to bind method. The distinguished name (the fully qualified name) of an object in Directory is concatenation of its relative name ( in your case "cn=aString" ) and the distinguished name of its container ( "cn=Users,dc=domain1,dc=softvision,dc=ro -- this is my case ). So pass as parameter to bind method a string like: "cn=AString,cn=theContainer,dc=yourDomain,dc=yourCompany,dc=com"
Regards,
Cosmin Petra
Maybe you are looking for
-
HT4623 Is there virus protection for the iPad? Where would I find it? Thankd
Is there virus protection for the iPad available? Where would I find it please? Thanks CathyJ248
-
I'm really confused. I need to create an album from various images. I have several versions created from the master image. (Color, black & white, etc). I create a smart album to get the overall shots that qualify. Then I need to create an album to be
-
Where to put data validation & DB access in MVC designed app ?
Hi, I write a stand alone app, because the user interface might required lots of changes in the future, I want to apply the MVC paradigm in the user interface design to improve maintainability. Where should I put the routine to perform data validatio
-
Hey. I'm taking off to bike the entire south island of new zealand, and so i have been getting an iPod togther. I leave tomorrow. Figures this happens now. I've been able to have it sync with my laptop just fine and i've put 1,700 songs on it so far.
-
Apple do not seem to have any stock,nothing from EBay or Pawn Shops. I need to buy an Apple iSight Web Cam for my Mac Book Pro G4. Can anyone help me find one or sell me one please? Thanks