1*10465SMark.Logan@Sun.COM #include "compat.h"
29663SMark.Logan@Sun.COM #include "types.h"
39663SMark.Logan@Sun.COM #include "layout.h"
49663SMark.Logan@Sun.COM #include "sd.h"
59663SMark.Logan@Sun.COM
69663SMark.Logan@Sun.COM /**
79663SMark.Logan@Sun.COM * init_system_file_sd -
89663SMark.Logan@Sun.COM *
99663SMark.Logan@Sun.COM * NTFS 3.1 - System files security decriptors
109663SMark.Logan@Sun.COM * =====================================================
119663SMark.Logan@Sun.COM *
129663SMark.Logan@Sun.COM * Create the security descriptor for system file number @sys_file_no and
139663SMark.Logan@Sun.COM * return a pointer to the descriptor.
149663SMark.Logan@Sun.COM *
159663SMark.Logan@Sun.COM * Note the root directory system file (".") is very different and handled by a
169663SMark.Logan@Sun.COM * different function.
179663SMark.Logan@Sun.COM *
189663SMark.Logan@Sun.COM * The sd is returned in *@sd_val and has length *@sd_val_len.
199663SMark.Logan@Sun.COM *
209663SMark.Logan@Sun.COM * Do NOT free *@sd_val as it is static memory. This also means that you can
219663SMark.Logan@Sun.COM * only use *@sd_val until the next call to this function.
229663SMark.Logan@Sun.COM */
init_system_file_sd(int sys_file_no,u8 ** sd_val,int * sd_val_len)239663SMark.Logan@Sun.COM void init_system_file_sd(int sys_file_no, u8 **sd_val, int *sd_val_len)
249663SMark.Logan@Sun.COM {
259663SMark.Logan@Sun.COM static u8 sd_array[0x68];
269663SMark.Logan@Sun.COM SECURITY_DESCRIPTOR_RELATIVE *sd;
279663SMark.Logan@Sun.COM ACL *acl;
289663SMark.Logan@Sun.COM ACCESS_ALLOWED_ACE *aa_ace;
299663SMark.Logan@Sun.COM SID *sid;
309663SMark.Logan@Sun.COM
319663SMark.Logan@Sun.COM if (sys_file_no < 0) {
329663SMark.Logan@Sun.COM *sd_val = NULL;
339663SMark.Logan@Sun.COM *sd_val_len = 0;
349663SMark.Logan@Sun.COM return;
359663SMark.Logan@Sun.COM }
369663SMark.Logan@Sun.COM *sd_val = sd_array;
379663SMark.Logan@Sun.COM sd = (SECURITY_DESCRIPTOR_RELATIVE*)&sd_array;
389663SMark.Logan@Sun.COM sd->revision = 1;
399663SMark.Logan@Sun.COM sd->alignment = 0;
409663SMark.Logan@Sun.COM sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
419663SMark.Logan@Sun.COM *sd_val_len = 0x64;
429663SMark.Logan@Sun.COM sd->owner = const_cpu_to_le32(0x48);
439663SMark.Logan@Sun.COM sd->group = const_cpu_to_le32(0x54);
449663SMark.Logan@Sun.COM sd->sacl = const_cpu_to_le32(0);
459663SMark.Logan@Sun.COM sd->dacl = const_cpu_to_le32(0x14);
469663SMark.Logan@Sun.COM /*
479663SMark.Logan@Sun.COM * Now at offset 0x14, as specified in the security descriptor, we have
489663SMark.Logan@Sun.COM * the DACL.
499663SMark.Logan@Sun.COM */
509663SMark.Logan@Sun.COM acl = (ACL*)((char*)sd + le32_to_cpu(sd->dacl));
519663SMark.Logan@Sun.COM acl->revision = 2;
529663SMark.Logan@Sun.COM acl->alignment1 = 0;
539663SMark.Logan@Sun.COM acl->size = const_cpu_to_le16(0x34);
549663SMark.Logan@Sun.COM acl->ace_count = const_cpu_to_le16(2);
559663SMark.Logan@Sun.COM acl->alignment2 = const_cpu_to_le16(0);
569663SMark.Logan@Sun.COM /*
579663SMark.Logan@Sun.COM * Now at offset 0x1c, just after the DACL's ACL, we have the first
589663SMark.Logan@Sun.COM * ACE of the DACL. The type of the ACE is access allowed.
599663SMark.Logan@Sun.COM */
609663SMark.Logan@Sun.COM aa_ace = (ACCESS_ALLOWED_ACE*)((char*)acl + sizeof(ACL));
619663SMark.Logan@Sun.COM aa_ace->type = ACCESS_ALLOWED_ACE_TYPE;
629663SMark.Logan@Sun.COM aa_ace->flags = 0;
639663SMark.Logan@Sun.COM aa_ace->size = const_cpu_to_le16(0x14);
649663SMark.Logan@Sun.COM switch (sys_file_no) {
659663SMark.Logan@Sun.COM case FILE_AttrDef:
669663SMark.Logan@Sun.COM case FILE_Boot:
679663SMark.Logan@Sun.COM aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_READ |
689663SMark.Logan@Sun.COM FILE_READ_ATTRIBUTES | FILE_READ_EA | FILE_READ_DATA;
699663SMark.Logan@Sun.COM break;
709663SMark.Logan@Sun.COM default:
719663SMark.Logan@Sun.COM aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_WRITE |
729663SMark.Logan@Sun.COM FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
739663SMark.Logan@Sun.COM FILE_WRITE_EA | FILE_READ_EA | FILE_APPEND_DATA |
749663SMark.Logan@Sun.COM FILE_WRITE_DATA | FILE_READ_DATA;
759663SMark.Logan@Sun.COM break;
769663SMark.Logan@Sun.COM }
779663SMark.Logan@Sun.COM aa_ace->sid.revision = 1;
789663SMark.Logan@Sun.COM aa_ace->sid.sub_authority_count = 1;
799663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[0] = 0;
809663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[1] = 0;
819663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[2] = 0;
829663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[3] = 0;
839663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[4] = 0;
849663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
859663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[5] = 5;
869663SMark.Logan@Sun.COM aa_ace->sid.sub_authority[0] =
879663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
889663SMark.Logan@Sun.COM /*
899663SMark.Logan@Sun.COM * Now at offset 0x30 within security descriptor, just after the first
909663SMark.Logan@Sun.COM * ACE of the DACL. All system files, except the root directory, have
919663SMark.Logan@Sun.COM * a second ACE.
929663SMark.Logan@Sun.COM */
939663SMark.Logan@Sun.COM /* The second ACE of the DACL. Type is access allowed. */
949663SMark.Logan@Sun.COM aa_ace = (ACCESS_ALLOWED_ACE*)((char*)aa_ace +
959663SMark.Logan@Sun.COM le16_to_cpu(aa_ace->size));
969663SMark.Logan@Sun.COM aa_ace->type = ACCESS_ALLOWED_ACE_TYPE;
979663SMark.Logan@Sun.COM aa_ace->flags = 0;
989663SMark.Logan@Sun.COM aa_ace->size = const_cpu_to_le16(0x18);
999663SMark.Logan@Sun.COM /* Only $AttrDef and $Boot behave differently to everything else. */
1009663SMark.Logan@Sun.COM switch (sys_file_no) {
1019663SMark.Logan@Sun.COM case FILE_AttrDef:
1029663SMark.Logan@Sun.COM case FILE_Boot:
1039663SMark.Logan@Sun.COM aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_READ |
1049663SMark.Logan@Sun.COM FILE_READ_ATTRIBUTES | FILE_READ_EA |
1059663SMark.Logan@Sun.COM FILE_READ_DATA;
1069663SMark.Logan@Sun.COM break;
1079663SMark.Logan@Sun.COM default:
1089663SMark.Logan@Sun.COM aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_READ |
1099663SMark.Logan@Sun.COM FILE_WRITE_ATTRIBUTES |
1109663SMark.Logan@Sun.COM FILE_READ_ATTRIBUTES | FILE_WRITE_EA |
1119663SMark.Logan@Sun.COM FILE_READ_EA | FILE_APPEND_DATA |
1129663SMark.Logan@Sun.COM FILE_WRITE_DATA | FILE_READ_DATA;
1139663SMark.Logan@Sun.COM break;
1149663SMark.Logan@Sun.COM }
1159663SMark.Logan@Sun.COM aa_ace->sid.revision = 1;
1169663SMark.Logan@Sun.COM aa_ace->sid.sub_authority_count = 2;
1179663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
1189663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[0] = 0;
1199663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[1] = 0;
1209663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[2] = 0;
1219663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[3] = 0;
1229663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[4] = 0;
1239663SMark.Logan@Sun.COM aa_ace->sid.identifier_authority.value[5] = 5;
1249663SMark.Logan@Sun.COM aa_ace->sid.sub_authority[0] =
1259663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
1269663SMark.Logan@Sun.COM aa_ace->sid.sub_authority[1] =
1279663SMark.Logan@Sun.COM const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
1289663SMark.Logan@Sun.COM /*
1299663SMark.Logan@Sun.COM * Now at offset 0x48 into the security descriptor, as specified in the
1309663SMark.Logan@Sun.COM * security descriptor, we now have the owner SID.
1319663SMark.Logan@Sun.COM */
1329663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
1339663SMark.Logan@Sun.COM sid->revision = 1;
1349663SMark.Logan@Sun.COM sid->sub_authority_count = 1;
1359663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
1369663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
1379663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
1389663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
1399663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
1409663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
1419663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
1429663SMark.Logan@Sun.COM sid->sub_authority[0] = const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
1439663SMark.Logan@Sun.COM /*
1449663SMark.Logan@Sun.COM * Now at offset 0x54 into the security descriptor, as specified in the
1459663SMark.Logan@Sun.COM * security descriptor, we have the group SID.
1469663SMark.Logan@Sun.COM */
1479663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
1489663SMark.Logan@Sun.COM sid->revision = 1;
1499663SMark.Logan@Sun.COM sid->sub_authority_count = 2;
1509663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
1519663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
1529663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
1539663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
1549663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
1559663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
1569663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
1579663SMark.Logan@Sun.COM sid->sub_authority[0] = const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
1589663SMark.Logan@Sun.COM sid->sub_authority[1] = const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
1599663SMark.Logan@Sun.COM }
1609663SMark.Logan@Sun.COM
1619663SMark.Logan@Sun.COM /**
1629663SMark.Logan@Sun.COM * init_root_sd -
1639663SMark.Logan@Sun.COM *
1649663SMark.Logan@Sun.COM * Creates the security_descriptor for the root folder on ntfs 3.1 as created
1659663SMark.Logan@Sun.COM * by Windows Vista (when the format is done from the disk management MMC
1669663SMark.Logan@Sun.COM * snap-in, note this is different from the format done from the disk
1679663SMark.Logan@Sun.COM * properties in Windows Explorer).
1689663SMark.Logan@Sun.COM */
init_root_sd(u8 ** sd_val,int * sd_val_len)1699663SMark.Logan@Sun.COM void init_root_sd(u8 **sd_val, int *sd_val_len)
1709663SMark.Logan@Sun.COM {
1719663SMark.Logan@Sun.COM SECURITY_DESCRIPTOR_RELATIVE *sd;
1729663SMark.Logan@Sun.COM ACL *acl;
1739663SMark.Logan@Sun.COM ACCESS_ALLOWED_ACE *ace;
1749663SMark.Logan@Sun.COM SID *sid;
1759663SMark.Logan@Sun.COM
1769663SMark.Logan@Sun.COM static char sd_array[0x102c];
1779663SMark.Logan@Sun.COM *sd_val_len = 0x102c;
1789663SMark.Logan@Sun.COM *sd_val = (u8*)&sd_array;
1799663SMark.Logan@Sun.COM
1809663SMark.Logan@Sun.COM //security descriptor relative
1819663SMark.Logan@Sun.COM sd = (SECURITY_DESCRIPTOR_RELATIVE*)sd_array;
1829663SMark.Logan@Sun.COM sd->revision = SECURITY_DESCRIPTOR_REVISION;
1839663SMark.Logan@Sun.COM sd->alignment = 0;
1849663SMark.Logan@Sun.COM sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
1859663SMark.Logan@Sun.COM sd->owner = const_cpu_to_le32(0x1014);
1869663SMark.Logan@Sun.COM sd->group = const_cpu_to_le32(0x1020);
1879663SMark.Logan@Sun.COM sd->sacl = 0;
1889663SMark.Logan@Sun.COM sd->dacl = const_cpu_to_le32(sizeof(SECURITY_DESCRIPTOR_RELATIVE));
1899663SMark.Logan@Sun.COM
1909663SMark.Logan@Sun.COM //acl
1919663SMark.Logan@Sun.COM acl = (ACL*)((u8*)sd + sizeof(SECURITY_DESCRIPTOR_RELATIVE));
1929663SMark.Logan@Sun.COM acl->revision = ACL_REVISION;
1939663SMark.Logan@Sun.COM acl->alignment1 = 0;
1949663SMark.Logan@Sun.COM acl->size = const_cpu_to_le16(0x1000);
1959663SMark.Logan@Sun.COM acl->ace_count = const_cpu_to_le16(0x08);
1969663SMark.Logan@Sun.COM acl->alignment2 = 0;
1979663SMark.Logan@Sun.COM
1989663SMark.Logan@Sun.COM //ace1
1999663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((u8*)acl + sizeof(ACL));
2009663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
2019663SMark.Logan@Sun.COM ace->flags = 0;
2029663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x18);
2039663SMark.Logan@Sun.COM ace->mask = STANDARD_RIGHTS_ALL | FILE_WRITE_ATTRIBUTES |
2049663SMark.Logan@Sun.COM FILE_LIST_DIRECTORY | FILE_WRITE_DATA |
2059663SMark.Logan@Sun.COM FILE_ADD_SUBDIRECTORY | FILE_READ_EA | FILE_WRITE_EA |
2069663SMark.Logan@Sun.COM FILE_TRAVERSE | FILE_DELETE_CHILD |
2079663SMark.Logan@Sun.COM FILE_READ_ATTRIBUTES;
2089663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
2099663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x02;
2109663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
2119663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
2129663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
2139663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
2149663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
2159663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
2169663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
2179663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
2189663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
2199663SMark.Logan@Sun.COM ace->sid.sub_authority[1] = const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
2209663SMark.Logan@Sun.COM
2219663SMark.Logan@Sun.COM //ace2
2229663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
2239663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
2249663SMark.Logan@Sun.COM ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
2259663SMark.Logan@Sun.COM INHERIT_ONLY_ACE;
2269663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x18);
2279663SMark.Logan@Sun.COM ace->mask = GENERIC_ALL;
2289663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
2299663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x02;
2309663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
2319663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
2329663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
2339663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
2349663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
2359663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
2369663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
2379663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
2389663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
2399663SMark.Logan@Sun.COM ace->sid.sub_authority[1] = const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
2409663SMark.Logan@Sun.COM
2419663SMark.Logan@Sun.COM //ace3
2429663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
2439663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
2449663SMark.Logan@Sun.COM ace->flags = 0;
2459663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x14);
2469663SMark.Logan@Sun.COM ace->mask = STANDARD_RIGHTS_ALL | FILE_WRITE_ATTRIBUTES |
2479663SMark.Logan@Sun.COM FILE_LIST_DIRECTORY | FILE_WRITE_DATA |
2489663SMark.Logan@Sun.COM FILE_ADD_SUBDIRECTORY | FILE_READ_EA | FILE_WRITE_EA |
2499663SMark.Logan@Sun.COM FILE_TRAVERSE | FILE_DELETE_CHILD |
2509663SMark.Logan@Sun.COM FILE_READ_ATTRIBUTES;
2519663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
2529663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x01;
2539663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
2549663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
2559663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
2569663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
2579663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
2589663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
2599663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
2609663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
2619663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
2629663SMark.Logan@Sun.COM
2639663SMark.Logan@Sun.COM //ace4
2649663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
2659663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
2669663SMark.Logan@Sun.COM ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
2679663SMark.Logan@Sun.COM INHERIT_ONLY_ACE;
2689663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x14);
2699663SMark.Logan@Sun.COM ace->mask = GENERIC_ALL;
2709663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
2719663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x01;
2729663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
2739663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
2749663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
2759663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
2769663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
2779663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
2789663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
2799663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
2809663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
2819663SMark.Logan@Sun.COM
2829663SMark.Logan@Sun.COM //ace5
2839663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((char*)ace + le16_to_cpu(ace->size));
2849663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
2859663SMark.Logan@Sun.COM ace->flags = 0;
2869663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x14);
2879663SMark.Logan@Sun.COM ace->mask = SYNCHRONIZE | READ_CONTROL | DELETE |
2889663SMark.Logan@Sun.COM FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
2899663SMark.Logan@Sun.COM FILE_TRAVERSE | FILE_WRITE_EA | FILE_READ_EA |
2909663SMark.Logan@Sun.COM FILE_ADD_SUBDIRECTORY | FILE_ADD_FILE |
2919663SMark.Logan@Sun.COM FILE_LIST_DIRECTORY;
2929663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
2939663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x01;
2949663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
2959663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
2969663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
2979663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
2989663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
2999663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
3009663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
3019663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
3029663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_AUTHENTICATED_USER_RID);
3039663SMark.Logan@Sun.COM
3049663SMark.Logan@Sun.COM //ace6
3059663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
3069663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
3079663SMark.Logan@Sun.COM ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
3089663SMark.Logan@Sun.COM INHERIT_ONLY_ACE;
3099663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x14);
3109663SMark.Logan@Sun.COM ace->mask = GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | DELETE;
3119663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
3129663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x01;
3139663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
3149663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
3159663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
3169663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
3179663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
3189663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
3199663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
3209663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
3219663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_AUTHENTICATED_USER_RID);
3229663SMark.Logan@Sun.COM
3239663SMark.Logan@Sun.COM //ace7
3249663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
3259663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
3269663SMark.Logan@Sun.COM ace->flags = 0;
3279663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x18);
3289663SMark.Logan@Sun.COM ace->mask = SYNCHRONIZE | READ_CONTROL | FILE_READ_ATTRIBUTES |
3299663SMark.Logan@Sun.COM FILE_TRAVERSE | FILE_READ_EA | FILE_LIST_DIRECTORY;
3309663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
3319663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x02;
3329663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
3339663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
3349663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
3359663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
3369663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
3379663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
3389663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
3399663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
3409663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
3419663SMark.Logan@Sun.COM ace->sid.sub_authority[1] = const_cpu_to_le32(DOMAIN_ALIAS_RID_USERS);
3429663SMark.Logan@Sun.COM
3439663SMark.Logan@Sun.COM //ace8
3449663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
3459663SMark.Logan@Sun.COM ace->type = ACCESS_ALLOWED_ACE_TYPE;
3469663SMark.Logan@Sun.COM ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
3479663SMark.Logan@Sun.COM INHERIT_ONLY_ACE;
3489663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x18);
3499663SMark.Logan@Sun.COM ace->mask = GENERIC_READ | GENERIC_EXECUTE;
3509663SMark.Logan@Sun.COM ace->sid.revision = SID_REVISION;
3519663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x02;
3529663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
3539663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
3549663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
3559663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
3569663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
3579663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
3589663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
3599663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
3609663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
3619663SMark.Logan@Sun.COM ace->sid.sub_authority[1] = const_cpu_to_le32(DOMAIN_ALIAS_RID_USERS);
3629663SMark.Logan@Sun.COM
3639663SMark.Logan@Sun.COM //owner sid
3649663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
3659663SMark.Logan@Sun.COM sid->revision = 0x01;
3669663SMark.Logan@Sun.COM sid->sub_authority_count = 0x01;
3679663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
3689663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
3699663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
3709663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
3719663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
3729663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
3739663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
3749663SMark.Logan@Sun.COM sid->sub_authority[0] = const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
3759663SMark.Logan@Sun.COM
3769663SMark.Logan@Sun.COM //group sid
3779663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
3789663SMark.Logan@Sun.COM sid->revision = 0x01;
3799663SMark.Logan@Sun.COM sid->sub_authority_count = 0x01;
3809663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
3819663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
3829663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
3839663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
3849663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
3859663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
3869663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
3879663SMark.Logan@Sun.COM sid->sub_authority[0] = const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
3889663SMark.Logan@Sun.COM }
3899663SMark.Logan@Sun.COM
3909663SMark.Logan@Sun.COM /**
3919663SMark.Logan@Sun.COM * init_secure_sds -
3929663SMark.Logan@Sun.COM *
3939663SMark.Logan@Sun.COM * NTFS 3.1 - System files security decriptors
3949663SMark.Logan@Sun.COM * ===========================================
3959663SMark.Logan@Sun.COM * Create the security descriptor entries in $SDS data stream like they
3969663SMark.Logan@Sun.COM * are in a partition, newly formatted with windows 2003
3979663SMark.Logan@Sun.COM */
init_secure_sds(char * sd_val)3989663SMark.Logan@Sun.COM void init_secure_sds(char *sd_val)
3999663SMark.Logan@Sun.COM {
4009663SMark.Logan@Sun.COM SECURITY_DESCRIPTOR_HEADER *sds;
4019663SMark.Logan@Sun.COM SECURITY_DESCRIPTOR_RELATIVE *sd;
4029663SMark.Logan@Sun.COM ACL *acl;
4039663SMark.Logan@Sun.COM ACCESS_ALLOWED_ACE *ace;
4049663SMark.Logan@Sun.COM SID *sid;
4059663SMark.Logan@Sun.COM
4069663SMark.Logan@Sun.COM /*
4079663SMark.Logan@Sun.COM * security descriptor #1
4089663SMark.Logan@Sun.COM */
4099663SMark.Logan@Sun.COM //header
4109663SMark.Logan@Sun.COM sds = (SECURITY_DESCRIPTOR_HEADER*)((char*)sd_val);
4119663SMark.Logan@Sun.COM sds->hash = const_cpu_to_le32(0xF80312F0);
4129663SMark.Logan@Sun.COM sds->security_id = const_cpu_to_le32(0x0100);
4139663SMark.Logan@Sun.COM sds->offset = const_cpu_to_le64(0x00);
4149663SMark.Logan@Sun.COM sds->length = const_cpu_to_le32(0x7C);
4159663SMark.Logan@Sun.COM //security descriptor relative
4169663SMark.Logan@Sun.COM sd = (SECURITY_DESCRIPTOR_RELATIVE*)((char*)sds +
4179663SMark.Logan@Sun.COM sizeof(SECURITY_DESCRIPTOR_HEADER));
4189663SMark.Logan@Sun.COM sd->revision = 0x01;
4199663SMark.Logan@Sun.COM sd->alignment = 0x00;
4209663SMark.Logan@Sun.COM sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
4219663SMark.Logan@Sun.COM sd->owner = const_cpu_to_le32(0x48);
4229663SMark.Logan@Sun.COM sd->group = const_cpu_to_le32(0x58);
4239663SMark.Logan@Sun.COM sd->sacl = const_cpu_to_le32(0x00);
4249663SMark.Logan@Sun.COM sd->dacl = const_cpu_to_le32(0x14);
4259663SMark.Logan@Sun.COM
4269663SMark.Logan@Sun.COM //acl
4279663SMark.Logan@Sun.COM acl = (ACL*)((char*)sd + sizeof(SECURITY_DESCRIPTOR_RELATIVE));
4289663SMark.Logan@Sun.COM acl->revision = 0x02;
4299663SMark.Logan@Sun.COM acl->alignment1 = 0x00;
4309663SMark.Logan@Sun.COM acl->size = const_cpu_to_le16(0x34);
4319663SMark.Logan@Sun.COM acl->ace_count = const_cpu_to_le16(0x02);
4329663SMark.Logan@Sun.COM acl->alignment2 = 0x00;
4339663SMark.Logan@Sun.COM
4349663SMark.Logan@Sun.COM //ace1
4359663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((char*)acl + sizeof(ACL));
4369663SMark.Logan@Sun.COM ace->type = 0x00;
4379663SMark.Logan@Sun.COM ace->flags = 0x00;
4389663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x14);
4399663SMark.Logan@Sun.COM ace->mask = const_cpu_to_le32(0x120089);
4409663SMark.Logan@Sun.COM ace->sid.revision = 0x01;
4419663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x01;
4429663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
4439663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
4449663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
4459663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
4469663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
4479663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
4489663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
4499663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
4509663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
4519663SMark.Logan@Sun.COM //ace2
4529663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((char*)ace + le16_to_cpu(ace->size));
4539663SMark.Logan@Sun.COM ace->type = 0x00;
4549663SMark.Logan@Sun.COM ace->flags = 0x00;
4559663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x18);
4569663SMark.Logan@Sun.COM ace->mask = const_cpu_to_le32(0x120089);
4579663SMark.Logan@Sun.COM ace->sid.revision = 0x01;
4589663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x02;
4599663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
4609663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
4619663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
4629663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
4639663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
4649663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
4659663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
4669663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
4679663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
4689663SMark.Logan@Sun.COM ace->sid.sub_authority[1] =
4699663SMark.Logan@Sun.COM const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
4709663SMark.Logan@Sun.COM
4719663SMark.Logan@Sun.COM //owner sid
4729663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
4739663SMark.Logan@Sun.COM sid->revision = 0x01;
4749663SMark.Logan@Sun.COM sid->sub_authority_count = 0x02;
4759663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
4769663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
4779663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
4789663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
4799663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
4809663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
4819663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
4829663SMark.Logan@Sun.COM sid->sub_authority[0] =
4839663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
4849663SMark.Logan@Sun.COM sid->sub_authority[1] =
4859663SMark.Logan@Sun.COM const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
4869663SMark.Logan@Sun.COM //group sid
4879663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
4889663SMark.Logan@Sun.COM sid->revision = 0x01;
4899663SMark.Logan@Sun.COM sid->sub_authority_count = 0x02;
4909663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
4919663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
4929663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
4939663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
4949663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
4959663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
4969663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
4979663SMark.Logan@Sun.COM sid->sub_authority[0] =
4989663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
4999663SMark.Logan@Sun.COM sid->sub_authority[1] =
5009663SMark.Logan@Sun.COM const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
5019663SMark.Logan@Sun.COM /*
5029663SMark.Logan@Sun.COM * security descriptor #2
5039663SMark.Logan@Sun.COM */
5049663SMark.Logan@Sun.COM //header
5059663SMark.Logan@Sun.COM sds = (SECURITY_DESCRIPTOR_HEADER*)((char*)sd_val + 0x80);
5069663SMark.Logan@Sun.COM sds->hash = const_cpu_to_le32(0xB32451);
5079663SMark.Logan@Sun.COM sds->security_id = const_cpu_to_le32(0x0101);
5089663SMark.Logan@Sun.COM sds->offset = const_cpu_to_le64(0x80);
5099663SMark.Logan@Sun.COM sds->length = const_cpu_to_le32(0x7C);
5109663SMark.Logan@Sun.COM
5119663SMark.Logan@Sun.COM //security descriptor relative
5129663SMark.Logan@Sun.COM sd = (SECURITY_DESCRIPTOR_RELATIVE*)((char*)sds +
5139663SMark.Logan@Sun.COM sizeof(SECURITY_DESCRIPTOR_HEADER));
5149663SMark.Logan@Sun.COM sd->revision = 0x01;
5159663SMark.Logan@Sun.COM sd->alignment = 0x00;
5169663SMark.Logan@Sun.COM sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
5179663SMark.Logan@Sun.COM sd->owner = const_cpu_to_le32(0x48);
5189663SMark.Logan@Sun.COM sd->group = const_cpu_to_le32(0x58);
5199663SMark.Logan@Sun.COM sd->sacl = const_cpu_to_le32(0x00);
5209663SMark.Logan@Sun.COM sd->dacl = const_cpu_to_le32(0x14);
5219663SMark.Logan@Sun.COM
5229663SMark.Logan@Sun.COM //acl
5239663SMark.Logan@Sun.COM acl = (ACL*)((char*)sd + sizeof(SECURITY_DESCRIPTOR_RELATIVE));
5249663SMark.Logan@Sun.COM acl->revision = 0x02;
5259663SMark.Logan@Sun.COM acl->alignment1 = 0x00;
5269663SMark.Logan@Sun.COM acl->size = const_cpu_to_le16(0x34);
5279663SMark.Logan@Sun.COM acl->ace_count = const_cpu_to_le16(0x02);
5289663SMark.Logan@Sun.COM acl->alignment2 = 0x00;
5299663SMark.Logan@Sun.COM
5309663SMark.Logan@Sun.COM //ace1
5319663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((char*)acl + sizeof(ACL));
5329663SMark.Logan@Sun.COM ace->type = 0x00;
5339663SMark.Logan@Sun.COM ace->flags = 0x00;
5349663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x14);
5359663SMark.Logan@Sun.COM ace->mask = const_cpu_to_le32(0x12019F);
5369663SMark.Logan@Sun.COM ace->sid.revision = 0x01;
5379663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x01;
5389663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
5399663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
5409663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
5419663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
5429663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
5439663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
5449663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
5459663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
5469663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
5479663SMark.Logan@Sun.COM //ace2
5489663SMark.Logan@Sun.COM ace = (ACCESS_ALLOWED_ACE*)((char*)ace + le16_to_cpu(ace->size));
5499663SMark.Logan@Sun.COM ace->type = 0x00;
5509663SMark.Logan@Sun.COM ace->flags = 0x00;
5519663SMark.Logan@Sun.COM ace->size = const_cpu_to_le16(0x18);
5529663SMark.Logan@Sun.COM ace->mask = const_cpu_to_le32(0x12019F);
5539663SMark.Logan@Sun.COM ace->sid.revision = 0x01;
5549663SMark.Logan@Sun.COM ace->sid.sub_authority_count = 0x02;
5559663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
5569663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[0] = 0;
5579663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[1] = 0;
5589663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[2] = 0;
5599663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[3] = 0;
5609663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[4] = 0;
5619663SMark.Logan@Sun.COM ace->sid.identifier_authority.value[5] = 5;
5629663SMark.Logan@Sun.COM ace->sid.sub_authority[0] =
5639663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
5649663SMark.Logan@Sun.COM ace->sid.sub_authority[1] =
5659663SMark.Logan@Sun.COM const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
5669663SMark.Logan@Sun.COM
5679663SMark.Logan@Sun.COM //owner sid
5689663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
5699663SMark.Logan@Sun.COM sid->revision = 0x01;
5709663SMark.Logan@Sun.COM sid->sub_authority_count = 0x02;
5719663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
5729663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
5739663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
5749663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
5759663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
5769663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
5779663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
5789663SMark.Logan@Sun.COM sid->sub_authority[0] =
5799663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
5809663SMark.Logan@Sun.COM sid->sub_authority[1] =
5819663SMark.Logan@Sun.COM const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
5829663SMark.Logan@Sun.COM
5839663SMark.Logan@Sun.COM //group sid
5849663SMark.Logan@Sun.COM sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
5859663SMark.Logan@Sun.COM sid->revision = 0x01;
5869663SMark.Logan@Sun.COM sid->sub_authority_count = 0x02;
5879663SMark.Logan@Sun.COM /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
5889663SMark.Logan@Sun.COM sid->identifier_authority.value[0] = 0;
5899663SMark.Logan@Sun.COM sid->identifier_authority.value[1] = 0;
5909663SMark.Logan@Sun.COM sid->identifier_authority.value[2] = 0;
5919663SMark.Logan@Sun.COM sid->identifier_authority.value[3] = 0;
5929663SMark.Logan@Sun.COM sid->identifier_authority.value[4] = 0;
5939663SMark.Logan@Sun.COM sid->identifier_authority.value[5] = 5;
5949663SMark.Logan@Sun.COM sid->sub_authority[0] =
5959663SMark.Logan@Sun.COM const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
5969663SMark.Logan@Sun.COM sid->sub_authority[1] =
5979663SMark.Logan@Sun.COM const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
5989663SMark.Logan@Sun.COM
5999663SMark.Logan@Sun.COM return;
6009663SMark.Logan@Sun.COM }
601