[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: little problem searching in ldap with own client
Paco,
Try the the following change.
You have the following code inside your for loop:
primero = ldap_next_entry( ldapconn, res);
it should be
primero = ldap_next_entry( ldapconn, primero);
Good luck,
Ian
On Sat, Sep 28, 2002 at 09:20:04PM +0200, Paco Brufal wrote:
> Hello,
>
> I'm developing a small client to search in OpenLDAP server. All
> seems to work, but my program only retrieves the first and the second entry
> that match the filter, and the the second entry is repeated the number of
> total entries that match the filter. I mean, if I find 5 entries in the
> directory, my program prints the first, the second, and then 3 more times
> the second entry...
>
> This is the source code:
>
> >--
> #include <stdio.h>
> #include <string.h>
> #include <stdlib.h>
> #include <ldap.h>
> #include <lber.h>
> #include <sys/time.h>
>
> int main (void) {
> char *host="localhost", *port="389", *basedn="dc=domain,dc=com";
> LDAP *ldapconn = NULL;
> LDAPMessage *res;
> LDAPMessage *primero;
> BerElement *ber;
> char *binddn = "cn=admin,dc=domain,dc=com", *bindpw = "xxxxxxx";
> char *atributos[]={"cn","mail","telephonenumber",NULL};
> int msg, rows,a;
> char *nombre, **vals;
>
> ldapconn = ldap_init(host, atoi(port));
> ldap_simple_bind(ldapconn,binddn,bindpw);
> msg=ldap_search_s(ldapconn,basedn,LDAP_SCOPE_SUBTREE,"(&(cn=*)(mail=*)(telephonenumber=*))",atributos,0,&res);
> rows=ldap_count_messages(ldapconn,res);
> primero = ldap_first_entry(ldapconn,res);
> for(a=0;a<rows;a++) {
> nombre = ldap_first_attribute(ldapconn, primero, &ber);
> vals = ldap_get_values(ldapconn, primero, nombre);
> printf("[%d] %s : %s\n",a,(char *)strdup(nombre),(char *)strdup(vals[0]));
> ldap_value_free(vals);
> ldap_memfree(nombre);
>
> nombre = ldap_next_attribute(ldapconn, primero, ber);
> vals = ldap_get_values(ldapconn, primero, nombre);
> printf("[%d] %s : %s\n",a,(char *)strdup(nombre),(char *)strdup(vals[0]));
> ldap_value_free(vals);
> ldap_memfree(nombre);
>
> nombre = ldap_next_attribute(ldapconn, primero, ber);
> vals = ldap_get_values(ldapconn, primero, nombre);
> printf("[%d] %s : %s\n",a,(char *)strdup(nombre),(char *)strdup(vals[0]));
> ldap_value_free(vals);
> ldap_memfree(nombre);
> primero = ldap_next_entry(ldapconn,res);
> }
> if (ber != NULL) {
> ber_free(ber, 0);
> }
> ldap_msgfree(res);
> ldap_unbind(ldapconn);
> return(0);
> }
> >--
>
> Thanks in advance :)
>
> ...Braincracking. Neophyte. 1998
> --- Debian + Mutt + Postfix
> * Origin: Web Page: http://pbrufal.kleenux.org (Fido 2:346/7.68)
>
--
Ian Logan
Information and Communication Technologies
New Mexico State University
Email: ian@nmsu.edu Phone: 505-646-6034 Fax: 505-646-4560