+/*
+ * This is a hack to work around a problem in libntfs-3g. libntfs-3g validates
+ * security descriptors with a function named ntfs_valid_descr().
+ * ntfs_valid_descr() considers a security descriptor that ends in a SACL
+ * (Sysetm Access Control List) with no ACE's (Access Control Entries) to be
+ * invalid. However, a security descriptor like this exists in the Windows 7
+ * install.wim. Here, security descriptors matching this pattern are modified
+ * to have no SACL. This should make no difference since the SACL had no
+ * entries anyway; however this ensures that that the security descriptors pass
+ * the validation in libntfs-3g.
+ */
+static void empty_sacl_fixup(u8 *descr, u64 *size_p)
+{
+ if (*size_p >= sizeof(SecurityDescriptor)) {
+ SecurityDescriptor *sd = (SecurityDescriptor*)descr;
+ u32 sacl_offset = le32_to_cpu(sd->sacl_offset);
+ if (sacl_offset == *size_p - sizeof(ACL)) {
+ sd->sacl_offset = cpu_to_le32(0);
+ *size_p -= sizeof(ACL);
+ }
+ }
+}
+
+/*