Comment se connecter à LDAP avec Xcode (vérification login + password)
Bonjour à tous,
Je suis sur Mac OS X 10.8.3 MountainLion et je travaille sur Xcode 4.5.1.
J'ai une page de connexion avec des textfields "Nom d'utilisateur" et "Mot de passe" sur une page de login.
De l'autre côté, j'ai lancé Ubuntu Server sur VMware Fusion qui me permet de communiquer avec LDAP.
J'ai également lancé LDAPManager où je peux voir l'arborescence d'un certain nombre d'informations dont celles du login et mot de passe.
J'essaie de me connecter à LDAP via Xcode en suivant un tuto datant de quelques années mais qui ne marche plus.
Dans mon projet j'ai importer les fichiers ldap.h, lber.h, ldap_features.h, ldap_defaults.h... ainsi que les fichiers RHLDAPSearch.h et RHLDAPSearch.m qui permettent d'instancier des objets RHLDAPSearch pour exécuter des requêtes vers un serveur LDAP (en Objective-C).
Avez-vous une idée de la façon avec laquelle on peut se connecter au serveur LDAP afin de vérifier que les champs saisis (login + mot de passe) sont corrects ?
Merci d'avance.
Modération: J'ai déplacé le sujet dans une section qui me semble plus appropriée.
Réponses
Bonjour,
Tout d'abord merci de commencer par la case présentation dans la section approprié du forum. N'oublie pas de décrire ton expérience en développement et ton domaine d'activité histoire que l'on saches à qui on parle...
Pour ton problème, la moindre des choses aurait été de donner un lien source pour tes clases "RHLDAPSearch" histoire qu'on sache quelle version tu utilise...
Pour ce que je viens de trouver sur le net, ta classe porte bien son nom, elle permet de faire des recherches, et c'est tout. Elle est assez mal foutue et ne semble pas supporter le bind LDAP, ce que tu cherche.
Le plus simple serait de lire la doc de l'API native OpenLDAP et de t'en servir...
Merci de ta réponse,
C'est vrai que j'ai posté un peu trop rapidement ma question sans m'être au préalable présentation, c'est maintenant chose faite
Voici le lien vers le petit tuto en anglais que j'ai trouvé pour pouvoir faire l'intégration LDAP dans une application iPhone :
http://www.rhussmann.com/2009/08/integrating-ldap-into-an-iphone-application/
J'ai tout d'abord créé un nouveau projet "Single View Application".
Dans "MainStoryboard.storyboard", j'ai insérer les labels, les text fields pour le nom d'utilisateur et le mot de passe, et un bouton pour valider.
J'ai télécharger l'archive "openldap-2.4.30" et une archive provenant de http://www.rhussmann.com/code/RHLDAPSearch/ contenant les fichiers :
- fat_build.sh (qui permet de créer une librairie)
- RHLDAPSearch.h (qui contient l'URL de connexion)
- RHLDAPSearch.m
- SampleUsage.m (un exemple d'utilisation permettant d'implémanter un objet RHLDAPSearch avec un URL donné en utilisant un DN et un scope spécifiques)
A partir de là , j'ai copié le fichier "fat_build.sh" dans le répertoire "openldap-2.4.30" que j'ai extrait.
Ensuite, j'ai exécuté ce script (sh fat_build.sh).
On peut voir que des fichiers et répertoires ont été ajoutés (à part fat_build.sh que j'ai copié manuellement) :
Voici le contenu du répertoire "Insout" avec les fichiers :
- liblber.a.i386
- libldap.a.i386
J'ai ensuite copié les fichiers "libldap.a.i386", "RHLDAPSearch.h" et "RHLDAPSearch.m" dans mon projet (en faisant un glisser-déposer dans Xcode), puis j'ai pris exemple sur le morceau de code du fichier "SampleUsage.m" :
Puis j'ai copié tous les fichiers .h présents dns le répertoire "include" du dossier "openldap-2.4.30" dans mon projet :
Quand je compile le projet, j'obtiens des erreurs, notamment d'import du fichier "lber.h" alors qu'il est bien présent :
Tu aurais une idée concernant le bind LDAP dont j'aurais besoin ? Merci
Je me suis mis sur la doc de l'API...
Voilà un peu l'ensemble du code :
Je te recommande cette lecture http://www.ibm.com/developerworks/aix/library/au-iphoneapp/?ca=drs-
Et sinon tu peux utiliser ce projet https://github.com/bindle/iOSPorts qui dispose d'un portage déjà fonctionnel de OpenLDAP, ce qui n'est pas ton cas ici. La cross-compilation semble être faites à moitié. Tu ne génère que des binaires OS X or il semble que tu essaye de faire une application iOS...
Merci de ta réponse, j'étais en train d'essayer de configurer Xcode pour faire fonctionner LDAP en suivant le 1er lien que tu as mis, mais j'ai obtenu tout un tas d'erreurs que j'ai essayé de corriger depuis ces derniers jours mais il y a des choses que je ne comprends toujours pas.
En suivant ce tuto (http://www.ibm.com/developerworks/aix/library/au-iphoneapp/?ca=drs-), j'ai tout d'abord créé un nouveau projet : New > Projet... > Cocoa Touch Static Library (dans Framework & Library de iOS) que j'ai nommé "ldap".
J'ai ensuite importé le code source de OpenLDAP (openldap-2.4.35) en allant dans : File > Add Files to "ldap"... (en laissant coché "ldap" dans la partie "Add to targets" en bas de la nouvelle fênetre qui s'ouvre).
Il y a des éléments qu'on ne retrouve pas sur la version actuelle de Xcode que j'ai comme la case à cocher "Recursively create groups for any added folders", ou comme la partie "Groups & Files" même s'il y a l'équivalent.
Voici la vue d'ensemble du projet :
Après avoir attendu l'indexation des fichiers importés (assez long), j'ai compilé le projet et j'ai obtenu diverses erreurs : des fichiers .h non trouvés, des #include <ldap.h> au lieu de #include "ldap.h", des #include <ac/stdlib.h> au lieu de #include <stdlib.h>...
Vue des fichiers :
Les fichiers .h :
Voici quelques captures des erreurs d'imports et autres :
Je pense qu'il faudrait modifier tous les imports par exemple taper :
#include <stdlib.h> au lieu de #include <ac/stdlib.h>
#include <sys/socket.h> au lieu de #include <ac/socket.h>
#include "lber_types.h" au lieu de #include <lber_types.h>
et d'autres encore...
Autre remarque : il y a 556 fichiers dans le projet à compiler, mais la compilation ralentie de plus en plus quand on approche du 330ème fichier compilé puis ça rame (le ventillo tourne à fond, la CPU ralentie).
Que penses-tu de tout ça ?
Ne touche pas les include de ton projet. Va dans tes build settings et met HEADER_SEARCH_PATHS à $(SRCROOT)
Ok, j'ai recréé un projet avec openldap-2.4.22 cette fois (l'ancienne release).
J'ai ajouté les sources au projet (en laissant bien décoché "ldap" dans "Add to targets").
Je suis allé dans "Build Setting" du projet et dans Header Search Paths j'ai mis $(SRCROOT), ça a affiché un chemin absolu avec le projet :
J'ai renommé le fichier "lber_types.hin" en "lber_types.h", et j'y ai modifié les "#undef ..." par des "#define .... int".
J'ai ensuite renommé le fichier "ldap_config.hin" en "ldap_config.h".
Puis, j'ai renommé le fichier "ldap_features.hin" en "ldap_features.h", et j'y ai modifié les infos concernant les différentes versions :
J'ai exécuté le script "autoconf" pour générer les valeurs pour "portable.hin" en allant sur un terminal en naviguant jusqu'au dossier openldap-2.4.22 du projet :
Mais j'obtiens l'erreur :
Une capture :
Je ne voie pas ce qui cloche.
Le fichier config.log indique :
running configure, to aid debugging if configure makes a mistake.
It was created by configure, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ ./configure CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc LD=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld --host=arm-apple-darwin --disable-slapd --without-cyrus-sasl --without-tls --no-create
##
##
## Platform. ##
##
##
hostname = sam-2.local
uname -m = x86_64
uname -r = 12.3.0
uname -s = Darwin
uname -v = Darwin Kernel Version 12.3.0: Sun Jan 6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64
/usr/bin/uname -p = i386
/bin/uname -X = unknown
/bin/arch = unknown
/usr/bin/arch -k = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo = Mach kernel version:
Darwin Kernel Version 12.3.0: Sun Jan 6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64
Kernel configured for up to 2 processors.
2 processors are physically available.
2 processors are logically available.
Processor type: i486 (Intel 80486)
Processors active: 0 1
Primary memory available: 2.00 gigabytes
Default processor set: 84 tasks, 475 threads, 2 processors
Load average: 1.29, Mach factor: 0.78
/bin/machine = unknown
/usr/bin/oslevel = unknown
/bin/universe = unknown
PATH: /usr/bin
PATH: /bin
PATH: /usr/sbin
PATH: /sbin
PATH: /usr/local/bin
##
##
## Core tests. ##
##
##
configure:2150: checking build system type
configure:2168: result: i686-apple-darwin12.3.0
configure:2190: checking host system type
configure:2205: result: arm-apple-darwin
configure:2227: checking target system type
configure:2242: result: arm-apple-darwin
configure:2285: checking for a BSD-compatible install
configure:2341: result: /usr/bin/install -c
configure:2352: checking whether build environment is sane
configure:2395: result: yes
configure:2460: checking for gawk
configure:2490: result: no
configure:2460: checking for mawk
configure:2490: result: no
configure:2460: checking for nawk
configure:2490: result: no
configure:2460: checking for awk
configure:2476: found /usr/bin/awk
configure:2487: result: awk
configure:2498: checking whether make sets $(MAKE)
configure:2519: result: yes
configure:2586: checking for arm-apple-darwin-strip
configure:2616: result: no
configure:2626: checking for strip
configure:2642: found /usr/bin/strip
configure:2653: result: strip
configure:2744: checking configure arguments
configure:4341: WARNING: slapd disabled, ignoring --enable-bdb argument
configure:4341: WARNING: slapd disabled, ignoring --enable-hdb argument
configure:4341: WARNING: slapd disabled, ignoring --enable-monitor argument
configure:4341: WARNING: slapd disabled, ignoring --enable-relay argument
configure:4377: WARNING: slapd disabled, ignoring --enable-syncprov argument
configure:4446: result: done
configure:4674: checking for ar
configure:4690: found /usr/bin/ar
configure:4701: result: ar
configure:4761: checking for style of include used by make
configure:4789: result: GNU
configure:4822: checking for arm-apple-darwin-gcc
configure:4849: result: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
configure:5127: checking for C compiler version
configure:5134: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --version >&5
./configure: line 5135: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc: No such file or directory
configure:5137: $? = 127
configure:5144: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -v >&5
./configure: line 5145: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc: No such file or directory
configure:5147: $? = 127
configure:5154: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -V >&5
./configure: line 5155: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc: No such file or directory
configure:5157: $? = 127
configure:5180: checking for C compiler default output file name
configure:5207: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc conftest.c >&5
./configure: line 5208: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc: No such file or directory
configure:5210: $? = 127
configure:5248: result:
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define OPENLDAP_PACKAGE "OpenLDAP"
| #define OPENLDAP_VERSION "2.4.22"
| #define LDAP_VENDOR_VERSION 20422
| #define LDAP_VENDOR_VERSION_MAJOR 2
| #define LDAP_VENDOR_VERSION_MINOR 4
| #define LDAP_VENDOR_VERSION_PATCH 22
| #define HAVE_MKVERSION 1
| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:5255: error: C compiler cannot create executables
See `config.log' for more details.
##
##
## Cache variables. ##
##
##
ac_cv_build=i686-apple-darwin12.3.0
ac_cv_env_CC_set=set
ac_cv_env_CC_value=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=set
ac_cv_env_host_alias_value=arm-apple-darwin
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_host=arm-apple-darwin
ac_cv_path_install='/usr/bin/install -c'
ac_cv_prog_AR=ar
ac_cv_prog_AWK=awk
ac_cv_prog_CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
ac_cv_prog_ac_ct_STRIP=strip
ac_cv_prog_make_make_set=yes
ac_cv_shtool=build/shtool
ac_cv_target=arm-apple-darwin
##
##
## Output variables. ##
##
##
ACLOCAL='${SHELL} /Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22/build/missing --run aclocal-1.9'
AMDEPBACKSLASH='\'
AMDEP_FALSE='#'
AMDEP_TRUE=''
AMTAR='${SHELL} /Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22/build/missing --run tar'
AR='ar'
AS=''
AUTH_LIBS=''
AUTOCONF='${SHELL} /Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22/build/missing --run autoconf'
AUTOHEADER='${SHELL} /Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22/build/missing --run autoheader'
AUTOMAKE='${SHELL} /Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22/build/missing --run automake-1.9'
AWK='awk'
BDB_LIBS=''
BUILD_ACCESSLOG='no'
BUILD_AUDITLOG='no'
BUILD_BDB='no'
BUILD_COLLECT=''
BUILD_CONSTRAINT='no'
BUILD_DDS='no'
BUILD_DENYOP='no'
BUILD_DEREF='no'
BUILD_DNSSRV='no'
BUILD_DYNGROUP='no'
BUILD_DYNLIST='no'
BUILD_HDB='no'
BUILD_LASTMOD='no'
BUILD_LDAP='no'
BUILD_LIBS_DYNAMIC=''
BUILD_MEMBEROF='no'
BUILD_META='no'
BUILD_MONITOR='no'
BUILD_NDB='no'
BUILD_NULL='no'
BUILD_PASSWD='no'
BUILD_PERL='no'
BUILD_PPOLICY='no'
BUILD_PROXYCACHE='no'
BUILD_REFINT='no'
BUILD_RELAY='no'
BUILD_RETCODE='no'
BUILD_RWM='no'
BUILD_SEQMOD='no'
BUILD_SHELL='no'
BUILD_SLAPD='no'
BUILD_SLAPI='no'
BUILD_SOCK='no'
BUILD_SQL='no'
BUILD_SSSVLV='no'
BUILD_SYNCPROV='no'
BUILD_THREAD='no'
BUILD_TRANSLUCENT='no'
BUILD_UNIQUE='no'
BUILD_VALSORT='no'
CC='/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'
CCDEPMODE=''
CFLAGS=''
CPP=''
CPPFLAGS=''
CYGPATH_W='echo'
DEFS=''
DEPDIR='.deps'
DLLTOOL=''
ECHO='/bin/echo'
ECHO_C='ECHO_N=''
ECHO_T=''
EGREP=''
EXEEXT=''
GREP=''
ICU_LIBS=''
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='${SHELL} $(install_sh) -c -s'
KRB4_LIBS=''
KRB5_LIBS=''
LDAP_LIBS=''
LDFLAGS=''
LIBOBJS=''
LIBS=''
LIBSLAPI=''
LIBSLAPITOOLS=''
LIBSRCS=''
LIBTOOL=''
LN_S=''
LTHREAD_LIBS=''
LTLIBOBJS=''
LTSTATIC=''
LUTIL_LIBS=''
MAKEINFO='${SHELL} /Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22/build/missing --run makeinfo'
MODULES_LIBS=''
MOD_PERL_LDFLAGS=''
MYSQL=''
OBJDUMP=''
OBJEXT=''
OL_MKDEP=''
OL_MKDEP_FLAGS=''
OPENLDAP_LIBRELEASE='2.4'
OPENLDAP_LIBVERSION='7:5:5'
OPENLDAP_RELEASE_DATE='2010/04/24'
PACKAGE='OpenLDAP'
PACKAGE_BUGREPORT=''
PACKAGE_NAME=''
PACKAGE_STRING=''
PACKAGE_TARNAME=''
PACKAGE_VERSION=''
PATH_SEPARATOR=':'
PERLBIN=''
PERL_CPPFLAGS=''
PLAT=''
RANLIB=''
SASL_LIBS=''
SET_MAKE=''
SHELL='/bin/sh'
SLAPD_DYNAMIC_BACKENDS=''
SLAPD_DYNAMIC_OVERLAYS=''
SLAPD_GMP_LIBS=''
SLAPD_LIBS=''
SLAPD_MODULES_CPPFLAGS=''
SLAPD_MODULES_LDFLAGS=''
SLAPD_NDB_INCS=''
SLAPD_NDB_LIBS=''
SLAPD_NO_STATIC=''
SLAPD_PERL_LDFLAGS=''
SLAPD_SLAPI_DEPEND=''
SLAPD_SLP_LIBS=''
SLAPD_SQL_INCLUDES=''
SLAPD_SQL_LDFLAGS=''
SLAPD_SQL_LIBS=''
SLAPD_STATIC_BACKENDS='back-ldif'
SLAPD_STATIC_OVERLAYS=''
SLAPI_LIBS=''
STRIP='strip'
TLS_LIBS=''
VERSION='2.4.22'
WITH_ACI_ENABLED=''
WITH_MODULES_ENABLED=''
WITH_SASL=''
WITH_TLS=''
WRAP_LIBS=''
ac_ct_CC=''
am__fastdepCC_FALSE=''
am__fastdepCC_TRUE=''
am__include='include'
am__leading_dot='.'
am__quote=''
am__tar='${AMTAR} chof - "$$tardir"'
am__untar='${AMTAR} xf -'
bindir='${exec_prefix}/bin'
build='i686-apple-darwin12.3.0'
build_alias=''
build_cpu='i686'
build_os='darwin12.3.0'
build_vendor='apple'
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE}'
dvidir='${docdir}'
exec_prefix='NONE'
host='arm-apple-darwin'
host_alias='arm-apple-darwin'
host_cpu='arm'
host_os='darwin'
host_vendor='apple'
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='/Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22/build/install-sh'
ldap_subdir='/openldap'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
mkdir_p='$(install_sh) -d'
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='NONE'
program_transform_name='s,x,x,'
psdir='${docdir}'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target='arm-apple-darwin'
target_alias=''
target_cpu='arm'
target_os='darwin'
target_vendor='apple'
top_builddir='/Users/sam/Desktop/ProjetXcode/ldap/openldap-2.4.22'
##
##
## confdefs.h. ##
##
##
#define PACKAGE_NAME ""
#define PACKAGE_TARNAME ""
#define PACKAGE_VERSION ""
#define PACKAGE_STRING ""
#define PACKAGE_BUGREPORT ""
#define OPENLDAP_PACKAGE "OpenLDAP"
#define OPENLDAP_VERSION "2.4.22"
#define LDAP_VENDOR_VERSION 20422
#define LDAP_VENDOR_VERSION_MAJOR 2
#define LDAP_VENDOR_VERSION_MINOR 4
#define LDAP_VENDOR_VERSION_PATCH 22
#define HAVE_MKVERSION 1
configure: exit 77
J'ai finalement suivi le tuto concernant iOSPorts (https://github.com/bindle/iOSPorts) et LDAP Kit (https://github.com/bindle/LdapKit), en recréant le projet "Zebra" .
J'ai téléchargé et ajouté au projet les projets "openldap.xcodeproj" et "iOSPorts.xcodeproj" en allant sur Add Files to "Zebra"...
J'ai mis à jour le "Target Depedencies" en ajoutant :
- ldap
- lber
- iOSPorts
J'ai également mis à jour le "Link Binary With Libraries" en ajoutant :
- libldap.a
- liblber.a
- libiOSPorts.a
- libssl.a
- libsasl2.a
- libcrypto.a
Aperçu du projet avant compilation :
La compilation se passe sans erreur, mais avec quelques warning :
Maintenant que tout compile correctement, je ne voie pas comment utiliser les classes et méthodes pour faire la connexion avec le serveur LDAP, c'est-à -dire quel code écrire pour faire la liaison avec les infos concernant le bind DN/user (cn=...,ou=...,dc=...), le mot de passe de connexion, le numéro de port etc...
Si tu as une idée, merci de m'éclairer.
Tu as lu le fichier d'exemple de LDAPKit https://github.com/bindle/LdapKit/blob/master/examples/PhoneDAP/PhoneDAP/PDLdapTest.m ? Tout est dedans.
Si tu ne sais pas te servir d'une base LDAP je te conseil de commencer par te documenter sur le sujet avant tout. Une fois que tu sais ce que tu veux faire et que tu y arrive avec les ligne de commande ldapsearch et ldapmodify tu peux envisager le faire en code avec une lib ou une autre.
Je ne savais pas me servir d'une base LDAP mais j'ai regardé ça de plus près ; j'ai tapé quelques commandes sur le terminal de la machine virtuelle pour que ça affiche toute l'arborescence, et notamment la commande :
En exécutant cette commande, ça m'affiche bien toute l'arborescence, j'aurais aimé pouvoir faire la même chose sur l'application iOS dans un premier temps, puis de pouvoir afficher les infos concernant une personne qui se connecte avec ses identifiants.
J'ai regardé le projet "ldapsearch" et les fichiers "ldapTest.h" et "ldapTest.m", et parmi les fonctions présentes dans le .h celle qui m'interesse est "test_simple_ldap()".
J'ai fait les remplacements nécessaires dans les #define du fichier "ldapTest.h" ainsi que les variables
ldapURI et dn du fichier "ldapTest.m"..
Apparement la connexion au serveur LDAP fonctionne, mais il y a l'erreur "Invalid credentials" à l'appel de la fonction "ldap_sasl_bind_s()".
Tu as fait un -x dans ta commande de test... Si tu va lire la documentation pour comprendre ce que tu as copier coller tu verra que :
Donc forcément, si tu tente une connexion de type SASL avec SSL (ldap_sasl_bind_s) ça risque par de marcher de la même manière.
D'accord mais le -x était dans la commande tapée sur le terminal, tandis que l'erreur dans la fenêtre de log de Xcode est indépendante de la commande que j'ai tapée, je vais voir plus en détail le code alors.
Je reprend, le code que tu as tapé ne fait pas du tout la même chose que la commande du terminal, c'est normal que tu ai un résultat différent...
Merci beaucoup pour les indications, je peux enfin afficher dans la fenêtre de log des infos telles que le prénom, le nom et l'adresse mail d'un utilisateur (sans taper de mot de passe pour l'instant) à partir du "filter" défini dans "ldapTest.h".
Il fallait voir du côté des fonctions "ldap_first_attribute()" et "ldap_get_values_len()" pour récupérer les valeurs des attributs.
Maintenant il me reste à les afficher dans Interface Builder mais je ne voie pas encore comment, je continue de chercher.
Je peux désormais comparer le nom d'utilisateur saisi sur l'application avec le nom stocké dans la base LDAP et afficher des infos telles que le prénom, le nom, l'adresse mail sur l'application également, pour cela j'ai importé le fichier "ldapTest.h" dans "AppDelegate_Pad.m" et je peux accéder aux fonctions "test_all_ldap()" et en créer d'autres pour affiner la recherche.
Le seul hic c'est pour comparer le mot de passe saisi sur l'appli et celui de la base qui est crypté ({SHA}....), je m'y attèle.
Merci encore à toi.
Bah c'est normal qu'il est en SHA1 (qui n'est pas un "cryptage", non seulement parce que le mot auquel tu pensais n'est pas "crypté" mais "chiffré", mais surtout parce que SHA1 est un hash et non un chiffrage).
Mais quel est le problème ? Il suffit de comparer le SHA1(mdpSaisi) avec le SHA1 en base.
Merci pour les précisions, j'étais en train de chercher s'il existe une fonction qui permette de comparer le mdpSaisi (brut tapé au clavier) avec le SHA1 en base...
J'essaie d'afficher le userPassword mais ce n'est apparemment pas un attribut reconnu :
Sur LDAPManager cet attribut apparaà®t bien pourtant :
C'est normal, tu n'as pas le droit de lire le mot de passe, même haché, d'un utilisateur, sinon c'est même plus la peine d'avoir un mot de passe.
La seule et unique bonne méthode pour valider un utilisateur en LDAP c'est de faire une tentative de bind authentifié en son nom.
Il ne faut pas essayer de comparer la valeur userPassword car certaines bases LDAP n'en auront tout simplement pas ! Le mot de passe sur des systèmes plus sécurisé que cela est stocké ailleurs.
Ce qu'il faut faire c'est identifier ton utilisateur via une recherche en anonyme (ou avec une preauth de service), récupérer le dn de l'utilisateur et ensuite se servir du dn et du mot de passe pour faire une (re)authentification LDAP.
Si la connexion passe, c'est que le mot de passe est bon, si la connexion échoue, c'est que le mot de passe n'est pas bon.
Ok merci, j'ai recherché dans cette voie là et j'ai enfin pu faire l'authentification d'un utilisateur avec son mot de passe.
C'est simplement une fonction en C telle que celle-ci, qui renvoie YES si la connexion a reussi, NO sinon.
Ca marche très bien quand tous les username se trouvent dans la même branche de l'arbre, mais comment faire s'il existe d'autres username dans d'autres branches ?
Par exemple avec cet arbre :
ou=applications,dc=societe,dc=com
|_______cn=executive
|_______ou=team
|_______ou=users
|_______ou=n1
| |_______cn=responsable1
| |_______cn=responsable2
| |_______cn=agent1
|_______ou=n2
|_______cn=gestionnaire1
|_______cn=gestionnaire2
Tous les username (responsable1, responsable2, agent1, gestionnaire1 et gestionnaire2) se trouvent dans 2 branches différentes :
- les uns dans : "ou=n1,ou=users,ou=applications,dc=societe,dc=com"
- les autres dans : "ou=n2,ou=users,ou=applications,dc=societe,dc=com"
On pourrait faire appel à la fonction 2 fois en mettant en argument la branche voulue, mais y a t'il une autre façon un peu mieux ?
Je t'ai déjà donnée la réponse :
D'abord tu fais une recherche depuis ou=users,ou=applications,dc=societe,dc=com dans tout le subtree pour cn=toto (si cn est bien ta clef unique) et quand tu as l'identité de la personne, tu as son dn et à partir de là tu peut l'authentifier via un BIND LDAP.
Quelque soit le protocole, il y a toujours identification avant authentification.
Ca marche merci, j'ai fait l'identification à partir du noeud "users" puis l'authentification.