Back to index

lightning-sunbird  0.9+nobinonly
Functions | Variables
asearch.c File Reference
#include "examples.h"

Go to the source code of this file.

Functions

static void do_other_work ()
int main (int argc, char **argv)

Variables

unsigned long global_counter = 0

Function Documentation

static void do_other_work ( ) [static]

Definition at line 163 of file asearch.c.

Here is the caller graph for this function:

int main ( int  argc,
char **  argv 
)

Definition at line 55 of file asearch.c.

{
    LDAP             *ld;
    LDAPMessage             *result, *e;
    BerElement              *ber;
    char             *a, *dn;
    char             **vals;
    int                     i;
    int                     rc;
    int                     finished;
    int                     msgid;
    int                     num_entries = 0;
    struct timeval   zerotime;

    zerotime.tv_sec = zerotime.tv_usec = 0L;

    /* get a handle to an LDAP connection */
    if ( (ld = ldap_init( MY_HOST, MY_PORT )) == NULL ) {
       perror( "ldap_init" );
       return( 1 );
    }
    /* authenticate to the directory as nobody */
    if ( ldap_simple_bind_s( ld, NULL, NULL ) != LDAP_SUCCESS ) {
       ldap_perror( ld, "ldap_simple_bind_s" );
       return( 1 );
    }
    /* search for all entries with surname of Jensen */
    if (( msgid = ldap_search( ld, MY_SEARCHBASE, LDAP_SCOPE_SUBTREE,
           MY_FILTER, NULL, 0 )) < 0 ) {
       ldap_perror( ld, "ldap_search" );
       return( 1 );
    }

    /* Loop, polling for results until finished */
    finished = 0;
    while ( !finished ) {
       /*
        * Poll for results.   We call ldap_result with the "all" argument
        * set to LDAP_MSG_ONE.  This causes ldap_result() to return exactly one
        * entry if at least one entry is available.  This allows us to
        * display the entries as they are received.
        */
       result = NULL;
       rc = ldap_result( ld, msgid, LDAP_MSG_ONE, &zerotime, &result );
       switch ( rc ) {
       case -1:
           /* some error occurred */
           ldap_perror( ld, "ldap_result" );
           return( 1 );
       case 0:
           /* Timeout was exceeded.  No entries are ready for retrieval. */
           if ( result != NULL ) {
              ldap_msgfree( result );
           }
           break;
       default:
           /*
            * Either an entry is ready for retrieval, or all entries have
            * been retrieved.
            */
           if (( e = ldap_first_entry( ld, result )) == NULL ) {
              /* All done */
              finished = 1;
              if ( result != NULL ) {
                  ldap_msgfree( result );
              }
              continue;
           }
           /* for each entry print out name + all attrs and values */
           num_entries++;
           if (( dn = ldap_get_dn( ld, e )) != NULL ) {
              printf( "dn: %s\n", dn );
              ldap_memfree( dn );
           }
           for ( a = ldap_first_attribute( ld, e, &ber );
                  a != NULL; a = ldap_next_attribute( ld, e, ber ) ) {
              if (( vals = ldap_get_values( ld, e, a )) != NULL ) {
                  for ( i = 0; vals[ i ] != NULL; i++ ) {
                     printf( "%s: %s\n", a, vals[ i ] );
                  }
                  ldap_value_free( vals );
              }
              ldap_memfree( a );
           }
           if ( ber != NULL ) {
              ber_free( ber, 0 );
           }
           printf( "\n" );
           ldap_msgfree( result );
       }
       /* Do other work here while you are waiting... */
       do_other_work();
    }

    /* All done.  Print a summary. */
    printf( "%d entries retrieved.  I counted to %ld "
           "while I was waiting.\n", num_entries,
           global_counter );
    ldap_unbind( ld );
    return( 0 );
}

Here is the call graph for this function:


Variable Documentation

unsigned long global_counter = 0

Definition at line 52 of file asearch.c.