class='cKeyword'>class='cKeyword'>#ifdef N_PLAT_NLM
class='cKeyword'>class='cKeyword'>#ifndef UCHAR
class='cKeyword'>#define UCHAR unsigned class='cKeyword'>char
class='cKeyword'>#endif
class='cKeyword'>#endif
class='cKeyword'>#include <stdio.h>
class='cKeyword'>#include <stdlib.h>
class='cKeyword'>#include <string.h>
class='cKeyword'>class='cKeyword'>#ifndef N_PLAT_NLM
class='cKeyword'>#include <conio.h>
class='cKeyword'>#else
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_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 <ldap.h>
class='cKeyword'>#include <ldap_ssl.h>
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;
unsigned long version = LDAP_VERSION3;
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 nbstst nsd19.provo.novell.com 636 cn=admin,o=novell password myKey.der\n\n");
printf("Enter the LDAP Server DNS Name/IP Address: ");
class='cKeyword'>class='cKeyword'>#ifdef _DEBUG
strcpy(ldapBindInfo->lHostName, "caspian.provo.novell.com");
class='cKeyword'>#else
gets(ldapBindInfo->lHostName);
if(strlen(ldapBindInfo->lHostName) == 0)
{
printf("Server Name required!!\n");
return(NSSS_E_INVALID_PARAM);
}
class='cKeyword'>#endif
printf("LDAP Host = [%s]\n", ldapBindInfo->lHostName);
printf( "\n" );
memset(portStr, 0, 256);
printf("Enter LDAP Port Number (636-default): ");
class='cKeyword'>class='cKeyword'>#ifdef _DEBUG
strcpy(portStr, "636");
class='cKeyword'>#else
gets(portStr);
class='cKeyword'>#endif
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\"): ");
class='cKeyword'>class='cKeyword'>#ifdef _DEBUG
strcpy(ctx->callerDN.id, "cn=admin, o=novell");
class='cKeyword'>#else
gets(ctx->callerDN.id);
class='cKeyword'>#endif
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\"): ");
class='cKeyword'>class='cKeyword'>#ifdef _DEBUG
strcpy(targetDN, "cn=admin, o=novell");
class='cKeyword'>#else
gets(targetDN);
class='cKeyword'>#endif
if(strlen(targetDN) == 0)
{
strcpy(targetDN, ctx->callerDN.id);
}
printf("Target DN = [%s]\n", targetDN);
printf( "\n" );
printf("Enter the LDAP Login Password: ");
class='cKeyword'>class='cKeyword'>#ifdef _DEBUG
strcpy(ldapBindInfo->loginPword, "novell");
class='cKeyword'>#else
gets(ldapBindInfo->loginPword);
class='cKeyword'>#endif
printf("Enter Root Certificate File Name (\"c:\\TrustedRootCert.der\"-default): ");
class='cKeyword'>class='cKeyword'>#ifdef _DEBUG
strcpy(ldapBindInfo->trustedRootCert, "c:\\caspiantrc.der");
class='cKeyword'>#else
gets(ldapBindInfo->trustedRootCert);
class='cKeyword'>#endif
printf( "\n" );
if(strlen(ldapBindInfo->trustedRootCert) == 0)
{
strcpy(ldapBindInfo->trustedRootCert, "c:\\TrustedRootCert.der");
}
printf("Trusted Root Certificate = [%s]\n", ldapBindInfo->trustedRootCert);
if(ldap_set_option( NULL, LDAP_OPT_PROTOCOL_VERSION, &version))
{
printf("Bind Failed!!: [%d]\n", rc);
return(NSSS_E_SYSTEM_FAILURE);
}
}
void 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;
SS_SECRET_T readSecret = {0}, writeSecret = {0};
int exCount = 1, i, j, remLock = 0, unlock = 0,
master = 0, k, rCount = 1;
long opCount, bufSize = strlen(passwordSS[0])+1;
unsigned long startTime, endTime, pFlag = 0L, count = 0;
int c, deInitFlag = FALSE;
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, "bBmMsSc=C=r=R=?hH")) != -1)
{
switch(c)
{
class='cKeyword'>case 'b':
class='cKeyword'>case 'B':
bufSize = NSSS_MAX_SECRET_BUF_LEN;
class='cKeyword'>break;
class='cKeyword'>case 'm':
class='cKeyword'>case 'M':
bufSize = NSSS_MID_SECRET_BUF_LEN;
class='cKeyword'>break;
class='cKeyword'>case 's':
class='cKeyword'>case 'S':
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: nbstst [/m]|[/b][/s /c=[count] /r=[rcount] | /? | /h ]\n");
printf("\tOptions: [ /m | /M ] for 4k Secret Buffer Size.\n");
printf("\tOptions: [ /b | /B ] for 59k Secret Buffer Size.\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: nbstst /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");
/* 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;
}
ctx.bindInfo = NULL;
ctx.flags = NSSS_LDAP_CTX_F | NSSS_CONTEXT_INITIALIZED_F | NSSS_INIT_LDAP_SS_HANDLE_F;
ctx.handles = NULL;
targetObjDN.len = strlen(targetObjDN.id)+1;
do
{
if(deInitFlag)
{
ctx.flags = NSSS_LDAP_CTX_F | NSSS_CONTEXT_INITIALIZED_F | NSSS_INIT_LDAP_SS_HANDLE_F;
deInitFlag = FALSE;
}
else
{
ctx.flags |= (NSSS_LDAP_CTX_F | NSSS_CONTEXT_INITIALIZED_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]);
writeSecret.len = strlen(writeSecret.data) + 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++;
}
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
{
printf("\nNumber of Secrets = [%d]\nRaw Secret ID Buffer from SS [%s]\n", count,
(class='cKeyword'>char*)secretIDList.data);
}
opCount++;
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
{
c = 'y';
}
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;
strcpy(secretID.id, nameStr);
secretID.len = strlen(secretID.id)+1;
rInfo.statFlags = 0;
rcode = NSSSReadSecret(&ctx, &targetObjDN, pFlag,
NULL, &rInfo, &secretID, &readSecret, NULL);
if(rcode == NSSS_E_NDS_PWORD_CHANGED)
{
unlock = 1;
printf("Status Flags = [0x%x]\n", rInfo.statFlags);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
Pause();
opCount++;
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();
opCount++;
continue;
}
else
{
master = 0;
}
}
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++;
continue;
}
else
{
master = 1;
}
}
}
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));
}
}
opCount++;
}
else
{
printf("Read Secret Failed!! = [%d]\n", rcode);
PrintFlags("Secret Flags:\n", rInfo.statFlags);
printf("Status Flags = [0x%x]\n", rInfo.statFlags);
Pause();
opCount++;
}
nameStr = strtok(NULL, "*");
}
}
}
}
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;
}
opCount++;
}
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)
{
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, "*");
}
}
}
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
{
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)
{
ctx.flags |= NSSS_DEINIT_LDAP_SS_HANDLE_F;
deInitFlag = TRUE;
}
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);
opCount++;
}
}
}
}
else
{
ctx.flags |= NSSS_DEINIT_LDAP_SS_HANDLE_F;
deInitFlag = TRUE;
if(rcode = NSSSRemoveSecretStore(&ctx, &targetObjDN, pFlag, NULL))
{
printf("\nError [%d] NSSSRemoveSecretStore\n", rcode);
}
else
{
printf("\nRemoved SecretStore\n");
opCount++;
}
}
}
printf("\n\n\n");
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';
}
}
while(c == 'y' || c == 'Y');
endTime = time(NULL);
printf("ELAPSED TIME IN SECONDS = [%ld]\n\n", (endTime - startTime));
ERROR_1:
ctx.flags |= NSSS_DEINIT_LDAP_SS_HANDLE_F;
NSSSGetServiceInformation(&ctx, NULL, pFlag, &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();
}
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