class='cKeyword'>class='cKeyword'>#ifndef UCHAR
class='cKeyword'>#define UCHAR unsigned class='cKeyword'>char
class='cKeyword'>#endif
class='cKeyword'>#include <stdio.h>
class='cKeyword'>#include <stdlib.h>
class='cKeyword'>#include <string.h>
class='cKeyword'>class='cKeyword'>#ifdef WIN32
class='cKeyword'>#include <conio.h>
class='cKeyword'>#endif
class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_NLM
class='cKeyword'>#include <signal.h>
class='cKeyword'>#include <nwthread.h>
class='cKeyword'>#endif
class='cKeyword'>#include <time.h>
class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_UNIX
class='cKeyword'>#define getch getchar
class='cKeyword'>#endif
class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_NLM
class='cKeyword'>class='cKeyword'>#ifdef FAST_ALLOC
LONG sleptFlag;
static void *ssLSSCLAllocRTag;
static struct
{
LONG signature;
class='cKeyword'>char *name;
void **tag;
} ssclAllocTag = {0x54524C41L, "SSLDAPCL Alloc Memory", &ssLSSCLAllocRTag};
void *ss_GetAllocTag(void);
static int ss_InitSSAllocTag(void);
class='cKeyword'>#include "ssmem.h"
class='cKeyword'>#endif
class='cKeyword'>#endif
class='cKeyword'>#include "nssscl.h"
class='cKeyword'>#include "nssbldno.h"
static int optIdx = 1; *optArg = NULL;
class='cKeyword'>#define BADCHAR (int)'?'
class='cKeyword'>#define ERRMSG ""
/* interactive flag */
static int aFlag = 1;
int sss_GetOpt
(
int nArgc,
class='cKeyword'>char **nArgv,
class='cKeyword'>char *optStr
)
{
static class='cKeyword'>char *place = ERRMSG;
class='cKeyword'>char *nxtOpt;
if(!*place)
{
if((optIdx >= nArgc) ||
((*(place = nArgv[optIdx]) != '-')
&& (*(place = nArgv[optIdx]) != '/')) ||
(!*++place))
{
return(-1);
}
if((*place == '-') || (*place == '/'))
{
++optIdx;
return(-1);
}
}
if((optionString = (int)*place++) == (int)'=' ||
!(nxtOpt = strchr(optStr, optionString)))
{
if(!*place)
{
++optIdx;
}
return(BADCHAR);
}
if(*++nxtOpt != '=')
{
optArg = NULL;
if(!*place)
{
++optIdx;
}
}
else
{
if(*place)
{
optArg = place + 1;
}
else if(nArgc <= ++optIdx)
{
place = ERRMSG;
return(BADCHAR);
}
else
{
optArg = nArgv[optIdx];
}
place = ERRMSG;
++optIdx;
}
return(optionString);
}
void Pause()
{
if(aFlag)
{
printf("\nPress a key ==>\n");
getch();
}
}
void PrintFlags(class='cKeyword'>char *msg, unsigned long statFlags)
{
if(aFlag)
{
printf("\n%s", msg);
if(statFlags & NSSS_ENHANCED_PROTECT_INFO_F)
printf("\tENHANCED PROTECTION...\n");
if(statFlags & NSSS_STORE_NOT_SYNCED_F)
printf("\tSTORE NOT SYNCED...\n");
if(statFlags & NSSS_SECRET_NOT_INITIALIZED_F)
printf("\tSECRET NOT INITIALIZED...\n");
if(statFlags & NSSS_SECRET_LOCKED_F)
printf("\tSECRET LOCKED...\n");
if(strcmp(msg, "SecretStore Flags:\n"))
{
if(statFlags & NSSS_ADMIN_LAST_MOD_F)
printf("\tADMIN MODIFIED LAST...\n");
else
printf("\tOWNER MODIFIED LAST...\n");
}
if(statFlags & NSSS_EP_PWORD_PRESENT_F)
printf("\tEP PWORD PRESENT...\n");
if(statFlags & NSSS_EP_MASTER_PWORD_PRESENT_F)
printf("\tMASTER PWORD PRESENT...\n");
if(statFlags & NSSS_MP_NOT_ALLOWED_F)
printf("\tMASTER PWORD NOT ALLOWED...\n");
if(statFlags & NSSS_HIDDEN_SECRET_F)
printf("\tHIDDEN SECRET IN SECRETSTORE...\n");
if(statFlags & NSSS_ADMIN_UNLOCKED_F)
printf("\tADMIN LAST UNLOCKED THE SECRETSTORE...\n");
}
}
class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_NLM
extern int
NWCallsInit
(
nptr reserved1,
nptr reserved2
);
extern int
NWCallsTerm
(
nptr reserved
);
void UnloadLDAPSSCLMain(int sigNbr);
static int ssLSSCLThreadGroupID = 0;
unsigned int ssLSSCLModuleHandle = 0;
class='cKeyword'>#endif
int ss_GetLoginInfo
(
class='cKeyword'>char *targetDN,
SSS_CONTEXT_T *ctx
)
{
class='cKeyword'>char portStr[256];
int rc = NSSS_SUCCESS;
SS_LDAPBIND_INFO_T *ldapBindInfo = NULL;
ldapBindInfo = (SS_LDAPBIND_INFO_T *)ctx->bindInfo;
printf("\n Enter the following sequence to login to an LDAP server:");
printf("\n (For default values press ENTER at the prompt)");
printf("\n <LDAP Host Name> <Port No.> <Login DN> <Target DN> <Password> <Root Cert File Name>");
printf("\n Example:\n lstst nsd19.provo.novell.com 636 cn=janedoe,o=novell password\n\n");
printf("\nc or: ");
printf("\n Example:\n lstst 151.155.160.85 636 cn=admin,o=novell cn=johndoe,o=novell password myKey.der\n\n");
printf("Enter the LDAP Server DNS Name/IP Address: ");
gets(ldapBindInfo->lHostName);
if(strlen(ldapBindInfo->lHostName) == 0)
{
printf("Server Name required!!\n");
return(NSSS_E_INVALID_PARAM);
}
printf("LDAP Host = [%s]\n", ldapBindInfo->lHostName);
printf( "\n" );
memset(portStr, 0, 256);
printf("Enter LDAP Port Number (636-default): ");
gets(portStr);
if(strlen(portStr))
{
ldapBindInfo->portNum = atoi(portStr);
}
else
{
ldapBindInfo->portNum = 636L;
}
printf("LDAP Port = [%d]\n", ldapBindInfo->portNum);
printf( "\n" );
printf("Enter Login DN in LDAP Format (\"cn=johndoe, o=novell\"): ");
gets(ctx->callerDN.id);
if((ctx->callerDN.len = strlen(ctx->callerDN.id)) == 0)
{
printf("Login DN required!!\n");
return(NSSS_E_INVALID_PARAM);
}
ctx->callerDN.len++;
printf("Login DN = [%s]\n", ctx->callerDN.id);
printf( "\n" );
memset(targetDN, 0, 256);
printf("Enter LDAP Target DN (\"cn=janedoe, o=novell\"): ");
gets(targetDN);
if(strlen(targetDN) == 0)
{
strcpy(targetDN, ctx->callerDN.id);
}
printf("Target DN = [%s]\n", targetDN);
printf( "\n" );
printf("Enter the LDAP Login Password: ");
gets(ldapBindInfo->loginPword);
printf("Enter Root Certificate File Name: (<Enter for Auto-retrieval>)");
gets(ldapBindInfo->trustedRootCert);
printf( "\n" );
if(strlen(ldapBindInfo->trustedRootCert))
{
printf("Trusted Root Certificate = [%s]\n", ldapBindInfo->trustedRootCert);
}
return(NSSS_SUCCESS);
}
int main
(
int argc,
class='cKeyword'>char **argv
)
{
SS_LDAPBIND_INFO_T lbInfo = {0};
SSS_CONTEXT_T ctx = {0};
SSS_GSINFOEXT_T gsInfo = {0};
SSS_READEXT_T rInfo = {0};
SS_SECRET_T secretIDList = {0};
class='cKeyword'>char srchStr[] = "*";
SS_OBJECT_DN_T targetObjDN = {0};
class='cKeyword'>char *nameStr;
class='cKeyword'>char *passwordSS[15] =
{
"LDAP test01_password", "LDAP test02_password",
"LDAP test03_password", "LDAP test04_password",
"LDAP test05_password", "LDAP test06_password",
"LDAP test07_password", "LDAP test08_password",
"LDAP test09_password", "LDAP test10_password",
"LDAP test11_password", "LDAP test12_password",
"LDAP test13_password", "LDAP test14_password",
"LDAP test15_password"
};
class='cKeyword'>char *appNames[15] =
{
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
};
int rcode = NSSS_SUCCESS, nslFlag = 0, repairFlag = 0,
exCount = 1, i, j, remLock = 0, unlock = 0,
master = 0, k, rCount = 1;
SS_SECRET_T readSecret = {0}, writeSecret = {0};
long opCount = 0, bufSize = strlen(passwordSS[0])+1;
unsigned long startTime, endTime, pFlag = 0L, count = 0, haveContext = 0;
int c, nslCount = 0;
struct tm *latStamp, *crtStamp, *lmtStamp, *unlockTStamp;
SS_PWORD_T mPassword = {8, "Pyramid"}, masterPword = {0}, pword = {0},
ePassword = {12, "ep_password"};
SS_HINT_T mpHint = {0}, hint = {28, "My Key To The SecretStore!!"};
SS_SECRET_ID_T secretID = {0};
printf("\nSecretStore NDK LDAP Test Program version %s ...\n\n", GSS_BLD_STR);
class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_NLM
AtUnload(UnloadLDAPSSCLMain);
atexit(UnloadLDAPSSCLMain);
ssLSSCLModuleHandle = GetNLMHandle();
class='cKeyword'>class='cKeyword'>#ifdef FAST_ALLOC
if(ss_InitSSAllocTag())
{
goto ERROR_1;
}
class='cKeyword'>#endif
ssLSSCLThreadGroupID = GetThreadGroupID();
if((rcode = NWCallsInit(NULL, NULL)))
{
printf("CLIB Initialization Failed [%d]!!\n", rcode);
goto ERROR_1;
}
signal(SIGTERM, UnloadLDAPSSCLMain);
class='cKeyword'>#endif
if(argc > 1)
{
while((c = sss_GetOpt(argc, argv, "dDnNaAbBmMsSc=C=r=R=?hH")) != -1)
{
switch(c)
{
'd':
class='cKeyword'>case 'D':
repairFlag = 1;
class='cKeyword'>break;
class='cKeyword'>case 'n':
class='cKeyword'>case 'N':
nslFlag = 1;
class='cKeyword'>break;
class='cKeyword'>case 'a':
class='cKeyword'>case 'A':
bufSize = 512;
class='cKeyword'>break;
class='cKeyword'>case 'b':
class='cKeyword'>case 'B':
bufSize = NSSS_MID_SECRET_BUF_LEN;
class='cKeyword'>break;
class='cKeyword'>case 'm':
class='cKeyword'>case 'M':
bufSize = NSSS_MIN_SECRET_BUF_LEN;
class='cKeyword'>break;
class='cKeyword'>case 's':
class='cKeyword'>case 'S':
/* set active flag to FALSE */
aFlag = 0;
printf("Silent Running Mode Active...\n");
class='cKeyword'>break;
class='cKeyword'>case 'c':
class='cKeyword'>case 'C':
exCount = atoi(optArg);
class='cKeyword'>break;
class='cKeyword'>case 'r':
class='cKeyword'>case 'R':
rCount = atoi(optArg);
class='cKeyword'>break;
default:
'h':
'H':
printf("\nUsage: lstst [/n][/m]|[/d][/b][/a][/s /c=[count] /r=[rcount] | /? | /h ]\n");
printf("\tOptions: [ /n | /N ] for 128k Secrets 5 Minutes Run Emulating NSL.\n");
printf("\tOptions: [ /a | /A ] for Average 512k Secret Buffer Size.\n");
printf("\tOptions: [ /m | /M ] for Medium 4k Secret Buffer Size.\n");
printf("\tOptions: [ /b | /B ] for Big 32k Secret Buffer Size.\n");
printf("\tOptions: [ /d | /D ] for Deleting Corrupted SecretStore.\n");
printf("\tOptions: [ /s | /S ] for Silent Running.\n");
printf("\t\tSilent sub-Option [ /c | /C ] for number of times to run.\n");
printf("\t\tSilent sub-Option [ /r | /R ] for number of times to Read data.\n");
printf("\tExample: lstst /s /c=1000 /r=100\n");
printf("\tOption: [ /h | /H | /? ] for Help.\n");
printf("\tNo command line options will activate interactive running.\n\n");
printf("\t The\"/\" and \"-\" for identifying options are interchangeable.\n\n");
exit(0);
}
}
}
else
{
printf("Full Interactive Running Mode Active...\n");
}
printf("[%d]k secret size buffer chosen...\n", bufSize);
printf("Execution Count Set to: [%d]\n", exCount);
printf("Read Count Set to: [%d]\n", rCount);
ctx.bindInfo = &lbInfo;
targetObjDN.len = strlen(targetObjDN.id)+1;
printf("Initializing...\n");
if(nslFlag)
{
aFlag = 0;
exCount = 1;
rCount = 1000000;
bufSize = 128;
}
if(repairFlag)
{
aFlag = 0;
exCount = 1;
rCount = 1;
}
/* Allocate the buffer used for writing secrets. */
if(!(writeSecret.data = (class='cKeyword'>char *)malloc(bufSize)))
{
printf("Error:secret MALLOC FAILED!\n");
goto ERROR_1;
}
memset(writeSecret.data, 0, bufSize);
writeSecret.len = bufSize;
if(!(readSecret.data = (class='cKeyword'>char *)malloc(NSSS_MAX_SECRET_BUF_LEN +
sizeof(SS_SECRET_T))))
{
printf("Error:readSecret MALLOC FAILED!\n");
goto ERROR_1;
}
memset(readSecret.data, 0, NSSS_MAX_SECRET_BUF_LEN);
readSecret.len = NSSS_MAX_SECRET_BUF_LEN;
if(!(secretIDList.data = (class='cKeyword'>char *)malloc(NSSS_MAX_IDLIST_BUF_LEN)))
{
printf("Error: secretIDList MALLOC FAILED!\n");
goto ERROR_1;
}
secretIDList.len = NSSS_MAX_IDLIST_BUF_LEN;
startTime = time(NULL);
printf("Done...\n");
Pause();
if(ss_GetLoginInfo(targetObjDN.id, &ctx))
{
printf("Error: Getting LDAP Login Info FAILED!\n");
goto ERROR_1;
}
targetObjDN.len = strlen(targetObjDN.id)+1;
do
{
if(pFlag & NSSS_DESTROY_CONTEXT_F)
{
pFlag &= ~NSSS_DESTROY_CONTEXT_F;
pFlag |= NSSS_GET_CONTEXT_F;
ctx.flags = NSSS_LDAP_CTX_F;
}
else
{
if(haveContext)
{
pFlag = 0;
}
else
{
pFlag |= NSSS_GET_CONTEXT_F;
}
ctx.flags |= (NSSS_LDAP_CTX_F | NSSS_BINDLDAP_F);
}
memset(&gsInfo, 0, sizeof(SSS_GSINFOEXT_T));
if(rcode = NSSSGetServiceInformation(&ctx, &targetObjDN, pFlag, &gsInfo, NULL))
{
memset(writeSecret.data, 0, bufSize);
strcpy(writeSecret.data, passwordSS[i-1]);
strcpy(secretID.id, appNames[i-1]);
secretID.len = strlen(secretID.id)+1;
if(i % 2)
{
printf("\nCreating secret ID [%s] in SS\n", secretID.id);
printf("Enter your Master password (64 chars max): ");
gets(masterPword.pword);
printf("\n");
printf("\nEnter your Master password Hint(64 chars max): ");
gets(mpHint.hint);
printf("\n");
if(rcode = NSSSSetEPMasterPassword(&ctx, &targetObjDN, pFlag, &masterPword, &mpHint, NULL))
{
printf("Error [%d] NSSSSetEPMasterPassword Failed!\n", rcode );
}
else
{
printf("\nNSSSSetEPMasterPassword Succeeded...\n", rcode);
printf("Your Master Password was set to: %s\n", masterPword.pword);
printf("Your Master Password Hint was set to: %s\n\n", mpHint.hint);
masterPword.pwordLen = strlen(masterPword.pword)+1;
mpHint.hintLen = strlen(mpHint.hint)+1;
}
}
else
{
if(aFlag)
{
printf("\nSet Master Password to default(y/n)? ");
c = getch();
putchar(c);
printf("\n");
}
else
{
c = 'y';
}
if(c == 'y' || c == 'Y')
{
masterPword = mPassword;
mpHint = hint;
if(rcode = NSSSSetEPMasterPassword(&ctx, &targetObjDN, pFlag,
&masterPword, &mpHint, NULL))
{
printf("Error [%d] NSSSSetEPMasterPassword Failed!\n", rcode);
}
else
{
printf("\nNSSSSetEPMasterPassword Succeeded...\n", rcode);
printf("Your Master Password was set to: %s\n", masterPword.pword);
printf("Your Master Password Hint was set to: %s\n\n", mpHint.hint);
}
}
else
{
printf("NO MasterPassword present!!\n");
}
}
}
else
{
printf("MasterPassword Already present...\n");
if(aFlag)
{
printf("\nDid you use the default Master password:(y/n)? ");
c = getch();
putchar(c);
printf("\n");
}
else
{
c = 'y';
}
if((c != 'y') && (c != 'Y'))
{
printf("Enter your Master password (64 chars max): ");
gets(masterPword.pword);
masterPword.pwordLen = strlen(masterPword.pword)+1;
printf("\n");
}
else
{
masterPword = mPassword;
}
}
opCount++;
}
if(nslFlag)
{
printf("\n<<=============== STARTING NSL OPS ======================>\n");
startTime = time(NULL);
}
for(k = 0; k < rCount; k++)
{
if(aFlag)
{
printf("\nDo you want to Read the secrets (y/n)? ");
c = getch();
putchar(c);
printf("\n\n");
}
else
{
if(repairFlag)
{
c = 'n';
}
else
{
c = 'y';
}
}
if(nslFlag)
{
count = 0;
secretIDList.len = NSSS_MAX_IDLIST_BUF_LEN;
if(rcode = NSSSEnumerateSecretIDs(&ctx, &targetObjDN, pFlag,
srchStr, &count, &secretIDList, NULL))
{
printf("Error [%d] NSSSEnumerateSecretIDs\n", rcode);
secretIDList.len = 0;
Pause();
}
else
{
if(nslFlag)
{
printf("SecretStore Enumerate Seceret IDs Succeeded...\n\n");
}
else
{
printf("\nNumber of Secrets = [%d]\nRaw Secret ID Buffer from SS [%s]\n",
count, (class='cKeyword'>char*)secretIDList.data);
}
}
opCount++;
nslCount++;
if(c == 'y' || c == 'Y')
{
memset(&rInfo, 0, sizeof(SSS_READEXT_T));
if(secretIDList.len)
{
nameStr = strtok((class='cKeyword'>char *)&secretIDList.data[0], "*");
for(i = 1; i <= (int)count; i++)
{
readSecret.len = NSSS_MAX_SECRET_BUF_LEN;
rInfo.statFlags = 0;
if(nslFlag)
{
strcpy(secretID.id, appNames[i-1]);
secretID.len = strlen(secretID.id)+1;
if(i % 2)
{
if(rcode = NSSSReadSecret(&ctx, &targetObjDN, pFlag,
NULL, &rInfo, &secretID, &readSecret, NULL))
{
printf("Read SecretID[%d] [%s] Failed = [%d]!!!\n", i, secretID.id, rcode);
}
else
{
printf("Read SecretID[%d] [%s] Succeeded...\n", i, secretID.id);
}
nslCount++;
opCount++;
}
else
{
if(rcode = NSSSReadSecret(&ctx, &targetObjDN,
(pFlag | NSSS_ENHANCED_PROTECTION_F | NSSS_EP_MASTER_PWORD_USED_F),
&masterPword, &rInfo, &secretID, &readSecret, NULL))
{
printf("Read SecretID[%d] [%s] Failed = [%d]!!!\n", i, secretID.id, rcode);
}
else
{
printf("Read SecretID[%d] [%s] Succeeded...\n", i, secretID.id);
}
nslCount++;
opCount++;
}
}
else
{
strcpy(secretID.id, nameStr);
secretID.len = strlen(secretID.id)+1;
rcode = NSSSReadSecret(&ctx, &targetObjDN, pFlag,
NULL, &rInfo, &secretID, &readSecret, NULL);
nslCount++;
opCount++;
if(rcode == NSSS_E_NDS_PWORD_CHANGED)
{
unlock = 1;
printf("Status Flags = [0x%x]\n", rInfo.statFlags);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
Pause();
goto Unlock_label;
}
readSecret.len = NSSS_MAX_SECRET_BUF_LEN;
if(rcode = NSSSReadSecret(&ctx, &targetObjDN,
(pFlag | NSSS_ENHANCED_PROTECTION_F | NSSS_EP_MASTER_PWORD_USED_F),
&masterPword, &rInfo, &secretID, &readSecret, NULL))
{
printf("\nStatus Flags = [0x%x]\n", rInfo.statFlags);
printf("Read SecretID[%d] = [%s]\n", i, secretID.id);
printf("Error [%d] NSSSReadSecret\n", rcode);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
Pause();
nslCount++;
opCount++;
continue;
}
else
{
master = 0;
nslCount++;
opCount++;
}
}
else
{
readSecret.len = NSSS_MAX_SECRET_BUF_LEN;
if(rcode = NSSSReadSecret(&ctx, &targetObjDN,
(pFlag | NSSS_ENHANCED_PROTECTION_F | NSSS_EP_PASSWORD_USED_F),
&ePassword, &rInfo, &secretID, &readSecret, NULL))
{
printf("\nStatus Flags = [0x%x]\n", rInfo.statFlags);
printf("Read SecretID[%d] = [%s]\n", i, secretID.id);
printf("Error [%d] NSSSReadSecret\n", rcode);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
Pause();
opCount++;
nslCount++;
continue;
}
else
{
master = 1;
nslCount++;
opCount++;
}
}
}
if(rcode == NSSS_SUCCESS)
{
printf("\nStatus Flags = [0x%x]\n", rInfo.statFlags);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
printf("Read Secret[%d] = [%s], len [%d]\n", i,
readSecret.data, readSecret.len);
if(aFlag)
{
crtStamp = localtime((long *)&rInfo.crtStamp);
if(crtStamp)
{
printf("\nCreation time stamp: %s",
asctime(crtStamp));
}
latStamp = localtime((long *)&rInfo.latStamp);
if(latStamp && rInfo.latStamp)
{
printf("Last accessed time stamp: %s",
asctime(latStamp));
}
lmtStamp = localtime((long *)&rInfo.lmtStamp);
if(lmtStamp)
{
printf("Last modified time stamp: %s\n",
asctime(lmtStamp));
}
}
}
else
{
printf("Read Secret Failed!! = [%d]\n", rcode);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
printf("Status Flags = [0x%x]\n", rInfo.statFlags);
Pause();
}
nameStr = strtok(NULL, "*");
}
}
}
}
if(nslFlag)
{
endTime = time(NULL);
if(endTime < startTime+300)
{
continue;
}
else
{
class='cKeyword'>break;
}
}
}
Unlock_label:
if(unlock)
{
printf("\nDo you want to REMOVE LOCKED SECRETS(y/n)? ");
c = getch();
putchar(c);
printf("\n\n");
if((c == 'y') || (c == 'Y'))
{
remLock = 1;
if(rcode = NSSSUnlockSecrets(&ctx, &targetObjDN,
(pFlag | NSSS_REMOVE_LOCK_FROM_STORE_F), NULL, NULL))
{
printf("Error [%d] NSSSUnlockSecrets\n", rcode);
Pause();
}
else
{
printf("SecretStore Unlocked by removing the lock...\n");
}
opCount++;
}
else
{
printf("\nDo you want to use Master Password to Unlock (y/n)? ");
c = getch();
putchar(c);
printf("\n");
if((c == 'y') || (c == 'Y'))
{
if(gsInfo.statusFlags & NSSS_EP_MASTER_PWORD_PRESENT_F)
{
strcpy(pword.pword, masterPword.pword);
pword.pwordLen = masterPword.pwordLen;
if(rcode = NSSSUnlockSecrets(&ctx, &targetObjDN,
(pFlag | NSSS_EP_MASTER_PWORD_USED_F),
&pword, NULL))
{
printf("Error [%d] NSSSUnlockSecrets\n", rcode);
Pause();
}
else
{
printf("SecretStore Unlocked...\n");
}
opCount++;
}
else
{
printf("Master password not set!! ");
Pause();
goto ERROR_1;
}
}
else
{
printf("Enter your previous valid NDS password: ");
gets(pword.pword);
pword.pwordLen = strlen(pword.pword)+1;
printf("\n");
if(rcode = NSSSUnlockSecrets(&ctx, &targetObjDN, pFlag, &pword, NULL))
{
printf("Error [%d] NSSSUnlockSecrets\n", rcode);
Pause();
}
else
{
printf("SecretStore Unlocked...\n");
}
opCount++;
}
}
if(secretIDList.len)
{
secretIDList.len = NSSS_MAX_IDLIST_BUF_LEN;
count = 0;
if(rcode = NSSSEnumerateSecretIDs(&ctx, &targetObjDN, pFlag,
srchStr, &count, &secretIDList, NULL))
{
printf("Error [%d] NSSSEnumerateSecretIDs\n", rcode);
Pause();
}
opCount++;
nameStr = strtok((class='cKeyword'>char *)&secretIDList.data[0], "*");
for(i = 1; i <= (int)count; i++)
{
readSecret.len = NSSS_MAX_SECRET_BUF_LEN;
strcpy(secretID.id, nameStr);
secretID.len = strlen(secretID.id)+1;
rInfo.statFlags = 0;
if(remLock)
{
if(rcode = NSSSReadSecret(&ctx, &targetObjDN, pFlag,
NULL, &rInfo, &secretID, &readSecret, NULL))
{
printf("Status Flags = [0x%x]\n", rInfo.statFlags);
printf("Read SecretID[%d] = [%s]\n", i, secretID.id);
printf("Error [%d] NSSSReadSecret\n", rcode);
Pause();
}
opCount++;
}
else
{
if(rcode = NSSSReadSecret(&ctx, &targetObjDN, pFlag,
NULL, &rInfo, &secretID, &readSecret, NULL))
{
if(rcode != NSSS_E_EP_ACCESS_DENIED)
{
printf("Status Flags = [0x%x]\n", rInfo.statFlags);
printf("Read SecretID[%d] = [%s]\n", i, secretID.id);
printf("Error [%d] NSSSReadSecret\n", rcode);
Pause();
}
opCount++;
}
if(rcode == NSSS_E_EP_ACCESS_DENIED)
{
if(rInfo.statFlags & NSSS_EP_PWORD_PRESENT_F)
{
readSecret.len = NSSS_MAX_SECRET_BUF_LEN;
if(rcode = NSSSReadSecret(&ctx, &targetObjDN,
(pFlag | NSSS_ENHANCED_PROTECTION_F | NSSS_EP_MASTER_PWORD_USED_F),
&masterPword, &rInfo, &secretID, &readSecret, NULL))
{
printf("\nStatus Flags = [0x%x]\n", rInfo.statFlags);
printf("Read SecretID[%d] = [%s]\n", i, secretID.id);
printf("Error [%d] NSSSReadSecret\n", rcode);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
Pause();
}
opCount++;
}
}
}
if(rcode == NSSS_SUCCESS)
{
printf("\nStatus Flags = [0x%x]\n", rInfo.statFlags);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
printf("Read Secret[%d] = [%s], len [%d]\n",
i, readSecret.data, readSecret.len);
if(aFlag)
{
crtStamp = localtime((long *)&rInfo.crtStamp);
if(crtStamp)
{
printf("\nCreation time stamp: %s", asctime(crtStamp));
}
latStamp = localtime((long *)&rInfo.latStamp);
if(latStamp && rInfo.latStamp)
{
printf("Last accessed time stamp: %s", asctime(latStamp));
}
lmtStamp = localtime((long *)&rInfo.lmtStamp);
if(lmtStamp)
{
printf("Last modified time stamp: %s\n", asctime(lmtStamp));
}
}
}
nameStr = strtok(NULL, "*");
}
}
}
unlock = 0;
if(nslFlag)
{
printf("\n<<=============== ENDING NSL OPS ======================>\n");
}
if(aFlag)
{
printf("\nDo you want to REMOVE the secrets(y/n)? ");
c = getch();
putchar(c);
printf("\n\n");
}
else
{
c = 'y';
}
if(c == 'y' || c == 'Y')
{
if(aFlag)
{
printf("\nOne at a time(y/n)? ");
c = getch();
putchar(c);
printf("\n");
}
else
{
if(repairFlag)
{
c = 'n';
}
else
{
c = 'y';
}
}
if(c == 'y' || c == 'Y')
{
if(secretIDList.len)
{
for(i = 1; i < 16; i++)
{
strcpy(secretID.id, appNames[ i - 1 ]);
secretID.len = strlen(secretID.id)+1;
if((i == 15) && (aFlag))
{
pFlag |= NSSS_DESTROY_CONTEXT_F;
}
if(rcode = NSSSRemoveSecret(&ctx, &targetObjDN, pFlag,
&secretID, NULL))
{
printf("\nError [%d] NSSSRemoveSecret\n", rcode);
printf("SecretID[%d] = [%s]\n", i, secretID.id);
Pause();
}
else
{
printf("\nRemoved secret[%d] = [%s] from SS\n", i, secretID.id);
}
haveContext = 0;
opCount++;
}
}
}
else
{
if(rcode = NSSSRemoveSecretStore(&ctx, &targetObjDN, pFlag, NULL))
{
printf("\nError [%d] NSSSRemoveSecretStore\n", rcode);
}
else
{
printf("\nRemoved SecretStore\n");
}
pFlag |= NSSS_DESTROY_CONTEXT_F;
haveContext = 0;
opCount++;
}
}
printf("\n\n\n");
if(!nslFlag)
{
printf("NUMBER OF THE LOOPS = %d\n", j+1);
printf("NUMBER OF OPERATIONS COMPLETED = %d\n", opCount);
}
}
if(aFlag)
{
printf("Do you want to run again? (y/n) ");
c = getch();
putchar(c);
printf("\n\n");
}
else
{
c = 'n';
pFlag |= NSSS_DESTROY_CONTEXT_F;
if(rcode = NSSSRemoveSecretStore(&ctx, &targetObjDN, pFlag, NULL))
{
printf("\nSecretStore LDAP Context Freed\n");
opCount++;
}
}
}
while(c == 'y' || c == 'Y');
if(!nslFlag)
{
endTime = time(NULL);
}
else
{
printf("\nNUMBER OF THE NSL USERS = %d\n", k+1);
printf("TOTAL NUMBER OF OPERATIONS COMPLETED = %d\n", opCount);
printf("NUMBER OF NSL COMPLETED OPERATIONS = %d\n", nslCount);
printf("\nNSL START TIME = [%ld]\n", startTime);
printf("NSL FINISH TIME = [%ld]\n\n", endTime);
}
printf("ELAPSED TIME IN SECONDS = [%ld]\n\n", (endTime - startTime));
ERROR_1:
NSSSGetServiceInformation(&ctx, NULL, (pFlag | NSSS_DESTROY_CONTEXT_F), &gsInfo, NULL);
class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_NLM
NWCallsTerm(NULL);
class='cKeyword'>#endif
if(secretIDList.data)
{
free(secretIDList.data);
}
if(readSecret.data)
{
free(readSecret.data);
}
if(writeSecret.data)
{
free(writeSecret.data);
}
Pause();
return(0);
}
class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_NLM
class='cKeyword'>class='cKeyword'>#ifdef FAST_ALLOC
static int ss_InitSSAllocTag(void)
{
if (!(*ssclAllocTag.tag = (void *)AllocateResourceTag((void *)ssLSSCLModuleHandle,
ssclAllocTag.name, ssclAllocTag.signature)))
{
return(NSSS_E_SYSTEM_FAILURE);
}
else
{
return(NSSS_SUCCESS);
}
}
void *ss_GetAllocTag(void)
{
return (ssLSSCLAllocRTag);
}
class='cKeyword'>#endif
int SSLDAPCLCanIUnload(void)
{
return (NSSS_SUCCESS);
}
void __WATCOM_Prelude(void){}
int ss_GetLDAPCLThreadGroupID(void)
{
return (ssLSSCLThreadGroupID);
}
unsigned int ss_GetLDAPCLModuleHandle(void)
{
return (ssLSSCLModuleHandle);
}
void UnloadLDAPSSCLMain(int sigNbr)
{
int tgid;
sigNbr = sigNbr;
tgid = SetThreadGroupID(ssLSSCLThreadGroupID);
NWCallsTerm(NULL);
SetThreadGroupID(tgid);
}
class='cKeyword'>#endif