Hi List,

I hope I'm on the right mailinglist of openldap. I got some problem, when performing a search of one object several times....

I'm searching for the entry test. I've created the source code below to test a problem I had in a larger program. First it looked pretty good, but after a while I got the following error:

ldap_bind_s: Can't contact LDAP server (81)
ldap_bind_s: Can't contact LDAP server (81)
ldap_bind_s: Can't contact LDAP server (81)
..
..
..

First I thought I didn't cleanly free the variables, but the code below should be correct?!?

Is this problem openldap(-software) related or did I make a big mistake....?

I'm using the stable package which comes with Debian Sarge...(version of openldap: 2.2.23-8)


Thanks in Advance for any answer..

Regards

Robin

PS:

The following source code I created to show what I did:
--------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#include <ldap.h>

char *ldap_host = "localhost";
char *login_dn  = "cn=admin,dc=datapark,dc=ch";
char *root_dn   = "dc=test,dc=datapark,dc=ch";
char *login_pw  = "te*st89";

int search_base(char *base) {
        LDAP *ldap;
        LDAPMessage *msg;

        char *filter  = "(objectClass=*)";

        if(( ldap = ldap_init(ldap_host, LDAP_PORT)) == NULL) {
                fprintf(stderr, "Couldn't connect to ldap host.\n");
                return 1;
        }

if(ldap_bind_s(ldap, login_dn, login_pw, LDAP_AUTH_SIMPLE) != LDAP_SUCCESS) {
                                ldap_perror(ldap, "ldap_bind_s");
                                ldap_unbind(ldap);
                                return 2;
        }

// perform an ldap search to get downstream and upstream values of month!

if(ldap_search_s(ldap, base, LDAP_SCOPE_SUBTREE, filter, NULL, 0, &msg) != LDAP_SUCCESS) {
                ldap_perror(ldap, "ldap_search_s");
                ldap_msgfree(msg);
                ldap_unbind(ldap);
                return 3;
        }


        ldap_msgfree(msg);
        ldap_unbind_s(ldap);

        return 0;
}


int main(void) {
        int i;
        char *base      = "dc=test,dc=datapark,dc=ch";

        for(i = 0; i < 100000; i++) {
                search_base(base);
        }

        return 0;

}

Reply via email to