- libparted: Fix handling of msdos partition types

- tests: Add a libparted test for ped_partition_set_system on msdos
- parted: Add display of GPT UUIDs in JSON output
- Add no_automount flag support
- increase xfs size to 300M
This commit is contained in:
Brian C. Lane 2022-10-04 08:43:04 -07:00
parent 8298c363a4
commit 7fc0182f62
17 changed files with 862 additions and 227 deletions

View File

@ -1,7 +1,7 @@
From cec533a00a2cd0b64a7a0f5debc26554f6025831 Mon Sep 17 00:00:00 2001 From cec533a00a2cd0b64a7a0f5debc26554f6025831 Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com> From: "Brian C. Lane" <bcl@redhat.com>
Date: Mon, 18 Apr 2022 15:10:06 -0400 Date: Mon, 18 Apr 2022 15:10:06 -0400
Subject: [PATCH 1/5] maint: post-release administrivia Subject: [PATCH 01/13] maint: post-release administrivia
* NEWS: Add header line for next release. * NEWS: Add header line for next release.
* .prev-version: Record previous version. * .prev-version: Record previous version.
@ -46,5 +46,5 @@ index d5fdd80..11fa51b 100644
include $(srcdir)/dist-check.mk include $(srcdir)/dist-check.mk
-- --
2.35.3 2.37.3

View File

@ -1,7 +1,7 @@
From 61b3a9733c0e0a79ccc43096642d378c8706add6 Mon Sep 17 00:00:00 2001 From 61b3a9733c0e0a79ccc43096642d378c8706add6 Mon Sep 17 00:00:00 2001
From: Arvin Schnell <aschnell@suse.com> From: Arvin Schnell <aschnell@suse.com>
Date: Wed, 11 May 2022 14:02:21 +0000 Date: Wed, 11 May 2022 14:02:21 +0000
Subject: [PATCH 2/5] parted: add type command Subject: [PATCH 02/13] parted: add type command
Include the partition type-id and type-uuid in the JSON Include the partition type-id and type-uuid in the JSON
output. Also add the the command 'type' to set them. Remove output. Also add the the command 'type' to set them. Remove
@ -1632,5 +1632,5 @@ index f2001c5..b35d443 100644
for mode in on_only on_and_off ; do for mode in on_only on_and_off ; do
-- --
2.35.3 2.37.3

View File

@ -1,7 +1,7 @@
From 29ffc6a1f285f48ac0b9efa7299373e486c486e8 Mon Sep 17 00:00:00 2001 From 29ffc6a1f285f48ac0b9efa7299373e486c486e8 Mon Sep 17 00:00:00 2001
From: Arvin Schnell <aschnell@suse.com> From: Arvin Schnell <aschnell@suse.com>
Date: Fri, 8 Oct 2021 10:06:24 +0000 Date: Fri, 8 Oct 2021 10:06:24 +0000
Subject: [PATCH 3/5] libparted: add swap flag for DASD label Subject: [PATCH 03/13] libparted: add swap flag for DASD label
Support the swap flag and fix reading flags from disk. Also Support the swap flag and fix reading flags from disk. Also
cleanup code by dropping the 2 flags "raid" and "lvm" from cleanup code by dropping the 2 flags "raid" and "lvm" from
@ -224,5 +224,5 @@ index 0c00c4f..27baad0 100644
dasd_data->system = PARTITION_LINUX; dasd_data->system = PARTITION_LINUX;
PDEBUG; PDEBUG;
-- --
2.35.3 2.37.3

View File

@ -1,7 +1,7 @@
From 9b0a83a747b28bd1b778bdd32616e6f7ea88c84d Mon Sep 17 00:00:00 2001 From 9b0a83a747b28bd1b778bdd32616e6f7ea88c84d Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com> From: "Brian C. Lane" <bcl@redhat.com>
Date: Fri, 13 May 2022 10:02:06 -0700 Date: Fri, 13 May 2022 10:02:06 -0700
Subject: [PATCH 4/5] parted: Reset the filesystem type when changing the Subject: [PATCH 04/13] parted: Reset the filesystem type when changing the
id/uuid id/uuid
Without this the print command keeps showing the type selected with Without this the print command keeps showing the type selected with
@ -26,5 +26,5 @@ index b8a4acf..96da30d 100644
goto error; goto error;
return 1; return 1;
-- --
2.35.3 2.37.3

View File

@ -1,7 +1,7 @@
From ac2a35c2214ef42352d0ddb4f7f4cb77d116e92e Mon Sep 17 00:00:00 2001 From ac2a35c2214ef42352d0ddb4f7f4cb77d116e92e Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com> From: "Brian C. Lane" <bcl@redhat.com>
Date: Fri, 13 May 2022 10:15:41 -0700 Date: Fri, 13 May 2022 10:15:41 -0700
Subject: [PATCH 5/5] tests: t3200-type-change now passes Subject: [PATCH 05/13] tests: t3200-type-change now passes
--- ---
tests/Makefile.am | 3 --- tests/Makefile.am | 3 ---
@ -19,5 +19,5 @@ index 2da653b..1d109d7 100644
SH_LOG_COMPILER = $(SHELL) SH_LOG_COMPILER = $(SHELL)
-- --
2.35.3 2.37.3

View File

@ -0,0 +1,40 @@
From bafa84b25a265ef9eed3872790d52bf56ac42998 Mon Sep 17 00:00:00 2001
From: Arvin Schnell <aschnell@suse.com>
Date: Wed, 27 Jul 2022 09:36:54 +0000
Subject: [PATCH 06/13] libparted: Fix check for availability of _type_id
functions
Fix a copy/paste error. In practice this didn't cause any problems
because the *_set_type_id and *_get_type_id are either both NULL or both
set to the function.
Signed-off-by: Brian C. Lane <bcl@redhat.com>
---
libparted/disk.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libparted/disk.c b/libparted/disk.c
index 22dff36..a961d65 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -1572,7 +1572,7 @@ ped_partition_get_type_id (const PedPartition *part)
if (!_assert_partition_type_id_feature (part->disk->type))
return 0;
- PED_ASSERT (part->disk->type->ops->partition_set_type_id != NULL);
+ PED_ASSERT (part->disk->type->ops->partition_get_type_id != NULL);
return part->disk->type->ops->partition_get_type_id (part);
}
@@ -1608,7 +1608,7 @@ ped_partition_get_type_uuid (const PedPartition *part)
if (!_assert_partition_type_uuid_feature (part->disk->type))
return NULL;
- PED_ASSERT (part->disk->type->ops->partition_set_type_uuid != NULL);
+ PED_ASSERT (part->disk->type->ops->partition_get_type_uuid != NULL);
return part->disk->type->ops->partition_get_type_uuid (part);
}
--
2.37.3

