[LDAP/JAVA] value of naming attribute 'cn' is not present in entry

[LDAP/JAVA] value of naming attribute 'cn' is not present in entry - Java - Programmation

Marsh Posté le 12-07-2006 à 23:49:27    

Bonjour,
 
J'ai une erreur assez embettante depuis hier car je ne peu insérer des données au sein de mon serveur LDAP voici la cause :
 
 

Citation :

Error: LDAPException: Naming Violation (64) Naming Violation
LDAPException: Server Message: value of naming attribute 'cn' is not present in entry
LDAPException: Matched DN:


 
A savoir que mon dn en entrée est : "cn=XYZ,ou=baba,ou=bobo,dc=toto,dc=fr" et mon cn en entrée qui reprend bien le cn de mon dn "XYZ"
 
A savoir que j'ai créer ma propre classe sous ldap et que je fais dériver ma classe d'inetorgperson qui hérite elle meme d'organizationalperson et de person. la classe person a comme attributs obligatoires cn.
 
Donc en toute logique on doit lui passer un cn , chose que je fais mais qui malheuresement abouti a ce message d'erreur
 
J'utilise la librairie Novell pour me connecter et manipuler les données, voici le code pour insérer le cn :
 
 

Citation :

attributeSet.add( new LDAPAttribute("cn", attributs[68]));


 
 
je passe tout mes attributs dans le tableau
 
J'avais vu sur des forums comme quoi ce type d'erreur etait lié au fait qu'on ne mettait pas la bonne valeur au "cn" mais là apparement ce n'est pas le cas, mais j'ai quand meme cette erreur ..
 
si vous voyez une solution merci d'avance!

Reply

Marsh Posté le 12-07-2006 à 23:49:27   

Reply

Marsh Posté le 13-07-2006 à 10:36:00    

Citation :

"cn=XYZ,ou=baba,ou=bobo,dc=toto,dc=fr"


 
J'y connais rien à LDAP et tout ça mais ça me parrait étrange que des paramètres soient séparés par une virgule.
 
Fais un affichage de attributs[68] pour voir la valeur qui pose problème.


Message édité par Bidem le 13-07-2006 à 10:36:50
Reply

Marsh Posté le 13-07-2006 à 16:06:59    

C'est normal que les paramétres soient séparés par une virgule c'est la norme LDAP qui veut ca :)
 
et pour l'affichage de l'attributs 68 en effet j'ai testé en l'affichant à chaque fois et je n'ai pas vu d'erreur il correspondait bien à la valeur du cn  passé en paramétre

Reply

Marsh Posté le 21-07-2006 à 09:59:38    

up !
 
à noter que quand je test en mettant un uid à la place du cn dans mon RDN sa me met la meme erreur mais pour l'uid :  
value of naming attribute 'uid' is not present in entry

Reply

Marsh Posté le 21-07-2006 à 15:24:59    

ton array "attributs" est de quel type??


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 21-07-2006 à 15:33:39    

irsot a écrit :

up !

 

à noter que quand je test en mettant un uid à la place du cn dans mon RDN sa me met la meme erreur mais pour l'uid :
value of naming attribute 'uid' is not present in entry

 


tu te connectes avec un user qui a suffisamment de droit pour faire cette opération ?
d'ailleurs, de memoire, je pense pas que tu puisses modifier le cn d'une entrée .. non ? (je veux dire pour creer une entrée, ca se fait peut etre pas avec des add ? ton code ? )

Reply

Marsh Posté le 23-07-2006 à 12:48:53    

"ton array "attributs" est de quel type??"
il est de type String
 
"tu te connectes avec un user qui a suffisamment de droit pour faire cette opération ? "
oui je me connect avec le rootdn
 
"d'ailleurs, de memoire, je pense pas que tu puisses modifier le cn d'une entrée .. non ? (je veux dire pour creer une entrée, ca se fait peut etre pas avec des add ?"
si on peut modifier le cn d'une entré grace à une commande spéciale, et sinon j'ai utilisé la librairie Novell pour me connecter et creer des entrées donc normalement cela devrait fonctionner j'ai juste adapter leur exemple de code à mon programmes.  
 
la librairie : http://www.openldap.org/jldap/
et voici le code d'insertion des entrées : http://developer.novell.com/docume [...] /index.htm rubrique addEntry.java
 
mais comme je l'ai dis creer une entré sa fonctionne car mon premier enregistrement fonctionne bien, c'est à chaque fois le deuxieme qui plante :/


