ReactOS  0.4.13-dev-92-gf251225
secursup.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Named Pipe FileSystem
3  * LICENSE: BSD - See COPYING.ARM in the top level directory
4  * FILE: drivers/filesystems/npfs/secursup.c
5  * PURPOSE: Pipes Security Support
6  * PROGRAMMERS: ReactOS Portable Systems Group
7  */
8 
9 /* INCLUDES *******************************************************************/
10 
11 #include "npfs.h"
12 
13 // File ID number for NPFS bugchecking support
14 #define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_SECURSUP)
15 
16 /* FUNCTIONS ******************************************************************/
17 
19 NTAPI
21 {
24  PAGED_CODE();
25 
26  ClientContext = Ccb->ClientContext;
27  if (ClientContext)
28  {
30  }
31  else
32  {
34  }
35  return Status;
36 }
37 
38 VOID
39 NTAPI
41 {
43  PVOID ClientToken;
44 
45  if (!ClientContext) return;
46 
47  TokenType = SeTokenType(ClientContext->ClientToken);
48  ClientToken = ClientContext->ClientToken;
49  if ((TokenType == TokenPrimary) || (ClientToken))
50  {
51  ObDereferenceObject(ClientToken);
52  }
54 }
55 
56 VOID
57 NTAPI
59  IN PNP_DATA_QUEUE_ENTRY DataQueueEntry)
60 {
61  PAGED_CODE();
62 
63  if (!DataQueueEntry->ClientSecurityContext) return;
64 
65  NpFreeClientSecurityContext(Ccb->ClientContext);
66  Ccb->ClientContext = DataQueueEntry->ClientSecurityContext;
67  DataQueueEntry->ClientSecurityContext = NULL;
68 }
69 
70 VOID
71 NTAPI
73 {
74  PAGED_CODE();
75 
76  NpFreeClientSecurityContext(Ccb->ClientContext);
77  Ccb->ClientContext = NULL;
78 }
79 
81 NTAPI
83  IN PSECURITY_QUALITY_OF_SERVICE SecurityQos,
85 {
88  PAGED_CODE();
89 
90  if (SecurityQos)
91  {
92  Ccb->ClientQos = *SecurityQos;
93  }
94  else
95  {
96  Ccb->ClientQos.Length = sizeof(Ccb->ClientQos);
97  Ccb->ClientQos.ImpersonationLevel = SecurityImpersonation;
98  Ccb->ClientQos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
99  Ccb->ClientQos.EffectiveOnly = TRUE;
100  }
101 
103 
104  if (Ccb->ClientQos.ContextTrackingMode == SECURITY_DYNAMIC_TRACKING)
105  {
107  Ccb->ClientContext = NULL;
108  return Status;
109  }
110 
112  sizeof(*ClientContext),
114  Ccb->ClientContext = ClientContext;
116 
118  if (!NT_SUCCESS(Status))
119  {
120  ExFreePool(Ccb->ClientContext);
121  Ccb->ClientContext = NULL;
122  }
123 
124  return Status;
125 }
126 
127 NTSTATUS
128 NTAPI
130  IN PNP_CCB Ccb,
133 {
136  PAGED_CODE();
137 
138  if (NamedPipeEnd == FILE_PIPE_SERVER_END || Ccb->ClientQos.ContextTrackingMode != SECURITY_DYNAMIC_TRACKING)
139  {
140  NewContext = NULL;
142  }
143  else
144  {
146  sizeof(*NewContext),
149 
150  Status = SeCreateClientSecurity(Thread, &Ccb->ClientQos, 0, NewContext);
151  if (!NT_SUCCESS(Status))
152  {
154  NewContext = NULL;
155  }
156  }
157  *Context = NewContext;
158  return Status;
159 }
160 
161 /* EOF */
#define IN
Definition: typedefs.h:38
#define TRUE
Definition: types.h:120
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
PVOID NTAPI ExAllocatePoolWithQuotaTag(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag)
Definition: expool.c:2939
LONG NTSTATUS
Definition: precomp.h:26
#define NPFS_CLIENT_SEC_CTX_TAG
Definition: npfs.h:62
VOID NTAPI ObDereferenceObject(IN PVOID Object)
Definition: obref.c:375
#define PAGED_CODE()
Definition: video.h:57
Definition: npfs.h:258
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
smooth NULL
Definition: ftsmooth.c:416
VOID NTAPI NpCopyClientContext(IN PNP_CCB Ccb, IN PNP_DATA_QUEUE_ENTRY DataQueueEntry)
Definition: secursup.c:58
NTKERNELAPI NTSTATUS NTAPI SeCreateClientSecurity(IN PETHREAD Thread, IN PSECURITY_QUALITY_OF_SERVICE QualityOfService, IN BOOLEAN RemoteClient, OUT PSECURITY_CLIENT_CONTEXT ClientContext)
Definition: access.c:506
NTKERNELAPI TOKEN_TYPE NTAPI SeTokenType(IN PACCESS_TOKEN Token)
Definition: token.c:1780
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
_In_ PVOID ClientContext
Definition: netioddk.h:55
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
#define FILE_PIPE_SERVER_END
Definition: iotypes.h:85
NTSTATUS NTAPI NpImpersonateClientContext(IN PNP_CCB Ccb)
Definition: secursup.c:20
#define SECURITY_DYNAMIC_TRACKING
Definition: setypes.h:103
Definition: npfs.h:148
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
Definition: cdprocs.h:593
enum _TOKEN_TYPE TOKEN_TYPE
NTSTATUS NTAPI SeImpersonateClientEx(IN PSECURITY_CLIENT_CONTEXT ClientContext, IN PETHREAD ServerThread OPTIONAL)
Definition: access.c:589
Status
Definition: gdiplustypes.h:24
VOID NTAPI NpFreeClientSecurityContext(IN PSECURITY_CLIENT_CONTEXT ClientContext)
Definition: secursup.c:40
_In_ FLT_SET_CONTEXT_OPERATION _In_ PFLT_CONTEXT NewContext
Definition: fltkernel.h:1468
NTSTATUS NTAPI NpInitializeSecurity(IN PNP_CCB Ccb, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, IN PETHREAD Thread)
Definition: secursup.c:82
unsigned int ULONG
Definition: retypes.h:1
#define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE
#define STATUS_CANNOT_IMPERSONATE
Definition: ntstatus.h:491
return STATUS_SUCCESS
Definition: btrfs.c:2725
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
VOID NTAPI NpUninitializeSecurity(IN PNP_CCB Ccb)
Definition: secursup.c:72
NTSTATUS NTAPI NpGetClientSecurityContext(IN ULONG NamedPipeEnd, IN PNP_CCB Ccb, IN PETHREAD Thread, IN PSECURITY_CLIENT_CONTEXT *Context)
Definition: secursup.c:129
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_ BOOLEAN _In_ TOKEN_TYPE TokenType
Definition: sefuncs.h:417