ReactOS  0.4.14-dev-854-gb9426a3
clictx.c
Go to the documentation of this file.
1 /*
2  * ReactOS Authorization Framework
3  * Copyright (C) 2005 - 2006 ReactOS Team
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 /*
20  * PROJECT: ReactOS Authorization Framework
21  * FILE: lib/authz/clictx.c
22  * PURPOSE: Authorization Framework
23  * PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
24  *
25  * UPDATE HISTORY:
26  * 10/07/2005 Created
27  */
28 
29 #include "precomp.h"
30 
31 #define NDEBUG
32 #include <debug.h>
33 
34 /*
35  * @unimplemented
36  */
38 BOOL
39 WINAPI
41  IN PSID UserSid,
42  IN AUTHZ_RESOURCE_MANAGER_HANDLE AuthzResourceManager,
43  IN PLARGE_INTEGER pExpirationTime,
44  IN LUID Identifier,
45  IN PVOID DynamicGroupArgs,
46  OUT PAUTHZ_CLIENT_CONTEXT_HANDLE pAuthzClientContext)
47 {
48  BOOL Ret = FALSE;
49 
50  if (AuthzResourceManager != NULL && pExpirationTime != NULL && pAuthzClientContext != NULL &&
51  UserSid != NULL && IsValidSid(UserSid) && !(Flags & (AUTHZ_SKIP_TOKEN_GROUPS | AUTHZ_REQUIRE_S4U_LOGON)))
52  {
53  PAUTHZ_CLIENT_CONTEXT ClientCtx;
54  //PAUTHZ_RESMAN ResMan = (PAUTHZ_RESMAN)AuthzResourceManager;
55 
56  VALIDATE_RESMAN_HANDLE(AuthzResourceManager);
57 
59  sizeof(AUTHZ_CLIENT_CONTEXT));
60  if (ClientCtx != NULL)
61  {
62  DWORD SidLen;
63 
64  /* initialize the client context structure */
65 #if DBG
66  ClientCtx->Tag = CLIENTCTX_TAG;
67 #endif
68 
69  /* simply copy the SID */
70  SidLen = GetLengthSid(UserSid);
71  ClientCtx->UserSid = (PSID)LocalAlloc(LMEM_FIXED,
72  SidLen);
73  if (ClientCtx->UserSid == NULL)
74  {
75  LocalFree((HLOCAL)ClientCtx);
76  goto FailNoMemory;
77  }
78  CopySid(SidLen,
79  ClientCtx->UserSid,
80  UserSid);
81 
82  ClientCtx->AuthzResourceManager = AuthzResourceManager;
83  ClientCtx->Luid = Identifier;
84  ClientCtx->ExpirationTime.QuadPart = (pExpirationTime != NULL ? pExpirationTime->QuadPart : 0);
85  ClientCtx->ServerContext = NULL; /* FIXME */
86  ClientCtx->DynamicGroupArgs = DynamicGroupArgs;
87 
88  /* return the client context handle */
89  *pAuthzClientContext = (AUTHZ_CLIENT_CONTEXT_HANDLE)ClientCtx;
90  Ret = TRUE;
91  }
92  else
93  {
94 FailNoMemory:
96  }
97  }
98  else
100 
101  return Ret;
102 }
103 
104 
105 /*
106  * @unimplemented
107  */
108 AUTHZAPI
109 BOOL
110 WINAPI
114  OUT PDWORD pSizeRequired,
115  OUT PVOID Buffer)
116 {
117  BOOL Ret = FALSE;
118 
119  if (hAuthzClientContext != NULL && pSizeRequired != NULL)
120  {
121  PAUTHZ_CLIENT_CONTEXT ClientCtx = (PAUTHZ_CLIENT_CONTEXT)hAuthzClientContext;
122 
123  VALIDATE_CLIENTCTX_HANDLE(hAuthzClientContext);
124 
125  switch (InfoClass)
126  {
128  {
129  DWORD SidLen = GetLengthSid(ClientCtx->UserSid);
130  *pSizeRequired = SidLen;
131  if (BufferSize < SidLen)
132  {
134  }
135  else
136  {
137  Ret = CopySid(SidLen,
138  (PSID)Buffer,
139  ClientCtx->UserSid);
140  }
141  break;
142  }
143 
146  break;
147 
150  break;
151 
154  break;
155 
157  *pSizeRequired = sizeof(LARGE_INTEGER);
158  if (BufferSize < sizeof(LARGE_INTEGER) || Buffer == NULL)
159  {
161  }
162  else
163  {
164  *((PLARGE_INTEGER)Buffer) = ClientCtx->ExpirationTime;
165  Ret = TRUE;
166  }
167  break;
168 
170  *pSizeRequired = sizeof(AUTHZ_CLIENT_CONTEXT_HANDLE);
172  {
174  }
175  else
176  {
178  Ret = TRUE;
179  }
180  break;
181 
183  *pSizeRequired = sizeof(LUID);
184  if (BufferSize < sizeof(LUID) || Buffer == NULL)
185  {
187  }
188  else
189  {
190  *((PLUID)Buffer) = ClientCtx->Luid;
191  Ret = TRUE;
192  }
193  break;
194 
195  default:
197  break;
198  }
199  }
200  else
202 
203  return Ret;
204 }
205 
206 
207 /*
208  * @implemented
209  */
210 AUTHZAPI
211 BOOL
212 WINAPI
214 {
215  BOOL Ret = FALSE;
216 
217  if (AuthzClientContext != NULL)
218  {
219  PAUTHZ_CLIENT_CONTEXT ClientCtx = (PAUTHZ_CLIENT_CONTEXT)AuthzClientContext;
220 
221  VALIDATE_CLIENTCTX_HANDLE(AuthzClientContext);
222 
223  if (ClientCtx->UserSid != NULL)
224  {
225  LocalFree((HLOCAL)ClientCtx->UserSid);
226  }
227 
228  LocalFree((HLOCAL)ClientCtx);
229  Ret = TRUE;
230  }
231  else
233 
234  return Ret;
235 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
#define IN
Definition: typedefs.h:38
#define TRUE
Definition: types.h:120
enum _AUTHZ_CONTEXT_INFORMATION_CLASS AUTHZ_CONTEXT_INFORMATION_CLASS
AUTHZAPI BOOL WINAPI AuthzGetInformationFromContext(IN AUTHZ_CLIENT_CONTEXT_HANDLE hAuthzClientContext, IN AUTHZ_CONTEXT_INFORMATION_CLASS InfoClass, IN DWORD BufferSize, OUT PDWORD pSizeRequired, OUT PVOID Buffer)
Definition: clictx.c:111
AUTHZ_RESOURCE_MANAGER_HANDLE AuthzResourceManager
Definition: precomp.h:56
LARGE_INTEGER ExpirationTime
Definition: precomp.h:58
struct _LUID * PLUID
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define VALIDATE_CLIENTCTX_HANDLE(handle)
Definition: precomp.h:27
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
struct _LUID LUID
HANDLE AUTHZ_CLIENT_CONTEXT_HANDLE
Definition: authz.h:45
unsigned int BOOL
Definition: ntddk_ex.h:94
PVOID DynamicGroupArgs
Definition: precomp.h:60
#define AUTHZ_REQUIRE_S4U_LOGON
Definition: authz.h:36
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
HANDLE * PAUTHZ_CLIENT_CONTEXT_HANDLE
Definition: authz.h:45
struct _AUTHZ_CLIENT_CONTEXT * PAUTHZ_CLIENT_CONTEXT
#define LMEM_FIXED
Definition: winbase.h:349
DWORD WINAPI GetLengthSid(PSID pSid)
Definition: security.c:798
#define VALIDATE_RESMAN_HANDLE(handle)
Definition: precomp.h:26
#define WINAPI
Definition: msvc.h:6
#define BufferSize
Definition: classpnp.h:419
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:417
AUTHZAPI BOOL WINAPI AuthzInitializeContextFromSid(IN DWORD Flags, IN PSID UserSid, IN AUTHZ_RESOURCE_MANAGER_HANDLE AuthzResourceManager, IN PLARGE_INTEGER pExpirationTime, IN LUID Identifier, IN PVOID DynamicGroupArgs, OUT PAUTHZ_CLIENT_CONTEXT_HANDLE pAuthzClientContext)
Definition: clictx.c:40
struct _SID * PSID
Definition: eventlog.c:35
union _LARGE_INTEGER LARGE_INTEGER
AUTHZAPI BOOL WINAPI AuthzFreeContext(IN AUTHZ_CLIENT_CONTEXT_HANDLE AuthzClientContext)
Definition: clictx.c:213
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
#define AUTHZ_SKIP_TOKEN_GROUPS
Definition: authz.h:35
AUTHZ_CLIENT_CONTEXT_HANDLE ServerContext
Definition: precomp.h:59
DWORD * PDWORD
Definition: pedump.c:68
#define OUT
Definition: typedefs.h:39
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:92
BOOL WINAPI IsValidSid(PSID pSid)
Definition: security.c:698
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1373
BOOL WINAPI CopySid(DWORD nDestinationSidLength, PSID pDestinationSid, PSID pSourceSid)
Definition: security.c:591
#define AUTHZAPI
Definition: authz.h:21
union _LARGE_INTEGER * PLARGE_INTEGER
Definition: file.c:85
LONGLONG QuadPart
Definition: typedefs.h:112
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10