Message édité par irsot le 23-07-2006 à 13:51:18
Reply

Marsh Posté le 24-07-2006 à 09:40:46    

Voici mon code source si qqun pouvait deceler mon erreur :)
 
la classe AnalyseDelta a pour principal but de lire un fichier texte qui correspond a peu pres à un fichier LDIF, elle décortique chaque personne se trouvant dans ce fichier texte en prenant son dn et ses attributs qu'elle transmet à la classe ServiceLDAP.
 
Classe AnalyseDelta

Code :
  1. public class AnalyseDelta {
  2. public static String FichierDeltaTestCharge = "//cheminfichier.txt";
  3. public static String containerName;
  4. public static String[] attributs;
  5. public static String dn;
  6. public static String utilisateur;
  7. public void LireDelta()
  8. {
  9.  ServiceLdap sl = new ServiceLdap();
  10.  String entitee="";
  11.  String line="",LineDebut="",LineChangeType="",LineFin="",ChangetypeMode="";
  12.  String adr1="",adr2="",adr3="",adr4="",adr5="",nom="",prenom="";
  13.  String affec1="",affec2="",affec3="",affec4="",affec5="",civilite="",codeaffec="",codece="",codecentrefrais="",codeefs="",codemploi="";
  14.  String struct1="",struct2="",struct3="",struct4="",struct5="",struct6="",struct7="",struct8="",cptprincipal="",datedeb="",datefin="";
  15.  String degre="",fonction="",identback="",identifiant="",identhierar="",libaffec="",libcentre="",libentite="",liblieugeo="",liblongstrn1="";
  16.  String liblongstrn2="",liblongstrn3="",libsociete="",libstruct1="",libstruct2="",libstruct3="",libstruct4="",libstruct5="";
  17.  String libstruct6="",libstruct7="",libstruct8="",lieugeotra="",mail="",memoid="",numpc="",numsalarie="",profil1="",profil2="";
  18.  String profil3="",profil4="",profil5="",teldirect="",telfax="",telportable="",telsecretariat="",typecontrat="";
  19.  int j=0,x=0;
  20.  try
  21.  {
  22.   BufferedReader b = new BufferedReader(new FileReader(FichierDeltaTestCharge));
  23.   try{
  24.    while(b.ready()) {  // tant que le fichier n'est pas finit
  25.     line=b.readLine();
  26.     //System.out.println(line + " " +line.length());
  27.     if(line.length()>17){identhierar=line.substring(0,18);}
  28.     if(line.length()>15){codecentrefrais=codeaffec=affec1=affec2=affec3=affec4=affec5=LineFin=line.substring(0,16);}
  29.     if(line.length()>15){struct1=struct2=struct3=struct4=struct5=struct6=struct7=struct8=line.substring(0,16);}
  30.     if(line.length()>14){libstruct1=libstruct2=libcentre=libaffec=datefin=datedeb=line.substring(0,15);}
  31.     if(line.length()>14){telsecretariat=libstruct3=libstruct4=libstruct5=libstruct6=libstruct7=libstruct8=line.substring(0,15);}
  32.     if(line.length()>13){liblieugeo=adr5=adr4=adr3=adr2=adr1=line.substring(0,14);}
  33.     if(line.length()>12){liblongstrn1=liblongstrn2=liblongstrn3=cptprincipal=line.substring(0,13);}
  34.     if(line.length()>11){typecontrat=identifiant=identback=line.substring(0,12);}
  35.     if(line.length()>10){telportable=numsalarie=lieugeotra=libsociete=LineChangeType=line.substring(0,11);}
  36.     if(line.length()>9){teldirect=libentite=codemploi=line.substring(0,10);}
  37.     if(line.length()>8){fonction=civilite=line.substring(0,9);}
  38.     if(line.length()>7){profil1=profil2=profil3=profil4=profil5=codeefs=line.substring(0,8);}
  39.     if(line.length()>6){telfax=memoid=codece=prenom=LineDebut=line.substring(0,7);}
  40.     if(line.length()>5){numpc=degre=line.substring(0,6);}
  41.     if(line.length()>4){mail=line.substring(0,5);}
  42.     if(line.length()>3){nom=line.substring(0,4);}
  43.     if(LineDebut.equals("dn: CN=" ) == true) //detecte si nous sommes au debut d'un utilisateur
  44.     {
  45.      StringTokenizer st = new StringTokenizer(line,"=," );
  46.      st.nextToken();
  47.      utilisateur = st.nextToken();
  48.      st.nextToken();st.nextToken();st.nextToken();
  49.      entitee = st.nextToken();
  50.      dn = "uid=" + utilisateur + ",ou=personnel," + "ou=" + entitee + "," + containerName;
  51.     }
  52.     if(LineChangeType.equals("changetype:" ) == true) //detecte le changetype
  53.     {
  54.      StringTokenizer st0 = new StringTokenizer(line," " );
  55.      st0.nextToken();
  56.      ChangetypeMode = st0.nextToken();
  57.      if(ChangetypeMode.equals("add" ) == true)
  58.      {
  59.       j=1;
  60.      }
  61.      if(ChangetypeMode.equals("delete" ) == true)
  62.      {
  63.       j=2;
  64.      }
  65.      if(ChangetypeMode.equals("Mask" ) == true)
  66.      {
  67.       j=3;
  68.      }
  69.      if(ChangetypeMode.equals("Modify" ) == true)
  70.      {
  71.       j=4;
  72.      }
  73.     }
  74.     if(j == 1) // procédure d'ajout d'une personne
  75.     {
  76.      if(adr1.equals("ADRLIEUGEOTRA1:" ) == true)
  77.      {
  78.       StringTokenizer st1 = new StringTokenizer(line);
  79.       st1.nextToken();
  80.       while((st1.hasMoreTokens()))
  81.        attributs[2] = attributs[2] + " " + st1.nextToken();
  82.      }
  83.      if(adr2.equals("ADRLIEUGEOTRA2:" ) == true)
  84.      {
  85.       StringTokenizer st1 = new StringTokenizer(line);
  86.       st1.nextToken();
  87.       while((st1.hasMoreTokens()))
  88.        attributs[3] = attributs[3] + " " + st1.nextToken();
  89.      }
  90.      if(adr3.equals("ADRLIEUGEOTRA3:" ) == true)
  91.      {
  92.       StringTokenizer st1 = new StringTokenizer(line);
  93.       st1.nextToken();
  94.       while((st1.hasMoreTokens()))
  95.        attributs[4] = attributs[4] + " " + st1.nextToken();
  96.      }
  97.      if(adr4.equals("ADRLIEUGEOTRA4:" ) == true)
  98.      {
  99.       StringTokenizer st1 = new StringTokenizer(line);
  100.       st1.nextToken();
  101.       while((st1.hasMoreTokens()))
  102.        attributs[5] = attributs[5] + " " + st1.nextToken();
  103.      }
  104.      if(adr5.equals("ADRLIEUGEOTRA5:" ) == true)
  105.      {
  106.       StringTokenizer st1 = new StringTokenizer(line);
  107.       st1.nextToken();
  108.       while((st1.hasMoreTokens()))
  109.        attributs[6] = attributs[6] + " " + st1.nextToken();
  110.      }
  111.                                                 ....
  112.      if(typecontrat.equals("TYPECONTRAT:" ) == true)
  113.      {
  114.       StringTokenizer st1 = new StringTokenizer(line);
  115.       st1.nextToken();
  116.       while((st1.hasMoreTokens()))
  117.        attributs[67] = attributs[67] + " " + st1.nextToken();
  118.      }
  119.      if(LineFin.equals("FinCollaborateur" ) == true)
  120.      {
  121.       x=1;
  122.      }
  123.      if(x == 1)
  124.      {
  125.       int i;
  126.       attributs[7] = attributs[2]+attributs[3]+attributs[4]+attributs[5]+attributs[6];
  127. //rajout d'un cn car la classe person de LDAP necessite l'attribut cn (common name)
  128.       attributs[68] = utilisateur;
  129.       for(i=0;i<attributs.length;i++)
  130.       {
  131.        if((attributs[i].equals(" " ) || attributs[i].equals("     " )) == false)
  132.        {
  133.         attributs[i]=attributs[i].trim();
  134.        }
  135.       }
  136.       sl.AjouterPersonne(attributs,dn);
  137.       for(i=0;i<attributs.length;i++)
  138.              attributs[i]=" ";
  139.       j=x=0;
  140.      }
  141.     }
  142.     if(j==2)
  143.     {
  144.      sl.EnleverPersonne(dn);
  145.     }
  146.    }
  147.   }
  148.   finally
  149.   {
  150.    b.close();
  151.   }
  152.  }
  153.  catch(IOException ioe)
  154.  {
  155.   System.err.println("IO erreur :" + ioe);
  156.  }
  157. }
  158. public AnalyseDelta()
  159. {
  160.         containerName  = "XXX";
  161.         attributs = new String[70];
  162.         int i = 0;
  163.         for(i=0;i<attributs.length;i++)
  164.          attributs[i]=" ";
  165. }
  166. public static void main(String[] args)
  167.     {
  168.             AnalyseDelta lp = new AnalyseDelta();
  169.             lp.LireDelta();
  170.     }
  171. }


 
