#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ldap.h>
#include <ldap_oids.h>
#if defined(N_PLAT_NLM) && defined(LIBC)
#include <screen.h>
#endif
static char usage[] =
"\n Usage: getdse <host name> <port number> <login dn> <password>"
"\n Example: getdse Acme.com 389 cn=admin,o=Acme secret\n";
int main( int argc, char **argv) {
int version, ldapPort, i, j, rc;
char *ldapHost, *loginDN, *password, *desc;
char *attrName ;
char **values;
BerElement *ber;
LDAP *ld;
LDAPMessage *searchResult = NULL, *dse;
struct timeval timeOut = {10,0};
#if defined(N_PLAT_NLM) && defined(LIBC)
setscreenmode(SCR_NO_MODE);
#endif
if (argc != 5) {
printf("%s", usage);
return(1);
}
ldapHost = argv[1];
ldapPort = atoi(argv[2]);
loginDN = argv[3];
password = argv[4];
version = LDAP_VERSION3;
ldap_set_option( NULL, LDAP_OPT_PROTOCOL_VERSION, &version);
ldap_set_option( NULL, LDAP_OPT_NETWORK_TIMEOUT, &timeOut);
if (( ld = ldap_init( ldapHost, ldapPort )) == NULL) {
printf ( "\n LDAP session initialization failed\n");
return( 1 );
}
printf ( "\n LDAP session initialized\n");
rc = ldap_simple_bind_s( ld, loginDN, password );
if (rc != LDAP_SUCCESS ) {
printf("ldap_simple_bind_s: %s\n", ldap_err2string( rc ));
ldap_unbind_s ( ld );
return( 1 );
}
printf("\n Bind successful\n");
rc = ldap_search_ext_s(
ld,
NULL,
LDAP_SCOPE_BASE,
"(objectclass=*)",
NULL,
0,
NULL,
NULL,
&timeOut,
LDAP_NO_LIMIT,
&searchResult );
if ( rc != LDAP_SUCCESS ) {
printf( "ldap_search_ext_s: %s\n", ldap_err2string( rc ));
ldap_msgfree( searchResult );
ldap_unbind_s( ld );
return( 1 );
}
dse = ldap_first_entry( ld, searchResult );
printf("\n Root DSE");
printf("\n -----------------------------------------\n");
for ( attrName = ldap_first_attribute( ld, searchResult, &ber );
attrName != NULL;
attrName = ldap_next_attribute( ld, searchResult, ber )) {
if (( values = ldap_get_values( ld, dse, attrName )) != NULL ) {
printf(" %s:\n", attrName);
for ( i = 0; values[ i ] != NULL; i++ ) {
if ( strcmp(attrName, "supportedExtension") == 0
|| strcmp(attrName, "supportedControl") == 0) {
printf(" %s", values[i]);
for ( j = 0; j < TOTAL_LEN; j++ ) {
desc = "";
if ( strcmp( values[i], namesandoids[j][3]) == 0 ) {
desc = namesandoids[j][1];
if( strlen(desc) )
printf(" (%s)\n", namesandoids[j][1]);
else
printf("\n");
break;
}
}
if( !strlen(desc) ) {
printf("\n");
}
}
else
printf(" %s\n", values[ i ] );
}
ldap_value_free( values );
}
ldap_memfree( attrName );
}
ber_free(ber, 0);
ldap_msgfree( searchResult );
ldap_unbind_s( ld );
return( 0 );
}