Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 lines
13 KiB

  1. /*++
  2. Copyright (c) 2000 Microsoft Corporation
  3. Module Name:
  4. precedence.h
  5. Abstract:
  6. This file contains the prototype for the main routine to calculate precedences.
  7. This is called during planning/diagnosis.
  8. Author:
  9. Vishnu Patankar (VishnuP) 7-April-2000
  10. Environment:
  11. User Mode - Win32
  12. Revision History:
  13. --*/
  14. ///////////////////////////////////////////////////////////////////////////////
  15. // //
  16. // Includes //
  17. // //
  18. ///////////////////////////////////////////////////////////////////////////////
  19. #ifndef _precedence_
  20. #define _precedence_
  21. #include "headers.h"
  22. #include "..\hashtable.h"
  23. #include "scedllrc.h"
  24. #include "logger.h"
  25. #include <userenv.h>
  26. extern DSROLE_MACHINE_ROLE gMachineRole;
  27. typedef enum _SCEP_RSOP_CLASS_TYPE_{
  28. RSOP_SecuritySettingNumeric = 0,
  29. RSOP_SecuritySettingBoolean,
  30. RSOP_SecuritySettingString,
  31. RSOP_AuditPolicy,
  32. RSOP_SecurityEventLogSettingNumeric,
  33. RSOP_SecurityEventLogSettingBoolean,
  34. RSOP_RegistryValue,
  35. RSOP_UserPrivilegeRight,
  36. RSOP_RestrictedGroup,
  37. RSOP_SystemService,
  38. RSOP_File,
  39. RSOP_RegistryKey
  40. };
  41. const static PWSTR ScepRsopSchemaClassNames [] = {
  42. L"RSOP_SecuritySettingNumeric",
  43. L"RSOP_SecuritySettingBoolean",
  44. L"RSOP_SecuritySettingString",
  45. L"RSOP_AuditPolicy",
  46. L"RSOP_SecurityEventLogSettingNumeric",
  47. L"RSOP_SecurityEventLogSettingBoolean",
  48. L"RSOP_RegistryValue",
  49. L"RSOP_UserPrivilegeRight",
  50. L"RSOP_RestrictedGroup",
  51. L"RSOP_SystemService",
  52. L"RSOP_File",
  53. L"RSOP_RegistryKey"
  54. };
  55. typedef struct _SCE_KEY_LOOKUP_PRECEDENCE {
  56. SCE_KEY_LOOKUP KeyLookup;
  57. DWORD Precedence;
  58. BOOL bSystemAccessPolicy;
  59. }SCE_KEY_LOOKUP_PRECEDENCE;
  60. #define SCEP_TYPECAST(type, bufptr, offset) (*((type *)((CHAR *)bufptr + offset)))
  61. #define NUM_KERBEROS_SUB_SETTINGS 5
  62. #define NUM_EVENTLOG_TYPES 3
  63. #define PLANNING_GPT_DIR TEXT("\\security\\templates\\policies\\planning\\")
  64. #define DIAGNOSIS_GPT_DIR TEXT("\\security\\templates\\policies\\")
  65. #define WINLOGON_LOG_PATH TEXT("\\security\\logs\\winlogon.log")
  66. #define PLANNING_LOG_PATH TEXT("\\security\\logs\\planning.log")
  67. #define DIAGNOSIS_LOG_FILE TEXT("\\security\\logs\\diagnosis.log")
  68. // matrix description
  69. // first column has keyName / settingName
  70. // second column has field offset in SCE_PROFILE_INFO - hardcoded
  71. // third column has setting types - from _SCEP_RSOP_CLASS_TYPE_
  72. // fourth column has current precedence - unused for dynamic types
  73. static SCE_KEY_LOOKUP_PRECEDENCE PrecedenceLookup[] = {
  74. //RSOP_SecuritySettingNumeric
  75. {{(PWSTR)TEXT("MinimumPasswordAge"), offsetof(struct _SCE_PROFILE_INFO, MinimumPasswordAge), RSOP_SecuritySettingNumeric}, (DWORD)0, TRUE},
  76. {{(PWSTR)TEXT("MaximumPasswordAge"), offsetof(struct _SCE_PROFILE_INFO, MaximumPasswordAge), RSOP_SecuritySettingNumeric}, (DWORD)0, TRUE},
  77. {{(PWSTR)TEXT("MinimumPasswordLength"), offsetof(struct _SCE_PROFILE_INFO, MinimumPasswordLength), RSOP_SecuritySettingNumeric}, (DWORD)0, TRUE},
  78. {{(PWSTR)TEXT("PasswordHistorySize"), offsetof(struct _SCE_PROFILE_INFO, PasswordHistorySize), RSOP_SecuritySettingNumeric}, (DWORD)0, TRUE},
  79. {{(PWSTR)TEXT("LockoutBadCount"), offsetof(struct _SCE_PROFILE_INFO, LockoutBadCount), RSOP_SecuritySettingNumeric}, (DWORD)0, TRUE},
  80. {{(PWSTR)TEXT("ResetLockoutCount"), offsetof(struct _SCE_PROFILE_INFO, ResetLockoutCount), RSOP_SecuritySettingNumeric}, (DWORD)0, TRUE},
  81. {{(PWSTR)TEXT("LockoutDuration"), offsetof(struct _SCE_PROFILE_INFO, LockoutDuration), RSOP_SecuritySettingNumeric}, (DWORD)0, TRUE},
  82. // RSOP_SecuritySettingBoolean
  83. {{(PWSTR)TEXT("ClearTextPassword"), offsetof(struct _SCE_PROFILE_INFO, ClearTextPassword), RSOP_SecuritySettingBoolean}, (DWORD)0, TRUE},
  84. {{(PWSTR)TEXT("PasswordComplexity"), offsetof(struct _SCE_PROFILE_INFO, PasswordComplexity), RSOP_SecuritySettingBoolean}, (DWORD)0, TRUE},
  85. {{(PWSTR)TEXT("RequireLogonToChangePassword"), offsetof(struct _SCE_PROFILE_INFO, RequireLogonToChangePassword), RSOP_SecuritySettingBoolean}, (DWORD)0, TRUE},
  86. {{(PWSTR)TEXT("ForceLogoffWhenHourExpire"), offsetof(struct _SCE_PROFILE_INFO, ForceLogoffWhenHourExpire), RSOP_SecuritySettingBoolean}, (DWORD)0, TRUE},
  87. {{(PWSTR)TEXT("LSAAnonymousNameLookup"), offsetof(struct _SCE_PROFILE_INFO, LSAAnonymousNameLookup), RSOP_SecuritySettingBoolean}, (DWORD)0, FALSE},
  88. {{(PWSTR)TEXT("EnableAdminAccount"), offsetof(struct _SCE_PROFILE_INFO, EnableAdminAccount), RSOP_SecuritySettingBoolean}, (DWORD)0, TRUE},
  89. {{(PWSTR)TEXT("EnableGuestAccount"), offsetof(struct _SCE_PROFILE_INFO, EnableGuestAccount), RSOP_SecuritySettingBoolean}, (DWORD)0, TRUE},
  90. //RSOP_SecuritySettingString
  91. {{(PWSTR)TEXT("NewAdministratorName"), offsetof(struct _SCE_PROFILE_INFO, NewAdministratorName), RSOP_SecuritySettingString}, (DWORD)0, TRUE},
  92. {{(PWSTR)TEXT("NewGuestName"), offsetof(struct _SCE_PROFILE_INFO, NewGuestName), RSOP_SecuritySettingString}, (DWORD)0, TRUE},
  93. // RSOP_AuditPolicy
  94. {{(PWSTR)TEXT("AuditSystemEvents"), offsetof(struct _SCE_PROFILE_INFO, AuditSystemEvents), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  95. {{(PWSTR)TEXT("AuditLogonEvents"), offsetof(struct _SCE_PROFILE_INFO, AuditLogonEvents), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  96. {{(PWSTR)TEXT("AuditObjectAccess"), offsetof(struct _SCE_PROFILE_INFO, AuditObjectAccess), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  97. {{(PWSTR)TEXT("AuditPrivilegeUse"), offsetof(struct _SCE_PROFILE_INFO, AuditPrivilegeUse), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  98. {{(PWSTR)TEXT("AuditPolicyChange"), offsetof(struct _SCE_PROFILE_INFO, AuditPolicyChange), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  99. {{(PWSTR)TEXT("AuditAccountManage"), offsetof(struct _SCE_PROFILE_INFO, AuditAccountManage), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  100. {{(PWSTR)TEXT("AuditProcessTracking"), offsetof(struct _SCE_PROFILE_INFO, AuditProcessTracking), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  101. {{(PWSTR)TEXT("AuditDSAccess"), offsetof(struct _SCE_PROFILE_INFO, AuditDSAccess), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  102. {{(PWSTR)TEXT("AuditAccountLogon"), offsetof(struct _SCE_PROFILE_INFO, AuditAccountLogon), RSOP_AuditPolicy}, (DWORD)0, FALSE},
  103. // RSOP_SecurityEventLogSettingNumeric
  104. // one each for system, application, security
  105. // following eventlog entries should be contiguous in the same order to resemble contiguous memory
  106. {{(PWSTR)TEXT("MaximumLogSize"), offsetof(struct _SCE_PROFILE_INFO, MaximumLogSize), RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  107. {{(PWSTR)TEXT("MaximumLogSize"), offsetof(struct _SCE_PROFILE_INFO, MaximumLogSize) + sizeof(DWORD), RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  108. {{(PWSTR)TEXT("MaximumLogSize"), offsetof(struct _SCE_PROFILE_INFO, MaximumLogSize) + 2*sizeof(DWORD), RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  109. {{(PWSTR)TEXT("AuditLogRetentionPeriod"), offsetof(struct _SCE_PROFILE_INFO, AuditLogRetentionPeriod), RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  110. {{(PWSTR)TEXT("AuditLogRetentionPeriod"), offsetof(struct _SCE_PROFILE_INFO, AuditLogRetentionPeriod) + sizeof(DWORD),RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  111. {{(PWSTR)TEXT("AuditLogRetentionPeriod"), offsetof(struct _SCE_PROFILE_INFO, AuditLogRetentionPeriod) + 2 * sizeof(DWORD),RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  112. {{(PWSTR)TEXT("RetentionDays"), offsetof(struct _SCE_PROFILE_INFO, RetentionDays), RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  113. {{(PWSTR)TEXT("RetentionDays"), offsetof(struct _SCE_PROFILE_INFO, RetentionDays) + sizeof(DWORD), RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  114. {{(PWSTR)TEXT("RetentionDays"), offsetof(struct _SCE_PROFILE_INFO, RetentionDays) + 2 * sizeof(DWORD), RSOP_SecurityEventLogSettingNumeric}, (DWORD)0, FALSE},
  115. // RSOP_SecurityEventLogSettingBoolean - one each for system, application, security
  116. {{(PWSTR)TEXT("RestrictGuestAccess"), offsetof(struct _SCE_PROFILE_INFO, RestrictGuestAccess), RSOP_SecurityEventLogSettingBoolean}, (DWORD)0, FALSE},
  117. {{(PWSTR)TEXT("RestrictGuestAccess"), offsetof(struct _SCE_PROFILE_INFO, RestrictGuestAccess) + sizeof(DWORD), RSOP_SecurityEventLogSettingBoolean}, (DWORD)0, FALSE},
  118. {{(PWSTR)TEXT("RestrictGuestAccess"), offsetof(struct _SCE_PROFILE_INFO, RestrictGuestAccess) + 2 * sizeof(DWORD), RSOP_SecurityEventLogSettingBoolean}, (DWORD)0, FALSE},
  119. // RSOP_RegistryValue
  120. // can compute offset of aRegValues from this
  121. {{(PWSTR)TEXT("RegValueCount"), offsetof(struct _SCE_PROFILE_INFO, RegValueCount), RSOP_RegistryValue}, (DWORD)0, FALSE},
  122. // RSOP_UserPrivilegeRight
  123. {{(PWSTR)TEXT("pInfPrivilegeAssignedTo"), offsetof(struct _SCE_PROFILE_INFO, OtherInfo) + sizeof(PSCE_NAME_LIST), RSOP_UserPrivilegeRight}, (DWORD)0, FALSE},
  124. // RSOP_RestrictedGroup
  125. {{(PWSTR)TEXT("pGroupMembership"), offsetof(struct _SCE_PROFILE_INFO, pGroupMembership), RSOP_RestrictedGroup}, (DWORD)0, FALSE},
  126. // RSOP_SystemService
  127. {{(PWSTR)TEXT("pServices"), offsetof(struct _SCE_PROFILE_INFO, pServices), RSOP_SystemService}, (DWORD)0, FALSE},
  128. // RSOP_File
  129. {{(PWSTR)TEXT("pFiles"), offsetof(struct _SCE_PROFILE_INFO, pFiles), RSOP_File}, (DWORD)0, FALSE},
  130. // RSOP_RegistryKey
  131. {{(PWSTR)TEXT("pRegistryKeys"), offsetof(struct _SCE_PROFILE_INFO, pRegistryKeys), RSOP_RegistryKey}, (DWORD)0, FALSE},
  132. // following kerberos entries should be contiguous in the same order to resemble contiguous memory
  133. {{(PWSTR)TEXT("pKerberosInfo"), offsetof(struct _SCE_PROFILE_INFO, pKerberosInfo), RSOP_SecuritySettingNumeric}, (DWORD)0, FALSE},
  134. //RSOP_SecuritySettingNumeric
  135. {{(PWSTR)TEXT("MaxTicketAge"), offsetof(struct _SCE_KERBEROS_TICKET_INFO_, MaxTicketAge), RSOP_SecuritySettingNumeric}, (DWORD)0, FALSE},
  136. {{(PWSTR)TEXT("MaxRenewAge"), offsetof(struct _SCE_KERBEROS_TICKET_INFO_, MaxRenewAge), RSOP_SecuritySettingNumeric}, (DWORD)0, FALSE},
  137. {{(PWSTR)TEXT("MaxServiceAge"), offsetof(struct _SCE_KERBEROS_TICKET_INFO_, MaxServiceAge), RSOP_SecuritySettingNumeric}, (DWORD)0, FALSE},
  138. {{(PWSTR)TEXT("MaxClockSkew"), offsetof(struct _SCE_KERBEROS_TICKET_INFO_, MaxClockSkew), RSOP_SecuritySettingNumeric}, (DWORD)0, FALSE},
  139. // RSOP_SecuritySettingBoolean
  140. {{(PWSTR)TEXT("TicketValidateClient"), offsetof(struct _SCE_KERBEROS_TICKET_INFO_, TicketValidateClient), RSOP_SecuritySettingBoolean}, (DWORD)0, FALSE},
  141. };
  142. DWORD SceLogSettingsPrecedenceGPOs(
  143. IN IWbemServices *pWbemServices,
  144. IN BOOL bPlanningMode,
  145. IN PWSTR *ppwszLogFile
  146. );
  147. DWORD
  148. ScepConvertSingleSlashToDoubleSlashPath(
  149. IN wchar_t *pSettingInfo,
  150. OUT PWSTR *ppwszDoubleSlashPath
  151. );
  152. DWORD
  153. ScepClientTranslateFileDirName(
  154. IN PWSTR oldFileName,
  155. OUT PWSTR *newFileName
  156. );
  157. VOID
  158. ScepLogEventAndReport(
  159. IN HINSTANCE hInstance,
  160. IN LPTSTR LogFileName,
  161. IN DWORD LogLevel,
  162. IN DWORD dwEventID,
  163. IN UINT idMsg,
  164. IN DWORD rc,
  165. IN PWSTR pwszMsg
  166. );
  167. BOOL
  168. ScepRsopLookupBuiltinNameTable(
  169. IN PWSTR pwszGroupName
  170. );
  171. DWORD
  172. ScepCanonicalizeGroupName(
  173. IN PWSTR pwszGroupName,
  174. OUT PWSTR *ppwszCanonicalGroupName
  175. );
  176. #endif