diff -r 000000000000 -r 83f4b4db085c toolsandutils/e32tools/seclib/seclib.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolsandutils/e32tools/seclib/seclib.cpp Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,137 @@ +// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "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: +// e32tools/seclib/seclib.cpp +// Get the capabilities of an emulator / e32image. +// +// + +#include +#include +#include "seclib.h" + +#include "e32image.h" +#include "h_utl.h" + +#define __E32DEBUG_H__ +#include "setcap.h" + + +GLDEF_C TInt GetSecurityInfo(const char* aFileName, SBinarySecurityInfo& aInfo) + { + // Check we have a filename + if (!aFileName) + { + return KErrNotFound; + } + + // Zero the capabilities + memset(aInfo.iCapabilities, 0, KCapabilitySetMaxSize); + + // We don't want to update the image's capabilities + CapabilitySet = EFalse; + + // Try opening the file as an E32Image + E32ImageFile f; + TInt r = f.Open(aFileName); + + if (r==KErrCorrupt || r==KErrNotSupported || r==1) + { +#ifndef __LINUX__ + // Try emulator format + aInfo.iE32Image = EFalse; + + HANDLE file = CreateFileA(aFileName, + GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + 0, + NULL); + if (file == INVALID_HANDLE_VALUE) + { + return GetLastError(); + } + + r = SetCap(file); +#endif + } + else + { + // Extract caps from E32Image + aInfo.iE32Image = ETrue; + + r = SetCap(f.iOrigHdr); + } + + if (r == KErrNone) + { + aInfo.iSecureId = SecureId.iId; + aInfo.iVendorId = VendorId.iId; + *(SCapabilitySet*)(aInfo.iCapabilities) = Capability; + } + + return r; + } + + +#ifndef __LINUX__ +GLDEF_C TInt GetSecurityInfo(const wchar_t* aFileName, SBinarySecurityInfo& aInfo) + { + // Check we have a filename + if (!aFileName) + { + return KErrNotFound; + } + + // Zero the capabilities + memset(aInfo.iCapabilities, 0, KCapabilitySetMaxSize); + + // We don't want to update the image's capabilities + CapabilitySet = EFalse; + + // Try opening the file as an E32Image + E32ImageFile f; + TInt r = f.Open(aFileName); + + if (r==KErrCorrupt || r==KErrNotSupported) + { + // Try emulator format + aInfo.iE32Image = EFalse; + + HANDLE file = CreateFileW(aFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); + if (file == INVALID_HANDLE_VALUE) + { + return GetLastError(); + } + + r = SetCap(file); + } + else + { + // Extract caps from E32Image + aInfo.iE32Image = ETrue; + + r = SetCap(f.iOrigHdr); + } + + if (r == KErrNone) + { + aInfo.iSecureId = SecureId.iId; + aInfo.iVendorId = VendorId.iId; + *(SCapabilitySet*)(aInfo.iCapabilities) = Capability; + } + + return r; + } +#endif