class='cKeyword'>#include <stdio.h>
class='cKeyword'>#include <stdlib.h>
class='cKeyword'>#include <string.h>
class='cKeyword'>#include <nwnet.h>
class='cKeyword'>#include <nwcalls.h>
class='cKeyword'>#include <nwlocale.h>
void FreeBuf(pBuf_T cBuf, pBuf_T lBuf, NWDSContextHandle bcontext);
void FreeFilter(pBuf_T cBuf, NWDSContextHandle context);
void FreeContext(NWDSContextHandle context);
void FreeUnicodeTables();
nbool8 bbDoLogout = N_FALSE;
void main(int argc, class='cKeyword'>char *argv[])
{
NWDSContextHandle context;
nint32 lIterationHandle = NO_MORE_ITERATIONS;
Object_Info_T pObjectInfo;
pBuf_T pFilter;
pBuf_T pBuf;
pFilter_Cursor_T pCur;
nuint32 luObjectCount;
nuint32 luAttrCount;
NWDSCCODE ccode;
nstr8 strAbbreviatedName[MAX_DN_CHARS+1];
nstr8 strVal[MAX_DN_CHARS+1];
nstr8 strObjectName[MAX_DN_CHARS+1];
nstr8 strUserName[NW_MAX_USER_NAME_LEN];
nstr8 strUserPassword[50];
nuint i;
LCONV lConvInfo;
if(argc != 3)
{
printf("\nUsage : NDSSEARC <base object> <object class>");
printf("\nExample : NDSSEARC OU=MYOU.O=MYORG USER");
exit(1);
}
strcpy(strVal, argv[2]);
ccode = NWCallsInit(NULL,NULL);
if(ccode)
{
printf("\nNWCallsInit returned %X", ccode);
exit(1);
}
NWLlocaleconv(&lConvInfo);
ccode = NWInitUnicodeTables(lConvInfo.country_id,
lConvInfo.code_page);
if(ccode)
{
printf("\nNWInitUnicodeTables returned %X", ccode);
exit(1);
}
ccode = NWDSCreateContextHandle(&context);
if(ccode)
{
printf("\nNWDSCreateContextHandle failed");
FreeUnicodeTables();
}
if this example is
compiled and run as an NLM). */
if(!NWIsDSAuthenticated())
{
printf("\nMust authenticate to NDS");
printf("\nEnter User Name: ");
gets(strUserName);
printf("Enter User Password: ");
gets(strUserPassword);
ccode = NWDSLogin(context, 0, strUserName, strUserPassword, 0);
if(ccode)
{
printf("\nNWDSLogin returned %X", ccode);
FreeContext(context);
}
else
{
bbDoLogout = N_TRUE;
}
}
ccode = NWDSAbbreviateName(context, argv[1], strAbbreviatedName);
if(ccode)
{
printf("\nNWDSAbbreviatedName returned %X", ccode);
FreeContext(context);
}
else
printf("\nbase object being used is %s", strAbbreviatedName);
ccode = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &pFilter);
if(ccode)
{
printf("\nNWDSAllocBuf returned %X", ccode);
FreeContext(context);
}
ccode = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &pBuf);
if(ccode)
{
printf("\nNWDSAllocBuf returned %X", ccode);
FreeFilter(pFilter, context);
}
ccode = NWDSInitBuf(context, DSV_SEARCH_FILTER, pFilter);
if(ccode)
{
printf("\nNWDSInitBuf returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
ccode = NWDSAllocFilter(&pCur);
if(ccode)
{
printf("\nNWDSAllocFilter returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
ccode = NWDSAddFilterToken(pCur, FTOK_ANAME, "Object Class",
SYN_CLASS_NAME);
if(ccode)
{
printf("\nNWDSAddFilterToken returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
ccode = NWDSAddFilterToken(pCur, FTOK_EQ, NULL,(nuint32)NULL);
if(ccode)
{
printf("\nNWDSAddFilterToken error %x\n", ccode);
FreeBuf(pBuf, pFilter, context);
}
ccode = NWDSAddFilterToken(pCur, FTOK_AVAL, strVal,
SYN_CLASS_NAME);
if(ccode)
{
printf("\nNWDSAddFilterToken returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
ccode = NWDSAddFilterToken(pCur, FTOK_END, NULL,(nuint32)NULL);
if(ccode)
{
printf("\nNWDSAddFilterToken returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
ccode = NWDSPutFilter(context, pFilter, pCur, NULL);
if(ccode)
{
printf("\nNWDSPutFilter returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
printf("\n\"%s\" objects under %s:", strVal, strAbbreviatedName);
do
{
ccode = NWDSSearch(context,
strAbbreviatedName,
DS_SEARCH_SUBTREE,
FALSE,
pFilter,
DS_ATTRIBUTE_VALUES,
FALSE,
NULL,
&lIterationHandle,
0,
0,
pBuf);
if(ccode)
{
printf("\nNWDSSearch returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
ccode = NWDSGetObjectCount(context, pBuf, &luObjectCount);
if(ccode)
{
printf("\nNWDSGetObjectCount returned %X", ccode);
FreeBuf(pBuf, pFilter, context);
}
if(0 == luObjectCount)
{
printf("\nNone found for %s", strVal);
FreeBuf(pBuf, pFilter, context);
}
for(i = 0; i < luObjectCount; i++)
{
ccode = NWDSGetObjectName(context, pBuf, strObjectName,
&luAttrCount, &pObjectInfo);
if(ccode)
{
printf("\nNone found for %s", strVal);
FreeBuf(pBuf, pFilter, context);
}
printf("\n%s", strObjectName);
}
} while(lIterationHandle != NO_MORE_ITERATIONS);
NWDSFreeBuf(pBuf);
NWDSFreeBuf(pFilter);
if(bbDoLogout)
NWDSLogout(context);
NWDSFreeContext(context);
NWFreeUnicodeTables();
}
void FreeBuf(pBuf_T pBuf, pBuf_T pLBuf, NWDSContextHandle context)
{
NWDSFreeBuf(pBuf);
FreeFilter(pLBuf, context);
}
void FreeFilter(pBuf_T pFBuf, NWDSContextHandle context)
{
NWDSFreeBuf(pFBuf);
FreeContext(context);
}
void FreeContext(NWDSContextHandle context)
{
if(bbDoLogout)
NWDSLogout(context);
NWDSFreeContext(context);
FreeUnicodeTables();
}
void FreeUnicodeTables()
{
NWFreeUnicodeTables();
exit(1);
}