summaryrefslogtreecommitdiff
path: root/src/vm/security.h
blob: fa4840998e81f1b06ea52652c9e5b182b4bce8f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
// 

#ifndef __security_h__
#define __security_h__

//
// Stubbed out implementation of security subsystem
// TODO: Eliminate this file
//

enum SecurityStackWalkType
{
    SSWT_DECLARATIVE_DEMAND = 1,
    SSWT_IMPERATIVE_DEMAND = 2,
    SSWT_DEMAND_FROM_NATIVE = 3,
    SSWT_IMPERATIVE_ASSERT = 4,
    SSWT_DENY_OR_PERMITONLY = 5,
    SSWT_LATEBOUND_LINKDEMAND = 6,
    SSWT_COUNT_OVERRIDES = 7,
    SSWT_GET_ZONE_AND_URL = 8,
};

// special flags
#define SECURITY_UNMANAGED_CODE                 0
#define SECURITY_SKIP_VER                       1
#define REFLECTION_TYPE_INFO                    2
#define SECURITY_ASSERT                         3
#define REFLECTION_MEMBER_ACCESS                4
#define SECURITY_SERIALIZATION                  5
#define REFLECTION_RESTRICTED_MEMBER_ACCESS     6
#define SECURITY_FULL_TRUST                     7
#define SECURITY_BINDING_REDIRECTS              8

// Ultimately this will become the only interface through
// which the VM will access security code.

namespace Security
{
    inline BOOL IsTransparencyEnforcementEnabled() { return false; }

    inline BOOL CanCallUnmanagedCode(Module *pModule) { return true; }

#ifndef DACCESS_COMPILE
    inline BOOL CanTailCall(MethodDesc* pMD) { return true; }
    inline BOOL CanHaveRVA(Assembly * pAssembly) { return true; }
    inline BOOL CanAccessNonVerifiableExplicitField(MethodDesc* pMD) { return true; }
    inline BOOL CanSkipVerification(MethodDesc * pMethod) { return true; }
#endif

    inline BOOL CanSkipVerification(DomainAssembly * pAssembly) { return true; }

    // ----------------------------------------
    // SecurityAttributes
    // ----------------------------------------

    void CopyByteArrayToEncoding(IN U1ARRAYREF* pArray, OUT PBYTE* pbData, OUT DWORD* cbData);
    void CopyEncodingToByteArray(IN PBYTE   pbData, IN DWORD   cbData, IN OBJECTREF* pArray);    

    inline void SpecialDemand(SecurityStackWalkType eType, DWORD whatPermission) { }

    // Transparency checks
    inline BOOL IsMethodTransparent(MethodDesc * pMD) { return false; }
    inline BOOL IsMethodCritical(MethodDesc * pMD) { return true; }
    inline BOOL IsMethodSafeCritical(MethodDesc * pMD) { return false; }

    inline BOOL IsTypeCritical(MethodTable *pMT) { return true; }
    inline BOOL IsTypeSafeCritical(MethodTable *pMT) { return false; }
    inline BOOL IsTypeTransparent(MethodTable * pMT) { return false; }
    inline BOOL IsTypeAllTransparent(MethodTable * pMT) { return false; }

    inline BOOL IsFieldTransparent(FieldDesc * pFD) { return false; }
    inline BOOL IsFieldCritical(FieldDesc * pFD) { return true; }
    inline BOOL IsFieldSafeCritical(FieldDesc * pFD) { return false; }

    inline BOOL IsTokenTransparent(Module* pModule, mdToken token) { return false; }

    inline BOOL CheckCriticalAccess(AccessCheckContext* pContext,
        MethodDesc* pOptionalTargetMethod = NULL,
        FieldDesc* pOptionalTargetField = NULL,
        MethodTable * pOptionalTargetType = NULL)
    {
        return true;
    }

    inline void CheckLinkDemandAgainstAppDomain(MethodDesc *pMD)
    {
    }
};

#endif