partial implementation of AuthzInitializeContextFromSid(),
AuthzGetInformationFromContext() and AuthzFreeContext()
Modified: trunk/reactos/lib/authz/authz.c
Modified: trunk/reactos/lib/authz/authz.xml
Added: trunk/reactos/lib/authz/clictx.c
Modified: trunk/reactos/lib/authz/precomp.h
Modified: trunk/reactos/lib/authz/resman.c
_____
Modified: trunk/reactos/lib/authz/authz.c
--- trunk/reactos/lib/authz/authz.c 2006-01-12 00:19:35 UTC (rev
20797)
+++ trunk/reactos/lib/authz/authz.c 2006-01-12 00:23:47 UTC (rev
20798)
@@ -122,19 +122,6 @@
AUTHZAPI
BOOL
WINAPI
-AuthzFreeContext(IN AUTHZ_CLIENT_CONTEXT_HANDLE AuthzClientContext)
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-AUTHZAPI
-BOOL
-WINAPI
AuthzFreeHandle(IN AUTHZ_ACCESS_CHECK_RESULTS_HANDLE AuthzHandle)
{
UNIMPLEMENTED;
@@ -148,23 +135,6 @@
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)
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-AUTHZAPI
-BOOL
-WINAPI
AuthzInitializeContextFromAuthzContext(IN DWORD flags,
IN AUTHZ_CLIENT_CONTEXT_HANDLE
AuthzHandle,
IN PLARGE_INTEGER
ExpirationTime,
@@ -183,25 +153,6 @@
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)
-{
- UNIMPLEMENTED;
- return FALSE;
-}
-
-
-/*
- * @unimplemented
- */
-AUTHZAPI
-BOOL
-WINAPI
AuthzInitializeContextFromToken(IN DWORD Flags,
IN HANDLE TokenHandle,
IN AUTHZ_RESOURCE_MANAGER_HANDLE
AuthzResourceManager,
_____
Modified: trunk/reactos/lib/authz/authz.xml
--- trunk/reactos/lib/authz/authz.xml 2006-01-12 00:19:35 UTC (rev
20797)
+++ trunk/reactos/lib/authz/authz.xml 2006-01-12 00:23:47 UTC (rev
20798)
@@ -11,6 +11,7 @@
<library>kernel32</library>
<library>advapi32</library>
<file>authz.c</file>
+ <file>clictx.c</file>
<file>resman.c</file>
<file>authz.rc</file>
<pch>precomp.h</pch>
_____
Added: trunk/reactos/lib/authz/clictx.c
--- trunk/reactos/lib/authz/clictx.c 2006-01-12 00:19:35 UTC (rev
20797)
+++ trunk/reactos/lib/authz/clictx.c 2006-01-12 00:23:47 UTC (rev
20798)
@@ -0,0 +1,233 @@
+/*
+ * ReactOS Authorization Framework
+ * Copyright (C) 2005 - 2006 ReactOS Team
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+ */
+/* $Id: aclui.c 18173 2005-09-30 18:54:48Z weiden $
+ *
+ * PROJECT: ReactOS Authorization Framework
+ * FILE: lib/authz/clictx.c
+ * PURPOSE: Authorization Framework
+ * PROGRAMMER: Thomas Weidenmueller <w3seek(a)reactos.com>
+ *
+ * UPDATE HISTORY:
+ * 10/07/2005 Created
+ */
+#include <precomp.h>
+
+
+/*
+ * @unimplemented
+ */
+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)
+{
+ BOOL Ret = FALSE;
+
+ if (AuthzResourceManager != NULL && pExpirationTime != NULL &&
pAuthzClientContext != NULL &&
+ UserSid != NULL && IsValidSid(UserSid) && !(Flags &
(AUTHZ_SKIP_TOKEN_GROUPS | AUTHZ_REQUIRE_S4U_LOGON)))
+ {
+ PAUTHZ_CLIENT_CONTEXT ClientCtx;
+ //PAUTHZ_RESMAN ResMan = (PAUTHZ_RESMAN)AuthzResourceManager;
+
+ VALIDATE_RESMAN_HANDLE(AuthzResourceManager);
+
+ ClientCtx = (PAUTHZ_CLIENT_CONTEXT)LocalAlloc(LMEM_FIXED,
+
sizeof(AUTHZ_CLIENT_CONTEXT));
+ if (ClientCtx != NULL)
+ {
+ DWORD SidLen;
+
+ /* initialize the client context structure */
+#if DBG
+ ClientCtx->Tag = CLIENTCTX_TAG;
+#endif
+
+ /* simply copy the SID */
+ SidLen = GetLengthSid(UserSid);
+ ClientCtx->UserSid = (PSID)LocalAlloc(LMEM_FIXED,
+ SidLen);
+ if (ClientCtx->UserSid == NULL)
+ {
+ LocalFree((HLOCAL)ClientCtx);
+ goto FailNoMemory;
+ }
+ CopySid(SidLen,
+ ClientCtx->UserSid,
+ UserSid);
+
+ ClientCtx->AuthzResourceManager = AuthzResourceManager;
+ ClientCtx->Luid = Identifier;
+ ClientCtx->ExpirationTime.QuadPart = (pExpirationTime !=
NULL ? pExpirationTime->QuadPart : 0);
+ ClientCtx->ServerContext = NULL; /* FIXME */
+ ClientCtx->DynamicGroupArgs = DynamicGroupArgs;
+
+ /* return the client context handle */
+ *pAuthzClientContext =
(AUTHZ_CLIENT_CONTEXT_HANDLE)ClientCtx;
+ Ret = TRUE;
+ }
+ else
+ {
+FailNoMemory:
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ }
+ }
+ else
+ SetLastError(ERROR_INVALID_PARAMETER);
+
+ return Ret;
+}
+
+
+/*
+ * @unimplemented
+ */
+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)
+{
+ BOOL Ret = FALSE;
+
+ if (hAuthzClientContext != NULL && pSizeRequired != NULL)
+ {
+ PAUTHZ_CLIENT_CONTEXT ClientCtx =
(PAUTHZ_CLIENT_CONTEXT)hAuthzClientContext;
+
+ VALIDATE_CLIENTCTX_HANDLE(hAuthzClientContext);
+
+ switch (InfoClass)
+ {
+ case AuthzContextInfoUserSid:
+ {
+ DWORD SidLen = GetLengthSid(ClientCtx->UserSid);
+ *pSizeRequired = SidLen;
+ if (BufferSize < SidLen)
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ }
+ else
+ {
+ Ret = CopySid(SidLen,
+ (PSID)Buffer,
+ ClientCtx->UserSid);
+ }
+ break;
+ }
+
+ case AuthzContextInfoGroupsSids:
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ break;
+
+ case AuthzContextInfoRestrictedSids:
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ break;
+
+ case AuthzContextInfoPrivileges:
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ break;
+
+ case AuthzContextInfoExpirationTime:
+ *pSizeRequired = sizeof(LARGE_INTEGER);
+ if (BufferSize < sizeof(LARGE_INTEGER) || Buffer ==
NULL)
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ }
+ else
+ {
+ *((PLARGE_INTEGER)Buffer) =
ClientCtx->ExpirationTime;
+ Ret = TRUE;
+ }
+ break;
+
+ case AuthzContextInfoServerContext:
+ *pSizeRequired = sizeof(AUTHZ_CLIENT_CONTEXT_HANDLE);
+ if (BufferSize < sizeof(AUTHZ_CLIENT_CONTEXT_HANDLE) ||
Buffer == NULL)
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ }
+ else
+ {
+ *((PAUTHZ_CLIENT_CONTEXT_HANDLE)Buffer) =
ClientCtx->ServerContext;
+ Ret = TRUE;
+ }
+ break;
+
+ case AuthzContextInfoIdentifier:
+ *pSizeRequired = sizeof(LUID);
+ if (BufferSize < sizeof(LUID) || Buffer == NULL)
+ {
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ }
+ else
+ {
+ *((PLUID)Buffer) = ClientCtx->Luid;
+ Ret = TRUE;
+ }
+ break;
+
+ default:
+ SetLastError(ERROR_INVALID_PARAMETER);
+ break;
+ }
+ }
+ else
+ SetLastError(ERROR_INVALID_PARAMETER);
+
+ return Ret;
+}
+
+
+/*
+ * @implemented
+ */
+AUTHZAPI
+BOOL
+WINAPI
+AuthzFreeContext(IN AUTHZ_CLIENT_CONTEXT_HANDLE AuthzClientContext)
+{
+ BOOL Ret = FALSE;
+
+ if (AuthzClientContext != NULL)
+ {
+ PAUTHZ_CLIENT_CONTEXT ClientCtx =
(PAUTHZ_CLIENT_CONTEXT)AuthzClientContext;
+
+ VALIDATE_CLIENTCTX_HANDLE(AuthzClientContext);
+
+ if (ClientCtx->UserSid != NULL)
+ {
+ LocalFree((HLOCAL)ClientCtx->UserSid);
+ }
+
+ LocalFree((HLOCAL)ClientCtx);
+ Ret = TRUE;
+ }
+ else
+ SetLastError(ERROR_INVALID_PARAMETER);
+
+ return Ret;
+}
Property changes on: trunk/reactos/lib/authz/clictx.c
___________________________________________________________________
Name: svn:keywords
+ author date revision
Name: svn:eol-style
+ native
_____
Modified: trunk/reactos/lib/authz/precomp.h
--- trunk/reactos/lib/authz/precomp.h 2006-01-12 00:19:35 UTC (rev
20797)
+++ trunk/reactos/lib/authz/precomp.h 2006-01-12 00:23:47 UTC (rev
20798)
@@ -1,3 +1,6 @@
+#ifndef __AUTHZ_PRECOMP_H
+#define __AUTHZ_PRECOMP_H
+
#define _AUTHZ_
#include <windows.h>
#include <authz.h>
@@ -14,19 +17,54 @@
#if DBG
#define RESMAN_TAG 0x89ABCDEF
-#define VALID_RESMAN_HANDLE(handle) ASSERT(((PAUTHZ_RESMAN)handle)->Tag
== RESMAN_TAG)
+#define CLIENTCTX_TAG 0x789ABCDE
+#define VALIDATE_RESMAN_HANDLE(handle)
ASSERT(((PAUTHZ_RESMAN)handle)->Tag == RESMAN_TAG)
+#define VALIDATE_CLIENTCTX_HANDLE(handle)
ASSERT(((PAUTHZ_CLIENT_CONTEXT)handle)->Tag == CLIENTCTX_TAG)
#ifndef ASSERT
#define ASSERT(cond) if (!(cond)) { DbgPrint("%s:%i: ASSERTION %s
failed!\n", __FILE__, __LINE__, #cond ); }
#endif
#else
-#define VALID_RESMAN_HANDLE(handle)
+#define VALIDATE_RESMAN_HANDLE(handle)
+#define VALIDATE_CLIENTCTX_HANDLE(handle)
#ifndef ASSERT
#define ASSERT(cond)
#endif
#endif
+typedef struct _AUTHZ_RESMAN
+{
+#if DBG
+ DWORD Tag;
+#endif
+ PFN_AUTHZ_DYNAMIC_ACCESS_CHECK pfnAccessCheck;
+ PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS pfnComputeDynamicGroups;
+ PFN_AUTHZ_FREE_DYNAMIC_GROUPS pfnFreeDynamicGroups;
+
+ DWORD flags;
+ PSID UserSid;
+ LUID AuthenticationId;
+
+ WCHAR ResourceManagerName[1];
+} AUTHZ_RESMAN, *PAUTHZ_RESMAN;
+
+typedef struct _AUTHZ_CLIENT_CONTEXT
+{
+#if DBG
+ DWORD Tag;
+#endif
+
+ PSID UserSid;
+
+ AUTHZ_RESOURCE_MANAGER_HANDLE AuthzResourceManager;
+ LUID Luid;
+ LARGE_INTEGER ExpirationTime;
+ AUTHZ_CLIENT_CONTEXT_HANDLE ServerContext;
+ PVOID DynamicGroupArgs;
+} AUTHZ_CLIENT_CONTEXT, *PAUTHZ_CLIENT_CONTEXT;
+
+#endif /* __AUTHZ_PRECOMP_H */
/* EOF */
_____
Modified: trunk/reactos/lib/authz/resman.c
--- trunk/reactos/lib/authz/resman.c 2006-01-12 00:19:35 UTC (rev
20797)
+++ trunk/reactos/lib/authz/resman.c 2006-01-12 00:23:47 UTC (rev
20798)
@@ -1,6 +1,6 @@
/*
* ReactOS Authorization Framework
- * Copyright (C) 2005 ReactOS Team
+ * Copyright (C) 2005 - 2006 ReactOS Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -28,23 +28,7 @@
*/
#include <precomp.h>
-typedef struct _AUTHZ_RESMAN
-{
-#if DBG
- DWORD Tag;
-#endif
- PFN_AUTHZ_DYNAMIC_ACCESS_CHECK pfnAccessCheck;
- PFN_AUTHZ_COMPUTE_DYNAMIC_GROUPS pfnComputeDynamicGroups;
- PFN_AUTHZ_FREE_DYNAMIC_GROUPS pfnFreeDynamicGroups;
-
- DWORD flags;
- PSID UserSid;
- LUID AuthenticationId;
-
- WCHAR ResourceManagerName[1];
-} AUTHZ_RESMAN, *PAUTHZ_RESMAN;
-
static BOOL
AuthzpQueryToken(IN OUT PAUTHZ_RESMAN ResMan,
IN HANDLE hToken)
@@ -248,7 +232,7 @@
{
PAUTHZ_RESMAN ResMan = (PAUTHZ_RESMAN)AuthzResourceManager;
- VALID_RESMAN_HANDLE(AuthzResourceManager);
+ VALIDATE_RESMAN_HANDLE(AuthzResourceManager);
if (!(ResMan->flags & AUTHZ_RM_FLAG_NO_AUDIT))
{