|
|
/*--------------------------------------------------------------------------
lt.cpp ldap test
Copyright (C) 1996 Microsoft Corporation All rights reserved.
Authors: davidsan Dave Sanderman
History: 04/25/96 davidsan Created. --------------------------------------------------------------------------*/
#include "lt.h"
PLCLI g_plcli = NULL;
BOOL FInit() { return TRUE; }
BOOL FConnect(char *szServer) { HRESULT hr; XID xid; hr = HrCreateLdapClient(LDAP_VER_CURRENT, INTERFACE_VER_CURRENT, &g_plcli); if (FAILED(hr)) { printf("HrCreateLdapClient returned %08X\n", hr); return FALSE; } hr = g_plcli->HrConnect(szServer, IPPORT_LDAP); if (FAILED(hr)) { printf("HrConnect returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrBindSimple("cn=alex weinart, c=us", NULL, &xid); if (FAILED(hr)) { printf("HrBindSimple returned %08X\n", hr); return FALSE; } hr = g_plcli->HrGetBindResponse(xid, INFINITE); if (FAILED(hr)) { printf("HrBindSimple returned %08X\n", hr); return FALSE; } return TRUE; }
char *g_rgszAttrib[] = {"title", "sn", "objectClass", "krbName"};
BOOL FSearch() { HRESULT hr; XID xid; POBJ pobj; POBJ pobjT; PATTR pattr; PVAL pval; SP sp; FILTER filter; FILTER filterS1; FILTER filterS2; FILTER filterSS1; FILTER filterSS2; FILTER filterSS3;
#ifdef OLDSEARCH
filter.type = LDAP_FILTER_AND; filter.pfilterSub = &filterS1;
filterS1.type = LDAP_FILTER_OR; filterS1.pfilterSub = &filterSS1; filterS1.pfilterNext = &filterS2; filterSS1.type = LDAP_FILTER_EQUALITY; filterSS1.ava.szAttrib = "cn"; filterSS1.ava.szValue = "sander"; filterSS1.pfilterNext = &filterSS2;
filterSS2.type = LDAP_FILTER_EQUALITY; filterSS2.ava.szAttrib = "sn"; filterSS2.ava.szValue = "sander"; filterSS2.pfilterNext = &filterSS3;
filterSS3.type = LDAP_FILTER_EQUALITY; filterSS3.ava.szAttrib = "uid"; filterSS3.ava.szValue = "sander"; filterSS3.pfilterNext = NULL;
filterS2.type = LDAP_FILTER_EQUALITY; filterS2.ava.szAttrib = "objectClass"; filterS2.ava.szValue = "Person"; filterS2.pfilterNext = NULL; #else
filter.type = LDAP_FILTER_SUBSTRINGS; filter.sub.szAttrib = "cn"; filter.sub.szInitial = "davidsan"; filter.sub.szAny = NULL; filter.sub.szFinal = NULL;
// filter.type = LDAP_FILTER_EQUALITY;
// filter.ava.szAttrib = "cn";
// filter.ava.szValue = "davidsan4";
#endif
sp.szDNBase = "c=US"; sp.scope = LDAP_SCOPE_SUBTREE; sp.deref = LDAP_DEREF_ALWAYS; sp.cRecordsMax = 0; sp.cSecondsMax = 0; sp.fAttrsOnly = FALSE; sp.pfilter = &filter; sp.cAttrib = 4; sp.rgszAttrib = g_rgszAttrib; hr = g_plcli->HrSearch(&sp, &xid); if (FAILED(hr)) { printf("HrSearch returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrGetSearchResponse(xid, INFINITE, &pobj); if (FAILED(hr)) { printf("HrGetSearchResponse returned %08X\n", hr); return FALSE; } pobjT = pobj; while (pobjT) { printf("OBJ: %s\n", pobjT->szDN); pattr = pobjT->pattrFirst; while (pattr) { printf(" ATTR: %s\n", pattr->szAttrib); pval = pattr->pvalFirst; while (pval) { printf(" VAL: %s\n", pval->szVal); pval = pval->pvalNext; } pattr = pattr->pattrNext; } pobjT = pobjT->pobjNext; } HrFreePobjList(pobj); return TRUE; }
void SetPattr(PATTR pattr, PATTR pattrNext, char *szAttrib, PVAL pval) { pattr->pattrNext = pattrNext; pattr->szAttrib = szAttrib; pattr->pvalFirst = pval; }
void SetPval(PVAL pval, PVAL pvalNext, char *szVal) { pval->pvalNext = pvalNext; pval->szVal = szVal; }
BOOL FTestOtherStuff() { HRESULT hr; XID xid; hr = g_plcli->HrDelete("c=us, o=my pants, cn=davidsan", &xid); if (FAILED(hr)) { printf("HrDelete returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrGetDeleteResponse(xid, INFINITE); if (FAILED(hr)) { printf("HrGetDeleteResponse returned %08X\n", hr); } hr = g_plcli->HrDelete("alex", &xid); if (FAILED(hr)) { printf("HrDelete returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrGetDeleteResponse(xid, INFINITE); if (FAILED(hr)) { printf("HrGetDeleteResponse returned %08X\n", hr); } hr = g_plcli->HrCompare("c=us, [email protected]", "URL", "ftp://ftp.netcom.com/pub/sa/sandmann", &xid); if (FAILED(hr)) { printf("HrCompare returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrGetCompareResponse(xid, INFINITE); if (FAILED(hr)) { printf("HrGetCompareResponse returned %08X\n", hr); } hr = g_plcli->HrModifyRDN("foo", "bar", TRUE, &xid); if (FAILED(hr)) { printf("HrModifyRDN returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrGetModifyRDNResponse(xid, INFINITE); if (FAILED(hr)) { printf("HrGetModifyRDNResponse returned %08X\n", hr); }
hr = g_plcli->HrModifyRDN("c=us, cn=alex weinart", "bar", TRUE, &xid); if (FAILED(hr)) { printf("HrModifyRDN returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrGetModifyRDNResponse(xid, INFINITE); if (FAILED(hr)) { printf("HrGetModifyRDNResponse returned %08X\n", hr); } // test add: add an obj with dn "c=us, cn=davidsan" and some other props
ATTR attr1; VAL val1; ATTR attr2; VAL val2; ATTR attr3; VAL val3; SetPattr(&attr1, &attr2, "uid", &val1); SetPval(&val1, NULL, "davidsan"); SetPattr(&attr2, &attr3, "sn", &val2); SetPval(&val2, NULL, "sanderman"); SetPattr(&attr3, NULL, "st", &val3); SetPval(&val3, NULL, "wa");
hr = g_plcli->HrAdd("c=us, cn=davidsan", &attr1, &xid); if (FAILED(hr)) { printf("HrAdd returned %08X\n", hr); return FALSE; }
hr = g_plcli->HrGetAddResponse(xid, INFINITE); if (FAILED(hr)) { printf("HrGetAddResponse returned %08X\n", hr); }
return TRUE; }
BOOL FTerm() { if (g_plcli) { g_plcli->HrUnbind(); if (g_plcli->HrIsConnected() == NOERROR) g_plcli->HrDisconnect(); g_plcli->Release(); } return TRUE; }
void usage() { printf("usage: lt <server>\n"); exit(1); }
void __cdecl main(int argc, char **argv) { if (argc < 2) usage();
if (!FInit()) exit(1);
if (!FConnect(argv[1])) exit(1);
if (!FSearch()) exit(1); // FTestOtherStuff();
FTerm(); exit(0); }
|