sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // DBMS - security policy file tool sl@0: // sl@0: // sl@0: sl@0: #include sl@0: #include "cn_main.h" sl@0: #include "cn_bin2txt.h" sl@0: #include "cn_util.h" sl@0: #include "SC_StrmIn.h" sl@0: #include "SC_TextOut.h" sl@0: sl@0: using namespace DBSC; sl@0: sl@0: /** sl@0: CSPBin2Txt::RunL() implements pure virtual CCmdProcessor::RunL(). sl@0: It opens the input binary policy file and creates in-memory presentation of the sl@0: policies found there. Then it stores the policies in a text file (in human readable format). sl@0: CSPBin2Txt::RunL() uses TPDStreamLoader class to load policies for the binary file sl@0: and CPDTextPersister class to store them in a text file. sl@0: @leave System-wide error codes in case of failure sl@0: @see CCmdProcessor::RunL() sl@0: @see TPDStreamLoader sl@0: @see CPDTextPersister sl@0: */ sl@0: void CSPBin2Txt::RunL() sl@0: { sl@0: RFileReadStream streamIn; sl@0: CleanupClosePushL(streamIn); sl@0: __LEAVE_IF_ERROR(streamIn.Open(iFs, iCmdLinePrm.iBinFile, EFileRead)); sl@0: sl@0: TPDStreamLoader streamLoader(streamIn); sl@0: sl@0: TUid domainUid = TSPConvUtil::UidFromFileNameL(iCmdLinePrm.iBinFile); sl@0: sl@0: CPolicyDomain* policyDomain = CPolicyDomain::NewLC(domainUid, streamLoader); sl@0: sl@0: CPDTextPersister* textPersister = CPDTextPersister::NewLC(iFs, iCmdLinePrm.iTxtFile); sl@0: policyDomain->ExternalizeL(*textPersister); sl@0: CleanupStack::PopAndDestroy(textPersister); sl@0: sl@0: CleanupStack::PopAndDestroy(policyDomain); sl@0: CleanupStack::PopAndDestroy(&streamIn); sl@0: } sl@0: sl@0: /** sl@0: */ sl@0: CSPBin2Txt::~CSPBin2Txt() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: */ sl@0: inline CSPBin2Txt::CSPBin2Txt(RFs& aFs, const TCmdLinePrm& aCmdLinePrm) : sl@0: CCmdProcessor(aFs, aCmdLinePrm) sl@0: { sl@0: } sl@0: sl@0: /** sl@0: Standard phase-one CSPBin2Txt factory method. sl@0: @param aFs File server session sl@0: @param aCmdLinePrm Parsed command line arguments: requested action, input and output file paths sl@0: @return A pointer to successfully created CSPBin2Txt instance. sl@0: @leave KErrNoMemory - not enough memory sl@0: @leave KErrNotFound - input file not found sl@0: @leave KErrAlreadyExists - output file already exists sl@0: */ sl@0: CSPBin2Txt* CSPBin2Txt::NewLC(RFs& aFs, const TCmdLinePrm& aCmdLinePrm) sl@0: { sl@0: __ASSERT(aCmdLinePrm.iAction == TCmdLinePrm::EBin2Txt); sl@0: CSPBin2Txt* self = new (ELeave) CSPBin2Txt(aFs, aCmdLinePrm); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: Standard phase-two CSPBin2Txt construction method. sl@0: */ sl@0: void CSPBin2Txt::ConstructL() sl@0: { sl@0: __ASSERT(iCmdLinePrm.iTxtFile.Length() > 0); sl@0: __ASSERT(iCmdLinePrm.iBinFile.Length() > 0); sl@0: if(!TSPConvUtil::FileExists(iFs, iCmdLinePrm.iBinFile)) sl@0: { sl@0: _LIT(KText, "\"UID\" file \"%S\" not found\n"); sl@0: TSPConvUtil::Print(KText, iCmdLinePrm.iBinFile); sl@0: __LEAVE(KErrNotFound); sl@0: } sl@0: if(TSPConvUtil::FileExists(iFs, iCmdLinePrm.iTxtFile)) sl@0: { sl@0: _LIT(KText, "File \"%S\" already exists!\n"); sl@0: TSPConvUtil::Print(KText, iCmdLinePrm.iTxtFile); sl@0: __LEAVE(KErrAlreadyExists); sl@0: } sl@0: }