Author: ekohl
Date: Sat Jul 31 11:24:16 2010
New Revision: 48378
URL:
http://svn.reactos.org/svn/reactos?rev=48378&view=rev
Log:
[LSASRV]
- Move all includes into a common header file.
- Create a (still incomplete) well-known-sid lookup table and use it in LsarLookupSids.
- Add missing file headers.
Added:
trunk/reactos/dll/win32/lsasrv/sids.c (with props)
Modified:
trunk/reactos/dll/win32/advapi32/sec/misc.c
trunk/reactos/dll/win32/lsasrv/authport.c
trunk/reactos/dll/win32/lsasrv/lsarpc.c
trunk/reactos/dll/win32/lsasrv/lsasrv.c
trunk/reactos/dll/win32/lsasrv/lsasrv.h
trunk/reactos/dll/win32/lsasrv/lsasrv.rbuild
trunk/reactos/dll/win32/lsasrv/privileges.c
Modified: trunk/reactos/dll/win32/advapi32/sec/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/sec/mis…
==============================================================================
--- trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/advapi32/sec/misc.c [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -15,123 +15,6 @@
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
-
-/* Needed for LookupAccountNameW implementation from Wine */
-
-typedef struct _AccountSid
-{
- WELL_KNOWN_SID_TYPE type;
- LPCWSTR account;
- LPCWSTR domain;
- SID_NAME_USE name_use;
-} AccountSid;
-
-static const WCHAR Account_Operators[] = {
'A','c','c','o','u','n','t','
','O','p','e','r','a','t','o','r','s',0
};
-static const WCHAR Administrator[] =
{'A','d','m','i','n','i','s','t','r','a','t','o','r',0
};
-static const WCHAR Administrators[] = {
'A','d','m','i','n','i','s','t','r','a','t','o','r','s',0
};
-static const WCHAR ANONYMOUS_LOGON[] = {
'A','N','O','N','Y','M','O','U','S','
','L','O','G','O','N',0 };
-static const WCHAR Authenticated_Users[] = {
'A','u','t','h','e','n','t','i','c','a','t','e','d','
','U','s','e','r','s',0 };
-static const WCHAR Backup_Operators[] = {
'B','a','c','k','u','p','
','O','p','e','r','a','t','o','r','s',0
};
-static const WCHAR BATCH[] = {
'B','A','T','C','H',0 };
-static const WCHAR Blank[] = { 0 };
-static const WCHAR BUILTIN[] = {
'B','U','I','L','T','I','N',0 };
-static const WCHAR Cert_Publishers[] = {
'C','e','r','t','
','P','u','b','l','i','s','h','e','r','s',0
};
-static const WCHAR CREATOR_GROUP[] = {
'C','R','E','A','T','O','R','
','G','R','O','U','P',0 };
-static const WCHAR CREATOR_GROUP_SERVER[] = {
'C','R','E','A','T','O','R','
','G','R','O','U','P','
','S','E','R','V','E','R',0 };
-static const WCHAR CREATOR_OWNER[] = {
'C','R','E','A','T','O','R','
','O','W','N','E','R',0 };
-static const WCHAR CREATOR_OWNER_SERVER[] = {
'C','R','E','A','T','O','R','
','O','W','N','E','R','
','S','E','R','V','E','R',0 };
-static const WCHAR DIALUP[] = {
'D','I','A','L','U','P',0 };
-static const WCHAR Digest_Authentication[] = {
'D','i','g','e','s','t','
','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0
};
-static const WCHAR DOMAIN[] =
{'D','O','M','A','I','N',0};
-static const WCHAR Domain_Admins[] = {
'D','o','m','a','i','n','
','A','d','m','i','n','s',0 };
-static const WCHAR Domain_Computers[] = {
'D','o','m','a','i','n','
','C','o','m','p','u','t','e','r','s',0
};
-static const WCHAR Domain_Controllers[] = {
'D','o','m','a','i','n','
','C','o','n','t','r','o','l','l','e','r','s',0
};
-static const WCHAR Domain_Guests[] = {
'D','o','m','a','i','n','
','G','u','e','s','t','s',0 };
-static const WCHAR Domain_Users[] = {
'D','o','m','a','i','n','
','U','s','e','r','s',0 };
-static const WCHAR Enterprise_Admins[] = {
'E','n','t','e','r','p','r','i','s','e','
','A','d','m','i','n','s',0 };
-static const WCHAR ENTERPRISE_DOMAIN_CONTROLLERS[] = {
'E','N','T','E','R','P','R','I','S','E','
','D','O','M','A','I','N','
','C','O','N','T','R','O','L','L','E','R','S',0
};
-static const WCHAR Everyone[] = {
'E','v','e','r','y','o','n','e',0
};
-static const WCHAR Group_Policy_Creator_Owners[] = {
'G','r','o','u','p','
','P','o','l','i','c','y','
','C','r','e','a','t','o','r','
','O','w','n','e','r','s',0 };
-static const WCHAR Guest[] = {
'G','u','e','s','t',0 };
-static const WCHAR Guests[] = {
'G','u','e','s','t','s',0 };
-static const WCHAR INTERACTIVE[] = {
'I','N','T','E','R','A','C','T','I','V','E',0
};
-static const WCHAR LOCAL[] = {
'L','O','C','A','L',0 };
-static const WCHAR LOCAL_SERVICE[] = {
'L','O','C','A','L','
','S','E','R','V','I','C','E',0
};
-static const WCHAR NETWORK[] = {
'N','E','T','W','O','R','K',0 };
-static const WCHAR Network_Configuration_Operators[] = {
'N','e','t','w','o','r','k','
','C','o','n','f','i','g','u','r','a','t','i','o','n','
','O','p','e','r','a','t','o','r','s',0
};
-static const WCHAR NETWORK_SERVICE[] = {
'N','E','T','W','O','R','K','
','S','E','R','V','I','C','E',0
};
-static const WCHAR NT_AUTHORITY[] = { 'N','T','
','A','U','T','H','O','R','I','T','Y',0
};
-static const WCHAR NT_Pseudo_Domain[] = { 'N','T','
','P','s','e','u','d','o','
','D','o','m','a','i','n',0 };
-static const WCHAR NTML_Authentication[] = {
'N','T','M','L','
','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0
};
-static const WCHAR NULL_SID[] = { 'N','U','L','L','
','S','I','D',0 };
-static const WCHAR Other_Organization[] = {
'O','t','h','e','r','
','O','r','g','a','n','i','z','a','t','i','o','n',0
};
-static const WCHAR Performance_Log_Users[] = {
'P','e','r','f','o','r','m','a','n','c','e','
','L','o','g','
','U','s','e','r','s',0 };
-static const WCHAR Performance_Monitor_Users[] = {
'P','e','r','f','o','r','m','a','n','c','e','
','M','o','n','i','t','o','r','
','U','s','e','r','s',0 };
-static const WCHAR Power_Users[] = {
'P','o','w','e','r','
','U','s','e','r','s',0 };
-static const WCHAR Pre_Windows_2000_Compatible_Access[] = {
'P','r','e','-','W','i','n','d','o','w','s','
','2','0','0','0','
','C','o','m','p','a','t','i','b','l','e','
','A','c','c','e','s','s',0 };
-static const WCHAR Print_Operators[] = {
'P','r','i','n','t','
','O','p','e','r','a','t','o','r','s',0
};
-static const WCHAR PROXY[] = {
'P','R','O','X','Y',0 };
-static const WCHAR RAS_and_IAS_Servers[] = { 'R','A','S','
','a','n','d','
','I','A','S','
','S','e','r','v','e','r','s',0
};
-static const WCHAR Remote_Desktop_Users[] = {
'R','e','m','o','t','e','
','D','e','s','k','t','o','p','
','U','s','e','r','s',0 };
-static const WCHAR REMOTE_INTERACTIVE_LOGON[] = {
'R','E','M','O','T','E','
','I','N','T','E','R','A','C','T','I','V','E','
','L','O','G','O','N',0 };
-static const WCHAR Replicators[] = {
'R','e','p','l','i','c','a','t','o','r','s',0
};
-static const WCHAR RESTRICTED[] = {
'R','E','S','T','R','I','C','T','E','D',0
};
-static const WCHAR SChannel_Authentication[] = {
'S','C','h','a','n','n','e','l','
','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0
};
-static const WCHAR Schema_Admins[] = {
'S','c','h','e','m','a','
','A','d','m','i','n','s',0 };
-static const WCHAR SELF[] = { 'S','E','L','F',0 };
-static const WCHAR Server_Operators[] = {
'S','e','r','v','e','r','
','O','p','e','r','a','t','o','r','s',0
};
-static const WCHAR SERVICE[] = {
'S','E','R','V','I','C','E',0 };
-static const WCHAR SYSTEM[] = {
'S','Y','S','T','E','M',0 };
-static const WCHAR TERMINAL_SERVER_USER[] = {
'T','E','R','M','I','N','A','L','
','S','E','R','V','E','R','
','U','S','E','R',0 };
-static const WCHAR This_Organization[] = {
'T','h','i','s','
','O','r','g','a','n','i','z','a','t','i','o','n',0
};
-static const WCHAR Users[] = {
'U','s','e','r','s',0 };
-
-static const AccountSid ACCOUNT_SIDS[] = {
- { WinNullSid, NULL_SID, Blank, SidTypeWellKnownGroup },
- { WinWorldSid, Everyone, Blank, SidTypeWellKnownGroup },
- { WinLocalSid, LOCAL, Blank, SidTypeWellKnownGroup },
- { WinCreatorOwnerSid, CREATOR_OWNER, Blank, SidTypeWellKnownGroup },
- { WinCreatorGroupSid, CREATOR_GROUP, Blank, SidTypeWellKnownGroup },
- { WinCreatorOwnerServerSid, CREATOR_OWNER_SERVER, Blank, SidTypeWellKnownGroup },
- { WinCreatorGroupServerSid, CREATOR_GROUP_SERVER, Blank, SidTypeWellKnownGroup },
- { WinNtAuthoritySid, NT_Pseudo_Domain, NT_Pseudo_Domain, SidTypeDomain },
- { WinDialupSid, DIALUP, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinNetworkSid, NETWORK, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinBatchSid, BATCH, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinInteractiveSid, INTERACTIVE, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinServiceSid, SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinAnonymousSid, ANONYMOUS_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinProxySid, PROXY, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinEnterpriseControllersSid, ENTERPRISE_DOMAIN_CONTROLLERS, NT_AUTHORITY,
SidTypeWellKnownGroup },
- { WinSelfSid, SELF, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinAuthenticatedUserSid, Authenticated_Users, NT_AUTHORITY, SidTypeWellKnownGroup
},
- { WinRestrictedCodeSid, RESTRICTED, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinTerminalServerSid, TERMINAL_SERVER_USER, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinRemoteLogonIdSid, REMOTE_INTERACTIVE_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup
},
- { WinLocalSystemSid, SYSTEM, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinLocalServiceSid, LOCAL_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinNetworkServiceSid, NETWORK_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinBuiltinDomainSid, BUILTIN, BUILTIN, SidTypeDomain },
- { WinBuiltinAdministratorsSid, Administrators, BUILTIN, SidTypeAlias },
- { WinBuiltinUsersSid, Users, BUILTIN, SidTypeAlias },
- { WinBuiltinGuestsSid, Guests, BUILTIN, SidTypeAlias },
- { WinBuiltinPowerUsersSid, Power_Users, BUILTIN, SidTypeAlias },
- { WinBuiltinAccountOperatorsSid, Account_Operators, BUILTIN, SidTypeAlias },
- { WinBuiltinSystemOperatorsSid, Server_Operators, BUILTIN, SidTypeAlias },
- { WinBuiltinPrintOperatorsSid, Print_Operators, BUILTIN, SidTypeAlias },
- { WinBuiltinBackupOperatorsSid, Backup_Operators, BUILTIN, SidTypeAlias },
- { WinBuiltinReplicatorSid, Replicators, BUILTIN, SidTypeAlias },
- { WinBuiltinPreWindows2000CompatibleAccessSid, Pre_Windows_2000_Compatible_Access,
BUILTIN, SidTypeAlias },
- { WinBuiltinRemoteDesktopUsersSid, Remote_Desktop_Users, BUILTIN, SidTypeAlias },
- { WinBuiltinNetworkConfigurationOperatorsSid, Network_Configuration_Operators,
BUILTIN, SidTypeAlias },
- { WinNTLMAuthenticationSid, NTML_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup
},
- { WinDigestAuthenticationSid, Digest_Authentication, NT_AUTHORITY,
SidTypeWellKnownGroup },
- { WinSChannelAuthenticationSid, SChannel_Authentication, NT_AUTHORITY,
SidTypeWellKnownGroup },
- { WinThisOrganizationSid, This_Organization, NT_AUTHORITY, SidTypeWellKnownGroup },
- { WinOtherOrganizationSid, Other_Organization, NT_AUTHORITY, SidTypeWellKnownGroup
},
- { WinBuiltinPerfMonitoringUsersSid, Performance_Monitor_Users, BUILTIN, SidTypeAlias
},
- { WinBuiltinPerfLoggingUsersSid, Performance_Log_Users, BUILTIN, SidTypeAlias },
-};
/* Interface to ntmarta.dll ***************************************************/
Modified: trunk/reactos/dll/win32/lsasrv/authport.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/authport.…
==============================================================================
--- trunk/reactos/dll/win32/lsasrv/authport.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/lsasrv/authport.c [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -8,15 +8,8 @@
/* INCLUDES ****************************************************************/
-#define WIN32_NO_STATUS
-#include <windows.h>
-#define NTOS_MODE_USER
-#include <ndk/ntndk.h>
-#include "lsass.h"
#include "lsasrv.h"
-
-#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
Modified: trunk/reactos/dll/win32/lsasrv/lsarpc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/lsarpc.c?…
==============================================================================
--- trunk/reactos/dll/win32/lsasrv/lsarpc.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/lsasrv/lsarpc.c [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -1,17 +1,15 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: Local Security Authority (LSA) Server
+ * FILE: reactos/dll/win32/lsasrv/lsarpc.h
+ * PURPOSE: RPC interface functions
+ *
+ * PROGRAMMERS: Eric Kohl
+ */
+
/* INCLUDES ****************************************************************/
-#define WIN32_NO_STATUS
-#include <windows.h>
-#include <ntsecapi.h>
-#define NTOS_MODE_USER
-#include <ndk/ntndk.h>
-
-#include <string.h>
-
#include "lsasrv.h"
-#include "lsa_s.h"
-
-#include <wine/debug.h>
typedef enum _LSA_DB_HANDLE_TYPE
{
@@ -432,7 +430,6 @@
{
SID_IDENTIFIER_AUTHORITY IdentifierAuthority = {SECURITY_NT_AUTHORITY};
static const UNICODE_STRING DomainName = RTL_CONSTANT_STRING(L"DOMAIN");
- static const UNICODE_STRING UserName =
RTL_CONSTANT_STRING(L"Administrator");
PLSAPR_REFERENCED_DOMAIN_LIST OutputDomains = NULL;
PLSAPR_TRANSLATED_NAME OutputNames = NULL;
ULONG OutputNamesLength;
@@ -501,16 +498,8 @@
RtlCopyMemory(OutputDomains->Domains[i].Name.Buffer, DomainName.Buffer,
DomainName.MaximumLength);
}
-
- for (i = 0; i < SidEnumBuffer->Entries; i++)
- {
- OutputNames[i].Use = SidTypeWellKnownGroup;
- OutputNames[i].DomainIndex = i;
- OutputNames[i].Name.Buffer = MIDL_user_allocate(UserName.MaximumLength);
- OutputNames[i].Name.Length = UserName.Length;
- OutputNames[i].Name.MaximumLength = UserName.MaximumLength;
- RtlCopyMemory(OutputNames[i].Name.Buffer, UserName.Buffer,
UserName.MaximumLength);
- }
+ Status = LsapLookupSids(SidEnumBuffer,
+ OutputNames);
*ReferencedDomains = OutputDomains;
@@ -519,7 +508,7 @@
TranslatedNames->Entries = SidEnumBuffer->Entries;
TranslatedNames->Names = OutputNames;
- return STATUS_SUCCESS;
+ return Status;
}
Modified: trunk/reactos/dll/win32/lsasrv/lsasrv.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/lsasrv.c?…
==============================================================================
--- trunk/reactos/dll/win32/lsasrv/lsasrv.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/lsasrv/lsasrv.c [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -8,14 +8,7 @@
/* INCLUDES ****************************************************************/
-#define WIN32_NO_STATUS
-#include <windows.h>
-#define NTOS_MODE_USER
-#include <ndk/ntndk.h>
-
#include "lsasrv.h"
-
-#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
@@ -29,6 +22,9 @@
DWORD dwError;
TRACE("LsapInitLsa() called\n");
+
+ /* Initialize the well known SIDs */
+ LsapInitSids();
/* Start the RPC server */
LsarStartRpcServer();
Modified: trunk/reactos/dll/win32/lsasrv/lsasrv.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/lsasrv.h?…
==============================================================================
--- trunk/reactos/dll/win32/lsasrv/lsasrv.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/lsasrv/lsasrv.h [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -6,6 +6,20 @@
*
* PROGRAMMERS: Eric Kohl
*/
+
+#define WIN32_NO_STATUS
+#include <windows.h>
+#include <ntsecapi.h>
+#define NTOS_MODE_USER
+#include <ndk/ntndk.h>
+
+#include <string.h>
+
+#include "lsass.h"
+#include "lsa_s.h"
+
+#include <wine/debug.h>
+
/* authport.c */
NTSTATUS StartAuthenticationPort(VOID);
@@ -20,4 +34,13 @@
NTSTATUS
LsarpLookupPrivilegeValue(PUNICODE_STRING Name,
- PLUID Value);
+ PLUID Value);
+
+/* sids.h */
+NTSTATUS
+LsapInitSids(VOID);
+
+NTSTATUS
+LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
+ PLSAPR_TRANSLATED_NAME OutputNames);
+
Modified: trunk/reactos/dll/win32/lsasrv/lsasrv.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/lsasrv.rb…
==============================================================================
--- trunk/reactos/dll/win32/lsasrv/lsasrv.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/lsasrv/lsasrv.rbuild [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -12,5 +12,6 @@
<file>lsarpc.c</file>
<file>lsasrv.c</file>
<file>privileges.c</file>
+ <file>sids.c</file>
<file>lsasrv.rc</file>
</module>
Modified: trunk/reactos/dll/win32/lsasrv/privileges.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/privilege…
==============================================================================
--- trunk/reactos/dll/win32/lsasrv/privileges.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/lsasrv/privileges.c [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -1,14 +1,13 @@
-#define WIN32_NO_STATUS
-#include <windows.h>
-#include <ntsecapi.h>
-#define NTOS_MODE_USER
-#include <ndk/ntndk.h>
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: Local Security Authority (LSA) Server
+ * FILE: reactos/dll/win32/lsasrv/privileges.c
+ * PURPOSE: Privilege lookup functions
+ *
+ * PROGRAMMERS: Eric Kohl
+ */
-#include <wchar.h>
-#include <string.h>
-
-
-#include <wine/debug.h>
+#include "lsasrv.h"
typedef struct
Added: trunk/reactos/dll/win32/lsasrv/sids.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/lsasrv/sids.c?re…
==============================================================================
--- trunk/reactos/dll/win32/lsasrv/sids.c (added)
+++ trunk/reactos/dll/win32/lsasrv/sids.c [iso-8859-1] Sat Jul 31 11:24:16 2010
@@ -1,0 +1,422 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: Local Security Authority (LSA) Server
+ * FILE: reactos/dll/win32/lsasrv/sids.c
+ * PURPOSE: Sid / Name lookup functions
+ *
+ * PROGRAMMERS: Eric Kohl
+ */
+#include "lsasrv.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
+
+
+typedef struct _WELL_KNOWN_SID
+{
+ LIST_ENTRY ListEntry;
+ PSID Sid;
+ UNICODE_STRING Name;
+ UNICODE_STRING Domain;
+ SID_NAME_USE NameUse;
+} WELL_KNOWN_SID, *PWELL_KNOWN_SID;
+
+
+static SID_IDENTIFIER_AUTHORITY NullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
+static SID_IDENTIFIER_AUTHORITY WorldSidAuthority = {SECURITY_WORLD_SID_AUTHORITY};
+static SID_IDENTIFIER_AUTHORITY LocalSidAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
+static SID_IDENTIFIER_AUTHORITY CreatorSidAuthority = {SECURITY_CREATOR_SID_AUTHORITY};
+static SID_IDENTIFIER_AUTHORITY NtAuthority = {SECURITY_NT_AUTHORITY};
+
+LIST_ENTRY WellKnownSidListHead;
+
+
+
+#if 0
+typedef struct _AccountSid
+{
+ WELL_KNOWN_SID_TYPE type;
+ LPCWSTR account;
+ LPCWSTR domain;
+ SID_NAME_USE name_use;
+} AccountSid;
+
+static const WCHAR Account_Operators[] = {
'A','c','c','o','u','n','t','
','O','p','e','r','a','t','o','r','s',0
};
+static const WCHAR Administrator[] =
{'A','d','m','i','n','i','s','t','r','a','t','o','r',0
};
+static const WCHAR Administrators[] = {
'A','d','m','i','n','i','s','t','r','a','t','o','r','s',0
};
+static const WCHAR ANONYMOUS_LOGON[] = {
'A','N','O','N','Y','M','O','U','S','
','L','O','G','O','N',0 };
+static const WCHAR Authenticated_Users[] = {
'A','u','t','h','e','n','t','i','c','a','t','e','d','
','U','s','e','r','s',0 };
+static const WCHAR Backup_Operators[] = {
'B','a','c','k','u','p','
','O','p','e','r','a','t','o','r','s',0
};
+static const WCHAR BATCH[] = {
'B','A','T','C','H',0 };
+static const WCHAR Blank[] = { 0 };
+static const WCHAR BUILTIN[] = {
'B','U','I','L','T','I','N',0 };
+static const WCHAR Cert_Publishers[] = {
'C','e','r','t','
','P','u','b','l','i','s','h','e','r','s',0
};
+static const WCHAR CREATOR_GROUP[] = {
'C','R','E','A','T','O','R','
','G','R','O','U','P',0 };
+static const WCHAR CREATOR_GROUP_SERVER[] = {
'C','R','E','A','T','O','R','
','G','R','O','U','P','
','S','E','R','V','E','R',0 };
+static const WCHAR CREATOR_OWNER[] = {
'C','R','E','A','T','O','R','
','O','W','N','E','R',0 };
+static const WCHAR CREATOR_OWNER_SERVER[] = {
'C','R','E','A','T','O','R','
','O','W','N','E','R','
','S','E','R','V','E','R',0 };
+static const WCHAR DIALUP[] = {
'D','I','A','L','U','P',0 };
+static const WCHAR Digest_Authentication[] = {
'D','i','g','e','s','t','
','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0
};
+static const WCHAR DOMAIN[] =
{'D','O','M','A','I','N',0};
+static const WCHAR Domain_Admins[] = {
'D','o','m','a','i','n','
','A','d','m','i','n','s',0 };
+static const WCHAR Domain_Computers[] = {
'D','o','m','a','i','n','
','C','o','m','p','u','t','e','r','s',0
};
+static const WCHAR Domain_Controllers[] = {
'D','o','m','a','i','n','
','C','o','n','t','r','o','l','l','e','r','s',0
};
+static const WCHAR Domain_Guests[] = {
'D','o','m','a','i','n','
','G','u','e','s','t','s',0 };
+static const WCHAR Domain_Users[] = {
'D','o','m','a','i','n','
','U','s','e','r','s',0 };
+static const WCHAR Enterprise_Admins[] = {
'E','n','t','e','r','p','r','i','s','e','
','A','d','m','i','n','s',0 };
+static const WCHAR ENTERPRISE_DOMAIN_CONTROLLERS[] = {
'E','N','T','E','R','P','R','I','S','E','
','D','O','M','A','I','N','
','C','O','N','T','R','O','L','L','E','R','S',0
};
+static const WCHAR Everyone[] = {
'E','v','e','r','y','o','n','e',0
};
+static const WCHAR Group_Policy_Creator_Owners[] = {
'G','r','o','u','p','
','P','o','l','i','c','y','
','C','r','e','a','t','o','r','
','O','w','n','e','r','s',0 };
+static const WCHAR Guest[] = {
'G','u','e','s','t',0 };
+static const WCHAR Guests[] = {
'G','u','e','s','t','s',0 };
+static const WCHAR INTERACTIVE[] = {
'I','N','T','E','R','A','C','T','I','V','E',0
};
+static const WCHAR LOCAL[] = {
'L','O','C','A','L',0 };
+static const WCHAR LOCAL_SERVICE[] = {
'L','O','C','A','L','
','S','E','R','V','I','C','E',0
};
+static const WCHAR NETWORK[] = {
'N','E','T','W','O','R','K',0 };
+static const WCHAR Network_Configuration_Operators[] = {
'N','e','t','w','o','r','k','
','C','o','n','f','i','g','u','r','a','t','i','o','n','
','O','p','e','r','a','t','o','r','s',0
};
+static const WCHAR NETWORK_SERVICE[] = {
'N','E','T','W','O','R','K','
','S','E','R','V','I','C','E',0
};
+static const WCHAR NT_AUTHORITY[] = { 'N','T','
','A','U','T','H','O','R','I','T','Y',0
};
+static const WCHAR NT_Pseudo_Domain[] = { 'N','T','
','P','s','e','u','d','o','
','D','o','m','a','i','n',0 };
+static const WCHAR NTML_Authentication[] = {
'N','T','M','L','
','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0
};
+static const WCHAR NULL_SID[] = { 'N','U','L','L','
','S','I','D',0 };
+static const WCHAR Other_Organization[] = {
'O','t','h','e','r','
','O','r','g','a','n','i','z','a','t','i','o','n',0
};
+static const WCHAR Performance_Log_Users[] = {
'P','e','r','f','o','r','m','a','n','c','e','
','L','o','g','
','U','s','e','r','s',0 };
+static const WCHAR Performance_Monitor_Users[] = {
'P','e','r','f','o','r','m','a','n','c','e','
','M','o','n','i','t','o','r','
','U','s','e','r','s',0 };
+static const WCHAR Power_Users[] = {
'P','o','w','e','r','
','U','s','e','r','s',0 };
+static const WCHAR Pre_Windows_2000_Compatible_Access[] = {
'P','r','e','-','W','i','n','d','o','w','s','
','2','0','0','0','
','C','o','m','p','a','t','i','b','l','e','
','A','c','c','e','s','s',0 };
+static const WCHAR Print_Operators[] = {
'P','r','i','n','t','
','O','p','e','r','a','t','o','r','s',0
};
+static const WCHAR PROXY[] = {
'P','R','O','X','Y',0 };
+static const WCHAR RAS_and_IAS_Servers[] = { 'R','A','S','
','a','n','d','
','I','A','S','
','S','e','r','v','e','r','s',0
};
+static const WCHAR Remote_Desktop_Users[] = {
'R','e','m','o','t','e','
','D','e','s','k','t','o','p','
','U','s','e','r','s',0 };
+static const WCHAR REMOTE_INTERACTIVE_LOGON[] = {
'R','E','M','O','T','E','
','I','N','T','E','R','A','C','T','I','V','E','
','L','O','G','O','N',0 };
+static const WCHAR Replicators[] = {
'R','e','p','l','i','c','a','t','o','r','s',0
};
+static const WCHAR RESTRICTED[] = {
'R','E','S','T','R','I','C','T','E','D',0
};
+static const WCHAR SChannel_Authentication[] = {
'S','C','h','a','n','n','e','l','
','A','u','t','h','e','n','t','i','c','a','t','i','o','n',0
};
+static const WCHAR Schema_Admins[] = {
'S','c','h','e','m','a','
','A','d','m','i','n','s',0 };
+static const WCHAR SELF[] = { 'S','E','L','F',0 };
+static const WCHAR Server_Operators[] = {
'S','e','r','v','e','r','
','O','p','e','r','a','t','o','r','s',0
};
+static const WCHAR SERVICE[] = {
'S','E','R','V','I','C','E',0 };
+static const WCHAR SYSTEM[] = {
'S','Y','S','T','E','M',0 };
+static const WCHAR TERMINAL_SERVER_USER[] = {
'T','E','R','M','I','N','A','L','
','S','E','R','V','E','R','
','U','S','E','R',0 };
+static const WCHAR This_Organization[] = {
'T','h','i','s','
','O','r','g','a','n','i','z','a','t','i','o','n',0
};
+static const WCHAR Users[] = {
'U','s','e','r','s',0 };
+
+static const AccountSid ACCOUNT_SIDS[] = {
+ { WinNullSid, NULL_SID, Blank, SidTypeWellKnownGroup },
+ { WinWorldSid, Everyone, Blank, SidTypeWellKnownGroup },
+ { WinLocalSid, LOCAL, Blank, SidTypeWellKnownGroup },
+ { WinCreatorOwnerSid, CREATOR_OWNER, Blank, SidTypeWellKnownGroup },
+ { WinCreatorGroupSid, CREATOR_GROUP, Blank, SidTypeWellKnownGroup },
+ { WinCreatorOwnerServerSid, CREATOR_OWNER_SERVER, Blank, SidTypeWellKnownGroup },
+ { WinCreatorGroupServerSid, CREATOR_GROUP_SERVER, Blank, SidTypeWellKnownGroup },
+ { WinNtAuthoritySid, NT_Pseudo_Domain, NT_Pseudo_Domain, SidTypeDomain },
+ { WinDialupSid, DIALUP, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinNetworkSid, NETWORK, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinBatchSid, BATCH, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinInteractiveSid, INTERACTIVE, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinServiceSid, SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinAnonymousSid, ANONYMOUS_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinProxySid, PROXY, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinEnterpriseControllersSid, ENTERPRISE_DOMAIN_CONTROLLERS, NT_AUTHORITY,
SidTypeWellKnownGroup },
+ { WinSelfSid, SELF, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinAuthenticatedUserSid, Authenticated_Users, NT_AUTHORITY, SidTypeWellKnownGroup
},
+ { WinRestrictedCodeSid, RESTRICTED, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinTerminalServerSid, TERMINAL_SERVER_USER, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinRemoteLogonIdSid, REMOTE_INTERACTIVE_LOGON, NT_AUTHORITY, SidTypeWellKnownGroup
},
+ { WinLocalSystemSid, SYSTEM, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinLocalServiceSid, LOCAL_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinNetworkServiceSid, NETWORK_SERVICE, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinBuiltinDomainSid, BUILTIN, BUILTIN, SidTypeDomain },
+ { WinBuiltinAdministratorsSid, Administrators, BUILTIN, SidTypeAlias },
+ { WinBuiltinUsersSid, Users, BUILTIN, SidTypeAlias },
+ { WinBuiltinGuestsSid, Guests, BUILTIN, SidTypeAlias },
+ { WinBuiltinPowerUsersSid, Power_Users, BUILTIN, SidTypeAlias },
+ { WinBuiltinAccountOperatorsSid, Account_Operators, BUILTIN, SidTypeAlias },
+ { WinBuiltinSystemOperatorsSid, Server_Operators, BUILTIN, SidTypeAlias },
+ { WinBuiltinPrintOperatorsSid, Print_Operators, BUILTIN, SidTypeAlias },
+ { WinBuiltinBackupOperatorsSid, Backup_Operators, BUILTIN, SidTypeAlias },
+ { WinBuiltinReplicatorSid, Replicators, BUILTIN, SidTypeAlias },
+ { WinBuiltinPreWindows2000CompatibleAccessSid, Pre_Windows_2000_Compatible_Access,
BUILTIN, SidTypeAlias },
+ { WinBuiltinRemoteDesktopUsersSid, Remote_Desktop_Users, BUILTIN, SidTypeAlias },
+ { WinBuiltinNetworkConfigurationOperatorsSid, Network_Configuration_Operators,
BUILTIN, SidTypeAlias },
+ { WinNTLMAuthenticationSid, NTML_Authentication, NT_AUTHORITY, SidTypeWellKnownGroup
},
+ { WinDigestAuthenticationSid, Digest_Authentication, NT_AUTHORITY,
SidTypeWellKnownGroup },
+ { WinSChannelAuthenticationSid, SChannel_Authentication, NT_AUTHORITY,
SidTypeWellKnownGroup },
+ { WinThisOrganizationSid, This_Organization, NT_AUTHORITY, SidTypeWellKnownGroup },
+ { WinOtherOrganizationSid, Other_Organization, NT_AUTHORITY, SidTypeWellKnownGroup
},
+ { WinBuiltinPerfMonitoringUsersSid, Performance_Monitor_Users, BUILTIN, SidTypeAlias
},
+ { WinBuiltinPerfLoggingUsersSid, Performance_Log_Users, BUILTIN, SidTypeAlias },
+};
+#endif
+
+
+BOOLEAN
+LsapCreateSid(PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
+ UCHAR SubAuthorityCount,
+ PULONG SubAuthorities,
+ PWSTR Name,
+ PWSTR Domain,
+ SID_NAME_USE NameUse)
+{
+ PWELL_KNOWN_SID SidEntry;
+ PULONG p;
+ ULONG i;
+
+ SidEntry = RtlAllocateHeap(RtlGetProcessHeap(), 0, sizeof(WELL_KNOWN_SID));
+ if (SidEntry == NULL)
+ return FALSE;
+
+ InitializeListHead(&SidEntry->ListEntry);
+
+ SidEntry->Sid = RtlAllocateHeap(RtlGetProcessHeap(),
+ 0,
+ RtlLengthRequiredSid(SubAuthorityCount));
+ if (SidEntry->Sid == NULL)
+ {
+ RtlFreeHeap(RtlGetProcessHeap(), 0, SidEntry);
+ return FALSE;
+ }
+
+ RtlInitializeSid(SidEntry->Sid,
+ IdentifierAuthority,
+ SubAuthorityCount);
+
+ for (i = 0; i < (ULONG)SubAuthorityCount; i++)
+ {
+ p = RtlSubAuthoritySid(SidEntry->Sid, i);
+ *p = SubAuthorities[i];
+ }
+
+ RtlInitUnicodeString(&SidEntry->Name,
+ Name);
+
+ RtlInitUnicodeString(&SidEntry->Domain,
+ Domain);
+
+ SidEntry->NameUse = NameUse;
+
+ InsertTailList(&WellKnownSidListHead,
+ &SidEntry->ListEntry);
+
+ return TRUE;
+}
+
+
+NTSTATUS
+LsapInitSids(VOID)
+{
+ ULONG SubAuthorities[5];
+
+ InitializeListHead(&WellKnownSidListHead);
+
+ /* Null Sid */
+ SubAuthorities[0] = SECURITY_NULL_RID;
+ LsapCreateSid(&NullSidAuthority,
+ 1,
+ SubAuthorities,
+ L"NULL SID",
+ L"",
+ SidTypeWellKnownGroup);
+
+ /* World Sid */
+ SubAuthorities[0] = SECURITY_WORLD_RID;
+ LsapCreateSid(&WorldSidAuthority,
+ 1,
+ SubAuthorities,
+ L"Everyone",
+ L"",
+ SidTypeWellKnownGroup);
+
+ /* Local Sid */
+ SubAuthorities[0] = SECURITY_LOCAL_RID;
+ LsapCreateSid(&LocalSidAuthority,
+ 1,
+ SubAuthorities,
+ L"LOCAL",
+ L"",
+ SidTypeWellKnownGroup);
+
+ /* Creator Owner Sid */
+ SubAuthorities[0] = SECURITY_CREATOR_OWNER_RID;
+ LsapCreateSid(&CreatorSidAuthority,
+ 1,
+ SubAuthorities,
+ L"CREATOR OWNER",
+ L"",
+ SidTypeWellKnownGroup);
+
+ /* Creator Group Sid */
+ SubAuthorities[0] = SECURITY_CREATOR_GROUP_RID;
+ LsapCreateSid(&CreatorSidAuthority,
+ 1,
+ SubAuthorities,
+ L"CREATOR GROUP",
+ L"",
+ SidTypeWellKnownGroup);
+
+ /* Creator Owner Server Sid */
+ SubAuthorities[0] = SECURITY_CREATOR_OWNER_SERVER_RID;
+ LsapCreateSid(&CreatorSidAuthority,
+ 1,
+ SubAuthorities,
+ L"CREATOR OWNER SERVER",
+ L"",
+ SidTypeWellKnownGroup);
+
+ /* Creator Group Server Sid */
+ SubAuthorities[0] = SECURITY_CREATOR_GROUP_SERVER_RID;
+ LsapCreateSid(&CreatorSidAuthority,
+ 1,
+ SubAuthorities,
+ L"CREATOR GROUP SERVER",
+ L"",
+ SidTypeWellKnownGroup);
+
+ /* NT Domain Sid */
+ LsapCreateSid(&NtAuthority,
+ 0,
+ NULL,
+ L"",
+ L"NT Pseudo Domain",
+ SidTypeDomain);
+
+ /* Dialup Sid */
+ SubAuthorities[0] = SECURITY_DIALUP_RID;
+ LsapCreateSid(&NtAuthority,
+ 1,
+ SubAuthorities,
+ L"DIALUP",
+ L"NT AUTHORITY",
+ SidTypeWellKnownGroup);
+
+ /* Network Sid */
+ SubAuthorities[0] = SECURITY_NETWORK_RID;
+ LsapCreateSid(&NtAuthority,
+ 1,
+ SubAuthorities,
+ L"NETWORK",
+ L"NT AUTHORITY",
+ SidTypeWellKnownGroup);
+
+ /* Batch Sid*/
+ SubAuthorities[0] = SECURITY_BATCH_RID;
+ LsapCreateSid(&NtAuthority,
+ 1,
+ SubAuthorities,
+ L"BATCH",
+ L"NT AUTHORITY",
+ SidTypeWellKnownGroup);
+
+ /* Interactive Sid */
+ SubAuthorities[0] = SECURITY_INTERACTIVE_RID;
+ LsapCreateSid(&NtAuthority,
+ 1,
+ SubAuthorities,
+ L"INTERACTIVE",
+ L"NT AUTHORITY",
+ SidTypeWellKnownGroup);
+
+ /* Service Sid */
+ SubAuthorities[0] = SECURITY_SERVICE_RID;
+ LsapCreateSid(&NtAuthority,
+ 1,
+ SubAuthorities,
+ L"SERVICE",
+ L"NT AUTHORITY",
+ SidTypeWellKnownGroup);
+
+ /* Anonymous Logon Sid */
+ SubAuthorities[0] = SECURITY_ANONYMOUS_LOGON_RID;
+ LsapCreateSid(&NtAuthority,
+ 1,
+ SubAuthorities,
+ L"ANONYMOUS LOGON",
+ L"NT AUTHORITY",
+ SidTypeWellKnownGroup);
+
+ /* FIXME: Add more well known sids */
+
+ return STATUS_SUCCESS;
+}
+
+
+PWELL_KNOWN_SID
+LsapLookupWellKnownSid(PSID Sid)
+{
+ PLIST_ENTRY ListEntry;
+ PWELL_KNOWN_SID Ptr;
+
+ ListEntry = WellKnownSidListHead.Flink;
+ while (ListEntry != &WellKnownSidListHead)
+ {
+ Ptr = CONTAINING_RECORD(ListEntry,
+ WELL_KNOWN_SID,
+ ListEntry);
+ if (RtlEqualSid(Sid, Ptr->Sid))
+ {
+ return Ptr;
+ }
+
+ ListEntry = ListEntry->Flink;
+ }
+
+ return NULL;
+}
+
+
+NTSTATUS
+LsapLookupSids(PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
+ PLSAPR_TRANSLATED_NAME OutputNames)
+{
+ static const UNICODE_STRING UserName =
RTL_CONSTANT_STRING(L"Administrator");
+ PWELL_KNOWN_SID ptr;
+ ULONG Mapped = 0;
+ ULONG i;
+ NTSTATUS Status;
+
+ PSID *Sids = (PSID *) SidEnumBuffer->SidInfo;
+
+TRACE("LsapLookupSids(%p, %p)\n", SidEnumBuffer, OutputNames);
+TRACE("SidEnumBuffer->Entries: %lu\n", SidEnumBuffer->Entries);
+TRACE("SidEnumBuffer->SidInfo: %p\n", SidEnumBuffer->SidInfo);
+
+ for (i = 0; i < SidEnumBuffer->Entries; i++)
+ {
+TRACE("i: %lu\n", i);
+ ptr = LsapLookupWellKnownSid(Sids[i]);
+ if (ptr != NULL)
+ {
+ OutputNames[i].Use = ptr->NameUse;
+
+ OutputNames[i].DomainIndex = i; /* Fixme */
+
+ OutputNames[i].Name.Buffer = MIDL_user_allocate(ptr->Name.MaximumLength);
+ OutputNames[i].Name.Length = ptr->Name.Length;
+ OutputNames[i].Name.MaximumLength = ptr->Name.MaximumLength;
+ RtlCopyMemory(OutputNames[i].Name.Buffer, ptr->Name.Buffer,
ptr->Name.MaximumLength);
+
+ Mapped++;
+ }
+ else
+ {
+ OutputNames[i].Use = SidTypeWellKnownGroup;
+ OutputNames[i].DomainIndex = i;
+ OutputNames[i].Name.Buffer = MIDL_user_allocate(UserName.MaximumLength);
+ OutputNames[i].Name.Length = UserName.Length;
+ OutputNames[i].Name.MaximumLength = UserName.MaximumLength;
+ RtlCopyMemory(OutputNames[i].Name.Buffer, UserName.Buffer,
UserName.MaximumLength);
+
+ Mapped++;
+ }
+ }
+
+ if (Mapped == 0)
+ Status = STATUS_NONE_MAPPED;
+ else if (Mapped < SidEnumBuffer->Entries)
+ Status = STATUS_SOME_NOT_MAPPED;
+ else
+ Status = STATUS_SUCCESS;
+
+ return Status;
+}
+
+/* EOF */
Propchange: trunk/reactos/dll/win32/lsasrv/sids.c
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/dll/win32/lsasrv/sids.c
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision