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 # For release candidates
# %%global subver -RC # %%global subver -RC
%global oldrhel 0
%if 0%{?rhel}
%if 0%{?rhel} < 7
%global oldrhel 1
%endif
%endif
Name: ntfs-3g Name: ntfs-3g
Summary: Linux NTFS userspace driver Summary: Linux NTFS userspace driver
Version: 2017.3.23 Version: 2021.8.22
Release: 11%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
Source0: http://tuxera.com/opensource/%%{name}_ntfsprogs-%%{version}%%{?subver}.tgz Source0: http://tuxera.com/opensource/%{name}_ntfsprogs-%{version}%{?subver}.tgz
%if %{oldrhel} URL: https://www.tuxera.com/company/open-source/
Source1: 20-ntfs-config-write-policy.fdi BuildRequires: make
%endif
URL: http://www.ntfs-3g.org/
%if %{with_externalfuse} %if %{with_externalfuse}
BuildRequires: fuse-devel BuildRequires: fuse-devel
Requires: fuse Requires: fuse
@ -37,34 +27,36 @@ Epoch: 2
Provides: ntfsprogs-fuse = %{epoch}:%{version}-%{release} Provides: ntfsprogs-fuse = %{epoch}:%{version}-%{release}
Obsoletes: ntfsprogs-fuse Obsoletes: ntfsprogs-fuse
Provides: fuse-ntfs-3g = %{epoch}:%{version}-%{release} 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 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 %description
NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS NTFS-3G is a stable, open source, GPL licensed, POSIX, read/write NTFS
driver for Linux and many other operating systems. It provides safe driver for Linux and many other operating systems. It provides safe
handling of the Windows XP, Windows Server 2003, Windows 2000, Windows handling of the Windows XP, Windows Server 2003, Windows 2000, Windows
Vista, Windows Server 2008 and Windows 7 NTFS file systems. NTFS-3G can Vista, Windows Server 2008 and Windows 7 NTFS file systems. NTFS-3G can
create, remove, rename, move files, directories, hard links, and streams; create, remove, rename, move files, directories, hard links, and streams;
it can read and write normal and transparently compressed files, including it can read and write normal and transparently compressed files, including
streams and sparse files; it can handle special files like symbolic links, streams and sparse files; it can handle special files like symbolic links,
devices, and FIFOs, ACL, extended attributes; moreover it provides full devices, and FIFOs, ACL, extended attributes; moreover it provides full
file access right and ownership support. 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 %package devel
Summary: Development files and libraries for ntfs-3g Summary: Development files and libraries for ntfs-3g
Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
Requires: pkgconfig Requires: pkgconfig
Provides: ntfsprogs-devel = %{epoch}:%{version}-%{release} 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. # standalone package.
Obsoletes: ntfsprogs-devel < 2.0.0-17 Obsoletes: ntfsprogs-devel < 2.0.0-17
@ -74,26 +66,23 @@ functionality.
%package -n ntfsprogs %package -n ntfsprogs
Summary: NTFS filesystem libraries and utilities 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. # We don't really provide this. This code is dead and buried now.
Provides: ntfsprogs-gnomevfs = %{epoch}:%{version}-%{release} Provides: ntfsprogs-gnomevfs = %{epoch}:%{version}-%{release}
Obsoletes: ntfsprogs-gnomevfs Obsoletes: ntfsprogs-gnomevfs
# Needed to fix multilib issue # 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. # standalone package.
Obsoletes: ntfsprogs < 2.0.0-17 Obsoletes: ntfsprogs < 2.0.0-17
%description -n ntfsprogs %description -n ntfsprogs
The ntfsprogs package currently consists of a library and utilities such as The ntfsprogs package currently consists of a library and utilities such as
mkntfs, ntfscat, ntfsls, ntfsresize, and ntfsundelete (for a full list of mkntfs, ntfscat, ntfsls, ntfsresize, and ntfsundelete (for a full list of
included utilities see man 8 ntfsprogs after installation). included utilities see man 8 ntfsprogs after installation).
%prep %prep
%setup -q -n %{name}_ntfsprogs-%{version}%{?subver} %autosetup -n %{name}_ntfsprogs-%{version}%{?subver} -p1
%patch0 -p1 -b .unsupported
%patch1 -p0 -b .check-mftmirr
%patch2 -p0 -b .big-sectors
%patch3 -p0 -b .ntfsclone
%patch4 -p1 -b .CVE-2019-9755
%build %build
CFLAGS="$RPM_OPT_FLAGS -D_FILE_OFFSET_BITS=64" 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 \ --with-fuse=external \
%endif %endif
--exec-prefix=/ \ --exec-prefix=/ \
%if %{oldrhel}
--bindir=/bin \
--sbindir=/sbin \
--libdir=/%{_lib} \
%endif
--enable-posix-acls \ --enable-posix-acls \
--enable-xattr-mappings \ --enable-xattr-mappings \
--enable-crypto \ --enable-crypto \
--enable-extras \ --enable-extras \
--enable-quarantined --enable-quarantined
make %{?_smp_mflags} LIBTOOL=%{_bindir}/libtool %make_build LIBTOOL=%{_bindir}/libtool
%install %install
make LIBTOOL=%{_bindir}/libtool DESTDIR=%{buildroot} install %make_install LIBTOOL=%{_bindir}/libtool
%if %{oldrhel}
rm -rf %{buildroot}/%{_lib}/*.la
rm -rf %{buildroot}/%{_lib}/*.a
%else
rm -rf %{buildroot}%{_libdir}/*.la rm -rf %{buildroot}%{_libdir}/*.la
rm -rf %{buildroot}%{_libdir}/*.a 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 rm -rf %{buildroot}/%{_sbindir}/mount.ntfs-3g
cp -a %{buildroot}/%{_bindir}/ntfs-3g %{buildroot}/%{_sbindir}/mount.ntfs-3g cp -a %{buildroot}/%{_bindir}/ntfs-3g %{buildroot}/%{_sbindir}/mount.ntfs-3g
%endif
# Actually make some symlinks for simplicity... # Actually make some symlinks for simplicity...
# ... since we're obsoleting ntfsprogs-fuse # ... since we're obsoleting ntfsprogs-fuse
%if %{oldrhel}
pushd %{buildroot}/bin
ln -s ntfs-3g ntfsmount
popd
pushd %{buildroot}/sbin
%else
pushd %{buildroot}/%{_bindir} pushd %{buildroot}/%{_bindir}
ln -s ntfs-3g ntfsmount ln -s ntfs-3g ntfsmount
popd popd
pushd %{buildroot}/%{_sbindir} pushd %{buildroot}/%{_sbindir}
%endif
ln -s mount.ntfs-3g mount.ntfs-fuse ln -s mount.ntfs-3g mount.ntfs-fuse
# And since there is no other package in Fedora that provides an ntfs # And since there is no other package in Fedora that provides an ntfs
# mount... # mount...
@ -155,98 +124,40 @@ ln -s mount.ntfs-3g mount.ntfs
ln -s ../bin/ntfsck fsck.ntfs ln -s ../bin/ntfsck fsck.ntfs
popd 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} mv %{buildroot}/sbin/* %{buildroot}/%{_sbindir}
rmdir %{buildroot}/sbin rmdir %{buildroot}/sbin
%endif
# We get this on our own, thanks. # We get this on our own, thanks.
rm -rf %{buildroot}%{_defaultdocdir}/%{name}/README rm -rf %{buildroot}%{_defaultdocdir}/%{name}/README
%if %{oldrhel} %ldconfig_scriptlets -n libs
mkdir -p %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
%endif
%ldconfig_scriptlets
%files %files
%doc AUTHORS ChangeLog CREDITS NEWS README %doc AUTHORS ChangeLog CREDITS NEWS README
%if %{oldrhel}
%doc COPYING
%else
%license COPYING %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
%{_sbindir}/mount.ntfs-3g %{_sbindir}/mount.ntfs-3g
%{_sbindir}/mount.ntfs-fuse %{_sbindir}/mount.ntfs-fuse
%{_sbindir}/mount.lowntfs-3g %{_sbindir}/mount.lowntfs-3g
%{_bindir}/ntfs-3g %{_bindir}/ntfs-3g
%{_bindir}/ntfsmount %{_bindir}/ntfsmount
%endif
%if %{oldrhel}
/bin/ntfs-3g.probe
/bin/lowntfs-3g
%else
%{_bindir}/ntfs-3g.probe %{_bindir}/ntfs-3g.probe
%{_bindir}/lowntfs-3g %{_bindir}/lowntfs-3g
%endif
%if %{oldrhel}
/%{_lib}/libntfs-3g.so.*
%else
%{_libdir}/libntfs-3g.so.*
%endif
%{_mandir}/man8/mount.lowntfs-3g.* %{_mandir}/man8/mount.lowntfs-3g.*
%{_mandir}/man8/mount.ntfs-3g.* %{_mandir}/man8/mount.ntfs-3g.*
%{_mandir}/man8/ntfs-3g* %{_mandir}/man8/ntfs-3g*
%if %{oldrhel}
%{_datadir}/hal/fdi/policy/10osvendor/20-ntfs-config-write-policy.fdi %files libs
%endif %license COPYING
%{_libdir}/libntfs-3g.so.*
%files devel %files devel
%{_includedir}/ntfs-3g/ %{_includedir}/ntfs-3g/
%if %{oldrhel}
/%{_lib}/libntfs-3g.so
%else
%{_libdir}/libntfs-3g.so %{_libdir}/libntfs-3g.so
%endif
%{_libdir}/pkgconfig/libntfs-3g.pc %{_libdir}/pkgconfig/libntfs-3g.pc
%files -n ntfsprogs %files -n ntfsprogs
%doc AUTHORS CREDITS ChangeLog NEWS README %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 %license COPYING
%{_bindir}/ntfscat %{_bindir}/ntfscat
%{_bindir}/ntfscluster %{_bindir}/ntfscluster
@ -256,27 +167,7 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
%{_bindir}/ntfsls %{_bindir}/ntfsls
%{_bindir}/ntfssecaudit %{_bindir}/ntfssecaudit
%{_bindir}/ntfsusermap %{_bindir}/ntfsusermap
%endif
# Extras # 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}/ntfsck
%{_bindir}/ntfsdecrypt %{_bindir}/ntfsdecrypt
%{_bindir}/ntfsdump_logfile %{_bindir}/ntfsdump_logfile
@ -294,13 +185,35 @@ cp -a %{SOURCE1} %{buildroot}%{_datadir}/hal/fdi/policy/10osvendor/
%{_sbindir}/ntfslabel %{_sbindir}/ntfslabel
%{_sbindir}/ntfsresize %{_sbindir}/ntfsresize
%{_sbindir}/ntfsundelete %{_sbindir}/ntfsundelete
%endif
%{_mandir}/man8/mkntfs.8* %{_mandir}/man8/mkntfs.8*
%{_mandir}/man8/mkfs.ntfs.8* %{_mandir}/man8/mkfs.ntfs.8*
%{_mandir}/man8/ntfs[^m][^o]*.8* %{_mandir}/man8/ntfs[^m][^o]*.8*
%exclude %{_mandir}/man8/ntfs-3g* %exclude %{_mandir}/man8/ntfs-3g*
%changelog %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 * Fri Mar 29 2019 Tom Callaway <spot@fedoraproject.org> - 2:2017.3.23-11
- add upstream fix for CVE-2019-9755 - 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