ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

clictx.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.