authenticationservices/authenticationserver/source/server/authdb.cpp
branchRCL_3
changeset 62 a71299154b21
parent 61 641f389e9157
child 63 94225563cd41
--- a/authenticationservices/authenticationserver/source/server/authdb.cpp	Tue Aug 31 17:00:08 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,937 +0,0 @@
-/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-* CAuthDb Authentication server data store implementation
-*
-*/
-
-
-/**
- @file 
-*/
-
-#include "authserver_impl.h"
-
-using namespace AuthServer;
-
-// The number of decimal digits needed to represent a 32 bit unsigned integer
-const TInt KUint32Digits = 10;
-
-// -------- DB helper functions --------
-
-
-static void RollbackDb(TAny* aPtr)
-/**
-	Implements the TCleanupOperation prototype.  This
-	function is used to rollback a database transaction
-	if a leave occurs before it is committed.
-	
-	@param	aPtr			Pointer to RDbDatabase object
-							to roll back.
-	@see CleanupRollbackPushL
- */
-	{
-	RDbDatabase* db = static_cast<RDbDatabase*>(aPtr);
-	if (db->InTransaction())
-		db->Rollback();
-	}
-
-
-inline void CleanupRollbackPushL(RDbDatabase& aDb)
-/**
-	Puts the supplied database on the cleanup stack.
-	The database is rolled back if a leave occurs.
-	
-	If a leave does not occur then the supplied database
-	should be committed.  Do not call CleanupStack::PopAndDestroy
-	to delete this object.
-	
-	@param	aDb				Database to roll back if
-							a leave occurs.
- */
-	{
-	CleanupStack::PushL(TCleanupItem(RollbackDb, &aDb));
-	}
-
-
-static void StartTransactionLC(RDbDatabase& aDb)
-/**
-	Helper function starts a database transaction and
-	puts a rollback cleanup item on the cleanup stack.
-	
-	@param	aDb				Database to start transaction on.
-	@see CommitTransactionLD
- */
-	{
-	User::LeaveIfError(aDb.Begin());
-	CleanupRollbackPushL(aDb);
-	}
-
-
-static void CommitTransactionLD(RDbDatabase& aDb)
-/**
-	Complements StartTransactionLC by removing the
-	the rollback cleanup item from the cleanup stack
-	and committing the database.
-	
-	@see StartTransactionLC
- */
-	{
-	CleanupStack::Pop(&aDb);
-	User::LeaveIfError(aDb.Commit());
-	}
-
-
-// -------- factory functions --------
-
-
-CAuthDb2* CAuthDb2::NewL(RFs& aFs)
-/**
-	Factory function allocates a new instance of CAuthDb.
-	The database file is created if it does not already exist.
-	
-	@return					New instance of CAuthDb.
- */
-	{
-	CAuthDb2* self = CAuthDb2::NewLC(aFs);
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-
-CAuthDb2* CAuthDb2::NewLC(RFs& aFs)
-/**
-	Factory function allocates new instance of CAuthDb2,
-	putting it on the cleanup stack.  The database file
-	is created if it does not already exist.
-	
-	@return					New instance of CAuthDb.
- */
-	{
-	CAuthDb2* self = new(ELeave) CAuthDb2;
-	CleanupStack::PushL(self);
-	self->ConstructL(aFs);
-	return self;
-	}
-
-
-void CAuthDb2::ConstructL(RFs& aFs)
-/**
-	This second-phase constructor opens the
-	database file, creating it if it does not
-	already exist.
- */
-	{
-	TInt r;
-	TFileName dbName(KDbName);
-	dbName[0] = RFs::GetSystemDriveChar();
-
-	r = OpenDbFileL(aFs, dbName);
-	
-	if (r == KErrNone)
-		{
-		if (! iAuthDbFile.IsDamaged() || iAuthDbFile.Recover() == KErrNone)
-			return;
-		}
-	
-	User::LeaveIfError(iAuthDbFile.Replace(aFs, dbName));
-	iIsDbOpen = ETrue;
-	StartTransactionLC(iAuthDbFile);
-	
-	// These commands are stored as narrow instead of wide
-	// text to save c. 500 bytes in decompressed exe size.
-	// The non-XIP EXE size is almost the same because DEFLATE
-	// is used on the ELF file.
-	
-	static const TText8*const cmds[] =
-		{
-		_S8("CREATE TABLE Identities (idName COUNTER, IdentityId UNSIGNED INTEGER NOT NULL, Description VARCHAR(255) NOT NULL)"),
-		_S8("CREATE UNIQUE INDEX idIndex ON Identities (idName)"),
-		_S8("CREATE UNIQUE INDEX identityIdx ON Identities (IdentityId DESC)"),
-		_S8("CREATE TABLE Prefs (PluginType UNSIGNED INTEGER NOT NULL, PluginId UNSIGNED INTEGER NOT NULL)"),
-		_S8("CREATE UNIQUE INDEX typeIdx ON Prefs (PluginType ASC)"),
-		_S8("CREATE TABLE TrainedPlugins (IdentityId UNSIGNED INTEGER NOT NULL, PluginId UNSIGNED INTEGER NOT NULL, TransientKey LONG VARBINARY NOT NULL)"),
-		_S8("CREATE UNIQUE INDEX identityPluginIdx ON TrainedPlugins (IdentityId DESC, PluginId ASC)")
-		};
-	
-	const TInt elemCount = sizeof(cmds) / sizeof(cmds[0]);
-	TBuf<140> cmd;
-	for (TInt i = 0; i < elemCount; ++i)
-		{
-		TPtrC8 cmd8(cmds[i]);
-		cmd.Copy(cmd8);
-		User::LeaveIfError(iAuthDbFile.Execute(cmd));
-		}
-
-	CommitTransactionLD(iAuthDbFile);
-	}
-
-
-CAuthDb2::~CAuthDb2()
-/**
-	Close the database file used by this object.
- */
-	{
-	CloseDbFile();
-	}
-
-TInt CAuthDb2::OpenDbFileL(RFs& aFs, const TFileName& aDbName)
-	{
-	
-	TInt r(0);
-	if(!iIsDbOpen)
-		{
-		r = iAuthDbFile.Open(aFs, aDbName);
-		if(KErrNone == r)
-			{
-			iIsDbOpen = ETrue;
-			}
-		else if (KErrNotFound != r)
-			{
-			User::Leave(r);
-			}
-		}
-	return r;
-	}
-
-void CAuthDb2::CloseDbFile()
-	{
-	if(iIsDbOpen)
-		{
-		RollbackDb(&iAuthDbFile);
-		if(iAuthDbFile.IsDamaged())
-			{
-			iAuthDbFile.Recover();
-			}
-		iAuthDbFile.Close();
-		iIsDbOpen = EFalse;
-		}
-	}
-
-// -------- identities --------
-
-
-void CAuthDb2::AddIdentityWithTrainedPluginL(
-	TIdentityId aIdentityId, const TDesC& aDesc,
-	const CTransientKeyInfo& aTransKeyInfo)
-/**
-	Adds an identity and trains a plugin for it in a single
-	atomic operation.
-	
-	@param	aIdentityId		New identity.
-	@param	aDesc			Identity's description.  This must
-							have no more than KMaxDescLen characters.
-	@param	aTransKeyInfo	A transient key which trains this identity
-							for a plugin.
-	@leave	KErrAuthServIdentityAlreadyExists  The supplied identity
-							is already in the database.
- */
-	{
-	StartTransactionLC(iAuthDbFile);
-	
-	AddIdentityL(aIdentityId, aDesc);
-	
-	SetTrainedPluginL(aIdentityId, aTransKeyInfo.PluginId(), aTransKeyInfo);
-	
-	CommitTransactionLD(iAuthDbFile);
-	}
-
-
-void CAuthDb2::AddIdentityL(TIdentityId aIdentityId, const TDesC& aDesc)
-/**
-	Add the supplied identity to the database.
-	
-	@param	aIdentityId		New identity.
-	@param	aDesc			Identity's description.  This must
-							have no more than KMaxDescLen characters.
-	@leave	KErrAuthServDescTooLong The supplied description is more than
-							255 characters.
-	@leave	KErrAuthServIdentityAlreadyExists  The supplied identity
-							is already in the database.
- */
-	{
-	if (aDesc.Length() > KMaxDescLen)
-		User::Leave(KErrAuthServDescTooLong);
-
-	RDbTable table;
-	
-	// EUpdatable instead of EInsertOnly so can navigate to any
-	// existing row.
-	if (FindIdentityLC(table, RDbView::EUpdatable, aIdentityId))
-		User::Leave(KErrAuthServIdentityAlreadyExists);
-	
-	table.InsertL();		// start automatic transaction
-	table.SetColL(KIdentitiesIdentityIdCol, aIdentityId);
-	table.SetColL(KIdentitiesDescCol, aDesc);
-	table.PutL();			// end automatic transaction
-	
-	CleanupStack::PopAndDestroy(&table);
-	}
-
-
-void CAuthDb2::RemoveIdentityL(TIdentityId aIdentityId)
-/**
-	Remove the supplied identity from the auth server's database.
-	Any trained entries for the supplied identity are also removed.
-	All updates to the database happen within a single transaction.
-
-	@param	aIdentityId		Identity to remove from database;
-	@leave	KErrAuthServIdentityNotFound The supplied identity could
-							not be found in the database.
- */
-	{
-	StartTransactionLC(iAuthDbFile);
-	
-	RDbTable table;
-	FindExistingIdentityLC(table, RDbView::EUpdatable, aIdentityId);
-	table.DeleteL();
-	CleanupStack::PopAndDestroy(&table);
-
-	// remove each training record for this identity
-	_LIT(KDelTrainFmt, "DELETE FROM TrainedPlugins WHERE IdentityId=%u");
-	TBuf<(46 - 2) + 10> bufCmd;
-	bufCmd.Format(KDelTrainFmt, aIdentityId);
-	iAuthDbFile.Execute(bufCmd);
-	
-	CommitTransactionLD(iAuthDbFile);
-	}
-
-
-TInt CAuthDb2::NumIdentitiesL() 
- /**
-	Retrieve the number of identities in the database.
-	@return the number of identities in the database.
-  */
-	{
-	TInt result = 0;
-	RDbTable table;
-	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdentitiesIndex);
-	result = table.CountL();
-	CleanupStack::PopAndDestroy(&table);
-	return result;
-	}
-  
-void CAuthDb2::IdentitiesL(RArray<TIdentityId>& aResults)
-/**
-	Populate the supplied array with the currently
-	registered identities.
-	
-	@param	aResults		On success this array is populated
-							with the currently registered identities.
-							Any items which were in the array when
-							this function is called are removed.  On
-							failure this array is emptied so the caller
-							does not have to place it on the cleanup stack.
- */
-	{
-	aResults.Reset();
-	CleanupClosePushL(aResults);
-	
-	RDbTable table;
-	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdIndexNum);
-	while (table.NextL())
-		{
-		table.GetL();
-		aResults.AppendL(table.ColUint32(KIdentitiesIdentityIdCol));
-		}
-	
-	CleanupStack::PopAndDestroy(&table);
-	CleanupStack::Pop(&aResults);
-	}
-
-void CAuthDb2::IdentitiesWithDescriptionL(RIdAndStringArray& aList)
-/**
-	Populate the supplied array with the currently
-	registered identities and descriptions.
-	
-	@param	aList   		On success this array is populated
-							with the currently registered identities.
-							Any items which were in the array when
-							this function is called are removed.  On
-							failure this array is emptied so the caller
-							does not have to place it on the cleanup stack.
- */
-	{
-	aList.Reset();
-	CleanupClosePushL(aList);
-	
-	RDbTable table;
-	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdentitiesIndex);
-	while (table.NextL())
-		{
-		table.GetL();
-		CIdAndString* id =
-		  CIdAndString::NewLC(table.ColUint32(KIdentitiesIdentityIdCol),
-							  table.ColDes(KIdentitiesDescCol));
-		aList.AppendL(id);
-		CleanupStack::Pop(id);
-		}
-	
-	CleanupStack::PopAndDestroy(&table);
-	CleanupStack::Pop(&aList);
-	}
-
-HBufC* CAuthDb2::DescriptionL(TIdentityId aIdentityId)
-/**
-	Allocate a descriptor containing the supplied identity's
-	description.
-	
-	@param	aIdentityId		Identity whose description is returned.
-	@return					Newly-allocated descriptor containing the
-							identity's description.  The client must
-							free this object.
-	@leave	KErrAuthServIdentityNotFound The supplied identity could
-							not be found in the database.
- */
-	{
-	RDbTable table;
-	FindExistingIdentityLC(table, RDbView::EReadOnly, aIdentityId);
-	
-	table.GetL();
-	HBufC* retDesc = table.ColDes(KIdentitiesDescCol).AllocL();
-	
-	CleanupStack::PopAndDestroy(&table);
-	return retDesc;
-	}
-
-
-
-void CAuthDb2::SetDescriptionL(TIdentityId aIdentityId, const TDesC& aDesc)
-/**
-	Update an identity's description.
-	
-	@param	aIdentityId		Identity to update.
-	@param	aDesc			New description text.  This must have
-							no more than KMaxDescLen characters.
-	@leave	KErrAuthServIdentityNotFound The supplied identity could
-							not be found in the database.
- */
-	{
-	if (aDesc.Length() > KMaxDescLen)
-		User::Leave(KErrAuthServDescTooLong);
-	
-	RDbTable table;
-	FindExistingIdentityLC(table, RDbView::EUpdatable, aIdentityId);
-	
-	table.UpdateL();			// start automatic transaction
-	table.SetColL(KIdentitiesDescCol, aDesc);
-	table.PutL();				// end automatic transaction
-	
-	CleanupStack::PopAndDestroy(&table);
-	}
-
-
-void CAuthDb2::FindExistingIdentityLC(
-	RDbTable& aTable, RDbRowSet::TAccess aAccess, TIdentityId aIdentityId)
-/**
-	Find the supplied identity and navigate to it.
-	On success, the table handle is on the cleanup stack.
-	
-	@param	aTable			Caller's table handle.
-	@param	aAccess			Mode in which to open the handle.
-	@param	aIdentityId		Identity to navigate to.
-	@leave	KErrAuthServIdentityNotFound The supplied identity could
-							not be found.
- */
-	{
-	TBool found = FindIdentityLC(aTable, aAccess, aIdentityId);
-	if (! found)
-		User::Leave(KErrAuthServIdentityNotFound);
-	}
-
-
-TBool CAuthDb2::FindIdentityLC(RDbTable& aTable, RDbRowSet::TAccess aAccess, TIdentityId aIdentityId)
-/**
-	Navigate to the supplied identity in the Identities table.
-	On success, the table handle is on the cleanup stack.
-	
-	@param	aTable			Caller's table handle.
-	@param	aAccess			Mode in which to open the table.
-	@param	aIdentityId		Identity to navigate to.
-	@return					Zero if could not find identity in table;
-							Non-zero otherwise.
- */
-	{
-	TBool found = OpenTableAndNavigateLC(
-		aTable, KIdentitiesTableName, aAccess, KIdentitiesIndex, aIdentityId);
-
-	return found;
-	}
-
-
-// -------- plugins --------
-
-TInt CAuthDb2::NumTrainedPluginsL(TIdentityId aId)
-/**
-    Retrieve the number of trained plugins for the specified id.
-    
-    @param aId the identity for whom to retrieve the number of trained plugins.
-    @return the number of trained plugins for the specified id.
- */
-	{
-	_LIT(KGetTrainedFmt, "SELECT IdentityId FROM TrainedPlugins WHERE IdentityId=%u");
-	TBuf<(57 - 2) + 10> bufCmd;
-	bufCmd.Format(KGetTrainedFmt, aId);
-	
-	TDbQuery q(bufCmd);
-	RDbView viewTp;
-	CleanupClosePushL(viewTp);
-	User::LeaveIfError(viewTp.Prepare(iAuthDbFile, q));
-	User::LeaveIfError(viewTp.EvaluateAll());
-	TInt trainedCount = viewTp.CountL();
-	CleanupStack::PopAndDestroy(&viewTp);
-
-	return trainedCount;
-	}
-
-/**
-	Returns list of plugins that are trained for the given identity
-
-	@param	aIdentityId		The identity for whom to retrieve the list of trained plugins.
-	@param 	aTrainedPlugins	The array to fill the returned plugin ids.
-*/
-void CAuthDb2::TrainedPluginsListL(TIdentityId aIdentityId, RArray<TPluginId>& aTrainedPlugins)
-	{
-	_LIT(KGetTrainedFmt, "SELECT PluginId FROM TrainedPlugins WHERE IdentityId=%u");
-	RBuf queryBuf;
-	CleanupClosePushL(queryBuf);
-	queryBuf.CreateL(KGetTrainedFmt().Length() + KUint32Digits);
-	queryBuf.Format(KGetTrainedFmt, aIdentityId);
-
-	TDbQuery query(queryBuf);
-	RDbView viewTp;
-	CleanupClosePushL(viewTp);
-	User::LeaveIfError(viewTp.Prepare(iAuthDbFile, query));
-	User::LeaveIfError(viewTp.EvaluateAll());
-
-	if (viewTp.FirstL())
-		{
-		do
-			{
-			viewTp.GetL();
-			aTrainedPlugins.AppendL(viewTp.ColUint32(1));
-			}
-		while (viewTp.NextL());
-		}
-	CleanupStack::PopAndDestroy(2, &queryBuf); // viewTp
-	}
-
-TAuthTrainingStatus CAuthDb2::PluginStatusL(TPluginId aPluginId)
-/**
-	Return the supplied plugin's training status.
-
-		EAuthUntrained			No identities have been trained for this plugin.
-		EAuthTrained			Some (but not all) identities have been trained for this plugin
-		EAuthFullyTrained		All identities have been trained for this plugin.
-	
-	@param	aPluginId		Plugin whose status should be retrieved.
-	@return					The plugin's training status.
- */
-	{
-	// get number of identities trained for this plugin
-	
-	// This involves filtering all trainings for this plugin
-	// from the TrainedPlugins table.  For small numbers of users
-	// it is simpler to do this; for large numbers of users
-	// (registered identities) it may be better to maintain another
-	// table which matches each plugin against its training count.
-
-	_LIT(KGetTrainedFmt, "SELECT IdentityId FROM TrainedPlugins WHERE PluginId=%u");
-	TBuf<(55 - 2) + 10> bufCmd;
-	bufCmd.Format(KGetTrainedFmt, aPluginId);
-	
-	TDbQuery q(bufCmd);
-	RDbView viewTp;
-	CleanupClosePushL(viewTp);
-	User::LeaveIfError(viewTp.Prepare(iAuthDbFile, q));
-	User::LeaveIfError(viewTp.EvaluateAll());
-	TInt trainCount = viewTp.CountL();
-	CleanupStack::PopAndDestroy(&viewTp);
-	
-	if (trainCount == 0)
-		return EAuthUntrained;
-
-	// get total number of identities in the database
-	RDbTable tableId;
-	OpenTableLC(tableId, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdentitiesIndex);
-	TInt idCount = tableId.CountL();
-	CleanupStack::PopAndDestroy(&tableId);
-	
-	return (trainCount < idCount) ? EAuthTrained : EAuthFullyTrained;
-	}
-
-
-// -------- preferences --------
-
-
-void CAuthDb2::SetPreferredPluginL(TAuthPluginType aPluginType, TPluginId aPluginId)
-/**
-	Set the preferred plugin for the supplied plugin type.
-
-	If the type already has a preferred plugin type, its entry is
-	updated.  Otherwise, a new entry is created.
-
-	@param	aPluginType		Type of plugin to associate with a specific
-							plugin ID.
-	@param	aPluginId		Specific plugin to use for the plugin type.
- */
-	{
-	RDbTable table;
-
-	// start automatic transaction
-	if (FindPrefLC(table, RDbRowSet::EUpdatable, aPluginType))
-		table.UpdateL();
-	else
-		table.InsertL();
-	
-	table.SetColL(KPrefsTypeCol, (TUint) aPluginType);
-	table.SetColL(KPrefsIdCol, (TUint) aPluginId);
-	table.PutL();			// end automatic transaction
-
-	CleanupStack::PopAndDestroy(&table);
-	}
-
-
-void CAuthDb2::ClearPreferredPluginL(TAuthPluginType aPluginType)
-/**
-	Remove and preferred plugin ID for the supplied plugin type.
-	
-	If the supplied plugin type does not have a preferred plugin
-	then the database is not modified.
-
-	@param	aPluginType		Type of plugin to remove from the
-							Prefs table.
- */
-	{
-	RDbTable table;
-	if (FindPrefLC(table, RDbRowSet::EUpdatable, aPluginType))
-		table.DeleteL();
-
-	CleanupStack::PopAndDestroy(&table);
-	}
-
-
-TPluginId CAuthDb2::PreferredPluginL(TAuthPluginType aPluginType)
-/**
-	Retrieve the preferred plugin for the supplied plugin type.
-	If the plugin type does not have a preferred plugin this function
-	returns KUnknownPluginId.
-
-	@param	aPluginType		Plugin type to find preferred plugin for.
-	@return					Preferred plugin for aPluginType.  This is
-							KUnknownPluginId if the type does not
-							have a preferred plugin.
- */
-	{
-	TPluginId pluginId;
-
-	RDbTable table;
-	if (! FindPrefLC(table, RDbRowSet::EReadOnly, aPluginType))
-		pluginId = KUnknownPluginId;
-	else
-		{
-		table.GetL();
-		pluginId = static_cast<TPluginId>(table.ColUint(KPrefsIdCol));
-		}
-
-	CleanupStack::PopAndDestroy(&table);
-	return pluginId;
-	}
-
-
-TBool CAuthDb2::FindPrefLC(RDbTable& aTable, RDbRowSet::TAccess aAccess, TAuthPluginType aPluginType)
-/**
-	Open the Prefs table and navigate to the supplied plugin type.
-	On success the table handle is placed on the cleanup stack.
-
-	@param	aTable			Table handle to open.  On success this
-							is placed on the cleanup stack.
-	@param	aAccess			Mode in which the table should be opened.
-	@param	aPluginType		Plugin type to navigate to.
-	@return					Zero if could not find plugin type;
-							Non-zero otherwise.
- */
-	{
-	return OpenTableAndNavigateLC(aTable, KPrefsTableName, aAccess, KPrefsTypeIndex, aPluginType);
-	}
-
-
-// -------- trained plugins --------
-
-
-void CAuthDb2::SetTrainedPluginL(
-	TIdentityId aIdentityId, TPluginId aPluginId, const CTransientKeyInfo& aTransKeyInfo)
-/**
-	Sets the transient key for the supplied identity, plugin pair.
-
-	If the identity has already been trained for this plugin
-	then the existing record is replaced.
-
-	@param	aIdentityId		Identity to update.
-	@param	aPluginId		Plugin to associate with identity.
-	@param	aTransKeyInfo	The salt and encrypted protection key
-							for this identity / plugin pair.
-	@leave	KErrAuthServIdentityNotFound The supplied identity has
-							not been registered.
- */
-	{
-	RDbTable table;
-
-	TBool update = FindTrainedPluginLC(table, RDbRowSet::EUpdatable, aIdentityId, aPluginId);
-	
-	// start automatic transaction
-	if (update)
-		{
-		table.UpdateL();
-		}
-	else
-		{
-		CheckIdentityRegisteredL(aIdentityId);
-		table.InsertL();
-		}
-
-	table.SetColL(KTpIdentityIdCol, (TUint) aIdentityId);
-	table.SetColL(KTpPluginIdCol, (TUint) aPluginId);
-	
-	RDbColWriteStream dbcws;
-	dbcws.OpenLC(table, KTpTransientKeyCol);
-	aTransKeyInfo.ExternalizeL(dbcws);
-	dbcws.CommitL();
-	CleanupStack::PopAndDestroy(&dbcws);
-	table.PutL();
-	
-	CleanupStack::PopAndDestroy(&table);
-	}
-
-
-void CAuthDb2::RemoveTrainedPluginL(TIdentityId aIdentityId, TPluginId aPluginId)
-/**
-	Remove the transient key info (i.e. the encrypted protection key
-	and its salt) for the supplied identity, plugin pair.
-
-	@param	aIdentityId		Identity which should be trained for
-							the supplied plugin.
-	@param	aPluginId		Plugin which should be trained for the
-							supplied identity.
-	@leave	KErrAuthServTrainingNotFound Attempted to remove an
-							identity, plugin pair which was not in the
-							trained plugins table.
- */
-	{
-	RDbTable table;
-	TBool found = FindTrainedPluginLC(table, RDbRowSet::EUpdatable, aIdentityId, aPluginId);
-
-	if (! found)
-		User::Leave(KErrAuthServTrainingNotFound);
-
-	table.DeleteL();
-	CleanupStack::PopAndDestroy(&table);
-	}
-
-
-CTransientKeyInfo* CAuthDb2::KeyInfoL(TIdentityId aIdentity, TPluginId aPluginId)
-/**
-	Retrieve the transient key associated with the supplied identity,
-	plugin pair.
-
-	@param	aIdentity		Identity to search for.
-	@param	aPluginId		Plugin which should be registered
-							with the supplied identity.
-	@return					Transient key info, including encrypted
-							protection key, associated with identity,
-							plugin pair.
-	@leave KErrAuthServTrainingNotFound There was no transient key
-							information for the supplied identity,
-							plugin pair.
- */
-	{
-	RDbTable table;
-	TBool found = FindTrainedPluginLC(table, RDbRowSet::EReadOnly, aIdentity, aPluginId);
-	if (! found)
-		User::Leave(KErrAuthServTrainingNotFound);
-
-	table.GetL();
-	RDbColReadStream dbcrs;
-	dbcrs.OpenLC(table, KTpTransientKeyCol);
-	CTransientKeyInfo* keyInfo = CTransientKeyInfo::NewL(dbcrs);
-
-	CleanupStack::PopAndDestroy(2, &table);		// dbcrs, table
-	return keyInfo;
-	}
-
-
-TBool CAuthDb2::FindTrainedPluginLC(
-	RDbTable& aTable, RDbRowSet::TAccess aAccess,
-	TIdentityId aIdentityId, TPluginId aPluginId)
-/**
-	Helper function for SetTrainedPluginL and ClearTrainedPluginL.
-	This function opens the TrainedPlugins table and navigates to
-	the supplied identity, plugin pair if they are present.
-
-	@param	aTable			Table handle to open.
-	@param	aAccess			Mode in which to open the table.
-	@param	aIdentityId		Identity to navigate to.
-	@param	aPluginId		Plugin to navigate to.
-	@return					Zero if could not navigate to the
-							identity, plugin ID pair; non-zero
-							otherwise.
- */
-	{
-	OpenTableLC(aTable, KTpTableName, aAccess, KTpIndex);
-
-	TDbSeekMultiKey<2> dbsmk;
-	dbsmk.Add((TUint) aIdentityId);
-	dbsmk.Add((TUint) aPluginId);
-	return aTable.SeekL(dbsmk);
-	}
-
-
-// -------- helper functions --------
-
-
-TBool CAuthDb2::OpenTableAndNavigateLC(
-	RDbTable& aTable, const TDesC& aTableName, RDbRowSet::TAccess aAccess,
-	const TDesC& aIndexName, TUint aKey)
-/**
-	Open the described table and navigate to the identified row.
-
-	@param	aTable			Caller's table handle.  On success
-							this is placed on the cleanup stack.
-	@param	aTableName		Table to open in auth db.
-	@param	aAccess			Mode to open table in.
-	@param	aIndexName		Index to use for navigating.
-	@param	aKey			Key to find in database.
-	@return					Zero if could not find row in table;
-							Non-zero otherwise.
- */
-	{
-	OpenTableLC(aTable, aTableName, aAccess, aIndexName);
-
-	TDbSeekKey seekKey((TUint)aKey);	// from TUint32
-	return aTable.SeekL(seekKey);
-	}
-
-
-void CAuthDb2::OpenTableLC(
-	RDbTable& aTable, const TDesC& aTableName,
-	RDbRowSet::TAccess aAccess, const TDesC& aIndexName)
-/**
-	Open the named table in the supplied access mode,
-	and use the index on it.
-
-	@param	aTable			Caller's table handle.  On success
-							this is placed on the cleanup stack.
-	@param	aTableName		Table to open in the authentication db.
-	@param	aAccess			Mode to open table in.
-	@param	aIndexName		Index to activate on table.
- */
-	{
-	CleanupClosePushL(aTable);
-	User::LeaveIfError(aTable.Open(iAuthDbFile, aTableName, aAccess));
-
-	if (aAccess != RDbRowSet::EInsertOnly)
-		{
-		User::LeaveIfError(aTable.SetIndex(aIndexName));
-		}
-	}
-
-
-void CAuthDb2::CheckIdentityRegisteredL(TUint aIdentityId)
-/**
-	Checks if the supplied identity has been registered with
-	the database.  If not, it leaves with KErrAuthServIdentityNotFound.
-	
-	This function is used to validate arguments to other functions.
-	
-	@param	aIdentityId		Identity to search for.
-	@leave	KErrAuthServIdentityNotFound The supplied identity has not
-							been registered.
- */
-	{
-	CheckItemRegisteredL(
-		KIdentitiesTableName, KIdentitiesIndex,
-		aIdentityId, KErrAuthServIdentityNotFound);
-	}
-
-
-void CAuthDb2::CheckItemRegisteredL(
-	const TDesC& aTableName, const TDesC& aIndexName,
-	TUint aValue, TInt aNotFoundError)
-/**
-	Helper function for CheckIdentityRegisteredL.
-	
-	@param	aTableName		Name of table to search.
-	@param	aIndexName		Name of index to use on table.
-	@param	aValue			Key value to search for.
-	@param	aNotFoundError	If the key value cannot be found
-		`					then leave with this value.
- */
- 	{
-	RDbTable table;
-	if (! OpenTableAndNavigateLC(table, aTableName, RDbRowSet::EReadOnly, aIndexName, aValue))
-		User::Leave(aNotFoundError);
-	CleanupStack::PopAndDestroy(&table);
- 	}
-
-
-// -------- compaction --------
-
-
-const TInt KBlockSize = 512;
-const TInt KBlockMask = KBlockSize - 1;
-
-
-void CAuthDb2::CompactIfRequired()
-/**
-	Compacts the database file if compacting it would
-	recover at least one 512 byte block.
-	
-	This function does not report any error status
-	but, if the database is damaged, ConstructL will
-	attempt to repair it.
- */
-	{
-	TInt r = iAuthDbFile.UpdateStats();
-	
-	if (r == KErrNone)
-		{
-		RDbDatabase::TSize sz = iAuthDbFile.Size();
-		
-		// approx used bytes - sz.iUsage is a percentage
-		TInt usedBytes = sz.iUsage * 100;
-		if ((usedBytes & ~KBlockMask) < (sz.iSize & ~KBlockMask))
-			/* ignore */ iAuthDbFile.Compact();
-		}
-	}
-
-TIdentityId CAuthDb2::DefaultIdentityL()
-/**
- 	Return the default identity which is the first identity
- 	in the table when indexed based on the order of insertion.
-*/
-	{
-	TIdentityId identity(0);
-	RDbTable table;	
-	OpenTableLC(table, KIdentitiesTableName, RDbRowSet::EReadOnly, KIdIndexNum);
-	
-	//Position the cursor on the first row and retrieve the Identity.
-	if (table.FirstL())
-		{
-		table.GetL();
-		identity = table.ColUint32(KIdentitiesIdentityIdCol);
-		}	
-		
-	CleanupStack::PopAndDestroy(&table);
-	return identity;
-	}