- 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:
parent
8298c363a4
commit
7fc0182f62
@ -1,7 +1,7 @@
|
||||
From cec533a00a2cd0b64a7a0f5debc26554f6025831 Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
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.
|
||||
* .prev-version: Record previous version.
|
||||
@ -46,5 +46,5 @@ index d5fdd80..11fa51b 100644
|
||||
include $(srcdir)/dist-check.mk
|
||||
|
||||
--
|
||||
2.35.3
|
||||
2.37.3
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 61b3a9733c0e0a79ccc43096642d378c8706add6 Mon Sep 17 00:00:00 2001
|
||||
From: Arvin Schnell <aschnell@suse.com>
|
||||
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
|
||||
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
|
||||
--
|
||||
2.35.3
|
||||
2.37.3
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 29ffc6a1f285f48ac0b9efa7299373e486c486e8 Mon Sep 17 00:00:00 2001
|
||||
From: Arvin Schnell <aschnell@suse.com>
|
||||
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
|
||||
cleanup code by dropping the 2 flags "raid" and "lvm" from
|
||||
@ -224,5 +224,5 @@ index 0c00c4f..27baad0 100644
|
||||
dasd_data->system = PARTITION_LINUX;
|
||||
PDEBUG;
|
||||
--
|
||||
2.35.3
|
||||
2.37.3
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 9b0a83a747b28bd1b778bdd32616e6f7ea88c84d Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
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
|
||||
|
||||
Without this the print command keeps showing the type selected with
|
||||
@ -26,5 +26,5 @@ index b8a4acf..96da30d 100644
|
||||
goto error;
|
||||
return 1;
|
||||
--
|
||||
2.35.3
|
||||
2.37.3
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ac2a35c2214ef42352d0ddb4f7f4cb77d116e92e Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
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 ---
|
||||
@ -19,5 +19,5 @@ index 2da653b..1d109d7 100644
|
||||
SH_LOG_COMPILER = $(SHELL)
|
||||
|
||||
--
|
||||
2.35.3
|
||||
2.37.3
|
||||
|
||||
|
@ -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
|
||||
|
34
0007-parted-Simplify-code-for-json-output.patch
Normal file
34
0007-parted-Simplify-code-for-json-output.patch
Normal 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
|
||||
|
@ -1,7 +1,7 @@
|
||||
From aa690ee275db86d1edb2468bcf31c3d7cf81228e Mon Sep 17 00:00:00 2001
|
||||
From: "Brian C. Lane" <bcl@redhat.com>
|
||||
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
|
||||
causes problems for library users like pyparted which try to use the _LAST
|
||||
@ -55,5 +55,5 @@ index 672c4ee..715637d 100644
|
||||
struct _PedDisk;
|
||||
struct _PedPartition;
|
||||
--
|
||||
2.37.1
|
||||
2.37.3
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
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
|
||||
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
|
||||
|
@ -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>
|
||||
Date: Mon, 8 Aug 2022 15:06:03 -0700
|
||||
Subject: [PATCH 10/10] tests: Add a libparted test for
|
||||
ped_partition_set_system on msdos
|
||||
Date: Mon, 8 Aug 2022 13:49:09 -0700
|
||||
Subject: [PATCH 10/13] 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/flags.c | 35 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 35 insertions(+)
|
||||
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/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
|
||||
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.
|
||||
|
||||
+/* TEST: Test partition type flag on msdos disklabel */
|
||||
+START_TEST (test_msdos_flag)
|
||||
-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 ("msdos"));
|
||||
+ 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_BLS_BOOT, 1);
|
||||
+ 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"));
|
||||
+
|
||||
@ -39,37 +94,67 @@ index c83a361..c4b290b 100644
|
||||
+
|
||||
+ // 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");
|
||||
+ 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)
|
||||
{
|
||||
@@ -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);
|
||||
+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");
|
||||
+
|
||||
SRunner* srunner = srunner_create (suite);
|
||||
srunner_run_all (srunner, CK_VERBOSE);
|
||||
|
||||
+ /* 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
|
||||
2.37.3
|
||||
|
||||
|
@ -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>
|
||||
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
|
||||
against the list of known types and skipping the filesystem type reset.
|
||||
@ -105,5 +105,5 @@ index bd7465d..4359276 100644
|
||||
|
||||
switch (flag) {
|
||||
--
|
||||
2.37.1
|
||||
2.37.3
|
||||
|
@ -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
|
||||
|
351
0013-show-GPT-UUIDs-in-JSON-output.patch
Normal file
351
0013-show-GPT-UUIDs-in-JSON-output.patch
Normal 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
|
||||
|
145
0014-gpt-Add-no_automount-partition-flag.patch
Normal file
145
0014-gpt-Add-no_automount-partition-flag.patch
Normal 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
|
||||
|
54
0015-tests-XFS-requires-a-minimum-size-of-300M.patch
Normal file
54
0015-tests-XFS-requires-a-minimum-size-of-300M.patch
Normal 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
|
||||
|
25
parted.spec
25
parted.spec
@ -1,7 +1,7 @@
|
||||
Summary: The GNU disk partition manipulation program
|
||||
Name: parted
|
||||
Version: 3.5
|
||||
Release: 6%{?dist}
|
||||
Release: 7%{?dist}
|
||||
License: GPLv3+
|
||||
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
|
||||
Patch0004: 0004-parted-Reset-the-filesystem-type-when-changing-the-i.patch
|
||||
Patch0005: 0005-tests-t3200-type-change-now-passes.patch
|
||||
Patch0006: 0006-disk.in.h-Remove-use-of-enums-with-define.patch
|
||||
Patch0007: 0007-libparted-Fix-handling-of-gpt-partition-types.patch
|
||||
Patch0008: 0008-tests-Add-a-libparted-test-for-ped_partition_set_sys.patch
|
||||
Patch0009: 0009-libparted-Fix-handling-of-msdos-partition-types.patch
|
||||
Patch0006: 0006-libparted-Fix-check-for-availability-of-_type_id-fun.patch
|
||||
Patch0007: 0007-parted-Simplify-code-for-json-output.patch
|
||||
Patch0008: 0008-disk.in.h-Remove-use-of-enums-with-define.patch
|
||||
Patch0009: 0009-libparted-Fix-handling-of-gpt-partition-types.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: e2fsprogs-devel
|
||||
@ -126,7 +130,14 @@ make check
|
||||
|
||||
|
||||
%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
|
||||
|
||||
* Thu Aug 04 2022 Brian C. Lane <bcl@redhat.com> - 3.5-5
|
||||
|
Loading…
Reference in New Issue
Block a user