New package for RHEL 7
resolves: rhbz#819939 - Resync against Rawhide package.
This commit is contained in:
parent
621e96af76
commit
b495315e3d
6
.gitignore
vendored
6
.gitignore
vendored
@ -0,0 +1,6 @@
|
||||
*~
|
||||
*.rpm
|
||||
.build*.log
|
||||
clog
|
||||
ntfs-3g_ntfsprogs-*.tgz
|
||||
ntfs-3g_ntfsprogs-*/
|
11
20-ntfs-config-write-policy.fdi
Normal file
11
20-ntfs-config-write-policy.fdi
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<deviceinfo version="0.2">
|
||||
<device>
|
||||
<match key="volume.fstype" string="ntfs">
|
||||
<merge key="volume.fstype" type="string">ntfs-3g</merge>
|
||||
<merge key="volume.policy.mount_filesystem" type="string">ntfs-3g</merge>
|
||||
<append key="volume.mount.valid_options" type="strlist">locale=</append>
|
||||
</match>
|
||||
</device>
|
||||
</deviceinfo>
|
||||
|
181
libguestfs-winsupport.spec
Normal file
181
libguestfs-winsupport.spec
Normal file
@ -0,0 +1,181 @@
|
||||
%global debug_package %{nil}
|
||||
|
||||
%global ntfs_version 2012.1.15
|
||||
|
||||
Name: libguestfs-winsupport
|
||||
Version: 7.0
|
||||
Release: 1%{?dist}
|
||||
Summary: Add support for Windows guests to libguestfs
|
||||
|
||||
License: GPLv2+
|
||||
ExclusiveArch: x86_64
|
||||
|
||||
# This package shouldn't be installed without installing the base
|
||||
# libguestfs package.
|
||||
Requires: libguestfs >= 1:1.20.0
|
||||
|
||||
# Needs fuse-libs (RHBZ#599300).
|
||||
Requires: fuse-libs
|
||||
|
||||
# Source and patches for ntfs. Try to keep this in step with Fedora.
|
||||
Source0: http://tuxera.com/opensource/ntfs-3g_ntfsprogs-%{ntfs_version}.tgz
|
||||
Source1: 20-ntfs-config-write-policy.fdi
|
||||
|
||||
Patch0: ntfs-3g_ntfsprogs-2011.10.9-RC-ntfsck-unsupported-return-0.patch
|
||||
Patch1: ntfs-3g-junction-point-fix.patch
|
||||
# Windows 8 safety checks
|
||||
Patch2: ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch
|
||||
Patch3: ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch
|
||||
|
||||
BuildRequires: fuse-devel
|
||||
Requires: fuse
|
||||
|
||||
BuildRequires: libtool, libattr-devel
|
||||
BuildRequires: libconfig-devel, libgcrypt-devel, gnutls-devel, libuuid-devel
|
||||
|
||||
# Required by binaries in the supermin appliance.
|
||||
Requires: libgcrypt, gnutls, p11-kit, libtasn1, zlib
|
||||
|
||||
|
||||
%description
|
||||
This optional package adds support for Windows guests (NTFS) to the
|
||||
base libguestfs Red Hat Enterprise Linux (RHEL) package. This is
|
||||
useful for examining Windows virtual machines running on RHEL, and for
|
||||
performing V2V of Windows guests from another hypervisor to RHEL.
|
||||
|
||||
To enable Windows support, simply install this package.
|
||||
|
||||
To disable Windows support, uninstall this package.
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q -n ntfs-3g_ntfsprogs-%{ntfs_version}
|
||||
%patch0 -p1 -b .unsupported
|
||||
%patch1 -p1 -b .junction-fix
|
||||
%patch2 -p1 -b .4d0b9163
|
||||
%patch3 -p1 -b .559270a8
|
||||
|
||||
|
||||
%build
|
||||
CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64"
|
||||
%configure \
|
||||
--disable-static \
|
||||
--disable-ldconfig \
|
||||
--with-fuse=external \
|
||||
--exec-prefix=/ \
|
||||
--enable-crypto \
|
||||
--enable-extras
|
||||
make %{?_smp_mflags} LIBTOOL=%{_bindir}/libtool
|
||||
|
||||
# Create a README file.
|
||||
cat <<'EOF' > README
|
||||
This optional package adds support for Windows guests (NTFS) to the
|
||||
base libguestfs Red Hat Enterprise Linux (RHEL) package. This is
|
||||
useful for examining Windows virtual machines running on RHEL, and for
|
||||
performing V2V of Windows guests from another hypervisor to RHEL.
|
||||
|
||||
The package contains NTFS programs from ntfsprogs %{ntfsprogs_version}
|
||||
and NTFS FUSE filesystem support from ntfs-3g %{ntfs_3g_version}.
|
||||
EOF
|
||||
|
||||
|
||||
%install
|
||||
mkdir ntfs
|
||||
export DESTDIR=$(pwd)/ntfs
|
||||
|
||||
#----- Standard package install rule, but installing into ntfs/ subdir.
|
||||
make LIBTOOL=%{_bindir}/libtool install
|
||||
rm -rf $DESTDIR%{_libdir}/*.la
|
||||
rm -rf $DESTDIR%{_libdir}/*.a
|
||||
|
||||
rm -rf $DESTDIR%{_sbindir}/mount.ntfs-3g
|
||||
cp -a $DESTDIR%{_bindir}/ntfs-3g $DESTDIR%{_sbindir}/mount.ntfs-3g
|
||||
|
||||
# Actually make some symlinks for simplicity...
|
||||
# ... since we're obsoleting ntfsprogs-fuse
|
||||
pushd $DESTDIR%{_bindir}
|
||||
ln -s ntfs-3g ntfsmount
|
||||
popd
|
||||
pushd $DESTDIR%{_sbindir}
|
||||
ln -s mount.ntfs-3g mount.ntfs-fuse
|
||||
# And since there is no other package in Fedora that provides an ntfs
|
||||
# mount...
|
||||
ln -s mount.ntfs-3g mount.ntfs
|
||||
# Need this for fsck to find it
|
||||
ln -s ../bin/ntfsck fsck.ntfs
|
||||
popd
|
||||
mv $DESTDIR/sbin/* $DESTDIR%{_sbindir}
|
||||
rmdir $DESTDIR/sbin
|
||||
|
||||
# We get this on our own, thanks.
|
||||
rm -rf $DESTDIR%{_defaultdocdir}/%{name}/README
|
||||
|
||||
mkdir -p $DESTDIR%{_datadir}/hal/fdi/policy/10osvendor/
|
||||
cp -a %{SOURCE1} $DESTDIR%{_datadir}/hal/fdi/policy/10osvendor/
|
||||
#----- End of standard package install rule.
|
||||
|
||||
# Copy the files we need to a static supermin appliance.
|
||||
rm -f files
|
||||
echo . >> files
|
||||
echo usr >> files
|
||||
echo usr/bin >> files
|
||||
echo usr/lib64 >> files
|
||||
echo usr/sbin >> files
|
||||
pushd ntfs
|
||||
find | egrep '/s?bin/|/lib(64)/' >> ../files
|
||||
cpio --quiet -o -H newc < ../files > ../ntfs.img
|
||||
popd
|
||||
|
||||
# Supporting hostfiles.
|
||||
cat <<'EOF' > ntfs.hostfiles
|
||||
.
|
||||
./usr
|
||||
.%{_libdir}
|
||||
.%{_libdir}/libfuse.so.*
|
||||
.%{_libdir}/libgcrypt.so.*
|
||||
.%{_libdir}/libgnutls.so.*
|
||||
.%{_libdir}/libgpg-error.so.*
|
||||
.%{_libdir}/libp11-kit.so.*
|
||||
.%{_libdir}/libtasn1.so.*
|
||||
.%{_libdir}/libz.so.*
|
||||
./lib64
|
||||
./lib64/libfuse.so.*
|
||||
EOF
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d
|
||||
install -m 0644 ntfs.img $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d/
|
||||
install -m 0644 ntfs.hostfiles $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d/
|
||||
|
||||
|
||||
%files
|
||||
%doc COPYING README
|
||||
%{_libdir}/guestfs/supermin.d/ntfs.img
|
||||
%{_libdir}/guestfs/supermin.d/ntfs.hostfiles
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Dec 20 2011 Richard W.M. Jones <rjones@redhat.com> - 7.0-1
|
||||
- New package for RHEL 7
|
||||
resolves: rhbz#819939
|
||||
- Resync against Rawhide package.
|
||||
|
||||
* Mon Mar 28 2011 Richard W.M. Jones <rjones@redhat.com> - 1.0-7
|
||||
- Disable debuginfo package.
|
||||
resolves: RHBZ#691555.
|
||||
|
||||
* Tue Mar 8 2011 Richard W.M. Jones <rjones@redhat.com> - 1.0-6
|
||||
- Require libguestfs 1.7.17 (newer version in RHEL 6.1).
|
||||
- Require febootstrap-supermin-helper instead of febootstrap
|
||||
resolves: RHBZ#670299.
|
||||
|
||||
* Thu Jul 1 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0-5
|
||||
- Make sure intermediate lib* directories are created in hostfiles (RHBZ#603429)
|
||||
|
||||
* Thu Jun 3 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0-4
|
||||
- Requires fuse-libs (RHBZ#599300).
|
||||
|
||||
* Fri May 21 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0-3
|
||||
- ExclusiveArch x86_64.
|
||||
|
||||
* Tue May 18 2010 Richard W.M. Jones <rjones@redhat.com> - 1.0-2
|
||||
- Package Windows support for libguestfs.
|
42
ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch
Normal file
42
ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch
Normal file
@ -0,0 +1,42 @@
|
||||
From 4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7 Mon Sep 17 00:00:00 2001
|
||||
From: =?utf8?q?Jean-Pierre=20Andr=C3=A9?= <jpandre@users.sourceforge.net>
|
||||
Date: Wed, 12 Sep 2012 09:42:24 +0200
|
||||
Subject: [PATCH] Accepted processing restart pages v 2.0 with no warning (used by Windows 8)
|
||||
|
||||
In the $LogFile, Windows 8 defines restart pages with version 2.0.
|
||||
The checks designed for version 1.1 appear to apply, so accept v 2.0
|
||||
and apply the usual checks.
|
||||
---
|
||||
libntfs-3g/logfile.c | 15 +++++++++------
|
||||
1 files changed, 9 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/libntfs-3g/logfile.c b/libntfs-3g/logfile.c
|
||||
index a4f00d5..83811fa 100644
|
||||
--- a/libntfs-3g/logfile.c
|
||||
+++ b/libntfs-3g/logfile.c
|
||||
@@ -84,13 +84,16 @@ static BOOL ntfs_check_restart_page_header(RESTART_PAGE_HEADER *rp, s64 pos)
|
||||
"position in $LogFile.\n");
|
||||
return FALSE;
|
||||
}
|
||||
- /* We only know how to handle version 1.1. */
|
||||
- if (sle16_to_cpu(rp->major_ver) != 1 ||
|
||||
- sle16_to_cpu(rp->minor_ver) != 1) {
|
||||
+ /* We only know how to handle version 1.1 and 2.0. */
|
||||
+ if (((rp->major_ver != const_cpu_to_le16(1))
|
||||
+ || (rp->minor_ver != const_cpu_to_le16(1)))
|
||||
+ && ((rp->major_ver != const_cpu_to_le16(2))
|
||||
+ || (rp->minor_ver != const_cpu_to_le16(0)))) {
|
||||
ntfs_log_error("$LogFile version %i.%i is not "
|
||||
- "supported. (This driver supports version "
|
||||
- "1.1 only.)\n", (int)sle16_to_cpu(rp->major_ver),
|
||||
- (int)sle16_to_cpu(rp->minor_ver));
|
||||
+ "supported.\n (This driver supports version "
|
||||
+ "1.1 and 2.0 only.)\n",
|
||||
+ (int)sle16_to_cpu(rp->major_ver),
|
||||
+ (int)sle16_to_cpu(rp->minor_ver));
|
||||
return FALSE;
|
||||
}
|
||||
/*
|
||||
--
|
||||
1.7.4.1
|
||||
|
109
ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch
Normal file
109
ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch
Normal file
@ -0,0 +1,109 @@
|
||||
diff -up ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c.559270a8 ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c
|
||||
--- ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c.559270a8 2012-10-04 16:14:28.439011268 -0400
|
||||
+++ ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/logfile.c 2012-10-04 16:14:28.443011272 -0400
|
||||
@@ -84,7 +84,12 @@ static BOOL ntfs_check_restart_page_head
|
||||
"position in $LogFile.\n");
|
||||
return FALSE;
|
||||
}
|
||||
- /* We only know how to handle version 1.1 and 2.0. */
|
||||
+ /*
|
||||
+ * We only know how to handle version 1.1 and 2.0, though
|
||||
+ * version 2.0 is probably related to cached metadata in
|
||||
+ * Windows 8, and we will refuse to mount.
|
||||
+ * Nevertheless, do all the relevant checks before rejecting.
|
||||
+ */
|
||||
if (((rp->major_ver != const_cpu_to_le16(1))
|
||||
|| (rp->minor_ver != const_cpu_to_le16(1)))
|
||||
&& ((rp->major_ver != const_cpu_to_le16(2))
|
||||
diff -up ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c.559270a8 ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c
|
||||
--- ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c.559270a8 2012-01-15 08:26:14.000000000 -0500
|
||||
+++ ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/volume.c 2012-10-04 16:16:55.324071714 -0400
|
||||
@@ -89,13 +89,9 @@ static const char *corrupt_volume_msg =
|
||||
"for more details.\n";
|
||||
|
||||
static const char *hibernated_volume_msg =
|
||||
-"The NTFS partition is hibernated. Please resume and shutdown Windows\n"
|
||||
-"properly, or mount the volume read-only with the 'ro' mount option, or\n"
|
||||
-"mount the volume read-write with the 'remove_hiberfile' mount option.\n"
|
||||
-"For example type on the command line:\n"
|
||||
-"\n"
|
||||
-" mount -t ntfs-3g -o remove_hiberfile %s %s\n"
|
||||
-"\n";
|
||||
+"The NTFS partition is in an unsafe state. Please resume and shutdown\n"
|
||||
+"Windows fully (no hibernation or fast restarting), or mount the volume\n"
|
||||
+"read-only with the 'ro' mount option.\n";
|
||||
|
||||
static const char *unclean_journal_msg =
|
||||
"Write access is denied because the disk wasn't safely powered\n"
|
||||
@@ -649,6 +645,24 @@ static int ntfs_volume_check_logfile(ntf
|
||||
|
||||
if (!ntfs_check_logfile(na, &rp) || !ntfs_is_logfile_clean(na, rp))
|
||||
err = EOPNOTSUPP;
|
||||
+ /*
|
||||
+ * If the latest restart page was identified as version
|
||||
+ * 2.0, then Windows may have kept a cached copy of
|
||||
+ * metadata for fast restarting, and we should not mount.
|
||||
+ * Hibernation will be seen the same way on a non
|
||||
+ * Windows-system partition, so we have to use the same
|
||||
+ * error code (EPERM).
|
||||
+ * The restart page may also be identified as version 2.0
|
||||
+ * when access to the file system is terminated abruptly
|
||||
+ * by unplugging or power cut, so mounting is also rejected
|
||||
+ * after such an event.
|
||||
+ */
|
||||
+ if (rp
|
||||
+ && (rp->major_ver == const_cpu_to_le16(2))
|
||||
+ && (rp->minor_ver == const_cpu_to_le16(0))) {
|
||||
+ ntfs_log_error("Metadata kept in Windows cache, refused to mount.\n");
|
||||
+ err = EPERM;
|
||||
+ }
|
||||
free(rp);
|
||||
ntfs_attr_close(na);
|
||||
out:
|
||||
@@ -1200,7 +1214,8 @@ ntfs_volume *ntfs_device_mount(struct nt
|
||||
ntfs_volume_check_hiberfile(vol, 1) < 0)
|
||||
goto error_exit;
|
||||
if (ntfs_volume_check_logfile(vol) < 0) {
|
||||
- if (!(flags & MS_RECOVER))
|
||||
+ /* Always reject cached metadata for now */
|
||||
+ if (!(flags & MS_RECOVER) || (errno == EPERM))
|
||||
goto error_exit;
|
||||
ntfs_log_info("The file system wasn't safely "
|
||||
"closed on Windows. Fixing.\n");
|
||||
@@ -1642,6 +1657,10 @@ int ntfs_volume_error(int err)
|
||||
ret = NTFS_VOLUME_CORRUPT;
|
||||
break;
|
||||
case EPERM:
|
||||
+ /*
|
||||
+ * Hibernation and fast restarting are seen the
|
||||
+ * same way on a non Windows-system partition.
|
||||
+ */
|
||||
ret = NTFS_VOLUME_HIBERNATED;
|
||||
break;
|
||||
case EOPNOTSUPP:
|
||||
diff -up ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in.559270a8 ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in
|
||||
--- ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in.559270a8 2012-01-15 08:26:14.000000000 -0500
|
||||
+++ ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.8.in 2012-10-04 16:14:28.445011274 -0400
|
||||
@@ -36,6 +36,22 @@ a few differences mentioned below in rel
|
||||
.PP
|
||||
The \fIvolume\fR to be mounted can be either a block device or
|
||||
an image file.
|
||||
+.SS Windows hibernation and fast restarting
|
||||
+On computers which can be dual-booted into Windows or Linux, Windows has
|
||||
+to be fully shut down before booting into Linux, otherwise the NTFS file
|
||||
+systems on internal disks may be left in an inconsistent state and changes
|
||||
+made by Linux may be ignored by Windows.
|
||||
+.P
|
||||
+So, Windows may not be left in hibernation when starting Linux, in order
|
||||
+to avoid inconsistencies. Moreover, the fast restart feature available on
|
||||
+recent Windows systems has to be disabled. This can be achieved by issuing
|
||||
+as an Administrator the Windows command which disables both
|
||||
+hibernation and fast restarting :
|
||||
+.RS
|
||||
+.sp
|
||||
+powercfg /h off
|
||||
+.sp
|
||||
+.RE
|
||||
.SS Access Handling and Security
|
||||
By default, files and directories are owned by the effective
|
||||
user and group of the mounting process, and everybody has
|
187
ntfs-3g-junction-point-fix.patch
Normal file
187
ntfs-3g-junction-point-fix.patch
Normal file
@ -0,0 +1,187 @@
|
||||
--- ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/dir.c.ref 2012-08-18 09:46:22.000000000 +0200
|
||||
+++ ntfs-3g_ntfsprogs-2012.1.15/libntfs-3g/dir.c 2012-08-18 11:07:57.000000000 +0200
|
||||
@@ -867,6 +867,83 @@
|
||||
INDEX_TYPE_ALLOCATION, /* index allocation */
|
||||
} INDEX_TYPE;
|
||||
|
||||
+/*
|
||||
+ * Decode Interix file types
|
||||
+ *
|
||||
+ * Non-Interix types are returned as plain files, because a
|
||||
+ * Windows user may force patterns very similar to Interix.
|
||||
+ */
|
||||
+
|
||||
+static u32 ntfs_interix_types(ntfs_inode *ni)
|
||||
+{
|
||||
+ ntfs_attr *na;
|
||||
+ u32 dt_type;
|
||||
+ le64 magic;
|
||||
+
|
||||
+ dt_type = NTFS_DT_UNKNOWN;
|
||||
+ na = ntfs_attr_open(ni, AT_DATA, NULL, 0);
|
||||
+ if (na) {
|
||||
+ /* Unrecognized patterns (eg HID + SYST) are plain files */
|
||||
+ dt_type = NTFS_DT_REG;
|
||||
+ if (na->data_size <= 1) {
|
||||
+ if (!(ni->flags & FILE_ATTR_HIDDEN))
|
||||
+ dt_type = (na->data_size ?
|
||||
+ NTFS_DT_SOCK : NTFS_DT_FIFO);
|
||||
+ } else {
|
||||
+ if ((na->data_size >= (s64)sizeof(magic))
|
||||
+ && (ntfs_attr_pread(na, 0, sizeof(magic), &magic)
|
||||
+ == sizeof(magic))) {
|
||||
+ if (magic == INTX_SYMBOLIC_LINK)
|
||||
+ dt_type = NTFS_DT_LNK;
|
||||
+ else if (magic == INTX_BLOCK_DEVICE)
|
||||
+ dt_type = NTFS_DT_BLK;
|
||||
+ else if (magic == INTX_CHARACTER_DEVICE)
|
||||
+ dt_type = NTFS_DT_CHR;
|
||||
+ }
|
||||
+ }
|
||||
+ ntfs_attr_close(na);
|
||||
+ }
|
||||
+ return (dt_type);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Decode file types
|
||||
+ *
|
||||
+ * Better only use for Interix types and junctions,
|
||||
+ * unneeded complexity when used for plain files or directories
|
||||
+ *
|
||||
+ * Error cases are logged and returned as unknown.
|
||||
+ */
|
||||
+
|
||||
+static u32 ntfs_dir_entry_type(ntfs_inode *dir_ni, MFT_REF mref, FILE_ATTR_FLAGS attributes)
|
||||
+{
|
||||
+ ntfs_inode *ni;
|
||||
+ u32 dt_type;
|
||||
+
|
||||
+ dt_type = NTFS_DT_UNKNOWN;
|
||||
+ ni = ntfs_inode_open(dir_ni->vol, mref);
|
||||
+ if (ni) {
|
||||
+ if ((attributes & FILE_ATTR_REPARSE_POINT)
|
||||
+ && ntfs_possible_symlink(ni))
|
||||
+ dt_type = NTFS_DT_LNK;
|
||||
+ else
|
||||
+ if ((attributes & FILE_ATTR_SYSTEM)
|
||||
+ && !(attributes & FILE_ATTR_I30_INDEX_PRESENT))
|
||||
+ dt_type = ntfs_interix_types(ni);
|
||||
+ else
|
||||
+ dt_type = (attributes
|
||||
+ & FILE_ATTR_I30_INDEX_PRESENT
|
||||
+ ? NTFS_DT_DIR : NTFS_DT_REG);
|
||||
+ if (ntfs_inode_close(ni)) {
|
||||
+ /* anything special to do ? */
|
||||
+ }
|
||||
+ }
|
||||
+ if (dt_type == NTFS_DT_UNKNOWN)
|
||||
+ ntfs_log_error("Could not decode the type of inode %lld\n",
|
||||
+ (long long)MREF(mref));
|
||||
+ return (dt_type);
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* ntfs_filldir - ntfs specific filldir method
|
||||
* @dir_ni: ntfs inode of current directory
|
||||
@@ -901,19 +978,23 @@
|
||||
dir_ni->vol->mft_record_size;
|
||||
else /* if (index_type == INDEX_TYPE_ROOT) */
|
||||
*pos = (u8*)ie - (u8*)iu.ir;
|
||||
+ mref = le64_to_cpu(ie->indexed_file);
|
||||
+ metadata = (MREF(mref) != FILE_root) && (MREF(mref) < FILE_first_user);
|
||||
/* Skip root directory self reference entry. */
|
||||
if (MREF_LE(ie->indexed_file) == FILE_root)
|
||||
return 0;
|
||||
- if (ie->key.file_name.file_attributes & FILE_ATTR_I30_INDEX_PRESENT)
|
||||
+ if ((ie->key.file_name.file_attributes
|
||||
+ & (FILE_ATTR_REPARSE_POINT | FILE_ATTR_SYSTEM))
|
||||
+ && !metadata)
|
||||
+ dt_type = ntfs_dir_entry_type(dir_ni, mref,
|
||||
+ ie->key.file_name.file_attributes);
|
||||
+ else if (ie->key.file_name.file_attributes
|
||||
+ & FILE_ATTR_I30_INDEX_PRESENT)
|
||||
dt_type = NTFS_DT_DIR;
|
||||
- else if (fn->file_attributes & FILE_ATTR_SYSTEM)
|
||||
- dt_type = NTFS_DT_UNKNOWN;
|
||||
else
|
||||
dt_type = NTFS_DT_REG;
|
||||
|
||||
/* return metadata files and hidden files if requested */
|
||||
- mref = le64_to_cpu(ie->indexed_file);
|
||||
- metadata = (MREF(mref) != FILE_root) && (MREF(mref) < FILE_first_user);
|
||||
if ((!metadata && (NVolShowHidFiles(dir_ni->vol)
|
||||
|| !(fn->file_attributes & FILE_ATTR_HIDDEN)))
|
||||
|| (NVolShowSysFiles(dir_ni->vol) && (NVolShowHidFiles(dir_ni->vol)
|
||||
--- ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.c.ref 2012-08-18 09:44:57.000000000 +0200
|
||||
+++ ntfs-3g_ntfsprogs-2012.1.15/src/ntfs-3g.c 2012-08-18 09:47:41.000000000 +0200
|
||||
@@ -1017,10 +1017,30 @@
|
||||
} else {
|
||||
struct stat st = { .st_ino = MREF(mref) };
|
||||
|
||||
- if (dt_type == NTFS_DT_REG)
|
||||
- st.st_mode = S_IFREG | (0777 & ~ctx->fmask);
|
||||
- else if (dt_type == NTFS_DT_DIR)
|
||||
+ switch (dt_type) {
|
||||
+ case NTFS_DT_DIR :
|
||||
st.st_mode = S_IFDIR | (0777 & ~ctx->dmask);
|
||||
+ break;
|
||||
+ case NTFS_DT_LNK :
|
||||
+ st.st_mode = S_IFLNK | 0777;
|
||||
+ break;
|
||||
+ case NTFS_DT_FIFO :
|
||||
+ st.st_mode = S_IFIFO;
|
||||
+ break;
|
||||
+ case NTFS_DT_SOCK :
|
||||
+ st.st_mode = S_IFSOCK;
|
||||
+ break;
|
||||
+ case NTFS_DT_BLK :
|
||||
+ st.st_mode = S_IFBLK;
|
||||
+ break;
|
||||
+ case NTFS_DT_CHR :
|
||||
+ st.st_mode = S_IFCHR;
|
||||
+ break;
|
||||
+ default : /* unexpected types shown as plain files */
|
||||
+ case NTFS_DT_REG :
|
||||
+ st.st_mode = S_IFREG | (0777 & ~ctx->fmask);
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
#if defined(__APPLE__) || defined(__DARWIN__)
|
||||
/*
|
||||
--- ntfs-3g_ntfsprogs-2012.1.15/src/lowntfs-3g.c.ref 2012-08-18 09:44:57.000000000 +0200
|
||||
+++ ntfs-3g_ntfsprogs-2012.1.15/src/lowntfs-3g.c 2012-08-18 09:47:41.000000000 +0200
|
||||
@@ -920,10 +920,30 @@
|
||||
if (MREF(mref) > 1) {
|
||||
struct stat st = { .st_ino = MREF(mref) };
|
||||
|
||||
- if (dt_type == NTFS_DT_REG)
|
||||
- st.st_mode = S_IFREG | (0777 & ~ctx->fmask);
|
||||
- else if (dt_type == NTFS_DT_DIR)
|
||||
+ switch (dt_type) {
|
||||
+ case NTFS_DT_DIR :
|
||||
st.st_mode = S_IFDIR | (0777 & ~ctx->dmask);
|
||||
+ break;
|
||||
+ case NTFS_DT_LNK :
|
||||
+ st.st_mode = S_IFLNK | 0777;
|
||||
+ break;
|
||||
+ case NTFS_DT_FIFO :
|
||||
+ st.st_mode = S_IFIFO;
|
||||
+ break;
|
||||
+ case NTFS_DT_SOCK :
|
||||
+ st.st_mode = S_IFSOCK;
|
||||
+ break;
|
||||
+ case NTFS_DT_BLK :
|
||||
+ st.st_mode = S_IFBLK;
|
||||
+ break;
|
||||
+ case NTFS_DT_CHR :
|
||||
+ st.st_mode = S_IFCHR;
|
||||
+ break;
|
||||
+ default : /* unexpected types shown as plain files */
|
||||
+ case NTFS_DT_REG :
|
||||
+ st.st_mode = S_IFREG | (0777 & ~ctx->fmask);
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
#if defined(__APPLE__) || defined(__DARWIN__)
|
||||
/*
|
@ -0,0 +1,16 @@
|
||||
diff -up ntfs-3g_ntfsprogs-2011.10.9-RC/ntfsprogs/ntfsck.c.OLD ntfs-3g_ntfsprogs-2011.10.9-RC/ntfsprogs/ntfsck.c
|
||||
--- ntfs-3g_ntfsprogs-2011.10.9-RC/ntfsprogs/ntfsck.c.OLD 2011-10-11 10:24:02.381335115 -0400
|
||||
+++ ntfs-3g_ntfsprogs-2011.10.9-RC/ntfsprogs/ntfsck.c 2011-10-11 10:26:41.513559206 -0400
|
||||
@@ -877,7 +877,11 @@ int main(int argc, char **argv)
|
||||
if (errors)
|
||||
return 2;
|
||||
if (unsupported)
|
||||
- return 1;
|
||||
+ ntfs_log_info("ntfsck was unable to run properly.\n");
|
||||
+ // If we return 1 here, we fail for ntfs services fscking on boot just because
|
||||
+ // ntfsck isn't smart enough to handle 99% of cases. So, we just return 0.
|
||||
+ // return 1;
|
||||
+ return 0;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user