# LDAP: Daten eintragen funktioniert nicht



## plisam (8. Mrz 2016)

Hi,
Ich habe ein klein Programm geschrieben was Daten von ein Excel Tabelle Daten nehmen soll und die in ein LDAP Datenbank einträgt. Die Verbindung funktioniert nur weiß ich nicht warum die Eintragung nicht erfolgt. Hier unten mein Java Code und das Output nachdem das Programm ausgeführt ist.


```
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package hsappldap;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import javax.naming.Context;
import javax.naming.directory.Attribute;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
*
* @author laurent
*/
public class HsAppLDAP {

    /**
     * @param args the command line arguments
     */
    @SuppressWarnings("rawtypes")
    public static void main(String[] args) {

        // Déclaration des variables
                @SuppressWarnings("Convert2Diamond")
        ArrayList<String> values = new ArrayList<String>();
        Connection connection;
        Statement statement;

        // Récupération des données depuis le fichier excel
        try {

            InputStream input = new FileInputStream("student.xls");
            POIFSFileSystem fs = new POIFSFileSystem(input);
            HSSFWorkbook wb = new HSSFWorkbook(fs);
            HSSFSheet sheet = wb.getSheetAt(0);
            Iterator rows = sheet.rowIterator();

            while (rows.hasNext()) {

                values.clear();

                HSSFRow row = (HSSFRow) rows.next();

                Iterator cells = row.cellIterator();

                while (cells.hasNext()) {

                    HSSFCell cell = (HSSFCell) cells.next();
                  
                    if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType())
                        values.add(Integer.toString((int) cell.getNumericCellValue()));
                    else if (HSSFCell.CELL_TYPE_STRING == cell.getCellType())
                        values.add(cell.getStringCellValue());
                  
                }

                // Insertion en BDD
                                String url = "ldap://10.10.10.10:389";
                                @SuppressWarnings("UseOfObsoleteCollectionType")
                                Hashtable env = new Hashtable();
                                env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
                                env.put(Context.PROVIDER_URL, url);
                                env.put(Context.SECURITY_AUTHENTICATION, "none");
                                env.put(Context.SECURITY_PRINCIPAL, "uid=admin,o=organisation");
                                env.put(Context.SECURITY_CREDENTIALS, "Password");
                              
                try {
                    DirContext ctx = new InitialDirContext(env);
                                        System.out.println("connected");
                                        System.out.println(ctx.getEnvironment());

                                        try {
                                          
                                            Attribute cn = new BasicAttribute("cn", values.get(0));
                                            System.out.println(cn);
                                            Attribute sn = new BasicAttribute("sn", values.get(1));
                                            System.out.println(sn);
                                            Attribute fullName = new BasicAttribute("fullName", values.get(2) +" "+ values.get(1));
                                            System.out.println(fullName);
                                            Attribute givenName = new BasicAttribute("givenName", values.get(2));
                                            System.out.println(givenName);
                                            Attribute uid = new BasicAttribute("uid", values.get(0));
                                            System.out.println(uid);
                                            Attribute ou = new BasicAttribute("ou", values.get(3));
                                            System.out.println(ou);
                                          
                                            Attribute oc = new BasicAttribute("objectClass");
                                            System.out.println(oc);
                                            oc.add("Top");
                                            oc.add("Person");
                                            oc.add("organizationalPerson");
                                            oc.add("inetOrgPerson");
                                          
                                            BasicAttributes entry = new BasicAttributes();
                                          
                                            entry.put(cn);
                                            entry.put(sn);
                                            entry.put(fullName);
                                            entry.put(givenName);
                                            entry.put(uid);
                                            entry.put(ou);
                                            entry.put(oc);
                                          
                                            String entryDN = "cn=" + values.get(0) + ",ou=AI,o=organisation";
                                            System.out.println("1 Etape");
                                    
                                            //To Do Tommorrow
                                            ctx.createSubcontext(entryDN, entry);
                                            System.out.println("Enter");
                                          
                                        } catch (Exception e) {
                                            System.out.println(e.getMessage());
                                        }
                                      
                } catch (Exception e) {
                                    System.out.println(e.getMessage());
                }

            }
        } catch (IOException e) {
        }

    }
 
}
```

Hier die Ausgabe:


```
run:
10.10.10.10:389
connected
{java.naming.provider.url=ldap://10.10.10.10:389, java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.security.principal=uid=admin,o=organisation, java.naming.security.authentication=none, java.naming.security.credentials=Password!}
cn: fdai0021
sn: Wagner
fullName: Toma Wagner
givenName: Toma
uid: fdai0021
ou: AI
objectClass: No values
1 Etape
[LDAP: error code 50 - NDS error: no access (-672)]
BUILD SUCCESSFUL (total time: 22 seconds)
```

Das Excel Document enthält diese Infos:

fdai0020 Buehler Mark AI
fdai0021 Wagner Toma AI


----------



## kneitzel (8. Mrz 2016)

Also die Fehlermeldung interpretiere ich so, dass Du nicht die Rechte hast, die Daten zu speichern. Mich wundert in dem Zusammenhang, dass Du als SECURITY_AUTHENTICATION none angegeben hast. Dadurch wird keine Autorisierung durchgeführt:
http://docs.oracle.com/javase/jndi/tutorial/ldap/security/auth.html
Statt "none" würde ich "simple" eintragen. Und der angegebene Nutzer / Passwort muss natürlich stimmen.

Details diesbezüglich finden sich unter
http://docs.oracle.com/javase/jndi/tutorial/ldap/security/ldap.html


----------



## plisam (8. Mrz 2016)

Ooo Cool Danke! Mein versehen. Ich habe "simple" angepasst. Nun habe ich diese Fehlermeldung:


```
[LDAP: error code 13 - Confidentiality Required]
[LDAP: error code 13 - Confidentiality Required]
```

Hast du noch ein Idee?

Danke


----------



## Joose (8. Mrz 2016)

Etwas Eigeninitiative zeigen 
https://www.novell.com/coolsolutions/tip/6032.html

Link 1 und 2
https://www.google.at/search?q=LDAP...DAP:+error+code+13+-+Confidentiality+Required


----------



## Dompteur (8. Mrz 2016)

Kann es sein, dass dein Server das Login nur per TLS (ldap*s*) erlaubt ?

Edit: zu spät..


----------



## plisam (8. Mrz 2016)

Cool Danke euch alle!! Ich habe das SSL bei mir erlaubt und es geht. Es gibt kein Fehler mehr beim Ausführung aber ich finde kein Eintrag im LDAP. Wenn jemand da noch etwas sagen kann dan danke im voraus. Ich bin LDAP Anfänger also weiss noch nicht viel!!

Danke


----------



## kneitzel (8. Mrz 2016)

Dein entryDN ist korrekt? Du schaust auch direkt an der richtigen Stelle und es kann auch nicht sein, dass Du an einem anderen LDAP Server schaust und deine Änderungen noch nicht repliziert sind?

(Kenne mich mit den reinen LDAP Servern nicht aus - habe meine Erfahrungen fast ausschließlich im AD Umfeld gemacht. Aber da wären das ggf. typische Probleme.)


----------



## plisam (8. Mrz 2016)

Das entryDN ist richtig glaube ich:
- Das Excel Document enthält Bsp.: fdai0020 | Buehler | Mark | AI
Davon möchte ich als Primary Key das cn = fdai0020 nehmen also -> cn=fdai0020

String entryDN ="cn="+ values.get(0)+",ou=AI,o=organisation";

Ansonst, das LDAP Datenbank ist richtig ich habe nur ein


----------

