Merge branch 'rawhide' into epel8

epel8
Neal Gompa 3 years ago
commit 84f33d1032

@ -1,80 +0,0 @@
--- ntfs-3g_ntfsprogs-2015.3.14/libfuse-lite/mount_util.c.ref 2015-03-14 15:10:12.000000000 +0100
+++ ntfs-3g_ntfsprogs-2015.3.14/libfuse-lite/mount_util.c 2015-05-18 11:02:50.330654300 +0200
@@ -66,6 +66,7 @@
return -1;
}
if (res == 0) {
+ char *env = NULL;
char templ[] = "/tmp/fusermountXXXXXX";
char *tmp;
@@ -87,8 +88,8 @@
exit(1);
}
rmdir(tmp);
- execl("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts,
- fsname, mnt, NULL);
+ execle("/sbin/mount", "/sbin/mount", "-F", type, "-o", opts,
+ fsname, mnt, NULL, &env);
fprintf(stderr, "%s: failed to execute /sbin/mount: %s\n", progname,
strerror(errno));
exit(1);
@@ -120,9 +121,16 @@
return -1;
}
if (res == 0) {
+ char *env = NULL;
+
setuid(geteuid());
- execl("/sbin/umount", "/sbin/umount", !lazy ? "-f" : NULL, mnt,
- NULL);
+ if (lazy) {
+ execle("/sbin/umount", "/sbin/umount", mnt,
+ NULL, &env);
+ } else {
+ execle("/sbin/umount", "/sbin/umount", "-f", mnt,
+ NULL, &env);
+ }
fprintf(stderr, "%s: failed to execute /sbin/umount: %s\n", progname,
strerror(errno));
exit(1);
@@ -302,6 +310,7 @@
return 0;
}
if (res == 0) {
+ char *env = NULL;
char templ[] = "/tmp/fusermountXXXXXX";
char *tmp;
@@ -325,8 +334,8 @@
exit(1);
}
rmdir(tmp);
- execl("/bin/mount", "/bin/mount", "-i", "-f", "-t", type, "-o", opts,
- fsname, mnt, NULL);
+ execle("/bin/mount", "/bin/mount", "-i", "-f", "-t", type, "-o", opts,
+ fsname, mnt, NULL, &env);
fprintf(stderr, "%s: failed to execute /bin/mount: %s\n", progname,
strerror(errno));
exit(1);
@@ -353,11 +362,18 @@
return -1;
}
if (res == 0) {
+ char *env = NULL;
+
if (setuid(geteuid()))
fprintf(stderr, "%s: failed to setuid : %s\n", progname,
strerror(errno));
- execl("/bin/umount", "/bin/umount", "-i", mnt, lazy ? "-l" : NULL,
- NULL);
+ if (lazy) {
+ execle("/bin/umount", "/bin/umount", "-i", mnt, "-l",
+ NULL, &env);
+ } else {
+ execle("/bin/umount", "/bin/umount", "-i", mnt,
+ NULL, &env);
+ }
fprintf(stderr, "%s: failed to execute /bin/umount: %s\n", progname,
strerror(errno));
exit(1);

@ -1,12 +0,0 @@
--- libntfs-3g/volume.c.ref 2017-03-23 10:42:44.000000000 +0100
+++ libntfs-3g/volume.c 2017-12-20 08:11:51.842424300 +0100
@@ -959,7 +959,8 @@
vol->mftmirr_size = l;
}
ntfs_log_debug("Comparing $MFTMirr to $MFT...\n");
- for (i = 0; i < vol->mftmirr_size; ++i) {
+ /* Windows 10 does not update the full $MFTMirr any more */
+ for (i = 0; (i < vol->mftmirr_size) && (i < FILE_first_user); ++i) {
MFT_RECORD *mrec, *mrec2;
const char *ESTR[12] = { "$MFT", "$MFTMirr", "$LogFile",
"$Volume", "$AttrDef", "root directory", "$Bitmap",

@ -1,46 +0,0 @@
diff -up ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c.CVE-2019-9755 ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c
--- ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c.CVE-2019-9755 2019-03-29 16:08:22.359920075 -0400
+++ ntfs-3g_ntfsprogs-2017.3.23/src/lowntfs-3g.c 2019-03-29 16:08:28.237794169 -0400
@@ -4323,7 +4323,8 @@ int main(int argc, char *argv[])
else {
ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX);
if (ctx->abs_mnt_point) {
- if (getcwd(ctx->abs_mnt_point,
+ if ((strlen(opts.mnt_point) < PATH_MAX)
+ && getcwd(ctx->abs_mnt_point,
PATH_MAX - strlen(opts.mnt_point) - 1)) {
strcat(ctx->abs_mnt_point, "/");
strcat(ctx->abs_mnt_point, opts.mnt_point);
@@ -4331,6 +4332,9 @@ int main(int argc, char *argv[])
/* Solaris also wants the absolute mount point */
opts.mnt_point = ctx->abs_mnt_point;
#endif /* defined(__sun) && defined (__SVR4) */
+ } else {
+ free(ctx->abs_mnt_point);
+ ctx->abs_mnt_point = (char*)NULL;
}
}
}
diff -up ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c.CVE-2019-9755 ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c
--- ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c.CVE-2019-9755 2019-03-29 16:08:54.691227528 -0400
+++ ntfs-3g_ntfsprogs-2017.3.23/src/ntfs-3g.c 2019-03-29 16:09:40.362249397 -0400
@@ -4123,7 +4123,8 @@ int main(int argc, char *argv[])
else {
ctx->abs_mnt_point = (char*)ntfs_malloc(PATH_MAX);
if (ctx->abs_mnt_point) {
- if (getcwd(ctx->abs_mnt_point,
+ if ((strlen(opts.mnt_point) < PATH_MAX)
+ && getcwd(ctx->abs_mnt_point,
PATH_MAX - strlen(opts.mnt_point) - 1)) {
strcat(ctx->abs_mnt_point, "/");
strcat(ctx->abs_mnt_point, opts.mnt_point);
@@ -4131,6 +4132,9 @@ int main(int argc, char *argv[])
/* Solaris also wants the absolute mount point */
opts.mnt_point = ctx->abs_mnt_point;
#endif /* defined(__sun) && defined (__SVR4) */
+ } else {
+ free(ctx->abs_mnt_point);
+ ctx->abs_mnt_point = (char*)NULL;
}
}
}

@ -1,379 +0,0 @@
--- libntfs-3g/bootsect.c.ref 2017-03-23 10:42:44.000000000 +0100
+++ libntfs-3g/bootsect.c 2018-05-07 09:11:13.004710800 +0200
@@ -38,6 +38,7 @@
#include <errno.h>
#endif
+#include "param.h"
#include "compat.h"
#include "bootsect.h"
#include "debug.h"
@@ -61,6 +62,7 @@
{
u32 i;
BOOL ret = FALSE;
+ u16 sectors_per_cluster;
ntfs_log_debug("Beginning bootsector check.\n");
@@ -83,15 +85,27 @@
case 1: case 2: case 4: case 8: case 16: case 32: case 64: case 128:
break;
default:
- ntfs_log_error("Unexpected sectors per cluster value (%d).\n",
- b->bpb.sectors_per_cluster);
- goto not_ntfs;
+ if ((b->bpb.sectors_per_cluster < 240)
+ || (b->bpb.sectors_per_cluster > 249)) {
+ if (b->bpb.sectors_per_cluster > 128)
+ ntfs_log_error("Unexpected sectors"
+ " per cluster value (code 0x%x)\n",
+ b->bpb.sectors_per_cluster);
+ else
+ ntfs_log_error("Unexpected sectors"
+ " per cluster value (%d).\n",
+ b->bpb.sectors_per_cluster);
+ goto not_ntfs;
+ }
}
ntfs_log_debug("Checking cluster size.\n");
- i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) *
- b->bpb.sectors_per_cluster;
- if (i > 65536) {
+ if (b->bpb.sectors_per_cluster > 128)
+ sectors_per_cluster = 1 << (256 - b->bpb.sectors_per_cluster);
+ else
+ sectors_per_cluster = b->bpb.sectors_per_cluster;
+ i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) * sectors_per_cluster;
+ if (i > NTFS_MAX_CLUSTER_SIZE) {
ntfs_log_error("Unexpected cluster size (%d).\n", i);
goto not_ntfs;
}
@@ -171,7 +185,7 @@
int ntfs_boot_sector_parse(ntfs_volume *vol, const NTFS_BOOT_SECTOR *bs)
{
s64 sectors;
- u8 sectors_per_cluster;
+ u16 sectors_per_cluster;
s8 c;
/* We return -1 with errno = EINVAL on error. */
@@ -186,7 +200,10 @@
* below or equal the number_of_clusters) really belong in the
* ntfs_boot_sector_is_ntfs but in this way we can just do this once.
*/
- sectors_per_cluster = bs->bpb.sectors_per_cluster;
+ if (bs->bpb.sectors_per_cluster > 128)
+ sectors_per_cluster = 1 << (256 - bs->bpb.sectors_per_cluster);
+ else
+ sectors_per_cluster = bs->bpb.sectors_per_cluster;
ntfs_log_debug("SectorsPerCluster = 0x%x\n", sectors_per_cluster);
if (sectors_per_cluster & (sectors_per_cluster - 1)) {
ntfs_log_error("sectors_per_cluster (%d) is not a power of 2."
--- ntfsprogs/mkntfs.8.in.ref 2017-03-23 10:42:44.000000000 +0100
+++ ntfsprogs/mkntfs.8.in 2018-05-07 09:11:13.014132400 +0200
@@ -132,7 +132,7 @@
.TP
\fB\-c\fR, \fB\-\-cluster\-size\fR BYTES
Specify the size of clusters in bytes. Valid cluster size values are powers of
-two, with at least 256, and at most 65536 bytes per cluster. If omitted,
+two, with at least 256, and at most 2097152 bytes (2MB) per cluster. If omitted,
.B mkntfs
uses 4096 bytes as the default cluster size.
.sp
--- ntfsprogs/mkntfs.c.ref 2017-03-23 10:42:44.000000000 +0100
+++ ntfsprogs/mkntfs.c 2018-05-07 09:11:13.035522300 +0200
@@ -6,7 +6,7 @@
* Copyright (c) 2002-2006 Szabolcs Szakacsits
* Copyright (c) 2005 Erik Sornes
* Copyright (c) 2007 Yura Pakhuchiy
- * Copyright (c) 2010-2014 Jean-Pierre Andre
+ * Copyright (c) 2010-2018 Jean-Pierre Andre
*
* This utility will create an NTFS 1.2 or 3.1 volume on a user
* specified (block) device.
@@ -119,6 +119,7 @@
# endif
#endif
+#include "param.h"
#include "security.h"
#include "types.h"
#include "attrib.h"
@@ -287,7 +288,7 @@
ntfs_log_info("Copyright (c) 2002-2006 Szabolcs Szakacsits\n");
ntfs_log_info("Copyright (c) 2005 Erik Sornes\n");
ntfs_log_info("Copyright (c) 2007 Yura Pakhuchiy\n");
- ntfs_log_info("Copyright (c) 2010-2014 Jean-Pierre Andre\n");
+ ntfs_log_info("Copyright (c) 2010-2018 Jean-Pierre Andre\n");
ntfs_log_info("\n%s\n%s%s\n", ntfs_gpl, ntfs_bugs, ntfs_home);
}
@@ -3719,11 +3720,11 @@
/*
* For huge volumes, grow the cluster size until the number of
* clusters fits into 32 bits or the cluster size exceeds the
- * maximum limit of 64kiB.
+ * maximum limit of NTFS_MAX_CLUSTER_SIZE.
*/
while (volume_size >> (ffs(vol->cluster_size) - 1 + 32)) {
vol->cluster_size <<= 1;
- if (vol->cluster_size > 65535) {
+ if (vol->cluster_size >= NTFS_MAX_CLUSTER_SIZE) {
ntfs_log_error("Device is too large to hold an "
"NTFS volume (maximum size is "
"256TiB).\n");
@@ -3744,15 +3745,18 @@
"to, or larger than, the sector size.\n");
return FALSE;
}
- if (vol->cluster_size > 128 * (u32)opts.sector_size) {
+ /* Before Windows 10 Creators, the limit was 128 */
+ if (vol->cluster_size > 4096 * (u32)opts.sector_size) {
ntfs_log_error("The cluster size is invalid. It cannot be "
- "more that 128 times the size of the sector "
+ "more that 4096 times the size of the sector "
"size.\n");
return FALSE;
}
- if (vol->cluster_size > 65536) {
+ if (vol->cluster_size > NTFS_MAX_CLUSTER_SIZE) {
ntfs_log_error("The cluster size is invalid. The maximum "
- "cluster size is 65536 bytes (64kiB).\n");
+ "cluster size is %lu bytes (%lukiB).\n",
+ (unsigned long)NTFS_MAX_CLUSTER_SIZE,
+ (unsigned long)(NTFS_MAX_CLUSTER_SIZE >> 10));
return FALSE;
}
vol->cluster_size_bits = ffs(vol->cluster_size) - 1;
@@ -4387,6 +4391,7 @@
u8 *sd;
FILE_ATTR_FLAGS extend_flags;
VOLUME_FLAGS volume_flags = const_cpu_to_le16(0);
+ int sectors_per_cluster;
int nr_sysfiles;
int buf_sds_first_size;
char *buf_sds;
@@ -4639,8 +4644,11 @@
* already inserted, so no need to worry about these things.
*/
bs->bpb.bytes_per_sector = cpu_to_le16(opts.sector_size);
- bs->bpb.sectors_per_cluster = (u8)(g_vol->cluster_size /
- opts.sector_size);
+ sectors_per_cluster = g_vol->cluster_size / opts.sector_size;
+ if (sectors_per_cluster > 128)
+ bs->bpb.sectors_per_cluster = 257 - ffs(sectors_per_cluster);
+ else
+ bs->bpb.sectors_per_cluster = sectors_per_cluster;
bs->bpb.media_type = 0xf8; /* hard disk */
bs->bpb.sectors_per_track = cpu_to_le16(opts.sectors_per_track);
ntfs_log_debug("sectors per track = %ld (0x%lx)\n",
--- ntfsprogs/ntfsclone.c.ref 2017-03-23 10:42:44.000000000 +0100
+++ ntfsprogs/ntfsclone.c 2018-05-07 09:11:38.245007100 +0200
@@ -3,7 +3,7 @@
*
* Copyright (c) 2003-2006 Szabolcs Szakacsits
* Copyright (c) 2004-2006 Anton Altaparmakov
- * Copyright (c) 2010-2016 Jean-Pierre Andre
+ * Copyright (c) 2010-2018 Jean-Pierre Andre
* Special image format support copyright (c) 2004 Per Olofsson
*
* Clone NTFS data and/or metadata to a sparse file, image, device or stdout.
@@ -71,6 +71,7 @@
*/
#define NTFS_DO_NOT_CHECK_ENDIANS
+#include "param.h"
#include "debug.h"
#include "types.h"
#include "support.h"
@@ -270,7 +271,6 @@
#define LAST_METADATA_INODE 11
-#define NTFS_MAX_CLUSTER_SIZE 65536
#define NTFS_SECTOR_SIZE 512
#define rounded_up_division(a, b) (((a) + (b - 1)) / (b))
@@ -393,7 +393,7 @@
"Efficiently clone, image, restore or rescue an NTFS Volume.\n\n"
"Copyright (c) 2003-2006 Szabolcs Szakacsits\n"
"Copyright (c) 2004-2006 Anton Altaparmakov\n"
- "Copyright (c) 2010-2016 Jean-Pierre Andre\n\n");
+ "Copyright (c) 2010-2018 Jean-Pierre Andre\n\n");
fprintf(stderr, "%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home);
exit(0);
}
@@ -756,7 +756,7 @@
static void copy_cluster(int rescue, u64 rescue_lcn, u64 lcn)
{
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
+ char *buff;
/* vol is NULL if opt.restore_image is set */
s32 csize = le32_to_cpu(image_hdr.cluster_size);
BOOL backup_bootsector;
@@ -783,6 +783,10 @@
}
}
+ buff = (char*)ntfs_malloc(csize);
+ if (!buff)
+ err_exit("Not enough memory");
+
// need reading when not about to write ?
if (read_all(fd, buff, csize) == -1) {
@@ -858,6 +862,7 @@
perr_printf("Write failed");
#endif
}
+ free(buff);
}
static s64 lseek_out(int fd, s64 pos, int mode)
@@ -995,7 +1000,11 @@
struct progress_bar *progress, u64 *p_counter)
{
s64 i;
- char buff[NTFS_MAX_CLUSTER_SIZE];
+ char *buff;
+
+ buff = (char*)ntfs_malloc(csize);
+ if (!buff)
+ err_exit("Not enough memory");
memset(buff, 0, csize);
@@ -1004,6 +1013,7 @@
perr_exit("write_all");
progress_update(progress, ++(*p_counter));
}
+ free(buff);
}
static void restore_image(void)
@@ -1492,7 +1502,7 @@
static void copy_wipe_mft(ntfs_walk_clusters_ctx *image, runlist *rl)
{
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
+ char *buff;
void *fd;
s64 mft_no;
u32 mft_record_size;
@@ -1522,6 +1532,10 @@
clusters_per_set = mft_record_size/csize;
records_per_set = 1;
}
+ buff = (char*)ntfs_malloc(mft_record_size);
+ if (!buff)
+ err_exit("Not enough memory");
+
mft_no = 0;
ri = rj = 0;
wi = wj = 0;
@@ -1554,6 +1568,7 @@
}
}
image->current_lcn = current_lcn;
+ free(buff);
}
/*
@@ -1566,7 +1581,7 @@
static void copy_wipe_i30(ntfs_walk_clusters_ctx *image, runlist *rl)
{
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
+ char *buff;
void *fd;
u32 indx_record_size;
u32 csize;
@@ -1595,6 +1610,10 @@
clusters_per_set = indx_record_size/csize;
records_per_set = 1;
}
+ buff = (char*)ntfs_malloc(indx_record_size);
+ if (!buff)
+ err_exit("Not enough memory");
+
ri = rj = 0;
wi = wj = 0;
if (rl[ri].length)
@@ -1627,6 +1646,7 @@
}
}
image->current_lcn = current_lcn;
+ free(buff);
}
static void dump_clusters(ntfs_walk_clusters_ctx *image, runlist *rl)
--- ntfsprogs/ntfsresize.c.ref 2017-03-23 10:42:44.000000000 +0100
+++ ntfsprogs/ntfsresize.c 2018-05-07 09:11:13.076883400 +0200
@@ -59,6 +59,7 @@
#include <fcntl.h>
#endif
+#include "param.h"
#include "debug.h"
#include "types.h"
#include "support.h"
@@ -243,8 +244,6 @@
#define DIRTY_INODE (1)
#define DIRTY_ATTRIB (2)
-#define NTFS_MAX_CLUSTER_SIZE (65536)
-
static s64 rounded_up_division(s64 numer, s64 denom)
{
return (numer + (denom - 1)) / denom;
@@ -404,7 +403,7 @@
printf("Copyright (c) 2002-2005 Anton Altaparmakov\n");
printf("Copyright (c) 2002-2003 Richard Russon\n");
printf("Copyright (c) 2007 Yura Pakhuchiy\n");
- printf("Copyright (c) 2011-2016 Jean-Pierre Andre\n");
+ printf("Copyright (c) 2011-2018 Jean-Pierre Andre\n");
printf("\n%s\n%s%s", ntfs_gpl, ntfs_bugs, ntfs_home);
}
@@ -1849,9 +1848,13 @@
static void copy_clusters(ntfs_resize_t *resize, s64 dest, s64 src, s64 len)
{
s64 i;
- char buff[NTFS_MAX_CLUSTER_SIZE]; /* overflow checked at mount time */
+ char *buff;
ntfs_volume *vol = resize->vol;
+ buff = (char*)ntfs_malloc(vol->cluster_size);
+ if (!buff)
+ perr_exit("ntfs_malloc");
+
for (i = 0; i < len; i++) {
lseek_to_cluster(vol, src + i);
@@ -1875,6 +1878,7 @@
resize->relocations++;
progress_update(&resize->progress, resize->relocations);
}
+ free(buff);
}
static void relocate_clusters(ntfs_resize_t *r, runlist *dest_rl, s64 src_lcn)
--- include/ntfs-3g/param.h.ref 2017-03-23 10:42:44.000000000 +0100
+++ include/ntfs-3g/param.h 2018-05-07 09:11:13.088302600 +0200
@@ -40,6 +40,13 @@
};
/*
+ * Parameters for formatting
+ */
+
+ /* Up to Windows 10, the cluster size was limited to 64K */
+#define NTFS_MAX_CLUSTER_SIZE 2097152 /* Windows 10 Creators allows 2MB */
+
+/*
* Parameters for compression
*/

