Moving micasa 1.5 trunk to Novell forge.
This commit is contained in:
374
c_test/displayCache/displaycache.c
Normal file
374
c_test/displayCache/displaycache.c
Normal file
@@ -0,0 +1,374 @@
|
||||
/**************************************************************************
|
||||
%name: displaycache.c %
|
||||
%version: 3 %
|
||||
%date_modified: Fri May 20 15:09:50 2005 %
|
||||
|
||||
**************************************************************************/
|
||||
|
||||
|
||||
/***************************************************************
|
||||
*** This code is available at "www.developer.novell.com/ndk/ **
|
||||
***************************************************************/
|
||||
|
||||
|
||||
/* Sample code for C Language SecretStore Client Service APIs */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <micasa_mgmd.h>
|
||||
#include <micasa.h>
|
||||
|
||||
|
||||
#define GSS_BLD_STR "4.0.1"
|
||||
|
||||
#define SSCS_BINARY_TYPE_F 0x00000004L
|
||||
static char SSCS_APP_SECRET[] = {'S','S','_','A','p','p', 0};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/*
|
||||
* Global data
|
||||
*/
|
||||
int optErr = 1; // if error message should be printed
|
||||
int optIdx = 1; // index into parent argv vector
|
||||
int optionString = 1; // character checked for validity
|
||||
char *optArg = NULL; // argument associated with option
|
||||
|
||||
#define BADCHAR (int)'?'
|
||||
#define ERRMSG ""
|
||||
|
||||
/* interactive flag */
|
||||
static int aFlag = 1;
|
||||
|
||||
|
||||
void Pause()
|
||||
{ /* beginning of the call */
|
||||
/* ############################## CODE STARTS HERE ############################ */
|
||||
|
||||
if(aFlag)
|
||||
{
|
||||
}
|
||||
/* ########################## CODE ENDS HERE ######################### */
|
||||
} /* end of Pause */
|
||||
|
||||
|
||||
|
||||
/* */
|
||||
/*
|
||||
* NAME - main
|
||||
*
|
||||
* DESCRIPTION
|
||||
* SecretStore SharedSecret test program.
|
||||
*
|
||||
*/
|
||||
void main
|
||||
(
|
||||
int argc,
|
||||
char **argv
|
||||
)
|
||||
{ /* beginning of the call */
|
||||
/* ########################## DECLARATIONS START HERE ######################### */
|
||||
|
||||
SSCS_SECRETSTORE_T ssid = {0};
|
||||
SSCS_SECRETSTORE_INFO_T ssInfo = {0};
|
||||
SSCS_KEYCHAIN_ID_T keyChainID = {0};
|
||||
|
||||
SSCS_READEXT_T rInfo = {0};
|
||||
void *ssContext = NULL;
|
||||
|
||||
int appTstFlag = 0, multiCredTstFlag = 0, multiEntryTstFlag = 0;
|
||||
char *secret;
|
||||
|
||||
|
||||
static char multiEntryCredSet[] = {'S','h','a','r','e','d','S','e','c','r','e','t',' ','M','u','l','t','i','p','l','e',' ','E','n','t','r','y',' ','C','r','e','d','S','e','t',' ','T','e','s','t',0};
|
||||
|
||||
int rcode = NSSCS_SUCCESS;
|
||||
int exCount = 1, i, j, remLock = 0, unlock = 0,
|
||||
master = 0, rCount = 1;
|
||||
long opCount, bufSize = NSSCS_MAX_SECRET_BUF_LEN;
|
||||
unsigned long startTime, endTime, pFlag = 0L, count = 0;
|
||||
|
||||
SSCS_SECRET_ID_T secretID = {0};
|
||||
|
||||
// SharedSecret data
|
||||
void *secretHandle; // handle for passing to functions
|
||||
SSCS_SH_SECRET_ID_T shSecret; // SharedSecret struct
|
||||
char *key = NULL;
|
||||
unsigned char *value = NULL;
|
||||
int kLen = 0;
|
||||
int vLen = 0;
|
||||
|
||||
SSCS_SH_SECRET_ID_LIST_T shSecIDList = {0};
|
||||
|
||||
|
||||
SSCS_BASIC_CREDENTIAL credential = {0};
|
||||
SSCS_SECRET_ID_T appSecretId = {0};
|
||||
SSCS_SECRET_ID_T sharedSecretId = {0};
|
||||
|
||||
SSCS_EXT_T ext = {0};
|
||||
|
||||
|
||||
|
||||
/* ############################## CODE STARTS HERE ############################ */
|
||||
|
||||
if((secret = (char *)malloc(NSSCS_MAX_SECRET_BUF_LEN)) == NULL)
|
||||
{
|
||||
|
||||
printf("\nSecret Buffer Malloc Failed!!!\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if((value = (unsigned char *)malloc(NSSCS_MAX_SECRET_BUF_LEN)) == NULL)
|
||||
{
|
||||
|
||||
printf("\nValue Buffer Malloc Failed!!!\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if((key = (char *)malloc(NSSCS_MAX_SECRET_ID_LEN)) == NULL)
|
||||
{
|
||||
|
||||
printf("\nKey Buffer Malloc Failed!!!\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
memset(key, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
memset(value, 0, NSSCS_MAX_SECRET_BUF_LEN);
|
||||
memset(secret, 0, NSSCS_MAX_SECRET_BUF_LEN);
|
||||
|
||||
//printf("\nSecretStore Client Service NDK Test Program version %s ...\n\n", GSS_BLD_STR);
|
||||
|
||||
// Initialize the SID to the user ID if the owner
|
||||
|
||||
strcpy(ssid.ssName, "testuser");
|
||||
ssid.version = NSSCS_VERSION_NUMBER;
|
||||
|
||||
// printf("Execution Count Set to: [%d]\n", exCount);
|
||||
// printf("Initializing...\n");
|
||||
|
||||
startTime = time(NULL);
|
||||
// printf("Done...\n");
|
||||
// Pause();
|
||||
|
||||
|
||||
if((ssContext = miCASAOpenSecretStoreCache(&ssid, 0, NULL)) == NULL)
|
||||
{
|
||||
rcode = NSSCS_E_CANT_OPEN_CLIENT_CACHE;
|
||||
printf("\nCache Failed to Open!!!\n");
|
||||
goto ERROR_1;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\nCache Opened...\n");
|
||||
}
|
||||
|
||||
keyChainID.len = SSCS_S_KC_ID_CHARS;
|
||||
strcpy(keyChainID.keychainID, SSCS_SESSION_KEY_CHAIN_ID);
|
||||
|
||||
for(j = 0, opCount = 0; j < exCount; j++)
|
||||
{
|
||||
|
||||
|
||||
// ***************************************************
|
||||
// ********* Enumerting Secrets *********
|
||||
// ***************************************************
|
||||
|
||||
|
||||
printf("\nEnumerating the Secrets ....\r\n ");
|
||||
|
||||
shSecIDList.enumHandle = 1;
|
||||
shSecIDList.returnedIDs = 20;
|
||||
shSecIDList.secIDList = (SSCS_SH_SECRET_ID_T *)malloc(20 * sizeof(SSCS_SH_SECRET_ID_T));
|
||||
if(shSecIDList.secIDList)
|
||||
{
|
||||
memset(shSecIDList.secIDList, 0 , 20 * sizeof(SSCS_SH_SECRET_ID_T));
|
||||
do
|
||||
{
|
||||
if((rcode = miCASAEnumerateSecretIDs(ssContext, &keyChainID, 0, NULL, &shSecIDList, NULL)) == NSSCS_SUCCESS)
|
||||
{
|
||||
if (shSecIDList.returnedIDs > 0)
|
||||
{
|
||||
for(i = 0; i < (int)shSecIDList.returnedIDs; i++)
|
||||
{
|
||||
if(shSecIDList.secIDList[i].type & SSCS_APPLICATION_TYPE_F)
|
||||
{
|
||||
printf("\nSS_App:\r\n");
|
||||
}
|
||||
else if(shSecIDList.secIDList[i].type & SSCS_CREDENTIAL_TYPE_F)
|
||||
{
|
||||
printf("\nSS_CredSet:\r\n");
|
||||
}
|
||||
else if(shSecIDList.secIDList[i].type & SSCS_BINARY_TYPE_F)
|
||||
{
|
||||
printf("\nSS_Binary:\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n Unsupported SecretID type .... ");
|
||||
}
|
||||
|
||||
//printf("\nLength of the SecretID [%ld]\n", shSecIDList.secIDList[i].len);
|
||||
printf("SecretID [%s]\n", shSecIDList.secIDList[i].name);
|
||||
|
||||
if(shSecIDList.secIDList[i].type & SSCS_CREDENTIAL_TYPE_F)
|
||||
// dump the values
|
||||
{
|
||||
shSecret.type = SSCS_CREDENTIAL_TYPE_F;
|
||||
//strcpy(shSecret.name, shSecIDList.secIDList[i].name);
|
||||
strncpy(shSecret.name, (&(shSecIDList.secIDList[i]).name[11]), shSecIDList.secIDList[i].len -11);
|
||||
|
||||
shSecret.len = strlen(shSecret.name)+1;
|
||||
|
||||
secretHandle = miCASA_CreateSHSHandle(); // create a new secretHandle
|
||||
if(!secretHandle)
|
||||
{
|
||||
goto ERROR_1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
rcode = miCASAReadSecret(ssContext, &keyChainID, 0, secretHandle, &shSecret, NULL, &rInfo, NULL);
|
||||
|
||||
if(rcode != NSSCS_SUCCESS)
|
||||
{
|
||||
printf("\nmiCASAReadSecret returned [%d] when reading [%s]\n\n", rcode, multiEntryCredSet);
|
||||
Pause();
|
||||
goto ERROR_1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(!(rcode = miCASA_GetNextSHSEntry(1, secretHandle, &kLen, key, &vLen, value)))
|
||||
{
|
||||
while(rcode == NSSCS_SUCCESS)
|
||||
{
|
||||
if(0 == strlen(key))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
strcpy(secret, key);
|
||||
strcat(secret, "=");
|
||||
strcat(secret, (char *)value);
|
||||
printf("\t [%s]=[%s]\n", key, value);
|
||||
|
||||
// clear the buffers
|
||||
memset(key, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
memset(value, 0, NSSCS_MAX_SECRET_BUF_LEN);
|
||||
memset(secret, 0, NSSCS_MAX_SECRET_BUF_LEN);
|
||||
|
||||
rcode = miCASA_GetNextSHSEntry(0, secretHandle, &kLen, key, &vLen, value);
|
||||
}
|
||||
}
|
||||
|
||||
miCASA_DestroySHSHandle(secretHandle); // destroy the secretHandle
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("No secrets found in cache\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Enumerate secrets returned %d\r\n", rcode);
|
||||
// resize the array based on the count returned because the cache engine below
|
||||
// does not support iterations
|
||||
if(rcode == NSSCS_E_ENUM_BUFF_TOO_SHORT)
|
||||
{
|
||||
shSecIDList.enumHandle = 1;
|
||||
free(shSecIDList.secIDList);
|
||||
shSecIDList.secIDList = (SSCS_SH_SECRET_ID_T *)malloc(shSecIDList.returnedIDs * sizeof(SSCS_SH_SECRET_ID_T));
|
||||
}
|
||||
|
||||
if((rcode = miCASAEnumerateSecretIDs(ssContext, &keyChainID, 0, NULL, &shSecIDList, NULL)) == NSSCS_SUCCESS)
|
||||
{
|
||||
for(i = 0; i < (int)shSecIDList.returnedIDs; i++)
|
||||
{
|
||||
if(shSecIDList.secIDList[i].type & SSCS_APPLICATION_TYPE_F)
|
||||
{
|
||||
printf("\nSS_App:\r\n");
|
||||
}
|
||||
else if(shSecIDList.secIDList[i].type & SSCS_CREDENTIAL_TYPE_F)
|
||||
{
|
||||
printf("\nSS_CredSet:\r\n");
|
||||
}
|
||||
else if(shSecIDList.secIDList[i].type & SSCS_BINARY_TYPE_F)
|
||||
{
|
||||
printf("\nSS_Binary:\r\n ");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\n Unsupported SecretID type .... ");
|
||||
}
|
||||
|
||||
//printf("Length of the SecretID [%ld]\n", shSecIDList.secIDList[i].len);
|
||||
printf("SecretID [%s]\n", shSecIDList.secIDList[i].name);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Enumerate secrets returned %d\r\n", rcode);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
while(shSecIDList.enumHandle);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("\nEnum Malloc fialed .... ");
|
||||
}
|
||||
|
||||
|
||||
|
||||
} /* end for */
|
||||
|
||||
endTime = time(NULL);
|
||||
|
||||
/* ########################## CODE EXITS HERE ##################### */
|
||||
|
||||
ERROR_1:
|
||||
|
||||
if(secret)
|
||||
{
|
||||
memset(secret, 0, NSSCS_MAX_SECRET_BUF_LEN);
|
||||
free(secret);
|
||||
}
|
||||
|
||||
if(value)
|
||||
{
|
||||
memset(value, 0, NSSCS_MAX_SECRET_BUF_LEN);
|
||||
free(value);
|
||||
}
|
||||
|
||||
if(key)
|
||||
{
|
||||
memset(key, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
free(key);
|
||||
}
|
||||
|
||||
|
||||
if(ssContext)
|
||||
{
|
||||
rcode = miCASACloseSecretStoreCache(ssContext, 0, NULL);
|
||||
}
|
||||
|
||||
if(shSecIDList.secIDList)
|
||||
{
|
||||
free(shSecIDList.secIDList);
|
||||
}
|
||||
|
||||
Pause();
|
||||
|
||||
exit(rcode);
|
||||
|
||||
|
||||
/* ########################## CODE ENDS HERE ##################### */
|
||||
}
|
||||
Reference in New Issue
Block a user