Classe ServiceLDAP

Code :
  1. public class ServiceLdap {
  2. public static int ldapPort;
  3. public static int ldapVersion;
  4. public static String ldapHost;
  5. public static String loginDN;
  6. public static String password;
  7. public static String containerName;
  8. public static LDAPConnection lc;
  9. public static LDAPAttribute  attribute;
  10. public static LDAPAttributeSet attributeSet;
  11. public ServiceLdap() {
  12.  ldapPort = LDAPConnection.DEFAULT_PORT;
  13.         ldapVersion  = LDAPConnection.LDAP_V3;
  14.         ldapHost       = "XXX";
  15.         loginDN        = "XXX";
  16.         password       = "XXX";
  17.         containerName  = "XXX";
  18.         lc = new LDAPConnection();
  19.         attribute = null;
  20.         attributeSet = new LDAPAttributeSet();
  21. }
  22. public void AjouterPersonne(String[] attributs, String dn)
  23. {
  24. System.out.println("dn : " + dn);
  25. System.out.println("uid : " + attributs[34]);
  26. System.out.println("cn : " + attributs[68]);
  27. attributeSet.add( new LDAPAttribute("objectclass", new String("personCM" )));
  28.         attributeSet.add( new LDAPAttribute("adrlieugeotra1", attributs[2]));             
  29.         attributeSet.add( new LDAPAttribute("adrlieugeotra2", attributs[3]));       
  30.         attributeSet.add( new LDAPAttribute("adrlieugeotra3", attributs[4]));       
  31.         attributeSet.add( new LDAPAttribute("adrlieugeotra4", attributs[5]));                                                   
  32.         attributeSet.add( new LDAPAttribute("adrlieugeotra5", attributs[6]));
  33.         ...     
  34.         attributeSet.add( new LDAPAttribute("uid", attributs[34]));       
  35.         ...
  36. attributeSet.add( new LDAPAttribute("cn", attributs[68]));
  37.     
  38.         LDAPEntry newEntry = new LDAPEntry( dn, attributeSet );
  39.         try {
  40.             lc.connect( ldapHost, ldapPort );
  41.            
  42.             lc.bind( ldapVersion, loginDN, password.getBytes("UTF8" ) );
  43.             lc.add( newEntry );
  44.             System.out.println( "\nAjout de l'entrée: " + dn + " est enregistrée." );
  45.             lc.disconnect();
  46.         }
  47.         catch( LDAPException e ) {
  48.             System.out.println( "Erreur:  " + e.toString());
  49.         }
  50.         catch( UnsupportedEncodingException e ) {
  51.             System.out.println( "Erreur: " + e.toString() );
  52.         }
  53. }
  54. public void EnleverPersonne(String dn) // enleve une personne si  
  55. {
  56.  try
  57.  {
  58.   lc.connect( ldapHost, ldapPort );
  59.   lc.bind( ldapVersion, loginDN, password.getBytes("UTF8" ) );
  60.   lc.delete( dn );
  61.   System.out.println( "\nL'entrée: " + dn + " est détruite." );
  62.   lc.disconnect();
  63.  }
  64.  catch( LDAPException e )
  65.  {
  66.   if ( e.getResultCode() == LDAPException.NO_SUCH_OBJECT )
  67.    System.err.println( "Erreur: L'entrée n'existe pas" );
  68.   else if ( e.getResultCode() == LDAPException.INSUFFICIENT_ACCESS_RIGHTS )
  69.    System.err.println( "Erreur: Vous n'avez pas les permissions" );
  70.      else
  71.          System.err.println( "Erreur: " + e.toString() );
  72.  }       
  73.  catch( UnsupportedEncodingException e )
  74.  {
  75.   System.out.println( "Erreur: " + e.toString() );
  76.  }
  77. }
  78. }

Reply

Marsh Posté le 24-07-2006 à 09:43:45    

ha ouais d'accord [:pingouino]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 25-07-2006 à 10:35:08    


mais encore?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed