/*-------------------------------------------------------------------------- lt18.cpp ldap rfc1823 test Copyright (C) 1996 Microsoft Corporation All rights reserved. Authors: davidsan Dave Sanderman History: 06/17/96 davidsan Created. --------------------------------------------------------------------------*/ #include "lt18.h" LDAP *g_pldap = NULL; BOOL FInit() { return TRUE; } BOOL FConnect(char *szServer) { int iRet; g_pldap = ldap_open(szServer, IPPORT_LDAP); if (!g_pldap) { printf("Couldn't ldap_open\n"); return FALSE; } iRet = ldap_bind_s(g_pldap, "cn=alexwe@microsoft.com", "test", LDAP_AUTH_SIMPLE); if (iRet != LDAP_SUCCESS) { printf("Couldn't ldap_bind: %d\n", iRet); return FALSE; } return TRUE; } char *g_rgszAttrib[] = {"title", "sn", "objectClass", "krbName", NULL}; BOOL FSearch(char *szSearch) { int iRet; struct timeval timeout; LDAPMessage *res; LDAPMessage *entry; void *pv; char **rgsz; char **psz; BERVAL **rgpberval; BERVAL **ppberval; g_pldap->ld_deref = LDAP_DEREF_ALWAYS; g_pldap->ld_sizelimit = 100; g_pldap->ld_timelimit = 0; timeout.tv_usec = 0; timeout.tv_sec = 60 * 60; iRet = ldap_search_st(g_pldap, "c=us", LDAP_SCOPE_SUBTREE, szSearch, g_rgszAttrib, FALSE, &timeout, &res); if (iRet != LDAP_SUCCESS) { printf("Couldn't ldap_search_st: %d\n", iRet); ldap_msgfree(res); return FALSE; } entry = ldap_first_entry(g_pldap, res); if (!entry) { printf("No first entry.\n"); ldap_msgfree(res); return FALSE; } while (entry) { char *szDN = ldap_get_dn(g_pldap, entry); printf("DN: %s\n", szDN); ldap_free_dn(szDN); char *szAttr = ldap_first_attribute(g_pldap, entry, &pv); while (szAttr) { printf("attr: %s\n", szAttr); rgsz = ldap_get_values(g_pldap, entry, szAttr); if (!rgsz) { printf(" no values!\n"); } else { printf(" %d values:\n", ldap_count_values(rgsz)); psz = rgsz; while (*psz) { printf(" val: %s\n", *psz); psz++; } ldap_value_free(rgsz); } rgpberval = ldap_get_values_len(g_pldap, entry, szAttr); if (!rgpberval) { printf(" no values_len!\n"); } else { printf(" %d values_len:\n", ldap_count_values_len(rgpberval)); ppberval = rgpberval; while (*ppberval) { printf(" val: %s (len %d)\n", (*ppberval)->bv_val, (*ppberval)->bv_len); ppberval++; } ldap_value_free_len(rgpberval); } szAttr = ldap_next_attribute(g_pldap, entry, &pv); } entry = ldap_next_entry(g_pldap, entry); } ldap_msgfree(res); return TRUE; } BOOL FTerm() { if (g_pldap) ldap_unbind(g_pldap); g_pldap = NULL; return TRUE; } void usage() { printf("usage: lt18 \n"); exit(1); } void __cdecl main(int argc, char **argv) { if (argc < 3) usage(); if (!FInit()) exit(1); if (!FConnect(argv[1])) exit(1); if (!FSearch(argv[2])) exit(1); FTerm(); exit(0); }