Directory Client API
read.c
This is an example of doing a synchronous read operation, and how to process the returned results.
To compile this example on Unix:
cc -I /opt/isode/include -c read.c
To compile this example on Windows:
cl /nologo /I C:\Progra~1\Isode\include /c read.c
To link this example on Unix:
cc -o read read.o -L/opt/isode/lib \ -ldua -lisode -libase -lldap -llber \ -lisode_ssl -lisode_crypto -lpthread
To link this example on Windows:
cl /nologo /o read.exe read.obj \ C:\Progra~1\Isode\bin\libdua.lib
/*
* Copyright (c) 2005-2009, Isode Limited, London, England.
* All rights reserved.
*
* Acquisition and use of this software and related materials for any
* purpose requires a written licence agreement from Isode Limited,
* or a written licence from an organisation licenced by Isode Limited
* to grant such a licence.
*/
#include <stdio.h>
#include <isode/ds/dsapi/dsapi.h>
int main ( void )
{
DS_Session *ds = NULL;
DS_Indication *di = NULL;
DS_ErrorType t;
const DS_EntryList *el = NULL;
const DS_Entry *e = NULL;
const DS_AttrList *al = NULL;
const DS_Attr *a = NULL;
DS_DN *dn = NULL;
const char *attrs[] = { "objectClass", "cn", "manager", NULL };
DS_Status status;
status = DS_Initialize();
fprintf( stderr, "Failed to create session\n" );
return 1;
}
status = DS_BindAnonymousSync( ds, NULL, &di );
t != DS_E_SUCCESS )
status = DS_E_DSOPFAILED;
DS_Indication_Delete( di );
if ( status != DS_E_NOERROR) {
DS_UnbindSync( &ds );
fprintf( stderr, "Failed to bind\n" );
return 1;
}
status = DS_ReadSync( ds, dn, attrs, NULL, &di );
status = DS_Indication_GetEntryList( di, &el );
e = DS_EntryList_GetFirst( el );
status = DS_Entry_GetAttrList( e, &al );
a != NULL;
a = DS_AttrList_GetNext( a ) ) {
const char *name;
const DS_AttrValList *vl;
const DS_AttrVal *v;
DS_Attr_GetTypeName( a, &name );
printf( "%s:\n", name );
/* Don't free name */
status = DS_Attr_GetValueList( a, &vl );
v != NULL;
v = DS_AttrValList_GetNext( v ) ) {
const char *val_str;
size_t val_len;
status = DS_AttrVal_GetStringPointer( v, &val_str, &val_len );
if ( status == DS_E_NOERROR )
printf( "\t%s\n", val_str );
else
printf( "\t(No string value)\n");
/* Don't free val_str */
}
}
DS_Indication_Delete( di );
DS_UnbindSync( &ds );
return 0;
}