View File

@ -0,0 +1,34 @@
From b16be5ffc8e700df2b6b2545c4b6794cea71b8e7 Mon Sep 17 00:00:00 2001
From: Arvin Schnell <aschnell@suse.com>
Date: Wed, 27 Jul 2022 13:36:08 +0000
Subject: [PATCH 07/13] parted: Simplify code for json output
_PedDiskOps::get_max_primary_partition_count is always available, the
macro PT_op_function_initializers ensures it. So use
ped_disk_get_max_primary_partition_count instead of
_PedDiskOps::get_max_primary_partition_count directly.
Signed-off-by: Brian C. Lane <bcl@redhat.com>
---
parted/parted.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/parted/parted.c b/parted/parted.c
index 96da30d..36c39c7 100644
--- a/parted/parted.c
+++ b/parted/parted.c
@@ -1215,9 +1215,8 @@ _print_disk_info (const PedDevice *dev, const PedDisk *diskp)
ul_jsonwrt_value_u64 (&json, "physical-sector-size", dev->phys_sector_size);
ul_jsonwrt_value_s (&json, "label", pt_name);
if (diskp) {
- if (diskp->type->ops->get_max_primary_partition_count)
- ul_jsonwrt_value_u64 (&json, "max-partitions",
- diskp->type->ops->get_max_primary_partition_count(diskp));
+ ul_jsonwrt_value_u64 (&json, "max-partitions",
+ ped_disk_get_max_primary_partition_count(diskp));
disk_print_flags_json (diskp);
}
} else {
--
2.37.3

View File

@ -1,7 +1,7 @@
From aa690ee275db86d1edb2468bcf31c3d7cf81228e Mon Sep 17 00:00:00 2001 From aa690ee275db86d1edb2468bcf31c3d7cf81228e Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com> From: "Brian C. Lane" <bcl@redhat.com>
Date: Thu, 4 Aug 2022 11:39:09 -0700 Date: Thu, 4 Aug 2022 11:39:09 -0700
Subject: [PATCH] disk.in.h: Remove use of enums with #define Subject: [PATCH 08/13] disk.in.h: Remove use of enums with #define
The preprocessor doesn't evaluate the enum, so it ends up being 0, which The preprocessor doesn't evaluate the enum, so it ends up being 0, which
causes problems for library users like pyparted which try to use the _LAST causes problems for library users like pyparted which try to use the _LAST
@ -55,5 +55,5 @@ index 672c4ee..715637d 100644
struct _PedDisk; struct _PedDisk;
struct _PedPartition; struct _PedPartition;
-- --
2.37.1 2.37.3

View File

@ -1,160 +0,0 @@
From 14cf5be3d322d7e3e81c21a3542ae046a5fe1fda Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com>
Date: Mon, 8 Aug 2022 13:49:09 -0700
Subject: [PATCH 08/10] tests: Add a libparted test for
ped_partition_set_system on gpt
Test the libparted API to make sure the flag is not cleared by calling
ped_partition_set_system.
---
libparted/tests/Makefile.am | 6 ++-
libparted/tests/flags.c | 81 ++++++++++++++++++++++++++++++++++
libparted/tests/t1001-flags.sh | 23 ++++++++++
3 files changed, 108 insertions(+), 2 deletions(-)
create mode 100644 libparted/tests/flags.c
create mode 100755 libparted/tests/t1001-flags.sh
diff --git a/libparted/tests/Makefile.am b/libparted/tests/Makefile.am
index fd5cba5..260b692 100644
--- a/libparted/tests/Makefile.am
+++ b/libparted/tests/Makefile.am
@@ -3,9 +3,10 @@
#
# This file may be modified and/or distributed without restriction.
-TESTS = t1000-label.sh t2000-disk.sh t2100-zerolen.sh t3000-symlink.sh t4000-volser.sh
+TESTS = t1000-label.sh t1001-flags.sh t2000-disk.sh t2100-zerolen.sh \
+ t3000-symlink.sh t4000-volser.sh
EXTRA_DIST = $(TESTS)
-check_PROGRAMS = label disk zerolen symlink volser
+check_PROGRAMS = label disk zerolen symlink volser flags
AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
LDADD = \
@@ -24,6 +25,7 @@ disk_SOURCES = common.h common.c disk.c
zerolen_SOURCES = common.h common.c zerolen.c
symlink_SOURCES = common.h common.c symlink.c
volser_SOURCES = common.h common.c volser.c
+flags_SOURCES = common.h common.c flags.c
# Arrange to symlink to tests/init.sh.
CLEANFILES = init.sh
diff --git a/libparted/tests/flags.c b/libparted/tests/flags.c
new file mode 100644
index 0000000..c83a361
--- /dev/null
+++ b/libparted/tests/flags.c
@@ -0,0 +1,81 @@
+#include <config.h>
+#include <unistd.h>
+
+#include <check.h>
+
+#include <parted/parted.h>
+
+#include "common.h"
+#include "progname.h"
+
+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+static char* temporary_disk;
+
+static void
+create_disk (void)
+{
+ temporary_disk = _create_disk (80 * 1024 * 1024);
+ fail_if (temporary_disk == NULL, "Failed to create temporary disk");
+}
+
+static void
+destroy_disk (void)
+{
+ unlink (temporary_disk);
+ free (temporary_disk);
+}
+
+/* TEST: Test partition type flag on gpt disklabel */
+START_TEST (test_gpt_flag)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDisk* disk = ped_disk_new_fresh (dev, ped_disk_type_get ("gpt"));
+ PedConstraint *constraint = ped_constraint_any (dev);
+ PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ ped_file_system_type_get("ext4"), 2048, 4096);
+ ped_partition_set_flag(part, PED_PARTITION_BIOS_GRUB, 1);
+ // Type should remain set to BIOS_GRUB
+ ped_partition_set_system(part, ped_file_system_type_get("ext4"));
+
+ ped_disk_add_partition (disk, part, constraint);
+ ped_disk_commit (disk);
+ ped_constraint_destroy (constraint);
+
+ // Check flag to confirm it is still set
+ part = ped_disk_get_partition (disk, 1);
+ fail_if (ped_partition_get_flag(part, PED_PARTITION_BIOS_GRUB) != 1, "BIOS_GRUB flag not set");
+
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+}
+END_TEST
+
+int
+main (int argc, char **argv)
+{
+ set_program_name (argv[0]);
+ int number_failed;
+ Suite* suite = suite_create ("Partition Flags");
+ TCase* tcase_gpt = tcase_create ("GPT");
+
+ /* Fail when an exception is raised */
+ ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_checked_fixture (tcase_gpt, create_disk, destroy_disk);
+ tcase_add_test (tcase_gpt, test_gpt_flag);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_gpt, 0);
+ suite_add_tcase (suite, tcase_gpt);
+
+ SRunner* srunner = srunner_create (suite);
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/libparted/tests/t1001-flags.sh b/libparted/tests/t1001-flags.sh
new file mode 100755
index 0000000..60a6248
--- /dev/null
+++ b/libparted/tests/t1001-flags.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+# run the flags unittest
+
+# Copyright (C) 2007-2014, 2019-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+
+flags || fail=1
+
+Exit $fail
--
2.37.1

