--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/authenticationservices/authenticationserver/test/tAuthSvr/src/step_base.cpp Tue Nov 24 09:06:03 2009 +0200
@@ -0,0 +1,1398 @@
+/*
+* Copyright (c) 2006-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:
+* CTestStep derived implementation
+*
+*/
+
+
+#include "tAuthSvrStep.h"
+#include <test/testexecutelog.h>
+
+#ifndef __INIPARSER_H__
+ #include <cinidata.h>
+#endif // __INIPARSER_H__
+
+#include <s32file.h>
+#include <f32file.h>
+#include "authrepository.h"
+using namespace AuthServer;
+
+CTAuthSvrStepBase::CTAuthSvrStepBase()
+ {
+ }
+
+TInt CTAuthSvrStepBase::writeToNamedConfig(CIniData* aFile, const TDesC& aSectName,const TDesC& aKeyName,const TPtrC& aResult)
+ {
+ TInt retValue = KErrNone;
+ // Look for a key under a named section, retrieve text value
+
+ TInt ret = KErrNone; //return value from FindVar functions
+ ret=aFile->SetValue(aSectName, aKeyName ,aResult);
+ if(ret != KErrNone)
+ {
+ if(ret == KErrNotFound)
+ {
+ RDebug::Print(_L("Key not found. Unable to set value in ini file. SectionName = %S, KeyName = %S, value = %S."), &aSectName, &aKeyName, &aResult);
+ }
+ else
+ {
+ RDebug::Print(_L("Unable to set value in ini file. SectionName = %S, KeyName = %S, value = %S."), &aSectName, &aKeyName, &aResult);
+ }
+ retValue = ret;
+ }
+ return retValue;
+ }
+
+TInt CTAuthSvrStepBase::writeToNamedConfig(CIniData* aFile, const TDesC& aKeyName,const TPtrC& aResult)
+ {
+
+ TInt retValue = KErrNone;
+ // Look for a key under no named section, retrieve text value
+
+ TInt ret = KErrNone; //return value from FindVar functions
+ ret=aFile->SetValue(aKeyName ,aResult);
+ if(ret != KErrNone)
+ {
+ if(ret == KErrNotFound)
+ {
+ RDebug::Print(_L("Key not found. Unable to set value in ini file. KeyName = %S, value = %S."), &aKeyName, &aResult);
+ }
+ else
+ {
+ RDebug::Print(_L("Unable to set value in ini file. KeyName = %S, value = %S."), &aKeyName, &aResult);
+ }
+ retValue = ret;
+ }
+ return retValue;
+ }
+
+TInt CTAuthSvrStepBase::readFromNamedConfigL(const TDesC& aFileName, const TDesC& aSectName,const TDesC& aKeyName, HBufC*& aResult)
+ {
+ TInt retValue = KErrNone;
+ CIniData* file;
+ file = CIniData::NewL(aFileName);
+ CleanupStack::PushL(file);
+
+ // Look for a key under a named section, retrieve text value
+ TBool ret=EFalse; //return value from FindVar functions
+ TPtrC resultPtr;
+
+ ret=file->FindVar(aSectName, aKeyName ,resultPtr);
+ if(ret == EFalse)
+ {
+ RDebug::Print(_L("Unable to read value in ini file. Filename: %S, SectionName = %S, value = %S."), &aFileName, &aSectName, &aResult);
+ retValue = ret;
+ }
+ else
+ {
+ aResult = resultPtr.AllocL();
+ CleanupStack::PushL(aResult);
+ file->WriteToFileL(); //apply the implementation
+ CleanupStack::Pop(aResult);
+ }
+ CleanupStack::PopAndDestroy(file);
+
+ return retValue;
+
+ }
+
+TInt CTAuthSvrStepBase::readFromNamedConfigL(const TDesC& aFileName,const TDesC& aKeyName, HBufC*& aResult)
+ {
+ TInt retValue = KErrNone;
+ CIniData* file=NULL;
+ file = CIniData::NewL(aFileName);
+ CleanupStack::PushL(file);
+
+ TBool ret=EFalse; //return value from FindVar functions
+
+ TPtrC resultPtr;
+ ret=file->FindVar(aKeyName, resultPtr);
+ if(ret == EFalse)
+ {
+ RDebug::Print(_L("Unable to read value in ini file. Filename: %S, SectionName = %S, value = %S."), &aFileName, &aKeyName, &aResult);
+ retValue = ret;
+ }
+ else
+ {
+ aResult = resultPtr.AllocL();
+ CleanupStack::PushL(aResult);
+ file->WriteToFileL(); //apply the implementation
+ CleanupStack::Pop(aResult);
+ }
+ CleanupStack::PopAndDestroy(file);
+
+ return retValue;
+ }
+
+
+
+void CTAuthSvrStepBase::SetDefaultPluginIdL(TInt aDefault)
+ {
+ //Read the default plugin value from the configuration file.
+ CRepository* repository = CRepository::NewL(KUidAuthServerRepository);
+ CleanupStack::PushL(repository);
+
+ User::LeaveIfError(repository->Set(KAuthDefaultPlugin, aDefault));
+
+ //Retrieve from file
+ TInt defaultPlugin(0);
+ User::LeaveIfError(repository->Get(KAuthDefaultPlugin, defaultPlugin));
+ INFO_PRINTF2(_L("Default plugin value set in cenrep to %d"),defaultPlugin);
+
+ CleanupStack::PopAndDestroy(repository);
+
+ }
+/**
+ Read data from testexecute ini file that will be used to initialise the Authentication Server
+*/
+TInt CTAuthSvrStepBase::InitAuthServerFromFileL()
+ {
+
+ //Set a default plugin using an ini file. Read this value from a file if it is specified
+ //Set this to be the default plugin (update the policy file) if the test case specifies it (in the script's ini file).
+
+ TPtrC defaultPluginFromFile;
+
+ TDriveUnit sysDrive (RFs::GetSystemDrive());
+ TDriveName sysDriveName (sysDrive.Name());
+ TBuf<128> fileName (sysDriveName);
+ fileName.Append(KAuthSvrPolicyFile);
+
+ CIniData* policyFile=NULL;
+ TRAPD(r,policyFile=CIniData::NewL(fileName));
+ CleanupStack::PushL(policyFile);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPluginIniFile);
+
+ CIniData* pluginFile=NULL;
+ TRAP(r,pluginFile=CIniData::NewL(fileName));
+ CleanupStack::PushL(pluginFile);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3100File);
+
+ CIniData* p3100File=NULL;
+ TRAP(r,p3100File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3100File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3101File);
+
+ CIniData* p3101File=NULL;
+ TRAP(r,p3101File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3101File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3102File);
+ CIniData* p3102File=NULL;
+ TRAP(r,p3102File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3102File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3103File);
+
+ CIniData* p3103File=NULL;
+ TRAP(r,p3103File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3103File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3104File);
+
+ CIniData* p3104File=NULL;
+ TRAP(r,p3104File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3104File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin4100File);
+
+ CIniData* p4100File=NULL;
+ TRAP(r,p4100File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p4100File);
+
+ if (GetStringFromConfig(ConfigSection(),_L("defaultPlugin"), defaultPluginFromFile) != EFalse) // the tag 'defaultPlugin' was present
+ {
+ //Write this value to the policy file
+ writeToNamedConfig(policyFile, KDefaultPluginTag, defaultPluginFromFile);
+ // SetDefaultPluginIdL(defaultPluginFromFile);
+ }
+ TInt defaultPluginId(0);
+ if (GetIntFromConfig(ConfigSection(),_L("defaultPluginId"), defaultPluginId) != EFalse) // the tag 'defaultPlugin' was present
+ {
+ //Write this value to the policy file
+ //writeToNamedConfig(policyFile, KDefaultPluginTag, defaultPluginFromFile);
+ SetDefaultPluginIdL(defaultPluginId);
+ }
+ //Set whether a plugin supports default data. Read this value from a file if it is specified
+ _LIT(KTrueText,"true");
+ _LIT(KFalseText,"false");
+
+ TBool iSupportsDefaultDataFromFile(ETrue); //Default case - the plugin supports default data
+
+ TBufC<16> trueBuf1(KTrueText);
+ TBufC<16> falseBuf1(KFalseText);
+ TPtr valueToWrite = trueBuf1.Des(); //Default case - the plugin supports default data
+ if (GetBoolFromConfig(ConfigSection(),_L("iSupportsDefaultData"), iSupportsDefaultDataFromFile) != EFalse) // the tag 'isTrusted' was present
+ {
+ //Set the value that will be picked up by the constructor of the plugin
+ if (iSupportsDefaultDataFromFile)
+ { valueToWrite = trueBuf1.Des(); }
+ else
+ { valueToWrite = falseBuf1.Des(); }
+ writeToNamedConfig(pluginFile, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3101File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3102File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3103File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p4100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("The iSupportsDefaultData tag was not specified in the testexecute ini file."));
+ //Use the default value of TRUE
+ valueToWrite = trueBuf1.Des();
+ writeToNamedConfig(pluginFile, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3101File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3102File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p3103File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ writeToNamedConfig(p4100File, KPluginIniSection, _L("iSupportsDefaultData"), valueToWrite);
+ }
+
+ //Set a value for the training input that will be used by the CTPinAuthPlugin
+ //in the file AuthSvrPolicy.ini
+ TPtrC userPinInputFromFile;
+ TPtrC supportsDefaultFromFile;
+ TPtrC activeStateFromFile;
+
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113100InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+ { writeToNamedConfig(p3100File, KIdEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113101InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113101Input' was present
+ { writeToNamedConfig(p3101File, KIdEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113102InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113102Input' was present
+ { writeToNamedConfig(p3102File, KIdEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113103InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113103Input' was present
+ { writeToNamedConfig(p3103File, KIdEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113104InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin11113104Input' was present
+ { writeToNamedConfig(p3104File, KIdEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin10234100InputId"), userPinInputFromFile) != EFalse) // the tag 'Pin10234100Input' was present
+ { writeToNamedConfig(p4100File, KIdEnteredPinTag, userPinInputFromFile); }
+
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113100InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+ { writeToNamedConfig(p3100File, KTrainEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113101InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113101Input' was present
+ { writeToNamedConfig(p3101File, KTrainEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113102InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113102Input' was present
+ { writeToNamedConfig(p3102File, KTrainEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113103InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113103Input' was present
+ { writeToNamedConfig(p3103File, KTrainEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113104InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113104Input' was present
+ { writeToNamedConfig(p3104File, KTrainEnteredPinTag, userPinInputFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin10234100InputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin10234100Input' was present
+ { writeToNamedConfig(p4100File, KTrainEnteredPinTag, userPinInputFromFile); }
+
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113100Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113102Default' was present
+ { writeToNamedConfig(p3100File, KSupportsDefaultTag, supportsDefaultFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113101Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113101Default' was present
+ { writeToNamedConfig(p3101File, KSupportsDefaultTag, supportsDefaultFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113102Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113102Default' was present
+ { writeToNamedConfig(p3102File, KSupportsDefaultTag, supportsDefaultFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113104Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113104Default' was present
+ { writeToNamedConfig(p3104File, KSupportsDefaultTag, supportsDefaultFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin10234100Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin10234100Default' was present
+ { writeToNamedConfig(p4100File, KSupportsDefaultTag, supportsDefaultFromFile); }
+
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113103Default"), supportsDefaultFromFile) != EFalse) // the tag 'Pin11113103Default' was present
+ { writeToNamedConfig(p3103File, KSupportsDefaultTag, supportsDefaultFromFile); }
+ else
+ { writeToNamedConfig(p3103File, KSupportsDefaultTag, falseBuf1.Des()); }
+
+
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113100Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113100Active' was present
+ { writeToNamedConfig(p3100File, KActiveStateTag, activeStateFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113101Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113101Active' was present
+ { writeToNamedConfig(p3101File, KActiveStateTag, activeStateFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113102Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113102Active' was present
+ { writeToNamedConfig(p3102File, KActiveStateTag, activeStateFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113104Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113104Active' was present
+ { writeToNamedConfig(p3104File, KActiveStateTag, activeStateFromFile); }
+ if (GetStringFromConfig(ConfigSection(),_L("Pin10234100Active"), activeStateFromFile) != EFalse) // the tag 'Pin10234100Active' was present
+ { writeToNamedConfig(p4100File, KActiveStateTag, activeStateFromFile); }
+
+ if (GetStringFromConfig(ConfigSection(),_L("Pin11113103Active"), activeStateFromFile) != EFalse) // the tag 'Pin11113103Active' was present
+ { writeToNamedConfig(p3103File, KActiveStateTag, activeStateFromFile); }
+ else
+ { writeToNamedConfig(p3103File, KActiveStateTag, falseBuf1.Des()); }
+
+ // ... Other PinPluginDb's can be added
+ //Else the data is set in the 'Defaultdata() function'
+
+ policyFile->WriteToFileL();
+ pluginFile->WriteToFileL();
+ p3100File->WriteToFileL();
+ p3101File->WriteToFileL();
+ p3102File->WriteToFileL();
+ p3103File->WriteToFileL();
+ p3104File->WriteToFileL();
+ p4100File->WriteToFileL();
+
+ CleanupStack::PopAndDestroy(8,policyFile);
+ return KErrNone;
+ }
+
+/**
+ Read plugin input train data from testexecute ini file , when aInitTrainInput
+ is set to true, or plugin input id when set to false.This data will be used to
+ initialise the Authentication Server.
+
+*/
+TInt CTAuthSvrStepBase::InitPluginDataFromFileL(TBool aInitTrainInput)
+ {
+ TDriveUnit sysDrive (RFs::GetSystemDrive());
+ TDriveName sysDriveName (sysDrive.Name());
+ TBuf<128> fileName (sysDriveName);
+ fileName.Append(KPlugin3100File);
+
+ CIniData* p3100File = NULL;
+ TRAPD(r,p3100File = CIniData::NewL(fileName));
+ if(r != KErrNone)
+ {
+ RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &fileName);
+ return r;
+ }
+
+ CleanupStack::PushL(p3100File);
+
+ TPtrC userPinInputFromFile;
+
+ if(aInitTrainInput)
+ {
+ if (GetStringFromConfig(ConfigSection(),_L("PinInputTrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+ { writeToNamedConfig(p3100File, KTrainEnteredPinTag, userPinInputFromFile); }
+
+ }
+
+ else
+ {
+ if (GetStringFromConfig(ConfigSection(),_L("PinInputRetrain"), userPinInputFromFile) != EFalse) // the tag 'Pin11113100Input' was present
+ { writeToNamedConfig(p3100File, KIdEnteredPinTag, userPinInputFromFile); }
+
+ }
+
+ p3100File->WriteToFileL();
+ CleanupStack::PopAndDestroy(p3100File);
+ return KErrNone;
+ }
+
+/**
+ Wait for the server to shut down and so release the authentication database.
+*/
+void CTAuthSvrStepBase::WaitForServerToReleaseDb()
+ {
+ TFullName name;
+ for (;;)
+ {
+ TFindServer find(::KAuthServerName);
+ if (find.Next(name) != KErrNone)
+ {
+ break;
+ }
+
+ // Wait for server to terminate
+ User::After(1 * 1000 * 1000);
+ }
+ }
+
+/**
+ Remove any existing database file.
+*/
+void CTAuthSvrStepBase::RemoveExistingDbL()
+ {
+ WaitForServerToReleaseDb();
+
+ TInt r = KErrNone;
+
+ TBuf<80> dbName(AuthServer::KDbName);
+ dbName[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());
+ while ((r = iFs.Delete(dbName)) == KErrInUse)
+ {
+ User::After(50000);
+ }
+ if ((KErrPathNotFound == r) || (KErrNotFound == r)) //-12 or -1
+ {
+ INFO_PRINTF1(_L("The database file was absent when I tried to delete it. \
+ Ignoring..."));
+ r = KErrNone; //Not Important
+ }
+ User::LeaveIfError(r);
+
+
+
+ TBuf<80> pinDbName(_L("!:\\private\\102740FC\\plugin.store"));
+ pinDbName[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());
+ while ((r = iFs.Delete(pinDbName)) == KErrInUse)
+ {
+ User::After(50000);
+ }
+
+ if ((KErrPathNotFound == r) || (KErrNotFound == r)) //-12 or -1
+ {
+ INFO_PRINTF1(_L("The pin plugin database file was absent when I tried to delete it. \
+ Ignoring..."));
+ r = KErrNone; //Not Important
+ }
+ User::LeaveIfError(r);
+
+ TBuf<80> pinDbName1(_L("!:\\t_pinplugindlg_in.dat"));
+ pinDbName1[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());
+ while ((r = iFs.Delete(pinDbName1)) == KErrInUse)
+ {
+ User::After(50000);
+ }
+
+ if ((KErrPathNotFound == r) || (KErrNotFound == r)) //-12 or -1
+ {
+ INFO_PRINTF1(_L("The pin plugin database file (t_pinplugindlg_in.dat)was absent when I tried to delete it. \
+ Ignoring..."));
+ r = KErrNone; //Not Important
+ }
+ User::LeaveIfError(r);
+
+
+ TBuf<80> pinDbName2(_L("!:\\t_pinplugindlg_out.dat"));
+ pinDbName2[0] = 'A' + static_cast<TInt>(RFs::GetSystemDrive());
+ while ((r = iFs.Delete(pinDbName2)) == KErrInUse)
+ {
+ User::After(50000);
+ }
+
+ if ((KErrPathNotFound == r) || (KErrNotFound == r)) //-12 or -1
+ {
+ INFO_PRINTF1(_L("The pin plugin database file (t_pinplugindlg_out.dat)was absent when I tried to delete it. \
+ Ignoring..."));
+ r = KErrNone; //Not Important
+ }
+ User::LeaveIfError(r);
+
+
+ //Reset the data 'AllUserID&PinValues' in AuthSvrPolicy.ini & the
+ // individual plugin Db files
+ TBufC<16> initPinDbBuffer(KInitPinDatabaseValue);
+ TPtr valueToWrite = initPinDbBuffer.Des();
+
+ TBufC<16> initEnteredPinBuffer(KDefaultInput);
+ TPtr defaultInputValue = initEnteredPinBuffer.Des();
+
+ TBuf<2> noIdentityVal;
+ _LIT16(KFormatLastAuth,"%u");
+
+ noIdentityVal.Format(KFormatLastAuth, KErrNone); //generates:
+
+ TDriveUnit sysDrive (RFs::GetSystemDrive());
+ TDriveName sysDriveName (sysDrive.Name());
+ TBuf<128> fileName (sysDriveName);
+ fileName.Append(KAuthSvrPolicyFile);
+
+ CIniData* policyFile=NULL;
+ TRAP(r,policyFile=CIniData::NewL(fileName));
+ CleanupStack::PushL(policyFile);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3100File);
+
+ CIniData* p3100File=NULL;
+ TRAP(r,p3100File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3100File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3101File);
+
+ CIniData* p3101File=NULL;
+ TRAP(r,p3101File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3101File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3102File);
+
+ CIniData* p3102File=NULL;
+ TRAP(r,p3102File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3102File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3103File);
+
+ CIniData* p3103File=NULL;
+ TRAP(r,p3103File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3103File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin3104File);
+
+ CIniData* p3104File=NULL;
+ TRAP(r,p3104File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p3104File);
+
+ fileName.Copy(sysDriveName);
+ fileName.Append(KPlugin4100File);
+
+ CIniData* p4100File=NULL;
+ TRAP(r,p4100File=CIniData::NewL(fileName));
+ CleanupStack::PushL(p4100File);
+
+ writeToNamedConfig(policyFile, KLastAuthIdTag, noIdentityVal);
+ writeToNamedConfig(policyFile, KTotalDbTag, valueToWrite);
+ writeToNamedConfig(p3100File, KPinDbTag, valueToWrite);
+ writeToNamedConfig(p3101File, KPinDbTag, valueToWrite);
+ writeToNamedConfig(p3102File, KPinDbTag, valueToWrite);
+ writeToNamedConfig(p3103File, KPinDbTag, valueToWrite);
+ writeToNamedConfig(p3104File, KPinDbTag, valueToWrite);
+ writeToNamedConfig(p4100File, KPinDbTag, valueToWrite);
+ writeToNamedConfig(p3100File, KIdEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3101File, KIdEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3102File, KIdEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3103File, KIdEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3104File, KIdEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p4100File, KIdEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3100File, KTrainEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3101File, KTrainEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3102File, KTrainEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3103File, KTrainEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p3104File, KTrainEnteredPinTag, defaultInputValue);
+ writeToNamedConfig(p4100File, KTrainEnteredPinTag, defaultInputValue);
+
+ policyFile->WriteToFileL();
+ p3100File->WriteToFileL();
+ p3101File->WriteToFileL();
+ p3102File->WriteToFileL();
+ p3103File->WriteToFileL();
+ p3104File->WriteToFileL();
+ p4100File->WriteToFileL();
+
+ CleanupStack::PopAndDestroy(7,policyFile);
+ }
+
+/**
+ Utility function coverting HexString to Integer
+*/
+TInt CTAuthSvrStepBase::HexString2Num(const TDesC8& aStr)
+ {
+ TInt data = 0;
+ TInt char2hex = 0;
+ TInt c = 0;
+ for (TInt i = 0 ; i < aStr.Length() ; ++i)
+ {
+ c = aStr[i];
+
+ if (c < 'A')
+ {
+ char2hex='0';
+ }
+ else if (c < 'a')
+ {
+ char2hex='A';
+ }
+ else
+ {
+ char2hex='a';
+ }
+ data = data << 4;
+ data += aStr[i]-char2hex;
+ }
+ return data;
+ }
+
+
+/**
+ Utility function to Update the Global Db by removing the training data
+ that is associated with a given Id. The removal will not happen if
+ the identity is not present in this list, however, this is not expected
+ Called at the same time as RAuthMgrClient::RemoveIdentityL(aId)
+ Returns KErrNone, or some error code
+*/
+TInt CTAuthSvrStepBase::RemoveIdFromGlobalDbL (TUint32 aId)
+ {
+
+ TBuf8<500> totalDbFileContents, totalDbFileContents2;
+ TInt retValue = KErrNone;
+ CIniData* file=NULL;
+
+ TDriveUnit sysDrive (RFs::GetSystemDrive());
+ TDriveName sysDriveName (sysDrive.Name());
+ TBuf<128> fileName (sysDriveName);
+ fileName.Append(KAuthSvrPolicyFile);
+
+ TRAPD(r,file=CIniData::NewL(fileName));
+ if(r!=KErrNone)
+ {
+ RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &fileName);
+ retValue = r;
+ }
+ else
+ {
+ // Look for a key under a named section, retrieve text value
+ TPtrC result;
+ TBool ret=EFalse; //return value from FindVar functions
+
+ ret=file->FindVar(KPluginIniSection, KTotalDbTag,result);
+ if(!ret)
+ {
+ RDebug::Print(_L("Unable to find the %S key in the file %S."), &KTotalDbTag, &fileName);
+ retValue = KErrNotFound;
+ }
+ else
+ {
+ //Copy the data from the named section in the file, and see if any previous user has used this input string
+ totalDbFileContents.Copy(result);
+
+ //Format the searchstring as defined in the file so that it starts with a ',' and ends with a ':'.
+ _LIT8(KFormatValue3, ",%d:");
+ TBuf8<20> searchString;
+ searchString.Format(KFormatValue3, aId);
+ TInt searchResult;
+ searchResult = totalDbFileContents.Find(searchString);
+
+ if (searchResult) // the tag was found
+ {
+ //Extract the rest of the pinFileContents string before the start of the PIN (before the ':')
+ totalDbFileContents2 = totalDbFileContents.Left(searchResult);
+
+ //The userId starts at the first ',' from the end of pinFileContents2,
+ // where p2 is the portion of p1 to the left of searchResult
+ TInt userIdStartPos = totalDbFileContents2.LocateReverse(',');
+
+ //Find where the PIN ends
+ TInt PinEndPos = searchResult + searchString.Length() - 1;
+
+ //remove the found (total) string from the list
+ totalDbFileContents.Delete(userIdStartPos, (PinEndPos - userIdStartPos) );
+
+ //Update the file
+ //For the purpose of writing the data to a file, i'll create a 16-bit version of pinFileContents
+ TInt ret2 = 0;
+ HBufC* buf;
+ buf = HBufC::NewL(500);
+ buf->Des().Copy(totalDbFileContents);
+
+ ret2 = file->SetValue(KPluginIniSection, KTotalDbTag, *buf);
+
+ TRAPD(r,file->WriteToFileL());
+ if (KErrNone != r)
+ {
+ RDebug::Print(_L("Error occurred while writing to the file. Filename = %S, KeyName = AllUserID&PinValues, value = %S."), &fileName, buf);
+ }
+ delete buf; //Memory cleanup. This string was only needed for the above Print function
+
+ if (KErrNone !=ret2)
+ {
+ RDebug::Print(_L("Error occurred in WriteToFileL(). Error = %d. Filename= %S"), ret2, &fileName);
+ retValue = ret2;
+ }
+ else
+ {
+ retValue = KErrNone;
+ }
+ }
+ else // The identity was not found in the Db.
+ {
+ RDebug::Print(_L("RemoveIdFromGlobalDb: The specified ID was not found in the totalDbFile"));
+ retValue = KErrAuthServIdentityNotFound;
+ }
+ }//End check for key§ion search in file
+ delete file;
+ }//End check for safe file access
+ return retValue;
+ }
+
+/**
+Returns EPass or EFail
+*/
+TVerdict CTAuthSvrStepBase::checkAndSetUserNameL(AuthServer::RAuthClient& authClient1, TInt idPosition)
+ {
+ TBool retValue = ETrue;
+ TPtrC initNameValue;
+ TPtrC finalNameValue;
+ //Check that the user has specified the initial and later userNames for the identity
+
+ if( (GetStringFromConfig(ConfigSection(),_L("finalUserName"), finalNameValue))
+ != EFalse) // the tags 'initUserName' and finalUserName are present
+ {
+ //Get a list of all the present identities
+ RIdentityIdArray ids;
+ authClient1.IdentitiesL(ids);
+ CleanupClosePushL(ids);
+
+ //Check the userName of particular identity that was mentioned in the function call
+ HBufC* idName = authClient1.IdentityStringL(ids[idPosition]);
+ CleanupStack::PushL(idName);
+
+ //Change the userName to what is desired
+ authClient1.SetIdentityStringL(ids[idPosition], finalNameValue);
+
+ //Compare to the expected final value of the userName
+
+ HBufC* idNameFinal = authClient1.IdentityStringL(ids[idPosition]);
+
+ if (idNameFinal->Compare(finalNameValue) != 0)
+ {
+ INFO_PRINTF4(_L("Id %d has the Final name %S instead of %S"), idPosition, idNameFinal, &finalNameValue);
+ retValue = EFalse;
+ }
+ else
+ {
+ INFO_PRINTF4(_L("Id %d had the initial name %S and the Final name %S"), idPosition, idName, idNameFinal);
+ retValue = ETrue;
+ }
+ delete idNameFinal;
+ CleanupStack::PopAndDestroy(2, &ids); //idName, ids
+ }
+ else
+ {
+ INFO_PRINTF1(_L("finalUserName tag is absent in the script file"));
+ }
+
+ if (retValue)
+ {SetTestStepResult(EPass);}
+ else
+ {SetTestStepResult(EFail);}
+
+ return TestStepResult();
+ }
+
+
+//
+void CTAuthSvrStepBase::CheckSpecifiedPluginStatusL ()
+ {
+ //If the pluginId is quoted in the ini file, check it's training status
+ TInt plugin1IdValue = 0;
+ if (GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue) != EFalse) // the tag 'pluginId1' was present
+ {
+ AuthServer::RAuthClient ac;
+ User::LeaveIfError(ac.Connect());
+ CleanupClosePushL(ac);
+ // Get the status of the specified plugin
+ TInt plugin1StatusValue;
+ if (GetIntFromConfig(ConfigSection(),_L("plugin1Status"), plugin1StatusValue) != EFalse)
+ {
+ TAuthTrainingStatus plugin1Status;// = plugin1StatusValue;
+ switch (plugin1StatusValue)
+ {
+ case EAuthUntrained:
+ plugin1Status = EAuthUntrained;
+ break;
+ case EAuthTrained:
+ plugin1Status = EAuthTrained;
+ break;
+ case EAuthFullyTrained:
+ plugin1Status = EAuthFullyTrained;
+ break;
+ default:
+ ERR_PRINTF2(_L("Error receiving a value of the pluginIdStatus. Value in file : %d "), plugin1StatusValue);
+ plugin1Status = EAuthUntrained;
+ break;
+ }
+
+
+ RPluginDescriptions pluginList1;
+ TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+ CleanupStack::PushL(cleanup);
+ ac.PluginsL(pluginList1);
+
+ TInt numPlugins = pluginList1.Count();
+ for(TInt i = 0; i < numPlugins; i++)
+ {
+ TInt presentPluginIdVal = pluginList1[i]->Id();
+
+ if (presentPluginIdVal == plugin1IdValue)
+ {
+ TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+ if (presentPluginStatus == plugin1Status)
+ {
+ INFO_PRINTF3(_L("PluginId=%x has the expected status =%i"), presentPluginIdVal, presentPluginStatus);
+ SetTestStepResult(EPass);
+ }
+ else
+ {
+ ERR_PRINTF4(_L("PluginId=%x has status =%i, instead of %i"),
+ presentPluginIdVal, presentPluginStatus, plugin1Status);
+ SetTestStepResult(EFail);
+ }
+ break; //Don't check any other plugins
+ }
+ else
+ {
+ SetTestStepResult(EFail); //After this, check others
+ }
+ }
+ if(numPlugins == 0)
+ {
+ ERR_PRINTF1(_L("No plugins in the system"));
+ SetTestStepResult(EFail);
+ }
+
+ if (TestStepResult() == EFail)
+ {
+ ERR_PRINTF3(_L("PluginId=%x does not have the expected status %i"),
+ plugin1IdValue, plugin1StatusValue);
+ }
+
+ CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray
+ }
+ else
+ {
+ INFO_PRINTF1(_L("plugin1Status was not specified in the ini file"));
+ }
+ CleanupStack::PopAndDestroy(&ac); // ac
+ }
+ else
+ {
+ INFO_PRINTF1(_L("plugin1Id was not specified in the ini file"));
+ }
+ }
+
+
+
+enum TOp
+ {
+ ENone =0,
+ EOr = 1,
+ EAnd = 2
+ };
+
+enum TState
+ {
+ EFirstToken = 0,
+ ESecondToken = 1,
+ EThirdToken = 2,
+ ENumTokens = 3
+ };
+
+AuthServer::CAuthExpression* CTAuthSvrStepBase::CreateAuthExprLC (const TDesC& aString)
+ {
+
+ TLex input(aString);
+
+ _LIT(KKnowledge,"K");
+ _LIT(KBiometric,"B");
+ _LIT(KToken,"T");
+ _LIT(KDefault,"D");
+ _LIT(KAnd,"&");
+ _LIT(KOr,"|");
+ _LIT(KUnexpected, "Unexpected '%S' token while parsing authexpression");
+
+ AuthServer::CAuthExpression* result = 0;
+ TState state = EFirstToken;
+ TOp op = ENone;
+ TBool err;
+ TPluginId plugin = 0;
+
+ if (aString == KNullDesC)
+ {
+ result = AuthExpr();
+ CleanupStack::PushL(result);
+ return result;
+ }
+ for (TPtrC token = input.NextToken(); token.Size() > 0 ;
+ token.Set(input.NextToken()))
+ {
+ AuthServer::CAuthExpression* newExpr = 0;
+ INFO_PRINTF3(_L("Token %S Size = %d"), &token, token.Size());
+ if (token.Length() > 1)
+ {
+ TLex lexer(token);
+ if (lexer.Val(plugin,EHex) == KErrNone)
+ {
+ err = (state != EFirstToken && state != EThirdToken );
+ if (err) ERR_PRINTF2(KUnexpected, &token);
+ newExpr = AuthExpr(plugin);
+ }
+ else
+ {
+ err = true;
+ ERR_PRINTF2(KUnexpected, &token);
+ }
+ }
+ else if (token.CompareF(KKnowledge) == 0)
+ {
+ err = (state != EFirstToken && state != EThirdToken );
+ if (err) ERR_PRINTF2(KUnexpected, &token);
+ newExpr = AuthExpr(EAuthKnowledge);
+ }
+ else if (token.CompareF(KBiometric) == 0)
+ {
+ err = (state != EFirstToken && state != EThirdToken );
+ if (err) ERR_PRINTF2(KUnexpected, &token);
+ newExpr = AuthExpr(EAuthBiometric);
+ }
+ else if (token.CompareF(KToken) == 0)
+ {
+ err = (state != EFirstToken && state != EThirdToken );
+ if (err) ERR_PRINTF2(KUnexpected, &token);
+ newExpr = AuthExpr(EAuthToken);
+ }
+ else if (token.CompareF(KDefault) == 0)
+ {
+ err = (state != EFirstToken && state != EThirdToken );
+ if (err) ERR_PRINTF2(KUnexpected, &token);
+ newExpr = AuthExpr(EAuthDefault);
+ }
+ else if (token.CompareF(KAnd) == 0)
+ {
+ err = state != ESecondToken;
+ if (err) ERR_PRINTF2(KUnexpected, &token);
+ op = EAnd;
+ }
+ else if (token.CompareF(KOr) == 0)
+ {
+ err = state != ESecondToken;
+ if (err) ERR_PRINTF2(KUnexpected, &token);
+ op = EOr;
+ }
+ else
+ {
+ err = true;
+ ERR_PRINTF2(_L("Unknown '%S' token while parsing authexpression"), &token);
+ }
+
+ if (err)
+ {
+ User::Leave(KErrGeneral);
+ }
+ switch (state)
+ {
+ case EFirstToken:
+ if ( result == 0 && op == ENone)
+ {
+ result = newExpr;
+ CleanupStack::PushL(result);
+ }
+ else
+ {
+ //err?
+ }
+ state = ESecondToken;
+ break;
+ case ESecondToken:
+ state = EThirdToken;
+ break;
+ case EThirdToken:
+ if (op == EOr)
+ {
+ CleanupStack::Pop(result);
+ result = AuthOr(result, newExpr);
+ CleanupStack::PushL(result);
+
+ }
+ else
+ {
+ CleanupStack::Pop(result);
+ result = AuthAnd(result, newExpr);
+ CleanupStack::PushL(result);
+ }
+ op = ENone;
+ state = ESecondToken;
+ }
+ }
+ if (state == EThirdToken)
+ {
+ ERR_PRINTF1(_L("Unexpected end of stream while parsing authexpression"));
+ User::Leave(KErrGeneral);
+ }
+ return result;
+ }
+
+void CTAuthSvrStepBase::CheckSpecifiedPluginStatusConnectedL (AuthServer::RAuthClient& ac)
+ {
+ //If the pluginId is quoted in the ini file, check it's training status
+ TInt plugin1IdValue = 0;
+ if (GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue) != EFalse) // the tag 'pluginId1' was present
+ {
+ // Get the status of the specified plugin
+ TInt plugin1StatusValue = 0;
+ if (GetIntFromConfig(ConfigSection(),_L("plugin1Status"), plugin1StatusValue) != EFalse)
+ {
+ TAuthTrainingStatus plugin1Status;// = plugin1StatusValue;
+ switch (plugin1StatusValue)
+ {
+ case EAuthUntrained:
+ plugin1Status = EAuthUntrained;
+ break;
+ case EAuthTrained:
+ plugin1Status = EAuthTrained;
+ break;
+ case EAuthFullyTrained:
+ plugin1Status = EAuthFullyTrained;
+ break;
+ default:
+ ERR_PRINTF2(_L("Error receiving a value of the pluginIdStatus. Value in file : %d "), plugin1StatusValue);
+ plugin1Status = EAuthUntrained;
+ break;
+ }
+
+
+ RPluginDescriptions pluginList1;
+ TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+ CleanupStack::PushL(cleanup);
+ ac.PluginsL(pluginList1);
+
+ TInt numPlugins = pluginList1.Count();
+ for(TInt i = 0; i < numPlugins; i++)
+ {
+ TInt presentPluginIdVal = pluginList1[i]->Id();
+
+ if (presentPluginIdVal == plugin1IdValue)
+ {
+ TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+ if (presentPluginStatus == plugin1Status)
+ {
+ INFO_PRINTF3(_L("PluginId=%x has the expected status =%i"), presentPluginIdVal, presentPluginStatus);
+ SetTestStepResult(EPass);
+ }
+ else
+ {
+ ERR_PRINTF4(_L("PluginId=%x has status =%i, instead of %i"),
+ presentPluginIdVal, presentPluginStatus, plugin1Status);
+ SetTestStepResult(EFail);
+ }
+ break; //Don't check any other plugins
+ }
+ else
+ {
+ SetTestStepResult(EFail); //After this, check others
+ }
+ }
+ if(numPlugins == 0)
+ {
+ ERR_PRINTF1(_L("No plugins in the system"));
+ SetTestStepResult(EFail);
+ }
+
+ if (TestStepResult() == EFail)
+ {
+ ERR_PRINTF3(_L("PluginId=%x does not have the expected status %i"),
+ plugin1IdValue, plugin1StatusValue);
+ }
+
+ CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray
+ }
+ else
+ {
+ INFO_PRINTF1(_L("plugin1Status was not specified in the ini file"));
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("plugin1Id was not specified in the ini file"));
+ }
+ }
+
+TBool CTAuthSvrStepBase::CheckPluginStatusAllL (AuthServer::RAuthClient& ac)
+ {
+ TBool retValue = EFalse;
+
+ //Get a list of all the present plugins
+ RPluginDescriptions pluginList1;
+ TCleanupItem cleanup(CleanupEComArray, &pluginList1);
+ CleanupStack::PushL(cleanup);
+ ac.PluginsL(pluginList1);
+
+ //Get a list of all the present identities
+ RIdentityIdArray ids;
+ ac.IdentitiesL(ids);
+ CleanupClosePushL(ids);
+ TInt actualNumIdsFromServer = ids.Count();
+ CleanupStack::PopAndDestroy(&ids);
+
+ //Get the number of identities that has been trained for each of my 3 plugins
+ TInt numIdsTrained;
+
+ TInt numPlugins = pluginList1.Count();
+ for(TInt i = 0; i < numPlugins; i++)
+ {
+ TInt presentPluginStatus = pluginList1[i]->TrainingStatus();
+ TInt presentPluginId = pluginList1[i]->Id();
+ TInt expectedStatus = 0;
+
+ TDriveUnit sysDrive (RFs::GetSystemDrive());
+ TDriveName sysDriveName (sysDrive.Name());
+ TBuf<128> fileName (sysDriveName);
+
+ switch (presentPluginId)
+ {
+ case 0x11113100:
+ {
+ fileName.Append(KPlugin3100File);
+ numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+ break;
+ }
+
+ case 0x11113101:
+ {
+ fileName.Append(KPlugin3101File);
+ numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+ break;
+ }
+
+ case 0x11113102:
+ {
+ fileName.Append(KPlugin3102File);
+ numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+ break;
+ }
+
+ case 0x10234100:
+ {
+ fileName.Append(KPlugin4100File);
+ numIdsTrained = GetNumIdsFromPluginDbL(fileName);
+ break;
+ }
+
+ case 0x200032E5:
+ {
+ numIdsTrained = actualNumIdsFromServer - 1;
+ }
+
+ default:
+ numIdsTrained = KErrNotFound;
+ break;
+ }
+ if (KErrNotFound != numIdsTrained)
+ {
+ //We are only considering the 3 specified Ids
+ if (0 == numIdsTrained)
+ { expectedStatus = EAuthUntrained; }
+ else if(actualNumIdsFromServer == numIdsTrained)
+ { expectedStatus = EAuthFullyTrained; }
+ else if (actualNumIdsFromServer > numIdsTrained)
+ { expectedStatus = EAuthTrained; }
+ else
+ {
+ ERR_PRINTF2(_L("Error!! PluginId=%x has an unexpected Number of Ids in the Database = %i"),
+ numIdsTrained);
+ ERR_PRINTF2(_L("Actual number of Ids registered by the authServer = %i"),
+ actualNumIdsFromServer);
+ }
+
+ //Final check
+ if (presentPluginStatus != expectedStatus)
+ {
+ ERR_PRINTF4(_L("Present PluginStatus of plugin %x is not as expected. It is %i instead of %i"),
+ presentPluginId, presentPluginStatus, expectedStatus);
+ retValue = EFalse;
+ }
+ else
+ {
+ retValue = ETrue;
+ }
+ }
+ }//End of for loop
+ CleanupStack::PopAndDestroy(&pluginList1); //infoArray, results in a call to CleanupEComArray
+ return retValue;
+ }
+
+TInt CTAuthSvrStepBase::GetNumIdsFromPluginDbL(const TDesC& aFileName)
+ {
+ TBuf8<500> pluginDbFileContents;
+ TInt numIds = 0;
+ CIniData* file=NULL;
+ file = CIniData::NewL(aFileName);
+ CleanupStack::PushL(file);
+
+ // Look for a key under a named section, retrieve text value
+ TBool ret=EFalse; //return value from FindVar functions
+ TPtrC resultPtr;
+
+ ret=file->FindVar(KPluginIniSection, KPinDbTag, resultPtr);
+ if(ret == EFalse)
+ {
+ RDebug::Print(_L("Unable to read value in ini file. Filename: %S, SectionName = %S, value = %S."), &aFileName, &KPluginIniSection, &KPinDbTag);
+ numIds = ret;
+ }
+ else
+ {
+ pluginDbFileContents.Copy(resultPtr);
+ _LIT8(KMarker, ":");
+ TBuf8<3> searchString;
+ searchString = KMarker;
+
+ TInt dBLen = pluginDbFileContents.Length();
+ for (TInt i = 0; i < dBLen; i++)
+ {
+ if (pluginDbFileContents[i] == ':')
+ {
+ numIds++;
+ }
+ }//End for
+ }//End check
+ CleanupStack::PopAndDestroy(file);
+ return numIds;
+ }
+
+void CTAuthSvrStepBase::CreatePinPluginInputFileL(TPinPluginDialogOperation aOperation, TPinValue aPinValue)
+ {
+ RFileWriteStream stream;
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ TInt err = stream.Replace(fs, KInputFile, EFileWrite | EFileShareExclusive);
+ User::LeaveIfError(err);
+ stream.PushL();
+
+ MStreamBuf* streamBuf = stream.Sink();
+ streamBuf->SeekL(MStreamBuf::EWrite, EStreamEnd);
+ stream.WriteInt32L(aOperation);
+ stream.WriteInt32L(aPinValue.Length());
+ stream.WriteL(aPinValue);
+ stream.WriteInt32L(0);
+ stream.WriteInt32L(4);
+ TPinPluginDialogResult cmdResult = EOk;
+ stream.WriteInt32L(cmdResult);
+ aOperation = EPinPluginInfo;
+ stream.WriteInt32L(aOperation);
+ TPinPluginDialogResult cmdFinalResult = EOk;
+ stream.WriteInt32L(cmdFinalResult);
+ stream.WriteInt32L(2);
+ stream.CommitL();
+ CleanupStack::PopAndDestroy(); // stream
+
+ }
+
+TPinValue CTAuthSvrStepBase::GetPinFromOutputFileL()
+ {
+ RFileReadStream stream;
+ RFs fs;
+ TPinValue pinValue;
+
+ User::LeaveIfError(fs.Connect());
+ TInt err = stream.Open(fs, KOutputFile, EFileRead | EFileShareExclusive);
+ if(err == KErrNotFound)
+ {
+ pinValue.Copy(_L("11111"));
+ return pinValue;
+ }
+
+ User::LeaveIfError(err);
+ stream.PushL();
+
+ MStreamBuf* streamBuf = stream.Source();
+
+ stream.ReadInt32L();
+ TInt pinValueLength = stream.ReadInt32L();
+ HBufC8* pinValueBuf = HBufC8::NewMaxLC(pinValueLength);
+ TPtr8 pinValuePtr(pinValueBuf->Des());
+ stream.ReadL(pinValuePtr, pinValueLength);
+ pinValue.Copy(pinValuePtr);
+
+ CleanupStack::PopAndDestroy(2, &stream);
+
+ return pinValue;
+ }
+
+AuthServer::TIdentityId CTAuthSvrStepBase::getLastAuthId()
+/**
+ Retrieve the last Identity that was authenticated from the Global Db file
+ @return The last authenticated Identity
+ */
+ {
+ TIdentityId lastId;
+ lastId = 0;
+
+ HBufC* valueFromFile;
+ TInt ret = 0;
+ TInt err = 0;
+
+ TDriveUnit sysDrive (RFs::GetSystemDrive());
+ TBuf<128> authSvrPolicyFile (sysDrive.Name());
+ authSvrPolicyFile.Append(KAuthSvrPolicyFile);
+
+ TRAP(err, ret = readFromNamedConfigL(authSvrPolicyFile, KLastAuthIdTag, valueFromFile));
+
+ if (KErrNotFound == ret)
+ {
+ ERR_PRINTF3(_L("Error while getting last AuthId. Tag %S not found in %S file"), KLastAuthIdTag, &authSvrPolicyFile);
+ }
+ else
+ {
+ TLex input (*valueFromFile);
+ TRadix aRadix = EDecimal;
+ input.Val(lastId, aRadix);
+ RDebug::Print(_L("UserId that is retrieved from file = %u"), lastId);
+ }
+
+ delete valueFromFile;
+
+ return lastId;
+ }
+
+
+void CTAuthSvrStepBase::ClientMessage(TBool aIsMessage, const TDesC& aDisplayString)
+ {
+ TDriveUnit sysDrive (RFs::GetSystemDrive());
+ TDriveName sysDriveName (sysDrive.Name());
+ TBuf<128> fileName (sysDriveName);
+
+ fileName.Append(KAuthSvrPolicyFile);
+ CIniData* file=NULL;
+ TRAPD(r,file=CIniData::NewL(fileName));
+ CleanupStack::PushL(file);
+ if(r!=KErrNone)
+ {
+ RDebug::Print(_L("Unable to create CIniData object. Error = %d, File = %S"), r, &fileName);
+ }
+
+ if(aIsMessage)
+ {
+ TBool ret=file->SetValue(KPluginIniSection, KDisplayMessage, aDisplayString);
+ file->WriteToFileL();
+ }
+ else
+ {
+ TBool ret=file->SetValue(KPluginIniSection, KDisplayMessage, KNullDesC());
+ }
+ file->WriteToFileL();
+ CleanupStack::PopAndDestroy(file);
+ }
+
+//Implementation of member functions for CTStepActSch
+
+TVerdict CTStepActSch::doTestStepPreambleL()
+/**
+ Override CTestStep by allocating an active scheduler which is available to the subclass.
+ @return This test step's result, which isn't actually used by ThreadStepExecutionL.
+ */
+ {
+ CTAuthSvrStepBase::doTestStepPreambleL();
+ iActSchd = new(ELeave) CActiveScheduler;
+ return TestStepResult();
+ }
+
+
+TVerdict CTStepActSch::doTestStepPostambleL()
+/**
+ Override CTestStep by deleting the active scheduler which allocated in doTestStepPreambleL.
+ @return This test step's result, which isn't actually used by ThreadStepExecutionL.
+ */
+ {
+ CTAuthSvrStepBase::doTestStepPostambleL();
+ delete iActSchd;
+ return TestStepResult();
+ }
+
+/**
+ Utility clean up function used when working with locally declared arrays
+ */
+void CleanupEComArray(TAny* aArrayOfPlugins)
+ {
+ (static_cast<RImplInfoPtrArray*> (aArrayOfPlugins))->ResetAndDestroy();
+ (static_cast<RImplInfoPtrArray*> (aArrayOfPlugins))->Close();
+ }