summaryrefslogtreecommitdiff
Diffstat
-rwxr-xr-xAndroid.mk138
-rwxr-xr-xAndroid.mk.bak89
-rwxr-xr-xCREDITS20
-rwxr-xr-xINSTALL200
-rwxr-xr-xMakefile715
-rwxr-xr-xMakefile.am106
-rwxr-xr-xMakefile.in955
-rwxr-xr-xNEWS4
-rwxr-xr-xREADME80
-rwxr-xr-xTODO.ntfsprogs126
-rwxr-xr-xaclocal.m47091
-rwxr-xr-xcompile21
-rwxr-xr-xconfig.guess292
-rw-r--r--[-rwxr-xr-x]config.h165
-rwxr-xr-xconfig.h.in110
-rwxr-xr-xconfig.log3290
-rwxr-xr-xconfig.status1220
-rwxr-xr-xconfig.sub104
-rwxr-xr-xconfigure26448
-rwxr-xr-xconfigure.ac291
-rwxr-xr-xdepcomp87
-rwxr-xr-xinclude/Makefile.in181
-rwxr-xr-xinclude/fuse-lite/Makefile.in112
-rwxr-xr-xinclude/fuse-lite/fuse.h61
-rwxr-xr-xinclude/fuse-lite/fuse_common.h49
-rwxr-xr-xinclude/fuse-lite/fuse_kernel.h6
-rwxr-xr-xinclude/fuse-lite/fuse_lowlevel.h20
-rwxr-xr-xinclude/ntfs-3g/Makefile.am4
-rwxr-xr-xinclude/ntfs-3g/Makefile.in163
-rwxr-xr-xinclude/ntfs-3g/acls.h3
-rwxr-xr-xinclude/ntfs-3g/attrib.h50
-rwxr-xr-xinclude/ntfs-3g/cache.h7
-rwxr-xr-xinclude/ntfs-3g/compat.h6
-rwxr-xr-xinclude/ntfs-3g/compress.h6
-rwxr-xr-xinclude/ntfs-3g/debug.h4
-rwxr-xr-xinclude/ntfs-3g/device.h18
-rwxr-xr-xinclude/ntfs-3g/device_io.h21
-rwxr-xr-xinclude/ntfs-3g/dir.h11
-rwxr-xr-xinclude/ntfs-3g/layout.h32
-rwxr-xr-xinclude/ntfs-3g/lcnalloc.h1
-rwxr-xr-xinclude/ntfs-3g/logging.h3
-rwxr-xr-xinclude/ntfs-3g/mst.h3
-rwxr-xr-xinclude/ntfs-3g/ntfstime.h12
-rwxr-xr-xinclude/ntfs-3g/param.h72
-rwxr-xr-xinclude/ntfs-3g/realpath.h24
-rwxr-xr-xinclude/ntfs-3g/runlist.h3
-rwxr-xr-xinclude/ntfs-3g/security.h20
-rwxr-xr-xinclude/ntfs-3g/types.h8
-rwxr-xr-xinclude/ntfs-3g/unistr.h13
-rwxr-xr-xinclude/ntfs-3g/volume.h78
-rwxr-xr-xinclude/ntfs-3g/xattrs.h75
-rwxr-xr-xinstall-sh5
-rwxr-xr-xlibfuse-lite/Makefile.am3
-rwxr-xr-xlibfuse-lite/Makefile.in188
-rwxr-xr-xlibfuse-lite/fuse.c418
-rwxr-xr-xlibfuse-lite/fuse_kern_chan.c2
-rwxr-xr-xlibfuse-lite/fuse_lowlevel.c53
-rwxr-xr-xlibfuse-lite/fuse_opt.c20
-rwxr-xr-xlibfuse-lite/fuse_session.c12
-rwxr-xr-xlibfuse-lite/fusermount.c97
-rwxr-xr-xlibfuse-lite/helper.c21
-rwxr-xr-xlibfuse-lite/mount.c486
-rwxr-xr-xlibfuse-lite/mount_util.c246
-rwxr-xr-xlibfuse-lite/mount_util.h11
-rwxr-xr-xlibntfs-3g/Makefile.am15
-rwxr-xr-xlibntfs-3g/Makefile.in420
-rwxr-xr-xlibntfs-3g/acls.c219
-rwxr-xr-xlibntfs-3g/attrib.c1205
-rwxr-xr-xlibntfs-3g/bootsect.c4
-rwxr-xr-xlibntfs-3g/cache.c7
-rwxr-xr-xlibntfs-3g/compress.c962
-rwxr-xr-xlibntfs-3g/device.c252
-rwxr-xr-xlibntfs-3g/dir.c374
-rwxr-xr-xlibntfs-3g/efs.c217
-rwxr-xr-xlibntfs-3g/index.c30
-rwxr-xr-xlibntfs-3g/inode.c46
-rwxr-xr-xlibntfs-3g/lcnalloc.c36
-rw-r--r--libntfs-3g/libntfs-3g.pc10
-rw-r--r--libntfs-3g/libntfs-3g.script.so2
-rwxr-xr-xlibntfs-3g/logfile.c23
-rwxr-xr-xlibntfs-3g/logging.c24
-rwxr-xr-xlibntfs-3g/mft.c12
-rwxr-xr-xlibntfs-3g/mst.c24
-rwxr-xr-xlibntfs-3g/object_id.c9
-rwxr-xr-xlibntfs-3g/realpath.c103
-rwxr-xr-xlibntfs-3g/reparse.c67
-rwxr-xr-xlibntfs-3g/runlist.c62
-rwxr-xr-xlibntfs-3g/security.c345
-rwxr-xr-xlibntfs-3g/unistr.c244
-rwxr-xr-xlibntfs-3g/unix_io.c19
-rwxr-xr-xlibntfs-3g/volume.c365
-rwxr-xr-xlibntfs-3g/win32_io.c708
-rwxr-xr-xlibntfs-3g/xattrs.c791
-rwxr-xr-xlibtool9301
-rwxr-xr-xltmain.sh8439
-rwxr-xr-xm4/libtool.m47377
-rwxr-xr-xm4/ltoptions.m4368
-rwxr-xr-xm4/ltsugar.m4123
-rwxr-xr-xm4/ltversion.m423
-rwxr-xr-xm4/lt~obsolete.m492
-rwxr-xr-xmissing49
-rwxr-xr-xntfsprogs/Makefile.am154
-rwxr-xr-xntfsprogs/Makefile.in1199
-rwxr-xr-xntfsprogs/attrdef.c168
-rwxr-xr-xntfsprogs/attrdef.h7
-rwxr-xr-xntfsprogs/boot.c268
-rwxr-xr-xntfsprogs/boot.h7
-rwxr-xr-xntfsprogs/cluster.c118
-rwxr-xr-xntfsprogs/cluster.h39
-rwxr-xr-xntfsprogs/list.h194
-rw-r--r--ntfsprogs/mkntfs.8290
-rwxr-xr-xntfsprogs/mkntfs.8.in290
-rwxr-xr-xntfsprogs/mkntfs.c5177
-rw-r--r--ntfsprogs/ntfscat.8136
-rwxr-xr-xntfsprogs/ntfscat.8.in136
-rwxr-xr-xntfsprogs/ntfscat.c440
-rwxr-xr-xntfsprogs/ntfscat.h46
-rwxr-xr-xntfsprogs/ntfsck.c883
-rw-r--r--ntfsprogs/ntfsclone.8391
-rwxr-xr-xntfsprogs/ntfsclone.8.in391
-rwxr-xr-xntfsprogs/ntfsclone.c2701
-rw-r--r--ntfsprogs/ntfscluster.8124
-rwxr-xr-xntfsprogs/ntfscluster.8.in124
-rwxr-xr-xntfsprogs/ntfscluster.c563
-rwxr-xr-xntfsprogs/ntfscluster.h63
-rw-r--r--ntfsprogs/ntfscmp.877
-rwxr-xr-xntfsprogs/ntfscmp.8.in77
-rwxr-xr-xntfsprogs/ntfscmp.c1012
-rw-r--r--ntfsprogs/ntfscp.8111
-rwxr-xr-xntfsprogs/ntfscp.8.in111
-rwxr-xr-xntfsprogs/ntfscp.c590
-rwxr-xr-xntfsprogs/ntfsdecrypt.c1436
-rwxr-xr-xntfsprogs/ntfsdump_logfile.c779
-rw-r--r--ntfsprogs/ntfsfix.881
-rwxr-xr-xntfsprogs/ntfsfix.8.in81
-rwxr-xr-xntfsprogs/ntfsfix.c1657
-rw-r--r--ntfsprogs/ntfsinfo.889
-rwxr-xr-xntfsprogs/ntfsinfo.8.in89
-rwxr-xr-xntfsprogs/ntfsinfo.c2384
-rw-r--r--ntfsprogs/ntfslabel.8118
-rwxr-xr-xntfsprogs/ntfslabel.8.in118
-rwxr-xr-xntfsprogs/ntfslabel.c458
-rw-r--r--ntfsprogs/ntfsls.8172
-rwxr-xr-xntfsprogs/ntfsls.8.in172
-rwxr-xr-xntfsprogs/ntfsls.c717
-rwxr-xr-xntfsprogs/ntfsmftalloc.c368
-rwxr-xr-xntfsprogs/ntfsmove.c923
-rwxr-xr-xntfsprogs/ntfsmove.h46
-rw-r--r--ntfsprogs/ntfsprogs.869
-rwxr-xr-xntfsprogs/ntfsprogs.8.in69
-rw-r--r--ntfsprogs/ntfsresize.8326
-rwxr-xr-xntfsprogs/ntfsresize.8.in326
-rwxr-xr-xntfsprogs/ntfsresize.c4497
-rwxr-xr-xntfsprogs/ntfstruncate.c809
-rw-r--r--ntfsprogs/ntfsundelete.8324
-rwxr-xr-xntfsprogs/ntfsundelete.8.in324
-rwxr-xr-xntfsprogs/ntfsundelete.c2490
-rwxr-xr-xntfsprogs/ntfsundelete.h112
-rwxr-xr-xntfsprogs/ntfswipe.c2131
-rwxr-xr-xntfsprogs/ntfswipe.h54
-rwxr-xr-xntfsprogs/sd.c607
-rwxr-xr-xntfsprogs/sd.h11
-rwxr-xr-xntfsprogs/utils.c1184
-rwxr-xr-xntfsprogs/utils.h137
-rwxr-xr-xprog.IAB1071
-rwxr-xr-xprog.IAD5
-rwxr-xr-xprog.IMB466
-rwxr-xr-xprog.IMD2
-rwxr-xr-xprog.PFI2
-rwxr-xr-xprog.PO1
-rwxr-xr-xprog.PR14
-rwxr-xr-xprog.PRI219
-rwxr-xr-xprog.PS979
-rwxr-xr-xprog.SearchResults3
-rwxr-xr-xprog.WK39
-rwxr-xr-xsrc/Makefile.am86
-rwxr-xr-xsrc/Makefile.in938
-rwxr-xr-xsrc/lowntfs-3g.c1538
-rw-r--r--src/ntfs-3g.8448
-rwxr-xr-xsrc/ntfs-3g.8.in217
-rwxr-xr-xsrc/ntfs-3g.c1357
-rw-r--r--src/ntfs-3g.probe.881
-rwxr-xr-xsrc/ntfs-3g.probe.8.in4
-rwxr-xr-xsrc/ntfs-3g.probe.c9
-rw-r--r--src/ntfs-3g.secaudit.8184
-rwxr-xr-xsrc/ntfs-3g.secaudit.8.in15
-rw-r--r--src/ntfs-3g.usermap.896
-rwxr-xr-xsrc/ntfs-3g_common.c745
-rwxr-xr-xsrc/ntfs-3g_common.h185
-rwxr-xr-xsrc/secaudit.c673
-rwxr-xr-xsrc/secaudit.h32
-rwxr-xr-xsrc/usermap.c3
-rw-r--r--[-rwxr-xr-x]stamp-h10
193 files changed, 80411 insertions, 44563 deletions
diff --git a/ntfsprogs/sd.c b/ntfsprogs/sd.c
new file mode 100755
index 0000000..4e3af97
--- a/dev/null
+++ b/ntfsprogs/sd.c
@@ -0,0 +1,607 @@
+#include "types.h"
+#include "layout.h"
+#include "sd.h"
+
+/**
+ * init_system_file_sd -
+ *
+ * NTFS 3.1 - System files security decriptors
+ * =====================================================
+ *
+ * Create the security descriptor for system file number @sys_file_no and
+ * return a pointer to the descriptor.
+ *
+ * Note the root directory system file (".") is very different and handled by a
+ * different function.
+ *
+ * The sd is returned in *@sd_val and has length *@sd_val_len.
+ *
+ * Do NOT free *@sd_val as it is static memory. This also means that you can
+ * only use *@sd_val until the next call to this function.
+ */
+void init_system_file_sd(int sys_file_no, u8 **sd_val, int *sd_val_len)
+{
+ static u8 sd_array[0x68];
+ SECURITY_DESCRIPTOR_RELATIVE *sd;
+ ACL *acl;
+ ACCESS_ALLOWED_ACE *aa_ace;
+ SID *sid;
+ le32 *sub_authorities;
+
+ if (sys_file_no < 0) {
+ *sd_val = NULL;
+ *sd_val_len = 0;
+ return;
+ }
+ *sd_val = sd_array;
+ sd = (SECURITY_DESCRIPTOR_RELATIVE*)&sd_array;
+ sd->revision = 1;
+ sd->alignment = 0;
+ sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
+ *sd_val_len = 0x64;
+ sd->owner = const_cpu_to_le32(0x48);
+ sd->group = const_cpu_to_le32(0x54);
+ sd->sacl = const_cpu_to_le32(0);
+ sd->dacl = const_cpu_to_le32(0x14);
+ /*
+ * Now at offset 0x14, as specified in the security descriptor, we have
+ * the DACL.
+ */
+ acl = (ACL*)((char*)sd + le32_to_cpu(sd->dacl));
+ acl->revision = 2;
+ acl->alignment1 = 0;
+ acl->size = const_cpu_to_le16(0x34);
+ acl->ace_count = const_cpu_to_le16(2);
+ acl->alignment2 = const_cpu_to_le16(0);
+ /*
+ * Now at offset 0x1c, just after the DACL's ACL, we have the first
+ * ACE of the DACL. The type of the ACE is access allowed.
+ */
+ aa_ace = (ACCESS_ALLOWED_ACE*)((char*)acl + sizeof(ACL));
+ aa_ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ aa_ace->flags = 0;
+ aa_ace->size = const_cpu_to_le16(0x14);
+ switch (sys_file_no) {
+ case FILE_AttrDef:
+ case FILE_Boot:
+ aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_READ |
+ FILE_READ_ATTRIBUTES | FILE_READ_EA | FILE_READ_DATA;
+ break;
+ default:
+ aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_WRITE |
+ FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
+ FILE_WRITE_EA | FILE_READ_EA | FILE_APPEND_DATA |
+ FILE_WRITE_DATA | FILE_READ_DATA;
+ break;
+ }
+ aa_ace->sid.revision = 1;
+ aa_ace->sid.sub_authority_count = 1;
+ aa_ace->sid.identifier_authority.value[0] = 0;
+ aa_ace->sid.identifier_authority.value[1] = 0;
+ aa_ace->sid.identifier_authority.value[2] = 0;
+ aa_ace->sid.identifier_authority.value[3] = 0;
+ aa_ace->sid.identifier_authority.value[4] = 0;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ aa_ace->sid.identifier_authority.value[5] = 5;
+ aa_ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+ /*
+ * Now at offset 0x30 within security descriptor, just after the first
+ * ACE of the DACL. All system files, except the root directory, have
+ * a second ACE.
+ */
+ /* The second ACE of the DACL. Type is access allowed. */
+ aa_ace = (ACCESS_ALLOWED_ACE*)((char*)aa_ace +
+ le16_to_cpu(aa_ace->size));
+ aa_ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ aa_ace->flags = 0;
+ aa_ace->size = const_cpu_to_le16(0x18);
+ /* Only $AttrDef and $Boot behave differently to everything else. */
+ switch (sys_file_no) {
+ case FILE_AttrDef:
+ case FILE_Boot:
+ aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_READ |
+ FILE_READ_ATTRIBUTES | FILE_READ_EA |
+ FILE_READ_DATA;
+ break;
+ default:
+ aa_ace->mask = SYNCHRONIZE | STANDARD_RIGHTS_READ |
+ FILE_WRITE_ATTRIBUTES |
+ FILE_READ_ATTRIBUTES | FILE_WRITE_EA |
+ FILE_READ_EA | FILE_APPEND_DATA |
+ FILE_WRITE_DATA | FILE_READ_DATA;
+ break;
+ }
+ aa_ace->sid.revision = 1;
+ aa_ace->sid.sub_authority_count = 2;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ aa_ace->sid.identifier_authority.value[0] = 0;
+ aa_ace->sid.identifier_authority.value[1] = 0;
+ aa_ace->sid.identifier_authority.value[2] = 0;
+ aa_ace->sid.identifier_authority.value[3] = 0;
+ aa_ace->sid.identifier_authority.value[4] = 0;
+ aa_ace->sid.identifier_authority.value[5] = 5;
+ sub_authorities = aa_ace->sid.sub_authority;
+ *sub_authorities++ =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ *sub_authorities =
+ const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+ /*
+ * Now at offset 0x48 into the security descriptor, as specified in the
+ * security descriptor, we now have the owner SID.
+ */
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
+ sid->revision = 1;
+ sid->sub_authority_count = 1;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sid->sub_authority[0] = const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+ /*
+ * Now at offset 0x54 into the security descriptor, as specified in the
+ * security descriptor, we have the group SID.
+ */
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
+ sid->revision = 1;
+ sid->sub_authority_count = 2;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sub_authorities = sid->sub_authority;
+ *sub_authorities++ = const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ *sub_authorities = const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+}
+
+/**
+ * init_root_sd -
+ *
+ * Creates the security_descriptor for the root folder on ntfs 3.1 as created
+ * by Windows Vista (when the format is done from the disk management MMC
+ * snap-in, note this is different from the format done from the disk
+ * properties in Windows Explorer).
+ */
+void init_root_sd(u8 **sd_val, int *sd_val_len)
+{
+ SECURITY_DESCRIPTOR_RELATIVE *sd;
+ ACL *acl;
+ ACCESS_ALLOWED_ACE *ace;
+ SID *sid;
+ le32 *sub_authorities;
+
+ static char sd_array[0x102c];
+ *sd_val_len = 0x102c;
+ *sd_val = (u8*)&sd_array;
+
+ //security descriptor relative
+ sd = (SECURITY_DESCRIPTOR_RELATIVE*)sd_array;
+ sd->revision = SECURITY_DESCRIPTOR_REVISION;
+ sd->alignment = 0;
+ sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
+ sd->owner = const_cpu_to_le32(0x1014);
+ sd->group = const_cpu_to_le32(0x1020);
+ sd->sacl = 0;
+ sd->dacl = const_cpu_to_le32(sizeof(SECURITY_DESCRIPTOR_RELATIVE));
+
+ //acl
+ acl = (ACL*)((u8*)sd + sizeof(SECURITY_DESCRIPTOR_RELATIVE));
+ acl->revision = ACL_REVISION;
+ acl->alignment1 = 0;
+ acl->size = const_cpu_to_le16(0x1000);
+ acl->ace_count = const_cpu_to_le16(0x08);
+ acl->alignment2 = 0;
+
+ //ace1
+ ace = (ACCESS_ALLOWED_ACE*)((u8*)acl + sizeof(ACL));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = 0;
+ ace->size = const_cpu_to_le16(0x18);
+ ace->mask = STANDARD_RIGHTS_ALL | FILE_WRITE_ATTRIBUTES |
+ FILE_LIST_DIRECTORY | FILE_WRITE_DATA |
+ FILE_ADD_SUBDIRECTORY | FILE_READ_EA | FILE_WRITE_EA |
+ FILE_TRAVERSE | FILE_DELETE_CHILD |
+ FILE_READ_ATTRIBUTES;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ sub_authorities = ace->sid.sub_authority;
+ *sub_authorities++ =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ *sub_authorities = const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+
+ //ace2
+ ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
+ INHERIT_ONLY_ACE;
+ ace->size = const_cpu_to_le16(0x18);
+ ace->mask = GENERIC_ALL;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ sub_authorities = ace->sid.sub_authority;
+ *sub_authorities++ =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ *sub_authorities = const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+
+ //ace3
+ ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = 0;
+ ace->size = const_cpu_to_le16(0x14);
+ ace->mask = STANDARD_RIGHTS_ALL | FILE_WRITE_ATTRIBUTES |
+ FILE_LIST_DIRECTORY | FILE_WRITE_DATA |
+ FILE_ADD_SUBDIRECTORY | FILE_READ_EA | FILE_WRITE_EA |
+ FILE_TRAVERSE | FILE_DELETE_CHILD |
+ FILE_READ_ATTRIBUTES;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+
+ //ace4
+ ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
+ INHERIT_ONLY_ACE;
+ ace->size = const_cpu_to_le16(0x14);
+ ace->mask = GENERIC_ALL;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+
+ //ace5
+ ace = (ACCESS_ALLOWED_ACE*)((char*)ace + le16_to_cpu(ace->size));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = 0;
+ ace->size = const_cpu_to_le16(0x14);
+ ace->mask = SYNCHRONIZE | READ_CONTROL | DELETE |
+ FILE_WRITE_ATTRIBUTES | FILE_READ_ATTRIBUTES |
+ FILE_TRAVERSE | FILE_WRITE_EA | FILE_READ_EA |
+ FILE_ADD_SUBDIRECTORY | FILE_ADD_FILE |
+ FILE_LIST_DIRECTORY;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_AUTHENTICATED_USER_RID);
+
+ //ace6
+ ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
+ INHERIT_ONLY_ACE;
+ ace->size = const_cpu_to_le16(0x14);
+ ace->mask = GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE | DELETE;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_AUTHENTICATED_USER_RID);
+
+ //ace7
+ ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = 0;
+ ace->size = const_cpu_to_le16(0x18);
+ ace->mask = SYNCHRONIZE | READ_CONTROL | FILE_READ_ATTRIBUTES |
+ FILE_TRAVERSE | FILE_READ_EA | FILE_LIST_DIRECTORY;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ sub_authorities = ace->sid.sub_authority;
+ *sub_authorities++ =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ *sub_authorities = const_cpu_to_le32(DOMAIN_ALIAS_RID_USERS);
+
+ //ace8
+ ace = (ACCESS_ALLOWED_ACE*)((u8*)ace + le16_to_cpu(ace->size));
+ ace->type = ACCESS_ALLOWED_ACE_TYPE;
+ ace->flags = OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE |
+ INHERIT_ONLY_ACE;
+ ace->size = const_cpu_to_le16(0x18);
+ ace->mask = GENERIC_READ | GENERIC_EXECUTE;
+ ace->sid.revision = SID_REVISION;
+ ace->sid.sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ sub_authorities = ace->sid.sub_authority;
+ *sub_authorities++ =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ *sub_authorities = const_cpu_to_le32(DOMAIN_ALIAS_RID_USERS);
+
+ //owner sid
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
+ sid->revision = 0x01;
+ sid->sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sid->sub_authority[0] = const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+
+ //group sid
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
+ sid->revision = 0x01;
+ sid->sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sid->sub_authority[0] = const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+}
+
+/**
+ * init_secure_sds -
+ *
+ * NTFS 3.1 - System files security decriptors
+ * ===========================================
+ * Create the security descriptor entries in $SDS data stream like they
+ * are in a partition, newly formatted with windows 2003
+ */
+void init_secure_sds(char *sd_val)
+{
+ SECURITY_DESCRIPTOR_HEADER *sds;
+ SECURITY_DESCRIPTOR_RELATIVE *sd;
+ ACL *acl;
+ ACCESS_ALLOWED_ACE *ace;
+ SID *sid;
+
+/*
+ * security descriptor #1
+ */
+ //header
+ sds = (SECURITY_DESCRIPTOR_HEADER*)((char*)sd_val);
+ sds->hash = const_cpu_to_le32(0xF80312F0);
+ sds->security_id = const_cpu_to_le32(0x0100);
+ sds->offset = const_cpu_to_le64(0x00);
+ sds->length = const_cpu_to_le32(0x7C);
+ //security descriptor relative
+ sd = (SECURITY_DESCRIPTOR_RELATIVE*)((char*)sds +
+ sizeof(SECURITY_DESCRIPTOR_HEADER));
+ sd->revision = 0x01;
+ sd->alignment = 0x00;
+ sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
+ sd->owner = const_cpu_to_le32(0x48);
+ sd->group = const_cpu_to_le32(0x58);
+ sd->sacl = const_cpu_to_le32(0x00);
+ sd->dacl = const_cpu_to_le32(0x14);
+
+ //acl
+ acl = (ACL*)((char*)sd + sizeof(SECURITY_DESCRIPTOR_RELATIVE));
+ acl->revision = 0x02;
+ acl->alignment1 = 0x00;
+ acl->size = const_cpu_to_le16(0x34);
+ acl->ace_count = const_cpu_to_le16(0x02);
+ acl->alignment2 = 0x00;
+
+ //ace1
+ ace = (ACCESS_ALLOWED_ACE*)((char*)acl + sizeof(ACL));
+ ace->type = 0x00;
+ ace->flags = 0x00;
+ ace->size = const_cpu_to_le16(0x14);
+ ace->mask = const_cpu_to_le32(0x120089);
+ ace->sid.revision = 0x01;
+ ace->sid.sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+ //ace2
+ ace = (ACCESS_ALLOWED_ACE*)((char*)ace + le16_to_cpu(ace->size));
+ ace->type = 0x00;
+ ace->flags = 0x00;
+ ace->size = const_cpu_to_le16(0x18);
+ ace->mask = const_cpu_to_le32(0x120089);
+ ace->sid.revision = 0x01;
+ ace->sid.sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ ace->sid.sub_authority[1] =
+ const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+
+ //owner sid
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
+ sid->revision = 0x01;
+ sid->sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sid->sub_authority[0] =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ sid->sub_authority[1] =
+ const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+ //group sid
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
+ sid->revision = 0x01;
+ sid->sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sid->sub_authority[0] =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ sid->sub_authority[1] =
+ const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+/*
+ * security descriptor #2
+ */
+ //header
+ sds = (SECURITY_DESCRIPTOR_HEADER*)((char*)sd_val + 0x80);
+ sds->hash = const_cpu_to_le32(0xB32451);
+ sds->security_id = const_cpu_to_le32(0x0101);
+ sds->offset = const_cpu_to_le64(0x80);
+ sds->length = const_cpu_to_le32(0x7C);
+
+ //security descriptor relative
+ sd = (SECURITY_DESCRIPTOR_RELATIVE*)((char*)sds +
+ sizeof(SECURITY_DESCRIPTOR_HEADER));
+ sd->revision = 0x01;
+ sd->alignment = 0x00;
+ sd->control = SE_SELF_RELATIVE | SE_DACL_PRESENT;
+ sd->owner = const_cpu_to_le32(0x48);
+ sd->group = const_cpu_to_le32(0x58);
+ sd->sacl = const_cpu_to_le32(0x00);
+ sd->dacl = const_cpu_to_le32(0x14);
+
+ //acl
+ acl = (ACL*)((char*)sd + sizeof(SECURITY_DESCRIPTOR_RELATIVE));
+ acl->revision = 0x02;
+ acl->alignment1 = 0x00;
+ acl->size = const_cpu_to_le16(0x34);
+ acl->ace_count = const_cpu_to_le16(0x02);
+ acl->alignment2 = 0x00;
+
+ //ace1
+ ace = (ACCESS_ALLOWED_ACE*)((char*)acl + sizeof(ACL));
+ ace->type = 0x00;
+ ace->flags = 0x00;
+ ace->size = const_cpu_to_le16(0x14);
+ ace->mask = const_cpu_to_le32(0x12019F);
+ ace->sid.revision = 0x01;
+ ace->sid.sub_authority_count = 0x01;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_LOCAL_SYSTEM_RID);
+ //ace2
+ ace = (ACCESS_ALLOWED_ACE*)((char*)ace + le16_to_cpu(ace->size));
+ ace->type = 0x00;
+ ace->flags = 0x00;
+ ace->size = const_cpu_to_le16(0x18);
+ ace->mask = const_cpu_to_le32(0x12019F);
+ ace->sid.revision = 0x01;
+ ace->sid.sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ ace->sid.identifier_authority.value[0] = 0;
+ ace->sid.identifier_authority.value[1] = 0;
+ ace->sid.identifier_authority.value[2] = 0;
+ ace->sid.identifier_authority.value[3] = 0;
+ ace->sid.identifier_authority.value[4] = 0;
+ ace->sid.identifier_authority.value[5] = 5;
+ ace->sid.sub_authority[0] =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ ace->sid.sub_authority[1] =
+ const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+
+ //owner sid
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->owner));
+ sid->revision = 0x01;
+ sid->sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sid->sub_authority[0] =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ sid->sub_authority[1] =
+ const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+
+ //group sid
+ sid = (SID*)((char*)sd + le32_to_cpu(sd->group));
+ sid->revision = 0x01;
+ sid->sub_authority_count = 0x02;
+ /* SECURITY_NT_SID_AUTHORITY (S-1-5) */
+ sid->identifier_authority.value[0] = 0;
+ sid->identifier_authority.value[1] = 0;
+ sid->identifier_authority.value[2] = 0;
+ sid->identifier_authority.value[3] = 0;
+ sid->identifier_authority.value[4] = 0;
+ sid->identifier_authority.value[5] = 5;
+ sid->sub_authority[0] =
+ const_cpu_to_le32(SECURITY_BUILTIN_DOMAIN_RID);
+ sid->sub_authority[1] =
+ const_cpu_to_le32(DOMAIN_ALIAS_RID_ADMINS);
+
+ return;
+}