View File

@ -1,7 +1,7 @@
From 717d39a0a16b6fddfac65cf355a895d04995cdff Mon Sep 17 00:00:00 2001 From 8957382b98fd79bc06dad132ef28a0be8b46ea16 Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com> From: "Brian C. Lane" <bcl@redhat.com>
Date: Mon, 8 Aug 2022 12:04:32 -0700 Date: Mon, 8 Aug 2022 12:04:32 -0700
Subject: [PATCH 07/10] libparted: Fix handling of gpt partition types Subject: [PATCH 09/13] libparted: Fix handling of gpt partition types
This restores the previous behavior by testing the GUID against the list This restores the previous behavior by testing the GUID against the list
of known types and skipping the filesystem GUID reset. Now the sequence of known types and skipping the filesystem GUID reset. Now the sequence
@ -97,5 +97,5 @@ index 0e9e060..8e6a37d 100644
} }
-- --
2.37.1 2.37.3

View File

@ -1,35 +1,90 @@
From 7830678dbe832ea6815d9a31be8cbe3a67f3ed7e Mon Sep 17 00:00:00 2001 From d50b7bf2b66b7b67ee332c1af63bc1f5fdfba7ad Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com> From: "Brian C. Lane" <bcl@redhat.com>
Date: Mon, 8 Aug 2022 15:06:03 -0700 Date: Mon, 8 Aug 2022 13:49:09 -0700
Subject: [PATCH 10/10] tests: Add a libparted test for Subject: [PATCH 10/13] tests: Add a libparted test for
ped_partition_set_system on msdos ped_partition_set_system on gpt
Test the libparted API to make sure the flag is not cleared by calling Test the libparted API to make sure the flag is not cleared by calling
ped_partition_set_system. ped_partition_set_system.
--- ---
libparted/tests/flags.c | 35 +++++++++++++++++++++++++++++++++++ libparted/tests/Makefile.am | 6 ++-
1 file changed, 35 insertions(+) libparted/tests/flags.c | 81 ++++++++++++++++++++++++++++++++++
libparted/tests/t1001-flags.sh | 23 ++++++++++
3 files changed, 108 insertions(+), 2 deletions(-)
create mode 100644 libparted/tests/flags.c
create mode 100755 libparted/tests/t1001-flags.sh
diff --git a/libparted/tests/flags.c b/libparted/tests/flags.c diff --git a/libparted/tests/Makefile.am b/libparted/tests/Makefile.am
index c83a361..c4b290b 100644 index fd5cba5..260b692 100644
--- a/libparted/tests/flags.c --- a/libparted/tests/Makefile.am
+++ b/libparted/tests/flags.c +++ b/libparted/tests/Makefile.am
@@ -54,6 +54,34 @@ START_TEST (test_gpt_flag) @@ -3,9 +3,10 @@
} #
END_TEST # This file may be modified and/or distributed without restriction.
+/* TEST: Test partition type flag on msdos disklabel */ -TESTS = t1000-label.sh t2000-disk.sh t2100-zerolen.sh t3000-symlink.sh t4000-volser.sh
+START_TEST (test_msdos_flag) +TESTS = t1000-label.sh t1001-flags.sh t2000-disk.sh t2100-zerolen.sh \
+ t3000-symlink.sh t4000-volser.sh
EXTRA_DIST = $(TESTS)
-check_PROGRAMS = label disk zerolen symlink volser
+check_PROGRAMS = label disk zerolen symlink volser flags
AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
LDADD = \
@@ -24,6 +25,7 @@ disk_SOURCES = common.h common.c disk.c
zerolen_SOURCES = common.h common.c zerolen.c
symlink_SOURCES = common.h common.c symlink.c
volser_SOURCES = common.h common.c volser.c
+flags_SOURCES = common.h common.c flags.c
# Arrange to symlink to tests/init.sh.
CLEANFILES = init.sh
diff --git a/libparted/tests/flags.c b/libparted/tests/flags.c
new file mode 100644
index 0000000..c83a361
--- /dev/null
+++ b/libparted/tests/flags.c
@@ -0,0 +1,81 @@
+#include <config.h>
+#include <unistd.h>
+
+#include <check.h>
+
+#include <parted/parted.h>
+
+#include "common.h"
+#include "progname.h"
+
+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+static char* temporary_disk;
+
+static void
+create_disk (void)
+{
+ temporary_disk = _create_disk (80 * 1024 * 1024);
+ fail_if (temporary_disk == NULL, "Failed to create temporary disk");
+}
+
+static void
+destroy_disk (void)
+{
+ unlink (temporary_disk);
+ free (temporary_disk);
+}
+
+/* TEST: Test partition type flag on gpt disklabel */
+START_TEST (test_gpt_flag)
+{ +{
+ PedDevice* dev = ped_device_get (temporary_disk); + PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL) + if (dev == NULL)
+ return; + return;
+ +
+ PedDisk* disk = ped_disk_new_fresh (dev, ped_disk_type_get ("msdos")); + PedDisk* disk = ped_disk_new_fresh (dev, ped_disk_type_get ("gpt"));
+ PedConstraint *constraint = ped_constraint_any (dev); + PedConstraint *constraint = ped_constraint_any (dev);
+ PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL, + PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ ped_file_system_type_get("ext4"), 2048, 4096); + ped_file_system_type_get("ext4"), 2048, 4096);
+ ped_partition_set_flag(part, PED_PARTITION_BLS_BOOT, 1); + ped_partition_set_flag(part, PED_PARTITION_BIOS_GRUB, 1);
+ // Type should remain set to BIOS_GRUB + // Type should remain set to BIOS_GRUB
+ ped_partition_set_system(part, ped_file_system_type_get("ext4")); + ped_partition_set_system(part, ped_file_system_type_get("ext4"));
+ +
@ -39,37 +94,67 @@ index c83a361..c4b290b 100644
+ +
+ // Check flag to confirm it is still set + // Check flag to confirm it is still set
+ part = ped_disk_get_partition (disk, 1); + part = ped_disk_get_partition (disk, 1);
+ fail_if (ped_partition_get_flag(part, PED_PARTITION_BLS_BOOT) != 1, "BLS_BOOT flag not set"); + fail_if (ped_partition_get_flag(part, PED_PARTITION_BIOS_GRUB) != 1, "BIOS_GRUB flag not set");
+ +
+ ped_disk_destroy (disk); + ped_disk_destroy (disk);
+ ped_device_destroy (dev); + ped_device_destroy (dev);
+} +}
+END_TEST +END_TEST
+ +
int +int
main (int argc, char **argv) +main (int argc, char **argv)
{ +{
@@ -61,6 +89,7 @@ main (int argc, char **argv) + set_program_name (argv[0]);
int number_failed; + int number_failed;
Suite* suite = suite_create ("Partition Flags"); + Suite* suite = suite_create ("Partition Flags");
TCase* tcase_gpt = tcase_create ("GPT"); + TCase* tcase_gpt = tcase_create ("GPT");
+ TCase* tcase_msdos = tcase_create ("MSDOS");
/* Fail when an exception is raised */
ped_exception_set_handler (_test_exception_handler);
@@ -71,6 +100,12 @@ main (int argc, char **argv)
tcase_set_timeout (tcase_gpt, 0);
suite_add_tcase (suite, tcase_gpt);
+ tcase_add_checked_fixture (tcase_msdos, create_disk, destroy_disk);
+ tcase_add_test (tcase_msdos, test_msdos_flag);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_msdos, 0);
+ suite_add_tcase (suite, tcase_msdos);
+ +
SRunner* srunner = srunner_create (suite); + /* Fail when an exception is raised */
srunner_run_all (srunner, CK_VERBOSE); + ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_checked_fixture (tcase_gpt, create_disk, destroy_disk);
+ tcase_add_test (tcase_gpt, test_gpt_flag);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_gpt, 0);
+ suite_add_tcase (suite, tcase_gpt);
+
+ SRunner* srunner = srunner_create (suite);
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/libparted/tests/t1001-flags.sh b/libparted/tests/t1001-flags.sh
new file mode 100755
index 0000000..60a6248
--- /dev/null
+++ b/libparted/tests/t1001-flags.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+# run the flags unittest
+
+# Copyright (C) 2007-2014, 2019-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+
+flags || fail=1
+
+Exit $fail
-- --
2.37.1 2.37.3

