Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenclictx.c
Go to the documentation of this file.
00001 /* 00002 * ReactOS Authorization Framework 00003 * Copyright (C) 2005 - 2006 ReactOS Team 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Lesser General Public 00007 * License as published by the Free Software Foundation; either 00008 * version 2.1 of the License, or (at your option) any later version. 00009 * 00010 * This library is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Lesser General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Lesser General Public 00016 * License along with this library; if not, write to the Free Software 00017 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00018 */ 00019 /* 00020 * PROJECT: ReactOS Authorization Framework 00021 * FILE: lib/authz/clictx.c 00022 * PURPOSE: Authorization Framework 00023 * PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com> 00024 * 00025 * UPDATE HISTORY: 00026 * 10/07/2005 Created 00027 */ 00028 #include <precomp.h> 00029 00030 00031 /* 00032 * @unimplemented 00033 */ 00034 AUTHZAPI 00035 BOOL 00036 WINAPI 00037 AuthzInitializeContextFromSid(IN DWORD Flags, 00038 IN PSID UserSid, 00039 IN AUTHZ_RESOURCE_MANAGER_HANDLE AuthzResourceManager, 00040 IN PLARGE_INTEGER pExpirationTime, 00041 IN LUID Identifier, 00042 IN PVOID DynamicGroupArgs, 00043 OUT PAUTHZ_CLIENT_CONTEXT_HANDLE pAuthzClientContext) 00044 { 00045 BOOL Ret = FALSE; 00046 00047 if (AuthzResourceManager != NULL && pExpirationTime != NULL && pAuthzClientContext != NULL && 00048 UserSid != NULL && IsValidSid(UserSid) && !(Flags & (AUTHZ_SKIP_TOKEN_GROUPS | AUTHZ_REQUIRE_S4U_LOGON))) 00049 { 00050 PAUTHZ_CLIENT_CONTEXT ClientCtx; 00051 //PAUTHZ_RESMAN ResMan = (PAUTHZ_RESMAN)AuthzResourceManager; 00052 00053 VALIDATE_RESMAN_HANDLE(AuthzResourceManager); 00054 00055 ClientCtx = (PAUTHZ_CLIENT_CONTEXT)LocalAlloc(LMEM_FIXED, 00056 sizeof(AUTHZ_CLIENT_CONTEXT)); 00057 if (ClientCtx != NULL) 00058 { 00059 DWORD SidLen; 00060 00061 /* initialize the client context structure */ 00062 #if DBG 00063 ClientCtx->Tag = CLIENTCTX_TAG; 00064 #endif 00065 00066 /* simply copy the SID */ 00067 SidLen = GetLengthSid(UserSid); 00068 ClientCtx->UserSid = (PSID)LocalAlloc(LMEM_FIXED, 00069 SidLen); 00070 if (ClientCtx->UserSid == NULL) 00071 { 00072 LocalFree((HLOCAL)ClientCtx); 00073 goto FailNoMemory; 00074 } 00075 CopySid(SidLen, 00076 ClientCtx->UserSid, 00077 UserSid); 00078 00079 ClientCtx->AuthzResourceManager = AuthzResourceManager; 00080 ClientCtx->Luid = Identifier; 00081 ClientCtx->ExpirationTime.QuadPart = (pExpirationTime != NULL ? pExpirationTime->QuadPart : 0); 00082 ClientCtx->ServerContext = NULL; /* FIXME */ 00083 ClientCtx->DynamicGroupArgs = DynamicGroupArgs; 00084 00085 /* return the client context handle */ 00086 *pAuthzClientContext = (AUTHZ_CLIENT_CONTEXT_HANDLE)ClientCtx; 00087 Ret = TRUE; 00088 } 00089 else 00090 { 00091 FailNoMemory: 00092 SetLastError(ERROR_NOT_ENOUGH_MEMORY); 00093 } 00094 } 00095 else 00096 SetLastError(ERROR_INVALID_PARAMETER); 00097 00098 return Ret; 00099 } 00100 00101 00102 /* 00103 * @unimplemented 00104 */ 00105 AUTHZAPI 00106 BOOL 00107 WINAPI 00108 AuthzGetInformationFromContext(IN AUTHZ_CLIENT_CONTEXT_HANDLE hAuthzClientContext, 00109 IN AUTHZ_CONTEXT_INFORMATION_CLASS InfoClass, 00110 IN DWORD BufferSize, 00111 OUT PDWORD pSizeRequired, 00112 OUT PVOID Buffer) 00113 { 00114 BOOL Ret = FALSE; 00115 00116 if (hAuthzClientContext != NULL && pSizeRequired != NULL) 00117 { 00118 PAUTHZ_CLIENT_CONTEXT ClientCtx = (PAUTHZ_CLIENT_CONTEXT)hAuthzClientContext; 00119 00120 VALIDATE_CLIENTCTX_HANDLE(hAuthzClientContext); 00121 00122 switch (InfoClass) 00123 { 00124 case AuthzContextInfoUserSid: 00125 { 00126 DWORD SidLen = GetLengthSid(ClientCtx->UserSid); 00127 *pSizeRequired = SidLen; 00128 if (BufferSize < SidLen) 00129 { 00130 SetLastError(ERROR_INSUFFICIENT_BUFFER); 00131 } 00132 else 00133 { 00134 Ret = CopySid(SidLen, 00135 (PSID)Buffer, 00136 ClientCtx->UserSid); 00137 } 00138 break; 00139 } 00140 00141 case AuthzContextInfoGroupsSids: 00142 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00143 break; 00144 00145 case AuthzContextInfoRestrictedSids: 00146 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00147 break; 00148 00149 case AuthzContextInfoPrivileges: 00150 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00151 break; 00152 00153 case AuthzContextInfoExpirationTime: 00154 *pSizeRequired = sizeof(LARGE_INTEGER); 00155 if (BufferSize < sizeof(LARGE_INTEGER) || Buffer == NULL) 00156 { 00157 SetLastError(ERROR_INSUFFICIENT_BUFFER); 00158 } 00159 else 00160 { 00161 *((PLARGE_INTEGER)Buffer) = ClientCtx->ExpirationTime; 00162 Ret = TRUE; 00163 } 00164 break; 00165 00166 case AuthzContextInfoServerContext: 00167 *pSizeRequired = sizeof(AUTHZ_CLIENT_CONTEXT_HANDLE); 00168 if (BufferSize < sizeof(AUTHZ_CLIENT_CONTEXT_HANDLE) || Buffer == NULL) 00169 { 00170 SetLastError(ERROR_INSUFFICIENT_BUFFER); 00171 } 00172 else 00173 { 00174 *((PAUTHZ_CLIENT_CONTEXT_HANDLE)Buffer) = ClientCtx->ServerContext; 00175 Ret = TRUE; 00176 } 00177 break; 00178 00179 case AuthzContextInfoIdentifier: 00180 *pSizeRequired = sizeof(LUID); 00181 if (BufferSize < sizeof(LUID) || Buffer == NULL) 00182 { 00183 SetLastError(ERROR_INSUFFICIENT_BUFFER); 00184 } 00185 else 00186 { 00187 *((PLUID)Buffer) = ClientCtx->Luid; 00188 Ret = TRUE; 00189 } 00190 break; 00191 00192 default: 00193 SetLastError(ERROR_INVALID_PARAMETER); 00194 break; 00195 } 00196 } 00197 else 00198 SetLastError(ERROR_INVALID_PARAMETER); 00199 00200 return Ret; 00201 } 00202 00203 00204 /* 00205 * @implemented 00206 */ 00207 AUTHZAPI 00208 BOOL 00209 WINAPI 00210 AuthzFreeContext(IN AUTHZ_CLIENT_CONTEXT_HANDLE AuthzClientContext) 00211 { 00212 BOOL Ret = FALSE; 00213 00214 if (AuthzClientContext != NULL) 00215 { 00216 PAUTHZ_CLIENT_CONTEXT ClientCtx = (PAUTHZ_CLIENT_CONTEXT)AuthzClientContext; 00217 00218 VALIDATE_CLIENTCTX_HANDLE(AuthzClientContext); 00219 00220 if (ClientCtx->UserSid != NULL) 00221 { 00222 LocalFree((HLOCAL)ClientCtx->UserSid); 00223 } 00224 00225 LocalFree((HLOCAL)ClientCtx); 00226 Ret = TRUE; 00227 } 00228 else 00229 SetLastError(ERROR_INVALID_PARAMETER); 00230 00231 return Ret; 00232 } Generated on Fri May 25 2012 04:20:48 for ReactOS by
1.7.6.1
|