CASA/c_micasadk/sscs_win_calls.c
2006-02-01 17:48:29 +00:00

613 lines
13 KiB
C

/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
#include "nsscs_idk.h"
#include "sscs_lldefs.h"
#include "sscs_cache.h"
#define INITGUID
#include <objbase.h>
//#include "walletdef.h"
#include "sscs_win_secretstoredef.h"
static PIVerifiedAccessSS pIAccess = NULL;
static PISecretStore pISecretStore = NULL;
/* ######################################################################## */
/* ############################### STUBS HERE ############################# */
/* ######################################################################## */
/*
* NAME - sscs_CacheOpenSecretStore
*
* DESCRIPTION
*
*
*/
void * sscs_CacheOpenSecretStore
(
void *secretStoreID,
unsigned long ssFlags,
void *reserved
)
{ /* beginning of the call */
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status;
SCHANDLE *hSC = malloc(sizeof(SCHANDLE));
/* ############################## CODE STARTS HERE ############################ */
CoInitialize(NULL);
status = CoCreateInstance(
(REFCLSID)&CLSID_SecretStoreClientService,
NULL,
CLSCTX_SERVER,
(REFIID)&IID_VerifyAccessSS_1,
(void **)&pIAccess);
if (status == NC_STATUS_SUCCESS)
{
status = pIAccess->lpVtbl->QuerySecureInterface(
pIAccess,
GetModuleHandle(NULL),
(PGUID)&IID_SSCS,
(void **)&pISecretStore);
pIAccess->lpVtbl->Release(pIAccess);
}
else if(status == REGDB_E_CLASSNOTREG)
{
OutputDebugString("SecretStore: Class not Registered");
}
else if (status == CLASS_E_NOAGGREGATION )
{
OutputDebugString("SecretStore: Class no aggregation");
}
else if (status == E_NOINTERFACE)
{
OutputDebugString("SecretStore: No Interface");
}
if (status != NC_STATUS_SUCCESS)
{
CoUninitialize();
return 0;
}
status = pISecretStore->lpVtbl->CacheOpenSecretStore (
pISecretStore,
secretStoreID,
ssFlags,
hSC,
NULL
);
if (status != NC_STATUS_SUCCESS)
{
CoUninitialize();
return 0;
}
else
return((void*)hSC);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheOpenSecretStore
/*
* NAME - sscs_CacheCloseSecretStore
*
* DESCRIPTION
*
*
*/
int sscs_CacheCloseSecretStore
(
void *ssHandle,
unsigned long ssFlags,
void *reserved
)
{ /* beginning of the call */
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheCloseSecretStore (
pISecretStore,
0,
ssFlags,
reserved);
pISecretStore->lpVtbl->Release(pISecretStore);
CoUninitialize();
return status;
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheCloseSecretStore
/*
* NAME - sscs_CacheRemoveSecretStore
*
* DESCRIPTION
*
*
*/
int sscs_CacheRemoveSecretStore
(
void *ssHandle,
unsigned long ssFlags,
void *reserved
)
{ /* beginning of the call */
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheRemoveSecretStore (
pISecretStore,
&hSC,
ssFlags,
reserved);
return status;
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheRemoveSecretStore
/*
* NAME - sscs_CacheEnumerateKeychainIDs
*
* DESCRIPTION
*
*
*/
int sscs_CacheEnumerateKeychainIDs
(
void *ssHandle,
unsigned long ssFlags,
SSCS_SRCH_KEY_T *searchKey,
SSCS_KEYCHAIN_ID_LIST_T *kcIDList,
void *reserved
)
{ /* beginning of the call */
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheEnumerateKeyChainIDs (
pISecretStore,
0,
ssFlags,
searchKey,
kcIDList,
reserved);
return status;
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheEnumerateKeychainIDs
/*
* NAME - sscs_CacheAddKeychain
*
* DESCRIPTION
*
*
*/
int sscs_CacheAddKeychain
(
void *ssHandle,
unsigned long ssFlags,
SSCS_KEYCHAIN_ID_T *keyChainID,
void *reserved
)
{ /* beginning of the call */
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheAddKeyChain(
pISecretStore,
0, // session
ssFlags, // flags
keyChainID, // keychainID
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheAddKeychain
/*
* NAME - sscs_CacheRemoveKeychain
*
* DESCRIPTION
*
*
*/
int sscs_CacheRemoveKeychain
(
void *ssHandle,
unsigned long ssFlags,
SSCS_KEYCHAIN_ID_T *keyChainID,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheRemoveKeyChain(
pISecretStore,
0, // session
ssFlags, // flags
keyChainID, // keychainID
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheRemoveKeychain
/*
* NAME - sscs_CacheEnumerateSecretIDs
*
* DESCRIPTION
*
*
*/
int sscs_CacheEnumerateSecretIDs
(
void *ssHandle,
unsigned long ssFlags,
SSCS_KEYCHAIN_ID_T *keyChainID,
SSCS_SRCH_KEY_T *searchKey,
SSCS_SECRET_ID_LIST_T *secretIDList,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheEnumerateSecretIDs(
pISecretStore,
0, // session
ssFlags, // flags
keyChainID, // keychainID
searchKey,
secretIDList,
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheEnumerateSecretIDs
/*
* NAME - sscs_CacheReadSecret
*
* DESCRIPTION
*
*
*/
int sscs_CacheReadSecret
(
void *ssHandle,
unsigned long ssFlags,
SSCS_KEYCHAIN_ID_T *keyChainID,
SSCS_SECRET_ID_T *secredID,
SSCS_SECRET_T *secretData,
SSCS_PASSWORD_T *epPassword,
unsigned int *bytesRequired,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheReadSecret(
pISecretStore,
0, // session
ssFlags, // flags
keyChainID, // keychainID
secredID,
secretData,
epPassword,
bytesRequired,
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheReadSecret
/*
* NAME - sscs_CacheWriteSecret
*
* DESCRIPTION
*
*
*/
int sscs_CacheWriteSecret
(
void *ssHandle,
unsigned long ssFlags,
SSCS_KEYCHAIN_ID_T *keyChainID,
SSCS_SECRET_ID_T *secredID,
SSCS_SECRET_T *secretData,
SSCS_PASSWORD_T *epPassword,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheWriteSecret(
pISecretStore,
0, // session
ssFlags, // flags
keyChainID, // keychainID
secredID,
secretData,
epPassword,
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheWriteSecret
/*
* NAME - sscs_CacheRemoveSecret
*
* DESCRIPTION
*
*
*/
int sscs_CacheRemoveSecret
(
void *ssHandle,
unsigned long ssFlags,
SSCS_KEYCHAIN_ID_T *keyChainID,
SSCS_SECRET_ID_T *secredID,
SSCS_PASSWORD_T *epPassword,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheRemoveSecret(
pISecretStore,
0, // session
ssFlags, // flags
keyChainID, // keychainID
secredID,
epPassword,
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheRemoveSecret
/*
* NAME - sscs_CacheGetSecretStoreInfo
*
* DESCRIPTION
*
*
*/
int sscs_CacheGetSecretStoreInfo
(
void *ssHandle,
unsigned long ssFlags,
SSCS_SECRETSTORE_INFO_T *ssInfo,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheGetSecretStoreInfo(
pISecretStore,
0, // session
ssFlags, // flags
ssInfo, //
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_CacheGetSecretStoreInfo
/*
* NAME - sscs_GetKeychainInfo
*
* DESCRIPTION
*
*
*/
int sscs_GetKeychainInfo
(
void *ssHandle,
unsigned long ssFlags,
SSCS_KEYCHAIN_ID_T *keyChainID,
SSCS_KEYCHAIN_INFO_T *kcInfo,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->CacheGetKeychainInfo(
pISecretStore,
0, // session
ssFlags, // flags
keyChainID, //
kcInfo,
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_GetKeychainInfo
/*
* NAME - sscs_LockCache
*
* DESCRIPTION
*
*
*/
int sscs_LockCache
(
void *ssHandle,
unsigned long ssFlags,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->LockCache(
pISecretStore,
0, // session
ssFlags, // flags
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_LockCache
/*
* NAME - sscs_UnlockCache
*
* DESCRIPTION
*
*
*/
int sscs_UnlockCache
(
void *ssHandle,
unsigned long ssFlags,
SSCS_PASSCODE_T *passcode,
void *reserved
)
{
/* ########################## DECLARATIONS START HERE ######################### */
NCSTATUS status = 0;
SCHANDLE hSC = (SCHANDLE)ssHandle;
/* ############################## CODE STARTS HERE ############################ */
status = pISecretStore->lpVtbl->UnLockCache(
pISecretStore,
0, // session
ssFlags, // flags
passcode,
reserved);
return(status);
/* ############################### CODE ENDS HERE ############################# */
} //* sscs_UnlockCache