View File

@ -1,7 +1,7 @@
From 9be9067bc5a3641fc890b0d4ba994000941109bf Mon Sep 17 00:00:00 2001 From 4a0e468ed63fff85a1f9b923189f20945b32f4f1 Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com> From: "Brian C. Lane" <bcl@redhat.com>
Date: Mon, 8 Aug 2022 15:02:30 -0700 Date: Mon, 8 Aug 2022 15:02:30 -0700
Subject: [PATCH 09/10] libparted: Fix handling of msdos partition types Subject: [PATCH 11/13] libparted: Fix handling of msdos partition types
This restores the previous behavior by testing the partition type This restores the previous behavior by testing the partition type
against the list of known types and skipping the filesystem type reset. against the list of known types and skipping the filesystem type reset.
@ -105,5 +105,5 @@ index bd7465d..4359276 100644
switch (flag) { switch (flag) {
-- --
2.37.1 2.37.3

View File

@ -0,0 +1,75 @@
From 8f37b28825933af9bbbac7f00cc7e23f916c7018 Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com>
Date: Mon, 8 Aug 2022 15:06:03 -0700
Subject: [PATCH 12/13] tests: Add a libparted test for
ped_partition_set_system on msdos
Test the libparted API to make sure the flag is not cleared by calling
ped_partition_set_system.
---
libparted/tests/flags.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/libparted/tests/flags.c b/libparted/tests/flags.c
index c83a361..c4b290b 100644
--- a/libparted/tests/flags.c
+++ b/libparted/tests/flags.c
@@ -54,6 +54,34 @@ START_TEST (test_gpt_flag)
}
END_TEST
+/* TEST: Test partition type flag on msdos disklabel */
+START_TEST (test_msdos_flag)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDisk* disk = ped_disk_new_fresh (dev, ped_disk_type_get ("msdos"));
+ PedConstraint *constraint = ped_constraint_any (dev);
+ PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ ped_file_system_type_get("ext4"), 2048, 4096);
+ ped_partition_set_flag(part, PED_PARTITION_BLS_BOOT, 1);
+ // Type should remain set to BIOS_GRUB
+ ped_partition_set_system(part, ped_file_system_type_get("ext4"));
+
+ ped_disk_add_partition (disk, part, constraint);
+ ped_disk_commit (disk);
+ ped_constraint_destroy (constraint);
+
+ // Check flag to confirm it is still set
+ part = ped_disk_get_partition (disk, 1);
+ fail_if (ped_partition_get_flag(part, PED_PARTITION_BLS_BOOT) != 1, "BLS_BOOT flag not set");
+
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+}
+END_TEST
+
int
main (int argc, char **argv)
{
@@ -61,6 +89,7 @@ main (int argc, char **argv)
int number_failed;
Suite* suite = suite_create ("Partition Flags");
TCase* tcase_gpt = tcase_create ("GPT");
+ TCase* tcase_msdos = tcase_create ("MSDOS");
/* Fail when an exception is raised */
ped_exception_set_handler (_test_exception_handler);
@@ -71,6 +100,12 @@ main (int argc, char **argv)
tcase_set_timeout (tcase_gpt, 0);
suite_add_tcase (suite, tcase_gpt);
+ tcase_add_checked_fixture (tcase_msdos, create_disk, destroy_disk);
+ tcase_add_test (tcase_msdos, test_msdos_flag);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_msdos, 0);
+ suite_add_tcase (suite, tcase_msdos);
+
SRunner* srunner = srunner_create (suite);
srunner_run_all (srunner, CK_VERBOSE);
--
2.37.3

View File

