diff --git a/dosfstools.spec b/dosfstools.spec index 932f470..2ff2deb 100644 --- a/dosfstools.spec +++ b/dosfstools.spec @@ -1,10 +1,15 @@ Name: dosfstools Summary: Utilities for making and checking MS-DOS FAT filesystems on Linux Version: 4.2 -Release: 3%{?dist} +Release: 3.1%{?dist} License: GPLv3+ Source0: https://github.com/%{name}/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.gz URL: https://github.com/dosfstools/dosfstools +%if 0%{?facebook} +# Add flag to skip validate_volume_label +# Backport of https://github.com/dosfstools/dosfstools/pull/184 +Patch100: skip-validate-volume-label.patch +%endif BuildRequires: gcc BuildRequires: make @@ -16,6 +21,9 @@ drives or on floppies. %prep %setup -q +%if 0%{?facebook} +%patch100 -p1 +%endif %build %configure --enable-compat-symlinks @@ -35,6 +43,10 @@ rm -f %{buildroot}%{_docdir}/%{name}/COPYING %changelog +* Thu Oct 20 2022 Davide Cavalca - 4.2-3.1 +- Hyperscale build +- Backport upstream PR to relax volume label checks + * Mon Aug 09 2021 Mohan Boddu - 4.2-3 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688 diff --git a/skip-validate-volume-label.patch b/skip-validate-volume-label.patch new file mode 100644 index 0000000..00559ec --- /dev/null +++ b/skip-validate-volume-label.patch @@ -0,0 +1,145 @@ +diff -Naur a/manpages/fatlabel.8.in b/manpages/fatlabel.8.in +--- a/manpages/fatlabel.8.in 2021-01-31 04:49:12.000000000 -0800 ++++ b/manpages/fatlabel.8.in 2022-10-20 10:39:36.449439626 -0700 +@@ -51,6 +51,8 @@ + .IP "\fB-c\fP \fIPAGE\fP, \fB\-\-codepage\fP=\fIPAGE\fP" 4 + Use DOS codepage \fIPAGE\fP to encode/decode label. + By default codepage 850 is used. ++.IP "\fB\-\-skip-name-validation\fP" 4 ++Do not validate filesystem label. + .IP "\fB\-h\fP, \fB\-\-help\fP" 4 + Display a help message and terminate. + .IP "\fB\-V\fP, \fB\-\-version\fP" 4 +diff -Naur a/manpages/mkfs.fat.8.in b/manpages/mkfs.fat.8.in +--- a/manpages/mkfs.fat.8.in 2021-01-31 04:49:12.000000000 -0800 ++++ b/manpages/mkfs.fat.8.in 2022-10-20 10:39:36.449439626 -0700 +@@ -218,6 +218,8 @@ + Multiple runs of \fBmkfs.fat\fP on the same device create identical results + with this option. + Its main purpose is testing \fBmkfs.fat\fP. ++.IP "\fB\-\-skip-name-validation\fP" 4 ++Do not validate filesystem label. + .\" ---------------------------------------------------------------------------- + .SH BUGS + \fBmkfs.fat\fP can not create boot-able filesystems. +diff -Naur a/src/common.c b/src/common.c +--- a/src/common.c 2021-01-31 04:49:12.000000000 -0800 ++++ b/src/common.c 2022-10-20 10:39:36.450439587 -0700 +@@ -42,6 +42,7 @@ + int interactive; + int write_immed; + int atari_format; ++int skip_name_validation; + const char *program_name; + + +@@ -327,6 +328,9 @@ + int ret = 0; + wchar_t wlabel[12]; + ++ if (skip_name_validation) ++ return 0; ++ + if (dos_string_to_wchar_string(wlabel, doslabel, sizeof(wlabel))) { + for (i = 0; wlabel[i]; i++) { + /* FAT specification: Lower case characters are not allowed in DIR_Name +diff -Naur a/src/common.h b/src/common.h +--- a/src/common.h 2021-01-31 04:49:12.000000000 -0800 ++++ b/src/common.h 2022-10-20 10:39:36.450439587 -0700 +@@ -35,6 +35,7 @@ + extern int interactive; + extern int write_immed; + extern int atari_format; /* Use Atari variation of MS-DOS FS format */ ++extern int skip_name_validation; + + /* program_name used for printing messages; no name will be printed when it is + * left as NULL */ +diff -Naur a/src/fatlabel.c b/src/fatlabel.c +--- a/src/fatlabel.c 2021-01-31 04:49:12.000000000 -0800 ++++ b/src/fatlabel.c 2022-10-20 10:39:36.451439549 -0700 +@@ -195,21 +195,24 @@ + fprintf(f, "existing label or serial if NEW is not given.\n"); + fprintf(f, "\n"); + fprintf(f, "Options:\n"); +- fprintf(f, " -i, --volume-id Work on serial number instead of label\n"); +- fprintf(f, " -r, --reset Remove label or generate new serial number\n"); +- fprintf(f, " -c N, --codepage=N use DOS codepage N to encode/decode label (default: %d)\n", DEFAULT_DOS_CODEPAGE); +- fprintf(f, " -V, --version Show version number and terminate\n"); +- fprintf(f, " -h, --help Print this message and terminate\n"); ++ fprintf(f, " -i, --volume-id Work on serial number instead of label\n"); ++ fprintf(f, " -r, --reset Remove label or generate new serial number\n"); ++ fprintf(f, " -c N, --codepage=N use DOS codepage N to encode/decode label (default: %d)\n", DEFAULT_DOS_CODEPAGE); ++ fprintf(f, " --skip-name-validation Do not validate filesystem label\n"); ++ fprintf(f, " -V, --version Show version number and terminate\n"); ++ fprintf(f, " -h, --help Print this message and terminate\n"); + exit(status); + } + + + int main(int argc, char *argv[]) + { ++ enum {OPT_SKIP_NAME_VALIDATION=1000}; + const struct option long_options[] = { + {"volume-id", no_argument, NULL, 'i'}, + {"reset", no_argument, NULL, 'r'}, + {"codepage", required_argument, NULL, 'c'}, ++ {"skip-name-validation", optional_argument, NULL, OPT_SKIP_NAME_VALIDATION}, + {"version", no_argument, NULL, 'V'}, + {"help", no_argument, NULL, 'h'}, + {0,} +@@ -246,6 +249,10 @@ + usage(1, 0); + break; + ++ case OPT_SKIP_NAME_VALIDATION: ++ skip_name_validation = 1; ++ break; ++ + case 'V': + printf("fatlabel " VERSION " (" VERSION_DATE ")\n"); + exit(0); +diff -Naur a/src/mkfs.fat.c b/src/mkfs.fat.c +--- a/src/mkfs.fat.c 2021-01-31 04:49:12.000000000 -0800 ++++ b/src/mkfs.fat.c 2022-10-20 10:41:34.018323059 -0700 +@@ -1454,6 +1454,7 @@ + fprintf(stderr, " -S SIZE Select a sector size of SIZE (a power of two, at least 512)\n"); + fprintf(stderr, " -v Verbose execution\n"); + fprintf(stderr, " --variant=TYPE Select variant TYPE of filesystem (standard or Atari)\n"); ++ fprintf(stderr, " --skip-name-validation Do not validate filesystem label\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " --invariant Use constants for randomly generated or time based values\n"); + fprintf(stderr, " --offset=SECTOR Write the filesystem at a specific sector into the device file.\n"); +@@ -1478,14 +1479,15 @@ + struct timeval create_timeval; + long long conversion; + +- enum {OPT_HELP=1000, OPT_INVARIANT, OPT_MBR, OPT_VARIANT, OPT_CODEPAGE, OPT_OFFSET}; ++ enum {OPT_HELP=1000, OPT_INVARIANT, OPT_MBR, OPT_VARIANT, OPT_CODEPAGE, OPT_OFFSET, OPT_SKIP_NAME_VALIDATION}; + const struct option long_options[] = { +- {"codepage", required_argument, NULL, OPT_CODEPAGE}, +- {"invariant", no_argument, NULL, OPT_INVARIANT}, +- {"mbr", optional_argument, NULL, OPT_MBR}, +- {"variant", required_argument, NULL, OPT_VARIANT}, +- {"offset", required_argument, NULL, OPT_OFFSET}, +- {"help", no_argument, NULL, OPT_HELP}, ++ {"codepage", required_argument, NULL, OPT_CODEPAGE}, ++ {"invariant", no_argument, NULL, OPT_INVARIANT}, ++ {"mbr", optional_argument, NULL, OPT_MBR}, ++ {"variant", required_argument, NULL, OPT_VARIANT}, ++ {"offset", required_argument, NULL, OPT_OFFSET}, ++ {"skip-name-validation", optional_argument, NULL, OPT_SKIP_NAME_VALIDATION}, ++ {"help", no_argument, NULL, OPT_HELP}, + {0,} + }; + +@@ -1813,6 +1815,10 @@ + part_sector = (off_t) conversion; + break; + ++ case OPT_SKIP_NAME_VALIDATION: ++ skip_name_validation = 1; ++ break; ++ + case '?': + usage(argv[0], 1); + exit(1);