From b98a1ed2c301050008f51e83d9be3472c2a07dc2 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Wed, 3 Apr 2013 15:46:52 +0100 Subject: [PATCH] Resync against Rawhide package (ntfs-3g 2013.1.13). - Drop HAL file since HAL is dead. resolves: rhbz#819939 --- 20-ntfs-config-write-policy.fdi | 11 -- libguestfs-winsupport.spec | 27 ++- ...9163c9ef1f0cdbbf533317b291220c7fd1c7.patch | 42 ---- ...70a8f67c77a7ce51246c23d2b2837bcff0c9.patch | 109 ---------- ntfs-3g-junction-point-fix.patch | 187 ------------------ sources | 2 +- 6 files changed, 12 insertions(+), 366 deletions(-) delete mode 100644 20-ntfs-config-write-policy.fdi delete mode 100644 ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch delete mode 100644 ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch delete mode 100644 ntfs-3g-junction-point-fix.patch diff --git a/20-ntfs-config-write-policy.fdi b/20-ntfs-config-write-policy.fdi deleted file mode 100644 index 82731c5..0000000 --- a/20-ntfs-config-write-policy.fdi +++ /dev/null @@ -1,11 +0,0 @@ - - - - - ntfs-3g - ntfs-3g - locale= - - - - diff --git a/libguestfs-winsupport.spec b/libguestfs-winsupport.spec index 64ad322..7d67173 100644 --- a/libguestfs-winsupport.spec +++ b/libguestfs-winsupport.spec @@ -1,10 +1,10 @@ %global debug_package %{nil} -%global ntfs_version 2012.1.15 +%global ntfs_version 2013.1.13 Name: libguestfs-winsupport Version: 7.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Add support for Windows guests to libguestfs License: GPLv2+ @@ -19,13 +19,8 @@ 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 @@ -51,9 +46,6 @@ 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 @@ -64,7 +56,7 @@ CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" --with-fuse=external \ --exec-prefix=/ \ --enable-crypto \ - --enable-extras + --enable-extras make %{?_smp_mflags} LIBTOOL=%{_bindir}/libtool # Create a README file. @@ -74,8 +66,8 @@ 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}. +The package contains NTFS FUSE filesystem support from +ntfs-3g %{ntfs_3g_version}. EOF @@ -110,8 +102,6 @@ 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. @@ -154,7 +144,12 @@ install -m 0644 ntfs.hostfiles $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d/ %changelog -* Thu Dec 20 2011 Richard W.M. Jones - 7.0-1 +* Wed Apr 3 2013 Richard W.M. Jones - 7.0-2 +- Resync against Rawhide package (ntfs-3g 2013.1.13). +- Drop HAL file since HAL is dead. + resolves: rhbz#819939 + +* Thu Dec 20 2012 Richard W.M. Jones - 7.0-1 - New package for RHEL 7 resolves: rhbz#819939 - Resync against Rawhide package. diff --git a/ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch b/ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch deleted file mode 100644 index ec1a762..0000000 --- a/ntfs-3g-4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 4d0b9163c9ef1f0cdbbf533317b291220c7fd1c7 Mon Sep 17 00:00:00 2001 -From: =?utf8?q?Jean-Pierre=20Andr=C3=A9?= -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 - diff --git a/ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch b/ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch deleted file mode 100644 index 9b92298..0000000 --- a/ntfs-3g-559270a8f67c77a7ce51246c23d2b2837bcff0c9.patch +++ /dev/null @@ -1,109 +0,0 @@ -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 diff --git a/ntfs-3g-junction-point-fix.patch b/ntfs-3g-junction-point-fix.patch deleted file mode 100644 index 90c72ae..0000000 --- a/ntfs-3g-junction-point-fix.patch +++ /dev/null @@ -1,187 +0,0 @@ ---- 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__) - /* diff --git a/sources b/sources index 89d5b8e..e6d7a84 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -341acae00a290cab9b00464db65015cc ntfs-3g_ntfsprogs-2012.1.15.tgz +2d6fb47ddf62b51733227126fe9227fe ntfs-3g_ntfsprogs-2013.1.13.tgz