@ -0,0 +1,351 @@
From 2194035fc0fe678472d279676a13511769f7ef20 Mon Sep 17 00:00:00 2001
From: Arvin Schnell <aschnell@suse.com>
Date: Thu, 28 Jul 2022 09:20:09 +0000
Subject: [PATCH 13/13] show GPT UUIDs in JSON output
Include GPT UUIDs in JSON output.
---
include/parted/disk.in.h | 13 ++++++--
libparted/disk.c | 64 ++++++++++++++++++++++++++++++++++++++++
libparted/labels/gpt.c | 40 ++++++++++++++++++++++++-
parted/parted.c | 18 +++++++++++
tests/t0800-json-gpt.sh | 7 +++--
tests/t0900-type-gpt.sh | 8 +++--
6 files changed, 142 insertions(+), 8 deletions(-)
diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h
index 715637d..f649bcc 100644
--- a/include/parted/disk.in.h
+++ b/include/parted/disk.in.h
@@ -98,10 +98,12 @@ enum _PedDiskTypeFeature {
PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
PED_DISK_TYPE_PARTITION_TYPE_ID=4, /**< supports partition type-ids */
PED_DISK_TYPE_PARTITION_TYPE_UUID=8, /**< supports partition type-uuids */
+ PED_DISK_TYPE_DISK_UUID=16, /**< supports disk uuids */
+ PED_DISK_TYPE_PARTITION_UUID=32, /**< supports partition uuids */
};
// NOTE: DO NOT define using enums
-#define PED_DISK_TYPE_FIRST_FEATURE 1 // PED_DISK_TYPE_EXTENDED
-#define PED_DISK_TYPE_LAST_FEATURE 8 // PED_DISK_TYPE_PARTITION_TYPE_UUID
+#define PED_DISK_TYPE_FIRST_FEATURE 1 // PED_DISK_TYPE_EXTENDED
+#define PED_DISK_TYPE_LAST_FEATURE 32 // PED_DISK_TYPE_PARTITION_UUID
struct _PedDisk;
struct _PedPartition;
@@ -228,6 +230,7 @@ struct _PedDiskOps {
int (*disk_is_flag_available) (
const PedDisk *disk,
PedDiskFlag flag);
+ uint8_t* (*disk_get_uuid) (const PedDisk* disk);
/** \todo add label guessing op here */
/* partition operations */
@@ -260,6 +263,8 @@ struct _PedDiskOps {
int (*partition_set_type_uuid) (PedPartition* part, const uint8_t* uuid);
uint8_t* (*partition_get_type_uuid) (const PedPartition* part);
+ uint8_t* (*partition_get_uuid) (const PedPartition* part);
+
int (*partition_align) (PedPartition* part,
const PedConstraint* constraint);
int (*partition_enumerate) (PedPartition* part);
@@ -331,6 +336,8 @@ extern int ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state);
extern int ped_disk_get_flag(const PedDisk *disk, PedDiskFlag flag);
extern int ped_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag);
+extern uint8_t* ped_disk_get_uuid (const PedDisk* disk);
+
extern const char *ped_disk_flag_get_name(PedDiskFlag flag);
extern PedDiskFlag ped_disk_flag_get_by_name(const char *name);
extern PedDiskFlag ped_disk_flag_next(PedDiskFlag flag) _GL_ATTRIBUTE_CONST;
@@ -367,6 +374,8 @@ extern uint8_t ped_partition_get_type_id (const PedPartition* part);
extern int ped_partition_set_type_uuid (PedPartition* part, const uint8_t* uuid);
extern uint8_t* ped_partition_get_type_uuid (const PedPartition* part);
+extern uint8_t* ped_partition_get_uuid (const PedPartition* part);
+
extern int ped_partition_is_busy (const PedPartition* part);
extern char* ped_partition_get_path (const PedPartition* part);
diff --git a/libparted/disk.c b/libparted/disk.c
index a961d65..0ed3d91 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -886,6 +886,37 @@ ped_disk_flag_next(PedDiskFlag flag)
return (flag + 1) % (PED_DISK_LAST_FLAG + 1);
}
+static int
+_assert_disk_uuid_feature (const PedDiskType* disk_type)
+{
+ if (!ped_disk_type_check_feature (
+ disk_type, PED_DISK_TYPE_DISK_UUID)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "%s disk labels do not support disk uuids.",
+ disk_type->name);
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * Get the uuid of the disk \p disk. This will only work if the disk label
+ * supports it.
+ */
+uint8_t*
+ped_disk_get_uuid (const PedDisk *disk)
+{
+ PED_ASSERT (disk != NULL);
+
+ if (!_assert_disk_uuid_feature (disk->type))
+ return NULL;
+
+ PED_ASSERT (disk->type->ops->disk_get_uuid != NULL);
+ return disk->type->ops->disk_get_uuid (disk);
+}
+
/**
* \internal We turned a really nasty bureaucracy problem into an elegant maths
* problem :-) Basically, there are some constraints to a partition's
@@ -1488,6 +1519,21 @@ _assert_partition_type_uuid_feature (const PedDiskType* disk_type)
return 1;
}
+static int
+_assert_partition_uuid_feature (const PedDiskType* disk_type)
+{
+ if (!ped_disk_type_check_feature (
+ disk_type, PED_DISK_TYPE_PARTITION_UUID)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "%s disk labels do not support partition uuids.",
+ disk_type->name);
+ return 0;
+ }
+ return 1;
+}
+
/**
* Sets the name of a partition.
*
@@ -1612,6 +1658,24 @@ ped_partition_get_type_uuid (const PedPartition *part)
return part->disk->type->ops->partition_get_type_uuid (part);
}
+/**
+ * Get the uuid of the partition \p part. This will only work if the disk label
+ * supports it.
+ */
+uint8_t*
+ped_partition_get_uuid (const PedPartition *part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!_assert_partition_uuid_feature (part->disk->type))
+ return NULL;
+
+ PED_ASSERT (part->disk->type->ops->partition_get_uuid != NULL);
+ return part->disk->type->ops->partition_get_uuid (part);
+}
+
/** @} */
/**
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
index 8e6a37d..1993863 100644
--- a/libparted/labels/gpt.c
+++ b/libparted/labels/gpt.c
@@ -1576,6 +1576,24 @@ gpt_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag)
}
}
+static uint8_t*
+gpt_disk_get_uuid (const PedDisk *disk)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+
+ efi_guid_t uuid = gpt_disk_data->uuid;
+
+ /* uuid is always LE, while uint8_t is always kind of BE */
+
+ uuid.time_low = PED_SWAP32(uuid.time_low);
+ uuid.time_mid = PED_SWAP16(uuid.time_mid);
+ uuid.time_hi_and_version = PED_SWAP16(uuid.time_hi_and_version);
+
+ uint8_t *buf = ped_malloc(sizeof (uuid_t));
+ memcpy(buf, &uuid, sizeof (uuid_t));
+ return buf;
+}
+
static int
gpt_disk_get_flag (const PedDisk *disk, PedDiskFlag flag)
{
@@ -1764,6 +1782,23 @@ gpt_partition_get_type_uuid (const PedPartition *part)
return buf;
}
+static uint8_t*
+gpt_partition_get_uuid (const PedPartition *part)
+{
+ const GPTPartitionData *gpt_part_data = part->disk_specific;
+
+ efi_guid_t uuid = gpt_part_data->uuid;
+
+ /* uuid is always LE, while uint8_t is always kind of BE */
+
+ uuid.time_low = PED_SWAP32(uuid.time_low);
+ uuid.time_mid = PED_SWAP16(uuid.time_mid);
+ uuid.time_hi_and_version = PED_SWAP16(uuid.time_hi_and_version);
+
+ uint8_t *buf = ped_malloc(sizeof (uuid_t));
+ memcpy(buf, &uuid, sizeof (uuid_t));
+ return buf;
+}
static int
gpt_get_max_primary_partition_count (const PedDisk *disk)
@@ -1864,9 +1899,11 @@ static PedDiskOps gpt_disk_ops =
partition_get_type_id: NULL,
partition_set_type_uuid: gpt_partition_set_type_uuid,
partition_get_type_uuid: gpt_partition_get_type_uuid,
+ partition_get_uuid: gpt_partition_get_uuid,
disk_set_flag: gpt_disk_set_flag,
disk_get_flag: gpt_disk_get_flag,
disk_is_flag_available: gpt_disk_is_flag_available,
+ disk_get_uuid: gpt_disk_get_uuid,
PT_op_function_initializers (gpt)
};
@@ -1876,7 +1913,8 @@ static PedDiskType gpt_disk_type =
next: NULL,
name: "gpt",
ops: &gpt_disk_ops,
- features: PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_PARTITION_TYPE_UUID
+ features: PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_PARTITION_TYPE_UUID |
+ PED_DISK_TYPE_DISK_UUID | PED_DISK_TYPE_PARTITION_UUID
};
void
diff --git a/parted/parted.c b/parted/parted.c
index 36c39c7..84187b7 100644
--- a/parted/parted.c
+++ b/parted/parted.c
@@ -1215,6 +1215,14 @@ _print_disk_info (const PedDevice *dev, const PedDisk *diskp)
ul_jsonwrt_value_u64 (&json, "physical-sector-size", dev->phys_sector_size);
ul_jsonwrt_value_s (&json, "label", pt_name);
if (diskp) {
+ bool has_disk_uuid = ped_disk_type_check_feature (diskp->type, PED_DISK_TYPE_DISK_UUID);
+ if (has_disk_uuid) {
+ uint8_t* uuid = ped_disk_get_uuid (diskp);
+ static char buf[UUID_STR_LEN];
+ uuid_unparse_lower (uuid, buf);
+ ul_jsonwrt_value_s (&json, "uuid", buf);
+ free (uuid);
+ }
ul_jsonwrt_value_u64 (&json, "max-partitions",
ped_disk_get_max_primary_partition_count(diskp));
disk_print_flags_json (diskp);
@@ -1360,6 +1368,8 @@ do_print (PedDevice** dev, PedDisk** diskp)
PED_DISK_TYPE_PARTITION_TYPE_ID);
bool has_type_uuid = ped_disk_type_check_feature ((*diskp)->type,
PED_DISK_TYPE_PARTITION_TYPE_UUID);
+ bool has_part_uuid = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_PARTITION_UUID);
PedPartition* part;
if (opt_output_mode == HUMAN) {
@@ -1512,6 +1522,14 @@ do_print (PedDevice** dev, PedDisk** diskp)
free (type_uuid);
}
+ if (has_part_uuid) {
+ uint8_t* uuid = ped_partition_get_uuid (part);
+ static char buf[UUID_STR_LEN];
+ uuid_unparse_lower (uuid, buf);
+ ul_jsonwrt_value_s (&json, "uuid", buf);
+ free (uuid);
+ }
+
if (has_name) {
name = ped_partition_get_name (part);
if (strcmp (name, "") != 0)
diff --git a/tests/t0800-json-gpt.sh b/tests/t0800-json-gpt.sh
index 354c0bd..f6a3fb9 100755
--- a/tests/t0800-json-gpt.sh
+++ b/tests/t0800-json-gpt.sh
@@ -32,8 +32,8 @@ parted --script "$dev" mkpart "test1" ext4 10% 20% > out 2>&1 || fail=1
parted --script "$dev" mkpart "test2" xfs 20% 60% > out 2>&1 || fail=1
parted --script "$dev" set 2 raid on > out 2>&1 || fail=1
-# print with json format
-parted --script --json "$dev" unit s print free > out 2>&1 || fail=1
+# print with json format, replace non-deterministic uuids
+parted --script --json "$dev" unit s print free | sed -E 's/"uuid": "[0-9a-f-]{36}"/"uuid": "<uuid>"/' > out 2>&1 || fail=1
cat <<EOF > exp || fail=1
{
@@ -45,6 +45,7 @@ cat <<EOF > exp || fail=1
"logical-sector-size": 512,
"physical-sector-size": 512,
"label": "gpt",
+ "uuid": "<uuid>",
"max-partitions": 128,
"flags": [
"pmbr_boot"
@@ -63,6 +64,7 @@ cat <<EOF > exp || fail=1
"size": "10240s",
"type": "primary",
"type-uuid": "0fc63daf-8483-4772-8e79-3d69d8477de4",
+ "uuid": "<uuid>",
"name": "test1"
},{
"number": 2,
@@ -71,6 +73,7 @@ cat <<EOF > exp || fail=1
"size": "40960s",
"type": "primary",
"type-uuid": "a19d880f-05fc-4d3b-a006-743f0f84911e",
+ "uuid": "<uuid>",
"name": "test2",
"flags": [
"raid"
diff --git a/tests/t0900-type-gpt.sh b/tests/t0900-type-gpt.sh
index 2014820..03febba 100755
--- a/tests/t0900-type-gpt.sh
+++ b/tests/t0900-type-gpt.sh
@@ -32,8 +32,8 @@ parted --script "$dev" mkpart "''" "linux-swap" 10% 20% > out 2>&1 || fail=1
# set type-uuid
parted --script "$dev" type 1 "deadfd6d-a4ab-43c4-84e5-0933c84b4f4f" || fail=1
-# print with json format
-parted --script --json "$dev" unit s print > out 2>&1 || fail=1
+# print with json format, replace non-deterministic uuids
+parted --script --json "$dev" unit s print | sed -E 's/"uuid": "[0-9a-f-]{36}"/"uuid": "<uuid>"/' > out 2>&1 || fail=1
cat <<EOF > exp || fail=1
{
@@ -45,6 +45,7 @@ cat <<EOF > exp || fail=1
"logical-sector-size": 512,
"physical-sector-size": 512,
"label": "gpt",
+ "uuid": "<uuid>",
"max-partitions": 128,
"partitions": [
{
@@ -53,7 +54,8 @@ cat <<EOF > exp || fail=1
"end": "20479s",
"size": "10240s",
"type": "primary",
- "type-uuid": "deadfd6d-a4ab-43c4-84e5-0933c84b4f4f"
+ "type-uuid": "deadfd6d-a4ab-43c4-84e5-0933c84b4f4f",
+ "uuid": "<uuid>"
}
]
}
--
2.37.3

View File

@ -0,0 +1,145 @@
From 55e4775c989af42d629401b9aa22c60ba2993e7d Mon Sep 17 00:00:00 2001
From: Mike Fleetwood <mike.fleetwood@googlemail.com>
Date: Tue, 13 Dec 2022 12:53:07 +0000
Subject: [PATCH] gpt: Add no_automount partition flag
Add user requested support for GPT partition type attribute bit 63 [1]
so the no-auto flag in the systemd originated Discoverable Partitions
Specification [2] can be manipulated. The UEFI specification [3] says
partition attribute bits 48 to 63 are partition type specific, however
the DPS [2] and Microsoft [4] use the bit 63 to mean no automounting /
assign no drive letter and apply it to multiple partition types so don't
restrict its application.
[1] Request for GPT partition attribute bit 63 "no automount" editing
support
https://gitlab.gnome.org/GNOME/gparted/-/issues/214
[2] The Discoverable Partitions Specification (DPS),
Partition Attribute Flags
https://uapi-group.org/specifications/specs/discoverable_partitions_specification/
[3] UEFI Specification, version 2.8,
Table 24. Defined GPT Partition Entry - Attributes
https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf
[4] CREATE_PARTITION_PARAMETERS structure (vds.h)
https://learn.microsoft.com/en-gb/windows/win32/api/vds/ns-vds-create_partition_parameters
Signed-off-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Signed-off-by: Brian C. Lane <bcl@redhat.com>
---
NEWS | 2 ++
doc/C/parted.8 | 2 +-
include/parted/disk.in.h | 3 ++-
libparted/disk.c | 2 ++
libparted/labels/gpt.c | 12 ++++++++++--
5 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/NEWS b/NEWS
index 099f8bd..ac759fe 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,8 @@ GNU parted NEWS -*- outline -*-
** New Features
+ Support GPT partition attribute bit 63 as no_automount flag.
+
Add type commands to set type-id on MS-DOS and type-uuid on GPT.
* Noteworthy changes in release 3.5 (2022-04-18) [stable]
diff --git a/doc/C/parted.8 b/doc/C/parted.8
index ab34be7..3069c33 100644
--- a/doc/C/parted.8
+++ b/doc/C/parted.8
@@ -120,7 +120,7 @@ or an LVM logical volume if necessary.
Change the state of the \fIflag\fP on \fIpartition\fP to \fIstate\fP.
Supported flags are: "boot", "root", "swap", "hidden", "raid", "lvm", "lba",
"legacy_boot", "irst", "msftres", "esp", "chromeos_kernel", "bls_boot", "linux-home",
-"bios_grub", and "palo".
+"no_automount", "bios_grub", and "palo".
\fIstate\fP should be either "on" or "off".
.TP
.B unit \fIunit\fP
diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h
index f649bcc..402d78a 100644
--- a/include/parted/disk.in.h
+++ b/include/parted/disk.in.h
@@ -88,10 +88,11 @@ enum _PedPartitionFlag {
PED_PARTITION_CHROMEOS_KERNEL=19,
PED_PARTITION_BLS_BOOT=20,
PED_PARTITION_LINUX_HOME=21,
+ PED_PARTITION_NO_AUTOMOUNT=22,
};
// NOTE: DO NOT define using enums
#define PED_PARTITION_FIRST_FLAG 1 // PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG 21 // PED_PARTITION_LINUX_HOME
+#define PED_PARTITION_LAST_FLAG 22 // PED_PARTITION_NO_AUTOMOUNT
enum _PedDiskTypeFeature {
PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
diff --git a/libparted/disk.c b/libparted/disk.c
index 0ed3d91..45f35fd 100644
--- a/libparted/disk.c
+++ b/libparted/disk.c
@@ -2579,6 +2579,8 @@ ped_partition_flag_get_name (PedPartitionFlag flag)
return N_("bls_boot");
case PED_PARTITION_LINUX_HOME:
return N_("linux-home");
+ case PED_PARTITION_NO_AUTOMOUNT:
+ return N_("no_automount");
default:
ped_exception_throw (
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
index 1993863..780fb70 100644
--- a/libparted/labels/gpt.c
+++ b/libparted/labels/gpt.c
@@ -252,7 +252,8 @@ struct __attribute__ ((packed)) _GuidPartitionEntryAttributes_t
uint64_t NoBlockIOProtocol:1;
uint64_t LegacyBIOSBootable:1;
uint64_t Reserved:45;
- uint64_t GuidSpecific:16;
+ uint64_t GuidSpecific:15;
+ uint64_t NoAutomount:1;
#else
# warning "Using crippled partition entry type"
uint32_t RequiredToFunction:1;
@@ -260,7 +261,8 @@ struct __attribute__ ((packed)) _GuidPartitionEntryAttributes_t
uint32_t LegacyBIOSBootable:1;
uint32_t Reserved:30;
uint32_t LOST:5;
- uint32_t GuidSpecific:16;
+ uint32_t GuidSpecific:15;
+ uint32_t NoAutomount:1;
#endif
};
@@ -1637,6 +1639,9 @@ gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
case PED_PARTITION_LEGACY_BOOT:
gpt_part_data->attributes.LegacyBIOSBootable = state;
return 1;
+ case PED_PARTITION_NO_AUTOMOUNT:
+ gpt_part_data->attributes.NoAutomount = state;
+ return 1;
case PED_PARTITION_ROOT:
case PED_PARTITION_LBA:
default:
@@ -1662,6 +1667,8 @@ gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag)
return gpt_part_data->attributes.RequiredToFunction;
case PED_PARTITION_LEGACY_BOOT:
return gpt_part_data->attributes.LegacyBIOSBootable;
+ case PED_PARTITION_NO_AUTOMOUNT:
+ return gpt_part_data->attributes.NoAutomount;
case PED_PARTITION_LBA:
case PED_PARTITION_ROOT:
default:
@@ -1681,6 +1688,7 @@ gpt_partition_is_flag_available (const PedPartition *part,
{
case PED_PARTITION_HIDDEN:
case PED_PARTITION_LEGACY_BOOT:
+ case PED_PARTITION_NO_AUTOMOUNT:
return 1;
case PED_PARTITION_ROOT:
case PED_PARTITION_LBA:
--
2.38.1

View File

@ -0,0 +1,54 @@
From caa588269709659d5cf51bf64c559e193f371de4 Mon Sep 17 00:00:00 2001
From: "Brian C. Lane" <bcl@redhat.com>
Date: Tue, 13 Dec 2022 14:38:24 -0800
Subject: [PATCH] tests: XFS requires a minimum size of 300M
---
tests/t1700-probe-fs.sh | 3 ++-
tests/t4100-dvh-partition-limits.sh | 2 +-
tests/t4100-msdos-partition-limits.sh | 2 +-
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh
index d33606e..f8af74e 100755
--- a/tests/t1700-probe-fs.sh
+++ b/tests/t1700-probe-fs.sh
@@ -42,7 +42,8 @@ for type in ext2 ext3 ext4 btrfs xfs nilfs2 ntfs vfat hfsplus udf f2fs; do
# create an $type file system, creation failures are not parted bugs,
# skip the filesystem instead of failing the test.
if [ "$type" = "xfs" ]; then
- mkfs.xfs -ssize=$ss -dfile,name=$dev,size=${n_sectors}s || { warn_ "$ME: mkfs.$type failed, skipping"; continue; }
+ # XFS requires at least 300M which is > 1024 sectors with 8192b sector size
+ mkfs.xfs -ssize=$ss -dfile,name=$dev,size=300m || { warn_ "$ME: mkfs.$type failed, skipping"; continue; }
else
dd if=/dev/null of=$dev bs=$ss seek=$n_sectors >/dev/null || { warn_ "$ME: dd failed, skipping $type"; continue; }
mkfs.$type $force $dev || { warn_ "$ME: mkfs.$type failed skipping"; continue; }
diff --git a/tests/t4100-dvh-partition-limits.sh b/tests/t4100-dvh-partition-limits.sh
index d3798d2..a5b3516 100755
--- a/tests/t4100-dvh-partition-limits.sh
+++ b/tests/t4100-dvh-partition-limits.sh
@@ -37,7 +37,7 @@ mp=`pwd`/mount-point
n=4096
# create an XFS file system
-mkfs.xfs -dfile,name=$fs,size=100m || fail=1
+mkfs.xfs -dfile,name=$fs,size=300m || fail=1
mkdir "$mp" || fail=1
# Unmount upon interrupt, failure, etc., as well as upon normal completion.
diff --git a/tests/t4100-msdos-partition-limits.sh b/tests/t4100-msdos-partition-limits.sh
index b591123..09267b5 100755
--- a/tests/t4100-msdos-partition-limits.sh
+++ b/tests/t4100-msdos-partition-limits.sh
@@ -37,7 +37,7 @@ mp=`pwd`/mount-point
n=4096
# create an XFS file system
-mkfs.xfs -dfile,name=$fs,size=100m || fail=1
+mkfs.xfs -dfile,name=$fs,size=300m || fail=1
mkdir "$mp" || fail=1
# Unmount upon interrupt, failure, etc., as well as upon normal completion.
--
2.38.1

View File

@ -1,7 +1,7 @@
Summary: The GNU disk partition manipulation program Summary: The GNU disk partition manipulation program
Name: parted Name: parted
Version: 3.5 Version: 3.5
Release: 6%{?dist} Release: 7%{?dist}
License: GPLv3+ License: GPLv3+
URL: http://www.gnu.org/software/parted URL: http://www.gnu.org/software/parted
@ -16,12 +16,16 @@ Patch0002: 0002-parted-add-type-command.patch
Patch0003: 0003-libparted-add-swap-flag-for-DASD-label.patch Patch0003: 0003-libparted-add-swap-flag-for-DASD-label.patch
Patch0004: 0004-parted-Reset-the-filesystem-type-when-changing-the-i.patch Patch0004: 0004-parted-Reset-the-filesystem-type-when-changing-the-i.patch
Patch0005: 0005-tests-t3200-type-change-now-passes.patch Patch0005: 0005-tests-t3200-type-change-now-passes.patch
Patch0006: 0006-disk.in.h-Remove-use-of-enums-with-define.patch Patch0006: 0006-libparted-Fix-check-for-availability-of-_type_id-fun.patch
Patch0007: 0007-libparted-Fix-handling-of-gpt-partition-types.patch Patch0007: 0007-parted-Simplify-code-for-json-output.patch
Patch0008: 0008-tests-Add-a-libparted-test-for-ped_partition_set_sys.patch Patch0008: 0008-disk.in.h-Remove-use-of-enums-with-define.patch
Patch0009: 0009-libparted-Fix-handling-of-msdos-partition-types.patch Patch0009: 0009-libparted-Fix-handling-of-gpt-partition-types.patch
Patch0010: 0010-tests-Add-a-libparted-test-for-ped_partition_set_sys.patch Patch0010: 0010-tests-Add-a-libparted-test-for-ped_partition_set_sys.patch
Patch0011: 0011-libparted-Fix-handling-of-msdos-partition-types.patch
Patch0012: 0012-tests-Add-a-libparted-test-for-ped_partition_set_sys.patch
Patch0013: 0013-show-GPT-UUIDs-in-JSON-output.patch
Patch0014: 0014-gpt-Add-no_automount-partition-flag.patch
Patch0015: 0015-tests-XFS-requires-a-minimum-size-of-300M.patch
BuildRequires: gcc BuildRequires: gcc
BuildRequires: e2fsprogs-devel BuildRequires: e2fsprogs-devel
@ -126,7 +130,14 @@ make check
%changelog %changelog
* Mon Aug 08 2022 Brian C. Lane <bcl@redhat.com> - 3.5-5.bcl.1 * Wed Dec 14 2022 Brian C. Lane <bcl@redhat.com> - 3.5-7
- libparted: Fix handling of msdos partition types
- tests: Add a libparted test for ped_partition_set_system on msdos
- parted: Add display of GPT UUIDs in JSON output
- Add no_automount flag support
- increase xfs size to 300M
* Mon Aug 08 2022 Brian C. Lane <bcl@redhat.com> - 3.5-6
- Fix ped_partition_set_system handling of existing flags - Fix ped_partition_set_system handling of existing flags
* Thu Aug 04 2022 Brian C. Lane <bcl@redhat.com> - 3.5-5 * Thu Aug 04 2022 Brian C. Lane <bcl@redhat.com> - 3.5-5