@ -5,24 +5,14 @@
# For release candidates
# %%global subver -RC
%global oldrhel 0
%if 0%{?rhel}
%if 0%{?rhel} < 7
%global oldrhel 1
%endif
%endif
Name: ntfs-3g
Summary: Linux NTFS userspace driver
Version: 2017.3.23
Release: 11%{?dist}
Version: 2021.8.22
Release: 1%{?dist}
License: GPLv2+
Source0: http://tuxera.com/opensource/%%{name}_ntfsprogs-%%{version}%%{?subver}.tgz
%if %{oldrhel}
Source1: 20-ntfs-config-write-policy.fdi
%endif
URL: http://www.ntfs-3g.org/
Source0: http://tuxera.com/opensource/%{name}_ntfsprogs-%{version}%{?subver}.tgz
URL: https://www.tuxera.com/company/open-source/
BuildRequires: make
%if %{with_externalfuse}
BuildRequires: fuse-devel
Requires: fuse
@ -37,34 +27,36 @@ Epoch: 2
Provides: ntfsprogs-fuse = %{epoch}:%{version}-%{release}
Obsoletes: ntfsprogs-fuse
Provides: fuse-ntfs-3g = %{epoch}:%{version}-%{release}
Requires: %{name}-libs = %{epoch}:%{version}-%{release}
# For library split out
Obsoletes: %{name} < 2:2021.8.22-1
Patch0: ntfs-3g_ntfsprogs-2011.10.9-RC-ntfsck-unsupported-return-0.patch
Patch1: check-mftmirr.patch
Patch2: ntfs-3g-big-sectors.patch
# Fix for ntfsclone crash.
# Discussed with upstream developer but not upstream yet, see:
# https://bugzilla.redhat.com/show_bug.cgi?id=1601146#c4
Patch3: ntfsclone-full-clusters-bz1601146.patch
# Upstream fix for CVE-2019-9755
# https://sourceforge.net/p/ntfs-3g/ntfs-3g/ci/85c1634a26faa572d3c558d4cf8aaaca5202d4e9/
Patch4: ntfs-3g-CVE-2019-9755.patch
%description
NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS
driver for Linux and many other operating systems. It provides safe
handling of the Windows XP, Windows Server 2003, Windows 2000, Windows
Vista, Windows Server 2008 and Windows 7 NTFS file systems. NTFS-3G can
create, remove, rename, move files, directories, hard links, and streams;
it can read and write normal and transparently compressed files, including
streams and sparse files; it can handle special files like symbolic links,
devices, and FIFOs, ACL, extended attributes; moreover it provides full
NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS
driver for Linux and many other operating systems. It provides safe
handling of the Windows XP, Windows Server 2003, Windows 2000, Windows
Vista, Windows Server 2008 and Windows 7 NTFS file systems. NTFS-3G can
create, remove, rename, move files, directories, hard links, and streams;
it can read and write normal and transparently compressed files, including
streams and sparse files; it can handle special files like symbolic links,
devices, and FIFOs, ACL, extended attributes; moreover it provides full
file access right and ownership support.
%package libs
Summary: Runtime libraries for ntfs-3g
# For library split out
Obsoletes: %{name} < 2:2021.8.22-1
%description libs
Libraries for applications to use ntfs-3g functionality.
%package devel
Summary: Development files and libraries for ntfs-3g
Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
Requires: pkgconfig
Provides: ntfsprogs-devel = %{epoch}:%{version}-%{release}
# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that
# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that
# standalone package.
Obsoletes: ntfsprogs-devel < 2.0.0-17
@ -74,26 +66,23 @@ functionality.
%package -n ntfsprogs
Summary: NTFS filesystem libraries and utilities
Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
# We don't really provide this. This code is dead and buried now.
Provides: ntfsprogs-gnomevfs = %{epoch}:%{version}-%{release}
Obsoletes: ntfsprogs-gnomevfs
# Needed to fix multilib issue
# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that
# ntfsprogs-2.0.0-17 was never built. 2.0.0-16 was the last build for that
# standalone package.
Obsoletes: ntfsprogs < 2.0.0-17
%description -n ntfsprogs
The ntfsprogs package currently consists of a library and utilities such as
mkntfs, ntfscat, ntfsls, ntfsresize, and ntfsundelete (for a full list of
The ntfsprogs package currently consists of a library and utilities such as
mkntfs, ntfscat, ntfsls, ntfsresize, and ntfsundelete (for a full list of
included utilities see man 8 ntfsprogs after installation).
%prep
%setup -q -n %{name}_ntfsprogs-%{version}%{?subver}
%patch0 -p1 -b .unsupported
%patch1 -p0 -b .check-mftmirr
%patch2 -p0 -b .big-sectors
%patch3 -p0 -b .ntfsclone
%patch4 -p1 -b .CVE-2019-9755
%autosetup -n %{name}_ntfsprogs-%{version}%{?subver} -p1
%build
CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64"
@ -104,49 +93,29 @@ CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64"
--with-fuse=external \
%endif
--exec-prefix=/ \
%if %{oldrhel}
--bindir=/bin \
--sbindir=/sbin \
--libdir=/%{_lib} \
%endif
--enable-posix-acls \
--enable-xattr-mappings \
--enable-crypto \
--enable-extras \
--enable-quarantined
make %{?_smp_mflags} LIBTOOL=%{_bindir}/libtool
%make_build LIBTOOL=%{_bindir}/libtool
%install
make LIBTOOL=%{_bindir}/libtool DESTDIR=%{buildroot} install
%if %{oldrhel}
rm -rf %{buildroot}/%{_lib}/*.la
rm -rf %{buildroot}/%{_lib}/*.a
%else
%make_install LIBTOOL=%{_bindir}/libtool
rm -rf %{buildroot}%{_libdir}/*.la
rm -rf %{buildroot}%{_libdir}/*.a
%endif
%if %{oldrhel}
rm -rf %{buildroot}/sbin/mount.ntfs-3g
cp -a %{buildroot}/bin/ntfs-3g %{buildroot}/sbin/mount.ntfs-3g
%else
rm -rf %{buildroot}/%{_sbindir}/mount.ntfs-3g
cp -a %{buildroot}/%{_bindir}/ntfs-3g %{buildroot}/%{_sbindir}/mount.ntfs-3g
%endif
# Actually make some symlinks for simplicity...
# ... since we're obsoleting ntfsprogs-fuse
%if %{oldrhel}
pushd %{buildroot}/bin
ln -s ntfs-3g ntfsmount
popd
pushd %{buildroot}/sbin
%else
pushd %{buildroot}/%{_bindir}
ln -s ntfs-3g ntfsmount
popd
pushd %{buildroot}/%{_sbindir}
%endif
ln -s mount.ntfs-3g mount.ntfs-fuse
# And since there is no other package in Fedora that provides an ntfs
# mount...
@ -155,98 +124,40 @@ ln -s mount.ntfs-3g mount.ntfs
ln -s ../bin/ntfsck fsck.ntfs
popd
%if %{oldrhel}
# Compat symlinks
mkdir -p %{buildroot}%{_bindir}
pushd %{buildroot}%{_bindir}
ln -s /bin/ntfs-3g ntfs-3g
ln -s /bin/ntfsmount ntfsmount
popd
# Put the .pc file in the right place.
mkdir -p %{buildroot}%{_libdir}/pkgconfig/
mv %{buildroot}/%{_lib}/pkgconfig/libntfs-3g.pc %{buildroot}%{_libdir}/pkgconfig/
%else
mv %{buildroot}/sbin/* %{buildroot}/%{_sbindir}
rmdir %{buildroot}/sbin
%endif
# We get this on our own, thanks.
rm -rf %{buildroot}%{_defaultdocdir}/%{name}/README
%if %{oldrhel}
mkdir -p %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
%endif
%ldconfig_scriptlets
%ldconfig_scriptlets -n libs
%files
%doc AUTHORS ChangeLog CREDITS NEWS README
%if %{oldrhel}
%doc COPYING
%else
%license COPYING
%endif
%if %{oldrhel}
/sbin/mount.ntfs
/sbin/mount.ntfs-3g
/sbin/mount.ntfs-fuse
/sbin/mount.lowntfs-3g
/bin/ntfs-3g
/bin/ntfsmount
#compat symlinks
%{_bindir}/ntfs-3g
%{_bindir}/ntfsmount
%else
%{_sbindir}/mount.ntfs
%{_sbindir}/mount.ntfs-3g
%{_sbindir}/mount.ntfs-fuse
%{_sbindir}/mount.lowntfs-3g
%{_bindir}/ntfs-3g
%{_bindir}/ntfsmount
%endif
%if %{oldrhel}
/bin/ntfs-3g.probe
/bin/lowntfs-3g
%else
%{_bindir}/ntfs-3g.probe
%{_bindir}/lowntfs-3g
%endif
%if %{oldrhel}
/%{_lib}/libntfs-3g.so.*
%else
%{_libdir}/libntfs-3g.so.*
%endif
%{_mandir}/man8/mount.lowntfs-3g.*
%{_mandir}/man8/mount.ntfs-3g.*
%{_mandir}/man8/ntfs-3g*
%if %{oldrhel}
%{_datadir}/hal/fdi/policy/10osvendor/20-ntfs-config-write-policy.fdi
%endif
%files libs
%license COPYING
%{_libdir}/libntfs-3g.so.*
%files devel
%{_includedir}/ntfs-3g/
%if %{oldrhel}
/%{_lib}/libntfs-3g.so
%else
%{_libdir}/libntfs-3g.so
%endif
%{_libdir}/pkgconfig/libntfs-3g.pc
%files -n ntfsprogs
%doc AUTHORS CREDITS ChangeLog NEWS README
%if %{oldrhel}
%doc COPYING
/bin/ntfscat
/bin/ntfscluster
/bin/ntfscmp
/bin/ntfsfix
/bin/ntfsinfo
/bin/ntfsls
/bin/ntfssecaudit
/bin/ntfsusermap
%else
%license COPYING
%{_bindir}/ntfscat
%{_bindir}/ntfscluster
@ -256,27 +167,7 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
%{_bindir}/ntfsls
%{_bindir}/ntfssecaudit
%{_bindir}/ntfsusermap
%endif
# Extras
%if %{oldrhel}
/bin/ntfsck
/bin/ntfsdecrypt
/bin/ntfsdump_logfile
/bin/ntfsfallocate
/bin/ntfsmftalloc
/bin/ntfsmove
/bin/ntfsrecover
/bin/ntfstruncate
/bin/ntfswipe
/sbin/fsck.ntfs
/sbin/mkfs.ntfs
/sbin/mkntfs
/sbin/ntfsclone
/sbin/ntfscp
/sbin/ntfslabel
/sbin/ntfsresize
/sbin/ntfsundelete
%else
%{_bindir}/ntfsck
%{_bindir}/ntfsdecrypt
%{_bindir}/ntfsdump_logfile
@ -294,13 +185,35 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
%{_sbindir}/ntfslabel
%{_sbindir}/ntfsresize
%{_sbindir}/ntfsundelete
%endif
%{_mandir}/man8/mkntfs.8*
%{_mandir}/man8/mkfs.ntfs.8*
%{_mandir}/man8/ntfs[^m][^o]*.8*
%exclude %{_mandir}/man8/ntfs-3g*
%changelog
* Tue Aug 31 2021 Neal Gompa <ngompa@datto.com> - 2:2021.8.22-1
- Rebase to version 2021.8.22 to fix various CVEs (RHBZ#1999869)
- Clean up old cruft for RHEL < 7
- Split libraries out to libs subpackage
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2:2017.3.23-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Feb 24 2021 Tom Callaway <spot@fedoraproject.org> - 2:2017.3.23-16
- correct URL
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2:2017.3.23-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2:2017.3.23-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2:2017.3.23-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2:2017.3.23-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Fri Mar 29 2019 Tom Callaway <spot@fedoraproject.org> - 2:2017.3.23-11
- add upstream fix for CVE-2019-9755

@ -1,81 +0,0 @@
--- ntfsprogs/ntfsclone.c 2018-05-16 18:46:47.114964000 +0200
+++ ntfsprogs/ntfsclone.c 2018-07-16 14:03:20.273809100 +0200
@@ -776,6 +776,10 @@
/* possible partial cluster holding the backup boot sector */
backup_bootsector = (lcn + 1)*csize >= full_device_size;
+ buff = (char*)ntfs_malloc(csize);
+ if (!buff)
+ err_exit("Not enough memory");
+
if (backup_bootsector) {
csize = full_device_size - lcn*csize;
if (csize < 0) {
@@ -783,10 +787,6 @@
}
}
- buff = (char*)ntfs_malloc(csize);
- if (!buff)
- err_exit("Not enough memory");
-
// need reading when not about to write ?
if (read_all(fd, buff, csize) == -1) {
@@ -1507,6 +1507,7 @@
s64 mft_no;
u32 mft_record_size;
u32 csize;
+ u32 buff_size;
u32 bytes_per_sector;
u32 records_per_set;
u32 clusters_per_set;
@@ -1524,15 +1525,18 @@
/*
* Depending on the sizes, there may be several records
* per cluster, or several clusters per record.
+ * Anyway, full clusters are needed for rescuing bad ones.
*/
if (csize >= mft_record_size) {
records_per_set = csize/mft_record_size;
clusters_per_set = 1;
+ buff_size = csize;
} else {
clusters_per_set = mft_record_size/csize;
records_per_set = 1;
+ buff_size = mft_record_size;
}
- buff = (char*)ntfs_malloc(mft_record_size);
+ buff = (char*)ntfs_malloc(buff_size);
if (!buff)
err_exit("Not enough memory");
@@ -1585,6 +1589,7 @@
void *fd;
u32 indx_record_size;
u32 csize;
+ u32 buff_size;
u32 bytes_per_sector;
u32 records_per_set;
u32 clusters_per_set;
@@ -1601,16 +1606,19 @@
/*
* Depending on the sizes, there may be several records
* per cluster, or several clusters per record.
+ * Anyway, full clusters are needed for rescuing bad ones.
*/
indx_record_size = image->ni->vol->indx_record_size;
if (csize >= indx_record_size) {
records_per_set = csize/indx_record_size;
clusters_per_set = 1;
+ buff_size = csize;
} else {
clusters_per_set = indx_record_size/csize;
records_per_set = 1;
+ buff_size = indx_record_size;
}
- buff = (char*)ntfs_malloc(indx_record_size);
+ buff = (char*)ntfs_malloc(buff_size);
if (!buff)
err_exit("Not enough memory");

@ -1 +1 @@
SHA512 (ntfs-3g_ntfsprogs-2017.3.23.tgz) = 3a607f0d7be35204c992d8931de0404fbc52032c13b4240d2c5e6f285c318a28eb2a385d7cf5ac4cd445876aee5baa5753bb636ada0d870d84a9d3fdbce794ef
SHA512 (ntfs-3g_ntfsprogs-2021.8.22.tgz) = e0544df78a6c352999e1206d7b5d71c56e39396b7a0936a261d728c2ac9d61c6b95ef297f8529ac2a5146f31c1c9e43066d3e281064d4f5d781a04eba51f536d

Loading…
Cancel
Save